bitgo 53.2.0 → 53.3.0

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.
@@ -3247,6 +3247,22 @@ describe('V2 Wallet:', function () {
3247
3247
  args[0].wrapParams.should.deepEqual(wrapParams);
3248
3248
  args[1].should.equal('full');
3249
3249
  });
3250
+ it('should call prebuildTxWithIntent with the correct params for unwrap', async function () {
3251
+ const unwrapParams = { tokenName: 'hteth:cusdt', amount: '1000000' };
3252
+ const prebuildTxWithIntent = sandbox.stub(sdk_core_1.ECDSAUtils.EcdsaUtils.prototype, 'prebuildTxWithIntent');
3253
+ prebuildTxWithIntent.resolves(txRequestFull);
3254
+ await tssEthWallet.prebuildTransaction({
3255
+ reqId,
3256
+ type: 'unwrap',
3257
+ unwrapParams,
3258
+ });
3259
+ sinon.assert.calledOnce(prebuildTxWithIntent);
3260
+ const args = prebuildTxWithIntent.args[0];
3261
+ args[0].should.not.have.property('recipients');
3262
+ args[0].intentType.should.equal('unwrap');
3263
+ args[0].unwrapParams.should.deepEqual(unwrapParams);
3264
+ args[1].should.equal('full');
3265
+ });
3250
3266
  it('should call prebuildTxWithIntent with the correct params for eth fillNonce for receive address nonce filling tx', async function () {
3251
3267
  const feeOptions = {
3252
3268
  maxFeePerGas: 3000000000,
@@ -4070,6 +4086,193 @@ describe('V2 Wallet:', function () {
4070
4086
  .should.be.rejectedWith('keychain does not have property encryptedPrv');
4071
4087
  });
4072
4088
  });
4089
+ describe('SOL message signing (UTF-8 string path)', function () {
4090
+ const solMessageRaw = 'hello from solana';
4091
+ const solMessageEncoded = Buffer.from(solMessageRaw, 'utf8').toString('hex');
4092
+ const solSignerAddress = 'J8TEPFqNJjFTp2NGHuWgijyuF45Lrzo2feZ61kS7yY2q';
4093
+ const solTxHash = 'rrrsss1b';
4094
+ const txRequestForSolMessageSigning = {
4095
+ txRequestId: reqId.toString(),
4096
+ transactions: [],
4097
+ intent: {
4098
+ intentType: 'signMessage',
4099
+ },
4100
+ date: new Date().toISOString(),
4101
+ latest: true,
4102
+ state: 'pendingUserSignature',
4103
+ userId: 'userId',
4104
+ walletType: 'hot',
4105
+ policiesChecked: false,
4106
+ version: 1,
4107
+ walletId: 'walletId',
4108
+ unsignedTxs: [],
4109
+ unsignedMessages: [],
4110
+ messages: [
4111
+ {
4112
+ state: 'signed',
4113
+ messageRaw: solMessageRaw,
4114
+ derivationPath: 'm/0',
4115
+ signatureShares: [{ from: sdk_core_1.SignatureShareType.USER, to: sdk_core_1.SignatureShareType.USER, share: '' }],
4116
+ txHash: solTxHash,
4117
+ messageEncoded: solMessageEncoded,
4118
+ },
4119
+ ],
4120
+ };
4121
+ const solExpectedSignedMessage = {
4122
+ txRequestId: reqId.toString(),
4123
+ txHash: solTxHash,
4124
+ signature: solTxHash,
4125
+ messageRaw: solMessageRaw,
4126
+ coin: 'tsol',
4127
+ messageEncoded: solMessageEncoded,
4128
+ };
4129
+ const solMessage = {
4130
+ messageRaw: solMessageRaw,
4131
+ messageStandardType: sdk_core_1.MessageStandardType.SIMPLE,
4132
+ signerAddress: solSignerAddress,
4133
+ };
4134
+ let signTxRequestForMessageStub;
4135
+ beforeEach(function () {
4136
+ signTxRequestForMessageStub = sandbox
4137
+ .stub(sdk_core_1.EDDSAUtils.default.prototype, 'signTxRequestForMessage')
4138
+ .resolves(txRequestForSolMessageSigning);
4139
+ });
4140
+ it('should create msg request carrying messageRaw, SIMPLE and signerAddress unchanged', async function () {
4141
+ let capturedBody;
4142
+ nock(bgUrl)
4143
+ .post(`/api/v2/wallet/${tssSolWallet.id()}/msgrequests`, (body) => {
4144
+ capturedBody = body;
4145
+ return true;
4146
+ })
4147
+ .reply(200, txRequestForSolMessageSigning);
4148
+ await tssSolWallet.buildSignMessageRequest({ message: solMessage });
4149
+ capturedBody.intent.messageRaw.should.equal(solMessageRaw);
4150
+ capturedBody.intent.messageStandardType.should.equal(sdk_core_1.MessageStandardType.SIMPLE);
4151
+ capturedBody.intent.signerAddress.should.equal(solSignerAddress);
4152
+ capturedBody.intent.messageEncoded.should.equal('');
4153
+ capturedBody.intent.intentType.should.equal('signMessage');
4154
+ capturedBody.intent.isTss.should.equal(true);
4155
+ });
4156
+ it('should sign message without encodeMessage transformation, handing EdDSA the UTF-8 bytes', async function () {
4157
+ const signMessageTssSpy = sandbox.spy(tssSolWallet, 'signMessageTss');
4158
+ nock(bgUrl).post(`/api/v2/wallet/${tssSolWallet.id()}/msgrequests`).reply(200, txRequestForSolMessageSigning);
4159
+ const signedMessage = await tssSolWallet.signMessage({
4160
+ reqId,
4161
+ message: { ...solMessage },
4162
+ prv: 'secretKey',
4163
+ });
4164
+ signedMessage.should.deepEqual(solExpectedSignedMessage);
4165
+ const actualArg = signMessageTssSpy.getCalls()[0].args[0];
4166
+ should(actualArg.message?.messageEncoded).be.undefined();
4167
+ signTxRequestForMessageStub.getCalls().length.should.equal(1);
4168
+ signTxRequestForMessageStub.getCalls()[0].args[0].messageEncoded.should.equal(solMessageEncoded);
4169
+ signTxRequestForMessageStub
4170
+ .getCalls()[0]
4171
+ .args[0].bufferToSign.should.deepEqual(Buffer.from(solMessageRaw, 'utf8'));
4172
+ });
4173
+ it('should sign message when txRequestId is provided, returning the WP-persisted messageRaw', async function () {
4174
+ nock(bgUrl)
4175
+ .get(`/api/v2/wallet/${tssSolWallet.id()}/txrequests?txRequestIds=${txRequestForSolMessageSigning.txRequestId}&latest=true`)
4176
+ .reply(200, { txRequests: [txRequestForSolMessageSigning] });
4177
+ const signedMessage = await tssSolWallet.signMessage({
4178
+ reqId,
4179
+ message: {
4180
+ ...solMessage,
4181
+ messageRaw: 'client-stale-echo',
4182
+ txRequestId: txRequestForSolMessageSigning.txRequestId,
4183
+ },
4184
+ prv: 'secretKey',
4185
+ });
4186
+ signedMessage.should.deepEqual(solExpectedSignedMessage);
4187
+ signedMessage.messageRaw.should.equal(solMessageRaw);
4188
+ });
4189
+ it('should fall back to the caller messageRaw when the signed request carries none', async function () {
4190
+ const legacyTxRequest = {
4191
+ ...txRequestForSolMessageSigning,
4192
+ messages: [
4193
+ {
4194
+ ...txRequestForSolMessageSigning.messages[0],
4195
+ messageRaw: undefined,
4196
+ },
4197
+ ],
4198
+ };
4199
+ nock(bgUrl)
4200
+ .get(`/api/v2/wallet/${tssSolWallet.id()}/txrequests?txRequestIds=${txRequestForSolMessageSigning.txRequestId}&latest=true`)
4201
+ .reply(200, { txRequests: [legacyTxRequest] });
4202
+ const signedMessage = await tssSolWallet.signMessage({
4203
+ reqId,
4204
+ message: { ...solMessage, txRequestId: txRequestForSolMessageSigning.txRequestId },
4205
+ prv: 'secretKey',
4206
+ });
4207
+ signedMessage.messageRaw.should.equal(solMessageRaw);
4208
+ });
4209
+ it('should reject empty messageRaw', async function () {
4210
+ await tssSolWallet
4211
+ .buildSignMessageRequest({
4212
+ message: { ...solMessage, messageRaw: '' },
4213
+ })
4214
+ .should.be.rejectedWith('message and type required to create message sign request');
4215
+ await tssSolWallet
4216
+ .signMessage({
4217
+ reqId,
4218
+ message: { ...solMessage, messageRaw: '' },
4219
+ prv: 'secretKey',
4220
+ })
4221
+ .should.be.rejectedWith(/messageRaw is required to sign a SOL message/);
4222
+ });
4223
+ it('should reject messageRaw over MAX_SOL_MESSAGE_BYTES and accept exactly MAX_SOL_MESSAGE_BYTES', async function () {
4224
+ await tssSolWallet
4225
+ .buildSignMessageRequest({
4226
+ message: { ...solMessage, messageRaw: 'a'.repeat(sdk_core_1.MAX_SOL_MESSAGE_BYTES + 1) },
4227
+ })
4228
+ .should.be.rejectedWith(/SOL message exceeds maximum size/);
4229
+ let capturedBody;
4230
+ nock(bgUrl)
4231
+ .post(`/api/v2/wallet/${tssSolWallet.id()}/msgrequests`, (body) => {
4232
+ capturedBody = body;
4233
+ return true;
4234
+ })
4235
+ .reply(200, txRequestForSolMessageSigning);
4236
+ await tssSolWallet.buildSignMessageRequest({
4237
+ message: { ...solMessage, messageRaw: 'a'.repeat(sdk_core_1.MAX_SOL_MESSAGE_BYTES) },
4238
+ });
4239
+ capturedBody.intent.messageRaw.length.should.equal(sdk_core_1.MAX_SOL_MESSAGE_BYTES);
4240
+ });
4241
+ it('should measure multi-byte messageRaw in UTF-8 bytes, not characters', async function () {
4242
+ const twoByteChars = 'é';
4243
+ await tssSolWallet
4244
+ .buildSignMessageRequest({
4245
+ message: { ...solMessage, messageRaw: twoByteChars.repeat(sdk_core_1.MAX_SOL_MESSAGE_BYTES) },
4246
+ })
4247
+ .should.be.rejectedWith(/SOL message exceeds maximum size/);
4248
+ let capturedBody;
4249
+ nock(bgUrl)
4250
+ .post(`/api/v2/wallet/${tssSolWallet.id()}/msgrequests`, (body) => {
4251
+ capturedBody = body;
4252
+ return true;
4253
+ })
4254
+ .reply(200, txRequestForSolMessageSigning);
4255
+ await tssSolWallet.buildSignMessageRequest({
4256
+ message: { ...solMessage, messageRaw: twoByteChars.repeat(sdk_core_1.MAX_SOL_MESSAGE_BYTES / 2) },
4257
+ });
4258
+ capturedBody.intent.messageRaw.length.should.equal(sdk_core_1.MAX_SOL_MESSAGE_BYTES / 2);
4259
+ });
4260
+ it('should reject non-SIMPLE message standards and missing signerAddress', async function () {
4261
+ await tssSolWallet
4262
+ .buildSignMessageRequest({
4263
+ message: { ...solMessage, messageStandardType: sdk_core_1.MessageStandardType.EIP191 },
4264
+ })
4265
+ .should.be.rejectedWith(/SOL message signing supports only the SIMPLE standard/);
4266
+ await tssSolWallet
4267
+ .buildSignMessageRequest({
4268
+ message: { ...solMessage, signerAddress: undefined },
4269
+ })
4270
+ .should.be.rejectedWith(/signerAddress is required to sign a SOL message/);
4271
+ });
4272
+ it('should not implement encodeMessage', function () {
4273
+ should(tsol.encodeMessage).be.undefined();
4274
+ });
4275
+ });
4073
4276
  });
4074
4277
  describe('Typed Data Signing', function () {
4075
4278
  const txHash = '1901493fbf2ae1c27c3ced26a89070c6ab5d3fbf37ed778de9378e7703b7d1f116b3883077a61826129b98b622e54fc68c5008d1b1c16552e1eda6916f870d719220';
@@ -6514,4 +6717,4 @@ describe('V2 Wallet:', function () {
6514
6717
  });
6515
6718
  });
6516
6719
  });
6517
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC92Mi91bml0L3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsRUFBRTtBQUNGLG1CQUFtQjtBQUNuQixFQUFFOztBQUVGLGlDQUFrQztBQUNsQywrQkFBK0I7QUFDL0IsMEJBQXdCO0FBQ3hCLDZCQUE4QjtBQUM5Qiw0QkFBNEI7QUFDNUIsaUNBQWlDO0FBRWpDLDhDQTZCeUI7QUFFekIsOENBQTRDO0FBQzVDLHNDQUFxQztBQUNyQywyQ0FBMkM7QUFDM0MsbUNBQXFDO0FBQ3JDLHNEQUEyQztBQUMzQyxzREFBMkM7QUFFM0MsZ0VBQW9GO0FBRXBGLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQVF6QixRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQWEsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLFdBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sUUFBUSxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUc7UUFDakIsRUFBRSxFQUFFLGtDQUFrQztRQUN0QyxJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxDQUFDLGtDQUFrQyxFQUFFLGtDQUFrQyxFQUFFLGtDQUFrQyxDQUFDO1FBQ2xILFlBQVksRUFBRSxFQUFFO1FBQ2hCLFlBQVksRUFBRSxTQUFTO1FBQ3ZCLElBQUksRUFBRSxLQUFLO0tBQ1osQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHO1FBQ3JCLEVBQUUsRUFBRSxrQ0FBa0M7UUFDdEMsSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxrQ0FBa0MsRUFBRSxrQ0FBa0MsQ0FBQztRQUNsSCxZQUFZLEVBQUUsRUFBRTtRQUNoQixZQUFZLEVBQUUsU0FBUztRQUN2QixJQUFJLEVBQUUsTUFBTTtLQUNiLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMvRCxNQUFNLEtBQUssR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdEQsTUFBTSxRQUFRLEdBQUcsNENBQTRDLENBQUM7SUFDOUQsTUFBTSxRQUFRLEdBQUcsNENBQTRDLENBQUM7SUFDOUQsTUFBTSwwQkFBMEIsR0FBRztRQUNqQyxRQUFRLEVBQUUsTUFBTTtRQUNoQixpQkFBaUIsRUFBRSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7S0FDeEUsQ0FBQztJQUVGLFNBQVMsQ0FBQztRQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsa0JBQWtCLEVBQUU7UUFDM0IsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUs7WUFDaEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUVqRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN0QixHQUFHLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUM7aUJBQzlELEtBQUssQ0FBQyxNQUFNLENBQUM7aUJBQ2IsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7d0JBQ25CLE9BQU8sRUFBRSxPQUFPO3FCQUNqQjtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsK0RBQStEO1lBQ2pFLENBQUM7WUFFRCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLO1lBQzdDLE1BQU0sTUFBTSxHQUFHO2dCQUNiLEtBQUssRUFBRSxDQUFDO2dCQUNSLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7Z0JBQ2pDLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixNQUFNLEVBQUUsYUFBYTtnQkFDckIsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxnQkFBZ0I7YUFDeEIsQ0FBQztZQUVGLHNHQUFzRztZQUN0RyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFakcsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDdEIsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDO2lCQUM5RCxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDM0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWQsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUs7WUFDckQsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxFQUFFLGVBQWU7YUFDekIsQ0FBQztZQUVGLE1BQU0sU0FBUyxHQUFHO2dCQUNoQixLQUFLLEVBQUUsR0FBRztnQkFDVixPQUFPLEVBQUUsZUFBZTthQUN6QixDQUFDO1lBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDdEIsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDO2lCQUM5RCxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDM0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCwrREFBK0Q7WUFDakUsQ0FBQztZQUVELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUs7WUFDN0QsTUFBTSxNQUFNO2dCQUNWLDBDQUEwQztpQkFDekMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUM3QixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBRWpGLE1BQU0sTUFBTTtnQkFDViwwQ0FBMEM7aUJBQ3pDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7aUJBQzlCLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFFMUYsTUFBTSxNQUFNO2dCQUNWLDBDQUEwQztpQkFDekMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO2lCQUNoQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBRXhFLDBDQUEwQztZQUMxQyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBRWpILE1BQU0sTUFBTTtnQkFDViwwQ0FBMEM7aUJBQ3pDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztpQkFDbkMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUV6RSwwQ0FBMEM7WUFDMUMsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUVqSCxNQUFNLE1BQU07Z0JBQ1YsMENBQTBDO2lCQUN6QyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7aUJBQ2hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7WUFFNUUsTUFBTSxNQUFNO2dCQUNWLDBDQUEwQztpQkFDekMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO2lCQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBRS9FLE1BQU0sTUFBTTtnQkFDViwwQ0FBMEM7aUJBQ3pDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2lCQUNoQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1lBRXRGLDBDQUEwQztZQUMxQyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzFHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsa0JBQWtCLEVBQUU7UUFDM0IsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEtBQUs7WUFDM0MsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUVuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN0QixHQUFHLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUM7aUJBQy9ELEtBQUssQ0FBQyxNQUFNLENBQUM7aUJBQ2IsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7d0JBQ25CLE9BQU8sRUFBRSxPQUFPO3FCQUNqQjtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsK0RBQStEO1lBQ2pFLENBQUM7WUFFRCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEtBQUs7UUFDcEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEYsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSztRQUNsRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtRQUNoQyxJQUFJLFNBQVMsQ0FBQztRQUVkLE1BQU0sQ0FBQyxLQUFLO1lBQ1YsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRTtvQkFDSixrQ0FBa0M7b0JBQ2xDLGtDQUFrQztvQkFDbEMsa0NBQWtDO2lCQUNuQzthQUNGLENBQUM7WUFDRixTQUFTLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUs7WUFDckQsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixzQkFBc0IsRUFBRSxVQUFVO2dCQUNsQyxpQkFBaUIsRUFBRSxLQUFLO2dCQUN4Qix3QkFBd0IsRUFBRSxJQUFJO2FBQy9CLENBQUM7WUFFRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN0QixHQUFHLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUM7aUJBQy9ELEtBQUssQ0FBQyxNQUFNLENBQUM7aUJBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0IsTUFBTSxFQUFFLENBQUM7WUFDWCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZiwrREFBK0Q7WUFDakUsQ0FBQztZQUNELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUs7WUFDN0QsTUFBTSxTQUFTO2lCQUNaLFNBQVMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQy9ELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDJEQUEyRCxDQUFDLENBQUM7WUFFdkYsTUFBTSxTQUFTO2lCQUNaLFNBQVMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUNuQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1lBRW5GLE1BQU0sU0FBUztpQkFDWixTQUFTLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHFEQUFxRCxDQUFDLENBQUM7WUFFakYsTUFBTSxTQUFTO2lCQUNaLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDL0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUUvRSxNQUFNLFNBQVM7aUJBQ1osU0FBUyxDQUFDLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQzFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUJBQXVCLEVBQUUsS0FBSztZQUMvQixNQUFNLFVBQVUsR0FBRztnQkFDakI7b0JBQ0UsT0FBTyxFQUFFLDRDQUE0QztvQkFDckQsT0FBTyxFQUFFLFFBQVE7aUJBQ2xCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSw0Q0FBNEM7b0JBQ3JELE9BQU8sRUFBRSxtQkFBbUI7aUJBQzdCO2FBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsU0FBUyxDQUFDLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JHLFVBQVU7YUFDWCxDQUFDLENBQUM7WUFFSCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDL0QsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6RSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pFLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekUsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsTUFBTSxHQUFHLEdBQ1AsaUhBQWlILENBQUM7UUFDcEgsTUFBTSxVQUFVLEdBQ2QsaUhBQWlILENBQUM7UUFDcEgsRUFBRSxDQUFDLDJFQUEyRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3pGLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixHQUFHO2dCQUNILGtCQUFrQixFQUFFLEtBQUs7YUFDMUIsQ0FBQztZQUNGLENBQUMsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3R0FBd0csRUFBRSxLQUFLLElBQUksRUFBRTtZQUN0SCxNQUFNLGNBQWMsR0FBc0I7Z0JBQ3hDLEdBQUc7Z0JBQ0gsUUFBUSxFQUFFO29CQUNSLHlCQUF5QixFQUFFLEtBQUs7b0JBQ2hDLEVBQUUsRUFBRSxLQUFLO29CQUNULEdBQUcsRUFBRSxLQUFLO29CQUNWLElBQUksRUFBRSxhQUFhO2lCQUNwQjthQUNGLENBQUM7WUFDRixDQUFDLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0dBQWdHLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDOUcsTUFBTSxjQUFjLEdBQXNCO2dCQUN4QyxHQUFHO2dCQUNILGtCQUFrQixFQUFFLEtBQUs7Z0JBQ3pCLFFBQVEsRUFBRTtvQkFDUix5QkFBeUIsRUFBRSxLQUFLO29CQUNoQyxFQUFFLEVBQUUsS0FBSztvQkFDVCxHQUFHLEVBQUUsS0FBSztvQkFDVixJQUFJLEVBQUUsYUFBYTtpQkFDcEI7YUFDRixDQUFDO1lBQ0YsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFELE1BQU0sYUFBYSxHQUFHO2dCQUNwQixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUU7b0JBQ0osa0NBQWtDO29CQUNsQyxrQ0FBa0M7b0JBQ2xDLGtDQUFrQztpQkFDbkM7Z0JBQ0QsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLFlBQVksRUFBRSxLQUFLO2FBQ3BCLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzFELE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDO1lBQ2xDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLHlCQUF5QixFQUFFLGFBQWE7Z0JBQ3hDLEVBQUUsRUFBRSxLQUFLO2dCQUNULGNBQWMsRUFBRSxZQUFZO2dCQUM1QixJQUFJLEVBQUUsS0FBZ0I7YUFDdkIsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixHQUFHO2dCQUNILFFBQVE7YUFDVCxDQUFDO1lBQ0YsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMEJBQTBCLEVBQUU7UUFDbkMsSUFBSSxTQUFTLENBQUM7UUFFZCxNQUFNLENBQUMsS0FBSztZQUNWLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUU7b0JBQ0osa0NBQWtDO29CQUNsQyxrQ0FBa0M7b0JBQ2xDLGtDQUFrQztpQkFDbkM7Z0JBQ0QsWUFBWSxFQUFFLFNBQVM7YUFDeEIsQ0FBQztZQUNGLFNBQVMsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsS0FBSztZQUNiLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLO1lBQ3RELE1BQU0sTUFBTSxHQUFHO2dCQUNiLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE9BQU8sRUFBRTtvQkFDUCxvQkFBb0IsRUFBRSxFQUFFO29CQUN4QixZQUFZLEVBQUUsRUFBRTtpQkFDakI7Z0JBQ0QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLG9CQUFTLENBQUMsRUFBRSxDQUFDLG9CQUFvQjtnQkFDMUMsZ0JBQWdCLEVBQUUsb0JBQVMsQ0FBQyxFQUFFLENBQUMscUJBQXFCO2FBQ3JELENBQUM7WUFDRixNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLO1lBQ3pELE1BQU0sTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBRXpDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxFQUFFLENBQUM7WUFDWCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZiwrREFBK0Q7WUFDakUsQ0FBQztZQUNELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUs7WUFDaEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUV2RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqSCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxFQUFFLENBQUM7WUFDWCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZiwrREFBK0Q7WUFDakUsQ0FBQztZQUNELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUs7WUFDOUQsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLE9BQU8sRUFBRTtvQkFDUCxvQkFBb0IsRUFBRSxZQUFZO29CQUNsQyxZQUFZLEVBQUUsYUFBYTtpQkFDNUI7YUFDRixDQUFDO1lBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFakgsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0IsTUFBTSxFQUFFLENBQUM7WUFDWCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZiwrREFBK0Q7WUFDakUsQ0FBQztZQUNELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEtBQUs7WUFDN0UsTUFBTSxJQUFJLEdBQUcsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUM7WUFDN0UsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMsQ0FBQztZQUN0RSxNQUFNLFVBQVUsR0FBRztnQkFDakI7b0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtvQkFDekIsTUFBTSxFQUFFLENBQUM7b0JBQ1QsSUFBSSxFQUFFLFlBQVk7aUJBQ25CO2FBQ0YsQ0FBQztZQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyx3RkFBd0Y7aUJBQzlILEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVkLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWhILElBQUksQ0FBQztnQkFDSCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQ25CLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTztvQkFDOUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO29CQUN4QixNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07aUJBQzdCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLCtEQUErRDtZQUNqRSxDQUFDO1lBQ0QsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSztZQUN0RSxNQUFNLElBQUksR0FBRyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxTQUFTLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQztZQUM3RSxNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO1lBQ3RFLE1BQU0sVUFBVSxHQUFHO2dCQUNqQjtvQkFDRSxPQUFPLEVBQUUsZ0JBQWdCO29CQUN6QixNQUFNLEVBQUUsQ0FBQztvQkFDVCxJQUFJLEVBQUUsWUFBWTtpQkFDbkI7YUFDRixDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLHdGQUF3RjtpQkFDOUgsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFaEgsSUFBSSxDQUFDO2dCQUNILE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsK0RBQStEO1lBQ2pFLENBQUM7WUFDRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO1lBQ25GLE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7WUFDdEUsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCO29CQUNFLE9BQU8sRUFBRSxnQkFBZ0I7b0JBQ3pCLE1BQU0sRUFBRSxDQUFDO2lCQUNWO2FBQ0YsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFFbkYsSUFBSSxDQUFDO2dCQUNILE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztnQkFDbkYsK0RBQStEO1lBQ2pFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtR0FBbUcsRUFBRSxLQUFLO1lBQzNHLE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7WUFDdEUsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCO29CQUNFLE9BQU8sRUFBRSxnQkFBZ0I7b0JBQ3pCLE1BQU0sRUFBRSxDQUFDO2lCQUNWO2FBQ0YsQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLGtFQUFrRSxDQUFDO1lBQ3hGLE1BQU0saUNBQWlDLEdBQUc7Z0JBQ3hDLGNBQWMsRUFBRSxPQUFPO2dCQUN2QixVQUFVO2dCQUNWLElBQUksRUFBRSxVQUFVO2dCQUNoQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxLQUFLLEVBQUUsSUFBSTthQUNaLENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBRWxGLElBQUksQ0FBQztnQkFDSCxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELElBQUksQ0FBQztnQkFDSCxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSztZQUN2RCxNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO1lBQ3RFLE1BQU0sVUFBVSxHQUFHO2dCQUNqQjtvQkFDRSxPQUFPLEVBQUUsZ0JBQWdCO29CQUN6QixNQUFNLEVBQUUsQ0FBQztpQkFDVjthQUNGLENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyw2REFBNkQsQ0FBQztZQUNuRixNQUFNLCtCQUErQixHQUFHO2dCQUN0QyxVQUFVO2dCQUNWLElBQUksRUFBRSxVQUFVO2dCQUNoQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxnQkFBZ0IsRUFBRSxvQkFBUyxDQUFDLEVBQUUsQ0FBQywwQkFBMEI7YUFDMUQsQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQzdCLEdBQUcsQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDL0QsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDUixLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLEdBQUcsRUFBRSxpSEFBaUg7Z0JBQ3RILFVBQVUsRUFBRSw0Q0FBNEM7Z0JBQ3hELE1BQU0sRUFBRSxNQUFNO2dCQUNkLFlBQVksRUFDViw0U0FBNFM7Z0JBQzlTLFlBQVksRUFBRSxFQUFFO2FBQ2pCLENBQUMsQ0FBQztZQUVMLE1BQU0sU0FBUztpQkFDWixRQUFRLENBQUMsRUFBRSxHQUFHLCtCQUErQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLENBQUM7aUJBQ3JGLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXhDLElBQUksQ0FBQztnQkFDSCxNQUFNLHFCQUFxQixHQUFHLEdBQUcsRUFBRTtvQkFDakMsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQztnQkFDRix3RUFBd0U7Z0JBQ3hFLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQztvQkFDdkIsR0FBRywrQkFBK0I7b0JBQ2xDLGdCQUFnQixFQUFFLGlCQUFpQjtvQkFDbkMscUJBQXFCO2lCQUN0QixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRywrQkFBK0IsRUFBRSxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksS0FBSyxDQUFDO1FBQ1YsTUFBTSxDQUFDLEtBQUs7WUFDVixNQUFNLGFBQWEsR0FBRztnQkFDcEIsRUFBRSxFQUFFLGlDQUFpQztnQkFDckMsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsSUFBSSxFQUFFO29CQUNKLGtDQUFrQztvQkFDbEMsa0NBQWtDO29CQUNsQyxrQ0FBa0M7aUJBQ25DO2dCQUNELFlBQVksRUFBRSxFQUFFO2dCQUNoQixZQUFZLEVBQUUsU0FBUzthQUN4QixDQUFDO1lBQ0YsU0FBUyxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxLQUFLO1lBQ2QsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtvQkFDckUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLEdBQUcsRUFBRSxpSEFBaUg7b0JBQ3RILE1BQU0sRUFBRSxNQUFNO29CQUNkLFlBQVksRUFDViw0U0FBNFM7b0JBQzlTLFlBQVksRUFBRSxFQUFFO2lCQUNqQixDQUFDO2dCQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtvQkFDckUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLEdBQUcsRUFBRSxpSEFBaUg7b0JBQ3RILE1BQU0sRUFBRSxRQUFRO29CQUNoQixZQUFZLEVBQUUsRUFBRTtpQkFDakIsQ0FBQztnQkFFRixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ3JFLEVBQUUsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN6QixHQUFHLEVBQUUsaUhBQWlIO29CQUN0SCxNQUFNLEVBQUUsT0FBTztvQkFDZixZQUFZLEVBQUUsRUFBRTtpQkFDakIsQ0FBQzthQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxLQUFLO1lBQ2IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSztZQUM3RSxNQUFNLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1lBQzNHLHdEQUF3RDtZQUN4RCxNQUFNLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUs7WUFDL0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDdEIsSUFBSSxDQUFDLHNCQUFzQixTQUFTLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztpQkFDNUUsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsQ0FBQztnQkFDUixJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7YUFDckIsQ0FBQyxDQUFDO1lBQ0wsTUFBTSxPQUFPLEdBQUcsTUFBTSxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDdEUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7UUFDbkMsSUFBSSxTQUFTLEVBQUUsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEVBQUUsRUFBRSxrQ0FBa0M7WUFDdEMsWUFBWSxFQUFFO2dCQUNaLFdBQVcsRUFBRSw0Q0FBNEM7YUFDMUQ7WUFDRCxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRTtnQkFDSixrQ0FBa0M7Z0JBQ2xDLGtDQUFrQztnQkFDbEMsa0NBQWtDO2FBQ25DO1NBQ0YsQ0FBQztRQUVGLFVBQVUsQ0FBQyxLQUFLO1lBQ2QsU0FBUyxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM5RCxLQUFLLEdBQUc7Z0JBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ3JGLEVBQUUsRUFBRSxrQ0FBa0M7b0JBQ3RDLEdBQUcsRUFBRSxpSEFBaUg7b0JBQ3RILFVBQVUsRUFBRSw0Q0FBNEM7b0JBQ3hELE1BQU0sRUFBRSxNQUFNO29CQUNkLFlBQVksRUFDViw0U0FBNFM7b0JBQzlTLFlBQVksRUFBRSxFQUFFO2lCQUNqQixDQUFDO2dCQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNyRixFQUFFLEVBQUUsa0NBQWtDO29CQUN0QyxHQUFHLEVBQUUsaUhBQWlIO29CQUN0SCxVQUFVLEVBQUUsNENBQTRDO29CQUN4RCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsWUFBWSxFQUFFLEVBQUU7aUJBQ2pCLENBQUM7Z0JBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ3JGLEVBQUUsRUFBRSxrQ0FBa0M7b0JBQ3RDLEdBQUcsRUFBRSxpSEFBaUg7b0JBQ3RILFVBQVUsRUFBRSw0Q0FBNEM7b0JBQ3hELE1BQU0sRUFBRSxPQUFPO29CQUNmLFlBQVksRUFBRSxFQUFFO2lCQUNqQixDQUFDO2FBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLEtBQUs7WUFDYixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLO1lBQy9ELElBQUksT0FBTyxHQUFHLGlEQUFpRCxDQUFDO1lBQ2hFLDBDQUEwQztZQUMxQyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RSxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRiwwQ0FBMEM7WUFDMUMsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFL0UsT0FBTyxHQUFHLDRCQUE0QixDQUFDO1lBQ3ZDLDBDQUEwQztZQUMxQyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRSwwQ0FBMEM7WUFDMUMsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0UsMENBQTBDO1lBQzFDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTVFLE9BQU8sR0FBRyw0Q0FBNEMsQ0FBQztZQUN2RCwwQ0FBMEM7WUFDMUMsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUUsMENBQTBDO1lBQzFDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdFLDBDQUEwQztZQUMxQyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1RSxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFFLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTNFLE9BQU8sR0FBRyxnQ0FBZ0MsQ0FBQztZQUMzQywwQ0FBMEM7WUFDMUMsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEYsMENBQTBDO1lBQzFDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pGLDBDQUEwQztZQUMxQyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVsRixPQUFPLEdBQUcsNENBQTRDLENBQUM7WUFDdkQsMENBQTBDO1lBQzFDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0YsMENBQTBDO1lBQzFDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUYsMENBQTBDO1lBQzFDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUYsMENBQTBDO1lBQzFDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0YsT0FBTyxHQUFHLDBEQUEwRCxDQUFDO1lBQ3JFLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEYsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUs7WUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDdEIsSUFBSSxDQUFDLFdBQVcsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLFNBQVMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDdkcsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxPQUFPLEVBQUUsNENBQTRDO2dCQUNyRCxLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsQ0FBQztnQkFDUixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsU0FBUyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxFQUFFLGtDQUFrQztnQkFDMUMsWUFBWSxFQUFFO29CQUNaLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQ1QsVUFBVSxFQUFFLDBCQUEwQjtvQkFDdEMsT0FBTyxFQUFFLENBQUM7b0JBQ1YsMEJBQTBCLEVBQUUsS0FBSztvQkFDakMsZUFBZSxFQUFFLEVBQUU7b0JBQ25CLElBQUksRUFBRSxLQUFLO29CQUNYLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLGdCQUFnQixFQUFFLENBQUM7b0JBQ25CLEtBQUssRUFBRSxJQUFJO2lCQUNaO2FBQ0YsQ0FBQyxDQUFDO1lBQ0wsTUFBTSxPQUFPLEdBQUcsTUFBTSxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLE9BQU8sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxLQUFLO1lBQzdFLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLGtCQUFrQjtZQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUNSLElBQUksQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxTQUFTLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ3ZHLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFLGtDQUFrQztnQkFDdEMsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLEtBQUssRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRSxDQUFDO2dCQUNSLElBQUksRUFBRSxVQUFVO2dCQUNoQixTQUFTLEVBQUUsQ0FBQztnQkFDWixNQUFNLEVBQUUsa0NBQWtDO2dCQUMxQyxZQUFZLEVBQUU7b0JBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDVCxVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxPQUFPLEVBQUUsQ0FBQztvQkFDViwwQkFBMEIsRUFBRSxLQUFLO29CQUNqQyxlQUFlLEVBQUUsRUFBRTtvQkFDbkIsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDbkIsS0FBSyxFQUFFLElBQUk7aUJBQ1o7YUFDRixDQUFDLENBQUM7WUFDTCxNQUFNLFNBQVM7aUJBQ1osYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDaEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztZQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN0QixJQUFJLENBQUMsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsU0FBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN2RyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLE9BQU8sRUFBRSw0Q0FBNEM7Z0JBQ3JELEtBQUssRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRSxDQUFDO2dCQUNSLElBQUksRUFBRSxVQUFVO2dCQUNoQixTQUFTLEVBQUUsQ0FBQztnQkFDWixNQUFNLEVBQUUsa0NBQWtDO2dCQUMxQyxZQUFZLEVBQUU7b0JBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDVCxVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxPQUFPLEVBQUUsQ0FBQztvQkFDViwwQkFBMEIsRUFBRSxJQUFJO29CQUNoQyxlQUFlLEVBQUUsRUFBRTtvQkFDbkIsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDbkIsS0FBSyxFQUFFLElBQUk7aUJBQ1o7YUFDRixDQUFDLENBQUM7WUFDTCxNQUFNLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakYsT0FBTyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEtBQUs7WUFDNUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDdEIsSUFBSSxDQUFDLFdBQVcsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLFNBQVMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDdkcsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxPQUFPLEVBQUUsNENBQTRDO2dCQUNyRCxXQUFXLEVBQUUsNENBQTRDO2dCQUN6RCxLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsSUFBSTtnQkFDWCxJQUFJLEVBQUUsTUFBTTtnQkFDWixTQUFTLEVBQUUsQ0FBQztnQkFDWixNQUFNLEVBQUUsa0NBQWtDO2dCQUMxQyxZQUFZLEVBQUU7b0JBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDVCxVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxPQUFPLEVBQUUsQ0FBQztvQkFDViwwQkFBMEIsRUFBRSxJQUFJO29CQUNoQyxlQUFlLEVBQUUsRUFBRTtvQkFDbkIsSUFBSSxFQUFFLE9BQU87b0JBQ2IsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDcEI7YUFDRixDQUFDLENBQUM7WUFDTCxNQUFNLFNBQVM7aUJBQ1osYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDaEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ3JCLG9JQUFvSSxDQUNySSxDQUFDO1lBQ0osS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsS0FBSztZQUMzRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN0QixJQUFJLENBQUMsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsU0FBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN2RyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLE9BQU8sRUFBRSw0Q0FBNEM7Z0JBQ3JELFdBQVcsRUFBRSw0Q0FBNEM7Z0JBQ3pELEtBQUssRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxNQUFNO2dCQUNaLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE1BQU0sRUFBRSxrQ0FBa0M7Z0JBQzFDLFlBQVksRUFBRTtvQkFDWixLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUNULFVBQVUsRUFBRSwwQkFBMEI7b0JBQ3RDLE9BQU8sRUFBRSxDQUFDO29CQUNWLDBCQUEwQixFQUFFLElBQUk7b0JBQ2hDLGVBQWUsRUFBRSxFQUFFO29CQUNuQixJQUFJLEVBQUUsT0FBTztvQkFDYixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixnQkFBZ0IsRUFBRSxDQUFDO2lCQUNwQjthQUNGLENBQUMsQ0FBQztZQUNMLE1BQU0sU0FBUztpQkFDWixhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7aUJBQ3JFLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsS0FBSztZQUM3RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN0QixJQUFJLENBQUMsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsU0FBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN2RyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLE9BQU8sRUFBRSw0Q0FBNEM7Z0JBQ3JELFdBQVcsRUFBRSw0Q0FBNEM7Z0JBQ3pELEtBQUssRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxNQUFNO2dCQUNaLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE1BQU0sRUFBRSxrQ0FBa0M7Z0JBQzFDLFlBQVksRUFBRTtvQkFDWixLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUNULFVBQVUsRUFBRSwwQkFBMEI7b0JBQ3RDLE9BQU8sRUFBRSxDQUFDO29CQUNWLDBCQUEwQixFQUFFLElBQUk7b0JBQ2hDLGVBQWUsRUFBRSxFQUFFO29CQUNuQixJQUFJLEVBQUUsT0FBTztvQkFDYixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixnQkFBZ0IsRUFBRSxDQUFDO2lCQUNwQjthQUNGLENBQUMsQ0FBQztZQUNMLCtFQUErRTtZQUMvRSxNQUFNLFNBQVM7aUJBQ1osYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLDRDQUE0QyxFQUFFLENBQUM7aUJBQzNHLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUNyQixvSUFBb0ksQ0FDckksQ0FBQztZQUNKLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlIQUF5SCxFQUFFLEtBQUs7WUFDakksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDdEIsSUFBSSxDQUFDLFdBQVcsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLFNBQVMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDdkcsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxPQUFPLEVBQUUsMkNBQTJDO2dCQUNwRCxXQUFXLEVBQUUsNENBQTRDO2dCQUN6RCxLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsSUFBSTtnQkFDWCxJQUFJLEVBQUUsTUFBTTtnQkFDWixTQUFTLEVBQUUsQ0FBQztnQkFDWixNQUFNLEVBQUUsa0NBQWtDO2dCQUMxQyxZQUFZLEVBQUU7b0JBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDVCxVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxPQUFPLEVBQUUsQ0FBQztvQkFDViwwQkFBMEIsRUFBRSxJQUFJO29CQUNoQyxlQUFlLEVBQUUsRUFBRTtvQkFDbkIsSUFBSSxFQUFFLE9BQU87b0JBQ2IsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDcEI7YUFDRixDQUFDLENBQUM7WUFDTCxNQUFNLFNBQVM7aUJBQ1osYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUM7aUJBQy9FLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDeEUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOEVBQThFLEVBQUUsS0FBSztZQUN0RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN0QixJQUFJLENBQUMsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsU0FBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN2RyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLE9BQU8sRUFBRSw0Q0FBNEM7Z0JBQ3JELFdBQVcsRUFBRSw0Q0FBNEM7Z0JBQ3pELEtBQUssRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxNQUFNO2dCQUNaLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE1BQU0sRUFBRSxrQ0FBa0M7Z0JBQzFDLFlBQVksRUFBRTtvQkFDWixLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUNULFVBQVUsRUFBRSwwQkFBMEI7b0JBQ3RDLE9BQU8sRUFBRSxDQUFDO29CQUNWLDBCQUEwQixFQUFFLElBQUk7b0JBQ2hDLGVBQWUsRUFBRSxFQUFFO29CQUNuQixJQUFJLEVBQUUsT0FBTztvQkFDYixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixnQkFBZ0IsRUFBRSxDQUFDO2lCQUNwQjthQUNGLENBQUMsQ0FBQztZQUNMLE1BQU0sVUFBVSxHQUFHLE1BQU0sU0FBUyxDQUFDLGFBQWEsQ0FBQztnQkFDL0MsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDbkIsc0JBQXNCLEVBQUUsS0FBSzthQUM5QixDQUFDLENBQUM7WUFDSCxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsSUFBSSxVQUFrQixDQUFDO1FBRXZCLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNoQixrQ0FBa0M7WUFDbEMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLElBQUksRUFBRSxPQUFPO2dCQUNiLElBQUksRUFBRTtvQkFDSixrQ0FBa0M7b0JBQ2xDLGtDQUFrQztvQkFDbEMsa0NBQWtDO2lCQUNuQztnQkFDRCxZQUFZLEVBQUU7b0JBQ1osV0FBVyxFQUFFLDREQUE0RDtpQkFDMUU7YUFDRixDQUFDO1lBQ0YsVUFBVSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxRCxNQUFNLE1BQU0sR0FBRztnQkFDYixZQUFZLEVBQUU7b0JBQ1o7d0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtxQkFDMUI7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDOUIsSUFBSSxDQUFDLFdBQVcsVUFBVSxDQUFDLElBQUksRUFBRSxXQUFXLFVBQVUsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDO2lCQUN2RSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ25CLE1BQU0sTUFBTSxHQUFHLElBQVcsQ0FBQztnQkFDM0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDdEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztZQUNMLE1BQU0sVUFBVSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsSUFBSSxVQUFrQixDQUFDO1FBRXZCLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNoQixrQ0FBa0M7WUFDbEMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLElBQUksRUFBRSxPQUFPO2dCQUNiLElBQUksRUFBRTtvQkFDSixrQ0FBa0M7b0JBQ2xDLGtDQUFrQztvQkFDbEMsa0NBQWtDO2lCQUNuQztnQkFDRCxZQUFZLEVBQUU7b0JBQ1osV0FBVyxFQUFFLGNBQWM7aUJBQzVCO2FBQ0YsQ0FBQztZQUNGLFVBQVUsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDMUQsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsWUFBWSxFQUFFO29CQUNaO3dCQUNFLElBQUksRUFBRSxZQUFZO3FCQUNuQjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUM5QixJQUFJLENBQUMsV0FBVyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsVUFBVSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUM7aUJBQ3ZFLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDbkIsTUFBTSxNQUFNLEdBQUcsSUFBVyxDQUFDO2dCQUMzQixNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDdEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztZQUNMLE1BQU0sVUFBVSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtRQUM5QixJQUFJLFlBQW9CLENBQUM7UUFDekIsTUFBTSxXQUFXLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsV0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDakMsTUFBTSxVQUFVLEdBQUc7WUFDakIsRUFBRSxFQUFFLGtDQUFrQztZQUN0QyxZQUFZLEVBQUU7Z0JBQ1osV0FBVyxFQUFFLDZFQUE2RTtnQkFDMUYsMEJBQTBCLEVBQUUsSUFBSTtnQkFDaEMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTthQUN6QjtZQUNELElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFO2dCQUNKLGtDQUFrQztnQkFDbEMsa0NBQWtDO2dCQUNsQyxrQ0FBa0M7YUFDbkM7WUFDRCxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDO1FBRUYsTUFBTSxDQUFDLEtBQUs7WUFDVixZQUFZLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDcEcsRUFBRSxFQUFFLGtDQUFrQztnQkFDdEMsR0FBRyxFQUFFLDhDQUE4QztnQkFDbkQsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsWUFBWSxFQUNWLDRRQUE0UTtnQkFDOVEsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNwRyxFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxHQUFHLEVBQUUsOENBQThDO2dCQUNuRCxZQUFZLEVBQ1YsNFFBQTRRO2dCQUM5USxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNwRyxFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxHQUFHLEVBQUUsOENBQThDO2dCQUNuRCxZQUFZLEVBQ1YsNFFBQTRRO2dCQUM5USxNQUFNLEVBQUUsT0FBTztnQkFDZixZQUFZLEVBQUUsRUFBRTthQUNqQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxLQUFLO1lBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEtBQUs7WUFDbkUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDOUIsSUFBSSxDQUFDLGtCQUFrQixZQUFZLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQztpQkFDdEQsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNuQixNQUFNLFVBQVUsR0FBRyxJQUFXLENBQUM7Z0JBQy9CLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzNELFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxPQUFPO29CQUNMLEdBQUc7b0JBQ0g7d0JBQ0UsVUFBVSxFQUFFLE1BQU07d0JBQ2xCLFlBQVksRUFBRTs0QkFDWjtnQ0FDRSxVQUFVLEVBQUU7b0NBQ1YsZUFBZSxFQUFFLGtCQUFrQjtvQ0FDbkMsT0FBTyxFQUFFLGVBQWU7aUNBQ3pCOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNMLE1BQU0sWUFBWSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDOUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxXQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM1RCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FBRztZQUNqQixFQUFFLEVBQUUsa0NBQWtDO1lBQ3RDLFlBQVksRUFBRTtnQkFDWixXQUFXLEVBQUUsOENBQThDO2dCQUMzRCwwQkFBMEIsRUFBRSxLQUFLO2dCQUNqQyxjQUFjLEVBQUUsT0FBTztnQkFDdkIsY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTthQUN6QjtZQUNELElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFO2dCQUNKLGtDQUFrQztnQkFDbEMsa0NBQWtDO2dCQUNsQyxrQ0FBa0M7YUFDbkM7WUFDRCxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDO1FBRUYsTUFBTSxDQUFDLEtBQUs7WUFDVixTQUFTLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDOUYsRUFBRSxFQUFFLGtDQUFrQztnQkFDdEMsR0FBRyxFQUFFLDhDQUE4QztnQkFDbkQsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsWUFBWSxFQUNWLDRRQUE0UTtnQkFDOVEsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUM5RixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxHQUFHLEVBQUUsOENBQThDO2dCQUNuRCxZQUFZLEVBQ1YsNFFBQTRRO2dCQUM5USxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUM5RixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxHQUFHLEVBQUUsOENBQThDO2dCQUNuRCxZQUFZLEVBQ1YsNFFBQTRRO2dCQUM5USxNQUFNLEVBQUUsT0FBTztnQkFDZixZQUFZLEVBQUUsRUFBRTthQUNqQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxLQUFLO1lBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLDhCQUE4QixFQUFFO1lBQ3ZDLDhCQUE4QjtZQUM5QixHQUFHLENBQUMsbURBQW1ELEVBQUUsS0FBSztnQkFDNUQsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsVUFBVSxFQUFFO3dCQUNWLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRTt3QkFDdkIsS0FBSyxFQUNILDhXQUE4Vzt3QkFDaFgsTUFBTSxFQUFFOzRCQUNOLFFBQVEsRUFBRSw4Q0FBOEM7NEJBQ3hELG9CQUFvQixFQUFFLElBQUk7NEJBQzFCLEtBQUssRUFBRSw4Q0FBOEM7NEJBQ3JELGFBQWEsRUFBRSxDQUFDOzRCQUNoQixnQkFBZ0IsRUFBRTtnQ0FDaEI7b0NBQ0UsSUFBSSxFQUFFLFVBQVU7b0NBQ2hCLE1BQU0sRUFBRTt3Q0FDTixXQUFXLEVBQUUsOENBQThDO3dDQUMzRCxTQUFTLEVBQUUsOENBQThDO3dDQUN6RCxNQUFNLEVBQUUsUUFBUTtxQ0FDakI7aUNBQ0Y7Z0NBQ0Q7b0NBQ0UsSUFBSSxFQUFFLE1BQU07b0NBQ1osTUFBTSxFQUFFO3dDQUNOLElBQUksRUFBRSx1QkFBdUI7cUNBQzlCO2lDQUNGOzZCQUNGO3lCQUNGO3dCQUNELFdBQVcsRUFBRTs0QkFDWCxJQUFJLEVBQUU7Z0NBQ0osSUFBSSxFQUFFLE1BQU07Z0NBQ1osS0FBSyxFQUFFLHVCQUF1Qjs2QkFDL0I7NEJBQ0QsVUFBVSxFQUFFO2dDQUNWO29DQUNFLE9BQU8sRUFBRSw4Q0FBOEM7b0NBQ3ZELE1BQU0sRUFBRSxRQUFRO2lDQUNqQjs2QkFDRjs0QkFDRCxJQUFJLEVBQUUsVUFBVTt5QkFDakI7d0JBQ0QsYUFBYSxFQUFFLE1BQU07d0JBQ3JCLG9CQUFvQixFQUFFOzRCQUNwQixrQkFBa0IsRUFBRSxDQUFDO3lCQUN0QjtxQkFDRjtvQkFDRCxnQkFBZ0IsRUFBRSxVQUFVO2lCQUM3QixDQUFDO2dCQUNGLGlDQUFpQztnQkFDakMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO1lBQzlELE1BQU0sTUFBTSxHQUFHO2dCQUNiLFlBQVksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO2FBQ2xGLENBQUM7WUFDRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUM5QixJQUFJLENBQUMsa0JBQWtCLFNBQVMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDO2lCQUNuRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ25CLE1BQU0sVUFBVSxHQUFHLElBQVcsQ0FBQztnQkFDL0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNyRSxPQUFPO29CQUNMLEdBQUc7b0JBQ0g7d0JBQ0UsVUFBVSxFQUFFLE1BQU07d0JBQ2xCLFlBQVksRUFBRTs0QkFDWjtnQ0FDRSxVQUFVLEVBQUU7b0NBQ1YsZUFBZSxFQUFFLGtCQUFrQjtvQ0FDbkMsT0FBTyxFQUFFLGVBQWU7aUNBQ3pCOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNMLE1BQU0sU0FBUyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUU7UUFDakMsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEtBQUs7WUFDbEQsTUFBTSxNQUFNLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDO1FBQzVHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUs7WUFDNUMsMENBQTBDO1lBQzFDLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUs7WUFDL0MsTUFBTSxNQUFNLENBQUMscUJBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7WUFDOUcsTUFBTSxNQUFNO2lCQUNULHFCQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7aUJBQ3BELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLO1lBQ3pFLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUNwSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLO1lBQ2hELE1BQU0sTUFBTTtnQkFDViwwQ0FBMEM7aUJBQ3pDLHFCQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUNoRSxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxxQ0FBcUMsRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0NBQWtDLEVBQUUsS0FBSztZQUMxQyxNQUFNLE1BQU07aUJBQ1QscUJBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDN0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUscUNBQXFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUs7WUFDL0QsTUFBTSxNQUFNO2lCQUNULHFCQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUNqRSxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUNBQW1DLEVBQUUsS0FBSztZQUMzQyxNQUFNLE1BQU07Z0JBQ1YsMENBQTBDO2lCQUN6QyxxQkFBcUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUNoRixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsS0FBSztZQUNyQyxNQUFNLE1BQU07aUJBQ1QscUJBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUM3RSxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsS0FBSztZQUNyRCxNQUFNLE1BQU07aUJBQ1QscUJBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2lCQUNoRSxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSx3Q0FBd0MsRUFBRSxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsS0FBSztZQUMvRCxNQUFNLE1BQU07aUJBQ1QscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUMzQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztZQUM1RCxNQUFNLE1BQU07aUJBQ1QscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQzdELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQztZQUV0RSxNQUFNLE1BQU07aUJBQ1QscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUM7aUJBQ2hFLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxLQUFLO1lBQ2pFLE1BQU0sTUFBTSxHQUFHO2dCQUNiLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDakIsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxFQUFFLENBQUM7YUFDVixDQUFDO1lBRUYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUUvRixNQUFNLElBQUksR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQztZQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTdELE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTNDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFckQsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMERBQTBELEVBQUU7UUFDbkUsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLENBQUM7UUFDM0MsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQUc7WUFDZixvRUFBb0U7WUFDcEUsb0VBQW9FO1NBQ3JFLENBQUM7UUFDRixJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksTUFBTSxDQUFDO1FBRVgsTUFBTSxDQUFDLEtBQUs7WUFDVixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixNQUFNLFVBQVUsR0FBRztnQkFDakIsRUFBRSxFQUFFLDBCQUEwQjtnQkFDOUIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLENBQUMsMEJBQTBCLENBQUM7YUFDbkMsQ0FBQztZQUNGLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxLQUFLO1lBQzlFLE1BQU0sSUFBSSxHQUFHLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUM7WUFDN0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0ZBQXdGO2lCQUNySSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFZCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxxR0FBcUc7Z0JBQ3JHLDJGQUEyRjtZQUM3RixDQUFDO1lBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSztZQUNyRSxNQUFNLElBQUksR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDO1lBQzdFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyx3RkFBd0Y7aUJBQzVILEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVkLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxxR0FBcUc7Z0JBQ3JHLGtGQUFrRjtZQUNwRixDQUFDO1lBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztZQUN6RSxNQUFNLElBQUksR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDO1lBQzdFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTVFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pGLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdEYsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxnQ0FBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2RixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxxR0FBcUc7Z0JBQ3JHLGtGQUFrRjtZQUNwRixDQUFDO1lBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLO1lBQ25FLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxNQUFNLG1CQUFtQixHQUFHO2dCQUMxQixFQUFFLEVBQUUsMEJBQTBCO2dCQUM5QixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsV0FBVztnQkFDakIsSUFBSSxFQUFFLENBQUMsMEJBQTBCLENBQUM7YUFDbkMsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUVsRixNQUFNLFlBQVksR0FBRyxXQUFXLGVBQWUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxlQUFlLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQztZQUNwRyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztpQkFDakQsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztZQUV6RSxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxjQUFjLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLE1BQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9EQUFvRCxFQUFFO1FBQzdELE1BQU0sY0FBYyxHQUFHO1lBQ3JCLElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsTUFBTTtnQkFDZCxlQUFlLEVBQUUsMkNBQTJDO2dCQUM1RCxNQUFNLEVBQUUsSUFBSTtnQkFDWixRQUFRLEVBQUUsR0FBRzthQUNkO1NBQ0YsQ0FBQztRQUNGLE1BQU0sa0JBQWtCLEdBQUc7WUFDekIsTUFBTSxFQUFFLFFBQVE7WUFDaEIsVUFBVSxFQUFFLHFDQUFxQztZQUNqRCxNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUM7UUFFRixTQUFTLENBQUM7WUFDUixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0ZBQWtGLEVBQUUsS0FBSztZQUMxRixNQUFNLGVBQWUsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzVELEVBQUUsRUFBRSwwQkFBMEI7Z0JBQzlCLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRSxXQUFXO2dCQUNqQixJQUFJLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQzthQUNuQyxDQUFDLENBQUM7WUFFSCxNQUFNLFlBQVksR0FBRyxXQUFXLGVBQWUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxlQUFlLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQztZQUNwRyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7aUJBQ25FLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFFekUsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLE1BQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzRkFBc0YsRUFBRSxLQUFLO1lBQzlGLE1BQU0sZUFBZSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDNUQsRUFBRSxFQUFFLDBCQUEwQjtnQkFDOUIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLElBQUksRUFBRSxDQUFDLDBCQUEwQixDQUFDO2FBQ25DLENBQUMsQ0FBQztZQUVILE1BQU0sWUFBWSxHQUFHLFdBQVcsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLGVBQWUsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDO1lBQ3BHLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztpQkFDckQsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztZQUV6RSxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxrQkFBa0IsRUFBUyxDQUFDLENBQUM7WUFDN0UsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsTUFBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsSUFBSSxTQUFTLENBQUM7UUFFZCxNQUFNLENBQUMsS0FBSztZQUNWLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUU7b0JBQ0osa0NBQWtDO29CQUNsQyxrQ0FBa0M7b0JBQ2xDLGtDQUFrQztpQkFDbkM7YUFDRixDQUFDO1lBQ0YsU0FBUyxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxLQUFLO1lBQzVELE1BQU0sTUFBTSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDdEIsSUFBSSxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixDQUFDO2lCQUMzRixLQUFLLENBQUMsTUFBTSxDQUFDO2lCQUNiLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25FLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEYsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEtBQUs7WUFDakYsTUFBTSxNQUFNLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN0QixJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsMEJBQTBCLENBQUM7aUJBQzNGLEtBQUssQ0FBQyxNQUFNLENBQUM7aUJBQ2IsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNsQixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7WUFDeEIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0YsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakYsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzlDLFdBQVcsRUFBRSxHQUFHO2dCQUNoQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsMEJBQTBCO2FBQ3hDLENBQUMsQ0FBQztZQUNILEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNiLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOEVBQThFLEVBQUUsS0FBSztZQUN0RixNQUFNLE1BQU0sR0FBRyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ1IsSUFBSSxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixDQUFDO2lCQUMzRixLQUFLLENBQUMsRUFBRSxDQUFDO2lCQUNULEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQ3hCLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNGLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM5QyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUM5QyxXQUFXLEVBQUUsR0FBRztnQkFDaEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLDBCQUEwQjthQUN4QyxDQUFDLENBQUM7WUFDSCxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEtBQUs7WUFDakYsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDUixJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUU7Z0JBQy9ELEdBQUcsMEJBQTBCO2dCQUM3QixVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDdEMsQ0FBQztpQkFDRCxLQUFLLENBQUMsRUFBRSxDQUFDO2lCQUNULEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFbEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQ3hCLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNGLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDOUMsV0FBVyxFQUFFLEdBQUc7Z0JBQ2hCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFdBQVcsRUFBRSxFQUFFLEdBQUcsMEJBQTBCLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7YUFDdEYsQ0FBQyxDQUFDO1lBQ0gsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxLQUFLO1lBQzVFLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUNSLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQztpQkFDM0YsS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDYixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUN4QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzRixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRixNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDOUMsV0FBVyxFQUFFLEdBQUc7Z0JBQ2hCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFdBQVcsRUFBRSwwQkFBMEI7YUFDeEMsQ0FBQyxDQUFDO1lBQ0gsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpR0FBaUcsRUFBRSxLQUFLO1lBQ3pHLE1BQU0sMkJBQTJCLEdBQUc7Z0JBQ2xDLGlCQUFpQixFQUFFLFlBQVk7Z0JBQy9CLFFBQVEsRUFBRSxNQUFNO2FBQ2pCLENBQUM7WUFFRixJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUNSLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSwyQkFBMkIsQ0FBQztpQkFDNUYsS0FBSyxDQUFDLEVBQUUsQ0FBQztpQkFDVCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUN4QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzRixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRixNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDdEUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzlDLFdBQVcsRUFBRSxHQUFHO2dCQUNoQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsMkJBQTJCO2FBQ3pDLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztZQUN2RSxNQUFNLGNBQWMsR0FBRztnQkFDckIsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRSxNQUFNO29CQUNkLGVBQWUsRUFBRSwyQ0FBMkM7b0JBQzVELE1BQU0sRUFBRSxJQUFJO29CQUNaLFFBQVEsRUFBRSxHQUFHO2lCQUNkO2FBQ0YsQ0FBQztZQUNGLE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzFCLElBQUksRUFBRSxVQUFVO2dCQUNoQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsY0FBYztnQkFDZCxpQkFBaUIsRUFBRSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7YUFDeEUsQ0FBQztZQUVGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3RCLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQztpQkFDcEYsS0FBSyxDQUFDLEVBQUUsQ0FBQztpQkFDVCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2dCQUNkLGNBQWM7YUFDZixDQUFDLENBQUM7WUFDSCxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUM5QyxXQUFXLEVBQUUsR0FBRztnQkFDaEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLG1CQUFtQjthQUNqQyxDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDYixlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEtBQUs7WUFDN0UsTUFBTSxNQUFNO2lCQUNULG1CQUFtQixDQUFDO2dCQUNuQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2FBQ2YsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJFQUEyRSxFQUFFLEtBQUs7WUFDbkYsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFdBQVcsSUFBSTtnQkFDbkQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLEVBQUUsRUFBRSwwQkFBMEI7b0JBQzlCLElBQUk7b0JBQ0osSUFBSSxFQUFFLENBQUMsMEJBQTBCLENBQUM7aUJBQ25DLENBQUM7Z0JBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQztxQkFDUixJQUFJLENBQUMsV0FBVyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsYUFBYSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUM7cUJBQzdFLEtBQUssQ0FBQyxNQUFNLENBQUM7cUJBQ2IsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbEIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BGLE1BQU0sYUFBYSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNoRCxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO29CQUM5QyxNQUFNLEVBQUUsYUFBYTtvQkFDckIsV0FBVyxFQUFFLEVBQUU7aUJBQ2hCLENBQUMsQ0FBQztnQkFDSCxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzRkFBc0YsRUFBRSxLQUFLO1lBQzlGLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFVBQVUsRUFBRTtvQkFDVixFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO29CQUNqRCxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO2lCQUNsRDtnQkFDRCxxQkFBcUIsRUFBRSw0Q0FBNEM7Z0JBQ25FLGdCQUFnQixFQUFFLE1BQU07YUFDekIsQ0FBQztZQUVGLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO1lBRXZDLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ1IsSUFBSSxDQUNILFdBQVcsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLFNBQVMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUMvRCxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUMvQztpQkFDQSxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLFVBQVUsRUFBRTtvQkFDVjt3QkFDRSxPQUFPLEVBQUUsNENBQTRDO3dCQUNyRCxNQUFNLEVBQUUsa0JBQWtCO3dCQUMxQixJQUFJLEVBQUUsNGdCQUE0Z0I7cUJBQ25oQjtpQkFDRjtnQkFDRCxzQkFBc0IsRUFBRSxLQUFLO2dCQUM3QixRQUFRLEVBQUUsV0FBVztnQkFDckIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxNQUFNO2FBQ2IsQ0FBQyxDQUFDO1lBRUwsTUFBTSxVQUFVLEdBQUcsTUFBTSxTQUFTLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FDdkUsQ0FBQztZQUNGLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0dBQStHLEVBQUUsS0FBSztZQUN2SCxNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQy9ELHFCQUFxQixFQUFFLDRDQUE0QztnQkFDbkUsZ0JBQWdCLEVBQUUsTUFBTTthQUN6QixDQUFDO1lBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDUixJQUFJLENBQ0gsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQy9ELENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQy9DO2lCQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE1BQU0sRUFBRSxrQkFBa0I7d0JBQzFCLE9BQU8sRUFBRSw0Q0FBNEM7cUJBQ3REO2lCQUNGO2dCQUNELHNCQUFzQixFQUFFLEtBQUs7Z0JBQzdCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLE1BQU07YUFDYixDQUFDLENBQUM7WUFFTCxNQUFNLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RELFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEtBQUs7WUFDOUUsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCO29CQUNFLE9BQU8sRUFBRSxLQUFLO29CQUNkLE1BQU0sRUFBRSxNQUFNO2lCQUNmO2FBQ0YsQ0FBQztZQUNGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxHQUFHLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDO1lBQ3ZFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyx3RkFBd0Y7aUJBQ2pKLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7WUFDdEUsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsMEdBQTBHO2dCQUMxRyxxRkFBcUY7WUFDdkYsQ0FBQztZQUVELFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhFQUE4RSxFQUFFLEtBQUs7WUFDdEYsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFVBQVUsRUFBRSxZQUFZO2FBQ3pCLENBQUM7WUFDRixNQUFNLFVBQVUsR0FBRztnQkFDakI7b0JBQ0UsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7YUFDRixDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQUcsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUM7WUFDdkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyx3RkFBd0Y7aUJBQzNJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLDBHQUEwRztnQkFDMUcsK0VBQStFO1lBQ2pGLENBQUM7WUFFRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO1lBQ25GLE1BQU0sTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDO1lBQ3ZFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHdGQUF3RjtpQkFDdEgsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLDBHQUEwRztnQkFDMUcsK0VBQStFO1lBQ2pGLENBQUM7WUFFRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLFNBQVMsZ0JBQWdCO1FBQ3JELElBQUksS0FBSyxDQUFDO1FBRVYsTUFBTSxDQUFDLEtBQUs7WUFDVixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxLQUFLLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLO1lBQ25CLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixLQUFLLEVBQUUsRUFBRTtnQkFDVCxRQUFRLEVBQUUsR0FBRztnQkFDYixRQUFRLEVBQUUsZUFBZTtnQkFDekIsU0FBUyxFQUFFLENBQUM7Z0JBQ1osV0FBVyxFQUFFLENBQUM7Z0JBQ2QsMkJBQTJCLEVBQUUsS0FBSztnQkFDbEMsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLGdCQUFnQixFQUFFLHFDQUFxQzthQUN4RCxDQUFDO1lBRUYsc0dBQXNHO1lBQ3RHLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUV4RSxNQUFNLElBQUksR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDO1lBQy9FLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQ1QsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyx3RkFBd0Y7aUJBQ3BILEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osZ0JBQWdCLEVBQUUsS0FBSzthQUN4QixDQUFDLENBQUM7WUFFTCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gseUNBQXlDO1lBQzNDLENBQUM7WUFFRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLO1lBQ2xFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNyQixNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztZQUNwQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUM7WUFFakMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUV4RyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUMzQixHQUFHLENBQUMsb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNqRCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztpQkFDZCxHQUFHLENBQUMsb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNqRCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztpQkFDZCxHQUFHLENBQUMsb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNqRCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWxCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ2hDLElBQUksQ0FBQyx1QkFBdUIsVUFBVSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUU7Z0JBQ3BELElBQUksRUFBRSxNQUFNO2dCQUNaLFdBQVc7Z0JBQ1gsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWxCLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBRXJELGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDO1lBQ3BDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQztZQUNqQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDMUcsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDO1lBQzVCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyw2Q0FBNkMsQ0FBQztZQUUxRCxNQUFNLGFBQWEsR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzFCLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxDQUFDLGtDQUFrQyxDQUFDO2dCQUMxQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxrQ0FBa0MsQ0FBQyxFQUFFO2dCQUNoRyxJQUFJLEVBQUUsS0FBSzthQUNaLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBRTlFLEtBQUssTUFBTSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFVLEVBQUUsQ0FBQztnQkFDM0QsRUFBRSxDQUFDLG9DQUFvQyxTQUFTLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLO29CQUN6RSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7eUJBQ2xDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO3lCQUMxQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUV4QyxNQUFNLFdBQVcsR0FBaUIsRUFBRSxDQUFDO29CQUNyQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7d0JBQy9DLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQzt3QkFDckYsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO3dCQUNyRixNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDOzRCQUMzQixNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lDQUMzQixHQUFHLENBQUMsc0JBQXNCLEtBQUssRUFBRSxDQUFDO2lDQUNsQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dDQUNWLEVBQUUsRUFBRSxLQUFLO2dDQUNULEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDZDQUE2QztnQ0FDbEUsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0NBQzlCLFlBQVksRUFDVixDQUFDLEtBQUssQ0FBQztvQ0FDTCxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRTtvQ0FDOUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUU7NkJBQ25FLENBQUMsQ0FBQzs0QkFDTCxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUMvQixDQUFDO29CQUNILENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7d0JBQ3JGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTs0QkFDdEYsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ3RCLEdBQUc7NEJBQ0gsTUFBTSxFQUFFLE1BQU07NEJBQ2QsWUFBWSxFQUFFLFFBQVE7NEJBQ3RCLFlBQVksRUFBRSxFQUFFO3lCQUNqQixDQUFDLENBQUM7d0JBQ0gsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDL0IsQ0FBQztvQkFFRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO3dCQUM1RSxvRUFBb0U7d0JBQ3BFLE9BQVEsQ0FBQyxRQUFTLENBQUMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUNsRCxvRUFBb0U7d0JBQ3BFLE9BQVEsQ0FBQyxRQUFTLENBQUMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzFDLE9BQU8sU0FBUyxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztvQkFFdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNqQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUM1QyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLO1lBQ3hFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNyQixNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztZQUNwQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUM7WUFDakMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFHLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQztZQUM1QixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUNsQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFDMUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUNoQyxJQUFJLENBQUMsdUJBQXVCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFO2dCQUNoRCxJQUFJLEVBQUUsTUFBTTtnQkFDWixXQUFXO2dCQUNYLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVsQixNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXJFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztZQUN2RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDckIsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUM7WUFDcEMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMxRyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQztZQUMzQixNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztZQUN0QyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztZQUV0QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ2xDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUMxQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXhDLE1BQU0sR0FBRyxHQUFHLDZDQUE2QyxDQUFDO1lBQzFELE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUN4RixNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7WUFDeEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDM0IsR0FBRyxDQUFDLG9CQUFvQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDN0MsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEIsR0FBRztnQkFDSCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsT0FBTztnQkFDckIsZUFBZSxFQUFFO29CQUNmO3dCQUNFLFdBQVcsRUFBRSxLQUFLO3dCQUNsQixpQkFBaUIsRUFBRTs0QkFDakIsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLEdBQUcsRUFBRSxRQUFROzRCQUNiLFNBQVMsRUFBRSxZQUFZO3lCQUN4Qjt3QkFDRCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxZQUFZLEVBQUUsT0FBTztxQkFDdEI7aUJBQ0Y7Z0JBQ0QsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQyxDQUFDO1lBRUwsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDekUsT0FBUSxDQUFDLFFBQVMsQ0FBQyxZQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzNELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsdUNBQXVDLEVBQUU7WUFDaEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDO1lBQ3BDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQztZQUNqQyxJQUFJLFNBQWlCLENBQUM7WUFDdEIsSUFBSSxxQkFBNkIsQ0FBQztZQUNsQyxJQUFJLHFCQUE2QixDQUFDO1lBRWxDLE1BQU0sQ0FBQztnQkFDTCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVsQyx3REFBd0Q7Z0JBQ3hELE1BQU0sb0JBQW9CLEdBQUc7b0JBQzNCLEVBQUUsRUFBRSxpQ0FBaUM7b0JBQ3JDLElBQUksRUFBRSxLQUFLO29CQUNYLElBQUksRUFBRTt3QkFDSixrQ0FBa0M7d0JBQ2xDLGtDQUFrQzt3QkFDbEMsa0NBQWtDO3FCQUNuQztvQkFDRCxZQUFZLEVBQUUsRUFBRTtvQkFDaEIsWUFBWSxFQUFFLFNBQVM7b0JBQ3ZCLElBQUksRUFBRSxLQUFLO2lCQUNMLENBQUM7Z0JBQ1QsU0FBUyxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUM7Z0JBRTdELDZDQUE2QztnQkFDN0MsTUFBTSxzQkFBc0IsR0FBRztvQkFDN0IsRUFBRSxFQUFFLGlDQUFpQztvQkFDckMsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsSUFBSSxFQUFFLENBQUMsa0NBQWtDLENBQUM7b0JBQzFDLFlBQVksRUFBRTt3QkFDWixRQUFRLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztxQkFDakM7b0JBQ0QsWUFBWSxFQUFFLFNBQVM7b0JBQ3ZCLElBQUksRUFBRSxLQUFLO2lCQUNMLENBQUM7Z0JBQ1QscUJBQXFCLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFFM0Usa0VBQWtFO2dCQUNsRSxNQUFNLHlCQUF5QixHQUFHO29CQUNoQyxFQUFFLEVBQUUsa0NBQWtDO29CQUN0QyxJQUFJLEVBQUUsS0FBSztvQkFDWCxJQUFJLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztvQkFDMUMsWUFBWSxFQUFFO3dCQUNaLFFBQVEsRUFBRSxFQUFFO3FCQUNiO29CQUNELElBQUksRUFBRSxLQUFLO2lCQUNaLENBQUM7Z0JBQ0YscUJBQXFCLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUNoRixDQUFDLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQztnQkFDUixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztZQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDN0IsUUFBUSxDQUFDLDRCQUE0QixFQUFFO29CQUNyQyxFQUFFLENBQUMsbURBQW1ELEVBQUUsS0FBSzt3QkFDM0QsTUFBTSxpQkFBaUIsR0FBRzs0QkFDeEIsSUFBSSxFQUFFLE1BQU07NEJBQ1osV0FBVzt5QkFDWixDQUFDO3dCQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7NkJBQ2hDLElBQUksQ0FBQyxzQkFBc0IscUJBQXFCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUN2RSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDM0MsT0FBTyxJQUFJLENBQUM7d0JBQ2QsQ0FBQyxDQUFDOzZCQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBRWxCLE1BQU0scUJBQXFCLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7d0JBRTNELGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUM1QyxDQUFDLENBQUMsQ0FBQztvQkFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSzt3QkFDaEUsTUFBTSxpQkFBaUIsR0FBRzs0QkFDeEIsSUFBSSxFQUFFLE1BQU07NEJBQ1osV0FBVzs0QkFDWCxRQUFRLEVBQUU7Z0NBQ1IsR0FBRyxFQUFFLGlIQUFpSDtnQ0FDdEgsWUFBWSxFQUFFLFdBQVc7Z0NBQ3pCLFVBQVUsRUFBRSxTQUFTO2dDQUNyQixRQUFRLEVBQUUsT0FBTztnQ0FDakIsSUFBSSxFQUFFLGNBQWM7NkJBQ3JCO3lCQUNGLENBQUM7d0JBRUYsTUFBTSxxQkFBcUI7NkJBQ3hCLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQzs2QkFDOUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsdUVBQXVFLENBQUMsQ0FBQztvQkFDckcsQ0FBQyxDQUFDLENBQUM7b0JBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEtBQUs7d0JBQzlFLE1BQU0saUJBQWlCLEdBQUc7NEJBQ3hCLElBQUksRUFBRSxNQUFNOzRCQUNaLFdBQVc7NEJBQ1gsUUFBUSxFQUFFLEVBQUU7eUJBQ2IsQ0FBQzt3QkFFRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDOzZCQUNoQyxJQUFJLENBQUMsc0JBQXNCLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7NEJBQzNDLE9BQU8sSUFBSSxDQUFDO3dCQUNkLENBQUMsQ0FBQzs2QkFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUVsQixNQUFNLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3dCQUUzRCxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDNUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsUUFBUSxDQUFDLGdDQUFnQyxFQUFFO29CQUN6QyxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSzt3QkFDdkUsTUFBTSxpQkFBaUIsR0FBRzs0QkFDeEIsSUFBSSxFQUFFLE1BQU07NEJBQ1osV0FBVzs0QkFDWCxRQUFRLEVBQUU7Z0NBQ1IsR0FBRyxFQUFFLGlIQUFpSDtnQ0FDdEgsWUFBWSxFQUFFLFdBQVc7Z0NBQ3pCLFVBQVUsRUFBRSxTQUFTO2dDQUNyQixRQUFRLEVBQUUsT0FBTztnQ0FDakIsSUFBSSxFQUFFLGNBQWM7NkJBQ3JCO3lCQUNGLENBQUM7d0JBRUYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs2QkFDaEMsSUFBSSxDQUFDLHNCQUFzQixTQUFTLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7NEJBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUMzQyxPQUFPLElBQUksQ0FBQzt3QkFDZCxDQUFDLENBQUM7NkJBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFFbEIsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7d0JBRS9DLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUM1QyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFO2dCQUM3QixRQUFRLENBQUMsNEJBQTRCLEVBQUU7b0JBQ3JDLEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO3dCQUNuRixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7NkJBQ2xDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDOzZCQUMxQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7d0JBRXRFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7NkJBQ2hDLElBQUksQ0FBQyxzQkFBc0IscUJBQXFCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxVQUFVLElBQUk7NEJBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7NEJBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7NEJBQ3RELE9BQU8sSUFBSSxDQUFDO3dCQUNkLENBQUMsQ0FBQzs2QkFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUVsQix1REFBdUQ7d0JBQ3ZELE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFFMUcsaUVBQWlFO3dCQUNqRSxNQUFNLDRCQUE0QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsMEJBQTBCLENBQUMsQ0FBQzt3QkFDbkcsNEJBQTRCLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUMsQ0FBQzt3QkFFakcsTUFBTSxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQzt3QkFFaEUscURBQXFEO3dCQUNyRCx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDbkQsNEJBQTRCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ3RELGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQzVDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUM1QyxDQUFDLENBQUMsQ0FBQztvQkFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSzt3QkFDN0UsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDOzZCQUNsQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQzs2QkFDMUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO3dCQUV0RSxpRUFBaUU7d0JBQ2pFLE1BQU0sNEJBQTRCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO3dCQUNuRyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO3dCQUVqRyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7NEJBQ25HLE9BQVEsQ0FBQyxZQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDMUMsTUFBTSxDQUFDLE9BQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7NEJBQ3pDLE9BQU8sU0FBUyxDQUFDO3dCQUNuQixDQUFDLENBQUMsQ0FBQzt3QkFFSCxNQUFNLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO3dCQUVoRSw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDdEQsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUM1QyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUM5QyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxRQUFRLENBQUMsZ0NBQWdDLEVBQUU7b0JBQ3pDLEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLO3dCQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQzFHLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQzt3QkFDNUIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNyRSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQzt3QkFDckMsTUFBTSxHQUFHLEdBQUcsNkNBQTZDLENBQUM7d0JBRTFELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs2QkFDbEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7NkJBQzFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7d0JBRXhDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQzt3QkFDckYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7NEJBQ3BHLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ3JDLEdBQUc7NEJBQ0gsTUFBTSxFQUFFLE1BQU07NEJBQ2QsWUFBWSxFQUFFLFFBQVE7NEJBQ3RCLFlBQVksRUFBRSxFQUFFO3lCQUNqQixDQUFDLENBQUM7d0JBRUgsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFOzRCQUNuRyxxR0FBcUc7NEJBQ3JHLE9BQVEsQ0FBQyxRQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7NEJBQzdDLE9BQVEsQ0FBQyxRQUFTLENBQUMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzFDLE9BQU8sU0FBUyxDQUFDO3dCQUNuQixDQUFDLENBQUMsQ0FBQzt3QkFFSCxNQUFNLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO3dCQUVsRixlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQzVDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQzVDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN2QyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsUUFBUSxDQUFDLDhCQUE4QixFQUFFO2dCQUN2QyxFQUFFLENBQUMseUVBQXlFLEVBQUUsS0FBSztvQkFDakYsTUFBTSxPQUFPLEdBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdkMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTt3QkFDL0QsRUFBRSxFQUFFLGtDQUFrQzt3QkFDdEMsSUFBSSxFQUFFLEtBQUs7d0JBQ1gsSUFBSSxFQUFFLENBQUMsa0NBQWtDLENBQUM7d0JBQzFDLFlBQVksRUFBRTs0QkFDWixRQUFRLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzt5QkFDakM7d0JBQ0QsSUFBSSxFQUFFLEtBQUs7cUJBQ1osQ0FBQyxDQUFDO29CQUVILE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7d0JBQ3RELEVBQUUsRUFBRSxrQ0FBa0M7d0JBQ3RDLElBQUksRUFBRSxLQUFLO3dCQUNYLElBQUksRUFBRSxDQUFDLGtDQUFrQyxDQUFDO3dCQUMxQyxZQUFZLEVBQUU7NEJBQ1osUUFBUSxFQUFFLENBQUMsb0JBQW9CLENBQUM7eUJBQ2pDO3dCQUNELElBQUksRUFBRSxLQUFLO3FCQUNaLENBQUMsQ0FBQztvQkFFSCxNQUFNLHlCQUF5QixHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO3dCQUMzRCxFQUFFLEVBQUUsa0NBQWtDO3dCQUN0QyxJQUFJLEVBQUUsS0FBSzt3QkFDWCxJQUFJLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQzt3QkFDMUMsWUFBWSxFQUFFLEVBQUU7d0JBQ2hCLElBQUksRUFBRSxLQUFLO3FCQUNaLENBQUMsQ0FBQztvQkFFSCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7eUJBQ2xDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO3lCQUMxQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3lCQUNSLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztvQkFFdEUsaURBQWlEO29CQUNqRCxNQUFNLDZCQUE2QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztvQkFDNUcsNkJBQTZCLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUMsQ0FBQztvQkFDbEcsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLO3lCQUMzQixJQUFJLENBQUMsNkJBQTZCLEVBQUUsYUFBYSxDQUFDO3lCQUNsRCxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO3dCQUMzQixPQUFRLENBQUMsWUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzFDLE9BQU8sU0FBUyxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztvQkFDTCxNQUFNLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUN4RSw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDdkQsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBRTdDLDZFQUE2RTtvQkFDN0UsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7d0JBQ25HLE9BQU8sU0FBUyxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ25GLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUU3QywyRUFBMkU7b0JBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO3dCQUN4RyxPQUFPLFNBQVMsQ0FBQztvQkFDbkIsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsTUFBTSx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN4RixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFFN0MsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUU7UUFDMUIsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEtBQUs7WUFDaEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9HLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN0QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEVBQUUsRUFBRSxrQ0FBa0M7WUFDdEMsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUU7Z0JBQ0osa0NBQWtDO2dCQUNsQyxrQ0FBa0M7Z0JBQ2xDLGtDQUFrQzthQUNuQztZQUNELFlBQVksRUFBRSxFQUFFO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRztZQUNwQixFQUFFLEVBQUUsa0NBQWtDO1lBQ3RDLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFO2dCQUNKLGtDQUFrQztnQkFDbEMsa0NBQWtDO2dCQUNsQyxrQ0FBa0M7YUFDbkM7WUFDRCxZQUFZLEVBQUUsS0FBSztZQUNuQixZQUFZLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFO1lBQ25DLElBQUksRUFBRSxLQUFLO1NBQ1osQ0FBQztRQUVGLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsRUFBRSxFQUFFLGtDQUFrQztZQUN0QyxJQUFJLEVBQUUsVUFBVTtZQUNoQixJQUFJLEVBQUU7Z0JBQ0osa0NBQWtDO2dCQUNsQyxrQ0FBa0M7Z0JBQ2xDLGtDQUFrQzthQUNuQztZQUNELFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRztZQUNwQixFQUFFLEVBQUUsc0NBQXNDO1lBQzFDLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFO2dCQUNKLGtDQUFrQztnQkFDbEMsa0NBQWtDO2dCQUNsQyxrQ0FBa0M7YUFDbkM7WUFDRCxZQUFZLEVBQUUsRUFBRTtZQUNoQixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFNUQsSUFBSSxZQUFZLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdEYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtZQUNwRCxHQUFHLFVBQVU7WUFDYixJQUFJLEVBQUUsV0FBVztTQUNsQixDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBYztZQUMzQixXQUFXLEVBQUUsSUFBSTtZQUNqQixZQUFZLEVBQUUsRUFBRTtZQUNoQixNQUFNLEVBQUU7Z0JBQ04sVUFBVSxFQUFFLFNBQVM7YUFDdEI7WUFDRCxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDOUIsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUUsc0JBQXNCO1lBQzdCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsUUFBUSxFQUFFLFVBQVU7WUFDcEIsV0FBVyxFQUFFO2dCQUNYO29CQUNFLGVBQWUsRUFBRSxVQUFVO29CQUMzQixXQUFXLEVBQUUsVUFBVTtvQkFDdkIsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtvQkFDRCxjQUFjLEVBQUUsS0FBSztpQkFDdEI7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBYztZQUMvQixXQUFXLEVBQUUsSUFBSTtZQUNqQixNQUFNLEVBQUU7Z0JBQ04sVUFBVSxFQUFFLFNBQVM7YUFDdEI7WUFDRCxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDOUIsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUUsc0JBQXNCO1lBQzdCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLGVBQWUsRUFBRSxFQUFFO1lBQ25CLE9BQU8sRUFBRSxDQUFDO1lBQ1YsZUFBZSxFQUFFLEtBQUs7WUFDdEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFO2dCQUNaO29CQUNFLEtBQUssRUFBRSxrQkFBa0I7b0JBQ3pCLFVBQVUsRUFBRTt3QkFDVixlQUFlLEVBQUUsVUFBVTt3QkFDM0IsV0FBVyxFQUFFLFVBQVU7d0JBQ3ZCLE9BQU8sRUFBRTs0QkFDUCxHQUFHLEVBQUUsSUFBSTs0QkFDVCxTQUFTLEVBQUUsTUFBTTt5QkFDbEI7d0JBQ0QsY0FBYyxFQUFFLEtBQUs7cUJBQ3RCO29CQUNELGVBQWUsRUFBRSxFQUFFO29CQUNuQixnQkFBZ0IsRUFBRSxFQUFFO2lCQUNyQjthQUNGO1lBQ0QsV0FBVyxFQUFFLEVBQUU7WUFDZixVQUFVLEVBQUUsTUFBTTtTQUNuQixDQUFDO1FBRUYsU0FBUyxDQUFDO1lBQ1IsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUZBQWlGLEVBQUUsS0FBSztZQUN6RixNQUFNLFVBQVUsR0FBRztnQkFDakI7b0JBQ0UsT0FBTyxFQUFFLDhDQUE4QztvQkFDdkQsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7YUFDRixDQUFDO1lBQ0YsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFVBQVU7Z0JBQ1YsSUFBSSxFQUFFLFVBQVU7YUFDakIsQ0FBQztZQUVGLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRTtnQkFDekUsT0FBTztvQkFDTCxHQUFHLGFBQWE7b0JBQ2hCLFVBQVUsRUFBRTt3QkFDVixXQUFXLEVBQUUsSUFBSTt3QkFDakIsS0FBSyxFQUFFLGtCQUFrQjtxQkFDMUI7aUJBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFNUYsTUFBTSxZQUFZLENBQUMsZUFBZSxDQUFDO2dCQUNqQyxVQUFVLEVBQUU7b0JBQ1YsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxpQkFBaUI7b0JBQ3hCLFdBQVc7aUJBQ1o7Z0JBQ0QsR0FBRyxFQUFFLFVBQVU7YUFDaEIsQ0FBQyxDQUFDO1lBRUgsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sc0JBQXNCLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQztZQUN2RCxNQUFNLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDbEMsTUFBTSxtQkFBbUIsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsNEJBQTRCLEVBQUUsS0FBSztZQUMxQyxNQUFNLE1BQU0sR0FBRztnQkFDYixnQkFBZ0IsRUFBRSxpQkFBaUI7Z0JBQ25DLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRTtnQkFDcEUsSUFBSSxFQUFFLFVBQVU7YUFDakIsQ0FBQztZQUVGLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtnQkFDOUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQ3RCLE1BQU0sTUFBTSxHQUFHLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO29CQUVsRSxVQUFVLENBQUM7d0JBQ1QsT0FBTzs2QkFDSixJQUFJLENBQUMsb0JBQVMsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUM7NkJBQzlDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDaEYsSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7NEJBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQUksQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ25FLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFJLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNuRSxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUVILFNBQVMsQ0FBQzt3QkFDUixPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDN0IsQ0FBQyxDQUFDLENBQUM7b0JBRUgsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEtBQUs7d0JBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDOzRCQUM3RixHQUFHLGFBQWE7NEJBQ2hCLEtBQUssRUFBRSxpQkFBaUI7eUJBQ3pCLENBQUMsQ0FBQzt3QkFFSCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQU0sQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzt3QkFFNUUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBYyxDQUFDO3dCQUM5RSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3dCQUM3QyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDN0Msa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2hELENBQUMsQ0FBQyxDQUFDO29CQUVILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxLQUFLO3dCQUM3RSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO3dCQUN0RixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7d0JBRXpDLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBTSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO3dCQUM5RSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQzt3QkFFcEUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBYyxDQUFDO3dCQUM5RSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDcEMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQzdDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNsRCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUs7Z0JBQzlELE1BQU0sVUFBVSxHQUFHO29CQUNqQjt3QkFDRSxPQUFPLEVBQUUsOENBQThDO3dCQUN2RCxNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRixDQUFDO2dCQUVGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLDhKQUE4SjtnQkFDOUosb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixVQUFVLEVBQUUsU0FBUztpQkFDdEIsQ0FBQyxDQUFDO2dCQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUN4RCxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsSUFBSSxFQUFFLFVBQVU7aUJBQ2pCLENBQUMsQ0FBQztnQkFFSCxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7b0JBQzNCLE1BQU0sRUFBRSxZQUFZO29CQUNwQixXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLFdBQVcsRUFBRTt3QkFDWCxVQUFVO3dCQUNWLElBQUksRUFBRSxVQUFVO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGdHQUFnRyxFQUFFLEtBQUs7Z0JBQ3hHLE1BQU0sVUFBVSxHQUFHO29CQUNqQjt3QkFDRSxPQUFPLEVBQUUsOENBQThDO3dCQUN2RCxNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRixDQUFDO2dCQUVGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDeEcsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixVQUFVLEVBQUUsU0FBUztpQkFDdEIsQ0FBQyxDQUFDO2dCQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0scUJBQXFCLENBQUMsbUJBQW1CLENBQUM7b0JBQ2pFLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixJQUFJLEVBQUUsVUFBVTtpQkFDakIsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFBRSxFQUFFO29CQUNwQyxNQUFNLEVBQUUscUJBQXFCO29CQUM3QixXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLGlCQUFpQixFQUFFLFNBQVM7b0JBQzVCLFdBQVcsRUFBRTt3QkFDWCxVQUFVO3dCQUNWLElBQUksRUFBRSxVQUFVO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUs7Z0JBQzFFLE1BQU0sVUFBVSxHQUFHO29CQUNqQjt3QkFDRSxPQUFPLEVBQUUsOENBQThDO3dCQUN2RCxNQUFNLEVBQUUsTUFBTTtxQkFDZjtvQkFDRDt3QkFDRSxPQUFPLEVBQUUsOENBQThDO3dCQUN2RCxNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRixDQUFDO2dCQUVGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLDhKQUE4SjtnQkFDOUosb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixVQUFVLEVBQUUsU0FBUztvQkFDckIsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxNQUFNO3dCQUNaLEtBQUssRUFBRSxXQUFXO3FCQUNuQjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3hELEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxNQUFNO3dCQUNaLEtBQUssRUFBRSxXQUFXO3FCQUNuQjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUMzQixNQUFNLEVBQUUsWUFBWTtvQkFDcEIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxVQUFVO29CQUNqQixXQUFXLEVBQUU7d0JBQ1gsVUFBVTt3QkFDVixJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLE1BQU07NEJBQ1osS0FBSyxFQUFFLFdBQVc7eUJBQ25CO3dCQUNELElBQUksRUFBRSxVQUFVO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGlFQUFpRSxFQUFFLEtBQUs7Z0JBQ3pFLE1BQU0sVUFBVSxHQUFHO29CQUNqQjt3QkFDRSxPQUFPLEVBQUUsOENBQThDO3dCQUN2RCxNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRixDQUFDO2dCQUVGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXpDLE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUN4RCxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGlCQUFpQixFQUFFLElBQUk7aUJBQ3hCLENBQUMsQ0FBQztnQkFFSCw2REFBNkQ7Z0JBQzdELEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDekQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDdkQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEMsUUFBUSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUVsRCxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7b0JBQzNCLE1BQU0sRUFBRSxZQUFZO29CQUNwQixXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLFdBQVcsRUFBRTt3QkFDWCxVQUFVO3dCQUNWLElBQUksRUFBRSxVQUFVO3dCQUNoQixpQkFBaUIsRUFBRSxJQUFJO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEtBQUs7Z0JBQ2xELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLDhKQUE4SjtnQkFDOUosb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixVQUFVLEVBQUUsZUFBZTtvQkFDM0IsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxNQUFNO3dCQUNaLEtBQUssRUFBRSxXQUFXO3FCQUNuQjtvQkFDRCxTQUFTO2lCQUNWLENBQUMsQ0FBQztnQkFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztvQkFDeEQsS0FBSztvQkFDTCxVQUFVO29CQUNWLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLE1BQU07d0JBQ1osS0FBSyxFQUFFLFdBQVc7cUJBQ25CO29CQUNELFNBQVM7aUJBQ1YsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLFlBQVk7b0JBQ3BCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixLQUFLLEVBQUUsVUFBVTtvQkFDakIsV0FBVyxFQUFFO3dCQUNYLFVBQVU7d0JBQ1YsSUFBSSxFQUFFOzRCQUNKLElBQUksRUFBRSxNQUFNOzRCQUNaLEtBQUssRUFBRSxXQUFXO3lCQUNuQjt3QkFDRCxJQUFJLEVBQUUsYUFBYTt3QkFDbkIsU0FBUztxQkFDVjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEtBQUs7Z0JBQ25FLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixTQUFTLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztnQkFDOUIsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDekMsS0FBSztvQkFDTCxVQUFVO29CQUNWLFVBQVUsRUFBRSxlQUFlO29CQUMzQixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLE1BQU07d0JBQ1osS0FBSyxFQUFFLFdBQVc7cUJBQ25CO29CQUNELFNBQVM7aUJBQ1YsQ0FBQyxDQUFDO2dCQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUN4RCxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsTUFBTTt3QkFDWixLQUFLLEVBQUUsV0FBVztxQkFDbkI7b0JBQ0QsU0FBUztpQkFDVixDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUMzQixNQUFNLEVBQUUsWUFBWTtvQkFDcEIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxVQUFVO29CQUNqQixXQUFXLEVBQUU7d0JBQ1gsVUFBVTt3QkFDVixJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLE1BQU07NEJBQ1osS0FBSyxFQUFFLFdBQVc7eUJBQ25CO3dCQUNELElBQUksRUFBRSxhQUFhO3dCQUNuQixTQUFTO3FCQUNWO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSztnQkFDdkQsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCO3dCQUNFLE9BQU8sRUFBRSw4Q0FBOEM7d0JBQ3ZELE1BQU0sRUFBRSxNQUFNO3FCQUNmO2lCQUNGLENBQUM7Z0JBQ0YsTUFBTSxlQUFlLEdBQUc7b0JBQ3RCO3dCQUNFLFNBQVMsRUFBRSxrQ0FBa0M7d0JBQzdDLElBQUksRUFBRTs0QkFDSjtnQ0FDRSxNQUFNLEVBQUUsOENBQThDO2dDQUN0RCxRQUFRLEVBQUUsSUFBSTtnQ0FDZCxVQUFVLEVBQUUsSUFBSTs2QkFDakI7eUJBQ0Y7d0JBQ0QsSUFBSSxFQUFFLGtCQUFrQjtxQkFDekI7aUJBQ0YsQ0FBQztnQkFDRixNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUM7Z0JBQy9CLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFFekIsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3RGLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekMsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLGVBQWU7b0JBQ2YsVUFBVTtvQkFDVixPQUFPO29CQUNQLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUN4RCxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGVBQWU7b0JBQ2YsT0FBTztvQkFDUCxVQUFVO2lCQUNYLENBQUMsQ0FBQztnQkFFSCxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7b0JBQzNCLE1BQU0sRUFBRSxZQUFZO29CQUNwQixXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLFdBQVcsRUFBRTt3QkFDWCxVQUFVO3dCQUNWLElBQUksRUFBRSxVQUFVO3dCQUNoQixlQUFlO3dCQUNmLE9BQU87d0JBQ1AsVUFBVTtxQkFDWDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEtBQUs7Z0JBQ2xGLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxlQUFlLEdBQUc7b0JBQ3RCO3dCQUNFLFNBQVMsRUFBRSxrQ0FBa0M7d0JBQzdDLElBQUksRUFBRTs0QkFDSjtnQ0FDRSxNQUFNLEVBQUUsOENBQThDO2dDQUN0RCxRQUFRLEVBQUUsSUFBSTtnQ0FDZCxVQUFVLEVBQUUsSUFBSTs2QkFDakI7eUJBQ0Y7d0JBQ0QsSUFBSSxFQUFFLGtCQUFrQjtxQkFDekI7b0JBQ0Q7d0JBQ0UsU0FBUyxFQUFFLDZDQUE2Qzt3QkFDeEQsSUFBSSxFQUFFLEVBQUU7d0JBQ1IsSUFBSSxFQUFFLGNBQWM7cUJBQ3JCO2lCQUNGLENBQUM7Z0JBRUYsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3RGLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekMsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLGVBQWU7b0JBQ2YsVUFBVTtpQkFDWCxDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3hELEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsZUFBZTtpQkFDaEIsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLFlBQVk7b0JBQ3BCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixLQUFLLEVBQUUsVUFBVTtvQkFDakIsV0FBVyxFQUFFO3dCQUNYLFVBQVU7d0JBQ1YsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSztnQkFDakUsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCO3dCQUNFLE9BQU8sRUFBRSw4Q0FBOEM7d0JBQ3ZELE1BQU0sRUFBRSxNQUFNO3FCQUNmO2lCQUNGLENBQUM7Z0JBQ0YsTUFBTSxlQUFlLEdBQUc7b0JBQ3RCO3dCQUNFLFNBQVMsRUFBRSxrQ0FBa0M7d0JBQzdDLElBQUksRUFBRTs0QkFDSjtnQ0FDRSxNQUFNLEVBQUUsOENBQThDO2dDQUN0RCxRQUFRLEVBQUUsSUFBSTtnQ0FDZCxVQUFVLEVBQUUsSUFBSTs2QkFDakI7eUJBQ0Y7d0JBQ0QsSUFBSSxFQUFFLGtCQUFrQjtxQkFDekI7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDekMsS0FBSztvQkFDTCxVQUFVLEVBQUUsVUFBVTtvQkFDdEIsZUFBZTtvQkFDZixVQUFVO29CQUNWLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsTUFBTTt3QkFDWixLQUFLLEVBQUUsV0FBVztxQkFDbkI7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUN4RCxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGVBQWU7b0JBQ2YsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxNQUFNO3dCQUNaLEtBQUssRUFBRSxXQUFXO3FCQUNuQjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUMzQixNQUFNLEVBQUUsWUFBWTtvQkFDcEIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxVQUFVO29CQUNqQixXQUFXLEVBQUU7d0JBQ1gsVUFBVTt3QkFDVixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsZUFBZTt3QkFDZixJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLE1BQU07NEJBQ1osS0FBSyxFQUFFLFdBQVc7eUJBQ25CO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsd0VBQXdFLEVBQUUsS0FBSztnQkFDaEYsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCO3dCQUNFLE9BQU8sRUFBRSw4Q0FBOEM7d0JBQ3ZELE1BQU0sRUFBRSxNQUFNO3FCQUNmO2lCQUNGLENBQUM7Z0JBQ0YsTUFBTSxlQUFlLEdBQUc7b0JBQ3RCO3dCQUNFLFNBQVMsRUFBRSxrQ0FBa0M7d0JBQzdDLElBQUksRUFBRTs0QkFDSjtnQ0FDRSxNQUFNLEVBQUUsOENBQThDO2dDQUN0RCxRQUFRLEVBQUUsSUFBSTtnQ0FDZCxVQUFVLEVBQUUsSUFBSTs2QkFDakI7eUJBQ0Y7d0JBQ0QsSUFBSSxFQUFFLGtCQUFrQjtxQkFDekI7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hHLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUN6QyxLQUFLO29CQUNMLFVBQVUsRUFBRSxVQUFVO29CQUN0QixlQUFlO29CQUNmLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0scUJBQXFCLENBQUMsbUJBQW1CLENBQUM7b0JBQ2pFLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsZUFBZTtpQkFDaEIsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFBRSxFQUFFO29CQUNwQyxNQUFNLEVBQUUscUJBQXFCO29CQUM3QixXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLGlCQUFpQixFQUFFLFNBQVM7b0JBQzVCLFdBQVcsRUFBRTt3QkFDWCxVQUFVO3dCQUNWLElBQUksRUFBRSxVQUFVO3dCQUNoQixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEtBQUs7Z0JBQ3hFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxlQUFlLEdBQUc7b0JBQ3RCO3dCQUNFLFNBQVMsRUFBRSxrQ0FBa0M7d0JBQzdDLElBQUksRUFBRTs0QkFDSjtnQ0FDRSxNQUFNLEVBQUUsOENBQThDO2dDQUN0RCxRQUFRLEVBQUUsSUFBSTtnQ0FDZCxVQUFVLEVBQUUsSUFBSTs2QkFDakI7eUJBQ0Y7d0JBQ0QsSUFBSSxFQUFFLGtCQUFrQjtxQkFDekI7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsU0FBUyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBQzlCLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekMsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLGVBQWU7b0JBQ2YsVUFBVTtpQkFDWCxDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3hELEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsZUFBZTtpQkFDaEIsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLFlBQVk7b0JBQ3BCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixLQUFLLEVBQUUsVUFBVTtvQkFDakIsV0FBVyxFQUFFO3dCQUNYLFVBQVU7d0JBQ1YsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsS0FBSztnQkFDeEQsTUFBTSxZQUFZO3FCQUNmLG1CQUFtQixDQUFDO29CQUNuQixLQUFLO29CQUNMLFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxPQUFPLEVBQUUsOENBQThDOzRCQUN2RCxNQUFNLEVBQUUsTUFBTTt5QkFDZjtxQkFDRjtvQkFDRCxJQUFJLEVBQUUsT0FBTztpQkFDZCxDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsS0FBSztnQkFDeEQsTUFBTSxxQkFBcUI7cUJBQ3hCLG1CQUFtQixDQUFDO29CQUNuQixLQUFLO29CQUNMLFVBQVUsRUFBRSxNQUFNO29CQUNsQixVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsT0FBTyxFQUFFLDhDQUE4Qzs0QkFDdkQsTUFBTSxFQUFFLE1BQU07eUJBQ2Y7cUJBQ0Y7b0JBQ0QsSUFBSSxFQUFFLFVBQVU7aUJBQ2pCLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsa0ZBQWtGLENBQUMsQ0FBQztZQUNoSCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRSxLQUFLO2dCQUN2RSxNQUFNLFVBQVUsR0FBRztvQkFDakI7d0JBQ0UsT0FBTyxFQUFFLDhDQUE4Qzt3QkFDdkQsTUFBTSxFQUFFLE1BQU07cUJBQ2Y7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM3Qyw4SkFBOEo7Z0JBQzlKLG9CQUFvQixDQUFDLHFCQUFxQixDQUN4QztvQkFDRSxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsVUFBVSxFQUFFLFNBQVM7aUJBQ3RCLEVBQ0QsTUFBTSxDQUNQLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDakUsS0FBSztvQkFDTCxVQUFVO29CQUNWLElBQUksRUFBRSxVQUFVO2lCQUNqQixDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUMzQixNQUFNLEVBQUUscUJBQXFCO29CQUM3QixXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLFdBQVcsRUFBRTt3QkFDWCxVQUFVO3dCQUNWLElBQUksRUFBRSxVQUFVO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEtBQUs7Z0JBQ3BGLE1BQU0sVUFBVSxHQUFHO29CQUNqQjt3QkFDRSxPQUFPLEVBQUUsNENBQTRDO3dCQUNyRCxNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRixDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTtpQkFDakMsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ25HLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFN0MsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3JDLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsVUFBVTtpQkFDWCxDQUFDLENBQUM7Z0JBRUgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxLQUFLO2dCQUNoRSxNQUFNLFVBQVUsR0FBRztvQkFDakI7d0JBQ0UsT0FBTyxFQUFFLDRDQUE0Qzt3QkFDckQsTUFBTSxFQUFFLE1BQU07cUJBQ2Y7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLFFBQVEsR0FBRyw0Q0FBNEMsQ0FBQztnQkFFOUQsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNuRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTdDLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUNyQyxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFFBQVE7aUJBQ1QsQ0FBQyxDQUFDO2dCQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsUUFBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsaUZBQWlGLEVBQUUsS0FBSztnQkFDekYsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCO3dCQUNFLE9BQU8sRUFBRSw0Q0FBNEM7d0JBQ3JELE1BQU0sRUFBRSxNQUFNO3dCQUNkLFNBQVMsRUFBRSxXQUFXO3FCQUN2QjtpQkFDRixDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTtpQkFDakMsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ25HLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFN0MsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3JDLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixJQUFJLEVBQUUsZUFBZTtvQkFDckIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsVUFBVTtpQkFDWCxDQUFDLENBQUM7Z0JBRUgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLEtBQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGdGQUFnRixFQUFFLEtBQUs7Z0JBQ3hGLE1BQU0sVUFBVSxHQUFHO29CQUNqQjt3QkFDRSxPQUFPLEVBQUUsNENBQTRDO3dCQUNyRCxNQUFNLEVBQUUsTUFBTTt3QkFDZCxTQUFTLEVBQUUsV0FBVztxQkFDdkI7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLFVBQVUsR0FBRztvQkFDakIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLG9CQUFvQixFQUFFLFVBQVU7aUJBQ2pDLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUcsb0VBQW9FLENBQUM7Z0JBRXhGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUU3QyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztvQkFDckMsS0FBSztvQkFDTCxVQUFVO29CQUNWLElBQUksRUFBRSxjQUFjO29CQUNwQixVQUFVO29CQUNWLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsb0dBQW9HLEVBQUUsS0FBSztnQkFDNUcsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCO3dCQUNFLE9BQU8sRUFBRSw0Q0FBNEM7d0JBQ3JELE1BQU0sRUFBRSxNQUFNO3dCQUNkLFNBQVMsRUFBRSxXQUFXO3FCQUN2QjtpQkFDRixDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTtpQkFDakMsQ0FBQztnQkFFRixNQUFNLFVBQVUsR0FBRyxvRUFBb0UsQ0FBQztnQkFDeEYsTUFBTSxjQUFjLEdBQUcsNENBQTRDLENBQUM7Z0JBRXBFLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUU3QyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztvQkFDckMsS0FBSztvQkFDTCxVQUFVO29CQUNWLElBQUksRUFBRSxjQUFjO29CQUNwQixVQUFVO29CQUNWLFVBQVU7b0JBQ1YsY0FBYztpQkFDZixDQUFDLENBQUM7Z0JBRUgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLGNBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDhGQUE4RixFQUFFLEtBQUs7Z0JBQ3RHLE1BQU0sVUFBVSxHQUFHO29CQUNqQjt3QkFDRSxPQUFPLEVBQUUsNENBQTRDO3dCQUNyRCxNQUFNLEVBQUUsbUJBQW1CO3FCQUM1QjtpQkFDRixDQUFDO2dCQUNGLE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsV0FBVztvQkFDekIsb0JBQW9CLEVBQUUsV0FBVztpQkFDbEMsQ0FBQztnQkFFRixNQUFNLFVBQVUsR0FBRyxvRUFBb0UsQ0FBQztnQkFDeEYsTUFBTSxjQUFjLEdBQUcsNENBQTRDLENBQUM7Z0JBRXBFLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUU3QyxtQ0FBbUM7Z0JBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFekUsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3JDLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixJQUFJLEVBQUUsY0FBYztvQkFDcEIsVUFBVTtvQkFDVixVQUFVO29CQUNWLGNBQWM7aUJBQ2YsQ0FBQyxDQUFDO2dCQUVILGlFQUFpRTtnQkFDakUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQywwQ0FBMEM7Z0JBQzFDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsY0FBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUUsS0FBSztnQkFDcEYsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLFlBQVksRUFBRSxVQUFVO29CQUN4QixvQkFBb0IsRUFBRSxVQUFVO2lCQUNqQyxDQUFDO2dCQUVGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUU3QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7Z0JBQ2xCLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDO2dCQUVwQyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztvQkFDckMsS0FBSztvQkFDTCxJQUFJLEVBQUUsV0FBVztvQkFDakIsVUFBVTtvQkFDVixLQUFLO29CQUNMLE9BQU87aUJBQ1IsQ0FBQyxDQUFDO2dCQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsS0FBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE9BQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxLQUFLO2dCQUNsRixNQUFNLFVBQVUsR0FBRztvQkFDakIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLG9CQUFvQixFQUFFLFVBQVU7aUJBQ2pDLENBQUM7Z0JBQ0YsTUFBTSxVQUFVLEdBQUcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFFbkUsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNuRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTdDLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUNyQyxLQUFLO29CQUNMLElBQUksRUFBRSxhQUFhO29CQUNuQixVQUFVO29CQUNWLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSztnQkFDM0UsTUFBTSxVQUFVLEdBQUcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFFbkUsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNuRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTdDLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUNyQyxLQUFLO29CQUNMLElBQUksRUFBRSxNQUFNO29CQUNaLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGlIQUFpSCxFQUFFLEtBQUs7Z0JBQ3pILE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTtpQkFDakMsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ25HLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFN0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO2dCQUNsQixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQztnQkFDcEMsTUFBTSxjQUFjLEdBQUcsNENBQTRDLENBQUM7Z0JBRXBFLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUNyQyxLQUFLO29CQUNMLElBQUksRUFBRSxXQUFXO29CQUNqQixVQUFVO29CQUNWLEtBQUs7b0JBQ0wsY0FBYztvQkFDZCxPQUFPO2lCQUNSLENBQUMsQ0FBQztnQkFFSCxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLEtBQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxPQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLGNBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxLQUFLO2dCQUNsRixNQUFNLFlBQVksR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUM5RCxNQUFNLFVBQVUsR0FBRztvQkFDakIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLG9CQUFvQixFQUFFLFVBQVU7aUJBQ2pDLENBQUM7Z0JBRUYsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNuRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTdDLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUNyQyxLQUFLO29CQUNMLElBQUksRUFBRSxhQUFhO29CQUNuQixZQUFZO29CQUNaLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSztnQkFDN0UsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCO3dCQUNFLE9BQU8sRUFBRSxpREFBaUQ7d0JBQzFELE1BQU0sRUFBRSxtQkFBbUI7cUJBQzVCO2lCQUNGLENBQUM7Z0JBQ0YsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLFlBQVksRUFBRSxVQUFVO29CQUN4QixvQkFBb0IsRUFBRSxVQUFVO2lCQUNqQyxDQUFDO2dCQUVGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUU3QyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztvQkFDckMsS0FBSztvQkFDTCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVO29CQUNWLEtBQUssRUFBRSxHQUFHO29CQUNWLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxLQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxLQUFLO2dCQUM3RSxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ25HLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFN0MsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3JDLEtBQUs7b0JBQ0wsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFLEVBQUU7aUJBQ2YsQ0FBQyxDQUFDO2dCQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEtBQUs7Z0JBQ2hGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUU3QyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztvQkFDckMsS0FBSztvQkFDTCxJQUFJLEVBQUUsV0FBVztvQkFDakIsVUFBVSxFQUFFLEVBQUU7aUJBQ2YsQ0FBQyxDQUFDO2dCQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLG1HQUFtRyxFQUFFLEtBQUs7Z0JBQzNHLE1BQU0sVUFBVSxHQUFHO29CQUNqQjt3QkFDRSxPQUFPLEVBQUUsNENBQTRDO3dCQUNyRCxNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRixDQUFDO2dCQUVGLE1BQU0sa0JBQWtCLEdBQUc7b0JBQ3pCLFlBQVksRUFBRSxVQUFVO29CQUN4QixvQkFBb0IsRUFBRSxVQUFVO29CQUNoQyxRQUFRLEVBQUUsU0FBUztpQkFDcEIsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ25HLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFN0MsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3JDLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNQLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO3dCQUN4RCxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7cUJBQ3pFO2lCQUNGLENBQUMsQ0FBQztnQkFFSCxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzVELENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEtBQUs7Z0JBQ3JFLE1BQU0sUUFBUSxHQUFHLElBQUkscUJBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFFdkUsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLFlBQVksRUFBRSxVQUFVO29CQUN4QixvQkFBb0IsRUFBRSxVQUFVO2lCQUNqQyxDQUFDO2dCQUNGLE1BQU0sVUFBVSxHQUFHLG9FQUFvRSxDQUFDO2dCQUV4RixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzFELEtBQUs7b0JBQ0wsVUFBVSxFQUFFLGNBQWM7b0JBQzFCLFVBQVU7b0JBQ1YsVUFBVTtpQkFDWCxDQUFDLENBQUM7Z0JBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDckQsTUFBTSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLENBQUMsSUFBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxLQUFLO2dCQUNsRixNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBRXZFLE1BQU0sUUFBUSxHQUFHLDRDQUE0QyxDQUFDO2dCQUM5RCxNQUFNLFVBQVUsR0FBRztvQkFDakIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLG9CQUFvQixFQUFFLFVBQVU7aUJBQ2pDLENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMxRCxLQUFLO29CQUNMLFVBQVUsRUFBRSxTQUFTO29CQUNyQixVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsT0FBTyxFQUFFLDRDQUE0Qzs0QkFDckQsTUFBTSxFQUFFLE1BQU07eUJBQ2Y7cUJBQ0Y7b0JBQ0QsVUFBVTtvQkFDVixRQUFRO2lCQUNULENBQUMsQ0FBQztnQkFFSCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLFFBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FBQztZQUVILENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFVBQVU7Z0JBQzNELEVBQUUsQ0FBQyx5Q0FBeUMsVUFBVSw0QkFBNEIsRUFBRSxLQUFLO29CQUN2RixNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBRXZFLDJFQUEyRTtvQkFDM0UsMkVBQTJFO29CQUMzRSxzRUFBc0U7b0JBQ3RFLHFDQUFxQztvQkFDckMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUMxRCxLQUFLO3dCQUNMLFVBQVU7d0JBQ1YsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRTtxQkFDMUUsQ0FBQyxDQUFDO29CQUVILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDckQsTUFBTSxDQUFDLE9BQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ2hELDhFQUE4RTtvQkFDOUUsTUFBTSxDQUFDLE1BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0JBQ25ELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDdEQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLO2dCQUN6RSxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBRXpFLE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTtpQkFDakMsQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRyxvRUFBb0UsQ0FBQztnQkFFeEYsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUM1RCxLQUFLO29CQUNMLFVBQVUsRUFBRSxjQUFjO29CQUMxQixVQUFVO29CQUNWLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsc0ZBQXNGLEVBQUUsS0FBSztnQkFDOUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUV4RSxNQUFNLFVBQVUsR0FBRztvQkFDakIsWUFBWSxFQUFFLFdBQVc7b0JBQ3pCLG9CQUFvQixFQUFFLFdBQVc7aUJBQ2xDLENBQUM7Z0JBQ0YsTUFBTSxVQUFVLEdBQUcsb0VBQW9FLENBQUM7Z0JBQ3hGLE1BQU0sY0FBYyxHQUFHLDRDQUE0QyxDQUFDO2dCQUVwRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQzNELEtBQUs7b0JBQ0wsVUFBVSxFQUFFLGNBQWM7b0JBQzFCLFVBQVU7b0JBQ1YsY0FBYztvQkFDZCxVQUFVO2lCQUNYLENBQUMsQ0FBQztnQkFFSCw2Q0FBNkM7Z0JBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLENBQUMsY0FBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxpRkFBaUYsRUFBRSxLQUFLO2dCQUN6RixNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBRXZFLE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTtpQkFDakMsQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRyxvRUFBb0UsQ0FBQztnQkFDeEYsTUFBTSxjQUFjLEdBQUcsNENBQTRDLENBQUM7Z0JBRXBFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDMUQsS0FBSztvQkFDTCxVQUFVLEVBQUUsY0FBYztvQkFDMUIsVUFBVTtvQkFDVixjQUFjO29CQUNkLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLENBQUMsY0FBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLO2dCQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTtpQkFDakMsQ0FBQztnQkFDRixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7Z0JBRWxCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDMUQsS0FBSztvQkFDTCxVQUFVLEVBQUUsV0FBVztvQkFDdkIsS0FBSztvQkFDTCxVQUFVO2lCQUNYLENBQUMsQ0FBQztnQkFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sQ0FBQyxLQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLCtGQUErRixFQUFFLEtBQUs7Z0JBQ3ZHLE1BQU0sUUFBUSxHQUFHLElBQUkscUJBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdkUsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLFlBQVksRUFBRSxVQUFVO29CQUN4QixvQkFBb0IsRUFBRSxVQUFVO2lCQUNqQyxDQUFDO2dCQUNGLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztnQkFDbEIsTUFBTSxjQUFjLEdBQUcsNENBQTRDLENBQUM7Z0JBRXBFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDMUQsS0FBSztvQkFDTCxVQUFVLEVBQUUsV0FBVztvQkFDdkIsS0FBSztvQkFDTCxjQUFjO29CQUNkLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLEtBQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLENBQUMsY0FBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxLQUFLO2dCQUN0RSxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTtpQkFDakMsQ0FBQztnQkFDRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7Z0JBRXpCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDMUQsS0FBSztvQkFDTCxVQUFVLEVBQUUsZUFBZTtvQkFDM0IsU0FBUztvQkFDVCxVQUFVO2lCQUNYLENBQUMsQ0FBQztnQkFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sQ0FBQyxTQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUs7Z0JBQzFFLE1BQU0sUUFBUSxHQUFHLElBQUkscUJBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDMUUsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLFlBQVksRUFBRSxVQUFVO29CQUN4QixvQkFBb0IsRUFBRSxVQUFVO2lCQUNqQyxDQUFDO2dCQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQztnQkFFekIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUM3RCxLQUFLO29CQUNMLFVBQVUsRUFBRSxlQUFlO29CQUMzQixTQUFTO29CQUNULFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLFNBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSztnQkFDdEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLFVBQVUsR0FBRztvQkFDakIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLG9CQUFvQixFQUFFLFVBQVU7aUJBQ2pDLENBQUM7Z0JBQ0YsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO2dCQUV6QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3pELEtBQUs7b0JBQ0wsVUFBVSxFQUFFLGVBQWU7b0JBQzNCLFNBQVM7b0JBQ1QsVUFBVTtpQkFDWCxDQUFDLENBQUM7Z0JBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDckQsTUFBTSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLENBQUMsU0FBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw0RUFBNEUsRUFBRSxLQUFLO2dCQUNwRixNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sVUFBVSxHQUFHO29CQUNqQixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTtpQkFDakMsQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUVuRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzFELEtBQUs7b0JBQ0wsVUFBVSxFQUFFLGFBQWE7b0JBQ3pCLFVBQVU7b0JBQ1YsVUFBVTtpQkFDWCxDQUFDLENBQUM7Z0JBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDckQsTUFBTSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLENBQUMsU0FBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsTUFBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSztnQkFDN0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLFVBQVUsR0FBRyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUVuRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzFELEtBQUs7b0JBQ0wsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxTQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLO2dCQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLENBQUMsR0FBRyxFQUFFLENBQ0osUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMzQyxLQUFLO29CQUNMLFVBQVUsRUFBRSxhQUFhO2lCQUMxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUs7Z0JBQzVELE1BQU0sUUFBUSxHQUFHLElBQUkscUJBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdkUsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLFlBQVksRUFBRSxVQUFVO29CQUN4QixvQkFBb0IsRUFBRSxVQUFVO2lCQUNqQyxDQUFDO2dCQUNGLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztnQkFFbEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMxRCxzQkFBc0IsRUFBRSxVQUFVO29CQUNsQyxLQUFLO29CQUNMLFVBQVUsRUFBRSxXQUFXO29CQUN2QixLQUFLO29CQUNMLFVBQVU7b0JBQ1YsS0FBSyxFQUFFLElBQUk7aUJBQ1osQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxzQkFBdUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sQ0FBQyxLQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxDQUFDLEtBQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSztnQkFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLFVBQVUsR0FBRztvQkFDakIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLG9CQUFvQixFQUFFLFVBQVU7aUJBQ2pDLENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMxRCxLQUFLO29CQUNMLFVBQVUsRUFBRSxhQUFhO29CQUN6QixNQUFNO29CQUNOLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsdUVBQXVFLEVBQUUsS0FBSztnQkFDL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLFVBQVUsR0FBRztvQkFDakIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLG9CQUFvQixFQUFFLFVBQVU7aUJBQ2pDLENBQUM7Z0JBQ0YsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCO3dCQUNFLE9BQU8sRUFBRSxpREFBaUQ7d0JBQzFELE1BQU0sRUFBRSxtQkFBbUI7cUJBQzVCO2lCQUNGLENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMxRCxLQUFLO29CQUNMLFVBQVUsRUFBRSxRQUFRO29CQUNwQixVQUFVO29CQUNWLFVBQVU7b0JBQ1YsS0FBSyxFQUFFLEdBQUc7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekMsTUFBTSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLENBQUMsS0FBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekQsTUFBTSxDQUFDLFVBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVFLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGdHQUFnRyxFQUFFLEtBQUs7Z0JBQ3hHLE1BQU0sVUFBVSxHQUFHO29CQUNqQjt3QkFDRSxPQUFPLEVBQUUsOENBQThDO3dCQUN2RCxNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRixDQUFDO2dCQUVGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzdDLG9CQUFvQixDQUFDLHFCQUFxQixDQUN4QztvQkFDRSxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsVUFBVSxFQUFFLFNBQVM7aUJBQ3RCLEVBQ0QsTUFBTSxDQUNQLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDakUsS0FBSztvQkFDTCxVQUFVLEVBQUUsTUFBTTtvQkFDbEIsVUFBVTtvQkFDVixJQUFJLEVBQUUsVUFBVTtpQkFDakIsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLHFCQUFxQjtvQkFDN0IsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxVQUFVO29CQUNqQixXQUFXLEVBQUU7d0JBQ1gsVUFBVSxFQUFFLE1BQU07d0JBQ2xCLFVBQVU7d0JBQ1YsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsK0ZBQStGLEVBQUUsS0FBSztnQkFDdkcsTUFBTSxNQUFNLEdBQStCO29CQUN6QyxrQkFBa0IsRUFBRSwwQkFBMEI7b0JBQzlDLFNBQVMsRUFBRSxrQ0FBa0M7b0JBQzdDLFVBQVUsRUFBRSxDQUFDO29CQUNiLE9BQU8sRUFBRSxLQUFLO29CQUNkLE9BQU8sRUFBRSxFQUFFO29CQUNYLFFBQVEsRUFBRSxDQUFDLG9FQUFvRSxDQUFDO29CQUNoRixVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsTUFBTSxFQUFFLEdBQUc7NEJBQ1gsT0FBTyxFQUNMLDhHQUE4Rzs0QkFDaEgsU0FBUyxFQUFFLFlBQVk7eUJBQ3hCO3FCQUNGO29CQUNELFVBQVUsRUFBRSw4QkFBOEI7b0JBQzFDLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxNQUFlO29CQUN6QixJQUFJLEVBQUUsZUFBZTtvQkFDckIsT0FBTyxFQUFFLElBQUk7aUJBQ2QsQ0FBQztnQkFFRixJQUFJLG1CQUF3QixDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUNSLElBQUksQ0FBQyxrQkFBa0IsWUFBWSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDL0QsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO29CQUMzQixPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDLENBQUM7cUJBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFdkMsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRS9DLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztnQkFDeEQsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzlDLG1CQUFvQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0QsbUJBQW9CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkUsbUJBQW9CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMvRCxtQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEtBQUs7Z0JBQ2pDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ3hFLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLDBKQUEwSjtnQkFDMUosYUFBYSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFFNUUsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUMzQixNQUFNLEVBQUUsWUFBWTtvQkFDcEIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxVQUFVO2lCQUNsQixDQUFDO2dCQUNGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxZQUFZLENBQUMsZUFBZSxDQUFDO29CQUMzRCxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsR0FBRyxFQUFFLFlBQVk7aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUs7Z0JBQzdELE1BQU0sVUFBVSxHQUFHO29CQUNqQixRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLFlBQVk7b0JBQ3BCLEtBQUssRUFBRSxVQUFVO2lCQUNsQixDQUFDO2dCQUNGLE1BQU0sWUFBWTtxQkFDZixlQUFlLENBQUM7b0JBQ2YsS0FBSztvQkFDTCxVQUFVO29CQUNWLEdBQUcsRUFBRSxZQUFZO2lCQUNsQixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7WUFDbEYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRTtZQUMxQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7Z0JBQzlDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO29CQUN0QixNQUFNLE1BQU0sR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztvQkFDbEUsSUFBSSxXQUE0QixDQUFDO29CQUNqQyxJQUFJLG1CQUFvQyxDQUFDO29CQUN6QyxVQUFVLENBQUM7d0JBQ1QsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQVMsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQzt3QkFFckUsbUJBQW1CLEdBQUcsT0FBTzs2QkFDMUIsSUFBSSxDQUFDLGlCQUFNLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDOzZCQUN6QyxRQUFRLENBQUMsRUFBRSxHQUFHLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDckQsQ0FBQyxDQUFDLENBQUM7b0JBRUgsU0FBUyxDQUFDO3dCQUNSLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUM3QixDQUFDLENBQUMsQ0FBQztvQkFDSCxFQUFFLENBQUMseUJBQXlCLEVBQUUsS0FBSzt3QkFDakMsV0FBVyxDQUFDLFFBQVEsQ0FBQzs0QkFDbkI7Z0NBQ0UsY0FBYyxFQUFFLE1BQU07Z0NBQ3RCLEVBQUUsRUFBRSxFQUFFO2dDQUNOLEdBQUcsRUFBRSxFQUFFO2dDQUNQLElBQUksRUFBRSxLQUFLO2dDQUNYLFlBQVksRUFDViw0U0FBNFM7NkJBQy9TO3lCQUNGLENBQUMsQ0FBQzt3QkFDSCxNQUFNLE1BQU0sR0FBRzs0QkFDYixnQkFBZ0IsRUFBRSxvQkFBUyxDQUFDLEVBQUUsQ0FBQywwQkFBb0M7NEJBQ25FLFdBQVcsRUFBRSxJQUFJO3lCQUNsQixDQUFDO3dCQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN0RSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO3dCQUVqRSxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3hDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNsRCxDQUFDLENBQUMsQ0FBQztvQkFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSzt3QkFDbkUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDakYsTUFBTSxNQUFNLEdBQUc7NEJBQ2IsZ0JBQWdCLEVBQUUsb0JBQVMsQ0FBQyxFQUFFLENBQUMsMEJBQW9DOzRCQUNuRSxXQUFXLEVBQUUsSUFBSTt5QkFDbEIsQ0FBQzt3QkFFRixNQUFNLE1BQU07NkJBQ1QsK0JBQStCLENBQUMsTUFBTSxDQUFDOzZCQUN2QyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO3dCQUVuRixXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3hDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNqRCxDQUFDLENBQUMsQ0FBQztvQkFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUUsS0FBSzt3QkFDN0MsV0FBVyxDQUFDLFFBQVEsQ0FBQzs0QkFDbkI7Z0NBQ0UsY0FBYyxFQUFFLE1BQU07Z0NBQ3RCLEVBQUUsRUFBRSxFQUFFO2dDQUNOLEdBQUcsRUFBRSxFQUFFO2dDQUNQLElBQUksRUFBRSxLQUFLO2dDQUNYLFlBQVksRUFDViw0U0FBNFM7NkJBQy9TO3lCQUNGLENBQUMsQ0FBQzt3QkFDSCxNQUFNLE1BQU0sR0FBRzs0QkFDYixnQkFBZ0IsRUFBRSxZQUFZOzRCQUM5QixXQUFXLEVBQUUsSUFBSTt5QkFDbEIsQ0FBQzt3QkFFRixNQUFNLE1BQU07NkJBQ1QsK0JBQStCLENBQUMsTUFBTSxDQUFDOzZCQUN2QyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO3dCQUV6RixXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3hDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNqRCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsc0JBQXNCLEVBQUU7WUFDL0IsTUFBTSxlQUFlLEdBQUc7Z0JBQ3RCLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSxPQUFPO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCLENBQUM7WUFFRixTQUFTLENBQUMsS0FBSztnQkFDYixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsOEJBQThCLEVBQUUsS0FBSztnQkFDdEMsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLENBQUM7Z0JBQzNGLE1BQU0seUJBQXlCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztnQkFDaEcseUJBQXlCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNwRSxXQUFXLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUV0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztvQkFDdkQsZ0JBQWdCLEVBQUUsWUFBWTtvQkFDOUIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLGVBQWUsRUFBRSxLQUFLO2lCQUN2QixDQUFDLENBQUM7Z0JBRUgsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDcEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDckQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3ZDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEtBQUs7Z0JBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2dCQUMzRixNQUFNLHlCQUF5QixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7Z0JBQ2hHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFcEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsb0JBQW9CLENBQUM7b0JBQ3ZELGdCQUFnQixFQUFFLFlBQVk7b0JBQzlCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixlQUFlLEVBQUUsSUFBSTtpQkFDdEIsQ0FBQyxDQUFDO2dCQUVILE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQ3BELE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ3JELFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDO1lBQzVCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQztZQUNqQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxVQUFVLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUM5RyxLQUFLLENBQ04sQ0FBQztZQUNGLE1BQU0sMEJBQTBCLEdBQWM7Z0JBQzVDLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUM3QixZQUFZLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSxFQUFFO29CQUNOLFVBQVUsRUFBRSxhQUFhO2lCQUMxQjtnQkFDRCxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLEtBQUssRUFBRSxzQkFBc0I7Z0JBQzdCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixVQUFVLEVBQUUsS0FBSztnQkFDakIsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixXQUFXLEVBQUUsRUFBRTtnQkFDZixnQkFBZ0IsRUFBRSxFQUFFO2dCQUNwQixRQUFRLEVBQUU7b0JBQ1I7d0JBQ0UsS0FBSyxFQUFFLFFBQVE7d0JBQ2YsVUFBVSxFQUFFLGFBQWE7d0JBQ3pCLGNBQWMsRUFBRSxLQUFLO3dCQUNyQixlQUFlLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSw2QkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLDZCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7d0JBQzVGLGVBQWUsRUFBRSxhQUFhO3dCQUM5QixNQUFNO3dCQUNOLGNBQWM7cUJBQ2Y7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsSUFBSSx1QkFBdUIsQ0FBQztZQUM1QixNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sUUFBUSxHQUFrQjtnQkFDOUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQzdCLE1BQU07Z0JBQ04sU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLFVBQVU7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osY0FBYzthQUNmLENBQUM7WUFFRixVQUFVLENBQUMsS0FBSztnQkFDZCx1QkFBdUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO2dCQUNuRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDN0QsT0FBTztxQkFDSixJQUFJLENBQUMsb0JBQVMsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUM7cUJBQzlDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEYsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsS0FBSztnQkFDYixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztZQUVILG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUU1RCxZQUFZLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLFdBQVcsR0FBRywwQkFBMEIsQ0FBQyxXQUFXLENBQUM7Z0JBRTNELEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxLQUFLO29CQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixZQUFZLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztvQkFFM0csTUFBTSxTQUFTLEdBQUcsTUFBTSxZQUFZLENBQUMsdUJBQXVCLENBQUM7d0JBQzNELE9BQU8sRUFBRTs0QkFDUCxVQUFVOzRCQUNWLG1CQUFtQixFQUFFLDhCQUFtQixDQUFDLE1BQU07eUJBQ2hEO3FCQUNGLENBQUMsQ0FBQztvQkFDSCxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDLENBQUMsQ0FBQztnQkFFSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsS0FBSztvQkFDbEYsTUFBTSxtQkFBbUIsR0FBRyxtQ0FBbUMsQ0FBQztvQkFDaEUsSUFBSSxZQUFpQixDQUFDO29CQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDO3lCQUNSLElBQUksQ0FBQyxrQkFBa0IsWUFBWSxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDaEUsWUFBWSxHQUFHLElBQUksQ0FBQzt3QkFDcEIsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQyxDQUFDO3lCQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztvQkFFMUMsTUFBTSxZQUFZLENBQUMsdUJBQXVCLENBQUM7d0JBQ3pDLE9BQU8sRUFBRTs0QkFDUCxVQUFVOzRCQUNWLG1CQUFtQixFQUFFLDhCQUFtQixDQUFDLE1BQU07NEJBQy9DLG1CQUFtQjt5QkFDcEI7cUJBQ0YsQ0FBQyxDQUFDO29CQUVILFlBQVksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDLENBQUMsQ0FBQztnQkFFSCxFQUFFLENBQUMsSUFBSSxRQUFRLHVCQUF1QixFQUFFLEtBQUs7b0JBQzNDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsZ0JBQXVCLENBQUMsQ0FBQztvQkFDM0UsSUFBSSxDQUFDLEtBQUssQ0FBQzt5QkFDUixHQUFHLENBQ0Ysa0JBQWtCLFlBQVksQ0FBQyxFQUFFLEVBQUUsNEJBQ2pDLDBCQUEwQixDQUFDLFdBQzdCLGNBQWMsQ0FDZjt5QkFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBRTVELE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLFdBQVcsQ0FBQzt3QkFDakQsS0FBSzt3QkFDTCxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLDhCQUFtQixDQUFDLE1BQU0sRUFBRTt3QkFDckYsR0FBRyxFQUFFLFdBQVc7cUJBQ2pCLENBQUMsQ0FBQztvQkFDSCxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUNwRCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUE2QixDQUFDO29CQUN0RixTQUFTLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxVQUFVLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNqRyxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUVILEVBQUUsQ0FBQyxJQUFJLFFBQVEsMkRBQTJELEVBQUUsS0FBSztvQkFDL0UsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxnQkFBdUIsQ0FBQyxDQUFDO29CQUMzRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixZQUFZLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztvQkFFM0csTUFBTSxXQUFXLEdBQUcsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDO3dCQUNqRCxrQkFBa0IsRUFBRSxVQUFVO3dCQUM5QixLQUFLO3dCQUNMLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSw4QkFBbUIsQ0FBQyxNQUFNLEVBQUU7d0JBQ3hFLEdBQUcsRUFBRSxXQUFXO3FCQUNqQixDQUFDLENBQUM7b0JBQ0gsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDcEQsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBNkIsQ0FBQztvQkFDdEYsU0FBUyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDakcsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFFSCxFQUFFLENBQUMsSUFBSSxRQUFRLHFEQUFxRCxFQUFFLEtBQUs7b0JBQ3pFLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsZ0JBQXVCLENBQUMsQ0FBQztvQkFDM0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsWUFBWSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDLENBQUM7b0JBRTNHLE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLFdBQVcsQ0FBQzt3QkFDakQsS0FBSzt3QkFDTCxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsOEJBQW1CLENBQUMsTUFBTSxFQUFFO3dCQUN4RSxHQUFHLEVBQUUsV0FBVztxQkFDakIsQ0FBQyxDQUFDO29CQUNILFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0JBQ3BELE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQTZCLENBQUM7b0JBQ3RGLFNBQVMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLFVBQVUsQ0FBQyxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQ2pHLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBRUgsRUFBRSxDQUFDLElBQUksUUFBUSwyRUFBMkUsRUFBRSxLQUFLO29CQUMvRixNQUFNLG1CQUFtQixHQUFHLG1DQUFtQyxDQUFDO29CQUNoRSxJQUFJLFlBQWlCLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUM7eUJBQ1IsSUFBSSxDQUFDLGtCQUFrQixZQUFZLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNoRSxZQUFZLEdBQUcsSUFBSSxDQUFDO3dCQUNwQixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDLENBQUM7eUJBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO29CQUUxQyxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUM7d0JBQzdCLEtBQUs7d0JBQ0wsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLDhCQUFtQixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRTt3QkFDN0YsR0FBRyxFQUFFLFdBQVc7cUJBQ2pCLENBQUMsQ0FBQztvQkFFSCxZQUFZLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDNUUsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEtBQUs7b0JBQ3BELE1BQU0sWUFBWTt5QkFDZixXQUFXLENBQUM7d0JBQ1gsS0FBSzt3QkFDTCxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLDhCQUFtQixDQUFDLE1BQU0sRUFBRTt3QkFDckYsR0FBRyxFQUFFLEVBQUU7cUJBQ1IsQ0FBQzt5QkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQ1Ysc0lBQXNJLENBQUM7WUFDekksTUFBTSw0QkFBNEIsR0FBYztnQkFDOUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQzdCLFlBQVksRUFBRSxFQUFFO2dCQUNoQixNQUFNLEVBQUU7b0JBQ04sVUFBVSxFQUFFLGFBQWE7aUJBQzFCO2dCQUNELElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDOUIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osS0FBSyxFQUFFLHNCQUFzQjtnQkFDN0IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixlQUFlLEVBQUUsS0FBSztnQkFDdEIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLFdBQVcsRUFBRSxFQUFFO2dCQUNmLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3BCLFFBQVEsRUFBRTtvQkFDUjt3QkFDRSxLQUFLLEVBQUUsUUFBUTt3QkFDZixVQUFVLEVBQUUsYUFBYTt3QkFDekIsY0FBYyxFQUFFLEtBQUs7d0JBQ3JCLGVBQWUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLDZCQUFrQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsNkJBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQzt3QkFDNUYsZUFBZSxFQUFFLGFBQWE7d0JBQzlCLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsSUFBSSx1QkFBdUIsQ0FBQztZQUM1QixNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sS0FBSyxHQUFpQjtnQkFDMUIsWUFBWSxFQUFFO29CQUNaO3dCQUNFLElBQUksRUFBRSxNQUFNO3dCQUNaLElBQUksRUFBRSxRQUFRO3FCQUNmO29CQUNEO3dCQUNFLElBQUksRUFBRSxTQUFTO3dCQUNmLElBQUksRUFBRSxRQUFRO3FCQUNmO29CQUNEO3dCQUNFLElBQUksRUFBRSxTQUFTO3dCQUNmLElBQUksRUFBRSxTQUFTO3FCQUNoQjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsbUJBQW1CO3dCQUN6QixJQUFJLEVBQUUsU0FBUztxQkFDaEI7aUJBQ0Y7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzthQUM1QyxDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQStCO2dCQUMvQyxNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLE9BQU87b0JBQ2IsT0FBTyxFQUFFLEdBQUc7b0JBQ1osT0FBTyxFQUFFLENBQUM7b0JBQ1YsaUJBQWlCLEVBQUUsNENBQTRDO2lCQUNoRTtnQkFDRCxXQUFXLEVBQUUsU0FBUztnQkFDdEIsS0FBSztnQkFDTCxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7YUFDdkMsQ0FBQztZQUNGLE1BQU0sYUFBYSxHQUFjO2dCQUMvQixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7Z0JBQzFDLE9BQU8sRUFBRSwrQkFBb0IsQ0FBQyxFQUFFO2FBQ2pDLENBQUM7WUFFRixVQUFVLENBQUMsS0FBSztnQkFDZCx1QkFBdUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO2dCQUNuRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsQ0FBQztnQkFDL0QsT0FBTztxQkFDSixJQUFJLENBQUMsb0JBQVMsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUM7cUJBQzlDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEYsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsS0FBSztnQkFDYixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLO2dCQUNsRCxNQUFNLFlBQVk7cUJBQ2YsYUFBYSxDQUFDO29CQUNiLEtBQUs7b0JBQ0wsU0FBUyxFQUFFLGFBQWE7b0JBQ3hCLEdBQUcsRUFBRSxXQUFXO2lCQUNqQixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7WUFDaEYsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSztnQkFDbkQsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO2dCQUN2QyxTQUFTLENBQUMsT0FBTyxHQUFHLCtCQUFvQixDQUFDLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQztxQkFDUixHQUFHLENBQ0Ysa0JBQWtCLFlBQVksQ0FBQyxFQUFFLEVBQUUsNEJBQ2pDLDRCQUE0QixDQUFDLFdBQy9CLGNBQWMsQ0FDZjtxQkFDQSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBRTlELE1BQU0sWUFBWTtxQkFDZixhQUFhLENBQUM7b0JBQ2IsS0FBSztvQkFDTCxTQUFTO29CQUNULEdBQUcsRUFBRSxXQUFXO2lCQUNqQixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDREQUE0RCxDQUFDLENBQUM7WUFDMUYsQ0FBQyxDQUFDLENBQUM7WUFDSCxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDbkMsWUFBWSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDdEUsTUFBTSxXQUFXLEdBQUcsNEJBQTRCLENBQUMsV0FBVyxDQUFDO2dCQUM3RCxhQUFhLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztnQkFDeEMsTUFBTSxRQUFRLEdBQWtCO29CQUM5QixXQUFXO29CQUNYLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztvQkFDeEMsU0FBUyxFQUFFLE1BQU07b0JBQ2pCLE1BQU07b0JBQ04sSUFBSSxFQUFFLE1BQU07b0JBQ1osY0FBYyxFQUFFLE1BQU07aUJBQ3ZCLENBQUM7Z0JBRUYsUUFBUSxDQUFDLDBCQUEwQixRQUFRLEVBQUUsRUFBRSxLQUFLO29CQUNsRCxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7b0JBQ3ZDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsK0JBQW9CLENBQUMsRUFBRSxDQUFDO29CQUU1QyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsS0FBSzt3QkFDbkMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxrQkFBeUIsQ0FBQyxDQUFDO3dCQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDOzZCQUNSLEdBQUcsQ0FDRixrQkFBa0IsWUFBWSxDQUFDLEVBQUUsRUFBRSw0QkFDakMsNEJBQTRCLENBQUMsV0FDL0IsY0FBYyxDQUNmOzZCQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFFOUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDOzRCQUN2RCxLQUFLOzRCQUNMLFNBQVM7NEJBQ1QsR0FBRyxFQUFFLFdBQVc7eUJBQ2pCLENBQUMsQ0FBQzt3QkFDSCxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDM0MsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBK0IsQ0FBQzt3QkFDMUYsU0FBUyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDOUUsQ0FBQyxDQUFDLENBQUM7b0JBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7d0JBQ3ZFLFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO3dCQUNwQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLGtCQUF5QixDQUFDLENBQUM7d0JBQy9FLElBQUksQ0FBQyxLQUFLLENBQUM7NkJBQ1IsR0FBRyxDQUNGLGtCQUFrQixZQUFZLENBQUMsRUFBRSxFQUFFLDRCQUNqQyw0QkFBNEIsQ0FBQyxXQUMvQixjQUFjLENBQ2Y7NkJBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUU5RCxNQUFNLGVBQWUsR0FBRyxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUM7NEJBQ3ZELGtCQUFrQixFQUFFLFVBQVU7NEJBQzlCLEtBQUs7NEJBQ0wsU0FBUzs0QkFDVCxHQUFHLEVBQUUsV0FBVzt5QkFDakIsQ0FBQyxDQUFDO3dCQUNILGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUMzQyxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUErQixDQUFDO3dCQUMxRixTQUFTLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RSxDQUFDLENBQUMsQ0FBQztvQkFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsS0FBSzt3QkFDMUQsTUFBTSxZQUFZOzZCQUNmLGFBQWEsQ0FBQzs0QkFDYixLQUFLOzRCQUNMLFNBQVMsRUFBRSxhQUFhOzRCQUN4QixHQUFHLEVBQUUsRUFBRTt5QkFDUixDQUFDOzZCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7b0JBQzVFLENBQUMsQ0FBQyxDQUFDO29CQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLO3dCQUNsRSxPQUFPLFNBQVMsQ0FBQyxXQUFXLENBQUM7d0JBQzdCLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsa0JBQXlCLENBQUMsQ0FBQzt3QkFDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsWUFBWSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDLENBQUM7d0JBRTVHLE1BQU0sZUFBZSxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQzs0QkFDdkQsS0FBSzs0QkFDTCxTQUFTOzRCQUNULEdBQUcsRUFBRSxXQUFXO3lCQUNqQixDQUFDLENBQUM7d0JBQ0gsZUFBZSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzNDLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQStCLENBQUM7d0JBQzVGLFNBQVMsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzlFLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILFFBQVEsQ0FBQywwQkFBMEIsUUFBUSxFQUFFLEVBQUUsS0FBSztvQkFDbEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO29CQUN2QyxTQUFTLENBQUMsT0FBTyxHQUFHLCtCQUFvQixDQUFDLEVBQUUsQ0FBQztvQkFDNUMsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEtBQUs7d0JBQ25DLFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO3dCQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDOzZCQUNSLEdBQUcsQ0FDRixrQkFBa0IsWUFBWSxDQUFDLEVBQUUsRUFBRSw0QkFDakMsNEJBQTRCLENBQUMsV0FDL0IsY0FBYyxDQUNmOzZCQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFFOUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDOzRCQUN2RCxLQUFLOzRCQUNMLFNBQVM7NEJBQ1QsR0FBRyxFQUFFLFdBQVc7eUJBQ2pCLENBQUMsQ0FBQzt3QkFDSCxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0MsQ0FBQyxDQUFDLENBQUM7b0JBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7d0JBQ3ZFLFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO3dCQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDOzZCQUNSLEdBQUcsQ0FDRixrQkFBa0IsWUFBWSxDQUFDLEVBQUUsRUFBRSw0QkFDakMsNEJBQTRCLENBQUMsV0FDL0IsY0FBYyxDQUNmOzZCQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFFOUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDOzRCQUN2RCxrQkFBa0IsRUFBRSxVQUFVOzRCQUM5QixLQUFLOzRCQUNMLFNBQVM7NEJBQ1QsR0FBRyxFQUFFLFdBQVc7eUJBQ2pCLENBQUMsQ0FBQzt3QkFDSCxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0MsQ0FBQyxDQUFDLENBQUM7b0JBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUs7d0JBQzFELE1BQU0sWUFBWTs2QkFDZixhQUFhLENBQUM7NEJBQ2IsS0FBSzs0QkFDTCxTQUFTLEVBQUUsYUFBYTs0QkFDeEIsR0FBRyxFQUFFLEVBQUU7eUJBQ1IsQ0FBQzs2QkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO29CQUM1RSxDQUFDLENBQUMsQ0FBQztvQkFFSCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSzt3QkFDbEUsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDO3dCQUM3QixNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLGtCQUF5QixDQUFDLENBQUM7d0JBQ2pGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLFlBQVksQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO3dCQUU1RyxNQUFNLGVBQWUsR0FBRyxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUM7NEJBQ3ZELEtBQUs7NEJBQ0wsU0FBUzs0QkFDVCxHQUFHLEVBQUUsV0FBVzt5QkFDakIsQ0FBQyxDQUFDO3dCQUNILGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUMzQyxNQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUErQixDQUFDO3dCQUM1RixTQUFTLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RSxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsV0FBVyxFQUFFO1lBQ3BCLE1BQU0sYUFBYSxHQUFHO2dCQUNwQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSxTQUFTO3dCQUNsQixNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRjtnQkFDRCxLQUFLLEVBQUUsSUFBSSx3QkFBYSxFQUFFO2FBQzNCLENBQUM7WUFFRixTQUFTLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEtBQUs7Z0JBQzFCLE1BQU0saUJBQWlCLEdBQUc7b0JBQ3hCLFdBQVcsRUFBRSxhQUFhO2lCQUMzQixDQUFDO2dCQUVGLE1BQU0sMEJBQTBCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztnQkFDNUYsMEJBQTBCLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3ZELG1KQUFtSjtnQkFDbkosMEJBQTBCLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRWhFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ3hFLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDekMsbUpBQW1KO2dCQUNuSixhQUFhLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRW5FLE1BQU0sUUFBUSxHQUFHLE1BQU0sWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDNUQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxLQUFLO2dCQUM3RSxNQUFNLGlCQUFpQixHQUFHO29CQUN4QixXQUFXLEVBQUUsYUFBYTtpQkFDM0IsQ0FBQztnQkFDRixNQUFNLDBCQUEwQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLDRCQUE0QixDQUFDLENBQUM7Z0JBQzVGLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUN4RSxhQUFhLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRXpDLE1BQU0sUUFBUSxHQUFHLE1BQU0sWUFBWSxDQUFDLFFBQVEsQ0FBQztvQkFDM0MsSUFBSSxFQUFFLDZCQUE2QjtvQkFDbkMsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLE9BQU8sRUFBRSxZQUFZOzRCQUNyQixNQUFNLEVBQUUsR0FBRzt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsTUFBTSxFQUFFLENBQUM7eUJBQ1Y7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDO2dCQUNILFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSztnQkFDaEUsTUFBTSxZQUFZO3FCQUNmLFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLE9BQU8sRUFBRSxTQUFTOzRCQUNsQixNQUFNLEVBQUUsR0FBRzt5QkFDWjtxQkFDRjtpQkFDRixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUNyQiw0RkFBNEYsQ0FDN0YsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEtBQUs7Z0JBQ2xGLE1BQU0sWUFBWTtxQkFDZixRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLDZCQUE2QjtvQkFDbkMsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLE9BQU8sRUFBRSxZQUFZOzRCQUNyQixNQUFNLEVBQUUsSUFBSTt5QkFDYjtxQkFDRjtpQkFDRixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUNyQiw0RkFBNEYsQ0FDN0YsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEtBQUs7Z0JBQ2xGLE1BQU0sWUFBWTtxQkFDZixRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLDZCQUE2QjtvQkFDbkMsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLE9BQU8sRUFBRSxZQUFZOzRCQUNyQixNQUFNLEVBQUUsTUFBTTt5QkFDZjtxQkFDRjtpQkFDRixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLCtFQUErRSxDQUFDLENBQUM7WUFDN0csQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsdUVBQXVFLEVBQUUsS0FBSztnQkFDL0UsTUFBTSxZQUFZO3FCQUNmLFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsNkJBQTZCO29CQUNuQyxVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsT0FBTyxFQUFFLFlBQVk7NEJBQ3JCLE1BQU0sRUFBRSxLQUFLO3lCQUNkO3FCQUNGO2lCQUNGLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsK0VBQStFLENBQUMsQ0FBQztZQUM3RyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLO2dCQUNwRCxNQUFNLGlCQUFpQixHQUFHO29CQUN4QixXQUFXLEVBQUUsYUFBYTtpQkFDM0IsQ0FBQztnQkFFRixNQUFNLDBCQUEwQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLDRCQUE0QixDQUFDLENBQUM7Z0JBQzVGLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN2RCwwQkFBMEIsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFaEUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDeEUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN6QyxhQUFhLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRW5FLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDakUsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFbEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RCxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUM3QyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw4RUFBOEUsRUFBRSxLQUFLO2dCQUN0RixNQUFNLGlCQUFpQixHQUFHO29CQUN4QixXQUFXLEVBQUUsYUFBYTtpQkFDM0IsQ0FBQztnQkFFRixNQUFNLHlCQUF5QixHQUFHO29CQUNoQyxHQUFHLGFBQWE7b0JBQ2hCLElBQUksRUFBRSxVQUFVO29CQUNoQixpQkFBaUIsRUFBRSxJQUFJO2lCQUN4QixDQUFDO2dCQUVGLE1BQU0sMEJBQTBCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztnQkFDNUYsMEJBQTBCLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBRXZELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ3hFLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFFekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBRXhFLHNFQUFzRTtnQkFDdEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDcEQsTUFBTSxRQUFRLEdBQUcsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkIsUUFBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMxRCxRQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUVuRCxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7Z0JBQ2xFLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO29CQUNyQyxHQUFHLFVBQVU7b0JBQ2IsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxNQUFNLGNBQWMsR0FBRztvQkFDckIsV0FBVyxFQUFFLGFBQWE7aUJBQzNCLENBQUM7Z0JBQ0YsTUFBTSxTQUFTLEdBQWM7b0JBQzNCLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLE1BQU0sRUFBRSxLQUFLO29CQUNiLGVBQWUsRUFBRSxLQUFLO29CQUN0QixLQUFLLEVBQUUsV0FBVztvQkFDbEIsV0FBVyxFQUFFLEVBQUU7b0JBQ2YsTUFBTSxFQUFFLFdBQVc7b0JBQ25CLE9BQU8sRUFBRSxDQUFDO29CQUNWLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO29CQUNyQixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUs7b0JBQ2xDLFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVztvQkFDdkMsWUFBWSxFQUFFO3dCQUNaOzRCQUNFLEtBQUssRUFBRSxXQUFXOzRCQUNsQixRQUFRLEVBQUU7Z0NBQ1IsRUFBRSxFQUFFLE1BQU07Z0NBQ1YsRUFBRSxFQUFFLElBQUk7NkJBQ1Q7NEJBQ0QsVUFBVSxFQUFFLFdBQWtCOzRCQUM5QixlQUFlLEVBQUUsRUFBRTt5QkFDcEI7cUJBQ0Y7aUJBQ0YsQ0FBQztnQkFDRixNQUFNLFFBQVEsR0FBRztvQkFDZixFQUFFLEVBQUUsWUFBWTtvQkFDaEIsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsSUFBSSxFQUFFLE1BQU07aUJBQ2IsQ0FBQztnQkFFRixNQUFNLDBCQUEwQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLDRCQUE0QixDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUUvRyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUM5QixPQUFPLEVBQUU7cUJBQ1QsR0FBRyxDQUFDLGtCQUFrQixVQUFVLENBQUMsRUFBRSw0QkFBNEIsY0FBYyxDQUFDLFdBQVcsY0FBYyxDQUFDO3FCQUN4RyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUUzQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7cUJBQ25DLE9BQU8sRUFBRTtxQkFDVCxJQUFJLENBQUMsa0JBQWtCLFVBQVUsQ0FBQyxFQUFFLGVBQWUsY0FBYyxDQUFDLFdBQVcsWUFBWSxDQUFDO3FCQUMxRixLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUV4QixNQUFNLEtBQUssR0FBb0I7b0JBQzdCLElBQUksRUFBRSxVQUFVO29CQUNoQixVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsT0FBTyxFQUFFLFNBQVM7NEJBQ2xCLE1BQU0sRUFBRSxNQUFNO3lCQUNmO3FCQUNGO29CQUNELFVBQVUsRUFBRSxNQUFNO2lCQUNuQixDQUFDO2dCQUNGLE1BQU0sY0FBYyxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEQsMEJBQTBCLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hELGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4QyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUU3QyxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDOUIsU0FBUztvQkFDVCxRQUFRO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLEVBQUUsRUFBRSxJQUFJO29CQUNSLE1BQU0sRUFBRSxRQUFRO2lCQUNqQixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLO2dCQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtvQkFDckMsR0FBRyxVQUFVO29CQUNiLElBQUksRUFBRSxLQUFLO2lCQUNaLENBQUMsQ0FBQztnQkFDSCxNQUFNLGNBQWMsR0FBRztvQkFDckIsV0FBVyxFQUFFLGFBQWE7aUJBQzNCLENBQUM7Z0JBQ0YsTUFBTSxTQUFTLEdBQWM7b0JBQzNCLFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVztvQkFDdkMsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO29CQUMzQixNQUFNLEVBQUUsU0FBUztvQkFDakIsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsZUFBZSxFQUFFLEtBQUs7b0JBQ3RCLEtBQUssRUFBRSxpQkFBaUI7b0JBQ3hCLFdBQVcsRUFBRSxFQUFFO29CQUNmLE1BQU0sRUFBRSxXQUFXO29CQUNuQixPQUFPLEVBQUUsQ0FBQztvQkFDVixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtvQkFDckIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLO29CQUNsQyxpQkFBaUIsRUFBRSwwQkFBMEI7b0JBQzdDLFlBQVksRUFBRTt3QkFDWjs0QkFDRSxLQUFLLEVBQUUsYUFBYTs0QkFDcEIsVUFBVSxFQUFFLFdBQWtCOzRCQUM5QixlQUFlLEVBQUUsRUFBRTt5QkFDcEI7cUJBQ0Y7aUJBQ0YsQ0FBQztnQkFDRixNQUFNLFFBQVEsR0FBRztvQkFDZixFQUFFLEVBQUUsWUFBWTtvQkFDaEIsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsSUFBSSxFQUFFLE1BQU07aUJBQ2IsQ0FBQztnQkFDRixNQUFNLGVBQWUsR0FBRztvQkFDdEIsRUFBRSxFQUFFLDBCQUEwQjtvQkFDOUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7b0JBQ25CLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsd0JBQXdCO3FCQUMvQjtvQkFDRCxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7aUJBQ25DLENBQUM7Z0JBRUYsTUFBTSwwQkFBMEIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFFL0csTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztxQkFDOUIsT0FBTyxFQUFFO3FCQUNULEdBQUcsQ0FBQyxrQkFBa0IsVUFBVSxDQUFDLEVBQUUsNEJBQTRCLFNBQVMsQ0FBQyxXQUFXLGNBQWMsQ0FBQztxQkFDbkcsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFM0MsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUNuQyxPQUFPLEVBQUU7cUJBQ1QsSUFBSSxDQUFDLGtCQUFrQixVQUFVLENBQUMsRUFBRSxlQUFlLFNBQVMsQ0FBQyxXQUFXLFlBQVksQ0FBQztxQkFDckYsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFeEIsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUN2QyxPQUFPLEVBQUU7cUJBQ1QsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxxQkFBcUIsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7cUJBQy9FLEtBQUssQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBRS9CLE1BQU0sS0FBSyxHQUFvQjtvQkFDN0IsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxPQUFPLEVBQUUsU0FBUzs0QkFDbEIsTUFBTSxFQUFFLE1BQU07eUJBQ2Y7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFLE1BQU07aUJBQ25CLENBQUM7Z0JBQ0YsTUFBTSxjQUFjLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwRCwwQkFBMEIsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEQsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzdDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRWpELGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbEUsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsS0FBSztnQkFDN0QsTUFBTSxpQkFBaUIsR0FBRztvQkFDeEIsS0FBSyxFQUFFLFVBQVU7aUJBQ2xCLENBQUM7Z0JBRUYsTUFBTSwwQkFBMEIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO2dCQUM1RiwwQkFBMEIsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDdkQsbUpBQW1KO2dCQUNuSiwwQkFBMEIsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFaEUsTUFBTSxZQUFZO3FCQUNmLFFBQVEsQ0FBQyxhQUFhLENBQUM7cUJBQ3ZCLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixFQUFFLENBQUMsNENBQTRDLEVBQUUsS0FBSztnQkFDcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztxQkFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQztxQkFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3FCQUNyRCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBRXRDLE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixDQUFDO29CQUN2RCxXQUFXLEVBQUUsSUFBSTtpQkFDbEIsQ0FBQyxDQUFDO2dCQUNILFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JELFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7Z0JBQ2xFLE1BQU0sWUFBWTtxQkFDZixpQkFBaUIsQ0FBQztvQkFDakIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxNQUFNO2lCQUNkLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsOERBQThELENBQUMsQ0FBQztZQUM1RixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRSxLQUFLO2dCQUN2RSxNQUFNLFlBQVk7cUJBQ2YsaUJBQWlCLENBQUM7b0JBQ2pCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixVQUFVLEVBQUU7d0JBQ1YsS0FBSyxFQUFFLE1BQU07cUJBQ2Q7aUJBQ0YsQ0FBQztxQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1lBQzVGLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEtBQUs7Z0JBQ2pFLE1BQU0sWUFBWTtxQkFDZixpQkFBaUIsQ0FBQztvQkFDakIsS0FBSyxFQUFFLE1BQU07b0JBQ2IsVUFBVSxFQUFFO3dCQUNWLEtBQUssRUFBRSxNQUFNO3FCQUNkO2lCQUNGLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUNwRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLE1BQU0sVUFBVSxHQUFHO2dCQUNqQjtvQkFDRSxPQUFPLEVBQUUsNENBQTRDO29CQUNyRCxNQUFNLEVBQUUsR0FBRztvQkFDWCxTQUFTLEVBQUU7d0JBQ1QsU0FBUyxFQUFFLG9CQUFvQjt3QkFDL0Isb0JBQW9CLEVBQUUsNENBQTRDO3dCQUNsRSxPQUFPLEVBQUUsSUFBSTt3QkFDYixhQUFhLEVBQUUsR0FBRzt3QkFDbEIsYUFBYSxFQUFFLENBQUM7d0JBQ2hCLFNBQVMsRUFBRSxvQkFBUyxDQUFDLE1BQU07cUJBQzVCO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixZQUFZLEVBQUUsVUFBVTtnQkFDeEIsb0JBQW9CLEVBQUUsVUFBVTthQUNqQyxDQUFDO1lBRUYsRUFBRSxDQUFDLHFGQUFxRixFQUFFLEtBQUs7Z0JBQzdGLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxHQUFHLGFBQWEsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLENBQUM7Z0JBQ2pGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBQzFELDhKQUE4SjtnQkFDOUosb0JBQW9CLENBQUMscUJBQXFCLENBQ3hDO29CQUNFLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixVQUFVLEVBQUUsZUFBZTtvQkFDM0IsVUFBVTtpQkFDWCxFQUNELE1BQU0sQ0FDUCxDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7b0JBQzVELEtBQUssRUFBRSxJQUFJO29CQUNYLFVBQVU7b0JBQ1YsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLGdCQUFnQixFQUFFLGlCQUFpQjtvQkFDbkMsVUFBVTtpQkFDWCxDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUU7b0JBQy9CLE1BQU0sRUFBRSxnQkFBZ0I7b0JBQ3hCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixLQUFLLEVBQUUsVUFBVTtvQkFDakIsV0FBVyxFQUFFO3dCQUNYLFVBQVU7d0JBQ1YsSUFBSSxFQUFFLGVBQWU7cUJBQ3RCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsS0FBSztnQkFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxvREFBb0Q7Z0JBQ3BELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDN0QsVUFBVSxFQUFFLGVBQWU7b0JBQzNCLFVBQVU7b0JBQ1YsVUFBVTtpQkFDWCxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDcEUsTUFBTSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDNUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckQsTUFBTSxDQUFDLFVBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEQsTUFBTSxDQUFDLFVBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzlHLE1BQU0sQ0FBQyxVQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN0RyxNQUFNLENBQUMsVUFBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdEcsTUFBTSxDQUFDLFVBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQ25ELHNCQUFzQixFQUN0QixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUM3QyxDQUFDO2dCQUNGLE1BQU0sQ0FBQyxVQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsRyxNQUFNLENBQUMsVUFBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoSCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLO2dCQUM5QyxNQUFNLFVBQVUsR0FBRztvQkFDakI7d0JBQ0UsT0FBTyxFQUFFLDRDQUE0Qzt3QkFDckQsTUFBTSxFQUFFLEdBQUc7d0JBQ1gsSUFBSSxFQUFFLGdCQUFnQjtxQkFDdkI7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLG9EQUFvRDtnQkFDcEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMxRCxVQUFVLEVBQUUsU0FBUztvQkFDckIsVUFBVTtvQkFDVixVQUFVO2lCQUNYLENBQUMsQ0FBQztnQkFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLENBQUMsVUFBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUM1RSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsVUFBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0QsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsMkVBQTJFLEVBQUUsS0FBSztnQkFDbkYsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLFVBQVUsR0FBRztvQkFDakI7d0JBQ0UsT0FBTyxFQUFFLDRDQUE0Qzt3QkFDckQsTUFBTSxFQUFFLEdBQUc7d0JBQ1gsU0FBUyxFQUFFOzRCQUNULFNBQVMsRUFBRSxvQkFBb0I7NEJBQy9CLG9CQUFvQixFQUFFLDRDQUE0Qzs0QkFDbEUsT0FBTyxFQUFFLElBQUk7NEJBQ2IsYUFBYSxFQUFFLEdBQUc7NEJBQ2xCLGFBQWEsRUFBRSxDQUFDO3lCQUNqQjtxQkFDRjtpQkFDRixDQUFDO2dCQUNGLElBQUksTUFBTSxDQUFDO2dCQUNYLElBQUksQ0FBQztvQkFDSCxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO3dCQUN2RCxVQUFVLEVBQUUsZUFBZTt3QkFDM0IscURBQXFEO3dCQUNyRCxVQUFVO3dCQUNWLFVBQVU7cUJBQ1gsQ0FBQyxDQUFDO29CQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO2dCQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDcEIsOEZBQThGLENBQy9GLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsZUFBZSxFQUFFO1lBQ3hCLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLO2dCQUN2RCxNQUFNLE1BQU0sR0FBeUM7b0JBQ25ELEtBQUs7b0JBQ0wsVUFBVSxFQUFFLFNBQVM7b0JBQ3JCLFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxPQUFPLEVBQUUsb0VBQW9FOzRCQUM3RSxNQUFNLEVBQUUsR0FBRzs0QkFDWCxTQUFTLEVBQUU7Z0NBQ1QsU0FBUyxFQUFFLG9CQUFTLENBQUMsYUFBYTtnQ0FDbEMsYUFBYSxFQUFFLEdBQUc7Z0NBQ2xCLG9CQUFvQixFQUFFLG9FQUFvRTtnQ0FDMUYsT0FBTyxFQUFFLG9FQUFvRTs2QkFDOUU7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDekQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXpELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDbEM7d0JBQ0UsT0FBTyxFQUFFOzRCQUNQLE9BQU8sRUFBRSxvRUFBb0U7eUJBQzlFO3dCQUNELE1BQU0sRUFBRTs0QkFDTixLQUFLLEVBQUUsR0FBRzs0QkFDVixNQUFNLEVBQUUscUJBQXFCO3lCQUM5Qjt3QkFDRCxTQUFTLEVBQUU7NEJBQ1QsU0FBUyxFQUFFLGVBQWU7NEJBQzFCLGFBQWEsRUFBRSxHQUFHOzRCQUNsQixvQkFBb0IsRUFBRSxvRUFBb0U7NEJBQzFGLE9BQU8sRUFBRSxvRUFBb0U7NEJBQzdFLFNBQVMsRUFBRSxxQkFBcUI7eUJBQ2pDO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUs7Z0JBQ3JELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDckIsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUM7Z0JBQ3BDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDakMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMxRyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUM7Z0JBQzVCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckUsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7Z0JBRXJDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztxQkFDbEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7cUJBQzFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRXhDLDhCQUE4QjtnQkFDOUIsTUFBTSxjQUFjLEdBQUcsSUFBQSxvQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFBLG9CQUFXLEVBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RixNQUFNLFdBQVcsR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7Z0JBQ3hGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtvQkFDNUYsRUFBRSxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzVCLGNBQWMsRUFBRSxjQUFjO29CQUM5QixNQUFNLEVBQUUsTUFBTTtvQkFDZCxZQUFZLEVBQUUsV0FBVztvQkFDekIsWUFBWSxFQUFFLEVBQUU7aUJBQ2pCLENBQUMsQ0FBQztnQkFFSCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUMvRSxvRUFBb0U7b0JBQ3BFLE9BQVEsQ0FBQyxRQUFTLENBQUMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNsRCxvRUFBb0U7b0JBQ3BFLE9BQVEsQ0FBQyxRQUFTLENBQUMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUM5RixPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7Z0JBRXpFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDNUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksRUFBRTtRQUNyQixJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxVQUFVLENBQUM7UUFDZixJQUFJLE1BQU0sQ0FBQztRQUVYLE1BQU0sQ0FBQyxLQUFLO1lBQ1YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsS0FBSyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNoRCxVQUFVLEdBQUc7Z0JBQ1gsRUFBRSxFQUFFLGtDQUFrQztnQkFDdEMsSUFBSSxFQUFFO29CQUNKLGtDQUFrQztvQkFDbEMsa0NBQWtDO29CQUNsQyxrQ0FBa0M7aUJBQ25DO2dCQUNELFlBQVksRUFBRSxFQUFFO2FBQ2pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLO1lBQ3hDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQzNCLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUVqRCxNQUFNLE1BQU0sR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLHFCQUFxQixDQUFDO1lBQ2pGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQ1QsS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDYixLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLE9BQU8sRUFBRTtvQkFDUCxRQUFRLEVBQUUsQ0FBQztvQkFDWCxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsSUFBSSxFQUFFLG1EQUFtRDtvQkFDekQsU0FBUyxFQUFFLENBQUM7b0JBQ1osU0FBUyxFQUFFO3dCQUNULCtDQUErQzt3QkFDL0MsK0NBQStDO3dCQUMvQywrQ0FBK0M7cUJBQ2hEO29CQUNELFNBQVMsRUFBRSxXQUFXO29CQUN0QixRQUFRLEVBQUUsR0FBRztpQkFDZDtnQkFDRCxVQUFVLEVBQUUsa0NBQWtDO2dCQUM5QyxRQUFRLEVBQUUsa0NBQWtDO2dCQUM1QyxTQUFTLEVBQUUsNENBQTRDO2FBQ3hELENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCwrREFBK0Q7WUFDakUsQ0FBQztZQUVELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEtBQUs7WUFDckUsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEMsVUFBVSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFDM0IsVUFBVSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7WUFDOUIsTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRWpELE1BQU0sT0FBTyxHQUNYLDJJQUEySSxDQUFDO1lBQzlJLE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLFVBQVUsRUFBRTtvQkFDVjt3QkFDRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsWUFBWTt3QkFDekMsT0FBTztxQkFDUjtpQkFDRjtnQkFDRCxHQUFHLEVBQUUsSUFBSTtnQkFDVCxJQUFJLEVBQUUsUUFBUTthQUNmLENBQUM7WUFFRixNQUFNLGNBQWMsR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQztZQUNwRixJQUFJLGNBQWMsQ0FBQztZQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN6QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzdCLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVkLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLDhCQUE4QixPQUFPLHVDQUF1QyxDQUFDO1lBQy9ILElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUM1QyxXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixnQkFBZ0IsRUFBRSxNQUFNO2FBQ3pCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNmLCtEQUErRDtZQUNqRSxDQUFDO1lBQ0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRTtvQkFDVCxXQUFXLEVBQUUsVUFBVTtvQkFDdkIsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2dCQUNELElBQUksRUFBRSxRQUFRO2dCQUNkLFVBQVUsRUFBRTtvQkFDVjt3QkFDRSxNQUFNLEVBQUUsbUJBQW1CO3dCQUMzQixPQUFPO3FCQUNSO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFcEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxXQUFXLEVBQUU7UUFDcEIsSUFBSSxTQUFpQixDQUFDO1FBRXRCLE1BQU0sQ0FBQyxLQUFLO1lBQ1YsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLElBQUksRUFBRSxPQUFPO2dCQUNiLElBQUksRUFBRTtvQkFDSixrQ0FBa0M7b0JBQ2xDLGtDQUFrQztvQkFDbEMsa0NBQWtDO2lCQUNuQztnQkFDRCxZQUFZLEVBQUUsU0FBUztnQkFDdkIsWUFBWSxFQUFFO29CQUNaLFdBQVcsRUFBRSw0Q0FBNEM7aUJBQzFEO2FBQ0YsQ0FBQztZQUNGLFNBQVMsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsS0FBSztZQUNiLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLO1lBQzlDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDcEMsR0FBRyxDQUFDLHdCQUF3QixTQUFTLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDO2lCQUM1RCxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLEdBQUcsVUFBVTtnQkFDYixHQUFHLDBCQUFXO2FBQ2YsQ0FBQyxDQUFDO1lBQ0wsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDOUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUU5QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDckIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFO29CQUNSLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLG9CQUFvQixFQUFFLDRDQUE0QztpQkFDbkU7Z0JBQ0QsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsYUFBYSxFQUFFLEdBQUc7Z0JBQ2xCLHNCQUFzQixFQUFFLEdBQUc7Z0JBQzNCLHNCQUFzQixFQUFFLEdBQUc7Z0JBQzNCLGFBQWEsRUFBRSxDQUFDO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZFQUE2RSxFQUFFLEtBQUs7WUFDckYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUNwQyxHQUFHLENBQUMsd0JBQXdCLFNBQVMsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUM7aUJBQzVELEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsR0FBRyxVQUFVO2dCQUNiLEdBQUcsMEJBQVc7YUFDZixDQUFDLENBQUM7WUFFTCxNQUFNLFNBQVM7aUJBQ1osT0FBTyxDQUNOO2dCQUNFLGdCQUFnQixFQUFFLFFBQVE7Z0JBQzFCLEdBQUcsRUFBRSxRQUFRO2FBQ2QsRUFDRDtnQkFDRSxPQUFPLEVBQUUsS0FBSztnQkFDZCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxvQkFBb0IsRUFBRSxpQkFBaUI7Z0JBQ3ZDLGdCQUFnQixFQUFFLDRDQUE0QzthQUMvRCxDQUNGO2lCQUNBLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7WUFDckYsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnRkFBZ0YsRUFBRSxLQUFLO1lBQ3hGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDcEMsR0FBRyxDQUFDLHdCQUF3QixTQUFTLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDO2lCQUM1RCxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLEdBQUcsVUFBVTtnQkFDYixHQUFHLDBCQUFXO2dCQUNkLEdBQUcscUNBQXNCO2FBQzFCLENBQUMsQ0FBQztZQUVMLE1BQU0sU0FBUztpQkFDWixPQUFPLENBQ047Z0JBQ0UsZ0JBQWdCLEVBQUUsUUFBUTtnQkFDMUIsR0FBRyxFQUFFLFFBQVE7YUFDZCxFQUNEO2dCQUNFLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxRQUFRO2dCQUNkLG9CQUFvQixFQUFFLDRDQUE0QztnQkFDbEUsZ0JBQWdCLEVBQUUsNENBQTRDO2FBQy9ELENBQ0Y7aUJBQ0EsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ3JCLG1IQUFtSCxDQUNwSCxDQUFDO1lBQ0osbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5SEFBeUgsRUFBRSxLQUFLO1lBQ2pJLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDcEMsR0FBRyxDQUFDLHdCQUF3QixTQUFTLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDO2lCQUM1RCxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLEdBQUcsVUFBVTtnQkFDYixHQUFHO29CQUNELGVBQWUsRUFBRTt3QkFDZiw0Q0FBNEMsRUFBRTs0QkFDNUMsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsV0FBVyxFQUFFO2dDQUNYLE9BQU8sRUFBRSxHQUFHO2dDQUNaLE9BQU8sRUFBRSxHQUFHO2dDQUNaLE9BQU8sRUFBRSxHQUFHO2dDQUNaLE9BQU8sRUFBRSxHQUFHO2dDQUNaLE9BQU8sRUFBRSxHQUFHO2dDQUNaLE9BQU8sRUFBRSxHQUFHO2dDQUNaLE9BQU8sRUFBRSxHQUFHOzZCQUNiOzRCQUNELFFBQVEsRUFBRTtnQ0FDUixJQUFJLEVBQUUsaUJBQWlCO2dDQUN2QixvQkFBb0IsRUFBRSw0Q0FBNEM7NkJBQ25FO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1lBRUwsTUFBTSxTQUFTO2lCQUNaLE9BQU8sQ0FDTjtnQkFDRSxnQkFBZ0IsRUFBRSxRQUFRO2dCQUMxQixHQUFHLEVBQUUsUUFBUTthQUNkLEVBQ0Q7Z0JBQ0UsT0FBTyxFQUFFO29CQUNQO3dCQUNFLE1BQU0sRUFBRSxFQUFFO3dCQUNWLE9BQU8sRUFBRSxTQUFTO3FCQUNuQjtvQkFDRDt3QkFDRSxNQUFNLEVBQUUsQ0FBQzt3QkFDVCxPQUFPLEVBQUUsU0FBUztxQkFDbkI7aUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFLFNBQVM7Z0JBQ2Ysb0JBQW9CLEVBQUUsNENBQTRDO2dCQUNsRSxnQkFBZ0IsRUFBRSw0Q0FBNEM7YUFDL0QsQ0FDRjtpQkFDQSxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1lBQ3hGLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQzNCLElBQUksU0FBaUIsQ0FBQztRQUN0QixNQUFNLFFBQVEsR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxXQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM1RCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FBRztZQUNqQixFQUFFLEVBQUUsa0NBQWtDO1lBQ3RDLFlBQVksRUFBRTtnQkFDWixXQUFXLEVBQ1QsOEdBQThHO2dCQUNoSCwwQkFBMEIsRUFBRSxLQUFLO2dCQUNqQyxjQUFjLEVBQUUsT0FBTztnQkFDdkIsY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTthQUN6QjtZQUNELElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFO2dCQUNKLGtDQUFrQztnQkFDbEMsa0NBQWtDO2dCQUNsQyxrQ0FBa0M7YUFDbkM7WUFDRCxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDO1FBRUYsTUFBTSxDQUFDLEtBQUs7WUFDVixTQUFTLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDOUYsRUFBRSxFQUFFLGtDQUFrQztnQkFDdEMsR0FBRyxFQUFFLDhDQUE4QztnQkFDbkQsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsWUFBWSxFQUNWLDRRQUE0UTtnQkFDOVEsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUM5RixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxHQUFHLEVBQUUsOENBQThDO2dCQUNuRCxZQUFZLEVBQ1YsNFFBQTRRO2dCQUM5USxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsWUFBWSxFQUFFLEVBQUU7YUFDakIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUM5RixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxHQUFHLEVBQUUsOENBQThDO2dCQUNuRCxZQUFZLEVBQ1YsNFFBQTRRO2dCQUM5USxNQUFNLEVBQUUsT0FBTztnQkFDZixZQUFZLEVBQUUsRUFBRTthQUNqQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxLQUFLO1lBQ1QsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLO1lBQ3BFLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSxTQUFTO3dCQUNsQixNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRjtnQkFDRCxRQUFRLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO2FBQ25DLENBQUM7WUFFRixJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUNSLElBQUksQ0FBQyxrQkFBa0IsU0FBUyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUM7aUJBQ25ELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFTLEVBQUUsRUFBRTtnQkFDeEIsa0RBQWtEO2dCQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBRWhFLE9BQU87b0JBQ0wsR0FBRztvQkFDSDt3QkFDRSxVQUFVLEVBQUUsTUFBTTt3QkFDbEIsV0FBVyxFQUFFOzRCQUNYO2dDQUNFLFVBQVUsRUFBRTtvQ0FDVixlQUFlLEVBQUUsaUJBQWlCO29DQUNsQyxPQUFPLEVBQUUsVUFBVTtpQ0FDcEI7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUwsMENBQTBDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZGLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLO1lBQ3pFLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSxTQUFTO3dCQUNsQixNQUFNLEVBQUUsTUFBTTtxQkFDZjtpQkFDRjtnQkFDRCxhQUFhLEVBQUUsYUFBYTthQUM3QixDQUFDO1lBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDUixJQUFJLENBQUMsa0JBQWtCLFNBQVMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDO2lCQUNuRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBZSxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sbUJBQW1CLEdBQUcsSUFBMkIsQ0FBQztnQkFDeEQsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM5RCxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRXRFLE9BQU87b0JBQ0wsR0FBRztvQkFDSDt3QkFDRSxVQUFVLEVBQUUsTUFBTTt3QkFDbEIsV0FBVyxFQUFFOzRCQUNYO2dDQUNFLFVBQVUsRUFBRTtvQ0FDVixlQUFlLEVBQUUsaUJBQWlCO29DQUNsQyxPQUFPLEVBQUUsVUFBVTtpQ0FDcEI7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUwsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25FLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDbEYsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdkYsTUFBTSxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRTtRQUMvQixJQUFJLE1BQU0sQ0FBQztRQUNYLE1BQU0sUUFBUSxHQUFHLGtDQUFrQyxDQUFDO1FBQ3BELElBQUksVUFBVSxDQUFDO1FBQ2YsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBRXRCLFVBQVUsQ0FBQztZQUNULFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRTtnQkFDckMsRUFBRSxFQUFFLFFBQVE7Z0JBQ1osSUFBSSxFQUFFLElBQUk7Z0JBQ1YsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7YUFDckMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUM7WUFDUixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUUsS0FBSztZQUM3QyxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztZQUN2QyxNQUFNLHFCQUFxQixHQUFHO2dCQUM1QixLQUFLLEVBQUUsVUFBVTtnQkFDakIsT0FBTyxFQUFFO29CQUNQLEdBQUcsRUFBRSxZQUFZO2lCQUNsQjthQUNGLENBQUM7WUFFRixNQUFNLGdCQUFnQixHQUFHO2dCQUN2QixLQUFLLEVBQUUsZ0JBQWdCO2FBQ3hCLENBQUM7WUFFRixNQUFNLGtCQUFrQixHQUFHO2dCQUN6QixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsRUFBRSxFQUFFLGdCQUFnQjtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakIsQ0FBQztZQUVGLG9DQUFvQztZQUNwQyxNQUFNLE1BQU0sR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxRQUFRLHVCQUF1QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBRS9HLG9EQUFvRDtZQUNwRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDL0Q7b0JBQ0UsRUFBRSxFQUFFLFFBQVE7b0JBQ1osR0FBRyxFQUFFLE1BQU07b0JBQ1gsWUFBWSxFQUFFLGNBQWM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsbUNBQW1DO1lBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFakUsbUNBQW1DO1lBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFFbkUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFM0UsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRTVDLGtEQUFrRDtZQUNsRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3JFLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLO1lBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLDZCQUE2QixDQUFDO1lBRW5ELHVEQUF1RDtZQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLFFBQVEsdUJBQXVCLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFekcsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsS0FBSztZQUMzRCxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1lBQzFDLE1BQU0scUJBQXFCLEdBQUc7Z0JBQzVCLEtBQUssRUFBRSxVQUFVO2dCQUNqQixPQUFPLEVBQUU7b0JBQ1AsR0FBRyxFQUFFLFlBQVk7aUJBQ2xCO2FBQ0YsQ0FBQztZQUVGLG9DQUFvQztZQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLFFBQVEsdUJBQXVCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFFOUcsc0VBQXNFO1lBQ3RFLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDdkYsS0FBSyxDQUFDLElBQUksR0FBRyw2QkFBNkIsQ0FBQztZQUMzQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV2RSxNQUFNLE1BQU07aUJBQ1QsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDO2lCQUM5QyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEtBQUs7WUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7WUFDdkMsTUFBTSxxQkFBcUIsR0FBRztnQkFDNUIsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLE9BQU8sRUFBRTtvQkFDUCxHQUFHLEVBQUUsWUFBWTtpQkFDbEI7YUFDRixDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUVqRCxvQ0FBb0M7WUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxRQUFRLHVCQUF1QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBRTlHLG9EQUFvRDtZQUNwRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDL0Q7b0JBQ0UsRUFBRSxFQUFFLFFBQVE7b0JBQ1osR0FBRyxFQUFFLE1BQU07b0JBQ1gsWUFBWSxFQUFFLGNBQWM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgscURBQXFEO1lBQ3JELEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTVELE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25HLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUs7WUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7WUFDdkMsTUFBTSxxQkFBcUIsR0FBRztnQkFDNUIsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLE9BQU8sRUFBRTtvQkFDUCxHQUFHLEVBQUUsWUFBWTtpQkFDbEI7YUFDRixDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRztnQkFDdkIsS0FBSyxFQUFFLGdCQUFnQjthQUN4QixDQUFDO1lBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFM0Msb0NBQW9DO1lBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsUUFBUSx1QkFBdUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUU5RyxvREFBb0Q7WUFDcEQsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsbUNBQW1DLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQy9EO29CQUNFLEVBQUUsRUFBRSxRQUFRO29CQUNaLEdBQUcsRUFBRSxNQUFNO29CQUNYLFlBQVksRUFBRSxjQUFjO2lCQUM3QjthQUNGLENBQUMsQ0FBQztZQUVILG1DQUFtQztZQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRWpFLHFEQUFxRDtZQUNyRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV6RCxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlDQUFpQyxFQUFFO1FBQzFDLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxNQUFNLENBQUM7UUFFWCxNQUFNLENBQUM7WUFDTCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFDbkMsRUFBRSxFQUFFLDBCQUEwQjtnQkFDOUIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLENBQUMsMEJBQTBCLENBQUM7YUFDbkMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxHQUFHO2dCQUNQLE9BQU8sRUFBRSxxQ0FBcUM7Z0JBQzlDLGdCQUFnQixFQUFFLFNBQVM7YUFDNUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUs7WUFDckQsTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFFN0IsTUFBTSxNQUFNO2lCQUNULElBQUksQ0FBQyxNQUFNLENBQUM7aUJBQ1osTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsb0ZBQW9GLENBQUMsQ0FBQztRQUNsSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLO1lBQ3JELE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBRXRCLE1BQU0sTUFBTTtpQkFDVCxJQUFJLENBQUMsTUFBTSxDQUFDO2lCQUNaLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG9GQUFvRixDQUFDLENBQUM7UUFDbEgsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0NBQWtDLEVBQUUsS0FBSztZQUMxQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUVwQixNQUFNLE1BQU07aUJBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQztpQkFDWixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO1FBQ2xILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7UUFDekIsSUFBSSxTQUFTLENBQUM7UUFDZCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFDekIsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQztRQUUzQyxNQUFNLENBQUMsS0FBSztZQUNWLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUU7b0JBQ0osa0NBQWtDO29CQUNsQyxrQ0FBa0M7b0JBQ2xDLGtDQUFrQztpQkFDbkM7YUFDRixDQUFDO1lBQ0YsU0FBUyxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLO1lBQ2pELE1BQU0sc0JBQXNCLEdBQUc7Z0JBQzdCLFVBQVUsRUFBRTtvQkFDVixLQUFLLEVBQUUsb0JBQW9CO29CQUMzQixNQUFNLEVBQUU7d0JBQ04sUUFBUSxFQUFFLFdBQVc7d0JBQ3JCLFFBQVEsRUFBRSxLQUFLO3dCQUNmLEtBQUssRUFBRSxDQUFDO3FCQUNUO2lCQUNGO2dCQUNELElBQUksRUFBRSxNQUFNO2dCQUNaLFNBQVMsRUFBRSxTQUFTO2FBQ3JCLENBQUM7WUFFRixNQUFNLHFCQUFxQixHQUFHO2dCQUM1QixLQUFLLEVBQUUsb0JBQW9CO2dCQUMzQixVQUFVLEVBQUU7b0JBQ1YsS0FBSyxFQUFFLG9CQUFvQjtpQkFDNUI7YUFDRixDQUFDO1lBRUYsTUFBTSxtQkFBbUIsR0FBRztnQkFDMUIsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsTUFBTSxFQUFFLFFBQVE7YUFDakIsQ0FBQztZQUVGLHlDQUF5QztZQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUMzQixJQUFJLENBQUMsdUJBQXVCLFNBQVMsQ0FBQyxFQUFFLEVBQUUsdUJBQXVCLENBQUM7aUJBQ2xFLEtBQUssQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUV0Qyx5Q0FBeUM7WUFDekMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsbUNBQW1DLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xFO29CQUNFLEVBQUUsRUFBRSxrQ0FBa0M7b0JBQ3RDLEdBQUcsRUFBRSxrQkFBa0I7aUJBQ3hCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsdUJBQXVCO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFFekUsdUJBQXVCO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFFdkUsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFOUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLO1lBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQzNCLElBQUksQ0FBQyx1QkFBdUIsU0FBUyxDQUFDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQztpQkFDbEUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFFL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsbUNBQW1DLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xFO29CQUNFLEVBQUUsRUFBRSxrQ0FBa0M7b0JBQ3RDLEdBQUcsRUFBRSxrQkFBa0I7aUJBQ3hCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxTQUFTLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUVsSCxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLO1lBQ25FLE1BQU0sU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDO1lBQ1IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMseUJBQXlCLEVBQUU7UUFDbEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXRDLCtCQUErQjtRQUMvQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEVBQUUsRUFBRSxrQ0FBa0M7WUFDdEMsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUU7Z0JBQ0osa0NBQWtDO2dCQUNsQyxrQ0FBa0M7Z0JBQ2xDLGtDQUFrQzthQUNuQztZQUNELFlBQVksRUFBRSxFQUFFO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLHFCQUFxQixHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEdBQUcsVUFBVTtZQUNiLElBQUksRUFBRSxXQUFXO1NBQ2xCLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQWEsRUFBRSxDQUFDO1FBRWxDLE1BQU0sU0FBUyxHQUFjO1lBQzNCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFlBQVksRUFBRSxFQUFFO1lBQ2hCLE1BQU0sRUFBRTtnQkFDTixVQUFVLEVBQUUsVUFBVTthQUN2QjtZQUNELElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUM5QixNQUFNLEVBQUUsSUFBSTtZQUNaLEtBQUssRUFBRSxzQkFBc0I7WUFDN0IsTUFBTSxFQUFFLFFBQVE7WUFDaEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsZUFBZSxFQUFFLEtBQUs7WUFDdEIsT0FBTyxFQUFFLENBQUM7WUFDVixRQUFRLEVBQUUsVUFBVTtZQUNwQixXQUFXLEVBQUU7Z0JBQ1g7b0JBQ0UsZUFBZSxFQUFFLFVBQVU7b0JBQzNCLFdBQVcsRUFBRSxVQUFVO29CQUN2QixPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO29CQUNELGNBQWMsRUFBRSxLQUFLO2lCQUN0QjthQUNGO1NBQ0YsQ0FBQztRQUVGLFNBQVMsQ0FBQztZQUNSLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxxQkFBcUIsR0FBRztZQUM1QixTQUFTLEVBQUUsa0NBQWtDO1lBQzdDLElBQUksRUFBRTtnQkFDSjtvQkFDRSxNQUFNLEVBQUUsOENBQThDO29CQUN0RCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7Z0JBQ0Q7b0JBQ0UsTUFBTSxFQUFFLDhDQUE4QztvQkFDdEQsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCO2FBQ0Y7WUFDRCxJQUFJLEVBQUUsZUFBZTtTQUN0QixDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUc7WUFDckI7Z0JBQ0UsT0FBTyxFQUFFLDhDQUE4QztnQkFDdkQsTUFBTSxFQUFFLFNBQVM7YUFDbEI7U0FDRixDQUFDO1FBRUYsUUFBUSxDQUFDLDhDQUE4QyxFQUFFO1lBQ3ZELEVBQUUsQ0FBQyxpRkFBaUYsRUFBRSxLQUFLO2dCQUN6RixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDekMsS0FBSztvQkFDTCxVQUFVLEVBQUUsVUFBVTtvQkFDdEIsZUFBZSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3hDLFVBQVUsRUFBRSxjQUFjO2lCQUMzQixDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3hELEtBQUs7b0JBQ0wsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGVBQWUsRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUN4QyxVQUFVLEVBQUUsY0FBYztpQkFDM0IsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLFlBQVk7b0JBQ3BCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixLQUFLLEVBQUUsVUFBVTtvQkFDakIsV0FBVyxFQUFFO3dCQUNYLElBQUksRUFBRSxVQUFVO3dCQUNoQixlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDeEMsVUFBVSxFQUFFLGNBQWM7cUJBQzNCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztnQkFDNUQsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3RGLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekMsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLGVBQWUsRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUN4QyxVQUFVLEVBQUUsRUFBRTtpQkFDZixDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3hELEtBQUs7b0JBQ0wsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGVBQWUsRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUN6QyxDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUMzQixNQUFNLEVBQUUsWUFBWTtvQkFDcEIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxVQUFVO29CQUNqQixXQUFXLEVBQUU7d0JBQ1gsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLGVBQWUsRUFBRSxDQUFDLHFCQUFxQixDQUFDO3FCQUN6QztvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEtBQUs7Z0JBQ3BELE1BQU0saUJBQWlCLEdBQUc7b0JBQ3hCLFNBQVMsRUFBRSxrQ0FBa0M7b0JBQzdDLElBQUksRUFBRTt3QkFDSjs0QkFDRSxNQUFNLEVBQUUsOENBQThDOzRCQUN0RCxRQUFRLEVBQUUsS0FBSzs0QkFDZixVQUFVLEVBQUUsSUFBSTt5QkFDakI7cUJBQ0Y7b0JBQ0QsSUFBSSxFQUFFLGFBQWE7aUJBQ3BCLENBQUM7Z0JBRUYsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3RGLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekMsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLGVBQWUsRUFBRSxDQUFDLHFCQUFxQixFQUFFLGlCQUFpQixDQUFDO29CQUMzRCxVQUFVLEVBQUUsY0FBYztpQkFDM0IsQ0FBQyxDQUFDO2dCQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUN4RCxLQUFLO29CQUNMLElBQUksRUFBRSxVQUFVO29CQUNoQixlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQztvQkFDM0QsVUFBVSxFQUFFLGNBQWM7aUJBQzNCLENBQUMsQ0FBQztnQkFFSCxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7b0JBQzNCLE1BQU0sRUFBRSxZQUFZO29CQUNwQixXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLFdBQVcsRUFBRTt3QkFDWCxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsZUFBZSxFQUFFLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUM7d0JBQzNELFVBQVUsRUFBRSxjQUFjO3FCQUMzQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUs7Z0JBQzFELE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUN6QyxLQUFLO29CQUNMLFVBQVUsRUFBRSxVQUFVO29CQUN0QixlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDeEMsVUFBVSxFQUFFLGNBQWM7b0JBQzFCLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsTUFBTTt3QkFDWixLQUFLLEVBQUUsV0FBVztxQkFDbkI7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUN4RCxLQUFLO29CQUNMLElBQUksRUFBRSxVQUFVO29CQUNoQixlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDeEMsVUFBVSxFQUFFLGNBQWM7b0JBQzFCLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsTUFBTTt3QkFDWixLQUFLLEVBQUUsV0FBVztxQkFDbkI7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLFlBQVk7b0JBQ3BCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixLQUFLLEVBQUUsVUFBVTtvQkFDakIsV0FBVyxFQUFFO3dCQUNYLElBQUksRUFBRSxVQUFVO3dCQUNoQixlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDeEMsVUFBVSxFQUFFLGNBQWM7d0JBQzFCLElBQUksRUFBRTs0QkFDSixJQUFJLEVBQUUsTUFBTTs0QkFDWixLQUFLLEVBQUUsV0FBVzt5QkFDbkI7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLO2dCQUMvRCxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hHLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUN6QyxLQUFLO29CQUNMLFVBQVUsRUFBRSxVQUFVO29CQUN0QixlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDeEMsVUFBVSxFQUFFLGNBQWM7aUJBQzNCLENBQUMsQ0FBQztnQkFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDO29CQUNqRSxLQUFLO29CQUNMLElBQUksRUFBRSxVQUFVO29CQUNoQixlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDeEMsVUFBVSxFQUFFLGNBQWM7aUJBQzNCLENBQUMsQ0FBQztnQkFFSCxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEVBQUUsRUFBRTtvQkFDcEMsTUFBTSxFQUFFLHFCQUFxQjtvQkFDN0IsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxVQUFVO29CQUNqQixpQkFBaUIsRUFBRSxTQUFTO29CQUM1QixXQUFXLEVBQUU7d0JBQ1gsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLGVBQWUsRUFBRSxDQUFDLHFCQUFxQixDQUFDO3dCQUN4QyxVQUFVLEVBQUUsY0FBYztxQkFDM0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxLQUFLO2dCQUM1RCxNQUFNLFlBQVk7cUJBQ2YsbUJBQW1CLENBQUM7b0JBQ25CLEtBQUs7b0JBQ0wsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGVBQWUsRUFBRSxFQUFFO29CQUNuQixVQUFVLEVBQUUsY0FBYztpQkFDM0IsQ0FBQztxQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO1lBQ2xILENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUs7Z0JBQ3hELE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixTQUFTLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztnQkFDOUIsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDekMsS0FBSztvQkFDTCxVQUFVLEVBQUUsVUFBVTtvQkFDdEIsZUFBZSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3hDLFVBQVUsRUFBRSxjQUFjO2lCQUMzQixDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3hELEtBQUs7b0JBQ0wsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGVBQWUsRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUN4QyxVQUFVLEVBQUUsY0FBYztpQkFDM0IsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLFlBQVk7b0JBQ3BCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixLQUFLLEVBQUUsVUFBVTtvQkFDakIsV0FBVyxFQUFFO3dCQUNYLElBQUksRUFBRSxVQUFVO3dCQUNoQixlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDeEMsVUFBVSxFQUFFLGNBQWM7cUJBQzNCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQywyREFBMkQsRUFBRTtZQUNwRSxTQUFTLCtCQUErQjtnQkFDdEMsT0FBTztvQkFDTCxxQkFBcUIsRUFBRTt3QkFDckI7NEJBQ0UsY0FBYyxFQUFFLEVBQUU7NEJBQ2xCLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQzVCLElBQUksRUFBRSxZQUFZO3lCQUNuQjt3QkFDRDs0QkFDRSxjQUFjLEVBQUUsRUFBRTs0QkFDbEIsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQy9CLElBQUksRUFBRSxZQUFZO3lCQUNuQjtxQkFDRjtvQkFDRCxtQkFBbUIsRUFBRTt3QkFDbkI7NEJBQ0UsVUFBVSxFQUFFLDhDQUE4Qzs0QkFDMUQsZUFBZSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDdkIsZUFBZSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDeEI7cUJBQ0Y7b0JBQ0QsaUJBQWlCLEVBQUU7d0JBQ2pCLDhDQUE4Qzt3QkFDOUMsOENBQThDO3dCQUM5QyxrQ0FBa0M7cUJBQ25DO29CQUNELGFBQWEsRUFBRTt3QkFDYixxQkFBcUIsRUFBRSxDQUFDO3dCQUN4Qix5QkFBeUIsRUFBRSxDQUFDO3dCQUM1QiwyQkFBMkIsRUFBRSxDQUFDO3FCQUMvQjtpQkFDRixDQUFDO1lBQ0osQ0FBQztZQUVELEVBQUUsQ0FBQyxvRkFBb0YsRUFBRSxLQUFLO2dCQUM1RixNQUFNLDRCQUE0QixHQUFHLCtCQUErQixFQUFFLENBQUM7Z0JBQ3ZFLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUN6QyxLQUFLO29CQUNMLFVBQVUsRUFBRSxVQUFVO29CQUN0QiwyQkFBMkIsRUFBRSw0QkFBNEI7b0JBQ3pELFVBQVUsRUFBRSxjQUFjO2lCQUMzQixDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7b0JBQ3hELEtBQUs7b0JBQ0wsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLDJCQUEyQixFQUFFLDRCQUE0QjtvQkFDekQsVUFBVSxFQUFFLGNBQWM7aUJBQzNCLENBQUMsQ0FBQztnQkFFSCxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7b0JBQzNCLE1BQU0sRUFBRSxZQUFZO29CQUNwQixXQUFXLEVBQUUsSUFBSTtvQkFDakIsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLFdBQVcsRUFBRTt3QkFDWCxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsMkJBQTJCLEVBQUUsNEJBQTRCO3dCQUN6RCxVQUFVLEVBQUUsY0FBYztxQkFDM0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLO2dCQUN6RSxNQUFNLDRCQUE0QixHQUFHLCtCQUErQixFQUFFLENBQUM7Z0JBQ3ZFLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUN6QyxLQUFLO29CQUNMLFVBQVUsRUFBRSxVQUFVO29CQUN0QiwyQkFBMkIsRUFBRSw0QkFBNEI7b0JBQ3pELFVBQVUsRUFBRSxFQUFFO2lCQUNmLENBQUMsQ0FBQztnQkFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztvQkFDeEQsS0FBSztvQkFDTCxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsMkJBQTJCLEVBQUUsNEJBQTRCO2lCQUMxRCxDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUMzQixNQUFNLEVBQUUsWUFBWTtvQkFDcEIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxVQUFVO29CQUNqQixXQUFXLEVBQUU7d0JBQ1gsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLDJCQUEyQixFQUFFLDRCQUE0QjtxQkFDMUQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRSxLQUFLO2dCQUN2RSxNQUFNLDRCQUE0QixHQUFHLCtCQUErQixFQUFFLENBQUM7Z0JBQ3ZFLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUN6QyxLQUFLO29CQUNMLFVBQVUsRUFBRSxVQUFVO29CQUN0QiwyQkFBMkIsRUFBRSw0QkFBNEI7b0JBQ3pELFVBQVUsRUFBRSxjQUFjO29CQUMxQixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLE1BQU07d0JBQ1osS0FBSyxFQUFFLFdBQVc7cUJBQ25CO2lCQUNGLENBQUMsQ0FBQztnQkFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztvQkFDeEQsS0FBSztvQkFDTCxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsMkJBQTJCLEVBQUUsNEJBQTRCO29CQUN6RCxVQUFVLEVBQUUsY0FBYztvQkFDMUIsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxNQUFNO3dCQUNaLEtBQUssRUFBRSxXQUFXO3FCQUNuQjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUMzQixNQUFNLEVBQUUsWUFBWTtvQkFDcEIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLEtBQUssRUFBRSxVQUFVO29CQUNqQixXQUFXLEVBQUU7d0JBQ1gsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLDJCQUEyQixFQUFFLDRCQUE0Qjt3QkFDekQsVUFBVSxFQUFFLGNBQWM7d0JBQzFCLElBQUksRUFBRTs0QkFDSixJQUFJLEVBQUUsTUFBTTs0QkFDWixLQUFLLEVBQUUsV0FBVzt5QkFDbkI7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxLQUFLO2dCQUM1RSxNQUFNLDRCQUE0QixHQUFHLCtCQUErQixFQUFFLENBQUM7Z0JBQ3ZFLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDeEcsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLDJCQUEyQixFQUFFLDRCQUE0QjtvQkFDekQsVUFBVSxFQUFFLGNBQWM7aUJBQzNCLENBQUMsQ0FBQztnQkFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDO29CQUNqRSxLQUFLO29CQUNMLElBQUksRUFBRSxVQUFVO29CQUNoQiwyQkFBMkIsRUFBRSw0QkFBNEI7b0JBQ3pELFVBQVUsRUFBRSxjQUFjO2lCQUMzQixDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLEVBQUU7b0JBQ3BDLE1BQU0sRUFBRSxxQkFBcUI7b0JBQzdCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixLQUFLLEVBQUUsVUFBVTtvQkFDakIsaUJBQWlCLEVBQUUsU0FBUztvQkFDNUIsV0FBVyxFQUFFO3dCQUNYLElBQUksRUFBRSxVQUFVO3dCQUNoQiwyQkFBMkIsRUFBRSw0QkFBNEI7d0JBQ3pELFVBQVUsRUFBRSxjQUFjO3FCQUMzQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7Z0JBQ2xFLE1BQU0sWUFBWTtxQkFDZixtQkFBbUIsQ0FBQztvQkFDbkIsS0FBSztvQkFDTCxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsMkJBQTJCLEVBQUU7d0JBQzNCLHFCQUFxQixFQUFFLEVBQUU7d0JBQ3pCLG1CQUFtQixFQUFFLEVBQUU7d0JBQ3ZCLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDO3dCQUMzQixhQUFhLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxFQUFFLDJCQUEyQixFQUFFLENBQUMsRUFBRTtxQkFDMUc7b0JBQ0QsVUFBVSxFQUFFLGNBQWM7aUJBQzNCLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsb0ZBQW9GLENBQUMsQ0FBQztZQUNsSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsK0JBQStCLEVBQUU7UUFDeEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXRDLCtCQUErQjtRQUMvQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sZUFBZSxHQUFHO1lBQ3RCLEVBQUUsRUFBRSxrQ0FBa0M7WUFDdEMsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUU7Z0JBQ0osa0NBQWtDO2dCQUNsQyxrQ0FBa0M7Z0JBQ2xDLGtDQUFrQzthQUNuQztZQUNELFlBQVksRUFBRSxFQUFFO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNoRSxNQUFNLHVCQUF1QixHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ3RELEdBQUcsZUFBZTtZQUNsQixJQUFJLEVBQUUsV0FBVztTQUNsQixDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztRQUVsQyxNQUFNLGNBQWMsR0FBYztZQUNoQyxXQUFXLEVBQUUsYUFBYTtZQUMxQixZQUFZLEVBQUUsRUFBRTtZQUNoQixNQUFNLEVBQUU7Z0JBQ04sVUFBVSxFQUFFLFVBQVU7YUFDdkI7WUFDRCxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDOUIsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUUsc0JBQXNCO1lBQzdCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsUUFBUSxFQUFFLFVBQVU7WUFDcEIsV0FBVyxFQUFFO2dCQUNYO29CQUNFLGVBQWUsRUFBRSxjQUFjO29CQUMvQixXQUFXLEVBQUUsZUFBZTtvQkFDNUIsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtvQkFDRCxjQUFjLEVBQUUsS0FBSztpQkFDdEI7YUFDRjtTQUNGLENBQUM7UUFFRixTQUFTLENBQUM7WUFDUixPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sMkJBQTJCLEdBQUc7WUFDbEMsVUFBVSxFQUFFLFdBQVc7WUFDdkIsWUFBWSxFQUFFLFVBQVU7WUFDeEIsYUFBYSxFQUFFLENBQUMsNEJBQTRCLENBQUM7WUFDN0MsaUJBQWlCLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxTQUFTLENBQUM7U0FDN0UsQ0FBQztRQUVGLE1BQU0sbUJBQW1CLEdBQUc7WUFDMUI7Z0JBQ0UsT0FBTyxFQUFFLDRDQUE0QztnQkFDckQsTUFBTSxFQUFFLFNBQVM7YUFDbEI7U0FDRixDQUFDO1FBRUYsUUFBUSxDQUFDLHNEQUFzRCxFQUFFO1lBQy9ELEVBQUUsQ0FBQyx5RkFBeUYsRUFBRSxLQUFLO2dCQUNqRyxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM5QyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDekMsS0FBSztvQkFDTCxVQUFVLEVBQUUsVUFBVTtvQkFDdEIsNEJBQTRCLEVBQUUsMkJBQTJCO29CQUN6RCxVQUFVLEVBQUUsbUJBQW1CO2lCQUNoQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsbUJBQW1CLENBQUM7b0JBQzFELEtBQUs7b0JBQ0wsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLDRCQUE0QixFQUFFLDJCQUEyQjtvQkFDekQsVUFBVSxFQUFFLG1CQUFtQjtpQkFDaEMsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRTtvQkFDN0IsTUFBTSxFQUFFLGNBQWM7b0JBQ3RCLFdBQVcsRUFBRSxhQUFhO29CQUMxQixLQUFLLEVBQUUsY0FBYztvQkFDckIsV0FBVyxFQUFFO3dCQUNYLElBQUksRUFBRSxVQUFVO3dCQUNoQiw0QkFBNEIsRUFBRSwyQkFBMkI7d0JBQ3pELFVBQVUsRUFBRSxtQkFBbUI7cUJBQ2hDO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUUsS0FBSztnQkFDcEUsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3RGLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDOUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7b0JBQ3pDLEtBQUs7b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLDRCQUE0QixFQUFFLDJCQUEyQjtvQkFDekQsVUFBVSxFQUFFLEVBQUU7aUJBQ2YsQ0FBQyxDQUFDO2dCQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sY0FBYyxDQUFDLG1CQUFtQixDQUFDO29CQUMxRCxLQUFLO29CQUNMLElBQUksRUFBRSxVQUFVO29CQUNoQiw0QkFBNEIsRUFBRSwyQkFBMkI7aUJBQzFELENBQUMsQ0FBQztnQkFFSCxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUU7b0JBQzdCLE1BQU0sRUFBRSxjQUFjO29CQUN0QixXQUFXLEVBQUUsYUFBYTtvQkFDMUIsS0FBSyxFQUFFLGNBQWM7b0JBQ3JCLFdBQVcsRUFBRTt3QkFDWCxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsNEJBQTRCLEVBQUUsMkJBQTJCO3FCQUMxRDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLElBQUk7d0JBQ1QsU0FBUyxFQUFFLE1BQU07cUJBQ2xCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDhEQUE4RCxFQUFFLEtBQUs7Z0JBQ3RFLE1BQU0sbUJBQW1CLEdBQUc7b0JBQzFCLFVBQVUsRUFBRSxvQkFBb0I7b0JBQ2hDLFlBQVksRUFBRSxnQkFBZ0I7b0JBQzlCLGFBQWEsRUFBRSxFQUFFO29CQUNqQixpQkFBaUIsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO2lCQUM3RCxDQUFDO2dCQUVGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN0RixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzlDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUN6QyxLQUFLO29CQUNMLFVBQVUsRUFBRSxVQUFVO29CQUN0Qiw0QkFBNEIsRUFBRSxtQkFBbUI7b0JBQ2pELFVBQVUsRUFBRSxtQkFBbUI7aUJBQ2hDLENBQUMsQ0FBQztnQkFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDMUQsS0FBSztvQkFDTCxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsNEJBQTRCLEVBQUUsbUJBQW1CO29CQUNqRCxVQUFVLEVBQUUsbUJBQW1CO2lCQUNoQyxDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFO29CQUM3QixNQUFNLEVBQUUsY0FBYztvQkFDdEIsV0FBVyxFQUFFLGFBQWE7b0JBQzFCLEtBQUssRUFBRSxjQUFjO29CQUNyQixXQUFXLEVBQUU7d0JBQ1gsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLDRCQUE0QixFQUFFLG1CQUFtQjt3QkFDakQsVUFBVSxFQUFFLG1CQUFtQjtxQkFDaEM7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLO2dCQUNuRSxNQUFNLGlCQUFpQixHQUFHO29CQUN4QixHQUFHLDJCQUEyQjtvQkFDOUIsR0FBRyxFQUFFO3dCQUNILElBQUksRUFBRSxVQUFVO3dCQUNoQixVQUFVLEVBQUUsUUFBUTt3QkFDcEIsUUFBUSxFQUFFLElBQUk7d0JBQ2QsbUJBQW1CLEVBQUUsRUFBRTt3QkFDdkIsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQzt3QkFDMUIsTUFBTSxFQUFFLEVBQUU7cUJBQ1g7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM5QyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDekMsS0FBSztvQkFDTCxVQUFVLEVBQUUsVUFBVTtvQkFDdEIsNEJBQTRCLEVBQUUsaUJBQWlCO29CQUMvQyxVQUFVLEVBQUUsbUJBQW1CO2lCQUNoQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsbUJBQW1CLENBQUM7b0JBQzFELEtBQUs7b0JBQ0wsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLDRCQUE0QixFQUFFLGlCQUFpQjtvQkFDL0MsVUFBVSxFQUFFLG1CQUFtQjtpQkFDaEMsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMxQixRQUFRLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRTtvQkFDN0IsTUFBTSxFQUFFLGNBQWM7b0JBQ3RCLFdBQVcsRUFBRSxhQUFhO29CQUMxQixLQUFLLEVBQUUsY0FBYztvQkFDckIsV0FBVyxFQUFFO3dCQUNYLElBQUksRUFBRSxVQUFVO3dCQUNoQiw0QkFBNEIsRUFBRSxpQkFBaUI7d0JBQy9DLFVBQVUsRUFBRSxtQkFBbUI7cUJBQ2hDO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLEVBQUUsSUFBSTt3QkFDVCxTQUFTLEVBQUUsTUFBTTtxQkFDbEI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztnQkFDdkUsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3RGLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztvQkFDNUIsR0FBRyxjQUFjO29CQUNqQixLQUFLLEVBQUUsaUJBQWlCO29CQUN4QixpQkFBaUIsRUFBRSxtQkFBbUI7aUJBQ3ZDLENBQUMsQ0FBQztnQkFDSCxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDekMsS0FBSztvQkFDTCxVQUFVLEVBQUUsVUFBVTtvQkFDdEIsNEJBQTRCLEVBQUUsMkJBQTJCO29CQUN6RCxVQUFVLEVBQUUsbUJBQW1CO2lCQUNoQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDbkUsS0FBSztvQkFDTCxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsNEJBQTRCLEVBQUUsMkJBQTJCO29CQUN6RCxVQUFVLEVBQUUsbUJBQW1CO2lCQUNoQyxDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RDLE1BQU0sRUFBRSx1QkFBdUI7b0JBQy9CLFdBQVcsRUFBRSxhQUFhO29CQUMxQixLQUFLLEVBQUUsY0FBYztvQkFDckIsaUJBQWlCLEVBQUUsbUJBQW1CO29CQUN0QyxXQUFXLEVBQUU7d0JBQ1gsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLDRCQUE0QixFQUFFLDJCQUEyQjt3QkFDekQsVUFBVSxFQUFFLG1CQUFtQjtxQkFDaEM7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxLQUFLO2dCQUNyRSxNQUFNLGNBQWM7cUJBQ2pCLG1CQUFtQixDQUFDO29CQUNuQixLQUFLO29CQUNMLElBQUksRUFBRSxVQUFVO29CQUNoQixVQUFVLEVBQUUsbUJBQW1CO2lCQUNoQyxDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDRFQUE0RSxDQUFDLENBQUM7WUFDMUcsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSztnQkFDaEUsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3RGLGNBQWMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUNuQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzlDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUN6QyxLQUFLO29CQUNMLFVBQVUsRUFBRSxVQUFVO29CQUN0Qiw0QkFBNEIsRUFBRSwyQkFBMkI7b0JBQ3pELFVBQVUsRUFBRSxtQkFBbUI7aUJBQ2hDLENBQUMsQ0FBQztnQkFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDMUQsS0FBSztvQkFDTCxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsNEJBQTRCLEVBQUUsMkJBQTJCO29CQUN6RCxVQUFVLEVBQUUsbUJBQW1CO2lCQUNoQyxDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFO29CQUM3QixNQUFNLEVBQUUsY0FBYztvQkFDdEIsV0FBVyxFQUFFLGFBQWE7b0JBQzFCLEtBQUssRUFBRSxjQUFjO29CQUNyQixXQUFXLEVBQUU7d0JBQ1gsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLDRCQUE0QixFQUFFLDJCQUEyQjt3QkFDekQsVUFBVSxFQUFFLG1CQUFtQjtxQkFDaEM7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw4RUFBOEUsRUFBRSxLQUFLO2dCQUN0RixNQUFNLHVCQUF1QixHQUFHO29CQUM5QixHQUFHLGNBQWM7b0JBQ2pCLE1BQU0sRUFBRTt3QkFDTixVQUFVLEVBQUUsU0FBUztxQkFDdEI7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsb0JBQW9CLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQ3ZELG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO29CQUN6QyxLQUFLO29CQUNMLFVBQVUsRUFBRSxtQkFBbUI7b0JBQy9CLFVBQVUsRUFBRSxTQUFTO2lCQUN0QixDQUFDLENBQUM7Z0JBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsbUJBQW1CLENBQUM7b0JBQzFELEtBQUs7b0JBQ0wsVUFBVSxFQUFFLG1CQUFtQjtvQkFDL0IsSUFBSSxFQUFFLFVBQVU7aUJBQ2pCLENBQUMsQ0FBQztnQkFFSCxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUU7b0JBQzdCLE1BQU0sRUFBRSxjQUFjO29CQUN0QixXQUFXLEVBQUUsYUFBYTtvQkFDMUIsS0FBSyxFQUFFLGNBQWM7b0JBQ3JCLFdBQVcsRUFBRTt3QkFDWCxVQUFVLEVBQUUsbUJBQW1CO3dCQUMvQixJQUFJLEVBQUUsVUFBVTtxQkFDakI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFBRSxJQUFJO3dCQUNULFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxpRkFBaUYsRUFBRSxLQUFLO2dCQUN6RixNQUFNLGFBQWEsR0FBRztvQkFDcEIsVUFBVSxFQUFFLFdBQVc7b0JBQ3ZCLGdDQUFnQztvQkFDaEMsYUFBYSxFQUFFLENBQUMsNEJBQTRCLENBQUM7b0JBQzdDLGlCQUFpQixFQUFFLENBQUMsNENBQTRDLEVBQUUsU0FBUyxDQUFDO2lCQUN0RSxDQUFDLENBQUMsd0NBQXdDO2dCQUVsRCxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEYsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUMsQ0FBQztnQkFFcEcsSUFBSSxDQUFDO29CQUNILE1BQU0sY0FBYyxDQUFDLG1CQUFtQixDQUFDO3dCQUN2QyxLQUFLO3dCQUNMLElBQUksRUFBRSxVQUFVO3dCQUNoQiw0QkFBNEIsRUFBRSxhQUFhO3dCQUMzQyxVQUFVLEVBQUUsbUJBQW1CO3FCQUNoQyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7Z0JBQ3pGLENBQUM7Z0JBRUQsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO29CQUNuRCxLQUFLO29CQUNMLFVBQVUsRUFBRSxVQUFVO29CQUN0QixVQUFVLEVBQUUsU0FBUztvQkFDckIsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLGVBQWUsRUFBRSxTQUFTO29CQUMxQiw0QkFBNEIsRUFBRSxhQUFhO29CQUMzQyxVQUFVLEVBQUUsbUJBQW1CO29CQUMvQixLQUFLLEVBQUUsU0FBUztvQkFDaEIsVUFBVSxFQUFFLFNBQVM7aUJBQ3RCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUM1QixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDN0QsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUM7UUFFdEMsVUFBVSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDO1lBQ1IsNkVBQTZFO1lBQzdFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFFRCxTQUFTLFlBQVksQ0FBQyxFQUFVLEVBQUUsUUFBaUM7WUFDakUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUNmLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7aUJBQzdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsU0FBUyxZQUFZLENBQUMsR0FBVztZQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ2YsSUFBSSxDQUFDLHVCQUF1QixRQUFRLG1CQUFtQixDQUFDO2lCQUN4RCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSztZQUNuRSxNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RyxNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUxRyxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUU5QyxNQUFNLElBQUksR0FBMEQsRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ1IsR0FBRyxDQUFDLG9CQUFvQixTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ1IsR0FBRyxDQUFDLG9CQUFvQixXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWxCLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFFakcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLHNDQUFzQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQThCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxLQUFLO1lBQzdELE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSztZQUNsRSxNQUFNLGFBQWEsR0FBRyxFQUFFLEdBQUcsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE9BQWdCLEVBQUUsQ0FBQztZQUMvRSxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUU3RCxVQUFVLEVBQUUsQ0FBQztZQUNiLHdGQUF3RjtZQUN4RixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFcEIsTUFBTSxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxRkFBcUYsRUFBRSxLQUFLO1lBQzdGLE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsT0FBZ0IsRUFBRSxDQUFDO1lBQy9FLE1BQU0sU0FBUyxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdELE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RHLE1BQU0sU0FBUyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFHLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUcsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU1RyxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLG9CQUFvQixTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWxFLE1BQU0saUJBQWlCLEdBQW1DLEVBQUUsQ0FBQztZQUM3RCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsTUFBK0IsRUFBRSxFQUFFO2dCQUM1RCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxDQUFDLENBQUM7WUFFRixNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEMsVUFBVTtnQkFDVixJQUFJO2dCQUNKLElBQUk7Z0JBQ0osc0JBQXNCLEVBQUUsS0FBSztnQkFDN0IsV0FBVzthQUNaLENBQUMsQ0FBQztZQUVILGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUczRCxDQUFDO1lBQ0YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxtQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLHdDQUF3QyxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsbUJBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLO1lBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXpHLFVBQVUsRUFBRSxDQUFDO1lBQ2IsWUFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEUsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEUsWUFBWSxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBRTlDLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztZQUMxQiwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDUixHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMscUJBQXFCLFNBQVMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO2lCQUNqRSxLQUFLLENBQUMsR0FBRyxFQUFFLFVBQVUsR0FBRztnQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUFDO1lBRUwsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUU5RSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0VBQStFLEVBQUUsS0FBSztZQUN2RixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVyRyxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtZQUNuRSxZQUFZLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWhFLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUUsaUdBQWlHO1FBQ25HLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlFQUFpRSxFQUFFLEtBQUs7WUFDekUsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckcsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFckcsVUFBVSxFQUFFLENBQUM7WUFDYixZQUFZLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNsRSxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7WUFDL0UsWUFBWSxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVoRSxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxLQUFLO1lBQ3JFLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQztZQUN6QixNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RyxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUxRyxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQixZQUFZLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNsRSxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RSxZQUFZLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV4RSw2Q0FBNkM7WUFDN0MsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7WUFDbEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckcsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFekcsdUNBQXVDO1lBQ3ZDLFlBQVksQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUU5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxLQUFLO1lBQ2hGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFdEUsTUFBTSxNQUFNO2lCQUNULGlCQUFpQixDQUFDLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUNoRSxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxLQUFLO1lBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXpHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLGlDQUFpQyxFQUFFLENBQUMsQ0FBQztZQUNqRyxZQUFZLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNsRSxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RSxZQUFZLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV4RSxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtFQUErRSxFQUFFLEtBQUs7WUFDdkYsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckcsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFekcsVUFBVSxFQUFFLENBQUM7WUFDYiw0RkFBNEY7WUFDNUYsWUFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEUsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEUsWUFBWSxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFeEUsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRTtZQUMxQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sWUFBWSxHQUFHLGtDQUFrQyxDQUFDO1lBQ3hELE1BQU0sYUFBYSxHQUFHLGtDQUFrQyxDQUFDO1lBQ3pELE1BQU0sYUFBYSxHQUFHO2dCQUNwQixFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxJQUFJLEVBQUUsS0FBSztnQkFDWCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO2dCQUNuQyxZQUFZLEVBQUUsRUFBRTtnQkFDaEIsWUFBWSxFQUFFLFNBQWtCO2dCQUNoQyxJQUFJLEVBQUUsS0FBYzthQUNyQixDQUFDO1lBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBb0IsQ0FBQyxDQUFDO1lBRW5FLFNBQVMsZUFBZSxDQUFDLEVBQVUsRUFBRSxRQUFpQztnQkFDcEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUNmLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7cUJBQzVCLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBRUQsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEtBQUs7Z0JBQzNFLE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUV0RyxVQUFVLEVBQUUsQ0FBQztnQkFDYixlQUFlLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDekUsZUFBZSxDQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUVwRCxNQUFNLElBQUksR0FBeUQsRUFBRSxDQUFDO2dCQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUNSLEdBQUcsQ0FBQyxtQkFBbUIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDdEMsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRWxCLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ2hHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLO2dCQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFckcsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsZUFBZSxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3hFLGVBQWUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFFcEQsTUFBTSxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDakYscUVBQXFFO1lBQ3ZFLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUs7Z0JBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUV0RyxlQUFlLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDekUsZUFBZSxDQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUVwRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLy8gVGVzdHMgZm9yIFdhbGxldFxuLy9cblxuaW1wb3J0IHNob3VsZCA9IHJlcXVpcmUoJ3Nob3VsZCcpO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICcuLi9saWIvYXNzZXJ0cyc7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge1xuICBCYXNlVHNzVXRpbHMsXG4gIGNvbW1vbixcbiAgRWNkc2EsXG4gIEVDRFNBVXRpbHMsXG4gIEVERFNBVXRpbHMsXG4gIEdldFVzZXJQcnZPcHRpb25zLFxuICBLZXljaGFpbnMsXG4gIEtleVR5cGUsXG4gIE1hbmFnZVVuc3BlbnRzT3B0aW9ucyxcbiAgTWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgTWVzc2FnZVR5cGVzLFxuICBQb3B1bGF0ZWRJbnRlbnQsXG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25PcHRpb25zLFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFJlcXVlc3RUcmFjZXIsXG4gIFNlbmRNYW55T3B0aW9ucyxcbiAgU2lnbmF0dXJlU2hhcmVUeXBlLFxuICBTaWduZWRNZXNzYWdlLFxuICBTaWduVHlwZWREYXRhVmVyc2lvbixcbiAgVG9rZW5UeXBlLFxuICBUc3NVdGlscyxcbiAgVHhSZXF1ZXN0LFxuICBUeFJlcXVlc3RWZXJzaW9uLFxuICBUeXBlZERhdGEsXG4gIFR5cGVkTWVzc2FnZSxcbiAgV2FsbGV0LFxuICBXYWxsZXRTaWduTWVzc2FnZU9wdGlvbnMsXG4gIFdhbGxldFNpZ25UeXBlZERhdGFPcHRpb25zLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R28gfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdXR4b0xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgVHNvbCB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1zb2wnO1xuaW1wb3J0IHsgVGV0aCB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1ldGgnO1xuXG5pbXBvcnQgeyBuZnRSZXNwb25zZSwgdW5zdXBwb3J0ZWROZnRSZXNwb25zZSB9IGZyb20gJy4uL2ZpeHR1cmVzL25mdHMvbmZ0UmVzcG9uc2VzJztcblxucmVxdWlyZSgnc2hvdWxkLXNpbm9uJyk7XG5cbm5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcblxudHlwZSBDcmVhdGVUeFJlcXVlc3RCb2R5ID0ge1xuICBpbnRlbnQ6IFBvcHVsYXRlZEludGVudDtcbiAgYXBpdmVyc2lvbjogVHhSZXF1ZXN0VmVyc2lvbjtcbiAgcHJldmlldz86IGJvb2xlYW47XG59O1xuXG5kZXNjcmliZSgnVjIgV2FsbGV0OicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGNvbnN0IGJhc2Vjb2luOiBhbnkgPSBiaXRnby5jb2luKCd0YnRjJyk7XG4gIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsXG4gICAgY29pbjogJ3RidGMnLFxuICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnLCAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc2MDAwMDAwMDAnLCAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc3MDAwMDAwMDAnXSxcbiAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgIHR5cGU6ICdob3QnLFxuICB9O1xuICBjb25zdCBjb2xkV2FsbGV0RGF0YSA9IHtcbiAgICBpZDogJzY1Nzc0NDE5ZmI0ZDk2OTA4NDdmYmU0YjAwMDAwMDAwJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyc2NTc3NDQxMmU1NGI3NTE2MzkzYzlkZjgwMDAwMDAwMCcsICc2NTc3NDQyNDI4NjY0ZmZlNzkxYWY3ZWEwMDAwMDAwMCcsICc2NTc3NDQyYjczMTdhOTQ1NzU2YzJmZDkwMDAwMDAwMCddLFxuICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgdHlwZTogJ2NvbGQnLFxuICB9O1xuICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgd2FsbGV0RGF0YSk7XG4gIGNvbnN0IGNvbGRXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgY29sZFdhbGxldERhdGEpO1xuICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcbiAgY29uc3QgYWRkcmVzczEgPSAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJztcbiAgY29uc3QgYWRkcmVzczIgPSAnMHg3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2JztcbiAgY29uc3QgdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMgPSB7XG4gICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICBjaGFuZ2VBZGRyZXNzVHlwZTogWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXSxcbiAgfTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICBzaW5vbi5yZXNldCgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2FsbGV0IHRyYW5zZmVycycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNlYXJjaCBpbiB3YWxsZXQgZm9yIGEgdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGxpbWl0OiAxLCBzZWFyY2hMYWJlbDogJ3Rlc3QnIH07XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90cmFuc2ZlcmApXG4gICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBjb2luOiAndGJjaCcsXG4gICAgICAgICAgdHJhbnNmZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdhbGxldDogd2FsbGV0LmlkKCksXG4gICAgICAgICAgICAgIGNvbW1lbnQ6ICd0ZXN0cycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQudHJhbnNmZXJzKHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmb3J3YXJkIGFsbCB2YWxpZCBwYXJhbWV0ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBsaW1pdDogMSxcbiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzMScsICdhZGRyZXNzMiddLFxuICAgICAgICBkYXRlR3RlOiAnZGF0ZVN0cmluZzAnLFxuICAgICAgICBkYXRlTHQ6ICdkYXRlU3RyaW5nMScsXG4gICAgICAgIHZhbHVlR3RlOiAwLFxuICAgICAgICB2YWx1ZUx0OiAzMDAwMDAwMDAsXG4gICAgICAgIGFsbFRva2VuczogdHJ1ZSxcbiAgICAgICAgc2VhcmNoTGFiZWw6ICdhYmMnLFxuICAgICAgICBpbmNsdWRlSGV4OiB0cnVlLFxuICAgICAgICB0eXBlOiAndHJhbnNmZXJfdHlwZScsXG4gICAgICAgIHN0YXRlOiAndHJhbnNmZXJfc3RhdGUnLFxuICAgICAgfTtcblxuICAgICAgLy8gVGhlIGFjdHVhbCBhcGkgcmVxdWVzdCB3aWxsIG9ubHkgc2VuZCBzdHJpbmdzLCBidXQgdGhlIFNESyBmdW5jdGlvbiBleHBlY3RzIG51bWJlcnMgZm9yIHNvbWUgdmFsdWVzXG4gICAgICBjb25zdCBhcGlQYXJhbXMgPSBfLm1hcFZhbHVlcyhwYXJhbXMsIChwYXJhbSkgPT4gKEFycmF5LmlzQXJyYXkocGFyYW0pID8gcGFyYW0gOiBTdHJpbmcocGFyYW0pKSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90cmFuc2ZlcmApXG4gICAgICAgIC5xdWVyeShfLm1hdGNoZXMoYXBpUGFyYW1zKSlcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC50cmFuc2ZlcnMocGFyYW1zKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHN0cmluZyBhcmd1bWVudCBmb3IgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgbGltaXQ6IDEsXG4gICAgICAgIGFkZHJlc3M6ICdzdHJpbmdBZGRyZXNzJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGFwaVBhcmFtcyA9IHtcbiAgICAgICAgbGltaXQ6ICcxJyxcbiAgICAgICAgYWRkcmVzczogJ3N0cmluZ0FkZHJlc3MnLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3RyYW5zZmVyYClcbiAgICAgICAgLnF1ZXJ5KF8ubWF0Y2hlcyhhcGlQYXJhbXMpKVxuICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LnRyYW5zZmVycyhwYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3JzIGZvciBpbnZhbGlkIGV4cGVjdGVkIHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC50cmFuc2ZlcnMoeyBhZGRyZXNzOiAxMzM3NSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhZGRyZXNzIGFyZ3VtZW50LCBleHBlY3Rpbmcgc3RyaW5nIG9yIGFycmF5Jyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGFkZHJlc3M6IFtudWxsXSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhZGRyZXNzIGFyZ3VtZW50LCBleHBlY3RpbmcgYXJyYXkgb2YgYWRkcmVzcyBzdHJpbmdzJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGRhdGVHdGU6IDIwMTAxOTA0IH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGRhdGVHdGUgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQudHJhbnNmZXJzKHsgZGF0ZUx0OiAyMDEwMTkwNCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGRhdGVMdCBhcmd1bWVudCwgZXhwZWN0aW5nIHN0cmluZycpO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC50cmFuc2ZlcnMoeyB2YWx1ZUd0ZTogJzEwMjMwMDA1JyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCB2YWx1ZUd0ZSBhcmd1bWVudCwgZXhwZWN0aW5nIG51bWJlcicpO1xuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC50cmFuc2ZlcnMoeyB2YWx1ZUx0OiAnLTVlOCcgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCB2YWx1ZUx0IGFyZ3VtZW50LCBleHBlY3RpbmcgbnVtYmVyJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGluY2x1ZGVIZXg6ICcxMjMnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGluY2x1ZGVIZXggYXJndW1lbnQsIGV4cGVjdGluZyBib29sZWFuJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IHN0YXRlOiAxMjMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgc3RhdGUgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcgb3IgYXJyYXknKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgICAudHJhbnNmZXJzKHsgc3RhdGU6IFsxMjMsIDQ1Nl0gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgc3RhdGUgYXJndW1lbnQsIGV4cGVjdGluZyBhcnJheSBvZiBzdGF0ZSBzdHJpbmdzJyk7XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LnRyYW5zZmVycyh7IHR5cGU6IDEyMyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHR5cGUgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1dhbGxldCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZWFyY2ggaW4gd2FsbGV0IGFkZHJlc3NlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgbGltaXQ6IDEsIGxhYmVsQ29udGFpbnM6ICd0ZXN0JyB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vYWRkcmVzc2VzYClcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGNvaW46ICd0YmNoJyxcbiAgICAgICAgICB0cmFuc2ZlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FsbGV0OiB3YWxsZXQuaWQoKSxcbiAgICAgICAgICAgICAgY29tbWVudDogJ3Rlc3RzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5hZGRyZXNzZXMocGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGJjaCBjYXNoYWRkciBmb3JtYXQgYXMgdmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ3RiY2gnKTtcbiAgICBjb25zdCB2YWxpZCA9IGNvaW4uaXNWYWxpZEFkZHJlc3MoJ2JjaHRlc3Q6cHpma3h2NTMydDBxNXpjaGNrMm1obW1mMnkwMmNkZWp5c3NxNXFyejdhJyk7XG4gICAgdmFsaWQuc2hvdWxkLmJlLlRydWUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYmNoIGxlZ2FjeSBmb3JtYXQgYXMgdmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ3RiY2gnKTtcbiAgICBjb25zdCB2YWxpZCA9IGNvaW4uaXNWYWxpZEFkZHJlc3MoJzJONmdZOXI5aXVYUVF6WmlTeW5nV0plb1V1TDVtQzF4NEFjJyk7XG4gICAgdmFsaWQuc2hvdWxkLmJlLlRydWUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RFVEggV2FsbGV0IEFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZXRoV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBldGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0ZXRoJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NlYXJjaCBsaXN0IGFkZHJlc3NlcyBzaG91bGQgcmV0dXJuIHN1Y2Nlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGluY2x1ZGVCYWxhbmNlczogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZVRva2VuczogdHJ1ZSxcbiAgICAgICAgcmV0dXJuQmFsYW5jZXNGb3JUb2tlbjogJ2d0ZXJjNmRwJyxcbiAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IGZhbHNlLFxuICAgICAgICBpbmNsdWRlVG90YWxBZGRyZXNzQ291bnQ6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vYWRkcmVzc2VzYClcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuYWRkcmVzc2VzKHBhcmFtcyk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcnMgZm9yIGludmFsaWQgZXhwZWN0ZWQgcGFyYW1ldGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuYWRkcmVzc2VzKHsgaW5jbHVkZUJhbGFuY2VzOiB0cnVlLCByZXR1cm5CYWxhbmNlc0ZvclRva2VuOiAxIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHJldHVybkJhbGFuY2VzRm9yVG9rZW4gYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBwZW5kaW5nRGVwbG95bWVudDogMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBwZW5kaW5nRGVwbG95bWVudCBhcmd1bWVudCwgZXhwZWN0aW5nIGJvb2xlYW4nKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBpbmNsdWRlQmFsYW5jZXM6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZUJhbGFuY2VzIGFyZ3VtZW50LCBleHBlY3RpbmcgYm9vbGVhbicpO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmFkZHJlc3Nlcyh7IGluY2x1ZGVUb2tlbnM6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZVRva2VucyBhcmd1bWVudCwgZXhwZWN0aW5nIGJvb2xlYW4nKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBpbmNsdWRlVG90YWxBZGRyZXNzQ291bnQ6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZVRvdGFsQWRkcmVzc0NvdW50IGFyZ3VtZW50LCBleHBlY3RpbmcgYm9vbGVhbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dldCBmb3J3YXJkZXIgYmFsYW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZvcndhcmRlcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnMHhiZmJjYzBmZTJiODY1ZGU4NzcxMzQyNDZhZjA5Mzc4ZTliYzNjOTFkJyxcbiAgICAgICAgICBiYWxhbmNlOiAnMjAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICcweGU1OTUyNGVkOGI0NzE2NWY0Y2IwODUwYzk0MjgwNjlhNjAwMmU1ZWInLFxuICAgICAgICAgIGJhbGFuY2U6ICcxMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vZm9yd2FyZGVycy9iYWxhbmNlc2ApLnJlcGx5KDIwMCwge1xuICAgICAgICBmb3J3YXJkZXJzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZvcndhcmRlckJhbGFuY2UgPSBhd2FpdCBldGhXYWxsZXQuZ2V0Rm9yd2FyZGVyQmFsYW5jZSgpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzBdLmFkZHJlc3Muc2hvdWxkLmVxbChmb3J3YXJkZXJzWzBdLmFkZHJlc3MpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzBdLmJhbGFuY2Uuc2hvdWxkLmVxbChmb3J3YXJkZXJzWzBdLmJhbGFuY2UpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzFdLmFkZHJlc3Muc2hvdWxkLmVxbChmb3J3YXJkZXJzWzFdLmFkZHJlc3MpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzFdLmJhbGFuY2Uuc2hvdWxkLmVxbChmb3J3YXJkZXJzWzFdLmJhbGFuY2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnR2V0IFVzZXIgUHJ2JywgKCkgPT4ge1xuICAgIGNvbnN0IHBydiA9XG4gICAgICAneHBydjlzMjFaclFIMTQzSzNoZWt5Tmo3VGNpUjRYTlllMWtNajY4VzJpcGpKR05IRVRXUDdvNDJBakRuU1BnS2hkWjR4OE5CQXZhTDcyUnJYanVYTmRta01xTEVSWnphNzNvWXVnR3RiTEZYRzhnJztcbiAgICBjb25zdCBkZXJpdmVkUHJ2ID1cbiAgICAgICd4cHJ2OXlvRzY3VGQxMXV3alh3YlY4ekVtcnlTVlhFUnU1RlpBc0xEOXN1QmVFSmJnSnFBTnM4WW5nNWRFSm9paTdoYWc1SmVybUs2UGJmeGdEbVN6Vzdld1dlTG1lSkVrbVBmbVpVU0xkRVR0SHgnO1xuICAgIGl0KCdzaG91bGQgdXNlIHRoZSBjb2xkIGRlcml2YXRpb24gc2VlZCB0byBkZXJpdmUgdGhlIHByb3BlciB1c2VyIHByaXZhdGUga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlclBydk9wdGlvbnMgPSB7XG4gICAgICAgIHBydixcbiAgICAgICAgY29sZERlcml2YXRpb25TZWVkOiAnMTIzJyxcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKGRlcml2ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgdGhlIHVzZXIga2V5Y2hhaW4gZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBhcyB0aGUgY29sZCBkZXJpdmF0aW9uIHNlZWQgaWYgbm9uZSBpcyBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXJQcnZPcHRpb25zOiBHZXRVc2VyUHJ2T3B0aW9ucyA9IHtcbiAgICAgICAgcHJ2LFxuICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgICAgIGlkOiAnNDU2JyxcbiAgICAgICAgICBwdWI6ICc3ODknLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgKGF3YWl0IHdhbGxldC5nZXRVc2VyUHJ2KHVzZXJQcnZPcHRpb25zKSkuc2hvdWxkLmVxbChkZXJpdmVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJlZmVyIHRoZSBleHBsaWNpdCBjb2xkIGRlcml2YXRpb24gc2VlZCB0byB0aGUgdXNlciBrZXljaGFpbiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlclBydk9wdGlvbnM6IEdldFVzZXJQcnZPcHRpb25zID0ge1xuICAgICAgICBwcnYsXG4gICAgICAgIGNvbGREZXJpdmF0aW9uU2VlZDogJzEyMycsXG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzQ1NicsXG4gICAgICAgICAgaWQ6ICc3ODknLFxuICAgICAgICAgIHB1YjogJzAxMicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKGRlcml2ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHBydiBwcm92aWRlZCBmb3IgVFNTIFNNQycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRzc1dhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgICBjb2luOiAndHNvbCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NzAwMDAwMDAwJyxcbiAgICAgICAgXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0c29sY29pbjogYW55ID0gYml0Z28uY29pbigndHNvbCcpO1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbGNvaW4sIHRzc1dhbGxldERhdGEpO1xuICAgICAgY29uc3QgcHJ2ID0gJ2xvbmdzdHJpbmdpZmllZGpzb24nO1xuICAgICAgY29uc3Qga2V5Y2hhaW4gPSB7XG4gICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICdyYW5kb20gc2VlZCcsXG4gICAgICAgIGlkOiAnMTIzJyxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46ICdsb25nc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ3RzcycgYXMgS2V5VHlwZSxcbiAgICAgIH07XG4gICAgICBjb25zdCB1c2VyUHJ2T3B0aW9ucyA9IHtcbiAgICAgICAgcHJ2LFxuICAgICAgICBrZXljaGFpbixcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKHBydik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdURVRIIFdhbGxldCBUcmFuc2FjdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGV0aFdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIF0sXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgfTtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlcnJvciBlaXAxNTU5IGFuZCBnYXNQcmljZSBhcmUgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBnYXNQcmljZTogMTAwLFxuICAgICAgICBlaXAxNTU5OiB7XG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDEwLFxuICAgICAgICAgIG1heEZlZVBlckdhczogMTAsXG4gICAgICAgIH0sXG4gICAgICAgIGFtb3VudDogMTAsXG4gICAgICAgIGFkZHJlc3M6IFRlc3RCaXRHby5WMi5URVNUX1dBTExFVDFfQUREUkVTUyxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlYyLlRFU1RfV0FMTEVUMV9QQVNTQ09ERSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZChwYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZWFyY2ggZm9yIHBlbmRpbmcgdHJhbnNhY3Rpb24gY29ycmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyB3YWxsZXRJZDogd2FsbGV0LmlkKCkgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS90eC9wZW5kaW5nL2ZpcnN0YCkucXVlcnkocGFyYW1zKS5yZXBseSgyMDApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmdldEZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uKCk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0cnkgdG8gY2hhbmdlIHRoZSBmZWUgY29ycmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyB0eGlkOiAnMHhmZmZmZmZmZicsIGZlZTogJzEwMDAwMDAwJyB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvY2hhbmdlRmVlYCwgcGFyYW1zKS5yZXBseSgyMDApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuY2hhbmdlRmVlKHsgdHhpZDogJzB4ZmZmZmZmZmYnLCBmZWU6ICcxMDAwMDAwMCcgfSk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0cnkgdG8gY2hhbmdlIHRoZSBmZWUgY29ycmVjdGx5IHVzaW5nIGVpcDE1NTknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4aWQ6ICcweGZmZmZmZmZmJyxcbiAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAnMjUwMDAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2NoYW5nZUZlZWAsIHBhcmFtcykucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmNoYW5nZUZlZShwYXJhbXMpO1xuICAgICAgICB0aHJvdyAnJztcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBkYXRhIHBhcmFtZXRlciBhbmQgYW1vdW50OiAwIHdoZW4gdXNpbmcgc2VuZFRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSAnMHg3ZGI1NjJjNGRkNDY1Y2M4OTU3NjFjNTZmODNiNmFmMGUzMjY4OWJhJztcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgICBkYXRhOiAnMHgwMDExMDAxMScsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMoeyByZWNpcGllbnRzIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICBjb25zdCBub2NrS2V5Q2hhaW4gPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kKHtcbiAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICAgICAgZGF0YTogcmVjaXBpZW50c1swXS5kYXRhLFxuICAgICAgICAgIGFtb3VudDogcmVjaXBpZW50c1swXS5hbW91bnQsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBub2NrS2V5Q2hhaW4uaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBkYXRhIHBhcmFtZXRlciBhbmQgYW1vdW50OiAwIHdoZW4gdXNpbmcgc2VuZE1hbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vdHgvYnVpbGRgO1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICAgIGRhdGE6ICcweDAwMTEwMDExJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIGNvbnN0IG5vY2tLZXlDaGFpbiA9IG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L2tleS8ke2V0aFdhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnNlbmRNYW55KHsgcmVjaXBpZW50cyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgbm9ja0tleUNoYWluLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBwYXNzIHJlY2lwaWVudHMgaW4gc2VuZE1hbnkgd2hlbiB0cmFuc2FjdGlvbiB0eXBlIGlzIGZpbGxOb25jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSAnMHg3ZGI1NjJjNGRkNDY1Y2M4OTU3NjFjNTZmODNiNmFmMGUzMjY4OWJhJztcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtcyA9IHsgcmVjaXBpZW50cywgdHlwZTogJ2ZpbGxOb25jZScsIGlzVHNzOiB0cnVlLCBub25jZTogJzEzJyB9O1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlQYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKCdjYW5ub3QgcHJvdmlkZSByZWNpcGllbnRzIGZvciB0cmFuc2FjdGlvbiB0eXBlIGZpbGxOb25jZScpO1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHBhc3MgcmVjZWl2ZUFkZHJlc3MgaW4gc2VuZE1hbnkgd2hlbiBUU1MgdHJhbnNhY3Rpb24gdHlwZSBpcyB0cmFuc2ZlciBvciB0cmFuc2ZlclRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdjYW5ub3QgdXNlIHJlY2VpdmUgYWRkcmVzcyBmb3IgVFNTIHRyYW5zYWN0aW9ucyBvZiB0eXBlIHRyYW5zZmVyJztcbiAgICAgIGNvbnN0IHNlbmRNYW55UGFyYW1zUmVjZWl2ZUFkZHJlc3NFcnJvciA9IHtcbiAgICAgICAgcmVjZWl2ZUFkZHJlc3M6ICd0aHJvdycsXG4gICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICBub25jZTogJzEzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtcyA9IHsgcmVjaXBpZW50cywgdHlwZTogJ3RyYW5zZmVyJywgaXNUc3M6IHRydWUsIG5vbmNlOiAnMTMnIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kTWFueShzZW5kTWFueVBhcmFtc1JlY2VpdmVBZGRyZXNzRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kTWFueShzZW5kTWFueVBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQubm90LmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGVhcmx5IGlmIHBhc3N3b3JkIGlzIHdyb25nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGB1bmFibGUgdG8gZGVjcnlwdCBrZXljaGFpbiB3aXRoIHRoZSBnaXZlbiB3YWxsZXQgcGFzc3BocmFzZWA7XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtc0NvcnJlY3RQYXNzUGhyYXNlID0ge1xuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgbm9uY2U6ICcxMycsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFRlc3RCaXRHby5WMi5URVNUX0VUSF9XQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgIH07XG4gICAgICBjb25zdCBub2NrS2V5Y2hhaW4gPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0va2V5LyR7ZXRoV2FsbGV0LmtleUlkcygpWzBdfWApXG4gICAgICAgIC50aW1lcygyKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZYRGNXRDJ2eHVlYmNUMVpwVEY0VmtlNnFtTVc4eXpkZHdOWXBBUGp2WUVFTDVqTGZ5WVhXMmZ1eHRBeFk4VGdqUFVKTGNmMUM4cXo5TjZWZ1p4QXJLWDRFd0I4ckg1JyxcbiAgICAgICAgICBldGhBZGRyZXNzOiAnMHgyNmExNjNiYTk3Mzk1Mjk3MjBjMDkxNGM1ODM4NjVkZWMwZDM3Mjc4JyxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAne1wiaXZcIjpcIjE1RnNiRFZJMXpHOU9nZ0Q4WVgrSGc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJoSGJOSDNTei9hVT1cIixcImN0XCI6XCJXb05WS3o3YWZpUnhYSTJ3L1lrek1kTXlvUWcvQjE1dTFROGFRZ2k5NmpKWjl3azZUSWFTRWM2YlhGSDNBSHpEOU1kSkNXSlFVcFJob1FjL3JneXRjbjY5c2NQVGpLZWV5Vk1FbEdDeFpkRlZTL3BzUWNORStsdWUzLy8yWmx4ais2dDFOa3ZZTys4eUFlelNNUkJLNU9kZnRYRWpOUUk9XCJ9JyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5zZW5kTWFueSh7IC4uLnNlbmRNYW55UGFyYW1zQ29ycmVjdFBhc3NQaHJhc2UsIHdhbGxldFBhc3NwaHJhc2U6ICd3cm9uZ1Bhc3NwaHJhc2UnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGVycm9yTWVzc2FnZSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gJ21vY2snO1xuICAgICAgICB9O1xuICAgICAgICAvLyBTaG91bGQgbm90IHZhbGlkYXRlIHBhc3NwaHJhc2UgaWYgY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gaXMgcHJvdmlkZWRcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnNlbmRNYW55KHtcbiAgICAgICAgICAuLi5zZW5kTWFueVBhcmFtc0NvcnJlY3RQYXNzUGhyYXNlLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICd3cm9uZ1Bhc3NwaHJhc2UnLFxuICAgICAgICAgIGN1c3RvbVNpZ25pbmdGdW5jdGlvbixcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQubm90LmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZE1hbnkoeyAuLi5zZW5kTWFueVBhcmFtc0NvcnJlY3RQYXNzUGhyYXNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLm5vdC5lcXVhbChlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgbm9ja0tleWNoYWluLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdPRkMgQ3JlYXRlIEFkZHJlc3MnLCAoKSA9PiB7XG4gICAgbGV0IG9mY1dhbGxldDogV2FsbGV0O1xuICAgIGxldCBub2NrcztcbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YU9mYyA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAwYjAwMDAwMDAwJyxcbiAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc4MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzkwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE4MDAwMDAwMDAwJyxcbiAgICAgICAgXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICB9O1xuICAgICAgb2ZjV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbignb2ZjJyksIHdhbGxldERhdGFPZmMpO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrcyA9IFtcbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtvZmNXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6IG9mY1dhbGxldC5rZXlJZHMoKVswXSxcbiAgICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRlhEY1dEMnZ4dWViY1QxWnBURjRWa2U2cW1NVzh5emRkd05ZcEFQanZZRUVMNWpMZnlZWFcyZnV4dEF4WThUZ2pQVUpMY2YxQzhxejlONlZnWnhBcktYNEV3QjhySDUnLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAgICd7XCJpdlwiOlwiMTVGc2JEVkkxekc5T2dnRDhZWCtIZz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImhIYk5IM1N6L2FVPVwiLFwiY3RcIjpcIldvTlZLejdhZmlSeFhJMncvWWt6TWRNeW9RZy9CMTV1MVE4YVFnaTk2akpaOXdrNlRJYVNFYzZiWEZIM0FIekQ5TWRKQ1dKUVVwUmhvUWMvcmd5dGNuNjlzY1BUaktlZXlWTUVsR0N4WmRGVlMvcHNRY05FK2x1ZTMvLzJabHhqKzZ0MU5rdllPKzh5QWV6U01SQks1T2RmdFhFak5RST1cIn0nLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pLFxuXG4gICAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi9vZmMva2V5LyR7b2ZjV2FsbGV0LmtleUlkcygpWzFdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiBvZmNXYWxsZXQua2V5SWRzKClbMV0sXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0doU2FYaWtwdVRDOUtVODhYeDlMcmpLU3cxSktzdlhOZ2FicFRkZ2p5N0xTb3ZoOVpIaGNxaEFIUXU3dXRodTdGZ3VOR2RjQzRhWFRLSzVncVRjUGU0V3ZMWVJiQ1NHJyxcbiAgICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pLFxuXG4gICAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi9vZmMva2V5LyR7b2ZjV2FsbGV0LmtleUlkcygpWzJdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiBvZmNXYWxsZXQua2V5SWRzKClbMl0sXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZzWFNoVzhSM2hKc0hOVFlUVXd6Y2VqbkxrWTdLQ3RhSmJEcWNHa2NCRjk5QnJFSlNqTlpIZUh2ZWlZVXJzQWR3bmpVTUd3cGdtRWJpS2NaV1J1VkE5SHhuUmFBM3IzJyxcbiAgICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIG5vY2tzLmZvckVhY2goKHNjb3BlKSA9PiBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IHZhbGlkYXRlIGFyZ3VtZW50cyB0byBjcmVhdGUgYWRkcmVzcyBvbiBPRkMgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgb2ZjV2FsbGV0LmNyZWF0ZUFkZHJlc3MoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdvblRva2VuIGlzIGEgbWFuZGF0b3J5IHBhcmFtZXRlciBmb3IgT0ZDIHdhbGxldHMnKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGVzdCBwYXNzaW5nIGludmFsaWQgbnVtYmVyIGFyZ3VtZW50XG4gICAgICBhd2FpdCBvZmNXYWxsZXQuY3JlYXRlQWRkcmVzcyh7IG9uVG9rZW46IDQyIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ29uVG9rZW4gaGFzIHRvIGJlIGEgc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkcmVzcyBjcmVhdGlvbiB3aXRoIHZhbGlkIG9uVG9rZW4gYXJndW1lbnQgc3VjY2VlZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL29mYy93YWxsZXQvJHtvZmNXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgb25Ub2tlbjogJ29mY3RidGMnIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYzOGE0OGM2YzNkYmE0MDAwN2EzNDk3ZmE0OWEwODBjJyxcbiAgICAgICAgICBhZGRyZXNzOiAnZ2VuZXJhdGVkIGFkZHJlc3MnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgICAgICB3YWxsZXQ6IG9mY1dhbGxldC5pZCxcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gYXdhaXQgb2ZjV2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBvblRva2VuOiAnb2ZjdGJ0YycgfSk7XG4gICAgICBhZGRyZXNzLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdnZW5lcmF0ZWQgYWRkcmVzcycpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RFVEggQ3JlYXRlIEFkZHJlc3MnLCAoKSA9PiB7XG4gICAgbGV0IGV0aFdhbGxldCwgbm9ja3M7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgIGJhc2VBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgIH0sXG4gICAgICBjb2luOiAndGV0aCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgICBub2NrcyA9IFtcbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0va2V5LyR7ZXRoV2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGWERjV0Qydnh1ZWJjVDFacFRGNFZrZTZxbU1XOHl6ZGR3TllwQVBqdllFRUw1akxmeVlYVzJmdXh0QXhZOFRnalBVSkxjZjFDOHF6OU42VmdaeEFyS1g0RXdCOHJINScsXG4gICAgICAgICAgZXRoQWRkcmVzczogJzB4MjZhMTYzYmE5NzM5NTI5NzIwYzA5MTRjNTgzODY1ZGVjMGQzNzI3OCcsXG4gICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICAgJ3tcIml2XCI6XCIxNUZzYkRWSTF6RzlPZ2dEOFlYK0hnPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiaEhiTkgzU3ovYVU9XCIsXCJjdFwiOlwiV29OVkt6N2FmaVJ4WEkydy9Za3pNZE15b1FnL0IxNXUxUThhUWdpOTZqSlo5d2s2VElhU0VjNmJYRkgzQUh6RDlNZEpDV0pRVXBSaG9RYy9yZ3l0Y242OXNjUFRqS2VleVZNRWxHQ3haZEZWUy9wc1FjTkUrbHVlMy8vMlpseGorNnQxTmt2WU8rOHlBZXpTTVJCSzVPZGZ0WEVqTlFJPVwifScsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG5cbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0va2V5LyR7ZXRoV2FsbGV0LmtleUlkcygpWzFdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNHaFNhWGlrcHVUQzlLVTg4WHg5THJqS1N3MUpLc3ZYTmdhYnBUZGdqeTdMU292aDlaSGhjcWhBSFF1N3V0aHU3Rmd1TkdkY0M0YVhUS0s1Z3FUY1BlNFd2TFlSYkNTRycsXG4gICAgICAgICAgZXRoQWRkcmVzczogJzB4YTFhODhhNTAyMjc0MDczYjFiYzRmZTA2ZWEwZjVmZTc3ZTE1MWI5MScsXG4gICAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KSxcblxuICAgICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMl19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZzWFNoVzhSM2hKc0hOVFlUVXd6Y2VqbkxrWTdLQ3RhSmJEcWNHa2NCRjk5QnJFSlNqTlpIZUh2ZWlZVXJzQWR3bmpVTUd3cGdtRWJpS2NaV1J1VkE5SHhuUmFBM3IzJyxcbiAgICAgICAgICBldGhBZGRyZXNzOiAnMHgwMzI4MjFiN2VhNDBlYTVkNDQ2ZjQ3YzI5YTBmNzc3ZWUwMzVhYTEwJyxcbiAgICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIG5vY2tzLmZvckVhY2goKHNjb3BlKSA9PiBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IHZhbGlkYXRlIGFyZ3VtZW50cyB0byBjcmVhdGUgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBtZXNzYWdlID0gJ2dhc1ByaWNlIGhhcyB0byBiZSBhbiBpbnRlZ2VyIG9yIG51bWVyaWMgc3RyaW5nJztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBnYXNQcmljZToge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgZ2FzUHJpY2U6ICdhYmMnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgZ2FzUHJpY2U6IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdjaGFpbiBoYXMgdG8gYmUgYW4gaW50ZWdlcic7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IHt9IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46ICdhYmMnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdjb3VudCBoYXMgdG8gYmUgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCAyNTAnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiB7fSB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiAnYWJjJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiBudWxsIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiAtMSB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjb3VudDogMCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjb3VudDogMjUxIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG5cbiAgICAgIG1lc3NhZ2UgPSAnYmFzZUFkZHJlc3MgaGFzIHRvIGJlIGEgc3RyaW5nJztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBiYXNlQWRkcmVzczoge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBiYXNlQWRkcmVzczogMTIzIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgYmFzZUFkZHJlc3M6IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdhbGxvd1NraXBWZXJpZnlBZGRyZXNzIGhhcyB0byBiZSBhIGJvb2xlYW4nO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGFsbG93U2tpcFZlcmlmeUFkZHJlc3M6IHt9IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzczogMTIzIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzczogJ2FiYycgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiBudWxsIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG5cbiAgICAgIG1lc3NhZ2UgPSAnZm9yd2FyZGVyVmVyc2lvbiBoYXMgdG8gYmUgYW4gaW50ZWdlciAwLCAxLCAyLCAzLCA0IG9yIDUnO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBmb3J3YXJkZXJWZXJzaW9uOiA2IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGZvcndhcmRlclZlcnNpb246IC0xIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkcmVzcyBjcmVhdGlvbiB3aXRoIGZvcndhcmRlciB2ZXJzaW9uIDMgc3VjY2VlZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAzIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYzOGE0OGM2YzNkYmE0MDAwN2EzNDk3ZmE0OWEwODBjJyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHg1ZTYxYjY0ZjM4ZjFiNWY4NTA3OGZiODRiMjczOTQ4MzBiNGM4ZTgwJyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMSxcbiAgICAgICAgICBjb2luOiAndHBvbHlnb24nLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc2Mzc4NWY5NWFmN2M3NjAwMDdjZmFlMDY4YzJmMzFhZScsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMi0xMi0wMlQxODo0OTo0Mi4zNDhaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4MScsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDMsXG4gICAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBhd2FpdCBldGhXYWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAzIH0pO1xuICAgICAgYWRkcmVzcy5jb2luU3BlY2lmaWMuZm9yd2FyZGVyVmVyc2lvbi5zaG91bGQuZXF1YWwoMyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FkZHJlc3MgY3JlYXRpb24gd2l0aCBmb3J3YXJkZXIgdmVyc2lvbiAzIGZhaWxzIGR1ZSBpbnZhbGlkIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gJzB4NWU2MWI2JzsgLy8gaW52YWxpZCBhZGRyZXNzXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMyB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MzhhNDhjNmMzZGJhNDAwMDdhMzQ5N2ZhNDlhMDgwYycsXG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMSxcbiAgICAgICAgICBjb2luOiAndHBvbHlnb24nLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc2Mzc4NWY5NWFmN2M3NjAwMDdjZmFlMDY4YzJmMzFhZScsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMi0xMi0wMlQxODo0OTo0Mi4zNDhaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4MScsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDMsXG4gICAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAzIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRyZXNzIGNyZWF0aW9uIHdpdGggZm9yd2FyZGVyIHZlcnNpb24gMiBzdWNjZWVkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDIgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjM4YTQ4YzZjM2RiYTQwMDA3YTM0OTdmYTQ5YTA4MGMnLFxuICAgICAgICAgIGFkZHJlc3M6ICcweDVlNjFiNjRmMzhmMWI1Zjg1MDc4ZmI4NGIyNzM5NDgzMGI0YzhlODAnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIGNvaW46ICd0cG9seWdvbicsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzYzNzg1Zjk1YWY3Yzc2MDAwN2NmYWUwNjhjMmYzMWFlJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIyLTEyLTAyVDE4OjQ5OjQyLjM0OFonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRpb25GYWlsdXJlOiBbXSxcbiAgICAgICAgICAgIHNhbHQ6ICcweDEnLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAyLFxuICAgICAgICAgICAgaXNUc3M6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gYXdhaXQgZXRoV2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMiB9KTtcbiAgICAgIGFkZHJlc3MuY29pblNwZWNpZmljLmZvcndhcmRlclZlcnNpb24uc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aGVuIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGlzIHRydWUgaW4gY2FzZSBvZiBldGggdjEgZm9yd2FyZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMSB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MTVjNjQzYTk4YTJhMTAwMDY4ZTAyM2M2MzljMGY3NCcsXG4gICAgICAgICAgYWRkcmVzczogJzB4OGMxM2NkMGJiMTk4ODU4ZjYyOGQ1NjMxYmE0YjIyOTNmYzA4ZGY0OScsXG4gICAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAzMTc5LFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjEtMTAtMDVUMTQ6NDI6MDIuMzk5WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4YzZiJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICdhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwIGJ1dCBnb3QgMHg4YzEzY2QwYmIxOTg4NThmNjI4ZDU2MzFiYTRiMjI5M2ZjMDhkZjQ5J1xuICAgICAgICApO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aGVuIGludmFsaWQgYmFzZUFkZHJlc3MgaXMgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMSB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MTVjNjQzYTk4YTJhMTAwMDY4ZTAyM2M2MzljMGY3NCcsXG4gICAgICAgICAgYWRkcmVzczogJzB4MzJhMjI2Y2RhMTRlMzUyYTQ3YmY0YjE2NTg2NDhkODAzNzczNmY4MCcsXG4gICAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAzMTc5LFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjEtMTAtMDVUMTQ6NDI6MDIuMzk5WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4YzZiJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxLCBiYXNlQWRkcmVzczogJ2FzZ2YnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGJhc2UgYWRkcmVzcycpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aGVuIGluY29ycmVjdCBiYXNlQWRkcmVzcyBpcyBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwJyxcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDMxNzksXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMS0xMC0wNVQxNDo0MjowMi4zOTlaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHhjNmInLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgLy8gaW5jb3JyZWN0IGFkZHJlc3MgaXMgZ2VuZXJhdGVkIHdoaWxlIHZhbGlkYXRpbmcgZHVlIHRvIGluY29ycmVjdCBiYXNlQWRkcmVzc1xuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDEsIGJhc2VBZGRyZXNzOiAnMHg4YzEzY2QwYmIxOTg4NThmNjI4ZDU2MzFiYTRiMjI5M2ZjMDhkZjQ5JyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAnYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGV4cGVjdGVkIDB4MzY3NDg5MjYwMDc3OTBlN2VlNDE2YzY0ODViMzJlMDBjZmIxNzdhMyBidXQgZ290IDB4MzJhMjI2Y2RhMTRlMzUyYTQ3YmY0YjE2NTg2NDhkODAzNzczNmY4MCdcbiAgICAgICAgKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgndmVyaWZ5IGFkZHJlc3Mgd2hlbiBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbiBpcyB0cnVlICBhbmQgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzcyBpcyBmYWxzZSBpbiBjYXNlIG9mIGV0aCB2MCBmb3J3YXJkZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAwIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHgzMmEyNmNkYTE0ZTM1MmE0N2JmNGIxNjU4NjQ4ZDgwMzc3MzZmODAnLFxuICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMzE3OSxcbiAgICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIxLTEwLTA1VDE0OjQyOjAyLjM5OVonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRpb25GYWlsdXJlOiBbXSxcbiAgICAgICAgICAgIHNhbHQ6ICcweGM2YicsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMCwgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzczogZmFsc2UgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2FkZHJlc3MgdmVyaWZpY2F0aW9uIHNraXBwZWQgZm9yIGNvdW50ID0gMScpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aXRoIGFsbG93U2tpcFZlcmlmeUFkZHJlc3Mgc2V0IHRvIGZhbHNlIGFuZCBldGggdjEgZm9yd2FyZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMSB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MTVjNjQzYTk4YTJhMTAwMDY4ZTAyM2M2MzljMGY3NCcsXG4gICAgICAgICAgYWRkcmVzczogJzB4MzJhMjI2Y2RhMTRlMzUyYTQ3YmY0YjE2NTg2NDhkODAzNzczNmY4MCcsXG4gICAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAzMTc5LFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjEtMTAtMDVUMTQ6NDI6MDIuMzk5WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4YzZiJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0FkZHJlc3MgPSBhd2FpdCBldGhXYWxsZXQuY3JlYXRlQWRkcmVzcyh7XG4gICAgICAgIGNoYWluOiAwLFxuICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAxLFxuICAgICAgICBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgbmV3QWRkcmVzcy5pbmRleC5zaG91bGQuZXF1YWwoMzE3OSk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWxnb3JhbmQgdGVzdHMnLCAoKSA9PiB7XG4gICAgbGV0IGFsZ29XYWxsZXQ6IFdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGlzIGlzIG5vdCBhIHJlYWwgVEFMR08gd2FsbGV0XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzY1MDIwNGNmNDNkOGI0MDAwN2NkOWUxMWE4NzJjZTY1JyxcbiAgICAgICAgY29pbjogJ3RhbGdvJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc2NTAyMDRiNzhhNzVjOTAwMDc3OTBiY2U5NzlhZTM0ZCcsXG4gICAgICAgICAgJzY1MDIwNGI3NjZjNTZhMDAwNzI5NTZjMDhmYjljZGYxJyxcbiAgICAgICAgICAnNjUwMjA0YjhjY2YxMzcwMDA3YjMyYmI4MTU1ZGZiZWMnLFxuICAgICAgICBdLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICByb290QWRkcmVzczogJzJVTFJHRTY0VTdMVE1UNU02UkVCN09SSFg1R0xKWVdIVElWNUVBWFZMV1FUVEFUVkpER001S0pNSUknLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFsZ29XYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0YWxnbycpLCB3YWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgYnVpbGQgdG9rZW4gZW5hYmxlbWVudCB0cmFuc2FjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGVuYWJsZVRva2VuczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICd0YWxnbzpVU0R0LTE4MDQ0NycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFJlcXVlc3ROb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHthbGdvV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7YWxnb1dhbGxldC5pZCgpfS90eC9idWlsZGApXG4gICAgICAgIC5yZXBseSgodXJpLCBib2R5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gYm9keSBhcyBhbnk7XG4gICAgICAgICAgcGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgICBwYXJhbXMucmVjaXBpZW50c1swXS50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKCd0YWxnbzpVU0R0LTE4MDQ0NycpO1xuICAgICAgICAgIHBhcmFtcy50eXBlLnNob3VsZC5lcXVhbCgnZW5hYmxldG9rZW4nKTtcbiAgICAgICAgICBzaG91bGQubm90LmV4aXN0KHBhcmFtcy5lbmFibGVUb2tlbnMpO1xuICAgICAgICAgIHJldHVybiBbMjAwLCBwYXJhbXNdO1xuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGFsZ29XYWxsZXQuYnVpbGRUb2tlbkVuYWJsZW1lbnRzKHBhcmFtcyk7XG4gICAgICB0eFJlcXVlc3ROb2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdIZWRlcmEgdGVzdHMnLCAoKSA9PiB7XG4gICAgbGV0IGhiYXJXYWxsZXQ6IFdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGlzIGlzIG5vdCBhIHJlYWwgVEhCQVIgd2FsbGV0XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgY29pbjogJ3RoYmFyJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBdLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzAuMC40Nzg0MTUxMScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgaGJhcldhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RoYmFyJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBidWlsZCB0b2tlbiBlbmFibGVtZW50IHRyYW5zYWN0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgZW5hYmxlVG9rZW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3RoYmFyOnVzZGMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhSZXF1ZXN0Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7aGJhcldhbGxldC5jb2luKCl9L3dhbGxldC8ke2hiYXJXYWxsZXQuaWQoKX0vdHgvYnVpbGRgKVxuICAgICAgICAucmVwbHkoKHVyaSwgYm9keSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGJvZHkgYXMgYW55O1xuICAgICAgICAgIHBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgICAgcGFyYW1zLnJlY2lwaWVudHNbMF0udG9rZW5OYW1lLnNob3VsZC5lcXVhbCgndGhiYXI6dXNkYycpO1xuICAgICAgICAgIHBhcmFtcy50eXBlLnNob3VsZC5lcXVhbCgnZW5hYmxldG9rZW4nKTtcbiAgICAgICAgICBzaG91bGQubm90LmV4aXN0KHBhcmFtcy5lbmFibGVUb2tlbnMpO1xuICAgICAgICAgIHJldHVybiBbMjAwLCBwYXJhbXNdO1xuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGhiYXJXYWxsZXQuYnVpbGRUb2tlbkVuYWJsZW1lbnRzKHBhcmFtcyk7XG4gICAgICB0eFJlcXVlc3ROb2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDYW50b24gdGVzdHM6ICcsICgpID0+IHtcbiAgICBsZXQgY2FudG9uV2FsbGV0OiBXYWxsZXQ7XG4gICAgY29uc3QgY2FudG9uQml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycgfSk7XG4gICAgY2FudG9uQml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgIGJhc2VBZGRyZXNzOiAnMTIyMDU6OjEyMjA1YjRlMzUzN2E5NTEyNmQ5MDYwNDU5MjM0NGQ4YWQzYzNkZGNjZGE0Zjc5OTAxOTU0MjgwZWUxOWM1NzY3MTRkJyxcbiAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgIGxhc3RDaGFpbkluZGV4OiB7IDA6IDAgfSxcbiAgICAgIH0sXG4gICAgICBjb2luOiAndGNhbnRvbicsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbnRvbldhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RjYW50b24nKSwgd2FsbGV0RGF0YSk7XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjYW50b25XYWxsZXQuY29pbigpfS9rZXkvJHtjYW50b25XYWxsZXQua2V5SWRzKClbMF19YCkudGltZXMoMykucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICBwdWI6ICc1ZjhXbUMydVc5U0FrN0xNWDJyNEcxQng4TU13eDhzZGdwb3R5SEdvZGlabycsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJoTkszcmc4MlAxVDk0TWF1ZVhGQWJBPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiY1Y0d1U0RXpQanM9XCIsXCJjdFwiOlwiOVZaWDk5WnRzYjZwNzVDeGwybHJjWEJwbG1zc0lBUTlrN1pBODF2ZERZRzRONWRaMzZCUU5XVmZEb2VsajlPMzFYeUorWHJpMFhLSVdVemwwS0tMZlVFUnBsbXROb09DbjVpZkpjWndDck94cEhaUWUzQUo3MDBvOFdtc3JrNUhcIn0nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NhbnRvbldhbGxldC5jb2luKCl9L2tleS8ke2NhbnRvbldhbGxldC5rZXlJZHMoKVsxXX1gKS50aW1lcygyKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgIHB1YjogJ0cxczQzSlR6Tlp6cWhVbjRhTnB3Z2NjNndiOUZVc1pRRDVKamZmRzZpc3lkJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiVUZydC9RbElVUjFYZVFhZlBCYUFsdz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjdWUEJZYUpYUG04PVwiLFwiY3RcIjpcImFqRkt2Mnk4eWFJQlhRMzlzQWJCV2NuYmlFRXpialM0QW9RdHA1Y1hZcWplRFJ4dDNhQ3hlbVBtMjJwbmtKYUNpakZqSnJNSGJrbXNOaE5ZekhnNWFIRnVrTituRUFWc3N5TndIYnpsaFNubTgvQlZONTB5QWRBQXRXcmVoOGNwXCJ9JyxcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjYW50b25XYWxsZXQuY29pbigpfS9rZXkvJHtjYW50b25XYWxsZXQua2V5SWRzKClbMl19YCkudGltZXMoMikucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBwdWI6ICdHSDFMVjFlOUZkcUdlOFUyYzhQTUVjbWEzZkRlaDFrdGNHVkJyRDNBdUZxeCcsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcImlJdVdPSElPRXJFRGRpSm42ZzQ2bWc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJSemg3UlJKa3NqMD1cIixcImN0XCI6XCJyY05JQ1VmcDlGYWtUNTNsK2FkQjZYS3pTMXZOVGMwUXE5akF0cW54QStTY3NzaVM0UTBsM3NnRy8wZ0R5NURhWkt0WHJ5S0JEVXZHc2k3Yi9mWWFGQ1VwQW9abi9WWlRPaE9VTi9tbzdaSGI0T2hPWEwyOVlQUGtpcnlBcTlDclwifScsXG4gICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBidWlsZCB3YWxsZXQgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb25zIGNvcnJlY3RseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHtjYW50b25XYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApXG4gICAgICAgIC5yZXBseSgodXJsLCBib2R5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9keVBhcmFtcyA9IGJvZHkgYXMgYW55O1xuICAgICAgICAgIGJvZHlQYXJhbXMuaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdjcmVhdGVBY2NvdW50Jyk7XG4gICAgICAgICAgYm9keVBhcmFtcy5pbnRlbnQucmVjaXBpZW50cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAyMDAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdmYWtlIHRyYW5zYWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgZmVlSW5mbzogJ2Zha2UgZmVlIGluZm8nLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGNhbnRvbldhbGxldC5zZW5kV2FsbGV0SW5pdGlhbGl6YXRpb24oKTtcbiAgICAgIHR4UmVxdWVzdE5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU29sYW5hIHRlc3RzOiAnLCAoKSA9PiB7XG4gICAgbGV0IHNvbFdhbGxldDogV2FsbGV0O1xuICAgIGNvbnN0IHBhc3NwaHJhc2UgPSAnI0JvbmRpb2xhMTIzNCc7XG4gICAgY29uc3Qgc29sQml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycgfSk7XG4gICAgc29sQml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgIGJhc2VBZGRyZXNzOiAnNWY4V21DMnVXOVNBazdMTVgycjRHMUJ4OE1Nd3g4c2RncG90eUhHb2RpWm8nLFxuICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogZmFsc2UsXG4gICAgICAgIG1pbmltdW1GdW5kaW5nOiAyNDQ3MTM2LFxuICAgICAgICBsYXN0Q2hhaW5JbmRleDogeyAwOiAwIH0sXG4gICAgICB9LFxuICAgICAgY29pbjogJ3Rzb2wnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0c29sJyksIHdhbGxldERhdGEpO1xuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7c29sV2FsbGV0LmNvaW4oKX0va2V5LyR7c29sV2FsbGV0LmtleUlkcygpWzBdfWApLnRpbWVzKDMpLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgcHViOiAnNWY4V21DMnVXOVNBazdMTVgycjRHMUJ4OE1Nd3g4c2RncG90eUhHb2RpWm8nLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiaE5LM3JnODJQMVQ5NE1hdWVYRkFiQT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImNWNHdVNEV6UGpzPVwiLFwiY3RcIjpcIjlWWlg5OVp0c2I2cDc1Q3hsMmxyY1hCcGxtc3NJQVE5azdaQTgxdmREWUc0TjVkWjM2QlFOV1ZmRG9lbGo5TzMxWHlKK1hyaTBYS0lXVXpsMEtLTGZVRVJwbG10Tm9PQ241aWZKY1p3Q3JPeHBIWlFlM0FKNzAwbzhXbXNyazVIXCJ9JyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtzb2xXYWxsZXQuY29pbigpfS9rZXkvJHtzb2xXYWxsZXQua2V5SWRzKClbMV19YCkudGltZXMoMikucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICBwdWI6ICdHMXM0M0pUek5aenFoVW40YU5wd2djYzZ3YjlGVXNaUUQ1SmpmZkc2aXN5ZCcsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcIlVGcnQvUWxJVVIxWGVRYWZQQmFBbHc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCI3VlBCWWFKWFBtOD1cIixcImN0XCI6XCJhakZLdjJ5OHlhSUJYUTM5c0FiQldjbmJpRUV6YmpTNEFvUXRwNWNYWXFqZURSeHQzYUN4ZW1QbTIycG5rSmFDaWpGakpyTUhia21zTmhOWXpIZzVhSEZ1a04rbkVBVnNzeU53SGJ6bGhTbm04L0JWTjUweUFkQUF0V3JlaDhjcFwifScsXG4gICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcblxuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7c29sV2FsbGV0LmNvaW4oKX0va2V5LyR7c29sV2FsbGV0LmtleUlkcygpWzJdfWApLnRpbWVzKDIpLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgcHViOiAnR0gxTFYxZTlGZHFHZThVMmM4UE1FY21hM2ZEZWgxa3RjR1ZCckQzQXVGcXgnLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJpSXVXT0hJT0VyRURkaUpuNmc0Nm1nPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiUnpoN1JSSmtzajA9XCIsXCJjdFwiOlwicmNOSUNVZnA5RmFrVDUzbCthZEI2WEt6UzF2TlRjMFFxOWpBdHFueEErU2Nzc2lTNFEwbDNzZ0cvMGdEeTVEYVpLdFhyeUtCRFV2R3NpN2IvZllhRkNVcEFvWm4vVlpUT2hPVU4vbW83WkhiNE9oT1hMMjlZUFBraXJ5QXE5Q3JcIn0nLFxuICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbjogJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVE9ETyAoU1RMWC0xNTAxOCk6IGZpeCB0ZXN0XG4gICAgICB4aXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgc2lnbiBhIGNvbnNvbGlkYXRpb24gdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHByZWJ1aWxkVHg6IHtcbiAgICAgICAgICAgIHdhbGxldElkOiB3YWxsZXREYXRhLmlkLFxuICAgICAgICAgICAgdHhIZXg6XG4gICAgICAgICAgICAgICdBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFJRTlNV1dWMmN0MDFtZzVHbTRFcWNKOVNBbjJYdUQrRnVBSGNIRlRrYzFUZ3V0M0RnVHNpU2dUUTBkbXpqNUpKZzZxWVRwbjhGeE9ZUEZDRlRNb1ppNDZnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlVwVFdwa3BJUVpOSk9oeFlObzRmSHcxdGQyOGtydUI1QitvUUVFRlJJMFFjK3EwWmc2T09wVjhlQ0RWTGZZemlveDdZQkE3K1FQTFg0SVJoRENTS3dJQ0FnQUJEQUlBQUFDZ2hnRUFBQUFBQUFNQUZWUmxjM1FnYVc1MFpXZHlZWFJwYjI0Z2JXVnRidz09JyxcbiAgICAgICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgICAgICBmZWVQYXllcjogJ0hVVkU1TmZKeUdmVTFkalpzVkxBNmZ4U1RTMUUyaVJxY1RSVk5DOUsyejdjJyxcbiAgICAgICAgICAgICAgbGFtcG9ydHNQZXJTaWduYXR1cmU6IDUwMDAsXG4gICAgICAgICAgICAgIG5vbmNlOiAnMjdFM01YRnZYTVVOWWVNSmVYMXBBYkVSR3NKZlVia2FaVGZnTWdwbU5ONWcnLFxuICAgICAgICAgICAgICBudW1TaWduYXR1cmVzOiAwLFxuICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNEYXRhOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ1RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tQWRkcmVzczogJ0hVVkU1TmZKeUdmVTFkalpzVkxBNmZ4U1RTMUUyaVJxY1RSVk5DOUsyejdjJyxcbiAgICAgICAgICAgICAgICAgICAgdG9BZGRyZXNzOiAnQ2hnSjV0Z0R3QlVzazlSTk1tMmlMaXdQOFJvZHdnWjZ1cXJDNXBhSnNYVlQnLFxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdNZW1vJyxcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBtZW1vOiAnVGVzdCBpbnRlZ3JhdGlvbiBtZW1vJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ01lbW8nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnVGVzdCBpbnRlZ3JhdGlvbiBtZW1vJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdDaGdKNXRnRHdCVXNrOVJOTW0yaUxpd1A4Um9kd2daNnVxckM1cGFKc1hWVCcsXG4gICAgICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uc29saWRhdGVJZDogJzEyMzQnLFxuICAgICAgICAgICAgY29uc29saWRhdGlvbkRldGFpbHM6IHtcbiAgICAgICAgICAgICAgc2VuZGVyQWRkcmVzc0luZGV4OiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH07XG4gICAgICAgIC8vIEJ1aWxkIGFuZCBzaWduIHRoZSB0cmFuc2FjdGlvblxuICAgICAgICBjb25zdCBwcmVCdWlsdFNpZ25lZFR4ID0gYXdhaXQgc29sV2FsbGV0LnByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKHR4UGFyYW1zKTtcbiAgICAgICAgcHJlQnVpbHRTaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBidWlsZCB0b2tlbiBlbmFibGVtZW50IHRyYW5zYWN0aW9ucyBjb3JyZWN0bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGVuYWJsZVRva2VuczogW3sgbmFtZTogJ3Rzb2w6dXNkYycgfSwgeyBuYW1lOiAndHNvbDpzcm0nIH0sIHsgbmFtZTogJ3Rzb2w6Z210JyB9XSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFJlcXVlc3ROb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7c29sV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgKVxuICAgICAgICAucmVwbHkoKHVybCwgYm9keSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvZHlQYXJhbXMgPSBib2R5IGFzIGFueTtcbiAgICAgICAgICBib2R5UGFyYW1zLmludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZW5hYmxlVG9rZW4nKTtcbiAgICAgICAgICBib2R5UGFyYW1zLmludGVudC5yZWNpcGllbnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAgICAgYm9keVBhcmFtcy5pbnRlbnQuZW5hYmxlVG9rZW5zLnNob3VsZC5kZWVwRXF1YWwocGFyYW1zLmVuYWJsZVRva2Vucyk7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDIwMCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2Zha2UgdHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICBmZWVJbmZvOiAnZmFrZSBmZWUgaW5mbycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgc29sV2FsbGV0LmJ1aWxkVG9rZW5FbmFibGVtZW50cyhwYXJhbXMpO1xuICAgICAgdHhSZXF1ZXN0Tm9jay5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBY2NlbGVyYXRlIFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdmYWlscyBpZiBhY2NlbGVyYXRpb24gaWRzIGFyZSBub3QgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7fSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwdHhpZHNfb3JfcmJmdHhpZHNfcmVxdWlyZWQnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIGNwZnBUeElkcyBpcyBub3QgYW4gYXJyYXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IHt9IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcHR4aWRzX25vdF9hcnJheScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgY3BmcFR4SWRzIGlzIG5vdCBvZiBsZW5ndGggMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFtdIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcHR4aWRzX25vdF9hcnJheScgfSk7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZDEnLCAnaWQyJ10gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcHR4aWRzX25vdF9hcnJheScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgY3BmcEZlZVJhdGUgaXMgbm90IHBhc3NlZCBhbmQgbmVpdGhlciBpcyBub0NwZnBGZWVSYXRlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZCddIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcGZlZXJhdGVfbm90X3NldCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgY3BmcEZlZVJhdGUgaXMgbm90IGFuIGludGVnZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQnXSwgY3BmcEZlZVJhdGU6ICdvbmUnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2NwZnBmZWVyYXRlX25vdF9ub25uZWdhdGl2ZV9pbnRlZ2VyJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBjcGZwRmVlUmF0ZSBpcyBuZWdhdGl2ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkJ10sIGNwZnBGZWVSYXRlOiAtMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwZmVlcmF0ZV9ub3Rfbm9ubmVnYXRpdmVfaW50ZWdlcicgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgbWF4RmVlIGlzIG5vdCBwYXNzZWQgYW5kIG5laXRoZXIgaXMgbm9NYXhGZWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZCddLCBub0NwZnBGZWVSYXRlOiB0cnVlIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ21heGZlZV9ub3Rfc2V0JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBtYXhGZWUgaXMgbm90IGFuIGludGVnZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQnXSwgbm9DcGZwRmVlUmF0ZTogdHJ1ZSwgbWF4RmVlOiAnb25lJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdtYXhmZWVfbm90X25vbm5lZ2F0aXZlX2ludGVnZXInIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIG1heEZlZSBpcyBuZWdhdGl2ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkJ10sIG5vQ3BmcEZlZVJhdGU6IHRydWUsIG1heEZlZTogLTEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnbWF4ZmVlX25vdF9ub25uZWdhdGl2ZV9pbnRlZ2VyJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBib3RoIHJiZlR4aWRzIGFuZCBjcGZwVHhpZHMgaXMgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQxJ10sIHJiZlR4SWRzOiBbJ2lkMiddIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2Nhbm5vdF9zcGVjaWZ5X2JvdGhfY3BmcF9hbmRfcmJmX3R4aWRzJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiByYmZUeElkcyBpcyBzZXQgYnV0IGZlZU11bHRpcGxpZXIgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgcmJmVHhJZHM6IFsnaWQnXSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdmZWVtdWx0aXBsaWVyX25vdF9zZXQnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIGZlZSBtdWx0aXBsaWVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyByYmZUeElkczogWydpZCddLCBmZWVNdWx0aXBsaWVyOiAxIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2ZlZW11bHRpcGxpZXJfZ3JlYXRlcl90aGFuX29uZScgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgcmJmVHhJZHM6IFsnaWQyJ10sIGZlZU11bHRpcGxpZXI6IDAuNSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdmZWVtdWx0aXBsaWVyX2dyZWF0ZXJfdGhhbl9vbmUnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3N1Ym1pdHMgYSB0cmFuc2FjdGlvbiB3aXRoIGFsbCBjcGZwIHNwZWNpZmljIHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGNwZnBUeElkczogWydpZCddLFxuICAgICAgICBjcGZwRmVlUmF0ZTogMSxcbiAgICAgICAgbWF4RmVlOiAxLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcHJlYnVpbGRSZXR1cm4gPSBPYmplY3QuYXNzaWduKHsgdHhIZXg6ICcxMjMnIH0sIHBhcmFtcyk7XG4gICAgICBjb25zdCBwcmVidWlsZFN0dWIgPSBzaW5vbi5zdHViKHdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMocHJlYnVpbGRSZXR1cm4pO1xuXG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2VuZGA7XG4gICAgICBub2NrKGJnVXJsKS5wb3N0KHBhdGgsIF8ubWF0Y2hlcyhwcmVidWlsZFJldHVybikpLnJlcGx5KDIwMCk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24ocGFyYW1zKTtcblxuICAgICAgcHJlYnVpbGRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgocGFyYW1zKTtcblxuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmFub3V0IGlucHV0IG1heE51bUlucHV0c1RvVXNlIGFuZCB1bnNwZW50cyB2ZXJpZmljYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnO1xuICAgIGNvbnN0IG1heE51bUlucHV0c1RvVXNlID0gMjtcbiAgICBjb25zdCB1bnNwZW50cyA9IFtcbiAgICAgICdjYzMwNTY1NzUwZTJhZWI4MTg2MjVhYWVkYWY4OWRiNWM2MTRlNTk3N2I5NjQ1Y2VlMWQ3Mjg5ZjYxNmZiMWQ4OjAnLFxuICAgICAgJzhjNDUxNjQ3ODdhOTU0YWIwNzg2NGFmOWIwNWIzNGZiZGUzYThlNDMwYThjNjViMGU2MGU0ZTU0M2Q4ZTFiNmM6MicsXG4gICAgXTtcbiAgICBsZXQgYmFzZWNvaW47XG4gICAgbGV0IHdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKTtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgfTtcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBtYXhOdW1JbnB1dHNUb1VzZSBwYXJhbWV0ZXIgd2hlbiBjYWxsaW5nIGZhbm91dCB1bnNwZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9mYW5vdXRVbnNwZW50c2A7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IG1heE51bUlucHV0c1RvVXNlIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuZmFub3V0VW5zcGVudHMoeyBhZGRyZXNzLCBtYXhOdW1JbnB1dHNUb1VzZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGhlIGZhbm91dFVuc3BlbnRzIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC9mYW5vdXRVbnNwZW50cyBhbmQgd2hldGhlciBtYXhOdW1JbnB1dHNUb1VzZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHVuc3BlbnRzIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgZmFub3V0IHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgdW5zcGVudHMgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5mYW5vdXRVbnNwZW50cyh7IGFkZHJlc3MsIHVuc3BlbnRzIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgZmFub3V0VW5zcGVudHMgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2Zhbm91dFVuc3BlbnRzIGFuZCB3aGV0aGVyIHVuc3BlbnRzIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG9ubHkgYnVpbGQgdHggKG5vdCBzaWduL3NlbmQpIHdoaWxlIGZhbm5pbmcgb3V0IHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybCkucG9zdChwYXRoLCBfLm1hdGNoZXMoeyB1bnNwZW50cyB9KSkucmVwbHkoMjAwKTtcblxuICAgICAgY29uc3QgdW51c2VkTm9ja3MgPSBub2NrKGJnVXJsKTtcbiAgICAgIHVudXNlZE5vY2tzLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L2tleS8ke3dhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDApO1xuICAgICAgdW51c2VkTm9ja3MucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYCkucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmZhbm91dFVuc3BlbnRzKHsgYWRkcmVzcywgdW5zcGVudHMgfSwgTWFuYWdlVW5zcGVudHNPcHRpb25zLkJVSUxEX09OTFkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgZmFub3V0VW5zcGVudHMgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2Zhbm91dFVuc3BlbnRzIGFuZCB3aGV0aGVyIHVuc3BlbnRzIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB1bnVzZWROb2Nrcy5wZW5kaW5nTW9ja3MoKS5sZW5ndGguc2hvdWxkLmVxbCgyKTtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcm91dGUgY3VzdG9kaWFsIGZhbm91dFVuc3BlbnRzIHRocm91Z2ggdHgvaW5pdGlhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjdXN0b2RpYWxCYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKTtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbFdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICB0eXBlOiAnY3VzdG9kaWFsJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBjdXN0b2RpYWxXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBjdXN0b2RpYWxCYXNlY29pbiwgY3VzdG9kaWFsV2FsbGV0RGF0YSk7XG5cbiAgICAgIGNvbnN0IGluaXRpYXRlUGF0aCA9IGAvYXBpL3YyLyR7Y3VzdG9kaWFsV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7Y3VzdG9kaWFsV2FsbGV0LmlkKCl9L3R4L2luaXRpYXRlYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoaW5pdGlhdGVQYXRoLCBfLm1hdGNoZXMoeyB0eXBlOiAnZmFub3V0JyB9KSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdhY2NlcHRlZCcsIHR4UmVxdWVzdElkOiAnbW9jay10eC1yZXF1ZXN0LWlkJyB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3VzdG9kaWFsV2FsbGV0LmZhbm91dFVuc3BlbnRzKHsgbnVtVW5zcGVudHNUb01ha2U6IDEwIH0pO1xuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIChyZXN1bHQgYXMgYW55KS5zdGF0dXMuc2hvdWxkLmVxdWFsKCdhY2NlcHRlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ3VzdG9keSBzQlRDIGJyaWRnaW5nL3dpdGhkcmF3IHBhcmFtcyBwYXNzLXRocm91Z2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnJpZGdpbmdQYXJhbXMgPSB7XG4gICAgICBzYnRjOiB7XG4gICAgICAgIGFtb3VudDogMTAwMDAwLFxuICAgICAgICBzdGFja3NSZWNpcGllbnQ6ICdTUDJKNlpZNDhHVjFFWjVWMlY1UkI5TVA2NlNXODZQWUtLTlJWOUVKNycsXG4gICAgICAgIG1heEZlZTogNTAwMCxcbiAgICAgICAgbG9ja1RpbWU6IDE0NCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBzYnRjV2l0aGRyYXdQYXJhbXMgPSB7XG4gICAgICBhbW91bnQ6ICcxMDAwMDAnLFxuICAgICAgYnRjQWRkcmVzczogJzJOOUVnbzlLaWRpWlI4dE1QODJnNlJhZ2dRdGNiUjl6TnpIJyxcbiAgICAgIG1heEZlZTogJzUwMDAnLFxuICAgIH07XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGJyaWRnaW5nUGFyYW1zIHRocm91Z2ggc2VuZE1hbnkgdG8gdHgvaW5pdGlhdGUgZm9yIGN1c3RvZGlhbCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VzdG9kaWFsV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGJ0YycpLCB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICB0eXBlOiAnY3VzdG9kaWFsJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpbml0aWF0ZVBhdGggPSBgL2FwaS92Mi8ke2N1c3RvZGlhbFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2N1c3RvZGlhbFdhbGxldC5pZCgpfS90eC9pbml0aWF0ZWA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGluaXRpYXRlUGF0aCwgXy5tYXRjaGVzKHsgdHlwZTogJ2JyaWRnaW5nJywgYnJpZGdpbmdQYXJhbXMgfSkpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnYWNjZXB0ZWQnLCB0eFJlcXVlc3RJZDogJ21vY2stdHgtcmVxdWVzdC1pZCcgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGN1c3RvZGlhbFdhbGxldC5zZW5kTWFueSh7IHR5cGU6ICdicmlkZ2luZycsIGJyaWRnaW5nUGFyYW1zIH0pO1xuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIChyZXN1bHQgYXMgYW55KS5zdGF0dXMuc2hvdWxkLmVxdWFsKCdhY2NlcHRlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHNidGNXaXRoZHJhd1BhcmFtcyB0aHJvdWdoIHNlbmRNYW55IHRvIHR4L2luaXRpYXRlIGZvciBjdXN0b2RpYWwgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RidGMnKSwge1xuICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYScsXG4gICAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgICAgdHlwZTogJ2N1c3RvZGlhbCcsXG4gICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaW5pdGlhdGVQYXRoID0gYC9hcGkvdjIvJHtjdXN0b2RpYWxXYWxsZXQuY29pbigpfS93YWxsZXQvJHtjdXN0b2RpYWxXYWxsZXQuaWQoKX0vdHgvaW5pdGlhdGVgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChpbml0aWF0ZVBhdGgsIF8ubWF0Y2hlcyh7IHNidGNXaXRoZHJhd1BhcmFtcyB9KSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdhY2NlcHRlZCcsIHR4UmVxdWVzdElkOiAnbW9jay10eC1yZXF1ZXN0LWlkJyB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3VzdG9kaWFsV2FsbGV0LnNlbmRNYW55KHsgc2J0Y1dpdGhkcmF3UGFyYW1zIH0gYXMgYW55KTtcbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAocmVzdWx0IGFzIGFueSkuc3RhdHVzLnNob3VsZC5lcXVhbCgnYWNjZXB0ZWQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIHByZWJ1aWxkcycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZXRoV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBldGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0ZXRoJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcmVxSWQgaWYgaXQgd2FzIHBhc3NlZCBpbiB0aGUgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBvZmZsaW5lVmVyaWZpY2F0aW9uOiB0cnVlIH07XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMpXG4gICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IC4uLnBhcmFtcywgcmVxSWQ6IHJlcUlkIH0pO1xuICAgICAgdHhSZXF1ZXN0LnJlcUlkPy5zaG91bGQuY29udGFpbkVxbChyZXFJZCk7XG4gICAgICBzY29wZS5kb25lKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3Mgb2ZmbGluZVZlcmlmaWNhdGlvbj10cnVlIHF1ZXJ5IHBhcmFtIGlmIHBhc3NlZCB0cnV0aHkgdmFsdWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IG9mZmxpbmVWZXJpZmljYXRpb246IHRydWUgfTtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgLCB0YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcylcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHQgPSAxMDA7XG4gICAgICBjb25zdCBibG9ja0hlaWdodFN0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAnZ2V0TGF0ZXN0QmxvY2tIZWlnaHQnKS5yZXNvbHZlcyhibG9ja0hlaWdodCk7XG4gICAgICBjb25zdCBwb3N0UHJvY2Vzc1N0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICBibG9ja0hlaWdodFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIHNjb3BlLmRvbmUoKTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5yZXN0b3JlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgcGFzcyB0aGUgb2ZmbGluZVZlcmlmaWNhdGlvbiBxdWVyeSBwYXJhbSBpZiBwYXNzZWQgYSBmYWxzZXkgdmFsdWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IG9mZmxpbmVWZXJpZmljYXRpb246IGZhbHNlIH07XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGAsIHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zKVxuICAgICAgICAucXVlcnkoe30pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIucmVzdG9yZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBzY3JpcHQgb3V0cHV0cyB3aXRoIHRoZSBwcm9wZXIgc3RydWN0dXJlIHRvIHdhbGxldCBwbGF0Zm9ybScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9ICc2YTExMjIzMzQ0NTU2Njc3ODg5OTAwJztcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwge1xuICAgICAgICAgIC4uLnRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IHNjcmlwdCwgYW1vdW50OiAxZTYgfV0sXG4gICAgICAgIH0pXG4gICAgICAgIC5xdWVyeSh7fSlcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCBibG9ja0hlaWdodCA9IDEwMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKGJsb2NrSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHBvc3RQcm9jZXNzU3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdwb3N0UHJvY2Vzc1ByZWJ1aWxkJykucmVzb2x2ZXMoe30pO1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBgc2NyaXB0UHViS2V5OiR7c2NyaXB0fWAsIGFtb3VudDogMWU2IH1dIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHsgLi4udGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMsIHJlY2lwaWVudHM6IFt7IHNjcmlwdCwgYW1vdW50OiAxZTYgfV0gfSxcbiAgICAgIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlYnVpbGQgc2hvdWxkIGNhbGwgYnVpbGQgYW5kIGdldExhdGVzdEJsb2NrSGVpZ2h0IGZvciB1dHhvIGNvaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGAsIHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zKVxuICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBjb25zdCBibG9ja0hlaWdodCA9IDEwMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKGJsb2NrSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHBvc3RQcm9jZXNzU3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdwb3N0UHJvY2Vzc1ByZWJ1aWxkJykucmVzb2x2ZXMoe30pO1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2UoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2VXaXRoKHtcbiAgICAgICAgYmxvY2tIZWlnaHQ6IDEwMCxcbiAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgIGJ1aWxkUGFyYW1zOiB0YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlYnVpbGQgc2hvdWxkIG5vdCBoYXZlIGNoYW5nZUFkZHJlc3NUeXBlIGFycmF5IGluIHBvc3QgYm9keSB3aGVuIGNoYW5nZUFkZHJlc3NUeXBlIGlzIGRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBlY3RlZEJ1aWxkUG9zdEJvZHlQYXJhbXMgPSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlOiAncDJ0ck11c2lnMicsXG4gICAgICAgIHR4Rm9ybWF0OiAncHNidCcsXG4gICAgICB9O1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGAsIGV4cGVjdGVkQnVpbGRQb3N0Qm9keVBhcmFtcylcbiAgICAgICAgLnF1ZXJ5KHt9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBjb25zdCBibG9ja0hlaWdodCA9IDEwMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKGJsb2NrSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHBvc3RQcm9jZXNzU3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdwb3N0UHJvY2Vzc1ByZWJ1aWxkJykucmVzb2x2ZXMoe30pO1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyBjaGFuZ2VBZGRyZXNzVHlwZTogJ3AydHJNdXNpZzInIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IGV4cGVjdGVkQnVpbGRQb3N0Qm9keVBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgYnJpZGdpbmdQYXJhbXMgdG8gdHgvYnVpbGQgZm9yIG5vbi1UU1MgQlRDIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJyaWRnaW5nUGFyYW1zID0ge1xuICAgICAgICBzYnRjOiB7XG4gICAgICAgICAgYW1vdW50OiAxMDAwMDAsXG4gICAgICAgICAgc3RhY2tzUmVjaXBpZW50OiAnU1AySjZaWTQ4R1YxRVo1VjJWNVJCOU1QNjZTVzg2UFlLS05SVjlFSjcnLFxuICAgICAgICAgIG1heEZlZTogNTAwMCxcbiAgICAgICAgICBsb2NrVGltZTogMTQ0LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQnVpbGRQYXJhbXMgPSB7XG4gICAgICAgIHR5cGU6ICdicmlkZ2luZycsXG4gICAgICAgIHR4Rm9ybWF0OiAncHNidCcsXG4gICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICBicmlkZ2luZ1BhcmFtcyxcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGU6IFsncDJ0ck11c2lnMicsICdwMndzaCcsICdwMnNoUDJ3c2gnLCAncDJzaCcsICdwMnRyJ10sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgZXhwZWN0ZWRCdWlsZFBhcmFtcylcbiAgICAgICAgLnF1ZXJ5KHt9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBjb25zdCBibG9ja0hlaWdodFN0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAnZ2V0TGF0ZXN0QmxvY2tIZWlnaHQnKS5yZXNvbHZlcygxMDApO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIHR5cGU6ICdicmlkZ2luZycsXG4gICAgICAgIHR4Rm9ybWF0OiAncHNidCcsXG4gICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICBicmlkZ2luZ1BhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IGV4cGVjdGVkQnVpbGRQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIHNjb3BlLmRvbmUoKTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5yZXN0b3JlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGJyaWRnaW5nUGFyYW1zIGlzIG1pc3NpbmcgZm9yIGJyaWRnaW5nIHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR5cGU6ICdicmlkZ2luZycsXG4gICAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXCInYnJpZGdpbmdQYXJhbXMnIGlzIHJlcXVpcmVkIGZvciBicmlkZ2luZyBpbnRlbnRcIik7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlYnVpbGQgc2hvdWxkIGNhbGwgYnVpbGQgYnV0IG5vdCBnZXRMYXRlc3RCbG9ja0hlaWdodCBmb3IgYWNjb3VudCBjb2lucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIFsndHhycCcsICd0eGxtJywgJ3RldGgnXS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChjb2luKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRjb2luID0gYml0Z28uY29pbihjb2luKTtcbiAgICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIxYScsXG4gICAgICAgICAgY29pbixcbiAgICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhY2NvdW50V2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYWNjb3VudGNvaW4sIHdhbGxldERhdGEpO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAucG9zdChgL2FwaS92Mi8ke2FjY291bnRXYWxsZXQuY29pbigpfS93YWxsZXQvJHthY2NvdW50V2FsbGV0LmlkKCl9L3R4L2J1aWxkYClcbiAgICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihhY2NvdW50Y29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICAgIGF3YWl0IGFjY291bnRXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgICAgd2FsbGV0OiBhY2NvdW50V2FsbGV0LFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7fSxcbiAgICAgICAgfSk7XG4gICAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBpc0JhdGNoID0gdHJ1ZSBpbiB0aGUgdHhQcmVidWlsZCBpZiB0eFBhcmFtcyBoYXMgbW9yZSB0aGFuIG9uZSByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHsgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6IGFkZHJlc3MxIH0sXG4gICAgICAgICAgeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwJywgYWRkcmVzczogYWRkcmVzczIgfSxcbiAgICAgICAgXSxcbiAgICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ21vb24nLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdG90YWxBbW91bnQgPSAnMjAwMDAwMDAwMDAwMDAwMCc7XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KFxuICAgICAgICAgIGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L3R4L2J1aWxkYCxcbiAgICAgICAgICBfLm1hdGNoZXMoeyByZWNpcGllbnRzOiB0eFBhcmFtcy5yZWNpcGllbnRzIH0pXG4gICAgICAgIClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJzB4YzBhYWYyNjQ5ZTdiMGYzOTUwMTY0NjgxZWNhMmIxYThmNjU0YTQ3OCcsXG4gICAgICAgICAgICAgIGFtb3VudDogJzIwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgICBkYXRhOiAnMHhjMDBjNGU5ZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4ZDdlYTRjNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOGQ3ZWE0YzY4MDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAxMDg5NixcbiAgICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgICBpc0JhdGNoOiB0cnVlLFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCBldGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih0eFBhcmFtcyk7XG4gICAgICB0eFByZWJ1aWxkLmlzQmF0Y2guc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgdHhQcmVidWlsZC5yZWNpcGllbnRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAoYml0Z28uY29pbigndGV0aCcpIGFzIGFueSkuc3RhdGljc0NvaW4ubmV0d29yay5iYXRjaGVyQ29udHJhY3RBZGRyZXNzXG4gICAgICApO1xuICAgICAgdHhQcmVidWlsZC5yZWNpcGllbnRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwodG90YWxBbW91bnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGlzQmF0Y2ggPSBmYWxzZSBhbmQgaG9wVHJhbnNhY3Rpb24gZmllbGQgc2hvdWxkIG5vdCBiZSB0aGVyZSBpbiB0aGUgdHhQcmVidWlsZCAgZm9yIG5vcm1hbCBldGggdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6IGFkZHJlc3MxIH1dLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnbW9vbicsXG4gICAgICB9O1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChcbiAgICAgICAgICBgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS90eC9idWlsZGAsXG4gICAgICAgICAgXy5tYXRjaGVzKHsgcmVjaXBpZW50czogdHhQYXJhbXMucmVjaXBpZW50cyB9KVxuICAgICAgICApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgICBhZGRyZXNzOiAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAxMDg5NyxcbiAgICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgICBpc0JhdGNoOiBmYWxzZSxcbiAgICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgZXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24odHhQYXJhbXMpO1xuICAgICAgdHhQcmVidWlsZC5pc0JhdGNoLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICB0eFByZWJ1aWxkLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnaG9wVHJhbnNhY3Rpb24nKTtcbiAgICAgIHR4UHJlYnVpbGQucmVjaXBpZW50c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChhZGRyZXNzMSk7XG4gICAgICB0eFByZWJ1aWxkLnJlY2lwaWVudHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGlzVGVzdFRyYW5zYWN0aW9uIHBhcmFtZXRlciB0aHJvdWdoIGZvciBtdWx0aXNpZyB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdhYWEnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGlzVGVzdFRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMsIGlzVGVzdFRyYW5zYWN0aW9uIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzLCBpc1Rlc3RUcmFuc2FjdGlvbiB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGhlIHByZWJ1aWxkVHJhbnNhY3Rpb24gbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL3R4L2J1aWxkIGFuZCB3aGV0aGVyIGlzVGVzdFRyYW5zYWN0aW9uIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgdW5zcGVudCByZXNlcnZhdGlvbiBwYXJhbWV0ZXIgdGhyb3VnaCB3aGVuIGJ1aWxkaW5nIHRyYW5zYWN0aW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc2VydmF0aW9uID0ge1xuICAgICAgICBleHBpcmVUaW1lOiAnMjAyOS0wOC0xMicsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdhYWEnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMsIHJlc2VydmF0aW9uIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzLCByZXNlcnZhdGlvbiB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGhlIHByZWJ1aWxkVHJhbnNhY3Rpb24gbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL3R4L2J1aWxkIGFuZCB3aGV0aGVyIHJlc2VydmF0aW9uIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgZ2FzIGxpbWl0IHBhcmFtZXRlciB0aHJvdWdoIHdoZW4gYnVpbGRpbmcgdHJhbnNhY3Rpb24gZm9yIHN1aScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgZ2FzTGltaXQ6IDEwMCB9O1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHBhcmFtcykpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgcHJlYnVpbGRUcmFuc2FjdGlvbiBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgcmVzZXJ2YXRpb24gaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ01heGltdW0gU3BlbmRhYmxlJywgZnVuY3Rpb24gbWF4aW11bVNwZW5kYWJsZSgpIHtcbiAgICBsZXQgYmdVcmw7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5wZW5kaW5nTW9ja3MoKS5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0udXJpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FyZ3VtZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9wdGlvbmFsUGFyYW1zID0ge1xuICAgICAgICBsaW1pdDogMjUsXG4gICAgICAgIG1pblZhbHVlOiAnMCcsXG4gICAgICAgIG1heFZhbHVlOiAnOTk5OTk5OTk5OTk5OScsXG4gICAgICAgIG1pbkhlaWdodDogMCxcbiAgICAgICAgbWluQ29uZmlybXM6IDIsXG4gICAgICAgIGVuZm9yY2VNaW5Db25maXJtc0ZvckNoYW5nZTogZmFsc2UsXG4gICAgICAgIGZlZVJhdGU6IDEwMDAwLFxuICAgICAgICBtYXhGZWVSYXRlOiAxMDAwMDAsXG4gICAgICAgIHJlY2lwaWVudEFkZHJlc3M6ICcyTkNVRkRMaVV6OUNWbm1kVnFRZTlhY1Zvbm9NODllNzZkZicsXG4gICAgICB9O1xuXG4gICAgICAvLyBUaGUgYWN0dWFsIGFwaSByZXF1ZXN0IHdpbGwgb25seSBzZW5kIHN0cmluZ3MsIGJ1dCB0aGUgU0RLIGZ1bmN0aW9uIGV4cGVjdHMgbnVtYmVycyBmb3Igc29tZSB2YWx1ZXNcbiAgICAgIGNvbnN0IGFwaVBhcmFtcyA9IF8ubWFwVmFsdWVzKG9wdGlvbmFsUGFyYW1zLCAocGFyYW0pID0+IFN0cmluZyhwYXJhbSkpO1xuXG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vbWF4aW11bVNwZW5kYWJsZWA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQocGF0aClcbiAgICAgICAgLnF1ZXJ5KF8ubWF0Y2hlcyhhcGlQYXJhbXMpKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBjb2luOiAndGJjaCcsXG4gICAgICAgICAgbWF4aW11bVNwZW5kYWJsZTogNjUwMDAsXG4gICAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQubWF4aW11bVNwZW5kYWJsZShvcHRpb25hbFBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdXYWxsZXQgU2hhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNoYXJlIHRvIGNvbGQgd2FsbGV0IHdpdGhvdXQgcGFzc2luZyBza2lwS2V5Y2hhaW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VySWQgPSAnMTIzJztcbiAgICAgIGNvbnN0IGVtYWlsID0gJ3NoYXJldG9Ac2RrdGVzdC5jb20nO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSAndmlldyxzcGVuZCc7XG5cbiAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybCkucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pLnJlcGx5KDIwMCwgeyB1c2VySWQgfSk7XG5cbiAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7Y29sZFdhbGxldC5rZXlJZHMoKVswXX1gKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSlcbiAgICAgICAgLmdldChgL2FwaS92Mi90YnRjL2tleS8ke2NvbGRXYWxsZXQua2V5SWRzKClbMV19YClcbiAgICAgICAgLnJlcGx5KDIwMCwge30pXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHtjb2xkV2FsbGV0LmtleUlkcygpWzJdfWApXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgY29uc3QgY3JlYXRlU2hhcmVOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvdGJ0Yy93YWxsZXQvJHtjb2xkV2FsbGV0LmlkKCl9L3NoYXJlYCwge1xuICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICBza2lwS2V5Y2hhaW46IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgY29sZFdhbGxldC5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucyB9KTtcblxuICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgIGdldEtleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hvdCBXYWxsZXQgU2hhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgIGNvbnN0IHRvS2V5Y2hhaW4gPSB1dHhvTGliLmJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCdkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyJywgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHBhdGggPSAnbS85OTk5OTkvMS8xJztcbiAgICAgIGNvbnN0IHB1YmtleSA9IHRvS2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdiaXRnbzEyMzQnO1xuICAgICAgY29uc3QgcHViID0gJ1pvMWdnelRVS01ZNWJZbkR2VDVtdFZlWnh6ZjJGYUxUYktrbXZHVWhVUWsnO1xuXG4gICAgICBjb25zdCBsaWdodG5pbmdDb2luOiBhbnkgPSBiaXRnby5jb2luKCd0bG5idGMnKTtcbiAgICAgIGNvbnN0IGxpZ2h0bmluZ1dhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDEnLFxuICAgICAgICBjb2luOiAndGxuYnRjJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwMSddLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHsga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzcwMDAwMDAwMCddIH0sXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpZ2h0bmluZ1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGxpZ2h0bmluZ0NvaW4sIGxpZ2h0bmluZ1dhbGxldERhdGEpO1xuXG4gICAgICBmb3IgKGNvbnN0IGhvdFdhbGxldCBvZiBbd2FsbGV0LCBsaWdodG5pbmdXYWxsZXRdIGFzIGNvbnN0KSB7XG4gICAgICAgIGl0KGBzaG91bGQgdXNlIGtleWNoYWluIHB1YiB0byBzaGFyZSAke2hvdFdhbGxldC5jb2luKCl9IGhvdCB3YWxsZXRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleSwgcGF0aCB9KTtcblxuICAgICAgICAgIGNvbnN0IGdldEtleU5vY2tzOiBub2NrLlNjb3BlW10gPSBbXTtcbiAgICAgICAgICBpZiAoaG90V2FsbGV0LmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnbG5idGMnKSB7XG4gICAgICAgICAgICBjb25zdCBlbmNYcHJ2MCA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYwJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmNYcHJ2MSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYxJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRQcnZzID0gW2VuY1hwcnYwLCBlbmNYcHJ2MV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBrZXlJZCA9IGxpZ2h0bmluZ1dhbGxldERhdGEuY29pblNwZWNpZmljLmtleXNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAgIC5nZXQoYC9hcGkvdjIvdGxuYnRjL2tleS8ke2tleUlkfWApXG4gICAgICAgICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgICAgICAgaWQ6IGtleUlkLFxuICAgICAgICAgICAgICAgICAgcHViOiBpID09PSAwID8gcHViIDogJ1pvMWdnelRVS01ZNWJZbkR2VDVtdFZlWnh6ZjJGYUxUYktrbXZHVWhVUW0nLFxuICAgICAgICAgICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY3J5cHRlZFBydnNbaV0sXG4gICAgICAgICAgICAgICAgICBjb2luU3BlY2lmaWM6XG4gICAgICAgICAgICAgICAgICAgIGkgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICA/IHsgW2hvdFdhbGxldC5iYXNlQ29pbi5nZXRDaGFpbigpXTogeyBwdXJwb3NlOiAndXNlckF1dGgnIH0gfVxuICAgICAgICAgICAgICAgICAgICAgIDogeyBbaG90V2FsbGV0LmJhc2VDb2luLmdldENoYWluKCldOiB7IHB1cnBvc2U6ICdub2RlQXV0aCcgfSB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBnZXRLZXlOb2Nrcy5wdXNoKGdldEtleU5vY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbmNYcHJ2MSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYxJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgICAgICBjb25zdCBnZXRLZXlOb2NrID0gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgICBpZDogd2FsbGV0LmtleUlkcygpWzBdLFxuICAgICAgICAgICAgICBwdWIsXG4gICAgICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY1hwcnYxLFxuICAgICAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnZXRLZXlOb2Nrcy5wdXNoKGdldEtleU5vY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKGhvdFdhbGxldCwgJ2NyZWF0ZVNoYXJlJykuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgb3B0aW9ucyEua2V5Y2hhaW4hLnB1YiEuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEucHViIS5zaG91bGQuZXF1YWwocHViKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgaG90V2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgICAgc3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICBnZXRLZXlOb2Nrcy5ldmVyeSgodikgPT4gdi5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3ZpZGUgc2tpcEtleWNoYWluIHRvIHdhbGxldCBzaGFyZSBhcGkgZm9yIGhvdCB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VySWQgPSAnMTIzJztcbiAgICAgIGNvbnN0IGVtYWlsID0gJ3NoYXJldG9Ac2RrdGVzdC5jb20nO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSAndmlldyxzcGVuZCc7XG4gICAgICBjb25zdCB0b0tleWNoYWluID0gdXR4b0xpYi5iaXAzMi5mcm9tU2VlZChCdWZmZXIuZnJvbSgnZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMicsICdoZXgnKSk7XG4gICAgICBjb25zdCBwYXRoID0gJ20vOTk5OTk5LzEvMSc7XG4gICAgICBjb25zdCBwdWJrZXkgPSB0b0tleWNoYWluLmRlcml2ZVBhdGgocGF0aCkucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHsgdXNlcklkLCBwdWJrZXksIHBhdGggfSk7XG4gICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi90YnRjL3dhbGxldC8ke3dhbGxldC5pZCgpfS9zaGFyZWAsIHtcbiAgICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgc2tpcEtleWNoYWluOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucywgc2tpcEtleWNoYWluOiB0cnVlIH0pO1xuXG4gICAgICBjcmVhdGVTaGFyZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgIGdldFNoYXJpbmdLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlY3J5cHQgd2ViYXV0aG4gZW5jcnlwdGVkUHJ2IGZvciB3YWxsZXQgc2hhcmUgKHNwZW5kKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgIGNvbnN0IHRvS2V5Y2hhaW4gPSB1dHhvTGliLmJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCdkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyJywgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHBhdGggPSAnbS85OTk5OTkvMS8xJztcbiAgICAgIGNvbnN0IHB1YmtleSA9IHRvS2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgcHJpdmF0ZUtleSA9ICd4cHJ2MSc7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlMSA9ICdiaXRnbzEyMzQnO1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZTIgPSAnYml0Z281Njc4JztcblxuICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHsgdXNlcklkLCBwdWJrZXksIHBhdGggfSk7XG5cbiAgICAgIGNvbnN0IHB1YiA9ICdabzFnZ3pUVUtNWTViWW5EdlQ1bXRWZVp4emYyRmFMVGJLa212R1VoVVFrJztcbiAgICAgIGNvbnN0IGVuY1BydjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHByaXZhdGVLZXksIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlMSB9KTtcbiAgICAgIGNvbnN0IGVuY1BydjIgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHByaXZhdGVLZXksIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlMiB9KTtcbiAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogd2FsbGV0LmtleUlkcygpWzBdLFxuICAgICAgICAgIHB1YixcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY1BydjEsXG4gICAgICAgICAgd2ViYXV0aG5EZXZpY2VzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG90cERldmljZUlkOiAnMTIzJyxcbiAgICAgICAgICAgICAgYXV0aGVudGljYXRvckluZm86IHtcbiAgICAgICAgICAgICAgICBjcmVkSUQ6ICdjcmVkSUQnLFxuICAgICAgICAgICAgICAgIGZtdDogJ3BhY2tlZCcsXG4gICAgICAgICAgICAgICAgcHVibGljS2V5OiAnc29tZSB2YWx1ZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHByZlNhbHQ6ICc0NTYnLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY1BydjIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKHdhbGxldCwgJ2NyZWF0ZVNoYXJlJykuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIG9wdGlvbnMhLmtleWNoYWluIS5lbmNyeXB0ZWRQcnYhLnNob3VsZC5ub3QuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHdhbGxldC5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucywgd2FsbGV0UGFzc3BocmFzZTogd2FsbGV0UGFzc3BocmFzZTIgfSk7XG4gICAgICBzdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGdldFNoYXJpbmdLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICBnZXRLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT0ZDIG11bHRpLWtleS11c2VyLUtleSBXYWxsZXQgU2hhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgIGxldCBvZmNXYWxsZXQ6IFdhbGxldDtcbiAgICAgIGxldCBvZmNNdWx0aVVzZXJLZXlXYWxsZXQ6IFdhbGxldDtcbiAgICAgIGxldCBub25NdWx0aVVzZXJLZXlXYWxsZXQ6IFdhbGxldDtcblxuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgb2ZjQ29pbiA9IGJpdGdvLmNvaW4oJ29mYycpO1xuXG4gICAgICAgIC8vIFJlZ3VsYXIgT0ZDIHdhbGxldCB3aXRob3V0IG11bHRpLWtleS11c2VyLWtleSBmZWF0dXJlXG4gICAgICAgIGNvbnN0IHJlZ3VsYXJPZmNXYWxsZXREYXRhID0ge1xuICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMGMwMDAwMDAwMCcsXG4gICAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE4MTAwMDAwMDAwJyxcbiAgICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxODIwMDAwMDAwMCcsXG4gICAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTgzMDAwMDAwMDAnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICAgIG9mY1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIHJlZ3VsYXJPZmNXYWxsZXREYXRhKTtcblxuICAgICAgICAvLyBPRkMgd2FsbGV0IHdpdGggbXVsdGkta2V5LXVzZXIta2V5IGZlYXR1cmVcbiAgICAgICAgY29uc3QgbXVsdGlVc2VyS2V5V2FsbGV0RGF0YSA9IHtcbiAgICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDBkMDAwMDAwMDAnLFxuICAgICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTg0MDAwMDAwMDAnXSxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIGZlYXR1cmVzOiBbJ211bHRpLWtleS11c2VyLWtleSddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgIH0gYXMgYW55O1xuICAgICAgICBvZmNNdWx0aVVzZXJLZXlXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBvZmNDb2luLCBtdWx0aVVzZXJLZXlXYWxsZXREYXRhKTtcblxuICAgICAgICAvLyBOb24tbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdGVzdHNcbiAgICAgICAgY29uc3Qgbm9uTXVsdGlVc2VyS2V5V2FsbGV0RGF0YSA9IHtcbiAgICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAzJyxcbiAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAyJ10sXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgfTtcbiAgICAgICAgbm9uTXVsdGlVc2VyS2V5V2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwgbm9uTXVsdGlVc2VyS2V5V2FsbGV0RGF0YSk7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2NyZWF0ZVNoYXJlIG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ211bHRpLWtleS11c2VyLWtleSB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgZXhjbHVkZSBrZXljaGFpbiBwcm9wZXJ0eSBmcm9tIEFQSSByZXF1ZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdChgL2FwaS92Mi9vZmMvd2FsbGV0LyR7b2ZjTXVsdGlVc2VyS2V5V2FsbGV0LmlkKCl9L3NoYXJlYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nKTtcbiAgICAgICAgICAgICAgICBib2R5LnVzZXIuc2hvdWxkLmVxdWFsKHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgYm9keS5wZXJtaXNzaW9ucy5zaG91bGQuZXF1YWwocGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY011bHRpVXNlcktleVdhbGxldC5jcmVhdGVTaGFyZShjcmVhdGVTaGFyZVBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG5vbi1lbXB0eSBrZXljaGFpbiBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlUGFyYW1zID0ge1xuICAgICAgICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGWERjV0Qydnh1ZWJjVDFacFRGNFZrZTZxbU1XOHl6ZGR3TllwQVBqdllFRUw1akxmeVlYVzJmdXh0QXhZOFRnalBVSkxjZjFDOHF6OU42VmdaeEFyS1g0RXdCOHJINScsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkJyxcbiAgICAgICAgICAgICAgICBmcm9tUHViS2V5OiAnZnJvbVB1YicsXG4gICAgICAgICAgICAgICAgdG9QdWJLZXk6ICd0b1B1YicsXG4gICAgICAgICAgICAgICAgcGF0aDogJ20vOTk5OTk5LzEvMScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBhd2FpdCBvZmNNdWx0aVVzZXJLZXlXYWxsZXRcbiAgICAgICAgICAgICAgLmNyZWF0ZVNoYXJlKGNyZWF0ZVNoYXJlUGFyYW1zKVxuICAgICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gcHJvcGVydHkgbXVzdCBub3QgYmUgcHJvdmlkZWQgZm9yIG11bHRpLWtleS11c2VyLWtleSB3YWxsZXRzJyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIG9taXQga2V5Y2hhaW4gZnJvbSByZXF1ZXN0IGV2ZW4gd2hlbiBlbXB0eSBvYmplY3QgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAga2V5Y2hhaW46IHt9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvb2ZjL3dhbGxldC8ke29mY011bHRpVXNlcktleVdhbGxldC5pZCgpfS9zaGFyZWAsIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2tleWNoYWluJyk7XG4gICAgICAgICAgICAgICAgYm9keS51c2VyLnNob3VsZC5lcXVhbCh1c2VySWQpO1xuICAgICAgICAgICAgICAgIGJvZHkucGVybWlzc2lvbnMuc2hvdWxkLmVxdWFsKHBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICAgICAgICBhd2FpdCBvZmNNdWx0aVVzZXJLZXlXYWxsZXQuY3JlYXRlU2hhcmUoY3JlYXRlU2hhcmVQYXJhbXMpO1xuXG4gICAgICAgICAgICBjcmVhdGVTaGFyZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ25vbi1tdWx0aS1rZXktdXNlci1rZXkgd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIGluY2x1ZGUga2V5Y2hhaW4gcHJvcGVydHkgaW4gQVBJIHJlcXVlc3Qgd2hlbiBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlUGFyYW1zID0ge1xuICAgICAgICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGWERjV0Qydnh1ZWJjVDFacFRGNFZrZTZxbU1XOHl6ZGR3TllwQVBqdllFRUw1akxmeVlYVzJmdXh0QXhZOFRnalBVSkxjZjFDOHF6OU42VmdaeEFyS1g0RXdCOHJINScsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkJyxcbiAgICAgICAgICAgICAgICBmcm9tUHViS2V5OiAnZnJvbVB1YicsXG4gICAgICAgICAgICAgICAgdG9QdWJLZXk6ICd0b1B1YicsXG4gICAgICAgICAgICAgICAgcGF0aDogJ20vOTk5OTk5LzEvMScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdChgL2FwaS92Mi9vZmMvd2FsbGV0LyR7b2ZjV2FsbGV0LmlkKCl9L3NoYXJlYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5oYXZlLnByb3BlcnR5KCdrZXljaGFpbicpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Zyb21QdWJLZXknKTtcbiAgICAgICAgICAgICAgICBib2R5LmtleWNoYWluLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0b1B1YktleScpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BhdGgnKTtcbiAgICAgICAgICAgICAgICBib2R5LnVzZXIuc2hvdWxkLmVxdWFsKHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgYm9keS5wZXJtaXNzaW9ucy5zaG91bGQuZXF1YWwocGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY1dhbGxldC5jcmVhdGVTaGFyZShjcmVhdGVTaGFyZVBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnc2hhcmVXYWxsZXQgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIGtleWNoYWluIHByZXBhcmF0aW9uIGFuZCBzZXQgc2tpcEtleWNoYWluPXRydWUgaW4gQVBJIHJlcXVlc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRTaGFyaW5nS2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleTogJ3Rlc3RwdWJrZXknLCBwYXRoOiAnbS85OTk5OTkvMS8xJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvb2ZjL3dhbGxldC8ke29mY011bHRpVXNlcktleVdhbGxldC5pZCgpfS9zaGFyZWAsIGZ1bmN0aW9uIChib2R5KSB7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2tpcEtleWNoYWluJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2tleWNoYWluJyk7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndXNlcicsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGVybWlzc2lvbnMnLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgICAgICAgLy8gU3R1YiBwcmVwYXJlU2hhcmVkS2V5Y2hhaW4gdG8gZW5zdXJlIGl0J3Mgbm90IGNhbGxlZFxuICAgICAgICAgICAgY29uc3QgcHJlcGFyZVNoYXJlZEtleWNoYWluU3R1YiA9IHNpbm9uLnN0dWIob2ZjTXVsdGlVc2VyS2V5V2FsbGV0LCAncHJlcGFyZVNoYXJlZEtleWNoYWluJykucmVzb2x2ZXMoe30pO1xuXG4gICAgICAgICAgICAvLyBTdHViIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbiB0byBwcmV2ZW50IGFueSBrZXljaGFpbiBmZXRjaGluZ1xuICAgICAgICAgICAgY29uc3QgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluU3R1YiA9IHNpbm9uLnN0dWIob2ZjTXVsdGlVc2VyS2V5V2FsbGV0LCAnZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluJyk7XG4gICAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViLnJlamVjdHMobmV3IEVycm9yKCdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4gc2hvdWxkIG5vdCBiZSBjYWxsZWQnKSk7XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY011bHRpVXNlcktleVdhbGxldC5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucyB9KTtcblxuICAgICAgICAgICAgLy8gVmVyaWZ5IGtleWNoYWluIHByZXBhcmF0aW9uIG1ldGhvZHMgYXJlIG5vdCBjYWxsZWRcbiAgICAgICAgICAgIHByZXBhcmVTaGFyZWRLZXljaGFpblN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICAgICAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluU3R1Yi5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgICAgY3JlYXRlU2hhcmVOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHBhc3Mgc2tpcEtleWNoYWluPXRydWUgYW5kIHVuZGVmaW5lZCBrZXljaGFpbiB0byBjcmVhdGVTaGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5OiAndGVzdHB1YmtleScsIHBhdGg6ICdtLzk5OTk5OS8xLzEnIH0pO1xuXG4gICAgICAgICAgICAvLyBTdHViIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbiB0byBwcmV2ZW50IGFueSBrZXljaGFpbiBmZXRjaGluZ1xuICAgICAgICAgICAgY29uc3QgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluU3R1YiA9IHNpbm9uLnN0dWIob2ZjTXVsdGlVc2VyS2V5V2FsbGV0LCAnZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluJyk7XG4gICAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViLnJlamVjdHMobmV3IEVycm9yKCdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4gc2hvdWxkIG5vdCBiZSBjYWxsZWQnKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlU3R1YiA9IHNpbm9uLnN0dWIob2ZjTXVsdGlVc2VyS2V5V2FsbGV0LCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9ucyEuc2tpcEtleWNoYWluIS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgICAgICAgIHNob3VsZChvcHRpb25zIS5rZXljaGFpbikuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgb2ZjTXVsdGlVc2VyS2V5V2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zIH0pO1xuXG4gICAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnbm9uLW11bHRpLWtleS11c2VyLWtleSB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBrZXljaGFpbiB3aGVuIHdhbGxldCBwYXNzcGhyYXNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgdG9LZXljaGFpbiA9IHV0eG9MaWIuYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJ2RlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDInLCAnaGV4JykpO1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9ICdtLzk5OTk5OS8xLzEnO1xuICAgICAgICAgICAgY29uc3QgcHVia2V5ID0gdG9LZXljaGFpbi5kZXJpdmVQYXRoKHBhdGgpLnB1YmxpY0tleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ2JpdGdvMTIzNCc7XG4gICAgICAgICAgICBjb25zdCBwdWIgPSAnWm8xZ2d6VFVLTVk1YlluRHZUNW10VmVaeHpmMkZhTFRiS2ttdkdVaFVRayc7XG5cbiAgICAgICAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5LCBwYXRoIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBlbmNYcHJ2MSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYxJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgICAgICBjb25zdCBnZXRLZXlOb2NrID0gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtub25NdWx0aVVzZXJLZXlXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICAgIGlkOiBub25NdWx0aVVzZXJLZXlXYWxsZXQua2V5SWRzKClbMF0sXG4gICAgICAgICAgICAgIHB1YixcbiAgICAgICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jWHBydjEsXG4gICAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVTdHViID0gc2lub24uc3R1Yihub25NdWx0aVVzZXJLZXlXYWxsZXQsICdjcmVhdGVTaGFyZScpLmNhbGxzRmFrZShhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAvLyBGb3Igbm9uLW11bHRpLWtleS11c2VyLWtleSB3YWxsZXRzLCBrZXljaGFpbiBzaG91bGQgYmUgcHJlc2VudCB3aGVuIHNwZW5kIHBlcm1pc3Npb25zIGFyZSBpbmNsdWRlZFxuICAgICAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgICAgICAgb3B0aW9ucyEua2V5Y2hhaW4hLnB1YiEuc2hvdWxkLmVxdWFsKHB1Yik7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgbm9uTXVsdGlVc2VyS2V5V2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgICAgICBjcmVhdGVTaGFyZVN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICAgIGdldEtleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ211bHRpLWtleS11c2VyLWtleSBkZXRlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZGV0ZWN0IG11bHRpLWtleS11c2VyLWtleSB3YWxsZXQgdmlhIGNvaW5TcGVjaWZpYy5mZWF0dXJlcyBhcnJheScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBvZmNDb2luOiBhbnkgPSBiaXRnby5jb2luKCdvZmMnKTtcbiAgICAgICAgICBjb25zdCB3YWxsZXRXaXRoTXVsdGlVc2VyS2V5RmVhdHVyZSA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIHtcbiAgICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDQnLFxuICAgICAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAzJ10sXG4gICAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgICAgZmVhdHVyZXM6IFsnbXVsdGkta2V5LXVzZXIta2V5J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCB3YWxsZXRXaXRob3V0RmVhdHVyZSA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIHtcbiAgICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDUnLFxuICAgICAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDA0J10sXG4gICAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgICAgZmVhdHVyZXM6IFsnc29tZS1vdGhlci1mZWF0dXJlJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCB3YWxsZXRXaXRob3V0Q29pblNwZWNpZmljID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwge1xuICAgICAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwNicsXG4gICAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDUnXSxcbiAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgICAgIC50aW1lcygzKVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleTogJ3Rlc3RwdWJrZXknLCBwYXRoOiAnbS85OTk5OTkvMS8xJyB9KTtcblxuICAgICAgICAgIC8vIE11bHRpLWtleS11c2VyLWtleSB3YWxsZXQgc2hvdWxkIHNraXAga2V5Y2hhaW5cbiAgICAgICAgICBjb25zdCBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViMSA9IHNpbm9uLnN0dWIod2FsbGV0V2l0aE11bHRpVXNlcktleUZlYXR1cmUsICdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4nKTtcbiAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViMS5yZWplY3RzKG5ldyBFcnJvcignZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluIHNob3VsZCBub3QgYmUgY2FsbGVkJykpO1xuICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlU3R1YjEgPSBzaW5vblxuICAgICAgICAgICAgLnN0dWIod2FsbGV0V2l0aE11bHRpVXNlcktleUZlYXR1cmUsICdjcmVhdGVTaGFyZScpXG4gICAgICAgICAgICAuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIG9wdGlvbnMhLnNraXBLZXljaGFpbiEuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgd2FsbGV0V2l0aE11bHRpVXNlcktleUZlYXR1cmUuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMgfSk7XG4gICAgICAgICAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluU3R1YjEuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICAgIGNyZWF0ZVNoYXJlU3R1YjEuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAgICAgLy8gV2FsbGV0IHdpdGhvdXQgbXVsdGkta2V5LXVzZXIta2V5IGZlYXR1cmUgc2hvdWxkIHJlc3BlY3Qgc2tpcEtleWNoYWluIGZsYWdcbiAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVN0dWIyID0gc2lub24uc3R1Yih3YWxsZXRXaXRob3V0RmVhdHVyZSwgJ2NyZWF0ZVNoYXJlJykuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGF3YWl0IHdhbGxldFdpdGhvdXRGZWF0dXJlLnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCBza2lwS2V5Y2hhaW46IHRydWUgfSk7XG4gICAgICAgICAgY3JlYXRlU2hhcmVTdHViMi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgICAgICAvLyBXYWxsZXQgd2l0aG91dCBjb2luU3BlY2lmaWMgc2hvdWxkIG5vdCBiZSBkZXRlY3RlZCBhcyBtdWx0aS1rZXktdXNlci1rZXlcbiAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVN0dWIzID0gc2lub24uc3R1Yih3YWxsZXRXaXRob3V0Q29pblNwZWNpZmljLCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgd2FsbGV0V2l0aG91dENvaW5TcGVjaWZpYy5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucywgc2tpcEtleWNoYWluOiB0cnVlIH0pO1xuICAgICAgICAgIGNyZWF0ZVNoYXJlU3R1YjMuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1dhbGxldCBGcmVlemluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGZyZWV6ZSB3YWxsZXQgZm9yIHNwZWNpZmllZCBkdXJhdGlvbiBpbiBzZWNvbmRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBkdXJhdGlvbjogNjAgfTtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9mcmVlemVgLCBwYXJhbXMpLnJlcGx5KDIwMCwge30pO1xuICAgICAgYXdhaXQgd2FsbGV0LmZyZWV6ZShwYXJhbXMpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RTUyBXYWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgY29uc3QgdHNvbCA9IGJpdGdvLmNvaW4oJ3Rzb2wnKTtcbiAgICBjb25zdCB0YWRhID0gYml0Z28uY29pbigndGFkYScpO1xuICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJyxcbiAgICAgIGNvaW46ICd0c29sJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXRoV2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgY29pbjogJ3RldGgnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICBjb2luU3BlY2lmaWM6IHsgYWRkcmVzc1ZlcnNpb246IDEgfSxcbiAgICAgIHR5cGU6ICdob3QnLFxuICAgIH07XG5cbiAgICBjb25zdCBwb2x5Z29uV2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNjMyODI2NTIwZWUxZTUwMDA3MjkwMTczNTRhY2FlYWInLFxuICAgICAgY29pbjogJ3Rwb2x5Z29uJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCBhZGFXYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICdiZjE4OTdhMS1lNGJkLTRiOTYtYjJhNC1iYTAyYzBmYzk5NTYnLFxuICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCB0c3NTb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB3YWxsZXREYXRhKTtcbiAgICBjb25zdCB0c3NBZGFXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0YWRhLCBhZGFXYWxsZXREYXRhKTtcblxuICAgIGxldCB0c3NFdGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0ZXRoJyksIGV0aFdhbGxldERhdGEpO1xuICAgIGNvbnN0IHRzc1BvbHlnb25XYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0cG9seWdvbicpLCBwb2x5Z29uV2FsbGV0RGF0YSk7XG4gICAgY29uc3QgY3VzdG9kaWFsVHNzU29sV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbCwge1xuICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgIHRyYW5zYWN0aW9uczogW10sXG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCB0eFJlcXVlc3RGdWxsOiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9LFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhdGU6ICdwZW5kaW5nU2lnbmF0dXJlJyxcbiAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgICBzaWduYWJsZUhleDogJ2RlYWRiZWVmJyxcbiAgICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgIGNvbW1pdG1lbnRTaGFyZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICB9O1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSB0c3MgdHhQcmVidWlsZCBidWlsZFBhcmFtcyB3aGVuIHByZXNpZ24gcmVwbGFjZXMgdGhlIHR4UHJlYnVpbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgIH07XG5cbiAgICAgIHNhbmRib3guc3R1Yih0c29sLCAncHJlc2lnblRyYW5zYWN0aW9uJykuY2FsbHNGYWtlKGFzeW5jIChwcmVzaWduUGFyYW1zKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJlc2lnblBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIHR4SGV4OiAncmVmcmVzaGVkLXR4LWhleCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdzaWduVHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcblxuICAgICAgYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ29yaWdpbmFsLXR4LWhleCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogJ3VzZXItcHJ2JyxcbiAgICAgIH0pO1xuXG4gICAgICBzaWduVHhSZXF1ZXN0LnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgY29uc3QgZmlyc3RTaWduVHhSZXF1ZXN0Q2FsbCA9IHNpZ25UeFJlcXVlc3QuZmlyc3RDYWxsO1xuICAgICAgYXNzZXJ0Lm9rKGZpcnN0U2lnblR4UmVxdWVzdENhbGwpO1xuICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdFBhcmFtcyA9IGZpcnN0U2lnblR4UmVxdWVzdENhbGwuYXJnc1swXTtcbiAgICAgIGFzc2VydC5vayhzaWduVHhSZXF1ZXN0UGFyYW1zKTtcbiAgICAgIHNob3VsZChzaWduVHhSZXF1ZXN0UGFyYW1zLnR4UGFyYW1zKS5kZWVwRXF1YWwoYnVpbGRQYXJhbXMpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ByZUJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncGFzc3BocmFzZTEyMzQ1JyxcbiAgICAgICAgcHJlYnVpbGRUeDogeyB3YWxsZXRJZDogdHNzRXRoV2FsbGV0LmlkKCksIHR4UmVxdWVzdElkOiAncmFuZG9tSWQnIH0sXG4gICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICB9O1xuXG4gICAgICBbJ2VkZHNhJywgJ2VjZHNhJ10uZm9yRWFjaCgoa2V5Q3VydmU6IHN0cmluZykgPT4ge1xuICAgICAgICBkZXNjcmliZShrZXlDdXJ2ZSwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdhbGxldCA9IGtleUN1cnZlID09PSAnZWRkc2EnID8gdHNzU29sV2FsbGV0IDogdHNzRXRoV2FsbGV0O1xuXG4gICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzYW5kYm94XG4gICAgICAgICAgICAgIC5zdHViKEtleWNoYWlucy5wcm90b3R5cGUsICdnZXRLZXlzRm9yU2lnbmluZycpXG4gICAgICAgICAgICAgIC5yZXNvbHZlcyhbeyBjb21tb25LZXljaGFpbjogJ3Rlc3QnLCBpZDogJycsIHB1YjogJycsIHR5cGU6ICdpbmRlcGVuZGVudCcgfV0pO1xuICAgICAgICAgICAgaWYgKGtleUN1cnZlID09PSAnZWRkc2EnKSB7XG4gICAgICAgICAgICAgIHNhbmRib3guc3R1YihUc29sLnByb3RvdHlwZSwgJ3ZlcmlmeVRyYW5zYWN0aW9uJykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzYW5kYm94LnN0dWIoVGV0aC5wcm90b3R5cGUsICd2ZXJpZnlUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ2l0IHNob3VsZCBzdWNjZWVkIGJ1dCBub3Qgc2lnbiBpZiB0aGUgdHhSZXF1ZXN0IGlzIHBlbmRpbmcgYXBwcm92YWwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUeFJlcXVlc3RTdHViID0gc2FuZGJveC5zdHViKEJhc2VUc3NVdGlscy5kZWZhdWx0LnByb3RvdHlwZSwgJ2dldFR4UmVxdWVzdCcpLnJlc29sdmVzKHtcbiAgICAgICAgICAgICAgLi4udHhSZXF1ZXN0RnVsbCxcbiAgICAgICAgICAgICAgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25UcmFuc2FjdGlvblNweSA9IHNhbmRib3guc3B5KFdhbGxldC5wcm90b3R5cGUsICdzaWduVHJhbnNhY3Rpb24nKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHdhbGxldC5wcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbihwYXJhbXMpKSBhcyBUeFJlcXVlc3Q7XG4gICAgICAgICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YXRlJyk7XG4gICAgICAgICAgICByZXN1bHQuc3RhdGUuc2hvdWxkLmVxdWFsKCdwZW5kaW5nQXBwcm92YWwnKTtcbiAgICAgICAgICAgIGdldFR4UmVxdWVzdFN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgICAgc2lnblRyYW5zYWN0aW9uU3B5Lm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ2l0IHNob3VsZCBzdWNjZWVkIGFuZCBzaWduIGlmIHRoZSB0eFJlcXVlc3QgaXMgbm90IHBlbmRpbmcgYXBwcm92YWwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUeFJlcXVlc3RTdHViID0gc2FuZGJveC5zdHViKEJhc2VUc3NVdGlscy5kZWZhdWx0LnByb3RvdHlwZSwgJ2dldFR4UmVxdWVzdCcpO1xuICAgICAgICAgICAgZ2V0VHhSZXF1ZXN0U3R1Yi5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnblRyYW5zYWN0aW9uU3R1YiA9IHNhbmRib3guc3R1YihXYWxsZXQucHJvdG90eXBlLCAnc2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLnJlc29sdmVzKHsgLi4udHhSZXF1ZXN0RnVsbCwgc3RhdGU6ICdzaWduZWQnIH0pO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgd2FsbGV0LnByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtcykpIGFzIFR4UmVxdWVzdDtcbiAgICAgICAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc3RhdGUnKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0ZS5zaG91bGQuZXF1YWwoJ3NpZ25lZCcpO1xuICAgICAgICAgICAgZ2V0VHhSZXF1ZXN0U3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBwcmVidWlsZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2luZ2xlIHJlY2lwaWVudCB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpbmdsZSByZWNpcGllbnQgdHJhbnNmZXIgd2l0aCBwZW5kaW5nIGFwcHJvdmFsIGlkIGlmIHRyYW5zYWN0aW9uIGlzIGhhdmluZyBvbmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3QsIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJywgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyB9KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIG11bHRpcGxlIHJlY2lwaWVudCB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzIwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHByZWJ1aWxkVHJhbnNhY3Rpb25cbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggaXNUZXN0VHJhbnNhY3Rpb24gZmxhZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIGlzVGVzdFRyYW5zYWN0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBWZXJpZnkgaXNUZXN0VHJhbnNhY3Rpb24gaXMgcGFzc2VkIHRvIHByZWJ1aWxkVHhXaXRoSW50ZW50XG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgY2FsbEFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5nZXRDYWxsKDApLmFyZ3NbMF07XG4gICAgICAgIGNhbGxBcmdzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpc1Rlc3RUcmFuc2FjdGlvbicsIHRydWUpO1xuICAgICAgICBjYWxsQXJncy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaW50ZW50VHlwZScsICdwYXltZW50Jyk7XG4gICAgICAgIGNhbGxBcmdzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIHNob3VsZC5leGlzdChjYWxsQXJncy5yZWNpcGllbnRzKTtcbiAgICAgICAgY2FsbEFyZ3MucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChyZWNpcGllbnRzKTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgICBpc1Rlc3RUcmFuc2FjdGlvbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gZW5hYmxlIHRva2VuIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW107XG4gICAgICAgIGNvbnN0IHRva2VuTmFtZSA9ICd0Y29pbjp0b2tlbk5hbWUnO1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2NyZWF0ZUFjY291bnQnLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gZW5hYmxlIHRva2VuIHRyYW5zYWN0aW9uIGZvciBjb2xkIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXTtcbiAgICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ3Rjb2luOnRva2VuTmFtZSc7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHR4UmVxdWVzdC53YWxsZXRUeXBlID0gJ2NvbGQnO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2NyZWF0ZUFjY291bnQnLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gaW5zdHJ1Y3Rpb24gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHNvbEluc3RydWN0aW9ucyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMicsXG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJrZXk6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRhOiAnU0dWc2JHOGdWMjl5YkdRPScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29tbWVudCA9ICdUZXN0IGNvbW1lbnQnO1xuICAgICAgICBjb25zdCBzZXF1ZW5jZUlkID0gJzEyMyc7XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgc2VxdWVuY2VJZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgc2VxdWVuY2VJZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICAgIHNlcXVlbmNlSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgY3VzdG9tIGluc3RydWN0aW9uIHRyYW5zYWN0aW9uIHdpdGggbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW107XG4gICAgICAgIGNvbnN0IHNvbEluc3RydWN0aW9ucyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMicsXG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJrZXk6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRhOiAnU0dWc2JHOGdWMjl5YkdRPScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICdDb21wdXRlQnVkZ2V0MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyxcbiAgICAgICAgICAgIGtleXM6IFtdLFxuICAgICAgICAgICAgZGF0YTogJ0F3QUE2QU1BQUFBQScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGN1c3RvbSBpbnN0cnVjdGlvbiB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHNvbEluc3RydWN0aW9ucyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMicsXG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJrZXk6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRhOiAnU0dWc2JHOGdWMjl5YkdRPScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgY3VzdG9tIGluc3RydWN0aW9uIHRyYW5zYWN0aW9uIHdpdGggcGVuZGluZyBhcHByb3ZhbCBpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgc29sSW5zdHJ1Y3Rpb25zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyJyxcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmtleTogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBpc1NpZ25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRhdGE6ICdTR1ZzYkc4Z1YyOXliR1E9JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHsgLi4udHhSZXF1ZXN0LCBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcgfSk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gaW5zdHJ1Y3Rpb24gdHJhbnNhY3Rpb24gZm9yIGNvbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtdO1xuICAgICAgICBjb25zdCBzb2xJbnN0cnVjdGlvbnMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvZ3JhbUlkOiAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTInLFxuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHVia2V5OiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgICAgIGlzU2lnbmVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzV3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZGF0YTogJ1NHVnNiRzhnVjI5eWJHUT0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgdHhSZXF1ZXN0LndhbGxldFR5cGUgPSAnY29sZCc7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIG5vbi10cmFuc2ZlciB0cmFuc2FjdGlvbiB0eXBlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHR5cGU6ICdzdGFrZScsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiBzdGFrZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgZnVsbCBhcGkgdmVyc2lvbiBjb21wYXRpYmlsaXR5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXRcbiAgICAgICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIGFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdGb3Igbm9uIHNlbGYtY3VzdG9kaWFsIChob3QpIHRzcyB3YWxsZXRzLCBwYXJhbWV0ZXIgYGFwaVZlcnNpb25gIG11c3QgYmUgYGZ1bGxgLicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzaW5nbGUgcmVjaXBpZW50IHRyYW5zZmVyIHRyYW5zYWN0aW9uIGZvciBmdWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2Z1bGwnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIHRyYW5zZmVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHhBQjEwMDkxMmUxMzNBQTA2Y0VCOTIxNDU5YWFEZEJkNjIzODFGNUEzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChyZWNpcGllbnRzKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3BheW1lbnQnKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIGZlZVRva2VuIHBhcmFtZXRlciB0byBwcmVidWlsZFR4V2l0aEludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHhBQjEwMDkxMmUxMzNBQTA2Y0VCOTIxNDU5YWFEZEJkNjIzODFGNUEzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlVG9rZW4gPSAnMHgyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyJztcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBmZWVUb2tlbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChyZWNpcGllbnRzKTtcbiAgICAgICAgYXJnc1swXSEuZmVlVG9rZW4hLnNob3VsZC5lcXVhbChmZWVUb2tlbik7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdwYXltZW50Jyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIHRyYW5zZmVydG9rZW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB0b2tlbk5hbWU6ICdndGVyYzE4ZHAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcnRva2VuJyxcbiAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKHJlY2lwaWVudHMpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5pc1RzcyEuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgndHJhbnNmZXJUb2tlbicpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIGV0aCBhY2NlbGVyYXRpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB0b2tlbk5hbWU6ICdndGVyYzE4ZHAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbG93RmVlVHhpZCA9ICcweDZlYTA3Zjk0MjBmNDY3NmJlNjQ3OGFiMTY2MGViOTI0NDRhN2M2NjNlMGUyNGJlY2U5MjlmNzE1ZTg4MmUwY2YnO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIGxvd0ZlZVR4aWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5sb3dGZWVUeGlkIS5zaG91bGQuZXF1YWwobG93RmVlVHhpZCk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggYWNjZWxlcmF0aW9ucyBmb3IgcmVjZWl2ZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB0b2tlbk5hbWU6ICdndGVyYzE4ZHAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbG93RmVlVHhpZCA9ICcweDZlYTA3Zjk0MjBmNDY3NmJlNjQ3OGFiMTY2MGViOTI0NDRhN2M2NjNlMGUyNGJlY2U5MjlmNzE1ZTg4MmUwY2YnO1xuICAgICAgICBjb25zdCByZWNlaXZlQWRkcmVzcyA9ICcweDA2MjE3NmJjOTM0NWRhM2U4ZWU5MDM2MWIwY2Y2ZmY4ODNiYTcyMDYnO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIGxvd0ZlZVR4aWQsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5sb3dGZWVUeGlkIS5zaG91bGQuZXF1YWwobG93RmVlVHhpZCk7XG4gICAgICAgIGFyZ3NbMF0hLnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYWNjZWxlcmF0aW9uJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIGNvcnJlY3QgcGFyYW1zIGZvciBzZWlldm0gYWNjZWxlcmF0aW9uICh1c2VyIHN0dWNrIHR4KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHhkZTUwZDliYmRjZDQ3N2M5NjJiZjFjZWJlY2VmNTBlNDUyNTY1YzUzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg0ZDZkZWFiMTM2ZGExZjM4NzBkZTRlYjZmOGNmNDZlYzFlMDhiOWJmOTE4Yjc2NDU3OGI3YjFjN2FiMDhkNmI4JztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHg5YmJiOWEwMmU2NmUxNzYzNmZkMDYzN2EwZWVlMWUzOGY0NjBiNmJhJztcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHNlaWV2bSB3YWxsZXQgZm9yIHRlc3RpbmdcbiAgICAgICAgY29uc3Qgc2VpZXZtV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbignc2VpZXZtJyksIHdhbGxldERhdGEpO1xuXG4gICAgICAgIGF3YWl0IHNlaWV2bVdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICByZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHByZWJ1aWxkVHhXaXRoSW50ZW50IHdhcyBjYWxsZWQgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnNcbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgLy8gVmFsaWRhdGUgYWNjZWxlcmF0aW9uIGludGVudCBwYXJhbWV0ZXJzXG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5sb3dGZWVUeGlkIS5zaG91bGQuZXF1YWwobG93RmVlVHhpZCk7XG4gICAgICAgIGFyZ3NbMF0hLnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYWNjZWxlcmF0aW9uJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIGZpbGxOb25jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGNvbnN0IG5vbmNlID0gJzEnO1xuICAgICAgICBjb25zdCBjb21tZW50ID0gJ2ZpbGxOb25jZSBjb21tZW50JztcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgICBjb21tZW50LFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1swXSEubm9uY2UhLnNob3VsZC5lcXVhbChub25jZSk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgICAgYXJnc1swXSEuY29tbWVudCEuc2hvdWxkLmVxdWFsKGNvbW1lbnQpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIHdyYXBBcHByb3ZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgd3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ3dyYXBBcHByb3ZlJyxcbiAgICAgICAgICB3cmFwUGFyYW1zLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnd3JhcEFwcHJvdmUnKTtcbiAgICAgICAgYXJnc1swXSEud3JhcFBhcmFtcyEuc2hvdWxkLmRlZXBFcXVhbCh3cmFwUGFyYW1zKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciB3cmFwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3cmFwUGFyYW1zID0geyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFtb3VudDogJzEwMDAwMDAnIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnd3JhcCcsXG4gICAgICAgICAgd3JhcFBhcmFtcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd3cmFwJyk7XG4gICAgICAgIGFyZ3NbMF0hLndyYXBQYXJhbXMhLnNob3VsZC5kZWVwRXF1YWwod3JhcFBhcmFtcyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIGZpbGxOb25jZSBmb3IgcmVjZWl2ZSBhZGRyZXNzIG5vbmNlIGZpbGxpbmcgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBjb25zdCBub25jZSA9ICcxJztcbiAgICAgICAgY29uc3QgY29tbWVudCA9ICdmaWxsTm9uY2UgY29tbWVudCc7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4MDYyMTc2YmM5MzQ1ZGEzZThlZTkwMzYxYjBjZjZmZjg4M2JhNzIwNic7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdmaWxsTm9uY2UnLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgY29tbWVudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLm5vbmNlIS5zaG91bGQuZXF1YWwobm9uY2UpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZmlsbE5vbmNlJyk7XG4gICAgICAgIGFyZ3NbMF0hLmNvbW1lbnQhLnNob3VsZC5lcXVhbChjb21tZW50KTtcbiAgICAgICAgYXJnc1swXSEucmVjZWl2ZUFkZHJlc3MhLnNob3VsZC5lcXVhbChyZWNlaXZlQWRkcmVzcyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgYnJpZGdlRnVuZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGludGVudEFtb3VudCA9IHsgdmFsdWU6ICcxMDAwMDAwJywgc3ltYm9sOiAndGh5cGVldm0nIH07XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2JyaWRnZUZ1bmRzJyxcbiAgICAgICAgICBpbnRlbnRBbW91bnQsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2JyaWRnZUZ1bmRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmFtb3VudCEuc2hvdWxkLmRlZXBFcXVhbChpbnRlbnRBbW91bnQpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBFeHBvcnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ1AtY29zdHdvMXh4dDI3cmducmp5YXcyd211c3d4dW1sbW1lMnRhcGo2MnM3dXkwJyxcbiAgICAgICAgICAgIGFtb3VudDogJzUwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgbm9uY2U6ICc1JyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZXhwb3J0Jyk7XG4gICAgICAgIGFyZ3NbMF0hLnJlY2lwaWVudHMhLnNob3VsZC5kZWVwRXF1YWwocmVjaXBpZW50cyk7XG4gICAgICAgIGFyZ3NbMF0hLm5vbmNlIS5zaG91bGQuZXF1YWwoJzUnKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBJbXBvcnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdpbXBvcnQnKTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnbm9uY2UnKTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdmZWVPcHRpb25zJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgSW1wb3J0VG9DJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdJbXBvcnRUb0MnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnaW1wb3J0dG9jJyk7XG4gICAgICAgIGFyZ3NbMF0hLnJlY2lwaWVudHMhLnNob3VsZC5kZWVwRXF1YWwoW10pO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ25vbmNlJyk7XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZmVlT3B0aW9ucycpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBmZWVPcHRpb25zIHdoZW4gcGFzc2luZyB1c2luZyB0aGUgbGVnYWN5IGZvcm1hdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHhBQjEwMDkxMmUxMzNBQTA2Y0VCOTIxNDU5YWFEZEJkNjIzODFGNUEzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWRGZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgICBnYXNMaW1pdDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIGVpcDE1NTk6IHtcbiAgICAgICAgICAgIG1heEZlZVBlckdhczogZXhwZWN0ZWRGZWVPcHRpb25zLm1heEZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IGV4cGVjdGVkRmVlT3B0aW9ucy5tYXhQcmlvcml0eUZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRGZWVPcHRpb25zKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIGFjY2VsZXJhdGlvbiBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg2ZWEwN2Y5NDIwZjQ2NzZiZTY0NzhhYjE2NjBlYjkyNDQ0YTdjNjYzZTBlMjRiZWNlOTI5ZjcxNWU4ODJlMGNmJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCBwbGFjZSBmZWVUb2tlbiBhdCBpbnRlbnQgbGV2ZWwsIG5vdCBpbiBmZWVPcHRpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuXG4gICAgICAgIGNvbnN0IGZlZVRva2VuID0gJzB4MjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMic7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnMHhBQjEwMDkxMmUxMzNBQTA2Y0VCOTIxNDU5YWFEZEJkNjIzODFGNUEzJyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBmZWVUb2tlbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdwYXltZW50Jyk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQuZmVlVG9rZW4hLnNob3VsZC5lcXVhbChmZWVUb2tlbik7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2ZlZVRva2VuJyk7XG4gICAgICB9KTtcblxuICAgICAgWyd3cmFwLW5hdGl2ZScsICd1bndyYXAtbmF0aXZlJ10uZm9yRWFjaChmdW5jdGlvbiAoaW50ZW50VHlwZSkge1xuICAgICAgICBpdChgcG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gYSB2YWxpZCAke2ludGVudFR5cGV9IGludGVudCB3aXRob3V0IHJlY2lwaWVudHNgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcblxuICAgICAgICAgIC8vIFR3byBpbmRlcGVuZGVudCBzaXRlcyBpbiBwb3B1bGF0ZUludGVudCBtdXN0IGtub3cgYWJvdXQgdGhpcyBpbnRlbnRUeXBlOlxuICAgICAgICAgIC8vIHRoZSByZWNpcGllbnRzLXJlcXVpcmVkIGV4ZW1wdGlvbiBsaXN0LCBhbmQgdGhlIEVWTSBpbnRlbnQtc2hhcGUgc3dpdGNoLlxuICAgICAgICAgIC8vIE1pc3NpbmcgdGhlIGZpcnN0IG1ha2VzIHRoaXMgY2FsbCB0aHJvdyBvbiB0aGUgcmVjaXBpZW50cyBhc3NlcnRpb25cbiAgICAgICAgICAvLyBiZWZvcmUgdGhlIHN3aXRjaCBpcyBldmVyIHJlYWNoZWQuXG4gICAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICBpbnRlbnRUeXBlLFxuICAgICAgICAgICAgZGVmaVBhcmFtczogeyB2YXVsdElkOiAnaHRldGgtd2V0aC10ZXN0JywgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbChpbnRlbnRUeXBlKTtcbiAgICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICAgIGludGVudC52YXVsdElkIS5zaG91bGQuZXF1YWwoJ2h0ZXRoLXdldGgtdGVzdCcpO1xuICAgICAgICAgIC8vIEEgcGxhaW4gYGFtb3VudGAsIG5vdCB0aGUgYHNoYXJlVG9rZW5BbW91bnRgIGRlZmktd2l0aGRyYXcgdXNlcyBmb3Igc2hhcmVzLlxuICAgICAgICAgIGludGVudC5hbW91bnQhLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgICAgICAgIGludGVudC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3NoYXJlVG9rZW5BbW91bnQnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGNvcmVkYW8gYWNjZWxlcmF0aW9uIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdjb3JlZGFvJykpO1xuXG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NmVhMDdmOTQyMGY0Njc2YmU2NDc4YWIxNjYwZWI5MjQ0NGE3YzY2M2UwZTI0YmVjZTkyOWY3MTVlODgyZTBjZic7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignY29yZWRhbycpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgc2VpZXZtIGFjY2VsZXJhdGlvbiBpbnRlbnQgZm9yIHN0dWNrIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ3NlaWV2bScpKTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NGQ2ZGVhYjEzNmRhMWYzODcwZGU0ZWI2ZjhjZjQ2ZWMxZTA4YjliZjkxOGI3NjQ1NzhiN2IxYzdhYjA4ZDZiOCc7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4OWJiYjlhMDJlNjZlMTc2MzZmZDA2MzdhMGVlZTFlMzhmNDYwYjZiYSc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignc2VpZXZtJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBsb3dGZWVUeGlkLFxuICAgICAgICAgIHJlY2VpdmVBZGRyZXNzLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHRoZSBhY2NlbGVyYXRpb24gaW50ZW50IHN0cnVjdHVyZVxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgaW50ZW50LnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggYWNjZWxlcmF0aW9uIGludGVudCBmb3IgcmVjZWl2ZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuXG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NmVhMDdmOTQyMGY0Njc2YmU2NDc4YWIxNjYwZWI5MjQ0NGE3YzY2M2UwZTI0YmVjZTkyOWY3MTVlODgyZTBjZic7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4MDYyMTc2YmM5MzQ1ZGEzZThlZTkwMzYxYjBjZjZmZjg4M2JhNzIwNic7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGxvd0ZlZVR4aWQsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC50eGlkIS5zaG91bGQuZXF1YWwobG93RmVlVHhpZCk7XG4gICAgICAgIGludGVudC5yZWNlaXZlQWRkcmVzcyEuc2hvdWxkLmVxdWFsKHJlY2VpdmVBZGRyZXNzKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIGZpbGxOb25jZSBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBub25jZSA9ICcxJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC5ub25jZSEuc2hvdWxkLmVxdWFsKG5vbmNlKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIGZpbGxOb25jZSBpbnRlbnQgZm9yIHJlY2VpdmUgYWRkcmVzcyBub25jZSBmaWxsaW5nIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgbm9uY2UgPSAnMSc7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4MDYyMTc2YmM5MzQ1ZGEzZThlZTkwMzYxYjBjZjZmZjg4M2JhNzIwNic7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdmaWxsTm9uY2UnLFxuICAgICAgICAgIG5vbmNlLFxuICAgICAgICAgIHJlY2VpdmVBZGRyZXNzLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQubm9uY2UhLnNob3VsZC5lcXVhbChub25jZSk7XG4gICAgICAgIGludGVudC5yZWNlaXZlQWRkcmVzcyEuc2hvdWxkLmVxdWFsKHJlY2VpdmVBZGRyZXNzKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIHRva2VuQXBwcm92YWwgaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ3VzZGMnO1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAndG9rZW5BcHByb3ZhbCcsXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudG9rZW5OYW1lIS5zaG91bGQuZXF1YWwodG9rZW5OYW1lKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd0b2tlbkFwcHJvdmFsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIHBvbHlnb24gdG9rZW5BcHByb3ZhbCBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbigndHBvbHlnb24nKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0b2tlbk5hbWUgPSAndXNkdCc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbigndHBvbHlnb24nKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICd0b2tlbkFwcHJvdmFsJyxcbiAgICAgICAgICB0b2tlbk5hbWUsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC50b2tlbk5hbWUhLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3Rva2VuQXBwcm92YWwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgYnNjIHRva2VuQXBwcm92YWwgaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ3Ric2MnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0b2tlbk5hbWUgPSAnYnVzZCc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbigndGJzYycpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3Rva2VuQXBwcm92YWwnLFxuICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnRva2VuTmFtZSEuc2hvdWxkLmVxdWFsKHRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgndG9rZW5BcHByb3ZhbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggd3JhcEFwcHJvdmUgaW50ZW50IGZyb20gd3JhcFBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdyYXBQYXJhbXMgPSB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYW1vdW50OiAnMTAwMDAwMCcgfTtcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3dyYXBBcHByb3ZlJyxcbiAgICAgICAgICB3cmFwUGFyYW1zLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudG9rZW5OYW1lIS5zaG91bGQuZXF1YWwod3JhcFBhcmFtcy50b2tlbk5hbWUpO1xuICAgICAgICBpbnRlbnQuYW1vdW50IS5zaG91bGQuZXF1YWwod3JhcFBhcmFtcy5hbW91bnQpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3dyYXBBcHByb3ZlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGV0aCB3cmFwIGludGVudCBmcm9tIHdyYXBQYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IHdyYXBQYXJhbXMgPSB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYW1vdW50OiAnMTAwMDAwMCcgfTtcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3dyYXAnLFxuICAgICAgICAgIHdyYXBQYXJhbXMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC50b2tlbk5hbWUhLnNob3VsZC5lcXVhbCh3cmFwUGFyYW1zLnRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5hbW91bnQhLnNob3VsZC5lcXVhbCh3cmFwUGFyYW1zLmFtb3VudCk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnd3JhcCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJlcXVpcmUgd3JhcFBhcmFtcyBmb3Igd3JhcEFwcHJvdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgICgoKSA9PlxuICAgICAgICAgIG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3dyYXBBcHByb3ZlJyxcbiAgICAgICAgICB9KSkuc2hvdWxkLnRocm93KC93cmFwUGFyYW1zLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwb3B1bGF0ZSBpbnRlbnQgd2l0aCBjdXN0b2RpYW5UcmFuc2FjdGlvbklkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgbm9uY2UgPSAnMSc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIGN1c3RvZGlhblRyYW5zYWN0aW9uSWQ6ICd1bml0dGVzdCcsXG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LmN1c3RvZGlhblRyYW5zYWN0aW9uSWQhLnNob3VsZC5lcXVhbCgndW5pdHRlc3QnKTtcbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC5ub25jZSEuc2hvdWxkLmVxdWFsKG5vbmNlKTtcbiAgICAgICAgaW50ZW50LmlzVHNzIS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZmlsbE5vbmNlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGJyaWRnZUZ1bmRzIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgY29uc3QgYW1vdW50ID0geyB2YWx1ZTogJzEwMDAwMDAnLCBzeW1ib2w6ICd0aHlwZWV2bScgfTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdicmlkZ2VGdW5kcycsXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYnJpZGdlRnVuZHMnKTtcbiAgICAgICAgaW50ZW50LmFtb3VudCEuc2hvdWxkLmRlZXBFcXVhbChhbW91bnQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXhwb3J0IGludGVudCBmb3IgRVZNIGNyb3NzLWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnUC1jb3N0d28xeHh0MjdyZ25yanlhdzJ3bXVzd3h1bWxtbWUydGFwajYyczd1eTAnLFxuICAgICAgICAgICAgYW1vdW50OiAnNTAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdleHBvcnQnLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBub25jZTogJzUnLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2V4cG9ydCcpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50Lm5vbmNlIS5zaG91bGQuZXF1YWwoJzUnKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhLnNob3VsZC5iZS5hbi5BcnJheSgpLndpdGgubGVuZ3RoT2YoMSk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS5hZGRyZXNzLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHJlY2lwaWVudHNbMF0uYWRkcmVzcyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpbmdsZSByZWNpcGllbnQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gcHJvdmlkaW5nIGFwaVZlcnNpb24gcGFyYW1ldGVyIGFzIFwiZnVsbFwiICcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgICdmdWxsJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIHVuc3BlbnRzIGFuZCBzZXF1ZW5jZSBpZCBpbiB0cmFuc2ZlclRva2VuIGJ1aWxkIHBheWxvYWQgZm9yIGFkYSB0b2tlbiB3aXRoZHJhd2FscycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBQcmVidWlsZFRyYW5zYWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICBpZGZTaWduZWRUaW1lc3RhbXA6ICcyMDI1LTExLTEwVDA4OjE0OjE5LjAxMFonLFxuICAgICAgICAgIGlkZlVzZXJJZDogJzVjYWUzMTMwZjhmNDU2MWQ1MWRmY2JmZGFhZmJhOWI5JyxcbiAgICAgICAgICBpZGZWZXJzaW9uOiAxLFxuICAgICAgICAgIGluc3RhbnQ6IGZhbHNlLFxuICAgICAgICAgIGNvbW1lbnQ6ICcnLFxuICAgICAgICAgIHVuc3BlbnRzOiBbJzc5YmFjMmIzYzQzZGUxNzY3ZjA3MzFjYWY5MmQ1Y2Q3ZWRmZTVkYTQzM2IwNTYwMDJkZjQyZjBjMDU1YTMwMjM6MSddLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYW1vdW50OiAnMicsXG4gICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxejRtM21zOW54cmEzNnQ2cnR6NGx6Yzl6a2szZDRxd2NwY3IzeXh3aHhsc2xwYXRocmhxdHh2OG1yNWg1eGs5dDc5czI5ZGR6bTJxYXNyczh6Z3Zhd2RscDdyczQ0ZzVoYycsXG4gICAgICAgICAgICAgIHRva2VuTmFtZTogJ3RhZGE6d2F0ZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlSWQ6ICc0UUx0WGtCclpoYzZBdGVjRlpWbkhDWUgxVUFrJyxcbiAgICAgICAgICBudW1CbG9ja3M6IDIsXG4gICAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyBhcyBjb25zdCxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXJ0b2tlbicsXG4gICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgY2FwdHVyZWRSZXF1ZXN0Qm9keTogYW55O1xuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0FkYVdhbGxldC5pZCgpfS90eHJlcXVlc3RzYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHVuc2lnbmVkVHhzOiBbJ3R4J10gfSk7XG5cbiAgICAgICAgYXdhaXQgdHNzQWRhV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24ocGFyYW1zKTtcblxuICAgICAgICBjb25zb2xlLmxvZygnY2FwdHVyZWRSZXF1ZXN0Qm9keScsIGNhcHR1cmVkUmVxdWVzdEJvZHkpO1xuICAgICAgICBjYXB0dXJlZFJlcXVlc3RCb2R5LnNob3VsZC5ub3QuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkhLmludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndW5zcGVudHMnKTtcbiAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSEuaW50ZW50LnVuc3BlbnRzLnNob3VsZC5kZWVwRXF1YWwocGFyYW1zLnVuc3BlbnRzKTtcbiAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSEuaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzZXF1ZW5jZUlkJyk7XG4gICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkhLmludGVudC5zZXF1ZW5jZUlkLnNob3VsZC5lcXVhbChwYXJhbXMuc2VxdWVuY2VJZCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBzaWduaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBzaWduIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzaWduVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3QnKTtcbiAgICAgICAgc2lnblR4UmVxdWVzdC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2Ugc2lnblRyYW5zYWN0aW9uXG4gICAgICAgIHNpZ25UeFJlcXVlc3QuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHsgdHhSZXF1ZXN0LCBwcnY6ICdzZWNyZXRLZXknLCByZXFJZCB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHBydjogJ3NlcmNyZXRLZXknLFxuICAgICAgICB9KTtcbiAgICAgICAgc2lnbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIHRyYW5zYWN0aW9uIHdpdGhvdXQgdHhSZXF1ZXN0SWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHBydjogJ3NlcmNyZXRLZXknLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3R4UmVxdWVzdElkIHJlcXVpcmVkIHRvIHNpZ24gdHJhbnNhY3Rpb25zIHdpdGggVFNTJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgWydlZGRzYScsICdlY2RzYSddLmZvckVhY2goKGtleUN1cnZlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgZGVzY3JpYmUoa2V5Q3VydmUsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB3YWxsZXQgPSBrZXlDdXJ2ZSA9PT0gJ2VkZHNhJyA/IHRzc1NvbFdhbGxldCA6IHRzc0V0aFdhbGxldDtcbiAgICAgICAgICBsZXQgZ2V0S2V5c1N0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICAgICAgICBsZXQgc2lnblRyYW5zYWN0aW9uU3R1Yjogc2lub24uU2lub25TdHViO1xuICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2V0S2V5c1N0dWIgPSBzYW5kYm94LnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJyk7XG5cbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIgPSBzYW5kYm94XG4gICAgICAgICAgICAgIC5zdHViKFdhbGxldC5wcm90b3R5cGUsICdzaWduVHJhbnNhY3Rpb24nKVxuICAgICAgICAgICAgICAucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3RGdWxsLCBzdGF0ZTogJ3NpZ25lZCcgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2V0S2V5c1N0dWIucmVzb2x2ZXMoW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbW9uS2V5Y2hhaW46ICd0ZXN0JyxcbiAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgcHViOiAnJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAgICAgICAne1wiaXZcIjpcIjE1RnNiRFZJMXpHOU9nZ0Q4WVgrSGc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJoSGJOSDNTei9hVT1cIixcImN0XCI6XCJXb05WS3o3YWZpUnhYSTJ3L1lrek1kTXlvUWcvQjE1dTFROGFRZ2k5NmpKWjl3azZUSWFTRWM2YlhGSDNBSHpEOU1kSkNXSlFVcFJob1FjL3JneXRjbjY5c2NQVGpLZWV5Vk1FbEdDeFpkRlZTL3BzUWNORStsdWUzLy8yWmx4ais2dDFOa3ZZTys4eUFlelNNUkJLNU9kZnRYRWpOUUk9XCJ9JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBUZXN0Qml0R28uVjIuVEVTVF9FVEhfV0FMTEVUX1BBU1NQSFJBU0UgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgd2FsbGV0LmdldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgICAgICAgIHJlc3BvbnNlLnNob3VsZC5kZWVwRXF1YWwoeyAuLi50eFJlcXVlc3RGdWxsLCBzdGF0ZTogJ3NpZ25lZCcgfSk7XG5cbiAgICAgICAgICAgIGdldEtleXNTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0aGUga2V5Y2hhaW4gZG9lc250IGhhdmUgdGhlIGVuY3J5cHRlZEtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGdldEtleXNTdHViLnJlc29sdmVzKFt7IGNvbW1vbktleWNoYWluOiAndGVzdCcsIGlkOiAnJywgcHViOiAnJywgdHlwZTogJ3RzcycgfV0pO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBUZXN0Qml0R28uVjIuVEVTVF9FVEhfV0FMTEVUX1BBU1NQSFJBU0UgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAgICAgICAuZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbihwYXJhbXMpXG4gICAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0aGUgdXNlciBrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuXG4gICAgICAgICAgICBnZXRLZXlzU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBwYXNzd29yZCBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2V0S2V5c1N0dWIucmVzb2x2ZXMoW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbW9uS2V5Y2hhaW46ICd0ZXN0JyxcbiAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgcHViOiAnJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAgICAgICAne1wiaXZcIjpcIjE1RnNiRFZJMXpHOU9nZ0Q4WVgrSGc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJoSGJOSDNTei9hVT1cIixcImN0XCI6XCJXb05WS3o3YWZpUnhYSTJ3L1lrek1kTXlvUWcvQjE1dTFROGFRZ2k5NmpKWjl3azZUSWFTRWM2YlhGSDNBSHpEOU1kSkNXSlFVcFJob1FjL3JneXRjbjY5c2NQVGpLZWV5Vk1FbEdDeFpkRlZTL3BzUWNORStsdWUzLy8yWmx4ais2dDFOa3ZZTys4eUFlelNNUkJLNU9kZnRYRWpOUUk9XCJ9JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncmFuZG9tcGFzcycsXG4gICAgICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgICAgICAgIC5nZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uKHBhcmFtcylcbiAgICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYHVuYWJsZSB0byBkZWNyeXB0IGtleWNoYWluIHdpdGggdGhlIGdpdmVuIHdhbGxldCBwYXNzcGhyYXNlYCk7XG5cbiAgICAgICAgICAgIGdldEtleXNTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2lnbkFuZFNlbmRUeFJlcXVlc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleGFtcGxlU2lnbmVkVHggPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjMnLFxuICAgICAgICB0eGlkOiAnMHg0NTYnLFxuICAgICAgICBzdGF0dXM6ICdzaWduZWQnLFxuICAgICAgfTtcblxuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzaWduIGxpdGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZVNpZ25hdHVyZVNoYXJlc1NweSA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdkZWxldGVTaWduYXR1cmVTaGFyZXMnKTtcbiAgICAgICAgY29uc3QgZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweSA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdnZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uJyk7XG4gICAgICAgIGdldFVzZXJLZXlBbmRTaWduVHNzVHhTcHkucmVzb2x2ZXMoZXhhbXBsZVNpZ25lZFR4KTtcbiAgICAgICAgY29uc3Qgc3VibWl0VHhTcHkgPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAnc3VibWl0VHJhbnNhY3Rpb24nKTtcbiAgICAgICAgc3VibWl0VHhTcHkucmVzb2x2ZXMoZXhhbXBsZVNpZ25lZFR4KTtcblxuICAgICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHRzc1NvbFdhbGxldC5zaWduQW5kU2VuZFR4UmVxdWVzdCh7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIGlzVHhSZXF1ZXN0RnVsbDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UoZGVsZXRlU2lnbmF0dXJlU2hhcmVzU3B5KTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkT25jZShnZXRVc2VyS2V5QW5kU2lnblRzc1R4U3B5KTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkT25jZShzdWJtaXRUeFNweSk7XG4gICAgICAgIHNpZ25lZFR4LnNob3VsZC5kZWVwRXF1YWwoZXhhbXBsZVNpZ25lZFR4KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHNpZ24gZnVsbCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGVsZXRlU2lnbmF0dXJlU2hhcmVzU3B5ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ2RlbGV0ZVNpZ25hdHVyZVNoYXJlcycpO1xuICAgICAgICBjb25zdCBnZXRVc2VyS2V5QW5kU2lnblRzc1R4U3B5ID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ2dldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweS5yZXNvbHZlcyhleGFtcGxlU2lnbmVkVHgpO1xuXG4gICAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25BbmRTZW5kVHhSZXF1ZXN0KHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgaXNUeFJlcXVlc3RGdWxsOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBzYW5kYm94LmFzc2VydC5jYWxsZWRPbmNlKGRlbGV0ZVNpZ25hdHVyZVNoYXJlc1NweSk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UoZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweSk7XG4gICAgICAgIHNpZ25lZFR4LnNob3VsZC5kZWVwRXF1YWwoZXhhbXBsZVNpZ25lZFR4KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ01lc3NhZ2UgU2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGFzaCA9ICcweHJycnNzczFiJztcbiAgICAgIGNvbnN0IG1lc3NhZ2VSYXcgPSAnaGVsbG8gd29ybGQnO1xuICAgICAgY29uc3QgbWVzc2FnZUVuY29kZWQgPSBCdWZmZXIuZnJvbShgXFx1MDAxOUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOlxcbiR7bWVzc2FnZVJhdy5sZW5ndGh9JHttZXNzYWdlUmF3fWApLnRvU3RyaW5nKFxuICAgICAgICAnaGV4J1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nOiBUeFJlcXVlc3QgPSB7XG4gICAgICAgIHR4UmVxdWVzdElkOiByZXFJZC50b1N0cmluZygpLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnc2lnbk1lc3NhZ2UnLFxuICAgICAgICB9LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgICBwb2xpY2llc0NoZWNrZWQ6IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgICB1bnNpZ25lZE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0ZTogJ3NpZ25lZCcsXG4gICAgICAgICAgICBtZXNzYWdlUmF3OiAnaGVsbG8gd29ybGQnLFxuICAgICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbeyBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCBzaGFyZTogJycgfV0sXG4gICAgICAgICAgICBjb21iaW5lU2lnU2hhcmU6ICcwOnJycjpzc3M6MycsXG4gICAgICAgICAgICB0eEhhc2gsXG4gICAgICAgICAgICBtZXNzYWdlRW5jb2RlZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGxldCBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VTaWduaW5nQ29pbnMgPSBbJ3RldGgnLCAndHBvbHlnb24nXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkOiBTaWduZWRNZXNzYWdlID0ge1xuICAgICAgICB0eFJlcXVlc3RJZDogcmVxSWQudG9TdHJpbmcoKSxcbiAgICAgICAgdHhIYXNoLFxuICAgICAgICBzaWduYXR1cmU6IHR4SGFzaCxcbiAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICBtZXNzYWdlRW5jb2RlZCxcbiAgICAgIH07XG5cbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZSA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAnc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UnKTtcbiAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UucmVzb2x2ZXModHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuICAgICAgICBzYW5kYm94XG4gICAgICAgICAgLnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJylcbiAgICAgICAgICAucmVzb2x2ZXMoW3sgY29tbW9uS2V5Y2hhaW46ICd0ZXN0JywgaWQ6ICcnLCBwdWI6ICcnLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH1dKTtcbiAgICAgICAgc2lub24uc3R1YihFY2RzYS5wcm90b3R5cGUsICd2ZXJpZnknKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBtZXNzYWdlU2lnbmluZ0NvaW5zLm1hcCgoY29pbk5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRXaXRoQ29pbkZpZWxkID0geyAuLi5leHBlY3RlZCwgY29pbjogJ3RldGgnIH07XG5cbiAgICAgICAgdHNzRXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbihjb2luTmFtZSksIGV0aFdhbGxldERhdGEpO1xuICAgICAgICBjb25zdCB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIHR4IFJlcXVlc3Qgd2l0aCBzaWduTWVzc2FnZSBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgKS5yZXBseSgyMDAsIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IHRzc0V0aFdhbGxldC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VSYXcsXG4gICAgICAgICAgICAgIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0eFJlcXVlc3Quc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBwcmVwYXJlZFRyYW5zYWN0aW9uIGluIHRoZSBtc2dyZXF1ZXN0cyBib2R5IHdoZW4gcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgcHJlcGFyZWRUcmFuc2FjdGlvbiA9ICdiYXNlNjQtcHJlcGFyZWQtdHJhbnNhY3Rpb24tYnl0ZXMnO1xuICAgICAgICAgIGxldCBjYXB0dXJlZEJvZHk6IGFueTtcbiAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LmJ1aWxkU2lnbk1lc3NhZ2VSZXF1ZXN0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgICAgICAgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEsXG4gICAgICAgICAgICAgIHByZXBhcmVkVHJhbnNhY3Rpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5wcmVwYXJlZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbChwcmVwYXJlZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYFske2NvaW5OYW1lfV0gc2hvdWxkIHNpZ24gbWVzc2FnZWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZVRzc1NweSA9IHNpbm9uLnNweSh0c3NFdGhXYWxsZXQsICdzaWduTWVzc2FnZVRzcycgYXMgYW55KTtcbiAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7XG4gICAgICAgICAgICAgICAgdHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcudHhSZXF1ZXN0SWRcbiAgICAgICAgICAgICAgfSZsYXRlc3Q9dHJ1ZWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nXSB9KTtcblxuICAgICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCB0eFJlcXVlc3RJZCwgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEgfSxcbiAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2lnbk1lc3NhZ2Uuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFdpdGhDb2luRmllbGQpO1xuICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25NZXNzYWdlVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduTWVzc2FnZU9wdGlvbnM7XG4gICAgICAgICAgYWN0dWFsQXJnLm1lc3NhZ2U/Lm1lc3NhZ2VFbmNvZGVkPy5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShgXFx1MDAxOUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOlxcbiR7bWVzc2FnZVJhdy5sZW5ndGh9JHttZXNzYWdlUmF3fWApLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGBbJHtjb2luTmFtZX1dIHNob3VsZCBzaWduIG1lc3NhZ2Ugd2hlbiBjdXN0b2RpYW5NZXNzYWdlSWQgaXMgcHJvdmlkZWRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnbk1lc3NhZ2VUc3MnIGFzIGFueSk7XG4gICAgICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgKS5yZXBseSgyMDAsIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogJ3VuaXR0ZXN0JyxcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWduTWVzc2FnZS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkV2l0aENvaW5GaWVsZCk7XG4gICAgICAgICAgY29uc3QgYWN0dWFsQXJnID0gc2lnbk1lc3NhZ2VUc3NTcHkuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdIGFzIFdhbGxldFNpZ25NZXNzYWdlT3B0aW9ucztcbiAgICAgICAgICBhY3R1YWxBcmcubWVzc2FnZT8ubWVzc2FnZUVuY29kZWQ/LnNob3VsZC5lcXVhbChcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGBcXHUwMDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XFxuJHttZXNzYWdlUmF3Lmxlbmd0aH0ke21lc3NhZ2VSYXd9YCkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYFske2NvaW5OYW1lfV0gc2hvdWxkIHNpZ24gbWVzc2FnZSB3aGVuIHR4UmVxdWVzdElkIG5vdCBwcm92aWRlZGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZVRzc1NweSA9IHNpbm9uLnNweSh0c3NFdGhXYWxsZXQsICdzaWduTWVzc2FnZVRzcycgYXMgYW55KTtcbiAgICAgICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS9tc2dyZXF1ZXN0c2ApLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2UgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnbk1lc3NhZ2Uoe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICBtZXNzYWdlOiB7IG1lc3NhZ2VSYXcsIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNpZ25NZXNzYWdlLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRXaXRoQ29pbkZpZWxkKTtcbiAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduTWVzc2FnZVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnbk1lc3NhZ2VPcHRpb25zO1xuICAgICAgICAgIGFjdHVhbEFyZy5tZXNzYWdlPy5tZXNzYWdlRW5jb2RlZD8uc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICAgQnVmZmVyLmZyb20oYFxcdTAwMTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4ke21lc3NhZ2VSYXcubGVuZ3RofSR7bWVzc2FnZVJhd31gKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChgWyR7Y29pbk5hbWV9XSBzaG91bGQgaW5jbHVkZSBwcmVwYXJlZFRyYW5zYWN0aW9uIHdoZW4gc2lnbmluZyBhIGZyZXNoIG1lc3NhZ2UgcmVxdWVzdGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBwcmVwYXJlZFRyYW5zYWN0aW9uID0gJ2Jhc2U2NC1wcmVwYXJlZC10cmFuc2FjdGlvbi1ieXRlcyc7XG4gICAgICAgICAgbGV0IGNhcHR1cmVkQm9keTogYW55O1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICBjYXB0dXJlZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnbk1lc3NhZ2Uoe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICBtZXNzYWdlOiB7IG1lc3NhZ2VSYXcsIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxLCBwcmVwYXJlZFRyYW5zYWN0aW9uIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5wcmVwYXJlZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbChwcmVwYXJlZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gbWVzc2FnZSB3aXRoIGVtcHR5IHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXRcbiAgICAgICAgICAgIC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB7IG1lc3NhZ2VSYXcsIHR4UmVxdWVzdElkLCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSB9LFxuICAgICAgICAgICAgICBwcnY6ICcnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1R5cGVkIERhdGEgU2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGFzaCA9XG4gICAgICAgICcxOTAxNDkzZmJmMmFlMWMyN2MzY2VkMjZhODkwNzBjNmFiNWQzZmJmMzdlZDc3OGRlOTM3OGU3NzAzYjdkMWYxMTZiMzg4MzA3N2E2MTgyNjEyOWI5OGI2MjJlNTRmYzY4YzUwMDhkMWIxYzE2NTUyZTFlZGE2OTE2Zjg3MGQ3MTkyMjAnO1xuICAgICAgY29uc3QgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZzogVHhSZXF1ZXN0ID0ge1xuICAgICAgICB0eFJlcXVlc3RJZDogcmVxSWQudG9TdHJpbmcoKSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3NpZ25NZXNzYWdlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICAgICAgdW5zaWduZWRNZXNzYWdlczogW10sXG4gICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGU6ICdzaWduZWQnLFxuICAgICAgICAgICAgbWVzc2FnZVJhdzogJ2hlbGxvIHdvcmxkJyxcbiAgICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW3sgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgc2hhcmU6ICcnIH1dLFxuICAgICAgICAgICAgY29tYmluZVNpZ1NoYXJlOiAnMDpycnI6c3NzOjMnLFxuICAgICAgICAgICAgdHhIYXNoLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgbGV0IHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlO1xuICAgICAgY29uc3QgbWVzc2FnZVNpZ25pbmdDb2lucyA9IFsndGV0aCcsICd0cG9seWdvbiddO1xuICAgICAgY29uc3QgdHlwZXM6IE1lc3NhZ2VUeXBlcyA9IHtcbiAgICAgICAgRUlQNzEyRG9tYWluOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndmVyc2lvbicsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjaGFpbklkJyxcbiAgICAgICAgICAgIHR5cGU6ICd1aW50MjU2JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICd2ZXJpZnlpbmdDb250cmFjdCcsXG4gICAgICAgICAgICB0eXBlOiAnYWRkcmVzcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgTWVzc2FnZTogW3sgbmFtZTogJ2RhdGEnLCB0eXBlOiAnc3RyaW5nJyB9XSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eXBlZE1lc3NhZ2U6IFR5cGVkTWVzc2FnZTxNZXNzYWdlVHlwZXM+ID0ge1xuICAgICAgICBkb21haW46IHtcbiAgICAgICAgICBuYW1lOiAnYml0Z28nLFxuICAgICAgICAgIHZlcnNpb246ICcxJyxcbiAgICAgICAgICBjaGFpbklkOiAxLFxuICAgICAgICAgIHZlcmlmeWluZ0NvbnRyYWN0OiAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJpbWFyeVR5cGU6ICdNZXNzYWdlJyxcbiAgICAgICAgdHlwZXMsXG4gICAgICAgIG1lc3NhZ2U6IHsgZGF0YTogJ2JpdGdvIHNheXMgaGVsbG8hJyB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR5cGVkRGF0YUJhc2U6IFR5cGVkRGF0YSA9IHtcbiAgICAgICAgdHlwZWREYXRhUmF3OiBKU09OLnN0cmluZ2lmeSh0eXBlZE1lc3NhZ2UpLFxuICAgICAgICB2ZXJzaW9uOiBTaWduVHlwZWREYXRhVmVyc2lvbi5WMyxcbiAgICAgIH07XG5cbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZSA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAnc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UnKTtcbiAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UucmVzb2x2ZXModHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZyk7XG4gICAgICAgIHNhbmRib3hcbiAgICAgICAgICAuc3R1YihLZXljaGFpbnMucHJvdG90eXBlLCAnZ2V0S2V5c0ZvclNpZ25pbmcnKVxuICAgICAgICAgIC5yZXNvbHZlcyhbeyBjb21tb25LZXljaGFpbjogJ3Rlc3QnLCBpZDogJycsIHB1YjogJycsIHR5cGU6ICdpbmRlcGVuZGVudCcgfV0pO1xuICAgICAgICBzaW5vbi5zdHViKEVjZHNhLnByb3RvdHlwZSwgJ3ZlcmlmeScpLnJlc29sdmVzKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHVuc3VwcG9ydGVkIGNvaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR5cGVkRGF0YTogdHlwZWREYXRhQmFzZSxcbiAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnU2lnbiB0eXBlZCBkYXRhIG5vdCBzdXBwb3J0ZWQgZm9yIFRlc3RuZXQgU29sYW5hJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3Igc2lnbiB0eXBlZCBkYXRhIFYxJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eXBlZERhdGEgPSB7IC4uLnR5cGVkRGF0YUJhc2UgfTtcbiAgICAgICAgdHlwZWREYXRhLnZlcnNpb24gPSBTaWduVHlwZWREYXRhVmVyc2lvbi5WMTtcbiAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7XG4gICAgICAgICAgICAgIHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcudHhSZXF1ZXN0SWRcbiAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmddIH0pO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldFxuICAgICAgICAgIC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdTaWduVHlwZWREYXRhIHYxIGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIHNlY3VyaXR5IGNvbmNlcm5zJyk7XG4gICAgICB9KTtcbiAgICAgIG1lc3NhZ2VTaWduaW5nQ29pbnMubWFwKChjb2luTmFtZSkgPT4ge1xuICAgICAgICB0c3NFdGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKGNvaW5OYW1lKSwgZXRoV2FsbGV0RGF0YSk7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdElkID0gdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZy50eFJlcXVlc3RJZDtcbiAgICAgICAgdHlwZWREYXRhQmFzZS50eFJlcXVlc3RJZCA9IHR4UmVxdWVzdElkO1xuICAgICAgICBjb25zdCBleHBlY3RlZDogU2lnbmVkTWVzc2FnZSA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZCxcbiAgICAgICAgICBtZXNzYWdlUmF3OiBKU09OLnN0cmluZ2lmeSh0eXBlZE1lc3NhZ2UpLFxuICAgICAgICAgIHNpZ25hdHVyZTogdHhIYXNoLFxuICAgICAgICAgIHR4SGFzaCxcbiAgICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgICAgbWVzc2FnZUVuY29kZWQ6IHR4SGFzaCxcbiAgICAgICAgfTtcblxuICAgICAgICBkZXNjcmliZShgc2lnbiB0eXBlZCBkYXRhIFYzIGZvciAke2NvaW5OYW1lfWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB0eXBlZERhdGEgPSB7IC4uLnR5cGVkRGF0YUJhc2UgfTtcbiAgICAgICAgICB0eXBlZERhdGEudmVyc2lvbiA9IFNpZ25UeXBlZERhdGFWZXJzaW9uLlYzO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHR5cGVkIGRhdGEgVjMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBzaWduVHlwZWREYXRhVHNzU3B5ID0gc2lub24uc3B5KHRzc0V0aFdhbGxldCwgJ3NpZ25UeXBlZERhdGFUc3MnIGFzIGFueSk7XG4gICAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgICAgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZy50eFJlcXVlc3RJZFxuICAgICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZ10gfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2lnbmVkVHlwZWREYXRhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsQXJnID0gc2lnblR5cGVkRGF0YVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnblR5cGVkRGF0YU9wdGlvbnM7XG4gICAgICAgICAgICBhY3R1YWxBcmcudHlwZWREYXRhPy50eXBlZERhdGFFbmNvZGVkPy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHR4SGFzaCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHNpZ24gdHlwZWQgZGF0YSBWMyB3aGVuIGN1c3RvZGlhbk1lc3NhZ2VJRCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHR5cGVkRGF0YS50eFJlcXVlc3RJZCA9IHR4UmVxdWVzdElkO1xuICAgICAgICAgICAgY29uc3Qgc2lnblR5cGVkRGF0YVRzc1NweSA9IHNpbm9uLnNweSh0c3NFdGhXYWxsZXQsICdzaWduVHlwZWREYXRhVHNzJyBhcyBhbnkpO1xuICAgICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICBgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtcbiAgICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcudHhSZXF1ZXN0SWRcbiAgICAgICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmddIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGEgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogJ3VuaXR0ZXN0JyxcbiAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2lnbmVkVHlwZWREYXRhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsQXJnID0gc2lnblR5cGVkRGF0YVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnblR5cGVkRGF0YU9wdGlvbnM7XG4gICAgICAgICAgICBhY3R1YWxBcmcudHlwZWREYXRhPy50eXBlZERhdGFFbmNvZGVkPy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHR4SGFzaCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gc2lnbiB0eXBlZCBkYXRhIFYzIHdpdGggZW1wdHkgcHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0XG4gICAgICAgICAgICAgIC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgICB0eXBlZERhdGE6IHR5cGVkRGF0YUJhc2UsXG4gICAgICAgICAgICAgICAgcHJ2OiAnJyxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2tleWNoYWluIGRvZXMgbm90IGhhdmUgcHJvcGVydHkgZW5jcnlwdGVkUHJ2Jyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHNpZ24gdHlwZWQgZGF0YSBWMyB3aGVuIHR4UmVxdWVzdElkIG5vdCBwcm92aWRlZCAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkZWxldGUgdHlwZWREYXRhLnR4UmVxdWVzdElkO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhVHNzU3B5ID0gc2lub24uc3B5KHRzc0V0aFdhbGxldCwgJ3NpZ25UeXBlZERhdGFUc3MnIGFzIGFueSk7XG4gICAgICAgICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzYCkucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nKTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaWduZWRUeXBlZERhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduZWRUeXBlZERhdGFUc3NTcHkuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdIGFzIFdhbGxldFNpZ25UeXBlZERhdGFPcHRpb25zO1xuICAgICAgICAgICAgYWN0dWFsQXJnLnR5cGVkRGF0YT8udHlwZWREYXRhRW5jb2RlZD8udG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh0eEhhc2gpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZShgc2lnbiB0eXBlZCBkYXRhIFY0IGZvciAke2NvaW5OYW1lfWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB0eXBlZERhdGEgPSB7IC4uLnR5cGVkRGF0YUJhc2UgfTtcbiAgICAgICAgICB0eXBlZERhdGEudmVyc2lvbiA9IFNpZ25UeXBlZERhdGFWZXJzaW9uLlY0O1xuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0eXBlZCBkYXRhIFY0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHlwZWREYXRhLnR4UmVxdWVzdElkID0gdHhSZXF1ZXN0SWQ7XG4gICAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgICAgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZy50eFJlcXVlc3RJZFxuICAgICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZ10gfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2lnbmVkVHlwZWREYXRhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHR5cGVkIGRhdGEgVjQgd2hlbiBjdXN0b2RpYW5NZXNzYWdlSUQgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0eXBlZERhdGEudHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RJZDtcbiAgICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7XG4gICAgICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgICAgfSZsYXRlc3Q9dHJ1ZWBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nXSB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICBjdXN0b2RpYW5NZXNzYWdlSWQ6ICd1bml0dGVzdCcsXG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICB0eXBlZERhdGEsXG4gICAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNpZ25lZFR5cGVkRGF0YS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIHR5cGVkIGRhdGEgVjQgd2l0aCBlbXB0eSBwcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXRcbiAgICAgICAgICAgICAgLnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICAgIHR5cGVkRGF0YTogdHlwZWREYXRhQmFzZSxcbiAgICAgICAgICAgICAgICBwcnY6ICcnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0eXBlZCBkYXRhIFY0IHdoZW4gdHhSZXF1ZXN0SWQgbm90IHByb3ZpZGVkICcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0eXBlZERhdGEudHhSZXF1ZXN0SWQ7XG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGFUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnblR5cGVkRGF0YVRzcycgYXMgYW55KTtcbiAgICAgICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgKS5yZXBseSgyMDAsIHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcpO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGEgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICB0eXBlZERhdGEsXG4gICAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNpZ25lZFR5cGVkRGF0YS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25lZFR5cGVkRGF0YVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnblR5cGVkRGF0YU9wdGlvbnM7XG4gICAgICAgICAgICBhY3R1YWxBcmcudHlwZWREYXRhPy50eXBlZERhdGFFbmNvZGVkPy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHR4SGFzaCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnU2VuZCBNYW55JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VuZE1hbnlJbnB1dCA9IHtcbiAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHJlcUlkOiBuZXcgUmVxdWVzdFRyYWNlcigpLFxuICAgICAgfTtcblxuICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2VuZCBtYW55JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5yZXNvbHZlcyhzaWduZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBzZW5kTWFueVxuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoc2VuZE1hbnlJbnB1dCk7XG5cbiAgICAgICAgY29uc3Qgc2VuZFR4UmVxdWVzdCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdzZW5kVHhSZXF1ZXN0Jyk7XG4gICAgICAgIHNlbmRUeFJlcXVlc3QucmVzb2x2ZXMoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBzZW5kTWFueVxuICAgICAgICBzZW5kVHhSZXF1ZXN0LmNhbGxlZE9uY2VXaXRoRXhhY3RseShzaWduZWRUcmFuc2FjdGlvbi50eFJlcXVlc3RJZCk7XG5cbiAgICAgICAgY29uc3Qgc2VuZE1hbnkgPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlJbnB1dCk7XG4gICAgICAgIHNlbmRNYW55LnNob3VsZC5kZWVwRXF1YWwoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyB6ZXJvIGFtb3VudCByZWNpcGllbnRzIGZvciBjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5yZXNvbHZlcyhzaWduZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIGNvbnN0IHNlbmRUeFJlcXVlc3QgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAnc2VuZFR4UmVxdWVzdCcpO1xuICAgICAgICBzZW5kVHhSZXF1ZXN0LnJlc29sdmVzKCdzZW5kVHhSZXNwb25zZScpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRNYW55ID0gYXdhaXQgdHNzU29sV2FsbGV0LnNlbmRNYW55KHtcbiAgICAgICAgICB0eXBlOiAnY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICdhdGFBZGRyZXNzJyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnYXRhQWRkcmVzczInLFxuICAgICAgICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgICBzZW5kTWFueS5zaG91bGQuZGVlcEVxdWFsKCdzZW5kVHhSZXNwb25zZScpO1xuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgemVybyBhbW91bnQgcmVjaXBpZW50cyBmb3Igc29sIHRyYW5zZmVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNlbmRNYW55KHtcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgICAnaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gcG9zaXRpdmUgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIG9yIG51bWVyaWMgc3RyaW5nIGV4cGVjdGVkJ1xuICAgICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgbmVnYXRpdmUgYW1vdW50IHJlY2lwaWVudHMgZm9yIGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNlbmRNYW55KHtcbiAgICAgICAgICAgIHR5cGU6ICdjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogJ2F0YUFkZHJlc3MnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogJy0xJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAgICdpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBwb3NpdGl2ZSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8gb3IgbnVtZXJpYyBzdHJpbmcgZXhwZWN0ZWQnXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBub24temVybyBhbW91bnQgcmVjaXBpZW50cyBmb3IgY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2VuZE1hbnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Nsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiAnYXRhQWRkcmVzcycsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXCJpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQgcmVxdWlyZXMgYW1vdW50ICcwJ1wiKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChcInNob3VsZCByZWplY3QgYW1vdW50ICdtYXgnIHJlY2lwaWVudHMgZm9yIGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudFwiLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zZW5kTWFueSh7XG4gICAgICAgICAgICB0eXBlOiAnY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdhdGFBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6ICdtYXgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFwiaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50IHJlcXVpcmVzIGFtb3VudCAnMCdcIik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzZW5kIG1hbnkgYW5kIGNhbGwgc2V0UmVxdWVzdFRyYWNlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ucmVzb2x2ZXMoc2lnbmVkVHJhbnNhY3Rpb24pO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoc2VuZE1hbnlJbnB1dCk7XG5cbiAgICAgICAgY29uc3Qgc2VuZFR4UmVxdWVzdCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdzZW5kVHhSZXF1ZXN0Jyk7XG4gICAgICAgIHNlbmRUeFJlcXVlc3QucmVzb2x2ZXMoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICAgIHNlbmRUeFJlcXVlc3QuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHNpZ25lZFRyYW5zYWN0aW9uLnR4UmVxdWVzdElkKTtcblxuICAgICAgICBjb25zdCBzZXRSZXF1ZXN0VHJhY2VyU3B5ID0gc2lub24uc3B5KGJpdGdvLCAnc2V0UmVxdWVzdFRyYWNlcicpO1xuICAgICAgICBzZXRSZXF1ZXN0VHJhY2VyU3B5LndpdGhBcmdzKHNlbmRNYW55SW5wdXQucmVxSWQpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRNYW55ID0gYXdhaXQgdHNzU29sV2FsbGV0LnNlbmRNYW55KHNlbmRNYW55SW5wdXQpO1xuICAgICAgICBzZW5kTWFueS5zaG91bGQuZGVlcEVxdWFsKCdzZW5kVHhSZXNwb25zZScpO1xuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShzZXRSZXF1ZXN0VHJhY2VyU3B5KTtcbiAgICAgICAgc2V0UmVxdWVzdFRyYWNlclNweS5yZXN0b3JlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIGlzVGVzdFRyYW5zYWN0aW9uIHRocm91Z2ggc2VuZE1hbnkgdG8gcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHNlbmRNYW55SW5wdXRXaXRoVGVzdEZsYWcgPSB7XG4gICAgICAgICAgLi4uc2VuZE1hbnlJbnB1dCxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIGlzVGVzdFRyYW5zYWN0aW9uOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLnJlc29sdmVzKHNpZ25lZFRyYW5zYWN0aW9uKTtcblxuICAgICAgICBjb25zdCBzZW5kVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NlbmRUeFJlcXVlc3QnKTtcbiAgICAgICAgc2VuZFR4UmVxdWVzdC5yZXNvbHZlcygnc2VuZFR4UmVzcG9uc2UnKTtcblxuICAgICAgICBjb25zdCBzZW5kTWFueSA9IGF3YWl0IHRzc1NvbFdhbGxldC5zZW5kTWFueShzZW5kTWFueUlucHV0V2l0aFRlc3RGbGFnKTtcblxuICAgICAgICAvLyBWZXJpZnkgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gd2FzIGNhbGxlZCB3aXRoIGlzVGVzdFRyYW5zYWN0aW9uXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKTtcbiAgICAgICAgY29uc3QgY2FsbEFyZ3MgPSBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF07XG4gICAgICAgIHNob3VsZC5leGlzdChjYWxsQXJncyk7XG4gICAgICAgIGNhbGxBcmdzIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaXNUZXN0VHJhbnNhY3Rpb24nLCB0cnVlKTtcbiAgICAgICAgY2FsbEFyZ3MhLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eXBlJywgJ3RyYW5zZmVyJyk7XG5cbiAgICAgICAgc2VuZE1hbnkuc2hvdWxkLmRlZXBFcXVhbCgnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiB0cmFuc2ZlciBmcm9tIHNlbmRNYW55IGZvciBhcGlWZXJzaW9uPWZ1bGwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRzb2wsIHtcbiAgICAgICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHhSZXN1bHQgPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9TdHJpbmcoKSxcbiAgICAgICAgICBpbnRlbnQ6ICdwYXltZW50JyxcbiAgICAgICAgICBsYXRlc3Q6IGZhbHNlLFxuICAgICAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdGU6ICdkZWxpdmVyZWQnLFxuICAgICAgICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICAgICAgICB1c2VySWQ6ICd1bml0LXRlc3QnLFxuICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldFR5cGU6IHdhbGxldC50eXBlKCkgPz8gJ2hvdCcsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHNpZ25lZFR4UmVzdWx0LnR4UmVxdWVzdElkLFxuICAgICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0ZTogJ2RlbGl2ZXJlZCcsXG4gICAgICAgICAgICAgIHNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgICAgaWQ6ICd0eGlkJyxcbiAgICAgICAgICAgICAgICB0eDogJ3R4JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdW5zaWduZWRUeDogJ3NvbWV0aGluZycgYXMgYW55LFxuICAgICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0cmFuc2ZlciA9IHtcbiAgICAgICAgICBpZDogJ3RyYW5zZmVySWQnLFxuICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICB0eGlkOiAndHhpZCcsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIod2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhzaWduZWRUeFJlc3VsdCk7XG5cbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBlcnNpc3QoKVxuICAgICAgICAgIC5nZXQoYC9hcGkvdjIvd2FsbGV0LyR7d2FsbGV0RGF0YS5pZH0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtzaWduZWRUeFJlc3VsdC50eFJlcXVlc3RJZH0mbGF0ZXN0PXRydWVgKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdF0gfSk7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlVHJhbnNmZXJOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucGVyc2lzdCgpXG4gICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7d2FsbGV0RGF0YS5pZH0vdHhyZXF1ZXN0cy8ke3NpZ25lZFR4UmVzdWx0LnR4UmVxdWVzdElkfS90cmFuc2ZlcnNgKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHRyYW5zZmVyKTtcblxuICAgICAgICBjb25zdCBpbnB1dDogU2VuZE1hbnlPcHRpb25zID0ge1xuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2VuZE1hbnlSZXN1bHQgPSBhd2FpdCB3YWxsZXQuc2VuZE1hbnkoaW5wdXQpO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoaW5wdXQpO1xuICAgICAgICB0eFJlcXVlc3ROb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIGNyZWF0ZVRyYW5zZmVyTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAgIHNlbmRNYW55UmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHR4UmVxdWVzdCxcbiAgICAgICAgICB0cmFuc2ZlcixcbiAgICAgICAgICB0eGlkOiAndHhpZCcsXG4gICAgICAgICAgdHg6ICd0eCcsXG4gICAgICAgICAgc3RhdHVzOiAnc2lnbmVkJyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gcGVuZGluZ0FwcHJvdmFsIGZyb20gc2VuZE1hbnkgZm9yIGFwaVZlcnNpb249ZnVsbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbCwge1xuICAgICAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaWduZWRUeFJlc3VsdCA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHNpZ25lZFR4UmVzdWx0LnR4UmVxdWVzdElkLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9TdHJpbmcoKSxcbiAgICAgICAgICBpbnRlbnQ6ICdwYXltZW50JyxcbiAgICAgICAgICBsYXRlc3Q6IGZhbHNlLFxuICAgICAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLFxuICAgICAgICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICAgICAgICB1c2VySWQ6ICd1bml0LXRlc3QnLFxuICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldFR5cGU6IHdhbGxldC50eXBlKCkgPz8gJ2hvdCcsXG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLXBlbmRpbmctYXBwcm92YWwtaWQnLFxuICAgICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0ZTogJ2luaXRpYWxpemVkJyxcbiAgICAgICAgICAgICAgdW5zaWduZWRUeDogJ3NvbWV0aGluZycgYXMgYW55LFxuICAgICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0cmFuc2ZlciA9IHtcbiAgICAgICAgICBpZDogJ3RyYW5zZmVySWQnLFxuICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICB0eGlkOiAndHhpZCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBlbmRpbmdBcHByb3ZhbCA9IHtcbiAgICAgICAgICBpZDogJ3NvbWUtcGVuZGluZy1hcHByb3ZhbC1pZCcsXG4gICAgICAgICAgd2FsbGV0OiB3YWxsZXQuaWQoKSxcbiAgICAgICAgICBpbmZvOiB7XG4gICAgICAgICAgICB0eXBlOiAndHJhbnNhY3Rpb25SZXF1ZXN0RnVsbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uID0gc2FuZGJveC5zdHViKHdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoc2lnbmVkVHhSZXN1bHQpO1xuXG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wZXJzaXN0KClcbiAgICAgICAgICAuZ2V0KGAvYXBpL3YyL3dhbGxldC8ke3dhbGxldERhdGEuaWR9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7dHhSZXF1ZXN0LnR4UmVxdWVzdElkfSZsYXRlc3Q9dHJ1ZWApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0XSB9KTtcblxuICAgICAgICBjb25zdCBjcmVhdGVUcmFuc2Zlck5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wZXJzaXN0KClcbiAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt3YWxsZXREYXRhLmlkfS90eHJlcXVlc3RzLyR7dHhSZXF1ZXN0LnR4UmVxdWVzdElkfS90cmFuc2ZlcnNgKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHRyYW5zZmVyKTtcblxuICAgICAgICBjb25zdCBnZXRQZW5kaW5nQXBwcm92YWxOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucGVyc2lzdCgpXG4gICAgICAgICAgLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3BlbmRpbmdhcHByb3ZhbHMvJHt0eFJlcXVlc3QucGVuZGluZ0FwcHJvdmFsSWR9YClcbiAgICAgICAgICAucmVwbHkoMjAwLCBwZW5kaW5nQXBwcm92YWwpO1xuXG4gICAgICAgIGNvbnN0IGlucHV0OiBTZW5kTWFueU9wdGlvbnMgPSB7XG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZW5kTWFueVJlc3VsdCA9IGF3YWl0IHdhbGxldC5zZW5kTWFueShpbnB1dCk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmNhbGxlZE9uY2VXaXRoRXhhY3RseShpbnB1dCk7XG4gICAgICAgIHR4UmVxdWVzdE5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgY3JlYXRlVHJhbnNmZXJOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIGdldFBlbmRpbmdBcHByb3ZhbE5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgICBzZW5kTWFueVJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgcGVuZGluZ0FwcHJvdmFsLCB0eFJlcXVlc3QgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHR4UmVxdWVzdElkIGlzIG1pc3NpbmcgZnJvbSBwcmVidWlsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgdHhIZXg6ICdkZWFkYmVlZicsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ucmVzb2x2ZXMoc2lnbmVkVHJhbnNhY3Rpb24pO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2Ugc2VuZE1hbnlcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24uY2FsbGVkT25jZVdpdGhFeGFjdGx5KHNlbmRNYW55SW5wdXQpO1xuXG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zZW5kTWFueShzZW5kTWFueUlucHV0KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eFJlcXVlc3RJZCBtaXNzaW5nIGZyb20gc2lnbmVkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdTdWJtaXQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHN1Ym1pdCB0cmFuc2FjdGlvbiB3aXRoIHR4UmVxdWVzdElkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBub2NrU2VuZFR4ID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucGVyc2lzdChmYWxzZSlcbiAgICAgICAgICAucG9zdCh0c3NTb2xXYWxsZXQudXJsKCcvdHgvc2VuZCcpLnJlcGxhY2UoYmdVcmwsICcnKSlcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IG1lc3NhZ2U6ICdzdWNjZXNzJyB9KTtcblxuICAgICAgICBjb25zdCBzdWJtaXR0ZWRUeCA9IGF3YWl0IHRzc1NvbFdhbGxldC5zdWJtaXRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgIH0pO1xuICAgICAgICBzdWJtaXR0ZWRUeC5zaG91bGQuZGVlcEVxdWFsKHsgbWVzc2FnZTogJ3N1Y2Nlc3MnIH0pO1xuICAgICAgICBub2NrU2VuZFR4LmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gdHhSZXF1ZXN0SWQgYW5kIHR4SGV4IGFyZSBib3RoIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc3VibWl0VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgICB0eEhleDogJ2JlZWYnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ211c3Qgc3VwcGx5IGV4YWN0bHkgb25lIG9mIHR4UmVxdWVzdElkLCB0eEhleCwgb3IgaGFsZlNpZ25lZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHR4UmVxdWVzdElkIGFuZCBoYWxmU2lnbmVkIGFyZSBib3RoIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc3VibWl0VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgICBoYWxmU2lnbmVkOiB7XG4gICAgICAgICAgICAgIHR4SGV4OiAnYmVlZicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ211c3Qgc3VwcGx5IGV4YWN0bHkgb25lIG9mIHR4UmVxdWVzdElkLCB0eEhleCwgb3IgaGFsZlNpZ25lZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHR4SGV4IGFuZCBoYWxmU2lnbmVkIGFyZSBib3RoIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc3VibWl0VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhIZXg6ICdiZWVmJyxcbiAgICAgICAgICAgIGhhbGZTaWduZWQ6IHtcbiAgICAgICAgICAgICAgdHhIZXg6ICdiZWVmJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbXVzdCBzdXBwbHkgZWl0aGVyIHR4SGV4IG9yIGhhbGZTaWduZWQsIGJ1dCBub3QgYm90aCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVHJhbnNmZXIgdG9rZW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICcweDEwMWMzOTI4OTQ2YjJlMWQ5OTc1OWU4ZTVkMzRiNWU5NGMxYThlMmYnLFxuICAgICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICAgIHRva2VuRGF0YToge1xuICAgICAgICAgICAgdG9rZW5OYW1lOiAnZXJjNzIxOmJpdGdvZXJjNzIxJyxcbiAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHg4Mzk3YjA5MTUxNGMxZjdiZWJiOWRlYTZhYzI2N2VhMjNiNTcwNjA1JyxcbiAgICAgICAgICAgIHRva2VuSWQ6ICczOCcsXG4gICAgICAgICAgICB0b2tlblF1YW50aXR5OiAnMScsXG4gICAgICAgICAgICBkZWNpbWFsUGxhY2VzOiAwLFxuICAgICAgICAgICAgdG9rZW5UeXBlOiBUb2tlblR5cGUuRVJDNzIxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICBtYXhGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAxMDAwMDAwMDAwLFxuICAgICAgfTtcblxuICAgICAgaXQoJ2NhbGxpbmcgcHJlYnVpbGR4VHJhbnNhY3Rpb24gc2hvdWxkIGV4ZWN1dGUgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCBwcm9wZXIgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFJlcXVlc3RGdWxsVG9rZW5UcmFuc2ZlciA9IHsgLi4udHhSZXF1ZXN0RnVsbCwgaW50ZW50OiAndHJhbnNmZXJUb2tlbicgfTtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGxUb2tlblRyYW5zZmVyKTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHByZWJ1aWxkVHJhbnNhY3Rpb25cbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIGludGVudFR5cGU6ICd0cmFuc2ZlclRva2VuJyxcbiAgICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnZnVsbCdcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzUG9seWdvbldhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcnRva2VuJyxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncGFzc3BocmFzZTEyMzQ1JyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NQb2x5Z29uV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NQb2x5Z29uV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVydG9rZW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwb3B1bGF0ZSBpbnRlbnQgd2l0aCBFVk0tbGlrZSBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbigndHBvbHlnb24nKSk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igb25seSBwYXNzIGluIHBhcmFtcyBiZWluZyB0ZXN0ZWRcbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbigndHBvbHlnb24nKSwge1xuICAgICAgICAgIGludGVudFR5cGU6ICd0cmFuc2ZlclRva2VuJyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZU9wdGlvbnMnKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtYXhGZWVQZXJHYXMnLCAyMDAwMDAwMDAwKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtYXhQcmlvcml0eUZlZVBlckdhcycsIDEwMDAwMDAwMDApO1xuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdsZW5ndGgnLCAxKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0b2tlbkRhdGEnKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnRva2VuRGF0YSEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Rva2VuUXVhbnRpdHknLCByZWNpcGllbnRzWzBdLnRva2VuRGF0YS50b2tlblF1YW50aXR5KTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnRva2VuRGF0YSEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Rva2VuVHlwZScsIHJlY2lwaWVudHNbMF0udG9rZW5EYXRhLnRva2VuVHlwZSk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS50b2tlbkRhdGEhLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0b2tlbk5hbWUnLCByZWNpcGllbnRzWzBdLnRva2VuRGF0YS50b2tlbk5hbWUpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0udG9rZW5EYXRhIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eShcbiAgICAgICAgICAndG9rZW5Db250cmFjdEFkZHJlc3MnLFxuICAgICAgICAgIHJlY2lwaWVudHNbMF0udG9rZW5EYXRhLnRva2VuQ29udHJhY3RBZGRyZXNzXG4gICAgICAgICk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS50b2tlbkRhdGEhLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0b2tlbklkJywgcmVjaXBpZW50c1swXS50b2tlbkRhdGEudG9rZW5JZCk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS50b2tlbkRhdGEhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdkZWNpbWFsUGxhY2VzJywgcmVjaXBpZW50c1swXS50b2tlbkRhdGEuZGVjaW1hbFBsYWNlcyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwb3B1bGF0ZSBpbnRlbnQgd2l0aCBjYWxsZGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHgxMDFjMzkyODk0NmIyZTFkOTk3NTllOGU1ZDM0YjVlOTRjMWE4ZTJmJyxcbiAgICAgICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICAgICAgZGF0YTogJzB4MDAwMDExMTEyMjIyJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igb25seSBwYXNzIGluIHBhcmFtcyBiZWluZyB0ZXN0ZWRcbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlT3B0aW9ucycpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21heEZlZVBlckdhcycsIDIwMDAwMDAwMDApO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21heFByaW9yaXR5RmVlUGVyR2FzJywgMTAwMDAwMDAwMCk7XG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcsIDEpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0uZGF0YSEuc2hvdWxkLmVxdWFsKCcweDAwMDAxMTExMjIyMicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IHBvcHVsYXRlIGludGVudCB3aXRoIHRva2VuRGF0YSBpZiBjZXJ0YWluIHBhcmFtcyBhcmUgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ3Rwb2x5Z29uJykpO1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweDEwMWMzOTI4OTQ2YjJlMWQ5OTc1OWU4ZTVkMzRiNWU5NGMxYThlMmYnLFxuICAgICAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgICAgICB0b2tlbkRhdGE6IHtcbiAgICAgICAgICAgICAgdG9rZW5OYW1lOiAnZXJjNzIxOmJpdGdvZXJjNzIxJyxcbiAgICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweDgzOTdiMDkxNTE0YzFmN2JlYmI5ZGVhNmFjMjY3ZWEyM2I1NzA2MDUnLFxuICAgICAgICAgICAgICB0b2tlbklkOiAnMzgnLFxuICAgICAgICAgICAgICB0b2tlblF1YW50aXR5OiAnMScsXG4gICAgICAgICAgICAgIGRlY2ltYWxQbGFjZXM6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGxldCBpbnRlbnQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbigndHBvbHlnb24nKSwge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBvbmx5IHBhc3MgaW4gcGFyYW1zIGJlIHRlc3RlZCBmb3JcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGludGVudC5zaG91bGQuZXF1YWwodW5kZWZpbmVkKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5lcXVhbChcbiAgICAgICAgICAgICd0b2tlbiB0eXBlIGFuZCBxdWFudGl0eSBpcyByZXF1aXJlZCB0byByZXF1ZXN0IGEgdHJhbnNhY3Rpb24gd2l0aCBpbnRlbnQgdG8gdHJhbnNmZXIgYSB0b2tlbidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2ZlciBORlRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBwb3B1bGF0ZSBpbnRlbnQgd2l0aCBORlQgdG9rZW4gZGV0YWlscycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMgPSB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJzB4OWZlZjc0OTA1MDY0NDYyNTAxMmEyYzg2Njk3Mzc3NWU3MTIzNzUzYjNlZWYwYTFhNDAzNzQ1M2FjMjZkNzliZicsXG4gICAgICAgICAgICAgIGFtb3VudDogJzEnLFxuICAgICAgICAgICAgICB0b2tlbkRhdGE6IHtcbiAgICAgICAgICAgICAgICB0b2tlblR5cGU6IFRva2VuVHlwZS5ESUdJVEFMX0FTU0VULFxuICAgICAgICAgICAgICAgIHRva2VuUXVhbnRpdHk6ICcxJyxcbiAgICAgICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4YmJjNTYxZmJmYTVkMTA1ZWZkOGRmYjA2YWUzZTdlNWJlNDYzMzExNjViOTlkNTE4ZjA5NGM3MDFlNDA2MDNiNScsXG4gICAgICAgICAgICAgICAgdG9rZW5JZDogJzB4Njc1YjA1M2Q3MmMyNGRjYzZiYzdmMzhjZGQ0NWI0ODQzY2ZiN2FmNjlhMjVhZDIxZDAwMmMzNzYzNTdlOWQ2OScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYmFzZUNvaW4gPSBiaXRnby5jb2luKCd0YXB0Jyk7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVERFNBVXRpbHMuZGVmYXVsdChiaXRnbywgYmFzZUNvaW4pO1xuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiYXNlQ29pbiwgcGFyYW1zKTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ludGVudFR5cGUnLCAncGF5bWVudCcpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnMHg5ZmVmNzQ5MDUwNjQ0NjI1MDEyYTJjODY2OTczNzc1ZTcxMjM3NTNiM2VlZjBhMWE0MDM3NDUzYWMyNmQ3OWJmJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbW91bnQ6IHtcbiAgICAgICAgICAgICAgdmFsdWU6ICcxJyxcbiAgICAgICAgICAgICAgc3ltYm9sOiAndGFwdDpuZnRjb2xsZWN0aW9uMScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9rZW5EYXRhOiB7XG4gICAgICAgICAgICAgIHRva2VuVHlwZTogJ0RpZ2l0YWwgQXNzZXQnLFxuICAgICAgICAgICAgICB0b2tlblF1YW50aXR5OiAnMScsXG4gICAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHhiYmM1NjFmYmZhNWQxMDVlZmQ4ZGZiMDZhZTNlN2U1YmU0NjMzMTE2NWI5OWQ1MThmMDk0YzcwMWU0MDYwM2I1JyxcbiAgICAgICAgICAgICAgdG9rZW5JZDogJzB4Njc1YjA1M2Q3MmMyNGRjYzZiYzdmMzhjZGQ0NWI0ODQzY2ZiN2FmNjlhMjVhZDIxZDAwMmMzNzYzNTdlOWQ2OScsXG4gICAgICAgICAgICAgIHRva2VuTmFtZTogJ3RhcHQ6bmZ0Y29sbGVjdGlvbjEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1dhbGxldCBTaGFyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB1c2Uga2V5Y2hhaW4gcHViIHRvIHNoYXJlIHRzcyB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgICBjb25zdCBlbWFpbCA9ICdzaGFyZXRvQHNka3Rlc3QuY29tJztcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSAndmlldyxzcGVuZCc7XG4gICAgICAgIGNvbnN0IHRvS2V5Y2hhaW4gPSB1dHhvTGliLmJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCdkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyJywgJ2hleCcpKTtcbiAgICAgICAgY29uc3QgcGF0aCA9ICdtLzk5OTk5OS8xLzEnO1xuICAgICAgICBjb25zdCBwdWJrZXkgPSB0b0tleWNoYWluLmRlcml2ZVBhdGgocGF0aCkucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdiaXRnbzEyMzQnO1xuXG4gICAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleSwgcGF0aCB9KTtcblxuICAgICAgICAvLyBjb21tb25QdWIgKyBjb21tb25DaGFpbmNvZGVcbiAgICAgICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSByYW5kb21CeXRlcygzMikudG9TdHJpbmcoJ2hleCcpICsgcmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgY29uc3QgZW5jWHBydjFUc3MgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd4cHJ2MScsIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuICAgICAgICBjb25zdCBnZXRLZXlOb2NrID0gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL3Rzb2wva2V5LyR7dHNzU29sV2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiB0c3NTb2xXYWxsZXQua2V5SWRzKClbMF0sXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jWHBydjFUc3MsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIodHNzU29sV2FsbGV0LCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIG9wdGlvbnMhLmtleWNoYWluIS5wdWIhLnNob3VsZC5ub3QuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEucHViIS5zaG91bGQuZXF1YWwoVHNzVXRpbHMuZ2V0UHVibGljS2V5RnJvbUNvbW1vbktleWNoYWluKGNvbW1vbktleWNoYWluKSk7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldC5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucywgd2FsbGV0UGFzc3BocmFzZSB9KTtcblxuICAgICAgICBzdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgZ2V0S2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBVkFYIHRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBiZ1VybDtcbiAgICBsZXQgYmFzZWNvaW47XG4gICAgbGV0IHdhbGxldERhdGE7XG4gICAgbGV0IHdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLnBlbmRpbmdNb2NrcygpLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2JpdGdvLmdldEVudigpXS51cmk7XG4gICAgICB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NjAwMDAwMDAwJyxcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc3MDAwMDAwMDAnLFxuICAgICAgICBdLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmV0Y2ggY3Jvc3MtY2hhaW4gdXR4b3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RhdmF4cCcpO1xuICAgICAgd2FsbGV0RGF0YS5jb2luID0gJ3RhdmF4cCc7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgd2FsbGV0RGF0YSk7XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgc291cmNlQ2hhaW46ICdDJyB9O1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Nyb3NzQ2hhaW5VbnNwZW50c2A7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQocGF0aClcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHVuc3BlbnQ6IHtcbiAgICAgICAgICAgIG91dHB1dElEOiA3LFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAnLFxuICAgICAgICAgICAgdHhpZDogJ1YzVUJaVFFqMzY0ek5XcXQ4dU1IRDVOanh4WDhUOHFrYmVaWFVSbWpuVm1MRXF6YWInLFxuICAgICAgICAgICAgdGhyZXNob2xkOiAyLFxuICAgICAgICAgICAgYWRkcmVzc2VzOiBbXG4gICAgICAgICAgICAgICdDLWZ1amkxOTlmbHVlZ3J0aHFzNHR2ejQwemFqZnJzeDVtN2R2eTc1YWpmbTYnLFxuICAgICAgICAgICAgICAnQy1mdWppMWdrM200NDQ4OTN5bmwwZ2Z2eGFoamd3M3ZmdG5uOHNwdHlkOWc1JyxcbiAgICAgICAgICAgICAgJ0MtZnVqaTF1amZ6amd3emZ5Z2w2MHFwMmw4cm1nbGczbG5tN3c0MDU5bmNhNScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgb3V0cHV0aWR4OiAnMTExMVhpYVlnJyxcbiAgICAgICAgICAgIGxvY2t0aW1lOiAnMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmcm9tV2FsbGV0OiAnNjM1MDkyZmQ0ZmYzMzE2MTQyZGY2ZTZiN2EwNzhiOTInLFxuICAgICAgICAgIHRvV2FsbGV0OiAnNjM1MDkyZmQ0ZmYzMzE2MTQyZGY2ZTg5MWY2YTdlZTYnLFxuICAgICAgICAgIHRvQWRkcmVzczogJzB4MTI1YzQ0NTFjODcwZjc1MzI2NWIwYjFhZjNjZjZhYjg4ZmZlNDY1NycsXG4gICAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuZmV0Y2hDcm9zc0NoYWluVVRYT3MocGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2VuZE1hbnkgc2hvdWxkIHdvcmsgZm9yIEMgPiBQIGV4cG9ydCB3aXRoIGN1c3RvZGlhbCB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RhdmF4YycpO1xuICAgICAgd2FsbGV0RGF0YS5jb2luID0gJ3RhdmF4Yyc7XG4gICAgICB3YWxsZXREYXRhLnR5cGUgPSAnY3VzdG9kaWFsJztcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcblxuICAgICAgY29uc3QgYWRkcmVzcyA9XG4gICAgICAgICdQLWZ1amkxZTU2cGM0OTY2cXNldnpod2dreW01bDBqZm1hOWxsa3FucnI0Z2h+UC1mdWppMWtxMDV6bTlubWxxOHAzbGQ1NWs3OWRsM3FheTZjMGUzYXRqNTZ2flAtZnVqaTFycDQ2ejMwcWc0NTd4YzNkcGZmeXhjZ3pwZmx4Yzg1bWhram1lMyc7XG4gICAgICBjb25zdCBpbml0aWF0ZVR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAnLCAvLyAwLjAxIEFWQVhcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgaG9wOiB0cnVlLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGluaXRpYXRlVHhQYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvaW5pdGlhdGVgO1xuICAgICAgbGV0IGluaXRpYXRlVHhCb2R5O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChpbml0aWF0ZVR4UGF0aCwgKGJvZHkpID0+IHtcbiAgICAgICAgICBpbml0aWF0ZVR4Qm9keSA9IGJvZHk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICBjb25zdCBmZWVFc3RpbWF0aW9uUGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vdHgvZmVlP2hvcD10cnVlJnJlY2lwaWVudD0ke2FkZHJlc3N9JmFtb3VudD0xMDAwMDAwMDAwMDAwMDAwMCZ0eXBlPUV4cG9ydGA7XG4gICAgICBub2NrKGJnVXJsKS5nZXQoZmVlRXN0aW1hdGlvblBhdGgpLnJlcGx5KDIwMCwge1xuICAgICAgICBmZWVFc3RpbWF0ZTogJzcxODc1MDAwMDAwMDAwMCcsXG4gICAgICAgIGdhc0xpbWl0RXN0aW1hdGU6IDUwMDAwMCxcbiAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuc2VuZE1hbnkoaW5pdGlhdGVUeFBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICAgIF8uaXNNYXRjaChpbml0aWF0ZVR4Qm9keSwge1xuICAgICAgICBob3BQYXJhbXM6IHtcbiAgICAgICAgICBnYXNQcmljZU1heDogNzE4NzUwMDAwMCxcbiAgICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdORlQgVGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGV0aFdhbGxldDogV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAnaHRldGgnLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIF0sXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgZXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbignaHRldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCByZXR1cm4gYWxsIG5mdHMgaW4gdGhlIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdldFRva2VuQmFsYW5jZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL2h0ZXRoL3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfT9hbGxUb2tlbnM9dHJ1ZWApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgICAgIC4uLm5mdFJlc3BvbnNlLFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IG5mdHMgPSBhd2FpdCBldGhXYWxsZXQuZ2V0TmZ0QmFsYW5jZXMoKTtcbiAgICAgIGdldFRva2VuQmFsYW5jZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgbmZ0cy5zaG91bGQubGVuZ3RoKDUpO1xuICAgICAgbmZ0cy5zaG91bGQuY29udGFpbkVxbCh7XG4gICAgICAgIHR5cGU6ICdFUkM3MjEnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIG5hbWU6ICd0ZXJjNzIxOmJpdGdvZXJjNzIxJyxcbiAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4ODM5N2IwOTE1MTRjMWY3YmViYjlkZWE2YWMyNjdlYTIzYjU3MDYwNScsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbGxlY3Rpb25zOiB7fSxcbiAgICAgICAgYmFsYW5jZVN0cmluZzogJzAnLFxuICAgICAgICBjb25maXJtZWRCYWxhbmNlU3RyaW5nOiAnMCcsXG4gICAgICAgIHNwZW5kYWJsZUJhbGFuY2VTdHJpbmc6ICcwJyxcbiAgICAgICAgdHJhbnNmZXJDb3VudDogMCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCB0aHJvdyB3aGVuIGF0dGVtcHRpbmcgdG8gdHJhbnNmZXIgYSBuZnQgY29sbGVjdGlvbiBub3QgaW4gdGhlIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdldFRva2VuQmFsYW5jZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL2h0ZXRoL3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfT9hbGxUb2tlbnM9dHJ1ZWApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgICAgIC4uLm5mdFJlc3BvbnNlLFxuICAgICAgICB9KTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5zZW5kTmZ0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICcxMjNhYmMnLFxuICAgICAgICAgICAgb3RwOiAnMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRva2VuSWQ6ICcxMjMnLFxuICAgICAgICAgICAgdHlwZTogJ0VSQzcyMScsXG4gICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4MTIzYmFkYWRkcmVzcycsXG4gICAgICAgICAgICByZWNpcGllbnRBZGRyZXNzOiAnMHhjMTVhY2MyN2VlNDFmMjY2ODc3YzhmMGM2MWRmNWJjYmM3OTk3ZGY2JyxcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0NvbGxlY3Rpb24gbm90IGZvdW5kIGZvciB0b2tlbiBjb250cmFjdCAweDEyM2JhZGFkZHJlc3MnKTtcbiAgICAgIGdldFRva2VuQmFsYW5jZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgdGhyb3cgd2hlbiBhdHRlbXB0aW5nIHRvIHRyYW5zZmVyIGEgRVJDLTcyMSBuZnQgbm90IG93bmVkIGJ5IHRoZSB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBnZXRUb2tlbkJhbGFuY2VOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi9odGV0aC93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0/YWxsVG9rZW5zPXRydWVgKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgICAgICAuLi5uZnRSZXNwb25zZSxcbiAgICAgICAgICAuLi51bnN1cHBvcnRlZE5mdFJlc3BvbnNlLFxuICAgICAgICB9KTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5zZW5kTmZ0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICcxMjNhYmMnLFxuICAgICAgICAgICAgb3RwOiAnMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRva2VuSWQ6ICcxMjMnLFxuICAgICAgICAgICAgdHlwZTogJ0VSQzcyMScsXG4gICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4ZjVkZTc2MGYyZTkxNjY0N2ZkNzY2YjRhZDllODVmZjk0M2NlM2EyYicsXG4gICAgICAgICAgICByZWNpcGllbnRBZGRyZXNzOiAnMHhjMTVhY2MyN2VlNDFmMjY2ODc3YzhmMGM2MWRmNWJjYmM3OTk3ZGY2JyxcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ1Rva2VuIDEyMyBub3QgZm91bmQgaW4gY29sbGVjdGlvbiAweGY1ZGU3NjBmMmU5MTY2NDdmZDc2NmI0YWQ5ZTg1ZmY5NDNjZTNhMmIgb3IgZG9lcyBub3QgaGF2ZSBhIHNwZW5kYWJsZSBiYWxhbmNlJ1xuICAgICAgICApO1xuICAgICAgZ2V0VG9rZW5CYWxhbmNlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCB0aHJvdyB3aGVuIGF0dGVtcHRpbmcgdG8gdHJhbnNmZXIgRVJDLTExNTUgdG9rZW5zIHdoZW4gdGhlIGFtb3VudCB0cmFuc2ZlcnJlZCBpcyBtb3JlIHRoYW4gdGhlIHNwZW5kYWJsZSBiYWxhbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VG9rZW5CYWxhbmNlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvaHRldGgvd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9P2FsbFRva2Vucz10cnVlYClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICAgICAgLi4ue1xuICAgICAgICAgICAgdW5zdXBwb3J0ZWROZnRzOiB7XG4gICAgICAgICAgICAgICcweGY1ZGU3NjBmMmU5MTY2NDdmZDc2NmI0YWQ5ZTg1ZmY5NDNjZTNhMmInOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0VSQzExNTUnLFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25zOiB7XG4gICAgICAgICAgICAgICAgICAxMTg2NzAzOiAnOScsXG4gICAgICAgICAgICAgICAgICAxMTg2NzA1OiAnMScsXG4gICAgICAgICAgICAgICAgICAxMjk0ODU2OiAnMScsXG4gICAgICAgICAgICAgICAgICAxMjk0ODU3OiAnMScsXG4gICAgICAgICAgICAgICAgICAxMjk0ODU4OiAnMScsXG4gICAgICAgICAgICAgICAgICAxMjk0ODU5OiAnMScsXG4gICAgICAgICAgICAgICAgICAxMjk0ODYwOiAnMScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgICAgbmFtZTogJ011bHRpRmF1Y2V0IE5GVCcsXG4gICAgICAgICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4ZjVkZTc2MGYyZTkxNjY0N2ZkNzY2YjRhZDllODVmZjk0M2NlM2EyYicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuc2VuZE5mdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnMTIzYWJjJyxcbiAgICAgICAgICAgIG90cDogJzAwMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRyaWVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhbW91bnQ6IDEwLFxuICAgICAgICAgICAgICAgIHRva2VuSWQ6ICcxMTg2NzAzJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFtb3VudDogMSxcbiAgICAgICAgICAgICAgICB0b2tlbklkOiAnMTE4NjcwNScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdHlwZTogJ0VSQzExNTUnLFxuICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweGY1ZGU3NjBmMmU5MTY2NDdmZDc2NmI0YWQ5ZTg1ZmY5NDNjZTNhMmInLFxuICAgICAgICAgICAgcmVjaXBpZW50QWRkcmVzczogJzB4YzE1YWNjMjdlZTQxZjI2Njg3N2M4ZjBjNjFkZjViY2JjNzk5N2RmNicsXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdBbW91bnQgMTAgZXhjZWVkcyBzcGVuZGFibGUgYmFsYW5jZSBvZiA5IGZvciB0b2tlbiAxMTg2NzAzJyk7XG4gICAgICBnZXRUb2tlbkJhbGFuY2VOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGEgdGVzdHM6ICcsICgpID0+IHtcbiAgICBsZXQgYWRhV2FsbGV0OiBXYWxsZXQ7XG4gICAgY29uc3QgYWRhQml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYWRhQml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgIGJhc2VBZGRyZXNzOlxuICAgICAgICAgICdhZGRyX3Rlc3QxcTlmYWE1cTN6cjM4d2tkNGtkM3U4amZzaHg5N2p4dndzeXZqZzN0YWM4MjY1MDJubW1ncHp5OHp3YXZtdHZtcmMweW5wd3Z0YXl2Y2FxZ2V5M3pobXN3NDRnN3NocmZyaDknLFxuICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogZmFsc2UsXG4gICAgICAgIG1pbmltdW1GdW5kaW5nOiAxMDAwMDAwLFxuICAgICAgICBsYXN0Q2hhaW5JbmRleDogeyAwOiAwIH0sXG4gICAgICB9LFxuICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhZGFXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0YWRhJyksIHdhbGxldERhdGEpO1xuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7YWRhV2FsbGV0LmNvaW4oKX0va2V5LyR7YWRhV2FsbGV0LmtleUlkcygpWzBdfWApLnRpbWVzKDMpLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgcHViOiAnNWY4V21DMnVXOVNBazdMTVgycjRHMUJ4OE1Nd3g4c2RncG90eUhHb2RpWm8nLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiaE5LM3JnODJQMVQ5NE1hdWVYRkFiQT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImNWNHdVNEV6UGpzPVwiLFwiY3RcIjpcIjlWWlg5OVp0c2I2cDc1Q3hsMmxyY1hCcGxtc3NJQVE5azdaQTgxdmREWUc0TjVkWjM2QlFOV1ZmRG9lbGo5TzMxWHlKK1hyaTBYS0lXVXpsMEtLTGZVRVJwbG10Tm9PQ241aWZKY1p3Q3JPeHBIWlFlM0FKNzAwbzhXbXNyazVIXCJ9JyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHthZGFXYWxsZXQuY29pbigpfS9rZXkvJHthZGFXYWxsZXQua2V5SWRzKClbMV19YCkudGltZXMoMikucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICBwdWI6ICdHMXM0M0pUek5aenFoVW40YU5wd2djYzZ3YjlGVXNaUUQ1SmpmZkc2aXN5ZCcsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcIlVGcnQvUWxJVVIxWGVRYWZQQmFBbHc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCI3VlBCWWFKWFBtOD1cIixcImN0XCI6XCJhakZLdjJ5OHlhSUJYUTM5c0FiQldjbmJpRUV6YmpTNEFvUXRwNWNYWXFqZURSeHQzYUN4ZW1QbTIycG5rSmFDaWpGakpyTUhia21zTmhOWXpIZzVhSEZ1a04rbkVBVnNzeU53SGJ6bGhTbm04L0JWTjUweUFkQUF0V3JlaDhjcFwifScsXG4gICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcblxuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7YWRhV2FsbGV0LmNvaW4oKX0va2V5LyR7YWRhV2FsbGV0LmtleUlkcygpWzJdfWApLnRpbWVzKDIpLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgcHViOiAnR0gxTFYxZTlGZHFHZThVMmM4UE1FY21hM2ZEZWgxa3RjR1ZCckQzQXVGcXgnLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJpSXVXT0hJT0VyRURkaUpuNmc0Nm1nPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiUnpoN1JSSmtzajA9XCIsXCJjdFwiOlwicmNOSUNVZnA5RmFrVDUzbCthZEI2WEt6UzF2TlRjMFFxOWpBdHFueEErU2Nzc2lTNFEwbDNzZ0cvMGdEeTVEYVpLdFhyeUtCRFV2R3NpN2IvZllhRkNVcEFvWm4vVlpUT2hPVU4vbW83WkhiNE9oT1hMMjlZUFBraXJ5QXE5Q3JcIn0nLFxuICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgc2VuZCB1bnNwZW50cyBpbiBwYXltZW50IGludGVudCB3aGVuIHVzaW5nIHNlbmRtYW55JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VuZE1hbnlQYXJhbXMgPSB7XG4gICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnYWRkcmVzcycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB1bnNwZW50czogWyd1bnNwZW50MScsICd1bnNwZW50MiddLFxuICAgICAgfTtcblxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7YWRhV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgKVxuICAgICAgICAucmVwbHkoKHVybCwgYm9keTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gdmFsaWRhdGUgdGhhdCB0aGUgcG9wdWxhdGVkIGludGVudCBoYXMgdW5zcGVudHNcbiAgICAgICAgICBib2R5LmludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgncGF5bWVudCcpO1xuICAgICAgICAgIGJvZHkuaW50ZW50LnVuc3BlbnRzLnNob3VsZC5kZWVwRXF1YWwoWyd1bnNwZW50MScsICd1bnNwZW50MiddKTtcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAyMDAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ3NlcmlhbGl6ZWRUeEhleCcsXG4gICAgICAgICAgICAgICAgICAgIGZlZUluZm86ICdmZWUgaW5mbycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBzdHViIGFsbCBzdGVwcyBhZnRlciB0eHJlcXVlc3QgY3JlYXRpb25cbiAgICAgIHNpbm9uLnN0dWIoYWRhV2FsbGV0LmJhc2VDb2luLCAndmVyaWZ5VHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgIHNpbm9uLnN0dWIoYWRhV2FsbGV0LCAnc2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoeyB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyB9KTtcbiAgICAgIHNpbm9uLnN0dWIoQmFzZVRzc1V0aWxzLmRlZmF1bHQucHJvdG90eXBlLCAnc2VuZFR4UmVxdWVzdCcpLnJlc29sdmVzKCdzZW5kVHhSZXNwb25zZScpO1xuICAgICAgYXdhaXQgYWRhV2FsbGV0LnNlbmRNYW55KHNlbmRNYW55UGFyYW1zKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgc2VuZCBzZW5kZXJBZGRyZXNzIGluIHBheW1lbnQgaW50ZW50IHdoZW4gdXNpbmcgc2VuZG1hbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtcyA9IHtcbiAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHNlbmRlckFkZHJlc3M6ICdzZW5kZXJBZGRyMScsXG4gICAgICB9O1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHthZGFXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApXG4gICAgICAgIC5yZXBseSgodXJsLCBib2R5OiBub2NrLkJvZHkpID0+IHtcbiAgICAgICAgICBjb25zdCBjcmVhdGVUeFJlcXVlc3RCb2R5ID0gYm9keSBhcyBDcmVhdGVUeFJlcXVlc3RCb2R5O1xuICAgICAgICAgIGNyZWF0ZVR4UmVxdWVzdEJvZHkuaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdwYXltZW50Jyk7XG4gICAgICAgICAgY3JlYXRlVHhSZXF1ZXN0Qm9keS5pbnRlbnQuc2VuZGVyQWRkcmVzcz8uc2hvdWxkLmVxdWFsKCdzZW5kZXJBZGRyMScpO1xuXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDIwMCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICAgICAgICB1bnNpZ25lZFR4czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnc2VyaWFsaXplZFR4SGV4JyxcbiAgICAgICAgICAgICAgICAgICAgZmVlSW5mbzogJ2ZlZSBpbmZvJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHNpbm9uLnN0dWIoYWRhV2FsbGV0LmJhc2VDb2luLCAndmVyaWZ5VHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgIHNpbm9uLnN0dWIoYWRhV2FsbGV0LCAnc2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoeyB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyB9KTtcbiAgICAgIHNpbm9uLnN0dWIoQmFzZVRzc1V0aWxzLmRlZmF1bHQucHJvdG90eXBlLCAnc2VuZFR4UmVxdWVzdCcpLnJlc29sdmVzKCdzZW5kVHhSZXNwb25zZScpO1xuICAgICAgYXdhaXQgYWRhV2FsbGV0LnNlbmRNYW55KHNlbmRNYW55UGFyYW1zKS5zaG91bGQuYmUucmVzb2x2ZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0VSQzIwIFRva2VuIEFwcHJvdmFsJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB3YWxsZXQ7XG4gICAgY29uc3Qgd2FsbGV0SWQgPSAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnO1xuICAgIGxldCB0b3BldGhDb2luO1xuICAgIGNvbnN0IHRva2VuTmFtZSA9ICd0b3BldGg6dGVyYzE4ZHAnO1xuICAgIGNvbnN0IGNvaW4gPSAndG9wZXRoJztcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdG9wZXRoQ29pbiA9IGJpdGdvLmNvaW4oJ3RvcGV0aCcpO1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdG9wZXRoQ29pbiwge1xuICAgICAgICBpZDogd2FsbGV0SWQsXG4gICAgICAgIGNvaW46IGNvaW4sXG4gICAgICAgIGtleXM6IFsna2V5aWQxJywgJ2tleWlkMicsICdrZXlpZDMnXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IGFwcHJvdmUgYSB0b2tlbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAncGFzc3dvcmQxMjMnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzNDU2JyxcbiAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWRTaWduZWRUeCA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMzQ1NnNpZ25lZCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBleHBlY3RlZFNlbmRSZXN1bHQgPSB7XG4gICAgICAgIHR4aWQ6ICcweGFiY2RlZicsXG4gICAgICAgIHR4OiAnMHgxMjM0NTZzaWduZWQnLFxuICAgICAgICBzdGF0dXM6ICdzaWduZWQnLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgQVBJXG4gICAgICBjb25zdCBldGhVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2JpdGdvLmdldEVudigpXS51cmk7XG4gICAgICBub2NrKGV0aFVybCkucG9zdChgL2FwaS92Mi8ke2NvaW59L3dhbGxldC8ke3dhbGxldElkfS90b2tlbi9hcHByb3ZhbC9idWlsZGApLnJlcGx5KDIwMCwgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkKTtcblxuICAgICAgLy8gTW9jayB0aGUgZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlIG1ldGhvZFxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UnKS5yZXNvbHZlcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2tleWlkMScsXG4gICAgICAgICAgcHViOiAncHViMScsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkUHJ2JyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICAvLyBNb2NrIHRoZSBzaWduIHRyYW5zYWN0aW9uIG1ldGhvZFxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdzaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhleHBlY3RlZFNpZ25lZFR4KTtcblxuICAgICAgLy8gTW9jayB0aGUgc2VuZCB0cmFuc2FjdGlvbiBtZXRob2RcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnc2VuZFRyYW5zYWN0aW9uJykucmVzb2x2ZXMoZXhwZWN0ZWRTZW5kUmVzdWx0KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmFwcHJvdmVFcmMyMFRva2VuKHdhbGxldFBhc3NwaHJhc2UsIHRva2VuTmFtZSk7XG5cbiAgICAgIHNob3VsZC5leGlzdChyZXN1bHQpO1xuICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRTZW5kUmVzdWx0KTtcblxuICAgICAgLy8gVmVyaWZ5IHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBzaWduVHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHNpZ25QYXJhbXMgPSB3YWxsZXQuc2lnblRyYW5zYWN0aW9uLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgc2lnblBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhQcmVidWlsZCcsIGV4cGVjdGVkQXBwcm92YWxCdWlsZCk7XG4gICAgICBzaWduUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCdrZXljaGFpbicpO1xuICAgICAgc2lnblBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0UGFzc3BocmFzZScsIHdhbGxldFBhc3NwaHJhc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgQVBJIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAncGFzc3dvcmQxMjMnO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ3Rva2VuIGFwcHJvdmFsIGJ1aWxkIGZhaWxlZCc7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIEFQSSB0byByZXR1cm4gYW4gZXJyb3JcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHtjb2lufS93YWxsZXQvJHt3YWxsZXRJZH0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKS5yZXBseVdpdGhFcnJvcihlcnJvck1lc3NhZ2UpO1xuXG4gICAgICBhd2FpdCB3YWxsZXQuYXBwcm92ZUVyYzIwVG9rZW4od2FsbGV0UGFzc3BocmFzZSwgdG9rZW5OYW1lKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGVycm9yTWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB3YWxsZXQgcGFzc3BocmFzZSB2YWxpZGF0aW9uIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnd3JvbmctcGFzc3dvcmQnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzNDU2JyxcbiAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgQVBJXG4gICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7Y29pbn0vd2FsbGV0LyR7d2FsbGV0SWR9L3Rva2VuL2FwcHJvdmFsL2J1aWxkYCkucmVwbHkoMjAwLCBleHBlY3RlZEFwcHJvdmFsQnVpbGQpO1xuXG4gICAgICAvLyBNb2NrIHRoZSBnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UgbWV0aG9kIHRvIHRocm93IGFuIGVycm9yXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigndW5hYmxlIHRvIGRlY3J5cHQga2V5Y2hhaW4gd2l0aCB0aGUgZ2l2ZW4gd2FsbGV0IHBhc3NwaHJhc2UnKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnd2FsbGV0X3Bhc3NwaHJhc2VfaW5jb3JyZWN0JztcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVqZWN0cyhlcnJvcik7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYXBwcm92ZUVyYzIwVG9rZW4od2FsbGV0UGFzc3BocmFzZSwgdG9rZW5OYW1lKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndW5hYmxlIHRvIGRlY3J5cHQga2V5Y2hhaW4gd2l0aCB0aGUgZ2l2ZW4gd2FsbGV0IHBhc3NwaHJhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHNpZ25pbmcgZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdwYXNzd29yZDEyMyc7XG4gICAgICBjb25zdCBleHBlY3RlZEFwcHJvdmFsQnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjM0NTYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2lnbmluZ0Vycm9yID0gbmV3IEVycm9yKCdzaWduaW5nIGZhaWxlZCcpO1xuXG4gICAgICAvLyBNb2NrIHRoZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUElcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHtjb2lufS93YWxsZXQvJHt3YWxsZXRJZH0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKS5yZXBseSgyMDAsIGV4cGVjdGVkQXBwcm92YWxCdWlsZCk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIGdldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZSBtZXRob2RcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVzb2x2ZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdrZXlpZDEnLFxuICAgICAgICAgIHB1YjogJ3B1YjEnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZFBydicsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgLy8gTW9jayB0aGUgc2lnbiB0cmFuc2FjdGlvbiBtZXRob2QgdG8gdGhyb3cgYW4gZXJyb3JcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnc2lnblRyYW5zYWN0aW9uJykucmVqZWN0cyhzaWduaW5nRXJyb3IpO1xuXG4gICAgICBhd2FpdCB3YWxsZXQuYXBwcm92ZUVyYzIwVG9rZW4od2FsbGV0UGFzc3BocmFzZSwgdG9rZW5OYW1lKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHNpZ25pbmdFcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBzZW5kIHRyYW5zYWN0aW9uIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAncGFzc3dvcmQxMjMnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzNDU2JyxcbiAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkU2lnbmVkVHggPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjM0NTZzaWduZWQnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlbmRFcnJvciA9IG5ldyBFcnJvcignc2VuZCBmYWlsZWQnKTtcblxuICAgICAgLy8gTW9jayB0aGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgQVBJXG4gICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7Y29pbn0vd2FsbGV0LyR7d2FsbGV0SWR9L3Rva2VuL2FwcHJvdmFsL2J1aWxkYCkucmVwbHkoMjAwLCBleHBlY3RlZEFwcHJvdmFsQnVpbGQpO1xuXG4gICAgICAvLyBNb2NrIHRoZSBnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UgbWV0aG9kXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlc29sdmVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAna2V5aWQxJyxcbiAgICAgICAgICBwdWI6ICdwdWIxJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWRQcnYnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHNpZ24gdHJhbnNhY3Rpb24gbWV0aG9kXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKGV4cGVjdGVkU2lnbmVkVHgpO1xuXG4gICAgICAvLyBNb2NrIHRoZSBzZW5kIHRyYW5zYWN0aW9uIG1ldGhvZCB0byB0aHJvdyBhbiBlcnJvclxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdzZW5kVHJhbnNhY3Rpb24nKS5yZWplY3RzKHNlbmRFcnJvcik7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoc2VuZEVycm9yKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Ftb3VudCBWYWxpZGF0aW9uIGZvciBzZW5kQ29pbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHdhbGxldDtcbiAgICBsZXQgcGFyYW1zO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndGJ0YycpO1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgICBjb2luOiAndGJ0YycsXG4gICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgICB9KTtcbiAgICAgIHBhcmFtcyA9IHtcbiAgICAgICAgYWRkcmVzczogJzJONFh6NGl0Q2RLS1VSRWl5dEVKMUtHUG9FbktIbUpVSXdxJyxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3Rlc3QxMjMnLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGRlY2ltYWwgYW1vdW50cyBpbiBzZW5kIGNvaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgcGFyYW1zLmFtb3VudCA9IDE1MDAwMDAwMC41NTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5zZW5kKHBhcmFtcylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgYXJndW1lbnQgZm9yIGFtb3VudCAtIEludGVnZXIgZ3JlYXRlciB0aGFuIHplcm8gb3IgbnVtZXJpYyBzdHJpbmcgZXhwZWN0ZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGFtb3VudCBpbiBzZW5kIGNvaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgcGFyYW1zLmFtb3VudCA9ICctMTInO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNlbmQocGFyYW1zKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gSW50ZWdlciBncmVhdGVyIHRoYW4gemVybyBvciBudW1lcmljIHN0cmluZyBleHBlY3RlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgemVybyBpbiBzZW5kIGNvaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgcGFyYW1zLmFtb3VudCA9ICcwJztcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5zZW5kKHBhcmFtcylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgYXJndW1lbnQgZm9yIGFtb3VudCAtIEludGVnZXIgZ3JlYXRlciB0aGFuIHplcm8gb3IgbnVtZXJpYyBzdHJpbmcgZXhwZWN0ZWQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Rva2VuIEFwcHJvdmFsJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBldGhXYWxsZXQ7XG4gICAgY29uc3QgdG9rZW5OYW1lID0gJ3VzZGMnO1xuICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAndGVzdF9wYXNzcGhyYXNlJztcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgZXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGV0aCcpLCB3YWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IGFwcHJvdmUgRVJDMjAgdG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtb2NrVG9rZW5BcHByb3ZhbEJ1aWxkID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6ICcweDEyMzQ1Njc4OTBhYmNkZWYnLFxuICAgICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgICAgZ2FzUHJpY2U6IDIwMDAwMDAwMDAwLFxuICAgICAgICAgICAgZ2FzTGltaXQ6IDYwMDAwLFxuICAgICAgICAgICAgbm9uY2U6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICB0b2tlbk5hbWU6IHRva2VuTmFtZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tTaWduZWRUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgdHhIZXg6ICcweGFiY2RlZjEyMzQ1Njc4OTAnLFxuICAgICAgICBoYWxmU2lnbmVkOiB7XG4gICAgICAgICAgdHhIZXg6ICcweGFiY2RlZjEyMzQ1Njc4OTAnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9ja1NlbnRUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgaGFzaDogJzB4OTg3NjU0MzIxMGZlZGNiYScsXG4gICAgICAgIHN0YXR1czogJ3NpZ25lZCcsXG4gICAgICB9O1xuXG4gICAgICAvLyBNb2NrIHRoZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBlbmRwb2ludFxuICAgICAgY29uc3QgYnVpbGRTY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3RldGgvd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L3Rva2VuL2FwcHJvdmFsL2J1aWxkYClcbiAgICAgICAgLnJlcGx5KDIwMCwgbW9ja1Rva2VuQXBwcm92YWxCdWlsZCk7XG5cbiAgICAgIC8vIE1vY2sgZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlXG4gICAgICBzaW5vbi5zdHViKGV0aFdhbGxldCwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlc29sdmVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgIHBydjogJ3Rlc3RfcHJpdmF0ZV9rZXknLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIC8vIE1vY2sgc2lnblRyYW5zYWN0aW9uXG4gICAgICBzaW5vbi5zdHViKGV0aFdhbGxldCwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKG1vY2tTaWduZWRUcmFuc2FjdGlvbik7XG5cbiAgICAgIC8vIE1vY2sgc2VuZFRyYW5zYWN0aW9uXG4gICAgICBzaW5vbi5zdHViKGV0aFdhbGxldCwgJ3NlbmRUcmFuc2FjdGlvbicpLnJlc29sdmVzKG1vY2tTZW50VHJhbnNhY3Rpb24pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBldGhXYWxsZXQuYXBwcm92ZUVyYzIwVG9rZW4od2FsbGV0UGFzc3BocmFzZSwgdG9rZW5OYW1lKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChtb2NrU2VudFRyYW5zYWN0aW9uKTtcbiAgICAgIGJ1aWxkU2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIGZhaWx1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZFNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvdGV0aC93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKVxuICAgICAgICAucmVwbHkoNDAwLCB7IGVycm9yOiAnSW52YWxpZCB0b2tlbiBuYW1lJyB9KTtcblxuICAgICAgc2lub24uc3R1YihldGhXYWxsZXQsICdnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UnKS5yZXNvbHZlcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICBwcnY6ICd0ZXN0X3ByaXZhdGVfa2V5JyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXQuYXBwcm92ZUVyYzIwVG9rZW4od2FsbGV0UGFzc3BocmFzZSwgJ2ludmFsaWRfdG9rZW4nKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRva2VuIG5hbWUnKTtcblxuICAgICAgYnVpbGRTY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGZvciBhcHByb3ZlRXJjMjBUb2tlbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGV0aFdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbignJywgdG9rZW5OYW1lKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU29sYW5hIEluc3RydWN0aW9uIEZsb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcblxuICAgIC8vIFNldCB1cCB0ZXN0IGRhdGEgYW5kIHdhbGxldHNcbiAgICBjb25zdCB0c29sID0gYml0Z28uY29pbigndHNvbCcpO1xuICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJyxcbiAgICAgIGNvaW46ICd0c29sJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgY29uc3QgdHNzU29sV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbCwgd2FsbGV0RGF0YSk7XG4gICAgY29uc3QgY3VzdG9kaWFsVHNzU29sV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbCwge1xuICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgIHRyYW5zYWN0aW9uczogW10sXG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgIH0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICB1bnNpZ25lZFR4czogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIHNpZ25hYmxlSGV4OiAnZGVhZGJlZWYnLFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGVzdEN1c3RvbUluc3RydWN0aW9uID0ge1xuICAgICAgcHJvZ3JhbUlkOiAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnLFxuICAgICAga2V5czogW1xuICAgICAgICB7XG4gICAgICAgICAgcHVia2V5OiAnRGZYeWdTbTRqQ3lOQ3liVllZSzZEd3ZXcWpLZWU4cGJEbUpHY0xXTkRYamgnLFxuICAgICAgICAgIGlzU2lnbmVyOiB0cnVlLFxuICAgICAgICAgIGlzV3JpdGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwdWJrZXk6ICdFczl2TUZyemFDRVJtSmZyRjRIMkZZRDRLQ29Oa1kxMU1jQ2U4QmVud05ZQicsXG4gICAgICAgICAgaXNTaWduZXI6IGZhbHNlLFxuICAgICAgICAgIGlzV3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhdGE6ICczQnhzM3p0NktLNWhOJyxcbiAgICB9O1xuXG4gICAgY29uc3QgdGVzdFJlY2lwaWVudHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6ICdEZlh5Z1NtNGpDeU5DeWJWWVlLNkR3dldxaktlZThwYkRtSkdjTFdORFhqaCcsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMDAnLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgZGVzY3JpYmUoJ3ByZWJ1aWxkVHJhbnNhY3Rpb24gd2l0aCBzb2xJbnN0cnVjdGlvbiB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzIGZvciBjdXN0b20gaW5zdHJ1Y3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xJbnN0cnVjdGlvbiB3aXRoIGVtcHR5IHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbXVsdGlwbGUgY3VzdG9tIGluc3RydWN0aW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kSW5zdHJ1Y3Rpb24gPSB7XG4gICAgICAgICAgcHJvZ3JhbUlkOiAnMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjInLFxuICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHVia2V5OiAnRXM5dk1GcnphQ0VSbUpmckY0SDJGWUQ0S0NvTmtZMTFNY0NlOEJlbndOWUInLFxuICAgICAgICAgICAgICBpc1NpZ25lcjogZmFsc2UsXG4gICAgICAgICAgICAgIGlzV3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZGF0YTogJ3Rlc3REYXRhMTIzJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uLCBzZWNvbmRJbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb24sIHNlY29uZEluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb24sIHNlY29uZEluc3RydWN0aW9uXSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc29sSW5zdHJ1Y3Rpb24gd2l0aCBtZW1vIHBhcmFtZXRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc29sSW5zdHJ1Y3Rpb24gd2l0aCBwZW5kaW5nIGFwcHJvdmFsIElEJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh7IC4uLnR4UmVxdWVzdCwgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLCBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnIH0pO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBlbXB0eSBzb2xJbnN0cnVjdGlvbnMgYXJyYXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW10sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGAnc29sSW5zdHJ1Y3Rpb25zJyBvciAnc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhJyBpcyByZXF1aXJlZCBmb3IgY3VzdG9tVHggaW50ZW50YCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdXBwb3J0IHNvbEluc3RydWN0aW9uIGZvciBjb2xkIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHR4UmVxdWVzdC53YWxsZXRUeXBlID0gJ2NvbGQnO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcmVidWlsZFRyYW5zYWN0aW9uIHdpdGggc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBnZXRUZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnNpb25lZEluc3RydWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwcm9ncmFtSWRJbmRleDogMTAsXG4gICAgICAgICAgICAgIGFjY291bnRLZXlJbmRleGVzOiBbMCwgMSwgMl0sXG4gICAgICAgICAgICAgIGRhdGE6ICcwMTAyMDMwNDA1JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByb2dyYW1JZEluZGV4OiAxMSxcbiAgICAgICAgICAgICAgYWNjb3VudEtleUluZGV4ZXM6IFswLCAzLCA0LCA1XSxcbiAgICAgICAgICAgICAgZGF0YTogJzA2MDcwODA5MGEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFkZHJlc3NMb29rdXBUYWJsZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWNjb3VudEtleTogJzJzazZiVmhqTjUzaHo3c3FFNzJlcUh2aFBmU2Mxc25aenNKUjZ5QTVoRjdqJyxcbiAgICAgICAgICAgICAgd3JpdGFibGVJbmRleGVzOiBbMCwgMV0sXG4gICAgICAgICAgICAgIHJlYWRvbmx5SW5kZXhlczogWzIsIDNdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXRpY0FjY291bnRLZXlzOiBbXG4gICAgICAgICAgICAnNWhyNWZpc1BpNkRYTnV1UnBtNVhVYnpwaUVubWR5eFh1QkRUd3p3Wmo1UGUnLFxuICAgICAgICAgICAgJzJzazZiVmhqTjUzaHo3c3FFNzJlcUh2aFBmU2Mxc25aenNKUjZ5QTVoRjdqJyxcbiAgICAgICAgICAgICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtZXNzYWdlSGVhZGVyOiB7XG4gICAgICAgICAgICBudW1SZXF1aXJlZFNpZ25hdHVyZXM6IDEsXG4gICAgICAgICAgICBudW1SZWFkb25seVNpZ25lZEFjY291bnRzOiAwLFxuICAgICAgICAgICAgbnVtUmVhZG9ubHlVbnNpZ25lZEFjY291bnRzOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIGNvcnJlY3QgcGFyYW1ldGVycyBmb3IgdmVyc2lvbmVkIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0gZ2V0VGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpO1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHdpdGggZW1wdHkgcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSA9IGdldFRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKTtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgd2l0aCBtZW1vIHBhcmFtZXRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSA9IGdldFRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKTtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHdpdGggcGVuZGluZyBhcHByb3ZhbCBJRCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSA9IGdldFRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKTtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3QsIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJywgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyB9KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgZW1wdHkgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zIGFycmF5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHtcbiAgICAgICAgICAgICAgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zOiBbXSxcbiAgICAgICAgICAgICAgYWRkcmVzc0xvb2t1cFRhYmxlczogW10sXG4gICAgICAgICAgICAgIHN0YXRpY0FjY291bnRLZXlzOiBbJ3Rlc3QnXSxcbiAgICAgICAgICAgICAgbWVzc2FnZUhlYWRlcjogeyBudW1SZXF1aXJlZFNpZ25hdHVyZXM6IDEsIG51bVJlYWRvbmx5U2lnbmVkQWNjb3VudHM6IDAsIG51bVJlYWRvbmx5VW5zaWduZWRBY2NvdW50czogMCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYCdzb2xJbnN0cnVjdGlvbnMnIG9yICdzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEnIGlzIHJlcXVpcmVkIGZvciBjdXN0b21UeCBpbnRlbnRgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQXB0b3MgQ3VzdG9tIHRyYW5zYWN0aW9uIEZsb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcblxuICAgIC8vIFNldCB1cCB0ZXN0IGRhdGEgYW5kIHdhbGxldHNcbiAgICBjb25zdCB0YXB0ID0gYml0Z28uY29pbigndGFwdCcpO1xuICAgIGNvbnN0IGFwdG9zV2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDEnLFxuICAgICAgY29pbjogJ3RhcHQnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzMnLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDMnLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDgnLFxuICAgICAgXSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCB0c3NBcHRvc1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRhcHQsIGFwdG9zV2FsbGV0RGF0YSk7XG4gICAgY29uc3QgY3VzdG9kaWFsVHNzQXB0b3NXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0YXB0LCB7XG4gICAgICAuLi5hcHRvc1dhbGxldERhdGEsXG4gICAgICB0eXBlOiAnY3VzdG9kaWFsJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcblxuICAgIGNvbnN0IGFwdG9zVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgIHRyYW5zYWN0aW9uczogW10sXG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgIH0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICB1bnNpZ25lZFR4czogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBzaWduYWJsZUhleDogJ2FwdG9zZGVhZGJlZWYnLFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsID0ge1xuICAgICAgbW9kdWxlTmFtZTogJzB4MTo6Y29pbicsXG4gICAgICBmdW5jdGlvbk5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICB0eXBlQXJndW1lbnRzOiBbJzB4MTo6YXB0b3NfY29pbjo6QXB0b3NDb2luJ10sXG4gICAgICBmdW5jdGlvbkFyZ3VtZW50czogWycweDc0MmQzNUNjNjYzNEMwNTMyOTI1YTNiOEQ0MDBFNjVBQUQ4MDFjMGInLCAnMTAwMDAwMCddLFxuICAgIH07XG5cbiAgICBjb25zdCB0ZXN0QXB0b3NSZWNpcGllbnRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiAnMHg3NDJkMzVDYzY2MzRDMDUzMjkyNWEzYjhENDAwRTY1QUFEODAxYzBiJyxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwMCcsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBkZXNjcmliZSgncHJlYnVpbGRUcmFuc2FjdGlvbiB3aXRoIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb24gdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIGNvcnJlY3QgcGFyYW1ldGVycyBmb3IgY3VzdG9tIHNtYXJ0IGNvbnRyYWN0IGNhbGwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKGFwdG9zVHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzQXB0b3NXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc0FwdG9zV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDEwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uIHdpdGggZW1wdHkgcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoYXB0b3NUeFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDEwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBjdXN0b20gc21hcnQgY29udHJhY3QgY2FsbCB3aXRoIHR5cGUgYXJndW1lbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhY2NvdW50Q3JlYXRpb25DYWxsID0ge1xuICAgICAgICAgIG1vZHVsZU5hbWU6ICcweDE6OmFwdG9zX2FjY291bnQnLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogJ2NyZWF0ZV9hY2NvdW50JyxcbiAgICAgICAgICB0eXBlQXJndW1lbnRzOiBbXSxcbiAgICAgICAgICBmdW5jdGlvbkFyZ3VtZW50czogWycweDEyM2RlZjQ1NmFiYzc4OWZlZDAxMjM0NWFiY2RlZjY3ODkwJ10sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoYXB0b3NUeFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogYWNjb3VudENyZWF0aW9uQ2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBhY2NvdW50Q3JlYXRpb25DYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBhY2NvdW50Q3JlYXRpb25DYWxsLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb24gd2l0aCBBQkkgaW5mb3JtYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUNhbGxXaXRoQWJpID0ge1xuICAgICAgICAgIC4uLnRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICBhYmk6IHtcbiAgICAgICAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiAncHVibGljJyxcbiAgICAgICAgICAgIGlzX2VudHJ5OiB0cnVlLFxuICAgICAgICAgICAgZ2VuZXJpY190eXBlX3BhcmFtczogW10sXG4gICAgICAgICAgICBwYXJhbXM6IFsnYWRkcmVzcycsICd1NjQnXSxcbiAgICAgICAgICAgIHJldHVybjogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyhhcHRvc1R4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBjdXN0b21DYWxsV2l0aEFiaSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBjdXN0b21DYWxsV2l0aEFiaSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NBcHRvc1dhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzQXB0b3NXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICAgICAgdHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogY3VzdG9tQ2FsbFdpdGhBYmksXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgYXB0b3NDdXN0b21UcmFuc2FjdGlvbiB3aXRoIHBlbmRpbmcgYXBwcm92YWwgSUQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHtcbiAgICAgICAgICAuLi5hcHRvc1R4UmVxdWVzdCxcbiAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsXG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsSWQ6ICdhcHRvcy1hcHByb3ZhbC1pZCcsXG4gICAgICAgIH0pO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCBjdXN0b2RpYWxUc3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiBjdXN0b2RpYWxUc3NBcHRvc1dhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogY3VzdG9kaWFsVHNzQXB0b3NXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICAgICAgdHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiAnYXB0b3MtYXBwcm92YWwtaWQnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIG1pc3NpbmcgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzQXB0b3NXYWxsZXRcbiAgICAgICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYCdhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zJyBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgY3VzdG9tVHggaW50ZW50YCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb24gZm9yIGNvbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgYXB0b3NUeFJlcXVlc3Qud2FsbGV0VHlwZSA9ICdjb2xkJztcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoYXB0b3NUeFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NBcHRvc1dhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzQXB0b3NXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICAgICAgdHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzdGFuZGFyZCBBcHRvcyB0cmFuc2ZlciB3aXRob3V0IGJyZWFraW5nIGN1c3RvbSBmdW5jdGlvbmFsaXR5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdGFuZGFyZFRyYW5zZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgICAuLi5hcHRvc1R4UmVxdWVzdCxcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHN0YW5kYXJkVHJhbnNmZXJSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzQXB0b3NXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc0FwdG9zV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDEwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMgc3RydWN0dXJlIGZvciBzbWFydCBjb250cmFjdCBjYWxscycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaW52YWxpZFBhcmFtcyA9IHtcbiAgICAgICAgICBtb2R1bGVOYW1lOiAnMHgxOjpjb2luJyxcbiAgICAgICAgICAvLyBNaXNzaW5nIHJlcXVpcmVkIGZ1bmN0aW9uTmFtZVxuICAgICAgICAgIHR5cGVBcmd1bWVudHM6IFsnMHgxOjphcHRvc19jb2luOjpBcHRvc0NvaW4nXSxcbiAgICAgICAgICBmdW5jdGlvbkFyZ3VtZW50czogWycweDc0MmQzNUNjNjYzNEMwNTMyOTI1YTNiOEQ0MDBFNjVBQUQ4MDFjMGInLCAnMTAwMDAwMCddLFxuICAgICAgICB9IGFzIGFueTsgLy8gVHlwZSBhc3NlcnRpb24gdG8gdGVzdCBpbnZhbGlkIHBhcmFtc1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlamVjdHMobmV3IEVycm9yKCdGdW5jdGlvbiBuYW1lIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogaW52YWxpZFBhcmFtcyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwcm9taXNlIHRvIGJlIHJlamVjdGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZS5zaG91bGQuZXF1YWwoJ0Z1bmN0aW9uIG5hbWUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2VXaXRoKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNlcXVlbmNlSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjb21tZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiB1bmRlZmluZWQsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogaW52YWxpZFBhcmFtcyxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIG5vbmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgZmVlT3B0aW9uczogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXBncmFkZUVuY3J5cHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0SWQgPSB3YWxsZXREYXRhLmlkO1xuICAgIGNvbnN0IFt1c2VyS2V5SWQsIGJhY2t1cEtleUlkLCBiaXRnb0tleUlkXSA9IHdhbGxldERhdGEua2V5cztcbiAgICBjb25zdCBwYXNzcGhyYXNlID0gJ3dhbGxldFBhc3NwaHJhc2UnO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUHJldmVudCBsZWZ0b3ZlciBpbnRlcmNlcHRvcnMgZnJvbSBibGVlZGluZyBpbnRvIG90aGVyIHN1aXRlcyBpbiB0aGUgZmlsZS5cbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG5vY2tVbmxvY2sodGltZXMgPSAxKSB7XG4gICAgICByZXR1cm4gbm9jayhiZ1VybCkucG9zdCgnL2FwaS92MS91c2VyL3VubG9jaycpLnRpbWVzKHRpbWVzKS5yZXBseSgyMDAsIHt9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub2NrS2V5Y2hhaW4oaWQ6IHN0cmluZywga2V5Y2hhaW46IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi90YnRjL2tleS8ke2lkfWApXG4gICAgICAgIC5yZXBseSgyMDAsIHsgaWQsIHB1YjogJ3B1YicsIHR5cGU6ICdpbmRlcGVuZGVudCcsIC4uLmtleWNoYWluIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vY2tQZWNGZXRjaChwZWM6IHN0cmluZykge1xuICAgICAgcmV0dXJuIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3RidGMvd2FsbGV0LyR7d2FsbGV0SWR9L3Bhc3Njb2RlcmVjb3ZlcnlgKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHJlY292ZXJ5SW5mbzogeyBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiBwZWMgfSB9KTtcbiAgICB9XG5cbiAgICBpdCgncmUtZW5jcnlwdHMgYm90aCB1c2VyIGFuZCBiYWNrdXAga2V5cyBhbmQgUFVUcyB0aGVtIGFzIHYyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlckVuYyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBFbmMgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgIG5vY2tLZXljaGFpbih1c2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlckVuYyB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnLCBlbmNyeXB0ZWRQcnY6IGJhY2t1cEVuYyB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcblxuICAgICAgY29uc3QgcHV0czogQXJyYXk8eyB1cmw6IHN0cmluZzsgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4gPSBbXTtcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wdXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt1c2VyS2V5SWR9YCwgKGJvZHkpID0+IHtcbiAgICAgICAgICBwdXRzLnB1c2goeyB1cmw6IHVzZXJLZXlJZCwgYm9keSB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnB1dChgL2FwaS92Mi90YnRjL2tleS8ke2JhY2t1cEtleUlkfWAsIChib2R5KSA9PiB7XG4gICAgICAgICAgcHV0cy5wdXNoKHsgdXJsOiBiYWNrdXBLZXlJZCwgYm9keSB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjLXh5eicgfSk7XG5cbiAgICAgIGFzc2VydC5vayhyZXN1bHQgPT09IHVuZGVmaW5lZCwgJ25vIFBERiBnZW5lcmF0b3Ig4oaSIHJldHVybnMgdW5kZWZpbmVkJyk7XG4gICAgICBwdXRzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIGNvbnN0IHVzZXJQdXQgPSBwdXRzLmZpbmQoKHApID0+IHAudXJsID09PSB1c2VyS2V5SWQpITtcbiAgICAgIEpTT04ucGFyc2UodXNlclB1dC5ib2R5LmVuY3J5cHRlZFBydiBhcyBzdHJpbmcpLnYuc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgSlNPTi5wYXJzZSh1c2VyUHV0LmJvZHkub3JpZ2luYWxFbmNyeXB0ZWRQcnYgYXMgc3RyaW5nKS52LnNob3VsZC5lcXVhbCgyKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBuZWl0aGVyIHBhc3NwaHJhc2Ugbm9yIGJveEQgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oe30pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3Bhc3NwaHJhc2UuKmJveEQvKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZm9yIGFuIE1QQ3YyIHdhbGxldCB3aGVuIGJveEEgb3IgYm94QiBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1wY1dhbGxldERhdGEgPSB7IC4uLndhbGxldERhdGEsIG11bHRpc2lnVHlwZVZlcnNpb246ICdNUEN2MicgYXMgY29uc3QgfTtcbiAgICAgIGNvbnN0IG1wY1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCBtcGNXYWxsZXREYXRhKTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgLy8gUEVDIGZldGNoIGhhcHBlbnMgYmVmb3JlIHRoZSBNUEN2MiB2YWxpZGF0aW9uIHNob3J0LWNpcmN1aXRzIOKAlCBhbGxvdyB0aGUgY2FsbCB0byBub29wXG4gICAgICBub2NrUGVjRmV0Y2goJ3BlYycpO1xuXG4gICAgICBhd2FpdCBtcGNXYWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9NUEN2Mi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlLWVuY3J5cHRzIGJveEEgYW5kIGJveEIgYXMgcmVkdWNlZEVuY3J5cHRlZFBydiBvbiB0aGUga2V5Y2hhaW5zIGZvciBNUEN2MiB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXBjV2FsbGV0RGF0YSA9IHsgLi4ud2FsbGV0RGF0YSwgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyBhcyBjb25zdCB9O1xuICAgICAgY29uc3QgbXBjV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIG1wY1dhbGxldERhdGEpO1xuICAgICAgY29uc3QgdXNlckVuYyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBFbmMgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBib3hBID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclJlZHVjZWRQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBib3hCID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUmVkdWNlZFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyRW5jIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcsIGVuY3J5cHRlZFBydjogYmFja3VwRW5jIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuICAgICAgbm9jayhiZ1VybCkucHV0KGAvYXBpL3YyL3RidGMva2V5LyR7dXNlcktleUlkfWApLnJlcGx5KDIwMCwge30pO1xuICAgICAgbm9jayhiZ1VybCkucHV0KGAvYXBpL3YyL3RidGMva2V5LyR7YmFja3VwS2V5SWR9YCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGNvbnN0IGNhcHR1cmVkUGRmUGFyYW1zOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSBbXTtcbiAgICAgIGNvbnN0IGdlbmVyYXRlUGRmID0gYXN5bmMgKHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgICAgY2FwdHVyZWRQZGZQYXJhbXMucHVzaChwYXJhbXMpO1xuICAgICAgICByZXR1cm4geyBvdXRwdXQ6ICgpID0+IG5ldyBBcnJheUJ1ZmZlcigwKSB9O1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgbXBjV2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHtcbiAgICAgICAgcGFzc3BocmFzZSxcbiAgICAgICAgYm94QSxcbiAgICAgICAgYm94QixcbiAgICAgICAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycsXG4gICAgICAgIGdlbmVyYXRlUGRmLFxuICAgICAgfSk7XG5cbiAgICAgIGNhcHR1cmVkUGRmUGFyYW1zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGNvbnN0IHsgdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiB9ID0gY2FwdHVyZWRQZGZQYXJhbXNbMF0gYXMge1xuICAgICAgICB1c2VyS2V5Y2hhaW46IHsgcmVkdWNlZEVuY3J5cHRlZFBydj86IHN0cmluZyB9O1xuICAgICAgICBiYWNrdXBLZXljaGFpbjogeyByZWR1Y2VkRW5jcnlwdGVkUHJ2Pzogc3RyaW5nIH07XG4gICAgICB9O1xuICAgICAgYXNzZXJ0Lm9rKHVzZXJLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2LCAndXNlciByZWR1Y2VkRW5jcnlwdGVkUHJ2IG11c3QgYmUgc2V0Jyk7XG4gICAgICBKU09OLnBhcnNlKHVzZXJLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2ISkudi5zaG91bGQuZXF1YWwoMik7XG4gICAgICBhc3NlcnQub2soYmFja3VwS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydiwgJ2JhY2t1cCByZWR1Y2VkRW5jcnlwdGVkUHJ2IG11c3QgYmUgc2V0Jyk7XG4gICAgICBKU09OLnBhcnNlKGJhY2t1cEtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYhKS52LnNob3VsZC5lcXVhbCgyKTtcbiAgICB9KTtcblxuICAgIGl0KCdza2lwcyBrZXljaGFpbnMgdGhhdCBhcmUgYWxyZWFkeSB2MicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMiA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDIgfSk7XG4gICAgICBjb25zdCBiYWNrdXBWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjIgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcblxuICAgICAgY29uc3QgcHV0czogc3RyaW5nW10gPSBbXTtcbiAgICAgIC8vIE9ubHkgdGhlIGJhY2t1cCBrZXkgc2hvdWxkIGJlIFBVVCDigJQgdXNlciBpcyBhbHJlYWR5IHYyLlxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnB1dChuZXcgUmVnRXhwKGAvYXBpL3YyL3RidGMva2V5Lygke3VzZXJLZXlJZH18JHtiYWNrdXBLZXlJZH0pYCkpXG4gICAgICAgIC5yZXBseSgyMDAsIGZ1bmN0aW9uICh1cmkpIHtcbiAgICAgICAgICBwdXRzLnB1c2godXJpKTtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KTtcblxuICAgICAgcHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBwdXRzWzBdLnNob3VsZC5jb250YWluRXFsKGJhY2t1cEtleUlkKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIGJhY2t1cCBrZXljaGFpbiB3aXRoIG5vIGVuY3J5cHRlZFBydiAocHVibGljLWtleS1vbmx5KSB3aXRob3V0IFBVVGluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgIG5vY2tLZXljaGFpbih1c2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlclYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcgfSk7IC8vIHB1YmxpYyBrZXkgb25seVxuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuICAgICAgbm9jayhiZ1VybCkucHV0KGAvYXBpL3YyL3RidGMva2V5LyR7dXNlcktleUlkfWApLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KTtcbiAgICAgIC8vIElmIHdlIHJlYWNoZWQgaGVyZSB3aXRob3V0IHVuaGFuZGxlZCBub2NrIGVycm9yLCB0aGUgZmxvdyBjb21wbGV0ZWQgd2l0aG91dCBQVVRpbmcgdGhlIGJhY2t1cC5cbiAgICB9KTtcblxuICAgIGl0KCdyZS1lbmNyeXB0cyBhIGJhY2t1cCBrZXkgZnJvbSBib3hCIHdpdGhvdXQgUFVUaW5nIHRvIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgYm94QiA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJyB9KTsgLy8gbm8gZW5jcnlwdGVkUHJ2IHNlcnZlci1zaWRlXG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt1c2VyS2V5SWR9YCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIGJveEIsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Rlcml2ZXMgdGhlIHBhc3NwaHJhc2UgZnJvbSBib3hEIHdoZW4gcGFzc3BocmFzZSBpcyBvbWl0dGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGVjID0gJ3BlYy1kZXJpdmUnO1xuICAgICAgY29uc3QgZGVyaXZlZFBhc3MgPSAnZGVyaXZlZEZyb21Cb3hEJztcbiAgICAgIGNvbnN0IGJveEQgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6IGRlcml2ZWRQYXNzLCBwYXNzd29yZDogcGVjLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogZGVyaXZlZFBhc3MsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgYmFja3VwVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBQcnYnLCBwYXNzd29yZDogZGVyaXZlZFBhc3MsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICBub2NrUGVjRmV0Y2gocGVjKTtcbiAgICAgIG5vY2tLZXljaGFpbih1c2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlclYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcsIGVuY3J5cHRlZFBydjogYmFja3VwVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQobmV3IFJlZ0V4cChgL2FwaS92Mi90YnRjL2tleS9gKSkudHdpY2UoKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgLy8gTm8gcGFzc3BocmFzZSDigJQgbXVzdCBiZSBkZXJpdmVkIGZyb20gYm94RC5cbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IGJveEQgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWFrZXMgbm8gUFVUIGNhbGxzIGluIGRyeS1ydW4gbW9kZSBhbmQgcmV0dXJucyB1bmRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgYmFja3VwVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIC8vIE5vIHVubG9jaywgbm8gUEVDLCBubyBQVVRzIGV4cGVjdGVkLlxuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgZHJ5UnVuOiB0cnVlIH0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB1bmxvY2sgcmVqZWN0cyB3aXRoIGFuIGVycm9yIHVucmVsYXRlZCB0byBzZXNzaW9uIGR1cmF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhiZ1VybCkucG9zdCgnL2FwaS92MS91c2VyL3VubG9jaycpLnJlcGx5V2l0aEVycm9yKCdpbnZhbGlkIE9UUCcpO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2ludmFsaWQgT1RQLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJvY2VlZHMgd2hlbiB1bmxvY2sgcmVwb3J0cyBcImFscmVhZHkgdW5sb2NrZWQgbG9uZ2VyXCInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgYmFja3VwVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoJy9hcGkvdjEvdXNlci91bmxvY2snKS5yZXBseSg0MDEsIHsgZXJyb3I6ICdTZXNzaW9uIGFscmVhZHkgdW5sb2NrZWQgbG9uZ2VyJyB9KTtcbiAgICAgIG5vY2tLZXljaGFpbih1c2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlclYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcsIGVuY3J5cHRlZFBydjogYmFja3VwVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQobmV3IFJlZ0V4cChgL2FwaS92Mi90YnRjL2tleS9gKSkudHdpY2UoKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyB0aGUgc3VwcGxpZWQgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSBhbmQgc2tpcHMgdGhlIHBhc3Njb2RlcmVjb3ZlcnkgZmV0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgYmFja3VwVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgZG8gTk9UIG5vY2sgcGFzc2NvZGVyZWNvdmVyeSDigJQgdGhlIHRlc3QgZmFpbHMgaWYgdGhlIGNvZGUgdHJpZXMgdG8gY2FsbCBpdC5cbiAgICAgIG5vY2tLZXljaGFpbih1c2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlclYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcsIGVuY3J5cHRlZFBydjogYmFja3VwVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQobmV3IFJlZ0V4cChgL2FwaS92Mi90YnRjL2tleS9gKSkudHdpY2UoKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYy1zdXBwbGllZCcgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT0ZDIHdhbGxldHMgKDIga2V5cywgbm8gYmFja3VwKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9mY0NvaW4gPSBiaXRnby5jb2luKCdvZmMnKTtcbiAgICAgIGNvbnN0IG9mY1VzZXJLZXlJZCA9ICdvZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSc7XG4gICAgICBjb25zdCBvZmNCaXRnb0tleUlkID0gJ29mYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyJztcbiAgICAgIGNvbnN0IG9mY1dhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnb2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMHdhbGxldDEnLFxuICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAga2V5czogW29mY1VzZXJLZXlJZCwgb2ZjQml0Z29LZXlJZF0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nIGFzIGNvbnN0LFxuICAgICAgICB0eXBlOiAnaG90JyBhcyBjb25zdCxcbiAgICAgIH07XG4gICAgICBjb25zdCBvZmNXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBvZmNDb2luLCBvZmNXYWxsZXREYXRhIGFzIGFueSk7XG5cbiAgICAgIGZ1bmN0aW9uIG5vY2tPZmNLZXljaGFpbihpZDogc3RyaW5nLCBrZXljaGFpbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICAgICAgcmV0dXJuIG5vY2soYmdVcmwpXG4gICAgICAgICAgLmdldChgL2FwaS92Mi9vZmMva2V5LyR7aWR9YClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IGlkLCBwdWI6ICdwdWInLCB0eXBlOiAnaW5kZXBlbmRlbnQnLCAuLi5rZXljaGFpbiB9KTtcbiAgICAgIH1cblxuICAgICAgaXQoJ3JlLWVuY3J5cHRzIHRoZSB1c2VyIGtleSBhbmQgc2tpcHMgYml0Z28ga2V5IHdpdGggbm8gZW5jcnlwdGVkUHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB1c2VyRW5jID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgICBub2NrVW5sb2NrKCk7XG4gICAgICAgIG5vY2tPZmNLZXljaGFpbihvZmNVc2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlckVuYyB9KTtcbiAgICAgICAgbm9ja09mY0tleWNoYWluKG9mY0JpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICAgIGNvbnN0IHB1dHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4gPSBbXTtcbiAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAucHV0KGAvYXBpL3YyL29mYy9rZXkvJHtvZmNVc2VyS2V5SWR9YCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgIHB1dHMucHVzaCh7IGlkOiBvZmNVc2VyS2V5SWQsIGJvZHkgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvZmNXYWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICAgICAgcHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICAgIHB1dHNbMF0uaWQuc2hvdWxkLmVxdWFsKG9mY1VzZXJLZXlJZCk7XG4gICAgICAgIEpTT04ucGFyc2UocHV0c1swXS5ib2R5LmVuY3J5cHRlZFBydiBhcyBzdHJpbmcpLnYuc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdza2lwcyB1c2VyIGtleSBhbHJlYWR5IGF0IHYyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB1c2VyVjIgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAyIH0pO1xuXG4gICAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgICAgbm9ja09mY0tleWNoYWluKG9mY1VzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjIgfSk7XG4gICAgICAgIG5vY2tPZmNLZXljaGFpbihvZmNCaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcblxuICAgICAgICBhd2FpdCBvZmNXYWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KTtcbiAgICAgICAgLy8gTm8gUFVUcyBleHBlY3RlZCDigJQgbm9jayB3aWxsIGVycm9yIGlmIGFueSB1bmV4cGVjdGVkIGNhbGwgaXMgbWFkZS5cbiAgICAgIH0pO1xuXG4gICAgICBpdCgnbWFrZXMgbm8gUFVUIGNhbGxzIGluIGRyeS1ydW4gbW9kZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdXNlckVuYyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgICAgbm9ja09mY0tleWNoYWluKG9mY1VzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyRW5jIH0pO1xuICAgICAgICBub2NrT2ZjS2V5Y2hhaW4ob2ZjQml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb2ZjV2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgZHJ5UnVuOiB0cnVlIH0pO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB1bmRlZmluZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
6720
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC92Mi91bml0L3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsRUFBRTtBQUNGLG1CQUFtQjtBQUNuQixFQUFFOztBQUVGLGlDQUFrQztBQUNsQywrQkFBK0I7QUFDL0IsMEJBQXdCO0FBQ3hCLDZCQUE4QjtBQUM5Qiw0QkFBNEI7QUFDNUIsaUNBQWlDO0FBRWpDLDhDQThCeUI7QUFFekIsOENBQTRDO0FBQzVDLHNDQUFxQztBQUNyQywyQ0FBMkM7QUFDM0MsbUNBQXFDO0FBQ3JDLHNEQUEyQztBQUMzQyxzREFBMkM7QUFFM0MsZ0VBQW9GO0FBRXBGLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQVF6QixRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQWEsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLFdBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sUUFBUSxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUc7UUFDakIsRUFBRSxFQUFFLGtDQUFrQztRQUN0QyxJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxDQUFDLGtDQUFrQyxFQUFFLGtDQUFrQyxFQUFFLGtDQUFrQyxDQUFDO1FBQ2xILFlBQVksRUFBRSxFQUFFO1FBQ2hCLFlBQVksRUFBRSxTQUFTO1FBQ3ZCLElBQUksRUFBRSxLQUFLO0tBQ1osQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHO1FBQ3JCLEVBQUUsRUFBRSxrQ0FBa0M7UUFDdEMsSUFBSSxFQUFFLE1B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QUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8vIFRlc3RzIGZvciBXYWxsZXRcbi8vXG5cbmltcG9ydCBzaG91bGQgPSByZXF1aXJlKCdzaG91bGQnKTtcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnLi4vbGliL2Fzc2VydHMnO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgQmFzZVRzc1V0aWxzLFxuICBjb21tb24sXG4gIEVjZHNhLFxuICBFQ0RTQVV0aWxzLFxuICBFRERTQVV0aWxzLFxuICBHZXRVc2VyUHJ2T3B0aW9ucyxcbiAgS2V5Y2hhaW5zLFxuICBLZXlUeXBlLFxuICBNYW5hZ2VVbnNwZW50c09wdGlvbnMsXG4gIE1BWF9TT0xfTUVTU0FHRV9CWVRFUyxcbiAgTWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgTWVzc2FnZVR5cGVzLFxuICBQb3B1bGF0ZWRJbnRlbnQsXG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25PcHRpb25zLFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFJlcXVlc3RUcmFjZXIsXG4gIFNlbmRNYW55T3B0aW9ucyxcbiAgU2lnbmF0dXJlU2hhcmVUeXBlLFxuICBTaWduZWRNZXNzYWdlLFxuICBTaWduVHlwZWREYXRhVmVyc2lvbixcbiAgVG9rZW5UeXBlLFxuICBUc3NVdGlscyxcbiAgVHhSZXF1ZXN0LFxuICBUeFJlcXVlc3RWZXJzaW9uLFxuICBUeXBlZERhdGEsXG4gIFR5cGVkTWVzc2FnZSxcbiAgV2FsbGV0LFxuICBXYWxsZXRTaWduTWVzc2FnZU9wdGlvbnMsXG4gIFdhbGxldFNpZ25UeXBlZERhdGFPcHRpb25zLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R28gfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdXR4b0xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgVHNvbCB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1zb2wnO1xuaW1wb3J0IHsgVGV0aCB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1ldGgnO1xuXG5pbXBvcnQgeyBuZnRSZXNwb25zZSwgdW5zdXBwb3J0ZWROZnRSZXNwb25zZSB9IGZyb20gJy4uL2ZpeHR1cmVzL25mdHMvbmZ0UmVzcG9uc2VzJztcblxucmVxdWlyZSgnc2hvdWxkLXNpbm9uJyk7XG5cbm5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcblxudHlwZSBDcmVhdGVUeFJlcXVlc3RCb2R5ID0ge1xuICBpbnRlbnQ6IFBvcHVsYXRlZEludGVudDtcbiAgYXBpdmVyc2lvbjogVHhSZXF1ZXN0VmVyc2lvbjtcbiAgcHJldmlldz86IGJvb2xlYW47XG59O1xuXG5kZXNjcmliZSgnVjIgV2FsbGV0OicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGNvbnN0IGJhc2Vjb2luOiBhbnkgPSBiaXRnby5jb2luKCd0YnRjJyk7XG4gIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsXG4gICAgY29pbjogJ3RidGMnLFxuICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnLCAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc2MDAwMDAwMDAnLCAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc3MDAwMDAwMDAnXSxcbiAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgIHR5cGU6ICdob3QnLFxuICB9O1xuICBjb25zdCBjb2xkV2FsbGV0RGF0YSA9IHtcbiAgICBpZDogJzY1Nzc0NDE5ZmI0ZDk2OTA4NDdmYmU0YjAwMDAwMDAwJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyc2NTc3NDQxMmU1NGI3NTE2MzkzYzlkZjgwMDAwMDAwMCcsICc2NTc3NDQyNDI4NjY0ZmZlNzkxYWY3ZWEwMDAwMDAwMCcsICc2NTc3NDQyYjczMTdhOTQ1NzU2YzJmZDkwMDAwMDAwMCddLFxuICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgdHlwZTogJ2NvbGQnLFxuICB9O1xuICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgd2FsbGV0RGF0YSk7XG4gIGNvbnN0IGNvbGRXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgY29sZFdhbGxldERhdGEpO1xuICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcbiAgY29uc3QgYWRkcmVzczEgPSAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJztcbiAgY29uc3QgYWRkcmVzczIgPSAnMHg3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2JztcbiAgY29uc3QgdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMgPSB7XG4gICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICBjaGFuZ2VBZGRyZXNzVHlwZTogWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXSxcbiAgfTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICBzaW5vbi5yZXNldCgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2FsbGV0IHRyYW5zZmVycycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNlYXJjaCBpbiB3YWxsZXQgZm9yIGEgdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGxpbWl0OiAxLCBzZWFyY2hMYWJlbDogJ3Rlc3QnIH07XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90cmFuc2ZlcmApXG4gICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBjb2luOiAndGJjaCcsXG4gICAgICAgICAgdHJhbnNmZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdhbGxldDogd2FsbGV0LmlkKCksXG4gICAgICAgICAgICAgIGNvbW1lbnQ6ICd0ZXN0cycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQudHJhbnNmZXJzKHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmb3J3YXJkIGFsbCB2YWxpZCBwYXJhbWV0ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBsaW1pdDogMSxcbiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzMScsICdhZGRyZXNzMiddLFxuICAgICAgICBkYXRlR3RlOiAnZGF0ZVN0cmluZzAnLFxuICAgICAgICBkYXRlTHQ6ICdkYXRlU3RyaW5nMScsXG4gICAgICAgIHZhbHVlR3RlOiAwLFxuICAgICAgICB2YWx1ZUx0OiAzMDAwMDAwMDAsXG4gICAgICAgIGFsbFRva2VuczogdHJ1ZSxcbiAgICAgICAgc2VhcmNoTGFiZWw6ICdhYmMnLFxuICAgICAgICBpbmNsdWRlSGV4OiB0cnVlLFxuICAgICAgICB0eXBlOiAndHJhbnNmZXJfdHlwZScsXG4gICAgICAgIHN0YXRlOiAndHJhbnNmZXJfc3RhdGUnLFxuICAgICAgfTtcblxuICAgICAgLy8gVGhlIGFjdHVhbCBhcGkgcmVxdWVzdCB3aWxsIG9ubHkgc2VuZCBzdHJpbmdzLCBidXQgdGhlIFNESyBmdW5jdGlvbiBleHBlY3RzIG51bWJlcnMgZm9yIHNvbWUgdmFsdWVzXG4gICAgICBjb25zdCBhcGlQYXJhbXMgPSBfLm1hcFZhbHVlcyhwYXJhbXMsIChwYXJhbSkgPT4gKEFycmF5LmlzQXJyYXkocGFyYW0pID8gcGFyYW0gOiBTdHJpbmcocGFyYW0pKSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90cmFuc2ZlcmApXG4gICAgICAgIC5xdWVyeShfLm1hdGNoZXMoYXBpUGFyYW1zKSlcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC50cmFuc2ZlcnMocGFyYW1zKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHN0cmluZyBhcmd1bWVudCBmb3IgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgbGltaXQ6IDEsXG4gICAgICAgIGFkZHJlc3M6ICdzdHJpbmdBZGRyZXNzJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGFwaVBhcmFtcyA9IHtcbiAgICAgICAgbGltaXQ6ICcxJyxcbiAgICAgICAgYWRkcmVzczogJ3N0cmluZ0FkZHJlc3MnLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3RyYW5zZmVyYClcbiAgICAgICAgLnF1ZXJ5KF8ubWF0Y2hlcyhhcGlQYXJhbXMpKVxuICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LnRyYW5zZmVycyhwYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3JzIGZvciBpbnZhbGlkIGV4cGVjdGVkIHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC50cmFuc2ZlcnMoeyBhZGRyZXNzOiAxMzM3NSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhZGRyZXNzIGFyZ3VtZW50LCBleHBlY3Rpbmcgc3RyaW5nIG9yIGFycmF5Jyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGFkZHJlc3M6IFtudWxsXSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhZGRyZXNzIGFyZ3VtZW50LCBleHBlY3RpbmcgYXJyYXkgb2YgYWRkcmVzcyBzdHJpbmdzJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGRhdGVHdGU6IDIwMTAxOTA0IH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGRhdGVHdGUgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQudHJhbnNmZXJzKHsgZGF0ZUx0OiAyMDEwMTkwNCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGRhdGVMdCBhcmd1bWVudCwgZXhwZWN0aW5nIHN0cmluZycpO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC50cmFuc2ZlcnMoeyB2YWx1ZUd0ZTogJzEwMjMwMDA1JyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCB2YWx1ZUd0ZSBhcmd1bWVudCwgZXhwZWN0aW5nIG51bWJlcicpO1xuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC50cmFuc2ZlcnMoeyB2YWx1ZUx0OiAnLTVlOCcgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCB2YWx1ZUx0IGFyZ3VtZW50LCBleHBlY3RpbmcgbnVtYmVyJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGluY2x1ZGVIZXg6ICcxMjMnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGluY2x1ZGVIZXggYXJndW1lbnQsIGV4cGVjdGluZyBib29sZWFuJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IHN0YXRlOiAxMjMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgc3RhdGUgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcgb3IgYXJyYXknKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgICAudHJhbnNmZXJzKHsgc3RhdGU6IFsxMjMsIDQ1Nl0gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgc3RhdGUgYXJndW1lbnQsIGV4cGVjdGluZyBhcnJheSBvZiBzdGF0ZSBzdHJpbmdzJyk7XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LnRyYW5zZmVycyh7IHR5cGU6IDEyMyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHR5cGUgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1dhbGxldCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZWFyY2ggaW4gd2FsbGV0IGFkZHJlc3NlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgbGltaXQ6IDEsIGxhYmVsQ29udGFpbnM6ICd0ZXN0JyB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vYWRkcmVzc2VzYClcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGNvaW46ICd0YmNoJyxcbiAgICAgICAgICB0cmFuc2ZlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FsbGV0OiB3YWxsZXQuaWQoKSxcbiAgICAgICAgICAgICAgY29tbWVudDogJ3Rlc3RzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5hZGRyZXNzZXMocGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGJjaCBjYXNoYWRkciBmb3JtYXQgYXMgdmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ3RiY2gnKTtcbiAgICBjb25zdCB2YWxpZCA9IGNvaW4uaXNWYWxpZEFkZHJlc3MoJ2JjaHRlc3Q6cHpma3h2NTMydDBxNXpjaGNrMm1obW1mMnkwMmNkZWp5c3NxNXFyejdhJyk7XG4gICAgdmFsaWQuc2hvdWxkLmJlLlRydWUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYmNoIGxlZ2FjeSBmb3JtYXQgYXMgdmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ3RiY2gnKTtcbiAgICBjb25zdCB2YWxpZCA9IGNvaW4uaXNWYWxpZEFkZHJlc3MoJzJONmdZOXI5aXVYUVF6WmlTeW5nV0plb1V1TDVtQzF4NEFjJyk7XG4gICAgdmFsaWQuc2hvdWxkLmJlLlRydWUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RFVEggV2FsbGV0IEFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZXRoV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBldGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0ZXRoJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NlYXJjaCBsaXN0IGFkZHJlc3NlcyBzaG91bGQgcmV0dXJuIHN1Y2Nlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGluY2x1ZGVCYWxhbmNlczogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZVRva2VuczogdHJ1ZSxcbiAgICAgICAgcmV0dXJuQmFsYW5jZXNGb3JUb2tlbjogJ2d0ZXJjNmRwJyxcbiAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IGZhbHNlLFxuICAgICAgICBpbmNsdWRlVG90YWxBZGRyZXNzQ291bnQ6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vYWRkcmVzc2VzYClcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuYWRkcmVzc2VzKHBhcmFtcyk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcnMgZm9yIGludmFsaWQgZXhwZWN0ZWQgcGFyYW1ldGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuYWRkcmVzc2VzKHsgaW5jbHVkZUJhbGFuY2VzOiB0cnVlLCByZXR1cm5CYWxhbmNlc0ZvclRva2VuOiAxIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHJldHVybkJhbGFuY2VzRm9yVG9rZW4gYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBwZW5kaW5nRGVwbG95bWVudDogMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBwZW5kaW5nRGVwbG95bWVudCBhcmd1bWVudCwgZXhwZWN0aW5nIGJvb2xlYW4nKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBpbmNsdWRlQmFsYW5jZXM6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZUJhbGFuY2VzIGFyZ3VtZW50LCBleHBlY3RpbmcgYm9vbGVhbicpO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmFkZHJlc3Nlcyh7IGluY2x1ZGVUb2tlbnM6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZVRva2VucyBhcmd1bWVudCwgZXhwZWN0aW5nIGJvb2xlYW4nKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBpbmNsdWRlVG90YWxBZGRyZXNzQ291bnQ6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZVRvdGFsQWRkcmVzc0NvdW50IGFyZ3VtZW50LCBleHBlY3RpbmcgYm9vbGVhbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dldCBmb3J3YXJkZXIgYmFsYW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZvcndhcmRlcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnMHhiZmJjYzBmZTJiODY1ZGU4NzcxMzQyNDZhZjA5Mzc4ZTliYzNjOTFkJyxcbiAgICAgICAgICBiYWxhbmNlOiAnMjAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICcweGU1OTUyNGVkOGI0NzE2NWY0Y2IwODUwYzk0MjgwNjlhNjAwMmU1ZWInLFxuICAgICAgICAgIGJhbGFuY2U6ICcxMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vZm9yd2FyZGVycy9iYWxhbmNlc2ApLnJlcGx5KDIwMCwge1xuICAgICAgICBmb3J3YXJkZXJzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZvcndhcmRlckJhbGFuY2UgPSBhd2FpdCBldGhXYWxsZXQuZ2V0Rm9yd2FyZGVyQmFsYW5jZSgpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzBdLmFkZHJlc3Muc2hvdWxkLmVxbChmb3J3YXJkZXJzWzBdLmFkZHJlc3MpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzBdLmJhbGFuY2Uuc2hvdWxkLmVxbChmb3J3YXJkZXJzWzBdLmJhbGFuY2UpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzFdLmFkZHJlc3Muc2hvdWxkLmVxbChmb3J3YXJkZXJzWzFdLmFkZHJlc3MpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzFdLmJhbGFuY2Uuc2hvdWxkLmVxbChmb3J3YXJkZXJzWzFdLmJhbGFuY2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnR2V0IFVzZXIgUHJ2JywgKCkgPT4ge1xuICAgIGNvbnN0IHBydiA9XG4gICAgICAneHBydjlzMjFaclFIMTQzSzNoZWt5Tmo3VGNpUjRYTlllMWtNajY4VzJpcGpKR05IRVRXUDdvNDJBakRuU1BnS2hkWjR4OE5CQXZhTDcyUnJYanVYTmRta01xTEVSWnphNzNvWXVnR3RiTEZYRzhnJztcbiAgICBjb25zdCBkZXJpdmVkUHJ2ID1cbiAgICAgICd4cHJ2OXlvRzY3VGQxMXV3alh3YlY4ekVtcnlTVlhFUnU1RlpBc0xEOXN1QmVFSmJnSnFBTnM4WW5nNWRFSm9paTdoYWc1SmVybUs2UGJmeGdEbVN6Vzdld1dlTG1lSkVrbVBmbVpVU0xkRVR0SHgnO1xuICAgIGl0KCdzaG91bGQgdXNlIHRoZSBjb2xkIGRlcml2YXRpb24gc2VlZCB0byBkZXJpdmUgdGhlIHByb3BlciB1c2VyIHByaXZhdGUga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlclBydk9wdGlvbnMgPSB7XG4gICAgICAgIHBydixcbiAgICAgICAgY29sZERlcml2YXRpb25TZWVkOiAnMTIzJyxcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKGRlcml2ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgdGhlIHVzZXIga2V5Y2hhaW4gZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBhcyB0aGUgY29sZCBkZXJpdmF0aW9uIHNlZWQgaWYgbm9uZSBpcyBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXJQcnZPcHRpb25zOiBHZXRVc2VyUHJ2T3B0aW9ucyA9IHtcbiAgICAgICAgcHJ2LFxuICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgICAgIGlkOiAnNDU2JyxcbiAgICAgICAgICBwdWI6ICc3ODknLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgKGF3YWl0IHdhbGxldC5nZXRVc2VyUHJ2KHVzZXJQcnZPcHRpb25zKSkuc2hvdWxkLmVxbChkZXJpdmVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJlZmVyIHRoZSBleHBsaWNpdCBjb2xkIGRlcml2YXRpb24gc2VlZCB0byB0aGUgdXNlciBrZXljaGFpbiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlclBydk9wdGlvbnM6IEdldFVzZXJQcnZPcHRpb25zID0ge1xuICAgICAgICBwcnYsXG4gICAgICAgIGNvbGREZXJpdmF0aW9uU2VlZDogJzEyMycsXG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzQ1NicsXG4gICAgICAgICAgaWQ6ICc3ODknLFxuICAgICAgICAgIHB1YjogJzAxMicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKGRlcml2ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHBydiBwcm92aWRlZCBmb3IgVFNTIFNNQycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRzc1dhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgICBjb2luOiAndHNvbCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NzAwMDAwMDAwJyxcbiAgICAgICAgXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0c29sY29pbjogYW55ID0gYml0Z28uY29pbigndHNvbCcpO1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbGNvaW4sIHRzc1dhbGxldERhdGEpO1xuICAgICAgY29uc3QgcHJ2ID0gJ2xvbmdzdHJpbmdpZmllZGpzb24nO1xuICAgICAgY29uc3Qga2V5Y2hhaW4gPSB7XG4gICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICdyYW5kb20gc2VlZCcsXG4gICAgICAgIGlkOiAnMTIzJyxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46ICdsb25nc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ3RzcycgYXMgS2V5VHlwZSxcbiAgICAgIH07XG4gICAgICBjb25zdCB1c2VyUHJ2T3B0aW9ucyA9IHtcbiAgICAgICAgcHJ2LFxuICAgICAgICBrZXljaGFpbixcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKHBydik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdURVRIIFdhbGxldCBUcmFuc2FjdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGV0aFdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIF0sXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgfTtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlcnJvciBlaXAxNTU5IGFuZCBnYXNQcmljZSBhcmUgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBnYXNQcmljZTogMTAwLFxuICAgICAgICBlaXAxNTU5OiB7XG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDEwLFxuICAgICAgICAgIG1heEZlZVBlckdhczogMTAsXG4gICAgICAgIH0sXG4gICAgICAgIGFtb3VudDogMTAsXG4gICAgICAgIGFkZHJlc3M6IFRlc3RCaXRHby5WMi5URVNUX1dBTExFVDFfQUREUkVTUyxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlYyLlRFU1RfV0FMTEVUMV9QQVNTQ09ERSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZChwYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZWFyY2ggZm9yIHBlbmRpbmcgdHJhbnNhY3Rpb24gY29ycmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyB3YWxsZXRJZDogd2FsbGV0LmlkKCkgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS90eC9wZW5kaW5nL2ZpcnN0YCkucXVlcnkocGFyYW1zKS5yZXBseSgyMDApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmdldEZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uKCk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0cnkgdG8gY2hhbmdlIHRoZSBmZWUgY29ycmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyB0eGlkOiAnMHhmZmZmZmZmZicsIGZlZTogJzEwMDAwMDAwJyB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvY2hhbmdlRmVlYCwgcGFyYW1zKS5yZXBseSgyMDApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuY2hhbmdlRmVlKHsgdHhpZDogJzB4ZmZmZmZmZmYnLCBmZWU6ICcxMDAwMDAwMCcgfSk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0cnkgdG8gY2hhbmdlIHRoZSBmZWUgY29ycmVjdGx5IHVzaW5nIGVpcDE1NTknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4aWQ6ICcweGZmZmZmZmZmJyxcbiAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAnMjUwMDAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2NoYW5nZUZlZWAsIHBhcmFtcykucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmNoYW5nZUZlZShwYXJhbXMpO1xuICAgICAgICB0aHJvdyAnJztcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBkYXRhIHBhcmFtZXRlciBhbmQgYW1vdW50OiAwIHdoZW4gdXNpbmcgc2VuZFRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSAnMHg3ZGI1NjJjNGRkNDY1Y2M4OTU3NjFjNTZmODNiNmFmMGUzMjY4OWJhJztcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgICBkYXRhOiAnMHgwMDExMDAxMScsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMoeyByZWNpcGllbnRzIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICBjb25zdCBub2NrS2V5Q2hhaW4gPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kKHtcbiAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICAgICAgZGF0YTogcmVjaXBpZW50c1swXS5kYXRhLFxuICAgICAgICAgIGFtb3VudDogcmVjaXBpZW50c1swXS5hbW91bnQsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBub2NrS2V5Q2hhaW4uaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBkYXRhIHBhcmFtZXRlciBhbmQgYW1vdW50OiAwIHdoZW4gdXNpbmcgc2VuZE1hbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vdHgvYnVpbGRgO1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICAgIGRhdGE6ICcweDAwMTEwMDExJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIGNvbnN0IG5vY2tLZXlDaGFpbiA9IG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L2tleS8ke2V0aFdhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnNlbmRNYW55KHsgcmVjaXBpZW50cyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgbm9ja0tleUNoYWluLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBwYXNzIHJlY2lwaWVudHMgaW4gc2VuZE1hbnkgd2hlbiB0cmFuc2FjdGlvbiB0eXBlIGlzIGZpbGxOb25jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSAnMHg3ZGI1NjJjNGRkNDY1Y2M4OTU3NjFjNTZmODNiNmFmMGUzMjY4OWJhJztcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtcyA9IHsgcmVjaXBpZW50cywgdHlwZTogJ2ZpbGxOb25jZScsIGlzVHNzOiB0cnVlLCBub25jZTogJzEzJyB9O1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlQYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKCdjYW5ub3QgcHJvdmlkZSByZWNpcGllbnRzIGZvciB0cmFuc2FjdGlvbiB0eXBlIGZpbGxOb25jZScpO1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHBhc3MgcmVjZWl2ZUFkZHJlc3MgaW4gc2VuZE1hbnkgd2hlbiBUU1MgdHJhbnNhY3Rpb24gdHlwZSBpcyB0cmFuc2ZlciBvciB0cmFuc2ZlclRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdjYW5ub3QgdXNlIHJlY2VpdmUgYWRkcmVzcyBmb3IgVFNTIHRyYW5zYWN0aW9ucyBvZiB0eXBlIHRyYW5zZmVyJztcbiAgICAgIGNvbnN0IHNlbmRNYW55UGFyYW1zUmVjZWl2ZUFkZHJlc3NFcnJvciA9IHtcbiAgICAgICAgcmVjZWl2ZUFkZHJlc3M6ICd0aHJvdycsXG4gICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICBub25jZTogJzEzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtcyA9IHsgcmVjaXBpZW50cywgdHlwZTogJ3RyYW5zZmVyJywgaXNUc3M6IHRydWUsIG5vbmNlOiAnMTMnIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kTWFueShzZW5kTWFueVBhcmFtc1JlY2VpdmVBZGRyZXNzRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kTWFueShzZW5kTWFueVBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQubm90LmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGVhcmx5IGlmIHBhc3N3b3JkIGlzIHdyb25nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGB1bmFibGUgdG8gZGVjcnlwdCBrZXljaGFpbiB3aXRoIHRoZSBnaXZlbiB3YWxsZXQgcGFzc3BocmFzZWA7XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtc0NvcnJlY3RQYXNzUGhyYXNlID0ge1xuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgbm9uY2U6ICcxMycsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFRlc3RCaXRHby5WMi5URVNUX0VUSF9XQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgIH07XG4gICAgICBjb25zdCBub2NrS2V5Y2hhaW4gPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0va2V5LyR7ZXRoV2FsbGV0LmtleUlkcygpWzBdfWApXG4gICAgICAgIC50aW1lcygyKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZYRGNXRDJ2eHVlYmNUMVpwVEY0VmtlNnFtTVc4eXpkZHdOWXBBUGp2WUVFTDVqTGZ5WVhXMmZ1eHRBeFk4VGdqUFVKTGNmMUM4cXo5TjZWZ1p4QXJLWDRFd0I4ckg1JyxcbiAgICAgICAgICBldGhBZGRyZXNzOiAnMHgyNmExNjNiYTk3Mzk1Mjk3MjBjMDkxNGM1ODM4NjVkZWMwZDM3Mjc4JyxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAne1wiaXZcIjpcIjE1RnNiRFZJMXpHOU9nZ0Q4WVgrSGc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJoSGJOSDNTei9hVT1cIixcImN0XCI6XCJXb05WS3o3YWZpUnhYSTJ3L1lrek1kTXlvUWcvQjE1dTFROGFRZ2k5NmpKWjl3azZUSWFTRWM2YlhGSDNBSHpEOU1kSkNXSlFVcFJob1FjL3JneXRjbjY5c2NQVGpLZWV5Vk1FbEdDeFpkRlZTL3BzUWNORStsdWUzLy8yWmx4ais2dDFOa3ZZTys4eUFlelNNUkJLNU9kZnRYRWpOUUk9XCJ9JyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5zZW5kTWFueSh7IC4uLnNlbmRNYW55UGFyYW1zQ29ycmVjdFBhc3NQaHJhc2UsIHdhbGxldFBhc3NwaHJhc2U6ICd3cm9uZ1Bhc3NwaHJhc2UnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGVycm9yTWVzc2FnZSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gJ21vY2snO1xuICAgICAgICB9O1xuICAgICAgICAvLyBTaG91bGQgbm90IHZhbGlkYXRlIHBhc3NwaHJhc2UgaWYgY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gaXMgcHJvdmlkZWRcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnNlbmRNYW55KHtcbiAgICAgICAgICAuLi5zZW5kTWFueVBhcmFtc0NvcnJlY3RQYXNzUGhyYXNlLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICd3cm9uZ1Bhc3NwaHJhc2UnLFxuICAgICAgICAgIGN1c3RvbVNpZ25pbmdGdW5jdGlvbixcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQubm90LmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZE1hbnkoeyAuLi5zZW5kTWFueVBhcmFtc0NvcnJlY3RQYXNzUGhyYXNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLm5vdC5lcXVhbChlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgbm9ja0tleWNoYWluLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdPRkMgQ3JlYXRlIEFkZHJlc3MnLCAoKSA9PiB7XG4gICAgbGV0IG9mY1dhbGxldDogV2FsbGV0O1xuICAgIGxldCBub2NrcztcbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YU9mYyA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAwYjAwMDAwMDAwJyxcbiAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc4MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzkwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE4MDAwMDAwMDAwJyxcbiAgICAgICAgXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICB9O1xuICAgICAgb2ZjV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbignb2ZjJyksIHdhbGxldERhdGFPZmMpO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrcyA9IFtcbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtvZmNXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6IG9mY1dhbGxldC5rZXlJZHMoKVswXSxcbiAgICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRlhEY1dEMnZ4dWViY1QxWnBURjRWa2U2cW1NVzh5emRkd05ZcEFQanZZRUVMNWpMZnlZWFcyZnV4dEF4WThUZ2pQVUpMY2YxQzhxejlONlZnWnhBcktYNEV3QjhySDUnLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAgICd7XCJpdlwiOlwiMTVGc2JEVkkxekc5T2dnRDhZWCtIZz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImhIYk5IM1N6L2FVPVwiLFwiY3RcIjpcIldvTlZLejdhZmlSeFhJMncvWWt6TWRNeW9RZy9CMTV1MVE4YVFnaTk2akpaOXdrNlRJYVNFYzZiWEZIM0FIekQ5TWRKQ1dKUVVwUmhvUWMvcmd5dGNuNjlzY1BUaktlZXlWTUVsR0N4WmRGVlMvcHNRY05FK2x1ZTMvLzJabHhqKzZ0MU5rdllPKzh5QWV6U01SQks1T2RmdFhFak5RST1cIn0nLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pLFxuXG4gICAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi9vZmMva2V5LyR7b2ZjV2FsbGV0LmtleUlkcygpWzFdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiBvZmNXYWxsZXQua2V5SWRzKClbMV0sXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0doU2FYaWtwdVRDOUtVODhYeDlMcmpLU3cxSktzdlhOZ2FicFRkZ2p5N0xTb3ZoOVpIaGNxaEFIUXU3dXRodTdGZ3VOR2RjQzRhWFRLSzVncVRjUGU0V3ZMWVJiQ1NHJyxcbiAgICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pLFxuXG4gICAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi9vZmMva2V5LyR7b2ZjV2FsbGV0LmtleUlkcygpWzJdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiBvZmNXYWxsZXQua2V5SWRzKClbMl0sXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZzWFNoVzhSM2hKc0hOVFlUVXd6Y2VqbkxrWTdLQ3RhSmJEcWNHa2NCRjk5QnJFSlNqTlpIZUh2ZWlZVXJzQWR3bmpVTUd3cGdtRWJpS2NaV1J1VkE5SHhuUmFBM3IzJyxcbiAgICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIG5vY2tzLmZvckVhY2goKHNjb3BlKSA9PiBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IHZhbGlkYXRlIGFyZ3VtZW50cyB0byBjcmVhdGUgYWRkcmVzcyBvbiBPRkMgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgb2ZjV2FsbGV0LmNyZWF0ZUFkZHJlc3MoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdvblRva2VuIGlzIGEgbWFuZGF0b3J5IHBhcmFtZXRlciBmb3IgT0ZDIHdhbGxldHMnKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGVzdCBwYXNzaW5nIGludmFsaWQgbnVtYmVyIGFyZ3VtZW50XG4gICAgICBhd2FpdCBvZmNXYWxsZXQuY3JlYXRlQWRkcmVzcyh7IG9uVG9rZW46IDQyIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ29uVG9rZW4gaGFzIHRvIGJlIGEgc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkcmVzcyBjcmVhdGlvbiB3aXRoIHZhbGlkIG9uVG9rZW4gYXJndW1lbnQgc3VjY2VlZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL29mYy93YWxsZXQvJHtvZmNXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgb25Ub2tlbjogJ29mY3RidGMnIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYzOGE0OGM2YzNkYmE0MDAwN2EzNDk3ZmE0OWEwODBjJyxcbiAgICAgICAgICBhZGRyZXNzOiAnZ2VuZXJhdGVkIGFkZHJlc3MnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgICAgICB3YWxsZXQ6IG9mY1dhbGxldC5pZCxcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gYXdhaXQgb2ZjV2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBvblRva2VuOiAnb2ZjdGJ0YycgfSk7XG4gICAgICBhZGRyZXNzLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdnZW5lcmF0ZWQgYWRkcmVzcycpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RFVEggQ3JlYXRlIEFkZHJlc3MnLCAoKSA9PiB7XG4gICAgbGV0IGV0aFdhbGxldCwgbm9ja3M7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgIGJhc2VBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgIH0sXG4gICAgICBjb2luOiAndGV0aCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgICBub2NrcyA9IFtcbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0va2V5LyR7ZXRoV2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGWERjV0Qydnh1ZWJjVDFacFRGNFZrZTZxbU1XOHl6ZGR3TllwQVBqdllFRUw1akxmeVlYVzJmdXh0QXhZOFRnalBVSkxjZjFDOHF6OU42VmdaeEFyS1g0RXdCOHJINScsXG4gICAgICAgICAgZXRoQWRkcmVzczogJzB4MjZhMTYzYmE5NzM5NTI5NzIwYzA5MTRjNTgzODY1ZGVjMGQzNzI3OCcsXG4gICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICAgJ3tcIml2XCI6XCIxNUZzYkRWSTF6RzlPZ2dEOFlYK0hnPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiaEhiTkgzU3ovYVU9XCIsXCJjdFwiOlwiV29OVkt6N2FmaVJ4WEkydy9Za3pNZE15b1FnL0IxNXUxUThhUWdpOTZqSlo5d2s2VElhU0VjNmJYRkgzQUh6RDlNZEpDV0pRVXBSaG9RYy9yZ3l0Y242OXNjUFRqS2VleVZNRWxHQ3haZEZWUy9wc1FjTkUrbHVlMy8vMlpseGorNnQxTmt2WU8rOHlBZXpTTVJCSzVPZGZ0WEVqTlFJPVwifScsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG5cbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0va2V5LyR7ZXRoV2FsbGV0LmtleUlkcygpWzFdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNHaFNhWGlrcHVUQzlLVTg4WHg5THJqS1N3MUpLc3ZYTmdhYnBUZGdqeTdMU292aDlaSGhjcWhBSFF1N3V0aHU3Rmd1TkdkY0M0YVhUS0s1Z3FUY1BlNFd2TFlSYkNTRycsXG4gICAgICAgICAgZXRoQWRkcmVzczogJzB4YTFhODhhNTAyMjc0MDczYjFiYzRmZTA2ZWEwZjVmZTc3ZTE1MWI5MScsXG4gICAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KSxcblxuICAgICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMl19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZzWFNoVzhSM2hKc0hOVFlUVXd6Y2VqbkxrWTdLQ3RhSmJEcWNHa2NCRjk5QnJFSlNqTlpIZUh2ZWlZVXJzQWR3bmpVTUd3cGdtRWJpS2NaV1J1VkE5SHhuUmFBM3IzJyxcbiAgICAgICAgICBldGhBZGRyZXNzOiAnMHgwMzI4MjFiN2VhNDBlYTVkNDQ2ZjQ3YzI5YTBmNzc3ZWUwMzVhYTEwJyxcbiAgICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIG5vY2tzLmZvckVhY2goKHNjb3BlKSA9PiBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IHZhbGlkYXRlIGFyZ3VtZW50cyB0byBjcmVhdGUgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBtZXNzYWdlID0gJ2dhc1ByaWNlIGhhcyB0byBiZSBhbiBpbnRlZ2VyIG9yIG51bWVyaWMgc3RyaW5nJztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBnYXNQcmljZToge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgZ2FzUHJpY2U6ICdhYmMnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgZ2FzUHJpY2U6IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdjaGFpbiBoYXMgdG8gYmUgYW4gaW50ZWdlcic7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IHt9IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46ICdhYmMnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdjb3VudCBoYXMgdG8gYmUgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCAyNTAnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiB7fSB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiAnYWJjJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiBudWxsIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiAtMSB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjb3VudDogMCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjb3VudDogMjUxIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG5cbiAgICAgIG1lc3NhZ2UgPSAnYmFzZUFkZHJlc3MgaGFzIHRvIGJlIGEgc3RyaW5nJztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBiYXNlQWRkcmVzczoge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBiYXNlQWRkcmVzczogMTIzIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgYmFzZUFkZHJlc3M6IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdhbGxvd1NraXBWZXJpZnlBZGRyZXNzIGhhcyB0byBiZSBhIGJvb2xlYW4nO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGFsbG93U2tpcFZlcmlmeUFkZHJlc3M6IHt9IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzczogMTIzIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzczogJ2FiYycgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiBudWxsIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG5cbiAgICAgIG1lc3NhZ2UgPSAnZm9yd2FyZGVyVmVyc2lvbiBoYXMgdG8gYmUgYW4gaW50ZWdlciAwLCAxLCAyLCAzLCA0IG9yIDUnO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBmb3J3YXJkZXJWZXJzaW9uOiA2IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGZvcndhcmRlclZlcnNpb246IC0xIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkcmVzcyBjcmVhdGlvbiB3aXRoIGZvcndhcmRlciB2ZXJzaW9uIDMgc3VjY2VlZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAzIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYzOGE0OGM2YzNkYmE0MDAwN2EzNDk3ZmE0OWEwODBjJyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHg1ZTYxYjY0ZjM4ZjFiNWY4NTA3OGZiODRiMjczOTQ4MzBiNGM4ZTgwJyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMSxcbiAgICAgICAgICBjb2luOiAndHBvbHlnb24nLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc2Mzc4NWY5NWFmN2M3NjAwMDdjZmFlMDY4YzJmMzFhZScsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMi0xMi0wMlQxODo0OTo0Mi4zNDhaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4MScsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDMsXG4gICAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBhd2FpdCBldGhXYWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAzIH0pO1xuICAgICAgYWRkcmVzcy5jb2luU3BlY2lmaWMuZm9yd2FyZGVyVmVyc2lvbi5zaG91bGQuZXF1YWwoMyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FkZHJlc3MgY3JlYXRpb24gd2l0aCBmb3J3YXJkZXIgdmVyc2lvbiAzIGZhaWxzIGR1ZSBpbnZhbGlkIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gJzB4NWU2MWI2JzsgLy8gaW52YWxpZCBhZGRyZXNzXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMyB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MzhhNDhjNmMzZGJhNDAwMDdhMzQ5N2ZhNDlhMDgwYycsXG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMSxcbiAgICAgICAgICBjb2luOiAndHBvbHlnb24nLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc2Mzc4NWY5NWFmN2M3NjAwMDdjZmFlMDY4YzJmMzFhZScsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMi0xMi0wMlQxODo0OTo0Mi4zNDhaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4MScsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDMsXG4gICAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAzIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRyZXNzIGNyZWF0aW9uIHdpdGggZm9yd2FyZGVyIHZlcnNpb24gMiBzdWNjZWVkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDIgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjM4YTQ4YzZjM2RiYTQwMDA3YTM0OTdmYTQ5YTA4MGMnLFxuICAgICAgICAgIGFkZHJlc3M6ICcweDVlNjFiNjRmMzhmMWI1Zjg1MDc4ZmI4NGIyNzM5NDgzMGI0YzhlODAnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIGNvaW46ICd0cG9seWdvbicsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzYzNzg1Zjk1YWY3Yzc2MDAwN2NmYWUwNjhjMmYzMWFlJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIyLTEyLTAyVDE4OjQ5OjQyLjM0OFonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRpb25GYWlsdXJlOiBbXSxcbiAgICAgICAgICAgIHNhbHQ6ICcweDEnLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAyLFxuICAgICAgICAgICAgaXNUc3M6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gYXdhaXQgZXRoV2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMiB9KTtcbiAgICAgIGFkZHJlc3MuY29pblNwZWNpZmljLmZvcndhcmRlclZlcnNpb24uc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aGVuIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGlzIHRydWUgaW4gY2FzZSBvZiBldGggdjEgZm9yd2FyZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMSB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MTVjNjQzYTk4YTJhMTAwMDY4ZTAyM2M2MzljMGY3NCcsXG4gICAgICAgICAgYWRkcmVzczogJzB4OGMxM2NkMGJiMTk4ODU4ZjYyOGQ1NjMxYmE0YjIyOTNmYzA4ZGY0OScsXG4gICAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAzMTc5LFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjEtMTAtMDVUMTQ6NDI6MDIuMzk5WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4YzZiJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICdhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwIGJ1dCBnb3QgMHg4YzEzY2QwYmIxOTg4NThmNjI4ZDU2MzFiYTRiMjI5M2ZjMDhkZjQ5J1xuICAgICAgICApO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aGVuIGludmFsaWQgYmFzZUFkZHJlc3MgaXMgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMSB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MTVjNjQzYTk4YTJhMTAwMDY4ZTAyM2M2MzljMGY3NCcsXG4gICAgICAgICAgYWRkcmVzczogJzB4MzJhMjI2Y2RhMTRlMzUyYTQ3YmY0YjE2NTg2NDhkODAzNzczNmY4MCcsXG4gICAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAzMTc5LFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjEtMTAtMDVUMTQ6NDI6MDIuMzk5WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4YzZiJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxLCBiYXNlQWRkcmVzczogJ2FzZ2YnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGJhc2UgYWRkcmVzcycpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aGVuIGluY29ycmVjdCBiYXNlQWRkcmVzcyBpcyBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwJyxcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDMxNzksXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMS0xMC0wNVQxNDo0MjowMi4zOTlaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHhjNmInLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgLy8gaW5jb3JyZWN0IGFkZHJlc3MgaXMgZ2VuZXJhdGVkIHdoaWxlIHZhbGlkYXRpbmcgZHVlIHRvIGluY29ycmVjdCBiYXNlQWRkcmVzc1xuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDEsIGJhc2VBZGRyZXNzOiAnMHg4YzEzY2QwYmIxOTg4NThmNjI4ZDU2MzFiYTRiMjI5M2ZjMDhkZjQ5JyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAnYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGV4cGVjdGVkIDB4MzY3NDg5MjYwMDc3OTBlN2VlNDE2YzY0ODViMzJlMDBjZmIxNzdhMyBidXQgZ290IDB4MzJhMjI2Y2RhMTRlMzUyYTQ3YmY0YjE2NTg2NDhkODAzNzczNmY4MCdcbiAgICAgICAgKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgndmVyaWZ5IGFkZHJlc3Mgd2hlbiBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbiBpcyB0cnVlICBhbmQgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzcyBpcyBmYWxzZSBpbiBjYXNlIG9mIGV0aCB2MCBmb3J3YXJkZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAwIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHgzMmEyNmNkYTE0ZTM1MmE0N2JmNGIxNjU4NjQ4ZDgwMzc3MzZmODAnLFxuICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMzE3OSxcbiAgICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIxLTEwLTA1VDE0OjQyOjAyLjM5OVonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRpb25GYWlsdXJlOiBbXSxcbiAgICAgICAgICAgIHNhbHQ6ICcweGM2YicsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMCwgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzczogZmFsc2UgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2FkZHJlc3MgdmVyaWZpY2F0aW9uIHNraXBwZWQgZm9yIGNvdW50ID0gMScpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aXRoIGFsbG93U2tpcFZlcmlmeUFkZHJlc3Mgc2V0IHRvIGZhbHNlIGFuZCBldGggdjEgZm9yd2FyZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMSB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MTVjNjQzYTk4YTJhMTAwMDY4ZTAyM2M2MzljMGY3NCcsXG4gICAgICAgICAgYWRkcmVzczogJzB4MzJhMjI2Y2RhMTRlMzUyYTQ3YmY0YjE2NTg2NDhkODAzNzczNmY4MCcsXG4gICAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAzMTc5LFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjEtMTAtMDVUMTQ6NDI6MDIuMzk5WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4YzZiJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IG5ld0FkZHJlc3MgPSBhd2FpdCBldGhXYWxsZXQuY3JlYXRlQWRkcmVzcyh7XG4gICAgICAgIGNoYWluOiAwLFxuICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAxLFxuICAgICAgICBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgbmV3QWRkcmVzcy5pbmRleC5zaG91bGQuZXF1YWwoMzE3OSk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWxnb3JhbmQgdGVzdHMnLCAoKSA9PiB7XG4gICAgbGV0IGFsZ29XYWxsZXQ6IFdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGlzIGlzIG5vdCBhIHJlYWwgVEFMR08gd2FsbGV0XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzY1MDIwNGNmNDNkOGI0MDAwN2NkOWUxMWE4NzJjZTY1JyxcbiAgICAgICAgY29pbjogJ3RhbGdvJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc2NTAyMDRiNzhhNzVjOTAwMDc3OTBiY2U5NzlhZTM0ZCcsXG4gICAgICAgICAgJzY1MDIwNGI3NjZjNTZhMDAwNzI5NTZjMDhmYjljZGYxJyxcbiAgICAgICAgICAnNjUwMjA0YjhjY2YxMzcwMDA3YjMyYmI4MTU1ZGZiZWMnLFxuICAgICAgICBdLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICByb290QWRkcmVzczogJzJVTFJHRTY0VTdMVE1UNU02UkVCN09SSFg1R0xKWVdIVElWNUVBWFZMV1FUVEFUVkpER001S0pNSUknLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFsZ29XYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0YWxnbycpLCB3YWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgYnVpbGQgdG9rZW4gZW5hYmxlbWVudCB0cmFuc2FjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGVuYWJsZVRva2VuczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICd0YWxnbzpVU0R0LTE4MDQ0NycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFJlcXVlc3ROb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHthbGdvV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7YWxnb1dhbGxldC5pZCgpfS90eC9idWlsZGApXG4gICAgICAgIC5yZXBseSgodXJpLCBib2R5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gYm9keSBhcyBhbnk7XG4gICAgICAgICAgcGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgICBwYXJhbXMucmVjaXBpZW50c1swXS50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKCd0YWxnbzpVU0R0LTE4MDQ0NycpO1xuICAgICAgICAgIHBhcmFtcy50eXBlLnNob3VsZC5lcXVhbCgnZW5hYmxldG9rZW4nKTtcbiAgICAgICAgICBzaG91bGQubm90LmV4aXN0KHBhcmFtcy5lbmFibGVUb2tlbnMpO1xuICAgICAgICAgIHJldHVybiBbMjAwLCBwYXJhbXNdO1xuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGFsZ29XYWxsZXQuYnVpbGRUb2tlbkVuYWJsZW1lbnRzKHBhcmFtcyk7XG4gICAgICB0eFJlcXVlc3ROb2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdIZWRlcmEgdGVzdHMnLCAoKSA9PiB7XG4gICAgbGV0IGhiYXJXYWxsZXQ6IFdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGlzIGlzIG5vdCBhIHJlYWwgVEhCQVIgd2FsbGV0XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgY29pbjogJ3RoYmFyJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBdLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzAuMC40Nzg0MTUxMScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgaGJhcldhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RoYmFyJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBidWlsZCB0b2tlbiBlbmFibGVtZW50IHRyYW5zYWN0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgZW5hYmxlVG9rZW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3RoYmFyOnVzZGMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhSZXF1ZXN0Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7aGJhcldhbGxldC5jb2luKCl9L3dhbGxldC8ke2hiYXJXYWxsZXQuaWQoKX0vdHgvYnVpbGRgKVxuICAgICAgICAucmVwbHkoKHVyaSwgYm9keSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGJvZHkgYXMgYW55O1xuICAgICAgICAgIHBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgICAgcGFyYW1zLnJlY2lwaWVudHNbMF0udG9rZW5OYW1lLnNob3VsZC5lcXVhbCgndGhiYXI6dXNkYycpO1xuICAgICAgICAgIHBhcmFtcy50eXBlLnNob3VsZC5lcXVhbCgnZW5hYmxldG9rZW4nKTtcbiAgICAgICAgICBzaG91bGQubm90LmV4aXN0KHBhcmFtcy5lbmFibGVUb2tlbnMpO1xuICAgICAgICAgIHJldHVybiBbMjAwLCBwYXJhbXNdO1xuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGhiYXJXYWxsZXQuYnVpbGRUb2tlbkVuYWJsZW1lbnRzKHBhcmFtcyk7XG4gICAgICB0eFJlcXVlc3ROb2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDYW50b24gdGVzdHM6ICcsICgpID0+IHtcbiAgICBsZXQgY2FudG9uV2FsbGV0OiBXYWxsZXQ7XG4gICAgY29uc3QgY2FudG9uQml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycgfSk7XG4gICAgY2FudG9uQml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgIGJhc2VBZGRyZXNzOiAnMTIyMDU6OjEyMjA1YjRlMzUzN2E5NTEyNmQ5MDYwNDU5MjM0NGQ4YWQzYzNkZGNjZGE0Zjc5OTAxOTU0MjgwZWUxOWM1NzY3MTRkJyxcbiAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgIGxhc3RDaGFpbkluZGV4OiB7IDA6IDAgfSxcbiAgICAgIH0sXG4gICAgICBjb2luOiAndGNhbnRvbicsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbnRvbldhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RjYW50b24nKSwgd2FsbGV0RGF0YSk7XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjYW50b25XYWxsZXQuY29pbigpfS9rZXkvJHtjYW50b25XYWxsZXQua2V5SWRzKClbMF19YCkudGltZXMoMykucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICBwdWI6ICc1ZjhXbUMydVc5U0FrN0xNWDJyNEcxQng4TU13eDhzZGdwb3R5SEdvZGlabycsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJoTkszcmc4MlAxVDk0TWF1ZVhGQWJBPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiY1Y0d1U0RXpQanM9XCIsXCJjdFwiOlwiOVZaWDk5WnRzYjZwNzVDeGwybHJjWEJwbG1zc0lBUTlrN1pBODF2ZERZRzRONWRaMzZCUU5XVmZEb2VsajlPMzFYeUorWHJpMFhLSVdVemwwS0tMZlVFUnBsbXROb09DbjVpZkpjWndDck94cEhaUWUzQUo3MDBvOFdtc3JrNUhcIn0nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NhbnRvbldhbGxldC5jb2luKCl9L2tleS8ke2NhbnRvbldhbGxldC5rZXlJZHMoKVsxXX1gKS50aW1lcygyKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgIHB1YjogJ0cxczQzSlR6Tlp6cWhVbjRhTnB3Z2NjNndiOUZVc1pRRDVKamZmRzZpc3lkJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiVUZydC9RbElVUjFYZVFhZlBCYUFsdz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjdWUEJZYUpYUG04PVwiLFwiY3RcIjpcImFqRkt2Mnk4eWFJQlhRMzlzQWJCV2NuYmlFRXpialM0QW9RdHA1Y1hZcWplRFJ4dDNhQ3hlbVBtMjJwbmtKYUNpakZqSnJNSGJrbXNOaE5ZekhnNWFIRnVrTituRUFWc3N5TndIYnpsaFNubTgvQlZONTB5QWRBQXRXcmVoOGNwXCJ9JyxcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjYW50b25XYWxsZXQuY29pbigpfS9rZXkvJHtjYW50b25XYWxsZXQua2V5SWRzKClbMl19YCkudGltZXMoMikucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBwdWI6ICdHSDFMVjFlOUZkcUdlOFUyYzhQTUVjbWEzZkRlaDFrdGNHVkJyRDNBdUZxeCcsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcImlJdVdPSElPRXJFRGRpSm42ZzQ2bWc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJSemg3UlJKa3NqMD1cIixcImN0XCI6XCJyY05JQ1VmcDlGYWtUNTNsK2FkQjZYS3pTMXZOVGMwUXE5akF0cW54QStTY3NzaVM0UTBsM3NnRy8wZ0R5NURhWkt0WHJ5S0JEVXZHc2k3Yi9mWWFGQ1VwQW9abi9WWlRPaE9VTi9tbzdaSGI0T2hPWEwyOVlQUGtpcnlBcTlDclwifScsXG4gICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBidWlsZCB3YWxsZXQgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb25zIGNvcnJlY3RseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHtjYW50b25XYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApXG4gICAgICAgIC5yZXBseSgodXJsLCBib2R5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9keVBhcmFtcyA9IGJvZHkgYXMgYW55O1xuICAgICAgICAgIGJvZHlQYXJhbXMuaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdjcmVhdGVBY2NvdW50Jyk7XG4gICAgICAgICAgYm9keVBhcmFtcy5pbnRlbnQucmVjaXBpZW50cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAyMDAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdmYWtlIHRyYW5zYWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgZmVlSW5mbzogJ2Zha2UgZmVlIGluZm8nLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGNhbnRvbldhbGxldC5zZW5kV2FsbGV0SW5pdGlhbGl6YXRpb24oKTtcbiAgICAgIHR4UmVxdWVzdE5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU29sYW5hIHRlc3RzOiAnLCAoKSA9PiB7XG4gICAgbGV0IHNvbFdhbGxldDogV2FsbGV0O1xuICAgIGNvbnN0IHBhc3NwaHJhc2UgPSAnI0JvbmRpb2xhMTIzNCc7XG4gICAgY29uc3Qgc29sQml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycgfSk7XG4gICAgc29sQml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgIGJhc2VBZGRyZXNzOiAnNWY4V21DMnVXOVNBazdMTVgycjRHMUJ4OE1Nd3g4c2RncG90eUhHb2RpWm8nLFxuICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogZmFsc2UsXG4gICAgICAgIG1pbmltdW1GdW5kaW5nOiAyNDQ3MTM2LFxuICAgICAgICBsYXN0Q2hhaW5JbmRleDogeyAwOiAwIH0sXG4gICAgICB9LFxuICAgICAgY29pbjogJ3Rzb2wnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0c29sJyksIHdhbGxldERhdGEpO1xuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7c29sV2FsbGV0LmNvaW4oKX0va2V5LyR7c29sV2FsbGV0LmtleUlkcygpWzBdfWApLnRpbWVzKDMpLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgcHViOiAnNWY4V21DMnVXOVNBazdMTVgycjRHMUJ4OE1Nd3g4c2RncG90eUhHb2RpWm8nLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiaE5LM3JnODJQMVQ5NE1hdWVYRkFiQT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImNWNHdVNEV6UGpzPVwiLFwiY3RcIjpcIjlWWlg5OVp0c2I2cDc1Q3hsMmxyY1hCcGxtc3NJQVE5azdaQTgxdmREWUc0TjVkWjM2QlFOV1ZmRG9lbGo5TzMxWHlKK1hyaTBYS0lXVXpsMEtLTGZVRVJwbG10Tm9PQ241aWZKY1p3Q3JPeHBIWlFlM0FKNzAwbzhXbXNyazVIXCJ9JyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtzb2xXYWxsZXQuY29pbigpfS9rZXkvJHtzb2xXYWxsZXQua2V5SWRzKClbMV19YCkudGltZXMoMikucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICBwdWI6ICdHMXM0M0pUek5aenFoVW40YU5wd2djYzZ3YjlGVXNaUUQ1SmpmZkc2aXN5ZCcsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcIlVGcnQvUWxJVVIxWGVRYWZQQmFBbHc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCI3VlBCWWFKWFBtOD1cIixcImN0XCI6XCJhakZLdjJ5OHlhSUJYUTM5c0FiQldjbmJpRUV6YmpTNEFvUXRwNWNYWXFqZURSeHQzYUN4ZW1QbTIycG5rSmFDaWpGakpyTUhia21zTmhOWXpIZzVhSEZ1a04rbkVBVnNzeU53SGJ6bGhTbm04L0JWTjUweUFkQUF0V3JlaDhjcFwifScsXG4gICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcblxuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7c29sV2FsbGV0LmNvaW4oKX0va2V5LyR7c29sV2FsbGV0LmtleUlkcygpWzJdfWApLnRpbWVzKDIpLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgcHViOiAnR0gxTFYxZTlGZHFHZThVMmM4UE1FY21hM2ZEZWgxa3RjR1ZCckQzQXVGcXgnLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJpSXVXT0hJT0VyRURkaUpuNmc0Nm1nPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiUnpoN1JSSmtzajA9XCIsXCJjdFwiOlwicmNOSUNVZnA5RmFrVDUzbCthZEI2WEt6UzF2TlRjMFFxOWpBdHFueEErU2Nzc2lTNFEwbDNzZ0cvMGdEeTVEYVpLdFhyeUtCRFV2R3NpN2IvZllhRkNVcEFvWm4vVlpUT2hPVU4vbW83WkhiNE9oT1hMMjlZUFBraXJ5QXE5Q3JcIn0nLFxuICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbjogJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVE9ETyAoU1RMWC0xNTAxOCk6IGZpeCB0ZXN0XG4gICAgICB4aXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgc2lnbiBhIGNvbnNvbGlkYXRpb24gdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHByZWJ1aWxkVHg6IHtcbiAgICAgICAgICAgIHdhbGxldElkOiB3YWxsZXREYXRhLmlkLFxuICAgICAgICAgICAgdHhIZXg6XG4gICAgICAgICAgICAgICdBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFJRTlNV1dWMmN0MDFtZzVHbTRFcWNKOVNBbjJYdUQrRnVBSGNIRlRrYzFUZ3V0M0RnVHNpU2dUUTBkbXpqNUpKZzZxWVRwbjhGeE9ZUEZDRlRNb1ppNDZnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlVwVFdwa3BJUVpOSk9oeFlObzRmSHcxdGQyOGtydUI1QitvUUVFRlJJMFFjK3EwWmc2T09wVjhlQ0RWTGZZemlveDdZQkE3K1FQTFg0SVJoRENTS3dJQ0FnQUJEQUlBQUFDZ2hnRUFBQUFBQUFNQUZWUmxjM1FnYVc1MFpXZHlZWFJwYjI0Z2JXVnRidz09JyxcbiAgICAgICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgICAgICBmZWVQYXllcjogJ0hVVkU1TmZKeUdmVTFkalpzVkxBNmZ4U1RTMUUyaVJxY1RSVk5DOUsyejdjJyxcbiAgICAgICAgICAgICAgbGFtcG9ydHNQZXJTaWduYXR1cmU6IDUwMDAsXG4gICAgICAgICAgICAgIG5vbmNlOiAnMjdFM01YRnZYTVVOWWVNSmVYMXBBYkVSR3NKZlVia2FaVGZnTWdwbU5ONWcnLFxuICAgICAgICAgICAgICBudW1TaWduYXR1cmVzOiAwLFxuICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNEYXRhOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ1RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tQWRkcmVzczogJ0hVVkU1TmZKeUdmVTFkalpzVkxBNmZ4U1RTMUUyaVJxY1RSVk5DOUsyejdjJyxcbiAgICAgICAgICAgICAgICAgICAgdG9BZGRyZXNzOiAnQ2hnSjV0Z0R3QlVzazlSTk1tMmlMaXdQOFJvZHdnWjZ1cXJDNXBhSnNYVlQnLFxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdNZW1vJyxcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBtZW1vOiAnVGVzdCBpbnRlZ3JhdGlvbiBtZW1vJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ01lbW8nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnVGVzdCBpbnRlZ3JhdGlvbiBtZW1vJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdDaGdKNXRnRHdCVXNrOVJOTW0yaUxpd1A4Um9kd2daNnVxckM1cGFKc1hWVCcsXG4gICAgICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uc29saWRhdGVJZDogJzEyMzQnLFxuICAgICAgICAgICAgY29uc29saWRhdGlvbkRldGFpbHM6IHtcbiAgICAgICAgICAgICAgc2VuZGVyQWRkcmVzc0luZGV4OiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH07XG4gICAgICAgIC8vIEJ1aWxkIGFuZCBzaWduIHRoZSB0cmFuc2FjdGlvblxuICAgICAgICBjb25zdCBwcmVCdWlsdFNpZ25lZFR4ID0gYXdhaXQgc29sV2FsbGV0LnByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKHR4UGFyYW1zKTtcbiAgICAgICAgcHJlQnVpbHRTaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBidWlsZCB0b2tlbiBlbmFibGVtZW50IHRyYW5zYWN0aW9ucyBjb3JyZWN0bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGVuYWJsZVRva2VuczogW3sgbmFtZTogJ3Rzb2w6dXNkYycgfSwgeyBuYW1lOiAndHNvbDpzcm0nIH0sIHsgbmFtZTogJ3Rzb2w6Z210JyB9XSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFJlcXVlc3ROb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7c29sV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgKVxuICAgICAgICAucmVwbHkoKHVybCwgYm9keSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvZHlQYXJhbXMgPSBib2R5IGFzIGFueTtcbiAgICAgICAgICBib2R5UGFyYW1zLmludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZW5hYmxlVG9rZW4nKTtcbiAgICAgICAgICBib2R5UGFyYW1zLmludGVudC5yZWNpcGllbnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAgICAgYm9keVBhcmFtcy5pbnRlbnQuZW5hYmxlVG9rZW5zLnNob3VsZC5kZWVwRXF1YWwocGFyYW1zLmVuYWJsZVRva2Vucyk7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDIwMCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2Zha2UgdHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICBmZWVJbmZvOiAnZmFrZSBmZWUgaW5mbycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgc29sV2FsbGV0LmJ1aWxkVG9rZW5FbmFibGVtZW50cyhwYXJhbXMpO1xuICAgICAgdHhSZXF1ZXN0Tm9jay5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBY2NlbGVyYXRlIFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdmYWlscyBpZiBhY2NlbGVyYXRpb24gaWRzIGFyZSBub3QgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7fSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwdHhpZHNfb3JfcmJmdHhpZHNfcmVxdWlyZWQnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIGNwZnBUeElkcyBpcyBub3QgYW4gYXJyYXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IHt9IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcHR4aWRzX25vdF9hcnJheScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgY3BmcFR4SWRzIGlzIG5vdCBvZiBsZW5ndGggMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFtdIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcHR4aWRzX25vdF9hcnJheScgfSk7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZDEnLCAnaWQyJ10gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcHR4aWRzX25vdF9hcnJheScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgY3BmcEZlZVJhdGUgaXMgbm90IHBhc3NlZCBhbmQgbmVpdGhlciBpcyBub0NwZnBGZWVSYXRlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZCddIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcGZlZXJhdGVfbm90X3NldCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgY3BmcEZlZVJhdGUgaXMgbm90IGFuIGludGVnZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQnXSwgY3BmcEZlZVJhdGU6ICdvbmUnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2NwZnBmZWVyYXRlX25vdF9ub25uZWdhdGl2ZV9pbnRlZ2VyJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBjcGZwRmVlUmF0ZSBpcyBuZWdhdGl2ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkJ10sIGNwZnBGZWVSYXRlOiAtMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwZmVlcmF0ZV9ub3Rfbm9ubmVnYXRpdmVfaW50ZWdlcicgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgbWF4RmVlIGlzIG5vdCBwYXNzZWQgYW5kIG5laXRoZXIgaXMgbm9NYXhGZWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZCddLCBub0NwZnBGZWVSYXRlOiB0cnVlIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ21heGZlZV9ub3Rfc2V0JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBtYXhGZWUgaXMgbm90IGFuIGludGVnZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQnXSwgbm9DcGZwRmVlUmF0ZTogdHJ1ZSwgbWF4RmVlOiAnb25lJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdtYXhmZWVfbm90X25vbm5lZ2F0aXZlX2ludGVnZXInIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIG1heEZlZSBpcyBuZWdhdGl2ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkJ10sIG5vQ3BmcEZlZVJhdGU6IHRydWUsIG1heEZlZTogLTEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnbWF4ZmVlX25vdF9ub25uZWdhdGl2ZV9pbnRlZ2VyJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBib3RoIHJiZlR4aWRzIGFuZCBjcGZwVHhpZHMgaXMgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQxJ10sIHJiZlR4SWRzOiBbJ2lkMiddIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2Nhbm5vdF9zcGVjaWZ5X2JvdGhfY3BmcF9hbmRfcmJmX3R4aWRzJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiByYmZUeElkcyBpcyBzZXQgYnV0IGZlZU11bHRpcGxpZXIgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgcmJmVHhJZHM6IFsnaWQnXSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdmZWVtdWx0aXBsaWVyX25vdF9zZXQnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIGZlZSBtdWx0aXBsaWVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyByYmZUeElkczogWydpZCddLCBmZWVNdWx0aXBsaWVyOiAxIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2ZlZW11bHRpcGxpZXJfZ3JlYXRlcl90aGFuX29uZScgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgcmJmVHhJZHM6IFsnaWQyJ10sIGZlZU11bHRpcGxpZXI6IDAuNSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdmZWVtdWx0aXBsaWVyX2dyZWF0ZXJfdGhhbl9vbmUnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3N1Ym1pdHMgYSB0cmFuc2FjdGlvbiB3aXRoIGFsbCBjcGZwIHNwZWNpZmljIHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGNwZnBUeElkczogWydpZCddLFxuICAgICAgICBjcGZwRmVlUmF0ZTogMSxcbiAgICAgICAgbWF4RmVlOiAxLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcHJlYnVpbGRSZXR1cm4gPSBPYmplY3QuYXNzaWduKHsgdHhIZXg6ICcxMjMnIH0sIHBhcmFtcyk7XG4gICAgICBjb25zdCBwcmVidWlsZFN0dWIgPSBzaW5vbi5zdHViKHdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMocHJlYnVpbGRSZXR1cm4pO1xuXG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2VuZGA7XG4gICAgICBub2NrKGJnVXJsKS5wb3N0KHBhdGgsIF8ubWF0Y2hlcyhwcmVidWlsZFJldHVybikpLnJlcGx5KDIwMCk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24ocGFyYW1zKTtcblxuICAgICAgcHJlYnVpbGRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgocGFyYW1zKTtcblxuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmFub3V0IGlucHV0IG1heE51bUlucHV0c1RvVXNlIGFuZCB1bnNwZW50cyB2ZXJpZmljYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnO1xuICAgIGNvbnN0IG1heE51bUlucHV0c1RvVXNlID0gMjtcbiAgICBjb25zdCB1bnNwZW50cyA9IFtcbiAgICAgICdjYzMwNTY1NzUwZTJhZWI4MTg2MjVhYWVkYWY4OWRiNWM2MTRlNTk3N2I5NjQ1Y2VlMWQ3Mjg5ZjYxNmZiMWQ4OjAnLFxuICAgICAgJzhjNDUxNjQ3ODdhOTU0YWIwNzg2NGFmOWIwNWIzNGZiZGUzYThlNDMwYThjNjViMGU2MGU0ZTU0M2Q4ZTFiNmM6MicsXG4gICAgXTtcbiAgICBsZXQgYmFzZWNvaW47XG4gICAgbGV0IHdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKTtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgfTtcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBtYXhOdW1JbnB1dHNUb1VzZSBwYXJhbWV0ZXIgd2hlbiBjYWxsaW5nIGZhbm91dCB1bnNwZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9mYW5vdXRVbnNwZW50c2A7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IG1heE51bUlucHV0c1RvVXNlIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuZmFub3V0VW5zcGVudHMoeyBhZGRyZXNzLCBtYXhOdW1JbnB1dHNUb1VzZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGhlIGZhbm91dFVuc3BlbnRzIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC9mYW5vdXRVbnNwZW50cyBhbmQgd2hldGhlciBtYXhOdW1JbnB1dHNUb1VzZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHVuc3BlbnRzIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgZmFub3V0IHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgdW5zcGVudHMgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5mYW5vdXRVbnNwZW50cyh7IGFkZHJlc3MsIHVuc3BlbnRzIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgZmFub3V0VW5zcGVudHMgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2Zhbm91dFVuc3BlbnRzIGFuZCB3aGV0aGVyIHVuc3BlbnRzIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG9ubHkgYnVpbGQgdHggKG5vdCBzaWduL3NlbmQpIHdoaWxlIGZhbm5pbmcgb3V0IHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybCkucG9zdChwYXRoLCBfLm1hdGNoZXMoeyB1bnNwZW50cyB9KSkucmVwbHkoMjAwKTtcblxuICAgICAgY29uc3QgdW51c2VkTm9ja3MgPSBub2NrKGJnVXJsKTtcbiAgICAgIHVudXNlZE5vY2tzLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L2tleS8ke3dhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDApO1xuICAgICAgdW51c2VkTm9ja3MucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYCkucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmZhbm91dFVuc3BlbnRzKHsgYWRkcmVzcywgdW5zcGVudHMgfSwgTWFuYWdlVW5zcGVudHNPcHRpb25zLkJVSUxEX09OTFkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgZmFub3V0VW5zcGVudHMgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2Zhbm91dFVuc3BlbnRzIGFuZCB3aGV0aGVyIHVuc3BlbnRzIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB1bnVzZWROb2Nrcy5wZW5kaW5nTW9ja3MoKS5sZW5ndGguc2hvdWxkLmVxbCgyKTtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcm91dGUgY3VzdG9kaWFsIGZhbm91dFVuc3BlbnRzIHRocm91Z2ggdHgvaW5pdGlhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjdXN0b2RpYWxCYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKTtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbFdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICB0eXBlOiAnY3VzdG9kaWFsJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBjdXN0b2RpYWxXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBjdXN0b2RpYWxCYXNlY29pbiwgY3VzdG9kaWFsV2FsbGV0RGF0YSk7XG5cbiAgICAgIGNvbnN0IGluaXRpYXRlUGF0aCA9IGAvYXBpL3YyLyR7Y3VzdG9kaWFsV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7Y3VzdG9kaWFsV2FsbGV0LmlkKCl9L3R4L2luaXRpYXRlYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoaW5pdGlhdGVQYXRoLCBfLm1hdGNoZXMoeyB0eXBlOiAnZmFub3V0JyB9KSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdhY2NlcHRlZCcsIHR4UmVxdWVzdElkOiAnbW9jay10eC1yZXF1ZXN0LWlkJyB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3VzdG9kaWFsV2FsbGV0LmZhbm91dFVuc3BlbnRzKHsgbnVtVW5zcGVudHNUb01ha2U6IDEwIH0pO1xuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIChyZXN1bHQgYXMgYW55KS5zdGF0dXMuc2hvdWxkLmVxdWFsKCdhY2NlcHRlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ3VzdG9keSBzQlRDIGJyaWRnaW5nL3dpdGhkcmF3IHBhcmFtcyBwYXNzLXRocm91Z2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnJpZGdpbmdQYXJhbXMgPSB7XG4gICAgICBzYnRjOiB7XG4gICAgICAgIGFtb3VudDogMTAwMDAwLFxuICAgICAgICBzdGFja3NSZWNpcGllbnQ6ICdTUDJKNlpZNDhHVjFFWjVWMlY1UkI5TVA2NlNXODZQWUtLTlJWOUVKNycsXG4gICAgICAgIG1heEZlZTogNTAwMCxcbiAgICAgICAgbG9ja1RpbWU6IDE0NCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBzYnRjV2l0aGRyYXdQYXJhbXMgPSB7XG4gICAgICBhbW91bnQ6ICcxMDAwMDAnLFxuICAgICAgYnRjQWRkcmVzczogJzJOOUVnbzlLaWRpWlI4dE1QODJnNlJhZ2dRdGNiUjl6TnpIJyxcbiAgICAgIG1heEZlZTogJzUwMDAnLFxuICAgIH07XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGJyaWRnaW5nUGFyYW1zIHRocm91Z2ggc2VuZE1hbnkgdG8gdHgvaW5pdGlhdGUgZm9yIGN1c3RvZGlhbCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VzdG9kaWFsV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGJ0YycpLCB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICB0eXBlOiAnY3VzdG9kaWFsJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpbml0aWF0ZVBhdGggPSBgL2FwaS92Mi8ke2N1c3RvZGlhbFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2N1c3RvZGlhbFdhbGxldC5pZCgpfS90eC9pbml0aWF0ZWA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGluaXRpYXRlUGF0aCwgXy5tYXRjaGVzKHsgdHlwZTogJ2JyaWRnaW5nJywgYnJpZGdpbmdQYXJhbXMgfSkpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnYWNjZXB0ZWQnLCB0eFJlcXVlc3RJZDogJ21vY2stdHgtcmVxdWVzdC1pZCcgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGN1c3RvZGlhbFdhbGxldC5zZW5kTWFueSh7IHR5cGU6ICdicmlkZ2luZycsIGJyaWRnaW5nUGFyYW1zIH0pO1xuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIChyZXN1bHQgYXMgYW55KS5zdGF0dXMuc2hvdWxkLmVxdWFsKCdhY2NlcHRlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHNidGNXaXRoZHJhd1BhcmFtcyB0aHJvdWdoIHNlbmRNYW55IHRvIHR4L2luaXRpYXRlIGZvciBjdXN0b2RpYWwgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RidGMnKSwge1xuICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYScsXG4gICAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgICAgdHlwZTogJ2N1c3RvZGlhbCcsXG4gICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaW5pdGlhdGVQYXRoID0gYC9hcGkvdjIvJHtjdXN0b2RpYWxXYWxsZXQuY29pbigpfS93YWxsZXQvJHtjdXN0b2RpYWxXYWxsZXQuaWQoKX0vdHgvaW5pdGlhdGVgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChpbml0aWF0ZVBhdGgsIF8ubWF0Y2hlcyh7IHNidGNXaXRoZHJhd1BhcmFtcyB9KSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdhY2NlcHRlZCcsIHR4UmVxdWVzdElkOiAnbW9jay10eC1yZXF1ZXN0LWlkJyB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3VzdG9kaWFsV2FsbGV0LnNlbmRNYW55KHsgc2J0Y1dpdGhkcmF3UGFyYW1zIH0gYXMgYW55KTtcbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAocmVzdWx0IGFzIGFueSkuc3RhdHVzLnNob3VsZC5lcXVhbCgnYWNjZXB0ZWQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIHByZWJ1aWxkcycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZXRoV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBldGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0ZXRoJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcmVxSWQgaWYgaXQgd2FzIHBhc3NlZCBpbiB0aGUgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBvZmZsaW5lVmVyaWZpY2F0aW9uOiB0cnVlIH07XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMpXG4gICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IC4uLnBhcmFtcywgcmVxSWQ6IHJlcUlkIH0pO1xuICAgICAgdHhSZXF1ZXN0LnJlcUlkPy5zaG91bGQuY29udGFpbkVxbChyZXFJZCk7XG4gICAgICBzY29wZS5kb25lKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3Mgb2ZmbGluZVZlcmlmaWNhdGlvbj10cnVlIHF1ZXJ5IHBhcmFtIGlmIHBhc3NlZCB0cnV0aHkgdmFsdWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IG9mZmxpbmVWZXJpZmljYXRpb246IHRydWUgfTtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgLCB0YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcylcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHQgPSAxMDA7XG4gICAgICBjb25zdCBibG9ja0hlaWdodFN0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAnZ2V0TGF0ZXN0QmxvY2tIZWlnaHQnKS5yZXNvbHZlcyhibG9ja0hlaWdodCk7XG4gICAgICBjb25zdCBwb3N0UHJvY2Vzc1N0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICBibG9ja0hlaWdodFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIHNjb3BlLmRvbmUoKTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5yZXN0b3JlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgcGFzcyB0aGUgb2ZmbGluZVZlcmlmaWNhdGlvbiBxdWVyeSBwYXJhbSBpZiBwYXNzZWQgYSBmYWxzZXkgdmFsdWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IG9mZmxpbmVWZXJpZmljYXRpb246IGZhbHNlIH07XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGAsIHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zKVxuICAgICAgICAucXVlcnkoe30pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIucmVzdG9yZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBzY3JpcHQgb3V0cHV0cyB3aXRoIHRoZSBwcm9wZXIgc3RydWN0dXJlIHRvIHdhbGxldCBwbGF0Zm9ybScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9ICc2YTExMjIzMzQ0NTU2Njc3ODg5OTAwJztcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwge1xuICAgICAgICAgIC4uLnRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IHNjcmlwdCwgYW1vdW50OiAxZTYgfV0sXG4gICAgICAgIH0pXG4gICAgICAgIC5xdWVyeSh7fSlcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCBibG9ja0hlaWdodCA9IDEwMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKGJsb2NrSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHBvc3RQcm9jZXNzU3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdwb3N0UHJvY2Vzc1ByZWJ1aWxkJykucmVzb2x2ZXMoe30pO1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBgc2NyaXB0UHViS2V5OiR7c2NyaXB0fWAsIGFtb3VudDogMWU2IH1dIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHsgLi4udGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMsIHJlY2lwaWVudHM6IFt7IHNjcmlwdCwgYW1vdW50OiAxZTYgfV0gfSxcbiAgICAgIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlYnVpbGQgc2hvdWxkIGNhbGwgYnVpbGQgYW5kIGdldExhdGVzdEJsb2NrSGVpZ2h0IGZvciB1dHhvIGNvaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGAsIHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zKVxuICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBjb25zdCBibG9ja0hlaWdodCA9IDEwMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKGJsb2NrSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHBvc3RQcm9jZXNzU3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdwb3N0UHJvY2Vzc1ByZWJ1aWxkJykucmVzb2x2ZXMoe30pO1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2UoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2VXaXRoKHtcbiAgICAgICAgYmxvY2tIZWlnaHQ6IDEwMCxcbiAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgIGJ1aWxkUGFyYW1zOiB0YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlYnVpbGQgc2hvdWxkIG5vdCBoYXZlIGNoYW5nZUFkZHJlc3NUeXBlIGFycmF5IGluIHBvc3QgYm9keSB3aGVuIGNoYW5nZUFkZHJlc3NUeXBlIGlzIGRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBlY3RlZEJ1aWxkUG9zdEJvZHlQYXJhbXMgPSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlOiAncDJ0ck11c2lnMicsXG4gICAgICAgIHR4Rm9ybWF0OiAncHNidCcsXG4gICAgICB9O1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGAsIGV4cGVjdGVkQnVpbGRQb3N0Qm9keVBhcmFtcylcbiAgICAgICAgLnF1ZXJ5KHt9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBjb25zdCBibG9ja0hlaWdodCA9IDEwMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKGJsb2NrSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHBvc3RQcm9jZXNzU3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdwb3N0UHJvY2Vzc1ByZWJ1aWxkJykucmVzb2x2ZXMoe30pO1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyBjaGFuZ2VBZGRyZXNzVHlwZTogJ3AydHJNdXNpZzInIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IGV4cGVjdGVkQnVpbGRQb3N0Qm9keVBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgYnJpZGdpbmdQYXJhbXMgdG8gdHgvYnVpbGQgZm9yIG5vbi1UU1MgQlRDIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJyaWRnaW5nUGFyYW1zID0ge1xuICAgICAgICBzYnRjOiB7XG4gICAgICAgICAgYW1vdW50OiAxMDAwMDAsXG4gICAgICAgICAgc3RhY2tzUmVjaXBpZW50OiAnU1AySjZaWTQ4R1YxRVo1VjJWNVJCOU1QNjZTVzg2UFlLS05SVjlFSjcnLFxuICAgICAgICAgIG1heEZlZTogNTAwMCxcbiAgICAgICAgICBsb2NrVGltZTogMTQ0LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQnVpbGRQYXJhbXMgPSB7XG4gICAgICAgIHR5cGU6ICdicmlkZ2luZycsXG4gICAgICAgIHR4Rm9ybWF0OiAncHNidCcsXG4gICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICBicmlkZ2luZ1BhcmFtcyxcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGU6IFsncDJ0ck11c2lnMicsICdwMndzaCcsICdwMnNoUDJ3c2gnLCAncDJzaCcsICdwMnRyJ10sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgZXhwZWN0ZWRCdWlsZFBhcmFtcylcbiAgICAgICAgLnF1ZXJ5KHt9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBjb25zdCBibG9ja0hlaWdodFN0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAnZ2V0TGF0ZXN0QmxvY2tIZWlnaHQnKS5yZXNvbHZlcygxMDApO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIHR5cGU6ICdicmlkZ2luZycsXG4gICAgICAgIHR4Rm9ybWF0OiAncHNidCcsXG4gICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICBicmlkZ2luZ1BhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IGV4cGVjdGVkQnVpbGRQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIHNjb3BlLmRvbmUoKTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5yZXN0b3JlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGJyaWRnaW5nUGFyYW1zIGlzIG1pc3NpbmcgZm9yIGJyaWRnaW5nIHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR5cGU6ICdicmlkZ2luZycsXG4gICAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXCInYnJpZGdpbmdQYXJhbXMnIGlzIHJlcXVpcmVkIGZvciBicmlkZ2luZyBpbnRlbnRcIik7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlYnVpbGQgc2hvdWxkIGNhbGwgYnVpbGQgYnV0IG5vdCBnZXRMYXRlc3RCbG9ja0hlaWdodCBmb3IgYWNjb3VudCBjb2lucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIFsndHhycCcsICd0eGxtJywgJ3RldGgnXS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChjb2luKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRjb2luID0gYml0Z28uY29pbihjb2luKTtcbiAgICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIxYScsXG4gICAgICAgICAgY29pbixcbiAgICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhY2NvdW50V2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYWNjb3VudGNvaW4sIHdhbGxldERhdGEpO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAucG9zdChgL2FwaS92Mi8ke2FjY291bnRXYWxsZXQuY29pbigpfS93YWxsZXQvJHthY2NvdW50V2FsbGV0LmlkKCl9L3R4L2J1aWxkYClcbiAgICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihhY2NvdW50Y29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICAgIGF3YWl0IGFjY291bnRXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgICAgd2FsbGV0OiBhY2NvdW50V2FsbGV0LFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7fSxcbiAgICAgICAgfSk7XG4gICAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBpc0JhdGNoID0gdHJ1ZSBpbiB0aGUgdHhQcmVidWlsZCBpZiB0eFBhcmFtcyBoYXMgbW9yZSB0aGFuIG9uZSByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHsgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6IGFkZHJlc3MxIH0sXG4gICAgICAgICAgeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwJywgYWRkcmVzczogYWRkcmVzczIgfSxcbiAgICAgICAgXSxcbiAgICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ21vb24nLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdG90YWxBbW91bnQgPSAnMjAwMDAwMDAwMDAwMDAwMCc7XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KFxuICAgICAgICAgIGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L3R4L2J1aWxkYCxcbiAgICAgICAgICBfLm1hdGNoZXMoeyByZWNpcGllbnRzOiB0eFBhcmFtcy5yZWNpcGllbnRzIH0pXG4gICAgICAgIClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJzB4YzBhYWYyNjQ5ZTdiMGYzOTUwMTY0NjgxZWNhMmIxYThmNjU0YTQ3OCcsXG4gICAgICAgICAgICAgIGFtb3VudDogJzIwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgICBkYXRhOiAnMHhjMDBjNGU5ZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4ZDdlYTRjNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOGQ3ZWE0YzY4MDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAxMDg5NixcbiAgICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgICBpc0JhdGNoOiB0cnVlLFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCBldGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih0eFBhcmFtcyk7XG4gICAgICB0eFByZWJ1aWxkLmlzQmF0Y2guc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgdHhQcmVidWlsZC5yZWNpcGllbnRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAoYml0Z28uY29pbigndGV0aCcpIGFzIGFueSkuc3RhdGljc0NvaW4ubmV0d29yay5iYXRjaGVyQ29udHJhY3RBZGRyZXNzXG4gICAgICApO1xuICAgICAgdHhQcmVidWlsZC5yZWNpcGllbnRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwodG90YWxBbW91bnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGlzQmF0Y2ggPSBmYWxzZSBhbmQgaG9wVHJhbnNhY3Rpb24gZmllbGQgc2hvdWxkIG5vdCBiZSB0aGVyZSBpbiB0aGUgdHhQcmVidWlsZCAgZm9yIG5vcm1hbCBldGggdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6IGFkZHJlc3MxIH1dLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnbW9vbicsXG4gICAgICB9O1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChcbiAgICAgICAgICBgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS90eC9idWlsZGAsXG4gICAgICAgICAgXy5tYXRjaGVzKHsgcmVjaXBpZW50czogdHhQYXJhbXMucmVjaXBpZW50cyB9KVxuICAgICAgICApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgICBhZGRyZXNzOiAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAxMDg5NyxcbiAgICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgICBpc0JhdGNoOiBmYWxzZSxcbiAgICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgZXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24odHhQYXJhbXMpO1xuICAgICAgdHhQcmVidWlsZC5pc0JhdGNoLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICB0eFByZWJ1aWxkLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnaG9wVHJhbnNhY3Rpb24nKTtcbiAgICAgIHR4UHJlYnVpbGQucmVjaXBpZW50c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChhZGRyZXNzMSk7XG4gICAgICB0eFByZWJ1aWxkLnJlY2lwaWVudHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGlzVGVzdFRyYW5zYWN0aW9uIHBhcmFtZXRlciB0aHJvdWdoIGZvciBtdWx0aXNpZyB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdhYWEnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGlzVGVzdFRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMsIGlzVGVzdFRyYW5zYWN0aW9uIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzLCBpc1Rlc3RUcmFuc2FjdGlvbiB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGhlIHByZWJ1aWxkVHJhbnNhY3Rpb24gbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL3R4L2J1aWxkIGFuZCB3aGV0aGVyIGlzVGVzdFRyYW5zYWN0aW9uIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgdW5zcGVudCByZXNlcnZhdGlvbiBwYXJhbWV0ZXIgdGhyb3VnaCB3aGVuIGJ1aWxkaW5nIHRyYW5zYWN0aW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc2VydmF0aW9uID0ge1xuICAgICAgICBleHBpcmVUaW1lOiAnMjAyOS0wOC0xMicsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdhYWEnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMsIHJlc2VydmF0aW9uIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzLCByZXNlcnZhdGlvbiB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGhlIHByZWJ1aWxkVHJhbnNhY3Rpb24gbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL3R4L2J1aWxkIGFuZCB3aGV0aGVyIHJlc2VydmF0aW9uIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgZ2FzIGxpbWl0IHBhcmFtZXRlciB0aHJvdWdoIHdoZW4gYnVpbGRpbmcgdHJhbnNhY3Rpb24gZm9yIHN1aScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgZ2FzTGltaXQ6IDEwMCB9O1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHBhcmFtcykpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgcHJlYnVpbGRUcmFuc2FjdGlvbiBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgcmVzZXJ2YXRpb24gaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ01heGltdW0gU3BlbmRhYmxlJywgZnVuY3Rpb24gbWF4aW11bVNwZW5kYWJsZSgpIHtcbiAgICBsZXQgYmdVcmw7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5wZW5kaW5nTW9ja3MoKS5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0udXJpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FyZ3VtZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9wdGlvbmFsUGFyYW1zID0ge1xuICAgICAgICBsaW1pdDogMjUsXG4gICAgICAgIG1pblZhbHVlOiAnMCcsXG4gICAgICAgIG1heFZhbHVlOiAnOTk5OTk5OTk5OTk5OScsXG4gICAgICAgIG1pbkhlaWdodDogMCxcbiAgICAgICAgbWluQ29uZmlybXM6IDIsXG4gICAgICAgIGVuZm9yY2VNaW5Db25maXJtc0ZvckNoYW5nZTogZmFsc2UsXG4gICAgICAgIGZlZVJhdGU6IDEwMDAwLFxuICAgICAgICBtYXhGZWVSYXRlOiAxMDAwMDAsXG4gICAgICAgIHJlY2lwaWVudEFkZHJlc3M6ICcyTkNVRkRMaVV6OUNWbm1kVnFRZTlhY1Zvbm9NODllNzZkZicsXG4gICAgICB9O1xuXG4gICAgICAvLyBUaGUgYWN0dWFsIGFwaSByZXF1ZXN0IHdpbGwgb25seSBzZW5kIHN0cmluZ3MsIGJ1dCB0aGUgU0RLIGZ1bmN0aW9uIGV4cGVjdHMgbnVtYmVycyBmb3Igc29tZSB2YWx1ZXNcbiAgICAgIGNvbnN0IGFwaVBhcmFtcyA9IF8ubWFwVmFsdWVzKG9wdGlvbmFsUGFyYW1zLCAocGFyYW0pID0+IFN0cmluZyhwYXJhbSkpO1xuXG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vbWF4aW11bVNwZW5kYWJsZWA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQocGF0aClcbiAgICAgICAgLnF1ZXJ5KF8ubWF0Y2hlcyhhcGlQYXJhbXMpKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBjb2luOiAndGJjaCcsXG4gICAgICAgICAgbWF4aW11bVNwZW5kYWJsZTogNjUwMDAsXG4gICAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQubWF4aW11bVNwZW5kYWJsZShvcHRpb25hbFBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdXYWxsZXQgU2hhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNoYXJlIHRvIGNvbGQgd2FsbGV0IHdpdGhvdXQgcGFzc2luZyBza2lwS2V5Y2hhaW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VySWQgPSAnMTIzJztcbiAgICAgIGNvbnN0IGVtYWlsID0gJ3NoYXJldG9Ac2RrdGVzdC5jb20nO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSAndmlldyxzcGVuZCc7XG5cbiAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybCkucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pLnJlcGx5KDIwMCwgeyB1c2VySWQgfSk7XG5cbiAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7Y29sZFdhbGxldC5rZXlJZHMoKVswXX1gKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSlcbiAgICAgICAgLmdldChgL2FwaS92Mi90YnRjL2tleS8ke2NvbGRXYWxsZXQua2V5SWRzKClbMV19YClcbiAgICAgICAgLnJlcGx5KDIwMCwge30pXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHtjb2xkV2FsbGV0LmtleUlkcygpWzJdfWApXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgY29uc3QgY3JlYXRlU2hhcmVOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvdGJ0Yy93YWxsZXQvJHtjb2xkV2FsbGV0LmlkKCl9L3NoYXJlYCwge1xuICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICBza2lwS2V5Y2hhaW46IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgY29sZFdhbGxldC5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucyB9KTtcblxuICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgIGdldEtleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hvdCBXYWxsZXQgU2hhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgIGNvbnN0IHRvS2V5Y2hhaW4gPSB1dHhvTGliLmJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCdkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyJywgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHBhdGggPSAnbS85OTk5OTkvMS8xJztcbiAgICAgIGNvbnN0IHB1YmtleSA9IHRvS2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdiaXRnbzEyMzQnO1xuICAgICAgY29uc3QgcHViID0gJ1pvMWdnelRVS01ZNWJZbkR2VDVtdFZlWnh6ZjJGYUxUYktrbXZHVWhVUWsnO1xuXG4gICAgICBjb25zdCBsaWdodG5pbmdDb2luOiBhbnkgPSBiaXRnby5jb2luKCd0bG5idGMnKTtcbiAgICAgIGNvbnN0IGxpZ2h0bmluZ1dhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDEnLFxuICAgICAgICBjb2luOiAndGxuYnRjJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwMSddLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHsga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzcwMDAwMDAwMCddIH0sXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpZ2h0bmluZ1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGxpZ2h0bmluZ0NvaW4sIGxpZ2h0bmluZ1dhbGxldERhdGEpO1xuXG4gICAgICBmb3IgKGNvbnN0IGhvdFdhbGxldCBvZiBbd2FsbGV0LCBsaWdodG5pbmdXYWxsZXRdIGFzIGNvbnN0KSB7XG4gICAgICAgIGl0KGBzaG91bGQgdXNlIGtleWNoYWluIHB1YiB0byBzaGFyZSAke2hvdFdhbGxldC5jb2luKCl9IGhvdCB3YWxsZXRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleSwgcGF0aCB9KTtcblxuICAgICAgICAgIGNvbnN0IGdldEtleU5vY2tzOiBub2NrLlNjb3BlW10gPSBbXTtcbiAgICAgICAgICBpZiAoaG90V2FsbGV0LmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnbG5idGMnKSB7XG4gICAgICAgICAgICBjb25zdCBlbmNYcHJ2MCA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYwJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmNYcHJ2MSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYxJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRQcnZzID0gW2VuY1hwcnYwLCBlbmNYcHJ2MV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBrZXlJZCA9IGxpZ2h0bmluZ1dhbGxldERhdGEuY29pblNwZWNpZmljLmtleXNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAgIC5nZXQoYC9hcGkvdjIvdGxuYnRjL2tleS8ke2tleUlkfWApXG4gICAgICAgICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgICAgICAgaWQ6IGtleUlkLFxuICAgICAgICAgICAgICAgICAgcHViOiBpID09PSAwID8gcHViIDogJ1pvMWdnelRVS01ZNWJZbkR2VDVtdFZlWnh6ZjJGYUxUYktrbXZHVWhVUW0nLFxuICAgICAgICAgICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY3J5cHRlZFBydnNbaV0sXG4gICAgICAgICAgICAgICAgICBjb2luU3BlY2lmaWM6XG4gICAgICAgICAgICAgICAgICAgIGkgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICA/IHsgW2hvdFdhbGxldC5iYXNlQ29pbi5nZXRDaGFpbigpXTogeyBwdXJwb3NlOiAndXNlckF1dGgnIH0gfVxuICAgICAgICAgICAgICAgICAgICAgIDogeyBbaG90V2FsbGV0LmJhc2VDb2luLmdldENoYWluKCldOiB7IHB1cnBvc2U6ICdub2RlQXV0aCcgfSB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBnZXRLZXlOb2Nrcy5wdXNoKGdldEtleU5vY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbmNYcHJ2MSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYxJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgICAgICBjb25zdCBnZXRLZXlOb2NrID0gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgICBpZDogd2FsbGV0LmtleUlkcygpWzBdLFxuICAgICAgICAgICAgICBwdWIsXG4gICAgICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY1hwcnYxLFxuICAgICAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnZXRLZXlOb2Nrcy5wdXNoKGdldEtleU5vY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKGhvdFdhbGxldCwgJ2NyZWF0ZVNoYXJlJykuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgb3B0aW9ucyEua2V5Y2hhaW4hLnB1YiEuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEucHViIS5zaG91bGQuZXF1YWwocHViKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgaG90V2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgICAgc3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICBnZXRLZXlOb2Nrcy5ldmVyeSgodikgPT4gdi5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3ZpZGUgc2tpcEtleWNoYWluIHRvIHdhbGxldCBzaGFyZSBhcGkgZm9yIGhvdCB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VySWQgPSAnMTIzJztcbiAgICAgIGNvbnN0IGVtYWlsID0gJ3NoYXJldG9Ac2RrdGVzdC5jb20nO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSAndmlldyxzcGVuZCc7XG4gICAgICBjb25zdCB0b0tleWNoYWluID0gdXR4b0xpYi5iaXAzMi5mcm9tU2VlZChCdWZmZXIuZnJvbSgnZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMicsICdoZXgnKSk7XG4gICAgICBjb25zdCBwYXRoID0gJ20vOTk5OTk5LzEvMSc7XG4gICAgICBjb25zdCBwdWJrZXkgPSB0b0tleWNoYWluLmRlcml2ZVBhdGgocGF0aCkucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHsgdXNlcklkLCBwdWJrZXksIHBhdGggfSk7XG4gICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi90YnRjL3dhbGxldC8ke3dhbGxldC5pZCgpfS9zaGFyZWAsIHtcbiAgICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgc2tpcEtleWNoYWluOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucywgc2tpcEtleWNoYWluOiB0cnVlIH0pO1xuXG4gICAgICBjcmVhdGVTaGFyZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgIGdldFNoYXJpbmdLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlY3J5cHQgd2ViYXV0aG4gZW5jcnlwdGVkUHJ2IGZvciB3YWxsZXQgc2hhcmUgKHNwZW5kKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgIGNvbnN0IHRvS2V5Y2hhaW4gPSB1dHhvTGliLmJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCdkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyJywgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHBhdGggPSAnbS85OTk5OTkvMS8xJztcbiAgICAgIGNvbnN0IHB1YmtleSA9IHRvS2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgcHJpdmF0ZUtleSA9ICd4cHJ2MSc7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlMSA9ICdiaXRnbzEyMzQnO1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZTIgPSAnYml0Z281Njc4JztcblxuICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHsgdXNlcklkLCBwdWJrZXksIHBhdGggfSk7XG5cbiAgICAgIGNvbnN0IHB1YiA9ICdabzFnZ3pUVUtNWTViWW5EdlQ1bXRWZVp4emYyRmFMVGJLa212R1VoVVFrJztcbiAgICAgIGNvbnN0IGVuY1BydjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHByaXZhdGVLZXksIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlMSB9KTtcbiAgICAgIGNvbnN0IGVuY1BydjIgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHByaXZhdGVLZXksIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlMiB9KTtcbiAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogd2FsbGV0LmtleUlkcygpWzBdLFxuICAgICAgICAgIHB1YixcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY1BydjEsXG4gICAgICAgICAgd2ViYXV0aG5EZXZpY2VzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG90cERldmljZUlkOiAnMTIzJyxcbiAgICAgICAgICAgICAgYXV0aGVudGljYXRvckluZm86IHtcbiAgICAgICAgICAgICAgICBjcmVkSUQ6ICdjcmVkSUQnLFxuICAgICAgICAgICAgICAgIGZtdDogJ3BhY2tlZCcsXG4gICAgICAgICAgICAgICAgcHVibGljS2V5OiAnc29tZSB2YWx1ZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHByZlNhbHQ6ICc0NTYnLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY1BydjIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKHdhbGxldCwgJ2NyZWF0ZVNoYXJlJykuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIG9wdGlvbnMhLmtleWNoYWluIS5lbmNyeXB0ZWRQcnYhLnNob3VsZC5ub3QuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHdhbGxldC5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucywgd2FsbGV0UGFzc3BocmFzZTogd2FsbGV0UGFzc3BocmFzZTIgfSk7XG4gICAgICBzdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGdldFNoYXJpbmdLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICBnZXRLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT0ZDIG11bHRpLWtleS11c2VyLUtleSBXYWxsZXQgU2hhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgIGxldCBvZmNXYWxsZXQ6IFdhbGxldDtcbiAgICAgIGxldCBvZmNNdWx0aVVzZXJLZXlXYWxsZXQ6IFdhbGxldDtcbiAgICAgIGxldCBub25NdWx0aVVzZXJLZXlXYWxsZXQ6IFdhbGxldDtcblxuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgb2ZjQ29pbiA9IGJpdGdvLmNvaW4oJ29mYycpO1xuXG4gICAgICAgIC8vIFJlZ3VsYXIgT0ZDIHdhbGxldCB3aXRob3V0IG11bHRpLWtleS11c2VyLWtleSBmZWF0dXJlXG4gICAgICAgIGNvbnN0IHJlZ3VsYXJPZmNXYWxsZXREYXRhID0ge1xuICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMGMwMDAwMDAwMCcsXG4gICAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE4MTAwMDAwMDAwJyxcbiAgICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxODIwMDAwMDAwMCcsXG4gICAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTgzMDAwMDAwMDAnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICAgIG9mY1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIHJlZ3VsYXJPZmNXYWxsZXREYXRhKTtcblxuICAgICAgICAvLyBPRkMgd2FsbGV0IHdpdGggbXVsdGkta2V5LXVzZXIta2V5IGZlYXR1cmVcbiAgICAgICAgY29uc3QgbXVsdGlVc2VyS2V5V2FsbGV0RGF0YSA9IHtcbiAgICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDBkMDAwMDAwMDAnLFxuICAgICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTg0MDAwMDAwMDAnXSxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIGZlYXR1cmVzOiBbJ211bHRpLWtleS11c2VyLWtleSddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgIH0gYXMgYW55O1xuICAgICAgICBvZmNNdWx0aVVzZXJLZXlXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBvZmNDb2luLCBtdWx0aVVzZXJLZXlXYWxsZXREYXRhKTtcblxuICAgICAgICAvLyBOb24tbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdGVzdHNcbiAgICAgICAgY29uc3Qgbm9uTXVsdGlVc2VyS2V5V2FsbGV0RGF0YSA9IHtcbiAgICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAzJyxcbiAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAyJ10sXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgfTtcbiAgICAgICAgbm9uTXVsdGlVc2VyS2V5V2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwgbm9uTXVsdGlVc2VyS2V5V2FsbGV0RGF0YSk7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2NyZWF0ZVNoYXJlIG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ211bHRpLWtleS11c2VyLWtleSB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgZXhjbHVkZSBrZXljaGFpbiBwcm9wZXJ0eSBmcm9tIEFQSSByZXF1ZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdChgL2FwaS92Mi9vZmMvd2FsbGV0LyR7b2ZjTXVsdGlVc2VyS2V5V2FsbGV0LmlkKCl9L3NoYXJlYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nKTtcbiAgICAgICAgICAgICAgICBib2R5LnVzZXIuc2hvdWxkLmVxdWFsKHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgYm9keS5wZXJtaXNzaW9ucy5zaG91bGQuZXF1YWwocGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY011bHRpVXNlcktleVdhbGxldC5jcmVhdGVTaGFyZShjcmVhdGVTaGFyZVBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG5vbi1lbXB0eSBrZXljaGFpbiBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlUGFyYW1zID0ge1xuICAgICAgICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGWERjV0Qydnh1ZWJjVDFacFRGNFZrZTZxbU1XOHl6ZGR3TllwQVBqdllFRUw1akxmeVlYVzJmdXh0QXhZOFRnalBVSkxjZjFDOHF6OU42VmdaeEFyS1g0RXdCOHJINScsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkJyxcbiAgICAgICAgICAgICAgICBmcm9tUHViS2V5OiAnZnJvbVB1YicsXG4gICAgICAgICAgICAgICAgdG9QdWJLZXk6ICd0b1B1YicsXG4gICAgICAgICAgICAgICAgcGF0aDogJ20vOTk5OTk5LzEvMScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBhd2FpdCBvZmNNdWx0aVVzZXJLZXlXYWxsZXRcbiAgICAgICAgICAgICAgLmNyZWF0ZVNoYXJlKGNyZWF0ZVNoYXJlUGFyYW1zKVxuICAgICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gcHJvcGVydHkgbXVzdCBub3QgYmUgcHJvdmlkZWQgZm9yIG11bHRpLWtleS11c2VyLWtleSB3YWxsZXRzJyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIG9taXQga2V5Y2hhaW4gZnJvbSByZXF1ZXN0IGV2ZW4gd2hlbiBlbXB0eSBvYmplY3QgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAga2V5Y2hhaW46IHt9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvb2ZjL3dhbGxldC8ke29mY011bHRpVXNlcktleVdhbGxldC5pZCgpfS9zaGFyZWAsIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2tleWNoYWluJyk7XG4gICAgICAgICAgICAgICAgYm9keS51c2VyLnNob3VsZC5lcXVhbCh1c2VySWQpO1xuICAgICAgICAgICAgICAgIGJvZHkucGVybWlzc2lvbnMuc2hvdWxkLmVxdWFsKHBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICAgICAgICBhd2FpdCBvZmNNdWx0aVVzZXJLZXlXYWxsZXQuY3JlYXRlU2hhcmUoY3JlYXRlU2hhcmVQYXJhbXMpO1xuXG4gICAgICAgICAgICBjcmVhdGVTaGFyZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ25vbi1tdWx0aS1rZXktdXNlci1rZXkgd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIGluY2x1ZGUga2V5Y2hhaW4gcHJvcGVydHkgaW4gQVBJIHJlcXVlc3Qgd2hlbiBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlUGFyYW1zID0ge1xuICAgICAgICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGWERjV0Qydnh1ZWJjVDFacFRGNFZrZTZxbU1XOHl6ZGR3TllwQVBqdllFRUw1akxmeVlYVzJmdXh0QXhZOFRnalBVSkxjZjFDOHF6OU42VmdaeEFyS1g0RXdCOHJINScsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkJyxcbiAgICAgICAgICAgICAgICBmcm9tUHViS2V5OiAnZnJvbVB1YicsXG4gICAgICAgICAgICAgICAgdG9QdWJLZXk6ICd0b1B1YicsXG4gICAgICAgICAgICAgICAgcGF0aDogJ20vOTk5OTk5LzEvMScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdChgL2FwaS92Mi9vZmMvd2FsbGV0LyR7b2ZjV2FsbGV0LmlkKCl9L3NoYXJlYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5oYXZlLnByb3BlcnR5KCdrZXljaGFpbicpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Zyb21QdWJLZXknKTtcbiAgICAgICAgICAgICAgICBib2R5LmtleWNoYWluLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0b1B1YktleScpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BhdGgnKTtcbiAgICAgICAgICAgICAgICBib2R5LnVzZXIuc2hvdWxkLmVxdWFsKHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgYm9keS5wZXJtaXNzaW9ucy5zaG91bGQuZXF1YWwocGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY1dhbGxldC5jcmVhdGVTaGFyZShjcmVhdGVTaGFyZVBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnc2hhcmVXYWxsZXQgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIGtleWNoYWluIHByZXBhcmF0aW9uIGFuZCBzZXQgc2tpcEtleWNoYWluPXRydWUgaW4gQVBJIHJlcXVlc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRTaGFyaW5nS2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleTogJ3Rlc3RwdWJrZXknLCBwYXRoOiAnbS85OTk5OTkvMS8xJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvb2ZjL3dhbGxldC8ke29mY011bHRpVXNlcktleVdhbGxldC5pZCgpfS9zaGFyZWAsIGZ1bmN0aW9uIChib2R5KSB7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2tpcEtleWNoYWluJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2tleWNoYWluJyk7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndXNlcicsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgYm9keS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGVybWlzc2lvbnMnLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgICAgICAgLy8gU3R1YiBwcmVwYXJlU2hhcmVkS2V5Y2hhaW4gdG8gZW5zdXJlIGl0J3Mgbm90IGNhbGxlZFxuICAgICAgICAgICAgY29uc3QgcHJlcGFyZVNoYXJlZEtleWNoYWluU3R1YiA9IHNpbm9uLnN0dWIob2ZjTXVsdGlVc2VyS2V5V2FsbGV0LCAncHJlcGFyZVNoYXJlZEtleWNoYWluJykucmVzb2x2ZXMoe30pO1xuXG4gICAgICAgICAgICAvLyBTdHViIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbiB0byBwcmV2ZW50IGFueSBrZXljaGFpbiBmZXRjaGluZ1xuICAgICAgICAgICAgY29uc3QgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluU3R1YiA9IHNpbm9uLnN0dWIob2ZjTXVsdGlVc2VyS2V5V2FsbGV0LCAnZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluJyk7XG4gICAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViLnJlamVjdHMobmV3IEVycm9yKCdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4gc2hvdWxkIG5vdCBiZSBjYWxsZWQnKSk7XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY011bHRpVXNlcktleVdhbGxldC5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucyB9KTtcblxuICAgICAgICAgICAgLy8gVmVyaWZ5IGtleWNoYWluIHByZXBhcmF0aW9uIG1ldGhvZHMgYXJlIG5vdCBjYWxsZWRcbiAgICAgICAgICAgIHByZXBhcmVTaGFyZWRLZXljaGFpblN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICAgICAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluU3R1Yi5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgICAgY3JlYXRlU2hhcmVOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHBhc3Mgc2tpcEtleWNoYWluPXRydWUgYW5kIHVuZGVmaW5lZCBrZXljaGFpbiB0byBjcmVhdGVTaGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5OiAndGVzdHB1YmtleScsIHBhdGg6ICdtLzk5OTk5OS8xLzEnIH0pO1xuXG4gICAgICAgICAgICAvLyBTdHViIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbiB0byBwcmV2ZW50IGFueSBrZXljaGFpbiBmZXRjaGluZ1xuICAgICAgICAgICAgY29uc3QgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluU3R1YiA9IHNpbm9uLnN0dWIob2ZjTXVsdGlVc2VyS2V5V2FsbGV0LCAnZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluJyk7XG4gICAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViLnJlamVjdHMobmV3IEVycm9yKCdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4gc2hvdWxkIG5vdCBiZSBjYWxsZWQnKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlU3R1YiA9IHNpbm9uLnN0dWIob2ZjTXVsdGlVc2VyS2V5V2FsbGV0LCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9ucyEuc2tpcEtleWNoYWluIS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgICAgICAgIHNob3VsZChvcHRpb25zIS5rZXljaGFpbikuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgb2ZjTXVsdGlVc2VyS2V5V2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zIH0pO1xuXG4gICAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnbm9uLW11bHRpLWtleS11c2VyLWtleSB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBrZXljaGFpbiB3aGVuIHdhbGxldCBwYXNzcGhyYXNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgdG9LZXljaGFpbiA9IHV0eG9MaWIuYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJ2RlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDInLCAnaGV4JykpO1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9ICdtLzk5OTk5OS8xLzEnO1xuICAgICAgICAgICAgY29uc3QgcHVia2V5ID0gdG9LZXljaGFpbi5kZXJpdmVQYXRoKHBhdGgpLnB1YmxpY0tleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ2JpdGdvMTIzNCc7XG4gICAgICAgICAgICBjb25zdCBwdWIgPSAnWm8xZ2d6VFVLTVk1YlluRHZUNW10VmVaeHpmMkZhTFRiS2ttdkdVaFVRayc7XG5cbiAgICAgICAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5LCBwYXRoIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBlbmNYcHJ2MSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYxJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgICAgICBjb25zdCBnZXRLZXlOb2NrID0gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtub25NdWx0aVVzZXJLZXlXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICAgIGlkOiBub25NdWx0aVVzZXJLZXlXYWxsZXQua2V5SWRzKClbMF0sXG4gICAgICAgICAgICAgIHB1YixcbiAgICAgICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jWHBydjEsXG4gICAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVTdHViID0gc2lub24uc3R1Yihub25NdWx0aVVzZXJLZXlXYWxsZXQsICdjcmVhdGVTaGFyZScpLmNhbGxzRmFrZShhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAvLyBGb3Igbm9uLW11bHRpLWtleS11c2VyLWtleSB3YWxsZXRzLCBrZXljaGFpbiBzaG91bGQgYmUgcHJlc2VudCB3aGVuIHNwZW5kIHBlcm1pc3Npb25zIGFyZSBpbmNsdWRlZFxuICAgICAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgICAgICAgb3B0aW9ucyEua2V5Y2hhaW4hLnB1YiEuc2hvdWxkLmVxdWFsKHB1Yik7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgbm9uTXVsdGlVc2VyS2V5V2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgICAgICBjcmVhdGVTaGFyZVN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICAgIGdldEtleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ211bHRpLWtleS11c2VyLWtleSBkZXRlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZGV0ZWN0IG11bHRpLWtleS11c2VyLWtleSB3YWxsZXQgdmlhIGNvaW5TcGVjaWZpYy5mZWF0dXJlcyBhcnJheScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBvZmNDb2luOiBhbnkgPSBiaXRnby5jb2luKCdvZmMnKTtcbiAgICAgICAgICBjb25zdCB3YWxsZXRXaXRoTXVsdGlVc2VyS2V5RmVhdHVyZSA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIHtcbiAgICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDQnLFxuICAgICAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAzJ10sXG4gICAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgICAgZmVhdHVyZXM6IFsnbXVsdGkta2V5LXVzZXIta2V5J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCB3YWxsZXRXaXRob3V0RmVhdHVyZSA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIHtcbiAgICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDUnLFxuICAgICAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDA0J10sXG4gICAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgICAgZmVhdHVyZXM6IFsnc29tZS1vdGhlci1mZWF0dXJlJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCB3YWxsZXRXaXRob3V0Q29pblNwZWNpZmljID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwge1xuICAgICAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwNicsXG4gICAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDUnXSxcbiAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgICAgIC50aW1lcygzKVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleTogJ3Rlc3RwdWJrZXknLCBwYXRoOiAnbS85OTk5OTkvMS8xJyB9KTtcblxuICAgICAgICAgIC8vIE11bHRpLWtleS11c2VyLWtleSB3YWxsZXQgc2hvdWxkIHNraXAga2V5Y2hhaW5cbiAgICAgICAgICBjb25zdCBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViMSA9IHNpbm9uLnN0dWIod2FsbGV0V2l0aE11bHRpVXNlcktleUZlYXR1cmUsICdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4nKTtcbiAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViMS5yZWplY3RzKG5ldyBFcnJvcignZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluIHNob3VsZCBub3QgYmUgY2FsbGVkJykpO1xuICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlU3R1YjEgPSBzaW5vblxuICAgICAgICAgICAgLnN0dWIod2FsbGV0V2l0aE11bHRpVXNlcktleUZlYXR1cmUsICdjcmVhdGVTaGFyZScpXG4gICAgICAgICAgICAuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIG9wdGlvbnMhLnNraXBLZXljaGFpbiEuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgd2FsbGV0V2l0aE11bHRpVXNlcktleUZlYXR1cmUuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMgfSk7XG4gICAgICAgICAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluU3R1YjEuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICAgIGNyZWF0ZVNoYXJlU3R1YjEuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAgICAgLy8gV2FsbGV0IHdpdGhvdXQgbXVsdGkta2V5LXVzZXIta2V5IGZlYXR1cmUgc2hvdWxkIHJlc3BlY3Qgc2tpcEtleWNoYWluIGZsYWdcbiAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVN0dWIyID0gc2lub24uc3R1Yih3YWxsZXRXaXRob3V0RmVhdHVyZSwgJ2NyZWF0ZVNoYXJlJykuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGF3YWl0IHdhbGxldFdpdGhvdXRGZWF0dXJlLnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCBza2lwS2V5Y2hhaW46IHRydWUgfSk7XG4gICAgICAgICAgY3JlYXRlU2hhcmVTdHViMi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgICAgICAvLyBXYWxsZXQgd2l0aG91dCBjb2luU3BlY2lmaWMgc2hvdWxkIG5vdCBiZSBkZXRlY3RlZCBhcyBtdWx0aS1rZXktdXNlci1rZXlcbiAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVN0dWIzID0gc2lub24uc3R1Yih3YWxsZXRXaXRob3V0Q29pblNwZWNpZmljLCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgd2FsbGV0V2l0aG91dENvaW5TcGVjaWZpYy5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucywgc2tpcEtleWNoYWluOiB0cnVlIH0pO1xuICAgICAgICAgIGNyZWF0ZVNoYXJlU3R1YjMuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1dhbGxldCBGcmVlemluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGZyZWV6ZSB3YWxsZXQgZm9yIHNwZWNpZmllZCBkdXJhdGlvbiBpbiBzZWNvbmRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBkdXJhdGlvbjogNjAgfTtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9mcmVlemVgLCBwYXJhbXMpLnJlcGx5KDIwMCwge30pO1xuICAgICAgYXdhaXQgd2FsbGV0LmZyZWV6ZShwYXJhbXMpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RTUyBXYWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgY29uc3QgdHNvbCA9IGJpdGdvLmNvaW4oJ3Rzb2wnKTtcbiAgICBjb25zdCB0YWRhID0gYml0Z28uY29pbigndGFkYScpO1xuICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJyxcbiAgICAgIGNvaW46ICd0c29sJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXRoV2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgY29pbjogJ3RldGgnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICBjb2luU3BlY2lmaWM6IHsgYWRkcmVzc1ZlcnNpb246IDEgfSxcbiAgICAgIHR5cGU6ICdob3QnLFxuICAgIH07XG5cbiAgICBjb25zdCBwb2x5Z29uV2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNjMyODI2NTIwZWUxZTUwMDA3MjkwMTczNTRhY2FlYWInLFxuICAgICAgY29pbjogJ3Rwb2x5Z29uJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCBhZGFXYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICdiZjE4OTdhMS1lNGJkLTRiOTYtYjJhNC1iYTAyYzBmYzk5NTYnLFxuICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCB0c3NTb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB3YWxsZXREYXRhKTtcbiAgICBjb25zdCB0c3NBZGFXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0YWRhLCBhZGFXYWxsZXREYXRhKTtcblxuICAgIGxldCB0c3NFdGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0ZXRoJyksIGV0aFdhbGxldERhdGEpO1xuICAgIGNvbnN0IHRzc1BvbHlnb25XYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0cG9seWdvbicpLCBwb2x5Z29uV2FsbGV0RGF0YSk7XG4gICAgY29uc3QgY3VzdG9kaWFsVHNzU29sV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbCwge1xuICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgIHRyYW5zYWN0aW9uczogW10sXG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgfSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCB0eFJlcXVlc3RGdWxsOiBUeFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9LFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgd2FsbGV0SWQ6ICd3YWxsZXRJZCcsXG4gICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhdGU6ICdwZW5kaW5nU2lnbmF0dXJlJyxcbiAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgICBzaWduYWJsZUhleDogJ2RlYWRiZWVmJyxcbiAgICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgIGNvbW1pdG1lbnRTaGFyZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICB9O1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSB0c3MgdHhQcmVidWlsZCBidWlsZFBhcmFtcyB3aGVuIHByZXNpZ24gcmVwbGFjZXMgdGhlIHR4UHJlYnVpbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgIH07XG5cbiAgICAgIHNhbmRib3guc3R1Yih0c29sLCAncHJlc2lnblRyYW5zYWN0aW9uJykuY2FsbHNGYWtlKGFzeW5jIChwcmVzaWduUGFyYW1zKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJlc2lnblBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIHR4SGV4OiAncmVmcmVzaGVkLXR4LWhleCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdzaWduVHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcblxuICAgICAgYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ29yaWdpbmFsLXR4LWhleCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogJ3VzZXItcHJ2JyxcbiAgICAgIH0pO1xuXG4gICAgICBzaWduVHhSZXF1ZXN0LnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgY29uc3QgZmlyc3RTaWduVHhSZXF1ZXN0Q2FsbCA9IHNpZ25UeFJlcXVlc3QuZmlyc3RDYWxsO1xuICAgICAgYXNzZXJ0Lm9rKGZpcnN0U2lnblR4UmVxdWVzdENhbGwpO1xuICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdFBhcmFtcyA9IGZpcnN0U2lnblR4UmVxdWVzdENhbGwuYXJnc1swXTtcbiAgICAgIGFzc2VydC5vayhzaWduVHhSZXF1ZXN0UGFyYW1zKTtcbiAgICAgIHNob3VsZChzaWduVHhSZXF1ZXN0UGFyYW1zLnR4UGFyYW1zKS5kZWVwRXF1YWwoYnVpbGRQYXJhbXMpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ByZUJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncGFzc3BocmFzZTEyMzQ1JyxcbiAgICAgICAgcHJlYnVpbGRUeDogeyB3YWxsZXRJZDogdHNzRXRoV2FsbGV0LmlkKCksIHR4UmVxdWVzdElkOiAncmFuZG9tSWQnIH0sXG4gICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICB9O1xuXG4gICAgICBbJ2VkZHNhJywgJ2VjZHNhJ10uZm9yRWFjaCgoa2V5Q3VydmU6IHN0cmluZykgPT4ge1xuICAgICAgICBkZXNjcmliZShrZXlDdXJ2ZSwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdhbGxldCA9IGtleUN1cnZlID09PSAnZWRkc2EnID8gdHNzU29sV2FsbGV0IDogdHNzRXRoV2FsbGV0O1xuXG4gICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzYW5kYm94XG4gICAgICAgICAgICAgIC5zdHViKEtleWNoYWlucy5wcm90b3R5cGUsICdnZXRLZXlzRm9yU2lnbmluZycpXG4gICAgICAgICAgICAgIC5yZXNvbHZlcyhbeyBjb21tb25LZXljaGFpbjogJ3Rlc3QnLCBpZDogJycsIHB1YjogJycsIHR5cGU6ICdpbmRlcGVuZGVudCcgfV0pO1xuICAgICAgICAgICAgaWYgKGtleUN1cnZlID09PSAnZWRkc2EnKSB7XG4gICAgICAgICAgICAgIHNhbmRib3guc3R1YihUc29sLnByb3RvdHlwZSwgJ3ZlcmlmeVRyYW5zYWN0aW9uJykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzYW5kYm94LnN0dWIoVGV0aC5wcm90b3R5cGUsICd2ZXJpZnlUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ2l0IHNob3VsZCBzdWNjZWVkIGJ1dCBub3Qgc2lnbiBpZiB0aGUgdHhSZXF1ZXN0IGlzIHBlbmRpbmcgYXBwcm92YWwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUeFJlcXVlc3RTdHViID0gc2FuZGJveC5zdHViKEJhc2VUc3NVdGlscy5kZWZhdWx0LnByb3RvdHlwZSwgJ2dldFR4UmVxdWVzdCcpLnJlc29sdmVzKHtcbiAgICAgICAgICAgICAgLi4udHhSZXF1ZXN0RnVsbCxcbiAgICAgICAgICAgICAgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25UcmFuc2FjdGlvblNweSA9IHNhbmRib3guc3B5KFdhbGxldC5wcm90b3R5cGUsICdzaWduVHJhbnNhY3Rpb24nKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHdhbGxldC5wcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbihwYXJhbXMpKSBhcyBUeFJlcXVlc3Q7XG4gICAgICAgICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YXRlJyk7XG4gICAgICAgICAgICByZXN1bHQuc3RhdGUuc2hvdWxkLmVxdWFsKCdwZW5kaW5nQXBwcm92YWwnKTtcbiAgICAgICAgICAgIGdldFR4UmVxdWVzdFN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgICAgc2lnblRyYW5zYWN0aW9uU3B5Lm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ2l0IHNob3VsZCBzdWNjZWVkIGFuZCBzaWduIGlmIHRoZSB0eFJlcXVlc3QgaXMgbm90IHBlbmRpbmcgYXBwcm92YWwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUeFJlcXVlc3RTdHViID0gc2FuZGJveC5zdHViKEJhc2VUc3NVdGlscy5kZWZhdWx0LnByb3RvdHlwZSwgJ2dldFR4UmVxdWVzdCcpO1xuICAgICAgICAgICAgZ2V0VHhSZXF1ZXN0U3R1Yi5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnblRyYW5zYWN0aW9uU3R1YiA9IHNhbmRib3guc3R1YihXYWxsZXQucHJvdG90eXBlLCAnc2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLnJlc29sdmVzKHsgLi4udHhSZXF1ZXN0RnVsbCwgc3RhdGU6ICdzaWduZWQnIH0pO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgd2FsbGV0LnByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtcykpIGFzIFR4UmVxdWVzdDtcbiAgICAgICAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc3RhdGUnKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0ZS5zaG91bGQuZXF1YWwoJ3NpZ25lZCcpO1xuICAgICAgICAgICAgZ2V0VHhSZXF1ZXN0U3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBwcmVidWlsZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2luZ2xlIHJlY2lwaWVudCB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpbmdsZSByZWNpcGllbnQgdHJhbnNmZXIgd2l0aCBwZW5kaW5nIGFwcHJvdmFsIGlkIGlmIHRyYW5zYWN0aW9uIGlzIGhhdmluZyBvbmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3QsIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJywgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyB9KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIG11bHRpcGxlIHJlY2lwaWVudCB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzIwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHByZWJ1aWxkVHJhbnNhY3Rpb25cbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggaXNUZXN0VHJhbnNhY3Rpb24gZmxhZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIGlzVGVzdFRyYW5zYWN0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBWZXJpZnkgaXNUZXN0VHJhbnNhY3Rpb24gaXMgcGFzc2VkIHRvIHByZWJ1aWxkVHhXaXRoSW50ZW50XG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgY2FsbEFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5nZXRDYWxsKDApLmFyZ3NbMF07XG4gICAgICAgIGNhbGxBcmdzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpc1Rlc3RUcmFuc2FjdGlvbicsIHRydWUpO1xuICAgICAgICBjYWxsQXJncy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaW50ZW50VHlwZScsICdwYXltZW50Jyk7XG4gICAgICAgIGNhbGxBcmdzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIHNob3VsZC5leGlzdChjYWxsQXJncy5yZWNpcGllbnRzKTtcbiAgICAgICAgY2FsbEFyZ3MucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChyZWNpcGllbnRzKTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgICBpc1Rlc3RUcmFuc2FjdGlvbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gZW5hYmxlIHRva2VuIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW107XG4gICAgICAgIGNvbnN0IHRva2VuTmFtZSA9ICd0Y29pbjp0b2tlbk5hbWUnO1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2NyZWF0ZUFjY291bnQnLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gZW5hYmxlIHRva2VuIHRyYW5zYWN0aW9uIGZvciBjb2xkIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXTtcbiAgICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ3Rjb2luOnRva2VuTmFtZSc7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHR4UmVxdWVzdC53YWxsZXRUeXBlID0gJ2NvbGQnO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2NyZWF0ZUFjY291bnQnLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gaW5zdHJ1Y3Rpb24gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHNvbEluc3RydWN0aW9ucyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMicsXG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJrZXk6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRhOiAnU0dWc2JHOGdWMjl5YkdRPScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29tbWVudCA9ICdUZXN0IGNvbW1lbnQnO1xuICAgICAgICBjb25zdCBzZXF1ZW5jZUlkID0gJzEyMyc7XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgc2VxdWVuY2VJZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgc2VxdWVuY2VJZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICAgIHNlcXVlbmNlSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgY3VzdG9tIGluc3RydWN0aW9uIHRyYW5zYWN0aW9uIHdpdGggbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW107XG4gICAgICAgIGNvbnN0IHNvbEluc3RydWN0aW9ucyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMicsXG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJrZXk6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRhOiAnU0dWc2JHOGdWMjl5YkdRPScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICdDb21wdXRlQnVkZ2V0MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyxcbiAgICAgICAgICAgIGtleXM6IFtdLFxuICAgICAgICAgICAgZGF0YTogJ0F3QUE2QU1BQUFBQScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGN1c3RvbSBpbnN0cnVjdGlvbiB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHNvbEluc3RydWN0aW9ucyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMicsXG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJrZXk6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRhOiAnU0dWc2JHOGdWMjl5YkdRPScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgY3VzdG9tIGluc3RydWN0aW9uIHRyYW5zYWN0aW9uIHdpdGggcGVuZGluZyBhcHByb3ZhbCBpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgc29sSW5zdHJ1Y3Rpb25zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyJyxcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmtleTogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBpc1NpZ25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRhdGE6ICdTR1ZzYkc4Z1YyOXliR1E9JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHsgLi4udHhSZXF1ZXN0LCBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcgfSk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gaW5zdHJ1Y3Rpb24gdHJhbnNhY3Rpb24gZm9yIGNvbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtdO1xuICAgICAgICBjb25zdCBzb2xJbnN0cnVjdGlvbnMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvZ3JhbUlkOiAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTInLFxuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHVia2V5OiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgICAgIGlzU2lnbmVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzV3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZGF0YTogJ1NHVnNiRzhnVjI5eWJHUT0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgdHhSZXF1ZXN0LndhbGxldFR5cGUgPSAnY29sZCc7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIG5vbi10cmFuc2ZlciB0cmFuc2FjdGlvbiB0eXBlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHR5cGU6ICdzdGFrZScsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiBzdGFrZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgZnVsbCBhcGkgdmVyc2lvbiBjb21wYXRpYmlsaXR5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXRcbiAgICAgICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIGFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdGb3Igbm9uIHNlbGYtY3VzdG9kaWFsIChob3QpIHRzcyB3YWxsZXRzLCBwYXJhbWV0ZXIgYGFwaVZlcnNpb25gIG11c3QgYmUgYGZ1bGxgLicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzaW5nbGUgcmVjaXBpZW50IHRyYW5zZmVyIHRyYW5zYWN0aW9uIGZvciBmdWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2Z1bGwnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIHRyYW5zZmVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHhBQjEwMDkxMmUxMzNBQTA2Y0VCOTIxNDU5YWFEZEJkNjIzODFGNUEzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChyZWNpcGllbnRzKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3BheW1lbnQnKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIGZlZVRva2VuIHBhcmFtZXRlciB0byBwcmVidWlsZFR4V2l0aEludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHhBQjEwMDkxMmUxMzNBQTA2Y0VCOTIxNDU5YWFEZEJkNjIzODFGNUEzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlVG9rZW4gPSAnMHgyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyJztcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBmZWVUb2tlbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChyZWNpcGllbnRzKTtcbiAgICAgICAgYXJnc1swXSEuZmVlVG9rZW4hLnNob3VsZC5lcXVhbChmZWVUb2tlbik7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdwYXltZW50Jyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIHRyYW5zZmVydG9rZW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB0b2tlbk5hbWU6ICdndGVyYzE4ZHAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcnRva2VuJyxcbiAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKHJlY2lwaWVudHMpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5pc1RzcyEuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgndHJhbnNmZXJUb2tlbicpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIGV0aCBhY2NlbGVyYXRpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB0b2tlbk5hbWU6ICdndGVyYzE4ZHAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbG93RmVlVHhpZCA9ICcweDZlYTA3Zjk0MjBmNDY3NmJlNjQ3OGFiMTY2MGViOTI0NDRhN2M2NjNlMGUyNGJlY2U5MjlmNzE1ZTg4MmUwY2YnO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIGxvd0ZlZVR4aWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5sb3dGZWVUeGlkIS5zaG91bGQuZXF1YWwobG93RmVlVHhpZCk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggYWNjZWxlcmF0aW9ucyBmb3IgcmVjZWl2ZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB0b2tlbk5hbWU6ICdndGVyYzE4ZHAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbG93RmVlVHhpZCA9ICcweDZlYTA3Zjk0MjBmNDY3NmJlNjQ3OGFiMTY2MGViOTI0NDRhN2M2NjNlMGUyNGJlY2U5MjlmNzE1ZTg4MmUwY2YnO1xuICAgICAgICBjb25zdCByZWNlaXZlQWRkcmVzcyA9ICcweDA2MjE3NmJjOTM0NWRhM2U4ZWU5MDM2MWIwY2Y2ZmY4ODNiYTcyMDYnO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIGxvd0ZlZVR4aWQsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5sb3dGZWVUeGlkIS5zaG91bGQuZXF1YWwobG93RmVlVHhpZCk7XG4gICAgICAgIGFyZ3NbMF0hLnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYWNjZWxlcmF0aW9uJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIGNvcnJlY3QgcGFyYW1zIGZvciBzZWlldm0gYWNjZWxlcmF0aW9uICh1c2VyIHN0dWNrIHR4KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHhkZTUwZDliYmRjZDQ3N2M5NjJiZjFjZWJlY2VmNTBlNDUyNTY1YzUzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg0ZDZkZWFiMTM2ZGExZjM4NzBkZTRlYjZmOGNmNDZlYzFlMDhiOWJmOTE4Yjc2NDU3OGI3YjFjN2FiMDhkNmI4JztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHg5YmJiOWEwMmU2NmUxNzYzNmZkMDYzN2EwZWVlMWUzOGY0NjBiNmJhJztcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHNlaWV2bSB3YWxsZXQgZm9yIHRlc3RpbmdcbiAgICAgICAgY29uc3Qgc2VpZXZtV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbignc2VpZXZtJyksIHdhbGxldERhdGEpO1xuXG4gICAgICAgIGF3YWl0IHNlaWV2bVdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICByZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHByZWJ1aWxkVHhXaXRoSW50ZW50IHdhcyBjYWxsZWQgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnNcbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgLy8gVmFsaWRhdGUgYWNjZWxlcmF0aW9uIGludGVudCBwYXJhbWV0ZXJzXG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5sb3dGZWVUeGlkIS5zaG91bGQuZXF1YWwobG93RmVlVHhpZCk7XG4gICAgICAgIGFyZ3NbMF0hLnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYWNjZWxlcmF0aW9uJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIGZpbGxOb25jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGNvbnN0IG5vbmNlID0gJzEnO1xuICAgICAgICBjb25zdCBjb21tZW50ID0gJ2ZpbGxOb25jZSBjb21tZW50JztcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgICBjb21tZW50LFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1swXSEubm9uY2UhLnNob3VsZC5lcXVhbChub25jZSk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgICAgYXJnc1swXSEuY29tbWVudCEuc2hvdWxkLmVxdWFsKGNvbW1lbnQpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIHdyYXBBcHByb3ZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgd3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ3dyYXBBcHByb3ZlJyxcbiAgICAgICAgICB3cmFwUGFyYW1zLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnd3JhcEFwcHJvdmUnKTtcbiAgICAgICAgYXJnc1swXSEud3JhcFBhcmFtcyEuc2hvdWxkLmRlZXBFcXVhbCh3cmFwUGFyYW1zKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciB3cmFwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3cmFwUGFyYW1zID0geyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFtb3VudDogJzEwMDAwMDAnIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnd3JhcCcsXG4gICAgICAgICAgd3JhcFBhcmFtcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd3cmFwJyk7XG4gICAgICAgIGFyZ3NbMF0hLndyYXBQYXJhbXMhLnNob3VsZC5kZWVwRXF1YWwod3JhcFBhcmFtcyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgdW53cmFwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB1bndyYXBQYXJhbXMgPSB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYW1vdW50OiAnMTAwMDAwMCcgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICd1bndyYXAnLFxuICAgICAgICAgIHVud3JhcFBhcmFtcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd1bndyYXAnKTtcbiAgICAgICAgYXJnc1swXSEudW53cmFwUGFyYW1zIS5zaG91bGQuZGVlcEVxdWFsKHVud3JhcFBhcmFtcyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIGZpbGxOb25jZSBmb3IgcmVjZWl2ZSBhZGRyZXNzIG5vbmNlIGZpbGxpbmcgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBjb25zdCBub25jZSA9ICcxJztcbiAgICAgICAgY29uc3QgY29tbWVudCA9ICdmaWxsTm9uY2UgY29tbWVudCc7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4MDYyMTc2YmM5MzQ1ZGEzZThlZTkwMzYxYjBjZjZmZjg4M2JhNzIwNic7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdmaWxsTm9uY2UnLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgY29tbWVudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLm5vbmNlIS5zaG91bGQuZXF1YWwobm9uY2UpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZmlsbE5vbmNlJyk7XG4gICAgICAgIGFyZ3NbMF0hLmNvbW1lbnQhLnNob3VsZC5lcXVhbChjb21tZW50KTtcbiAgICAgICAgYXJnc1swXSEucmVjZWl2ZUFkZHJlc3MhLnNob3VsZC5lcXVhbChyZWNlaXZlQWRkcmVzcyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgYnJpZGdlRnVuZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGludGVudEFtb3VudCA9IHsgdmFsdWU6ICcxMDAwMDAwJywgc3ltYm9sOiAndGh5cGVldm0nIH07XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2JyaWRnZUZ1bmRzJyxcbiAgICAgICAgICBpbnRlbnRBbW91bnQsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2JyaWRnZUZ1bmRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmFtb3VudCEuc2hvdWxkLmRlZXBFcXVhbChpbnRlbnRBbW91bnQpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBFeHBvcnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ1AtY29zdHdvMXh4dDI3cmducmp5YXcyd211c3d4dW1sbW1lMnRhcGo2MnM3dXkwJyxcbiAgICAgICAgICAgIGFtb3VudDogJzUwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgbm9uY2U6ICc1JyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZXhwb3J0Jyk7XG4gICAgICAgIGFyZ3NbMF0hLnJlY2lwaWVudHMhLnNob3VsZC5kZWVwRXF1YWwocmVjaXBpZW50cyk7XG4gICAgICAgIGFyZ3NbMF0hLm5vbmNlIS5zaG91bGQuZXF1YWwoJzUnKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBJbXBvcnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdpbXBvcnQnKTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnbm9uY2UnKTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdmZWVPcHRpb25zJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgSW1wb3J0VG9DJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdJbXBvcnRUb0MnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnaW1wb3J0dG9jJyk7XG4gICAgICAgIGFyZ3NbMF0hLnJlY2lwaWVudHMhLnNob3VsZC5kZWVwRXF1YWwoW10pO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ25vbmNlJyk7XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZmVlT3B0aW9ucycpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBmZWVPcHRpb25zIHdoZW4gcGFzc2luZyB1c2luZyB0aGUgbGVnYWN5IGZvcm1hdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHhBQjEwMDkxMmUxMzNBQTA2Y0VCOTIxNDU5YWFEZEJkNjIzODFGNUEzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWRGZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgICBnYXNMaW1pdDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIGVpcDE1NTk6IHtcbiAgICAgICAgICAgIG1heEZlZVBlckdhczogZXhwZWN0ZWRGZWVPcHRpb25zLm1heEZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IGV4cGVjdGVkRmVlT3B0aW9ucy5tYXhQcmlvcml0eUZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRGZWVPcHRpb25zKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIGFjY2VsZXJhdGlvbiBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg2ZWEwN2Y5NDIwZjQ2NzZiZTY0NzhhYjE2NjBlYjkyNDQ0YTdjNjYzZTBlMjRiZWNlOTI5ZjcxNWU4ODJlMGNmJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCBwbGFjZSBmZWVUb2tlbiBhdCBpbnRlbnQgbGV2ZWwsIG5vdCBpbiBmZWVPcHRpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuXG4gICAgICAgIGNvbnN0IGZlZVRva2VuID0gJzB4MjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMic7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnMHhBQjEwMDkxMmUxMzNBQTA2Y0VCOTIxNDU5YWFEZEJkNjIzODFGNUEzJyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBmZWVUb2tlbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdwYXltZW50Jyk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQuZmVlVG9rZW4hLnNob3VsZC5lcXVhbChmZWVUb2tlbik7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2ZlZVRva2VuJyk7XG4gICAgICB9KTtcblxuICAgICAgWyd3cmFwLW5hdGl2ZScsICd1bndyYXAtbmF0aXZlJ10uZm9yRWFjaChmdW5jdGlvbiAoaW50ZW50VHlwZSkge1xuICAgICAgICBpdChgcG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gYSB2YWxpZCAke2ludGVudFR5cGV9IGludGVudCB3aXRob3V0IHJlY2lwaWVudHNgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcblxuICAgICAgICAgIC8vIFR3byBpbmRlcGVuZGVudCBzaXRlcyBpbiBwb3B1bGF0ZUludGVudCBtdXN0IGtub3cgYWJvdXQgdGhpcyBpbnRlbnRUeXBlOlxuICAgICAgICAgIC8vIHRoZSByZWNpcGllbnRzLXJlcXVpcmVkIGV4ZW1wdGlvbiBsaXN0LCBhbmQgdGhlIEVWTSBpbnRlbnQtc2hhcGUgc3dpdGNoLlxuICAgICAgICAgIC8vIE1pc3NpbmcgdGhlIGZpcnN0IG1ha2VzIHRoaXMgY2FsbCB0aHJvdyBvbiB0aGUgcmVjaXBpZW50cyBhc3NlcnRpb25cbiAgICAgICAgICAvLyBiZWZvcmUgdGhlIHN3aXRjaCBpcyBldmVyIHJlYWNoZWQuXG4gICAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICBpbnRlbnRUeXBlLFxuICAgICAgICAgICAgZGVmaVBhcmFtczogeyB2YXVsdElkOiAnaHRldGgtd2V0aC10ZXN0JywgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbChpbnRlbnRUeXBlKTtcbiAgICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICAgIGludGVudC52YXVsdElkIS5zaG91bGQuZXF1YWwoJ2h0ZXRoLXdldGgtdGVzdCcpO1xuICAgICAgICAgIC8vIEEgcGxhaW4gYGFtb3VudGAsIG5vdCB0aGUgYHNoYXJlVG9rZW5BbW91bnRgIGRlZmktd2l0aGRyYXcgdXNlcyBmb3Igc2hhcmVzLlxuICAgICAgICAgIGludGVudC5hbW91bnQhLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgICAgICAgIGludGVudC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3NoYXJlVG9rZW5BbW91bnQnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGNvcmVkYW8gYWNjZWxlcmF0aW9uIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdjb3JlZGFvJykpO1xuXG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NmVhMDdmOTQyMGY0Njc2YmU2NDc4YWIxNjYwZWI5MjQ0NGE3YzY2M2UwZTI0YmVjZTkyOWY3MTVlODgyZTBjZic7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignY29yZWRhbycpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgc2VpZXZtIGFjY2VsZXJhdGlvbiBpbnRlbnQgZm9yIHN0dWNrIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ3NlaWV2bScpKTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NGQ2ZGVhYjEzNmRhMWYzODcwZGU0ZWI2ZjhjZjQ2ZWMxZTA4YjliZjkxOGI3NjQ1NzhiN2IxYzdhYjA4ZDZiOCc7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4OWJiYjlhMDJlNjZlMTc2MzZmZDA2MzdhMGVlZTFlMzhmNDYwYjZiYSc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignc2VpZXZtJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBsb3dGZWVUeGlkLFxuICAgICAgICAgIHJlY2VpdmVBZGRyZXNzLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHRoZSBhY2NlbGVyYXRpb24gaW50ZW50IHN0cnVjdHVyZVxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgaW50ZW50LnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggYWNjZWxlcmF0aW9uIGludGVudCBmb3IgcmVjZWl2ZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuXG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NmVhMDdmOTQyMGY0Njc2YmU2NDc4YWIxNjYwZWI5MjQ0NGE3YzY2M2UwZTI0YmVjZTkyOWY3MTVlODgyZTBjZic7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4MDYyMTc2YmM5MzQ1ZGEzZThlZTkwMzYxYjBjZjZmZjg4M2JhNzIwNic7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGxvd0ZlZVR4aWQsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC50eGlkIS5zaG91bGQuZXF1YWwobG93RmVlVHhpZCk7XG4gICAgICAgIGludGVudC5yZWNlaXZlQWRkcmVzcyEuc2hvdWxkLmVxdWFsKHJlY2VpdmVBZGRyZXNzKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIGZpbGxOb25jZSBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBub25jZSA9ICcxJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC5ub25jZSEuc2hvdWxkLmVxdWFsKG5vbmNlKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIGZpbGxOb25jZSBpbnRlbnQgZm9yIHJlY2VpdmUgYWRkcmVzcyBub25jZSBmaWxsaW5nIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgbm9uY2UgPSAnMSc7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4MDYyMTc2YmM5MzQ1ZGEzZThlZTkwMzYxYjBjZjZmZjg4M2JhNzIwNic7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdmaWxsTm9uY2UnLFxuICAgICAgICAgIG5vbmNlLFxuICAgICAgICAgIHJlY2VpdmVBZGRyZXNzLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQubm9uY2UhLnNob3VsZC5lcXVhbChub25jZSk7XG4gICAgICAgIGludGVudC5yZWNlaXZlQWRkcmVzcyEuc2hvdWxkLmVxdWFsKHJlY2VpdmVBZGRyZXNzKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIHRva2VuQXBwcm92YWwgaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ3VzZGMnO1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAndG9rZW5BcHByb3ZhbCcsXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudG9rZW5OYW1lIS5zaG91bGQuZXF1YWwodG9rZW5OYW1lKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd0b2tlbkFwcHJvdmFsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIHBvbHlnb24gdG9rZW5BcHByb3ZhbCBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbigndHBvbHlnb24nKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0b2tlbk5hbWUgPSAndXNkdCc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbigndHBvbHlnb24nKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICd0b2tlbkFwcHJvdmFsJyxcbiAgICAgICAgICB0b2tlbk5hbWUsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC50b2tlbk5hbWUhLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3Rva2VuQXBwcm92YWwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgYnNjIHRva2VuQXBwcm92YWwgaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ3Ric2MnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0b2tlbk5hbWUgPSAnYnVzZCc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbigndGJzYycpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3Rva2VuQXBwcm92YWwnLFxuICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnRva2VuTmFtZSEuc2hvdWxkLmVxdWFsKHRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgndG9rZW5BcHByb3ZhbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggd3JhcEFwcHJvdmUgaW50ZW50IGZyb20gd3JhcFBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdyYXBQYXJhbXMgPSB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYW1vdW50OiAnMTAwMDAwMCcgfTtcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3dyYXBBcHByb3ZlJyxcbiAgICAgICAgICB3cmFwUGFyYW1zLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudG9rZW5OYW1lIS5zaG91bGQuZXF1YWwod3JhcFBhcmFtcy50b2tlbk5hbWUpO1xuICAgICAgICBpbnRlbnQuYW1vdW50IS5zaG91bGQuZXF1YWwod3JhcFBhcmFtcy5hbW91bnQpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3dyYXBBcHByb3ZlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGV0aCB3cmFwIGludGVudCBmcm9tIHdyYXBQYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IHdyYXBQYXJhbXMgPSB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYW1vdW50OiAnMTAwMDAwMCcgfTtcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3dyYXAnLFxuICAgICAgICAgIHdyYXBQYXJhbXMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC50b2tlbk5hbWUhLnNob3VsZC5lcXVhbCh3cmFwUGFyYW1zLnRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5hbW91bnQhLnNob3VsZC5lcXVhbCh3cmFwUGFyYW1zLmFtb3VudCk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnd3JhcCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJlcXVpcmUgd3JhcFBhcmFtcyBmb3Igd3JhcEFwcHJvdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgICgoKSA9PlxuICAgICAgICAgIG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3dyYXBBcHByb3ZlJyxcbiAgICAgICAgICB9KSkuc2hvdWxkLnRocm93KC93cmFwUGFyYW1zLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwb3B1bGF0ZSBpbnRlbnQgd2l0aCBjdXN0b2RpYW5UcmFuc2FjdGlvbklkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgbm9uY2UgPSAnMSc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIGN1c3RvZGlhblRyYW5zYWN0aW9uSWQ6ICd1bml0dGVzdCcsXG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LmN1c3RvZGlhblRyYW5zYWN0aW9uSWQhLnNob3VsZC5lcXVhbCgndW5pdHRlc3QnKTtcbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC5ub25jZSEuc2hvdWxkLmVxdWFsKG5vbmNlKTtcbiAgICAgICAgaW50ZW50LmlzVHNzIS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZmlsbE5vbmNlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGJyaWRnZUZ1bmRzIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgY29uc3QgYW1vdW50ID0geyB2YWx1ZTogJzEwMDAwMDAnLCBzeW1ib2w6ICd0aHlwZWV2bScgfTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdicmlkZ2VGdW5kcycsXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYnJpZGdlRnVuZHMnKTtcbiAgICAgICAgaW50ZW50LmFtb3VudCEuc2hvdWxkLmRlZXBFcXVhbChhbW91bnQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXhwb3J0IGludGVudCBmb3IgRVZNIGNyb3NzLWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnUC1jb3N0d28xeHh0MjdyZ25yanlhdzJ3bXVzd3h1bWxtbWUydGFwajYyczd1eTAnLFxuICAgICAgICAgICAgYW1vdW50OiAnNTAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdleHBvcnQnLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBub25jZTogJzUnLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2V4cG9ydCcpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50Lm5vbmNlIS5zaG91bGQuZXF1YWwoJzUnKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhLnNob3VsZC5iZS5hbi5BcnJheSgpLndpdGgubGVuZ3RoT2YoMSk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS5hZGRyZXNzLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHJlY2lwaWVudHNbMF0uYWRkcmVzcyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpbmdsZSByZWNpcGllbnQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gcHJvdmlkaW5nIGFwaVZlcnNpb24gcGFyYW1ldGVyIGFzIFwiZnVsbFwiICcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgICdmdWxsJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIHVuc3BlbnRzIGFuZCBzZXF1ZW5jZSBpZCBpbiB0cmFuc2ZlclRva2VuIGJ1aWxkIHBheWxvYWQgZm9yIGFkYSB0b2tlbiB3aXRoZHJhd2FscycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBQcmVidWlsZFRyYW5zYWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICBpZGZTaWduZWRUaW1lc3RhbXA6ICcyMDI1LTExLTEwVDA4OjE0OjE5LjAxMFonLFxuICAgICAgICAgIGlkZlVzZXJJZDogJzVjYWUzMTMwZjhmNDU2MWQ1MWRmY2JmZGFhZmJhOWI5JyxcbiAgICAgICAgICBpZGZWZXJzaW9uOiAxLFxuICAgICAgICAgIGluc3RhbnQ6IGZhbHNlLFxuICAgICAgICAgIGNvbW1lbnQ6ICcnLFxuICAgICAgICAgIHVuc3BlbnRzOiBbJzc5YmFjMmIzYzQzZGUxNzY3ZjA3MzFjYWY5MmQ1Y2Q3ZWRmZTVkYTQzM2IwNTYwMDJkZjQyZjBjMDU1YTMwMjM6MSddLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYW1vdW50OiAnMicsXG4gICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxejRtM21zOW54cmEzNnQ2cnR6NGx6Yzl6a2szZDRxd2NwY3IzeXh3aHhsc2xwYXRocmhxdHh2OG1yNWg1eGs5dDc5czI5ZGR6bTJxYXNyczh6Z3Zhd2RscDdyczQ0ZzVoYycsXG4gICAgICAgICAgICAgIHRva2VuTmFtZTogJ3RhZGE6d2F0ZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlSWQ6ICc0UUx0WGtCclpoYzZBdGVjRlpWbkhDWUgxVUFrJyxcbiAgICAgICAgICBudW1CbG9ja3M6IDIsXG4gICAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyBhcyBjb25zdCxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXJ0b2tlbicsXG4gICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgY2FwdHVyZWRSZXF1ZXN0Qm9keTogYW55O1xuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0FkYVdhbGxldC5pZCgpfS90eHJlcXVlc3RzYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHVuc2lnbmVkVHhzOiBbJ3R4J10gfSk7XG5cbiAgICAgICAgYXdhaXQgdHNzQWRhV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24ocGFyYW1zKTtcblxuICAgICAgICBjb25zb2xlLmxvZygnY2FwdHVyZWRSZXF1ZXN0Qm9keScsIGNhcHR1cmVkUmVxdWVzdEJvZHkpO1xuICAgICAgICBjYXB0dXJlZFJlcXVlc3RCb2R5LnNob3VsZC5ub3QuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkhLmludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndW5zcGVudHMnKTtcbiAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSEuaW50ZW50LnVuc3BlbnRzLnNob3VsZC5kZWVwRXF1YWwocGFyYW1zLnVuc3BlbnRzKTtcbiAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSEuaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzZXF1ZW5jZUlkJyk7XG4gICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkhLmludGVudC5zZXF1ZW5jZUlkLnNob3VsZC5lcXVhbChwYXJhbXMuc2VxdWVuY2VJZCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBzaWduaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBzaWduIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzaWduVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3QnKTtcbiAgICAgICAgc2lnblR4UmVxdWVzdC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2Ugc2lnblRyYW5zYWN0aW9uXG4gICAgICAgIHNpZ25UeFJlcXVlc3QuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHsgdHhSZXF1ZXN0LCBwcnY6ICdzZWNyZXRLZXknLCByZXFJZCB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHBydjogJ3NlcmNyZXRLZXknLFxuICAgICAgICB9KTtcbiAgICAgICAgc2lnbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3QpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIHRyYW5zYWN0aW9uIHdpdGhvdXQgdHhSZXF1ZXN0SWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHBydjogJ3NlcmNyZXRLZXknLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3R4UmVxdWVzdElkIHJlcXVpcmVkIHRvIHNpZ24gdHJhbnNhY3Rpb25zIHdpdGggVFNTJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgWydlZGRzYScsICdlY2RzYSddLmZvckVhY2goKGtleUN1cnZlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgZGVzY3JpYmUoa2V5Q3VydmUsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB3YWxsZXQgPSBrZXlDdXJ2ZSA9PT0gJ2VkZHNhJyA/IHRzc1NvbFdhbGxldCA6IHRzc0V0aFdhbGxldDtcbiAgICAgICAgICBsZXQgZ2V0S2V5c1N0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICAgICAgICBsZXQgc2lnblRyYW5zYWN0aW9uU3R1Yjogc2lub24uU2lub25TdHViO1xuICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2V0S2V5c1N0dWIgPSBzYW5kYm94LnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJyk7XG5cbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIgPSBzYW5kYm94XG4gICAgICAgICAgICAgIC5zdHViKFdhbGxldC5wcm90b3R5cGUsICdzaWduVHJhbnNhY3Rpb24nKVxuICAgICAgICAgICAgICAucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3RGdWxsLCBzdGF0ZTogJ3NpZ25lZCcgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2V0S2V5c1N0dWIucmVzb2x2ZXMoW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbW9uS2V5Y2hhaW46ICd0ZXN0JyxcbiAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgcHViOiAnJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAgICAgICAne1wiaXZcIjpcIjE1RnNiRFZJMXpHOU9nZ0Q4WVgrSGc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJoSGJOSDNTei9hVT1cIixcImN0XCI6XCJXb05WS3o3YWZpUnhYSTJ3L1lrek1kTXlvUWcvQjE1dTFROGFRZ2k5NmpKWjl3azZUSWFTRWM2YlhGSDNBSHpEOU1kSkNXSlFVcFJob1FjL3JneXRjbjY5c2NQVGpLZWV5Vk1FbEdDeFpkRlZTL3BzUWNORStsdWUzLy8yWmx4ais2dDFOa3ZZTys4eUFlelNNUkJLNU9kZnRYRWpOUUk9XCJ9JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBUZXN0Qml0R28uVjIuVEVTVF9FVEhfV0FMTEVUX1BBU1NQSFJBU0UgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgd2FsbGV0LmdldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgICAgICAgIHJlc3BvbnNlLnNob3VsZC5kZWVwRXF1YWwoeyAuLi50eFJlcXVlc3RGdWxsLCBzdGF0ZTogJ3NpZ25lZCcgfSk7XG5cbiAgICAgICAgICAgIGdldEtleXNTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0aGUga2V5Y2hhaW4gZG9lc250IGhhdmUgdGhlIGVuY3J5cHRlZEtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGdldEtleXNTdHViLnJlc29sdmVzKFt7IGNvbW1vbktleWNoYWluOiAndGVzdCcsIGlkOiAnJywgcHViOiAnJywgdHlwZTogJ3RzcycgfV0pO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBUZXN0Qml0R28uVjIuVEVTVF9FVEhfV0FMTEVUX1BBU1NQSFJBU0UgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAgICAgICAuZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbihwYXJhbXMpXG4gICAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0aGUgdXNlciBrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuXG4gICAgICAgICAgICBnZXRLZXlzU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBwYXNzd29yZCBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2V0S2V5c1N0dWIucmVzb2x2ZXMoW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbW9uS2V5Y2hhaW46ICd0ZXN0JyxcbiAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgcHViOiAnJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAgICAgICAne1wiaXZcIjpcIjE1RnNiRFZJMXpHOU9nZ0Q4WVgrSGc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJoSGJOSDNTei9hVT1cIixcImN0XCI6XCJXb05WS3o3YWZpUnhYSTJ3L1lrek1kTXlvUWcvQjE1dTFROGFRZ2k5NmpKWjl3azZUSWFTRWM2YlhGSDNBSHpEOU1kSkNXSlFVcFJob1FjL3JneXRjbjY5c2NQVGpLZWV5Vk1FbEdDeFpkRlZTL3BzUWNORStsdWUzLy8yWmx4ais2dDFOa3ZZTys4eUFlelNNUkJLNU9kZnRYRWpOUUk9XCJ9JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncmFuZG9tcGFzcycsXG4gICAgICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgICAgICAgIC5nZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uKHBhcmFtcylcbiAgICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYHVuYWJsZSB0byBkZWNyeXB0IGtleWNoYWluIHdpdGggdGhlIGdpdmVuIHdhbGxldCBwYXNzcGhyYXNlYCk7XG5cbiAgICAgICAgICAgIGdldEtleXNTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2lnbkFuZFNlbmRUeFJlcXVlc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleGFtcGxlU2lnbmVkVHggPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjMnLFxuICAgICAgICB0eGlkOiAnMHg0NTYnLFxuICAgICAgICBzdGF0dXM6ICdzaWduZWQnLFxuICAgICAgfTtcblxuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzaWduIGxpdGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZVNpZ25hdHVyZVNoYXJlc1NweSA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdkZWxldGVTaWduYXR1cmVTaGFyZXMnKTtcbiAgICAgICAgY29uc3QgZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweSA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdnZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uJyk7XG4gICAgICAgIGdldFVzZXJLZXlBbmRTaWduVHNzVHhTcHkucmVzb2x2ZXMoZXhhbXBsZVNpZ25lZFR4KTtcbiAgICAgICAgY29uc3Qgc3VibWl0VHhTcHkgPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAnc3VibWl0VHJhbnNhY3Rpb24nKTtcbiAgICAgICAgc3VibWl0VHhTcHkucmVzb2x2ZXMoZXhhbXBsZVNpZ25lZFR4KTtcblxuICAgICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHRzc1NvbFdhbGxldC5zaWduQW5kU2VuZFR4UmVxdWVzdCh7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIGlzVHhSZXF1ZXN0RnVsbDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UoZGVsZXRlU2lnbmF0dXJlU2hhcmVzU3B5KTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkT25jZShnZXRVc2VyS2V5QW5kU2lnblRzc1R4U3B5KTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkT25jZShzdWJtaXRUeFNweSk7XG4gICAgICAgIHNpZ25lZFR4LnNob3VsZC5kZWVwRXF1YWwoZXhhbXBsZVNpZ25lZFR4KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHNpZ24gZnVsbCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGVsZXRlU2lnbmF0dXJlU2hhcmVzU3B5ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ2RlbGV0ZVNpZ25hdHVyZVNoYXJlcycpO1xuICAgICAgICBjb25zdCBnZXRVc2VyS2V5QW5kU2lnblRzc1R4U3B5ID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ2dldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweS5yZXNvbHZlcyhleGFtcGxlU2lnbmVkVHgpO1xuXG4gICAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25BbmRTZW5kVHhSZXF1ZXN0KHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgaXNUeFJlcXVlc3RGdWxsOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBzYW5kYm94LmFzc2VydC5jYWxsZWRPbmNlKGRlbGV0ZVNpZ25hdHVyZVNoYXJlc1NweSk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UoZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweSk7XG4gICAgICAgIHNpZ25lZFR4LnNob3VsZC5kZWVwRXF1YWwoZXhhbXBsZVNpZ25lZFR4KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ01lc3NhZ2UgU2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGFzaCA9ICcweHJycnNzczFiJztcbiAgICAgIGNvbnN0IG1lc3NhZ2VSYXcgPSAnaGVsbG8gd29ybGQnO1xuICAgICAgY29uc3QgbWVzc2FnZUVuY29kZWQgPSBCdWZmZXIuZnJvbShgXFx1MDAxOUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOlxcbiR7bWVzc2FnZVJhdy5sZW5ndGh9JHttZXNzYWdlUmF3fWApLnRvU3RyaW5nKFxuICAgICAgICAnaGV4J1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nOiBUeFJlcXVlc3QgPSB7XG4gICAgICAgIHR4UmVxdWVzdElkOiByZXFJZC50b1N0cmluZygpLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnc2lnbk1lc3NhZ2UnLFxuICAgICAgICB9LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgICBwb2xpY2llc0NoZWNrZWQ6IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgICB1bnNpZ25lZE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0ZTogJ3NpZ25lZCcsXG4gICAgICAgICAgICBtZXNzYWdlUmF3OiAnaGVsbG8gd29ybGQnLFxuICAgICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbeyBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCBzaGFyZTogJycgfV0sXG4gICAgICAgICAgICBjb21iaW5lU2lnU2hhcmU6ICcwOnJycjpzc3M6MycsXG4gICAgICAgICAgICB0eEhhc2gsXG4gICAgICAgICAgICBtZXNzYWdlRW5jb2RlZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGxldCBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VTaWduaW5nQ29pbnMgPSBbJ3RldGgnLCAndHBvbHlnb24nXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkOiBTaWduZWRNZXNzYWdlID0ge1xuICAgICAgICB0eFJlcXVlc3RJZDogcmVxSWQudG9TdHJpbmcoKSxcbiAgICAgICAgdHhIYXNoLFxuICAgICAgICBzaWduYXR1cmU6IHR4SGFzaCxcbiAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICBtZXNzYWdlRW5jb2RlZCxcbiAgICAgIH07XG5cbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZSA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAnc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UnKTtcbiAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UucmVzb2x2ZXModHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuICAgICAgICBzYW5kYm94XG4gICAgICAgICAgLnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJylcbiAgICAgICAgICAucmVzb2x2ZXMoW3sgY29tbW9uS2V5Y2hhaW46ICd0ZXN0JywgaWQ6ICcnLCBwdWI6ICcnLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH1dKTtcbiAgICAgICAgc2lub24uc3R1YihFY2RzYS5wcm90b3R5cGUsICd2ZXJpZnknKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBtZXNzYWdlU2lnbmluZ0NvaW5zLm1hcCgoY29pbk5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRXaXRoQ29pbkZpZWxkID0geyAuLi5leHBlY3RlZCwgY29pbjogJ3RldGgnIH07XG5cbiAgICAgICAgdHNzRXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbihjb2luTmFtZSksIGV0aFdhbGxldERhdGEpO1xuICAgICAgICBjb25zdCB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIHR4IFJlcXVlc3Qgd2l0aCBzaWduTWVzc2FnZSBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgKS5yZXBseSgyMDAsIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IHRzc0V0aFdhbGxldC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VSYXcsXG4gICAgICAgICAgICAgIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0eFJlcXVlc3Quc2hvdWxkLmRlZXBFcXVhbCh0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBwcmVwYXJlZFRyYW5zYWN0aW9uIGluIHRoZSBtc2dyZXF1ZXN0cyBib2R5IHdoZW4gcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgcHJlcGFyZWRUcmFuc2FjdGlvbiA9ICdiYXNlNjQtcHJlcGFyZWQtdHJhbnNhY3Rpb24tYnl0ZXMnO1xuICAgICAgICAgIGxldCBjYXB0dXJlZEJvZHk6IGFueTtcbiAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LmJ1aWxkU2lnbk1lc3NhZ2VSZXF1ZXN0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgICAgICAgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEsXG4gICAgICAgICAgICAgIHByZXBhcmVkVHJhbnNhY3Rpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5wcmVwYXJlZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbChwcmVwYXJlZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYFske2NvaW5OYW1lfV0gc2hvdWxkIHNpZ24gbWVzc2FnZWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZVRzc1NweSA9IHNpbm9uLnNweSh0c3NFdGhXYWxsZXQsICdzaWduTWVzc2FnZVRzcycgYXMgYW55KTtcbiAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7XG4gICAgICAgICAgICAgICAgdHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcudHhSZXF1ZXN0SWRcbiAgICAgICAgICAgICAgfSZsYXRlc3Q9dHJ1ZWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nXSB9KTtcblxuICAgICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCB0eFJlcXVlc3RJZCwgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEgfSxcbiAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2lnbk1lc3NhZ2Uuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFdpdGhDb2luRmllbGQpO1xuICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25NZXNzYWdlVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduTWVzc2FnZU9wdGlvbnM7XG4gICAgICAgICAgYWN0dWFsQXJnLm1lc3NhZ2U/Lm1lc3NhZ2VFbmNvZGVkPy5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShgXFx1MDAxOUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOlxcbiR7bWVzc2FnZVJhdy5sZW5ndGh9JHttZXNzYWdlUmF3fWApLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGBbJHtjb2luTmFtZX1dIHNob3VsZCBzaWduIG1lc3NhZ2Ugd2hlbiBjdXN0b2RpYW5NZXNzYWdlSWQgaXMgcHJvdmlkZWRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnbk1lc3NhZ2VUc3MnIGFzIGFueSk7XG4gICAgICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgKS5yZXBseSgyMDAsIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogJ3VuaXR0ZXN0JyxcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWduTWVzc2FnZS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkV2l0aENvaW5GaWVsZCk7XG4gICAgICAgICAgY29uc3QgYWN0dWFsQXJnID0gc2lnbk1lc3NhZ2VUc3NTcHkuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdIGFzIFdhbGxldFNpZ25NZXNzYWdlT3B0aW9ucztcbiAgICAgICAgICBhY3R1YWxBcmcubWVzc2FnZT8ubWVzc2FnZUVuY29kZWQ/LnNob3VsZC5lcXVhbChcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGBcXHUwMDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XFxuJHttZXNzYWdlUmF3Lmxlbmd0aH0ke21lc3NhZ2VSYXd9YCkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYFske2NvaW5OYW1lfV0gc2hvdWxkIHNpZ24gbWVzc2FnZSB3aGVuIHR4UmVxdWVzdElkIG5vdCBwcm92aWRlZGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZVRzc1NweSA9IHNpbm9uLnNweSh0c3NFdGhXYWxsZXQsICdzaWduTWVzc2FnZVRzcycgYXMgYW55KTtcbiAgICAgICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS9tc2dyZXF1ZXN0c2ApLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2UgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnbk1lc3NhZ2Uoe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICBtZXNzYWdlOiB7IG1lc3NhZ2VSYXcsIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNpZ25NZXNzYWdlLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRXaXRoQ29pbkZpZWxkKTtcbiAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduTWVzc2FnZVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnbk1lc3NhZ2VPcHRpb25zO1xuICAgICAgICAgIGFjdHVhbEFyZy5tZXNzYWdlPy5tZXNzYWdlRW5jb2RlZD8uc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICAgQnVmZmVyLmZyb20oYFxcdTAwMTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4ke21lc3NhZ2VSYXcubGVuZ3RofSR7bWVzc2FnZVJhd31gKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChgWyR7Y29pbk5hbWV9XSBzaG91bGQgaW5jbHVkZSBwcmVwYXJlZFRyYW5zYWN0aW9uIHdoZW4gc2lnbmluZyBhIGZyZXNoIG1lc3NhZ2UgcmVxdWVzdGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBwcmVwYXJlZFRyYW5zYWN0aW9uID0gJ2Jhc2U2NC1wcmVwYXJlZC10cmFuc2FjdGlvbi1ieXRlcyc7XG4gICAgICAgICAgbGV0IGNhcHR1cmVkQm9keTogYW55O1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICBjYXB0dXJlZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnbk1lc3NhZ2Uoe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICBtZXNzYWdlOiB7IG1lc3NhZ2VSYXcsIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxLCBwcmVwYXJlZFRyYW5zYWN0aW9uIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5wcmVwYXJlZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbChwcmVwYXJlZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gbWVzc2FnZSB3aXRoIGVtcHR5IHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXRcbiAgICAgICAgICAgIC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB7IG1lc3NhZ2VSYXcsIHR4UmVxdWVzdElkLCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSB9LFxuICAgICAgICAgICAgICBwcnY6ICcnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnU09MIG1lc3NhZ2Ugc2lnbmluZyAoVVRGLTggc3RyaW5nIHBhdGgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzb2xNZXNzYWdlUmF3ID0gJ2hlbGxvIGZyb20gc29sYW5hJztcbiAgICAgICAgY29uc3Qgc29sTWVzc2FnZUVuY29kZWQgPSBCdWZmZXIuZnJvbShzb2xNZXNzYWdlUmF3LCAndXRmOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgY29uc3Qgc29sU2lnbmVyQWRkcmVzcyA9ICdKOFRFUEZxTkpqRlRwMk5HSHVXZ2lqeXVGNDVMcnpvMmZlWjYxa1M3eVkycSc7XG4gICAgICAgIGNvbnN0IHNvbFR4SGFzaCA9ICdycnJzc3MxYic7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nOiBUeFJlcXVlc3QgPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHJlcUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdzaWduTWVzc2FnZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICAgICAgICB1bnNpZ25lZE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0ZTogJ3NpZ25lZCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2VSYXc6IHNvbE1lc3NhZ2VSYXcsXG4gICAgICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbeyBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCBzaGFyZTogJycgfV0sXG4gICAgICAgICAgICAgIHR4SGFzaDogc29sVHhIYXNoLFxuICAgICAgICAgICAgICBtZXNzYWdlRW5jb2RlZDogc29sTWVzc2FnZUVuY29kZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNvbEV4cGVjdGVkU2lnbmVkTWVzc2FnZTogU2lnbmVkTWVzc2FnZSA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogcmVxSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICB0eEhhc2g6IHNvbFR4SGFzaCxcbiAgICAgICAgICBzaWduYXR1cmU6IHNvbFR4SGFzaCxcbiAgICAgICAgICBtZXNzYWdlUmF3OiBzb2xNZXNzYWdlUmF3LFxuICAgICAgICAgIGNvaW46ICd0c29sJyxcbiAgICAgICAgICBtZXNzYWdlRW5jb2RlZDogc29sTWVzc2FnZUVuY29kZWQsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNvbE1lc3NhZ2UgPSB7XG4gICAgICAgICAgbWVzc2FnZVJhdzogc29sTWVzc2FnZVJhdyxcbiAgICAgICAgICBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSxcbiAgICAgICAgICBzaWduZXJBZGRyZXNzOiBzb2xTaWduZXJBZGRyZXNzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcblxuICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIgPSBzYW5kYm94XG4gICAgICAgICAgICAuc3R1YihFRERTQVV0aWxzLmRlZmF1bHQucHJvdG90eXBlLCAnc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UnKVxuICAgICAgICAgICAgLnJlc29sdmVzKHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgbXNnIHJlcXVlc3QgY2FycnlpbmcgbWVzc2FnZVJhdywgU0lNUExFIGFuZCBzaWduZXJBZGRyZXNzIHVuY2hhbmdlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQgY2FwdHVyZWRCb2R5OiBhbnk7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc1NvbFdhbGxldC5pZCgpfS9tc2dyZXF1ZXN0c2AsIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgIGNhcHR1cmVkQm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBseSgyMDAsIHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7IG1lc3NhZ2U6IHNvbE1lc3NhZ2UgfSk7XG5cbiAgICAgICAgICBjYXB0dXJlZEJvZHkuaW50ZW50Lm1lc3NhZ2VSYXcuc2hvdWxkLmVxdWFsKHNvbE1lc3NhZ2VSYXcpO1xuICAgICAgICAgIGNhcHR1cmVkQm9keS5pbnRlbnQubWVzc2FnZVN0YW5kYXJkVHlwZS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUpO1xuICAgICAgICAgIGNhcHR1cmVkQm9keS5pbnRlbnQuc2lnbmVyQWRkcmVzcy5zaG91bGQuZXF1YWwoc29sU2lnbmVyQWRkcmVzcyk7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5tZXNzYWdlRW5jb2RlZC5zaG91bGQuZXF1YWwoJycpO1xuICAgICAgICAgIGNhcHR1cmVkQm9keS5pbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3NpZ25NZXNzYWdlJyk7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5pc1Rzcy5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgc2lnbiBtZXNzYWdlIHdpdGhvdXQgZW5jb2RlTWVzc2FnZSB0cmFuc2Zvcm1hdGlvbiwgaGFuZGluZyBFZERTQSB0aGUgVVRGLTggYnl0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VUc3NTcHkgPSBzYW5kYm94LnNweSh0c3NTb2xXYWxsZXQsICdzaWduTWVzc2FnZVRzcycgYXMgYW55KTtcbiAgICAgICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc1NvbFdhbGxldC5pZCgpfS9tc2dyZXF1ZXN0c2ApLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yU29sTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgY29uc3Qgc2lnbmVkTWVzc2FnZSA9IGF3YWl0IHRzc1NvbFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWduZWRNZXNzYWdlLnNob3VsZC5kZWVwRXF1YWwoc29sRXhwZWN0ZWRTaWduZWRNZXNzYWdlKTtcbiAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduTWVzc2FnZVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnbk1lc3NhZ2VPcHRpb25zO1xuICAgICAgICAgIHNob3VsZChhY3R1YWxBcmcubWVzc2FnZT8ubWVzc2FnZUVuY29kZWQpLmJlLnVuZGVmaW5lZCgpO1xuICAgICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlU3R1Yi5nZXRDYWxscygpLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViLmdldENhbGxzKClbMF0uYXJnc1swXS5tZXNzYWdlRW5jb2RlZC5zaG91bGQuZXF1YWwoc29sTWVzc2FnZUVuY29kZWQpO1xuICAgICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlU3R1YlxuICAgICAgICAgICAgLmdldENhbGxzKClbMF1cbiAgICAgICAgICAgIC5hcmdzWzBdLmJ1ZmZlclRvU2lnbi5zaG91bGQuZGVlcEVxdWFsKEJ1ZmZlci5mcm9tKHNvbE1lc3NhZ2VSYXcsICd1dGY4JykpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHNpZ24gbWVzc2FnZSB3aGVuIHR4UmVxdWVzdElkIGlzIHByb3ZpZGVkLCByZXR1cm5pbmcgdGhlIFdQLXBlcnNpc3RlZCBtZXNzYWdlUmF3JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICBgL2FwaS92Mi93YWxsZXQvJHt0c3NTb2xXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtcbiAgICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZy50eFJlcXVlc3RJZFxuICAgICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0Rm9yU29sTWVzc2FnZVNpZ25pbmddIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2lnbmVkTWVzc2FnZSA9IGF3YWl0IHRzc1NvbFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgLi4uc29sTWVzc2FnZSxcbiAgICAgICAgICAgICAgbWVzc2FnZVJhdzogJ2NsaWVudC1zdGFsZS1lY2hvJyxcbiAgICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2lnbmVkTWVzc2FnZS5zaG91bGQuZGVlcEVxdWFsKHNvbEV4cGVjdGVkU2lnbmVkTWVzc2FnZSk7XG4gICAgICAgICAgc2lnbmVkTWVzc2FnZS5tZXNzYWdlUmF3LnNob3VsZC5lcXVhbChzb2xNZXNzYWdlUmF3KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmYWxsIGJhY2sgdG8gdGhlIGNhbGxlciBtZXNzYWdlUmF3IHdoZW4gdGhlIHNpZ25lZCByZXF1ZXN0IGNhcnJpZXMgbm9uZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBsZWdhY3lUeFJlcXVlc3QgPSB7XG4gICAgICAgICAgICAuLi50eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZyxcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi50eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZy5tZXNzYWdlcyFbMF0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZVJhdzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICBgL2FwaS92Mi93YWxsZXQvJHt0c3NTb2xXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtcbiAgICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZy50eFJlcXVlc3RJZFxuICAgICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbbGVnYWN5VHhSZXF1ZXN0XSB9KTtcblxuICAgICAgICAgIGNvbnN0IHNpZ25lZE1lc3NhZ2UgPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2lnbk1lc3NhZ2Uoe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIHR4UmVxdWVzdElkOiB0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZy50eFJlcXVlc3RJZCB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWduZWRNZXNzYWdlLm1lc3NhZ2VSYXcuc2hvdWxkLmVxdWFsKHNvbE1lc3NhZ2VSYXcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBlbXB0eSBtZXNzYWdlUmF3JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgICAgLmJ1aWxkU2lnbk1lc3NhZ2VSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogeyAuLi5zb2xNZXNzYWdlLCBtZXNzYWdlUmF3OiAnJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtZXNzYWdlIGFuZCB0eXBlIHJlcXVpcmVkIHRvIGNyZWF0ZSBtZXNzYWdlIHNpZ24gcmVxdWVzdCcpO1xuXG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgICAuc2lnbk1lc3NhZ2Uoe1xuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogeyAuLi5zb2xNZXNzYWdlLCBtZXNzYWdlUmF3OiAnJyB9LFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9tZXNzYWdlUmF3IGlzIHJlcXVpcmVkIHRvIHNpZ24gYSBTT0wgbWVzc2FnZS8pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBtZXNzYWdlUmF3IG92ZXIgTUFYX1NPTF9NRVNTQUdFX0JZVEVTIGFuZCBhY2NlcHQgZXhhY3RseSBNQVhfU09MX01FU1NBR0VfQllURVMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgICAuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VSYXc6ICdhJy5yZXBlYXQoTUFYX1NPTF9NRVNTQUdFX0JZVEVTICsgMSkgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvU09MIG1lc3NhZ2UgZXhjZWVkcyBtYXhpbXVtIHNpemUvKTtcblxuICAgICAgICAgIGxldCBjYXB0dXJlZEJvZHk6IGFueTtcbiAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzU29sV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yU29sTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0LmJ1aWxkU2lnbk1lc3NhZ2VSZXF1ZXN0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogJ2EnLnJlcGVhdChNQVhfU09MX01FU1NBR0VfQllURVMpIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5tZXNzYWdlUmF3Lmxlbmd0aC5zaG91bGQuZXF1YWwoTUFYX1NPTF9NRVNTQUdFX0JZVEVTKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBtZWFzdXJlIG11bHRpLWJ5dGUgbWVzc2FnZVJhdyBpbiBVVEYtOCBieXRlcywgbm90IGNoYXJhY3RlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgdHdvQnl0ZUNoYXJzID0gJ8OpJztcbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogdHdvQnl0ZUNoYXJzLnJlcGVhdChNQVhfU09MX01FU1NBR0VfQllURVMpIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL1NPTCBtZXNzYWdlIGV4Y2VlZHMgbWF4aW11bSBzaXplLyk7XG5cbiAgICAgICAgICBsZXQgY2FwdHVyZWRCb2R5OiBhbnk7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc1NvbFdhbGxldC5pZCgpfS9tc2dyZXF1ZXN0c2AsIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgIGNhcHR1cmVkQm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBseSgyMDAsIHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VSYXc6IHR3b0J5dGVDaGFycy5yZXBlYXQoTUFYX1NPTF9NRVNTQUdFX0JZVEVTIC8gMikgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjYXB0dXJlZEJvZHkuaW50ZW50Lm1lc3NhZ2VSYXcubGVuZ3RoLnNob3VsZC5lcXVhbChNQVhfU09MX01FU1NBR0VfQllURVMgLyAyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZWplY3Qgbm9uLVNJTVBMRSBtZXNzYWdlIHN0YW5kYXJkcyBhbmQgbWlzc2luZyBzaWduZXJBZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgICAgLmJ1aWxkU2lnbk1lc3NhZ2VSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogeyAuLi5zb2xNZXNzYWdlLCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9TT0wgbWVzc2FnZSBzaWduaW5nIHN1cHBvcnRzIG9ubHkgdGhlIFNJTVBMRSBzdGFuZGFyZC8pO1xuXG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgICAuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIHNpZ25lckFkZHJlc3M6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zaWduZXJBZGRyZXNzIGlzIHJlcXVpcmVkIHRvIHNpZ24gYSBTT0wgbWVzc2FnZS8pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIG5vdCBpbXBsZW1lbnQgZW5jb2RlTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaG91bGQoKHRzb2wgYXMgYW55KS5lbmNvZGVNZXNzYWdlKS5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUeXBlZCBEYXRhIFNpZ25pbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhhc2ggPVxuICAgICAgICAnMTkwMTQ5M2ZiZjJhZTFjMjdjM2NlZDI2YTg5MDcwYzZhYjVkM2ZiZjM3ZWQ3NzhkZTkzNzhlNzcwM2I3ZDFmMTE2YjM4ODMwNzdhNjE4MjYxMjliOThiNjIyZTU0ZmM2OGM1MDA4ZDFiMWMxNjU1MmUxZWRhNjkxNmY4NzBkNzE5MjIwJztcbiAgICAgIGNvbnN0IHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmc6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHJlcUlkLnRvU3RyaW5nKCksXG4gICAgICAgIHRyYW5zYWN0aW9uczogW10sXG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdzaWduTWVzc2FnZScsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICAgIHVuc2lnbmVkTWVzc2FnZXM6IFtdLFxuICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2VSYXc6ICdoZWxsbyB3b3JsZCcsXG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFt7IGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHNoYXJlOiAnJyB9XSxcbiAgICAgICAgICAgIGNvbWJpbmVTaWdTaGFyZTogJzA6cnJyOnNzczozJyxcbiAgICAgICAgICAgIHR4SGFzaCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGxldCBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VTaWduaW5nQ29pbnMgPSBbJ3RldGgnLCAndHBvbHlnb24nXTtcbiAgICAgIGNvbnN0IHR5cGVzOiBNZXNzYWdlVHlwZXMgPSB7XG4gICAgICAgIEVJUDcxMkRvbWFpbjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3ZlcnNpb24nLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2hhaW5JZCcsXG4gICAgICAgICAgICB0eXBlOiAndWludDI1NicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndmVyaWZ5aW5nQ29udHJhY3QnLFxuICAgICAgICAgICAgdHlwZTogJ2FkZHJlc3MnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIE1lc3NhZ2U6IFt7IG5hbWU6ICdkYXRhJywgdHlwZTogJ3N0cmluZycgfV0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZWRNZXNzYWdlOiBUeXBlZE1lc3NhZ2U8TWVzc2FnZVR5cGVzPiA9IHtcbiAgICAgICAgZG9tYWluOiB7XG4gICAgICAgICAgbmFtZTogJ2JpdGdvJyxcbiAgICAgICAgICB2ZXJzaW9uOiAnMScsXG4gICAgICAgICAgY2hhaW5JZDogMSxcbiAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdDogJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByaW1hcnlUeXBlOiAnTWVzc2FnZScsXG4gICAgICAgIHR5cGVzLFxuICAgICAgICBtZXNzYWdlOiB7IGRhdGE6ICdiaXRnbyBzYXlzIGhlbGxvIScgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eXBlZERhdGFCYXNlOiBUeXBlZERhdGEgPSB7XG4gICAgICAgIHR5cGVkRGF0YVJhdzogSlNPTi5zdHJpbmdpZnkodHlwZWRNZXNzYWdlKSxcbiAgICAgICAgdmVyc2lvbjogU2lnblR5cGVkRGF0YVZlcnNpb24uVjMsXG4gICAgICB9O1xuXG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3RGb3JNZXNzYWdlJyk7XG4gICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlLnJlc29sdmVzKHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcpO1xuICAgICAgICBzYW5kYm94XG4gICAgICAgICAgLnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJylcbiAgICAgICAgICAucmVzb2x2ZXMoW3sgY29tbW9uS2V5Y2hhaW46ICd0ZXN0JywgaWQ6ICcnLCBwdWI6ICcnLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH1dKTtcbiAgICAgICAgc2lub24uc3R1YihFY2RzYS5wcm90b3R5cGUsICd2ZXJpZnknKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciB1bnN1cHBvcnRlZCBjb2lucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICB0eXBlZERhdGE6IHR5cGVkRGF0YUJhc2UsXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1NpZ24gdHlwZWQgZGF0YSBub3Qgc3VwcG9ydGVkIGZvciBUZXN0bmV0IFNvbGFuYScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHNpZ24gdHlwZWQgZGF0YSBWMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHlwZWREYXRhID0geyAuLi50eXBlZERhdGFCYXNlIH07XG4gICAgICAgIHR5cGVkRGF0YS52ZXJzaW9uID0gU2lnblR5cGVkRGF0YVZlcnNpb24uVjE7XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLmdldChcbiAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgIClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nXSB9KTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXRcbiAgICAgICAgICAuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnU2lnblR5cGVkRGF0YSB2MSBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBzZWN1cml0eSBjb25jZXJucycpO1xuICAgICAgfSk7XG4gICAgICBtZXNzYWdlU2lnbmluZ0NvaW5zLm1hcCgoY29pbk5hbWUpID0+IHtcbiAgICAgICAgdHNzRXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbihjb2luTmFtZSksIGV0aFdhbGxldERhdGEpO1xuICAgICAgICBjb25zdCB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcudHhSZXF1ZXN0SWQ7XG4gICAgICAgIHR5cGVkRGF0YUJhc2UudHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RJZDtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQ6IFNpZ25lZE1lc3NhZ2UgPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgICAgbWVzc2FnZVJhdzogSlNPTi5zdHJpbmdpZnkodHlwZWRNZXNzYWdlKSxcbiAgICAgICAgICBzaWduYXR1cmU6IHR4SGFzaCxcbiAgICAgICAgICB0eEhhc2gsXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICAgIG1lc3NhZ2VFbmNvZGVkOiB0eEhhc2gsXG4gICAgICAgIH07XG5cbiAgICAgICAgZGVzY3JpYmUoYHNpZ24gdHlwZWQgZGF0YSBWMyBmb3IgJHtjb2luTmFtZX1gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgdHlwZWREYXRhID0geyAuLi50eXBlZERhdGFCYXNlIH07XG4gICAgICAgICAgdHlwZWREYXRhLnZlcnNpb24gPSBTaWduVHlwZWREYXRhVmVyc2lvbi5WMztcblxuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0eXBlZCBkYXRhIFYzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgc2lnblR5cGVkRGF0YVRzc1NweSA9IHNpbm9uLnNweSh0c3NFdGhXYWxsZXQsICdzaWduVHlwZWREYXRhVHNzJyBhcyBhbnkpO1xuICAgICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICBgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtcbiAgICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcudHhSZXF1ZXN0SWRcbiAgICAgICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmddIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGEgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICB0eXBlZERhdGEsXG4gICAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNpZ25lZFR5cGVkRGF0YS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25UeXBlZERhdGFUc3NTcHkuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdIGFzIFdhbGxldFNpZ25UeXBlZERhdGFPcHRpb25zO1xuICAgICAgICAgICAgYWN0dWFsQXJnLnR5cGVkRGF0YT8udHlwZWREYXRhRW5jb2RlZD8udG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh0eEhhc2gpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHR5cGVkIGRhdGEgVjMgd2hlbiBjdXN0b2RpYW5NZXNzYWdlSUQgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0eXBlZERhdGEudHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RJZDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25UeXBlZERhdGFUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnblR5cGVkRGF0YVRzcycgYXMgYW55KTtcbiAgICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7XG4gICAgICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgICAgfSZsYXRlc3Q9dHJ1ZWBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nXSB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICBjdXN0b2RpYW5NZXNzYWdlSWQ6ICd1bml0dGVzdCcsXG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICB0eXBlZERhdGEsXG4gICAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNpZ25lZFR5cGVkRGF0YS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25UeXBlZERhdGFUc3NTcHkuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdIGFzIFdhbGxldFNpZ25UeXBlZERhdGFPcHRpb25zO1xuICAgICAgICAgICAgYWN0dWFsQXJnLnR5cGVkRGF0YT8udHlwZWREYXRhRW5jb2RlZD8udG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh0eEhhc2gpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gdHlwZWQgZGF0YSBWMyB3aXRoIGVtcHR5IHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldFxuICAgICAgICAgICAgICAuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgICAgdHlwZWREYXRhOiB0eXBlZERhdGFCYXNlLFxuICAgICAgICAgICAgICAgIHBydjogJycsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHR5cGVkIGRhdGEgVjMgd2hlbiB0eFJlcXVlc3RJZCBub3QgcHJvdmlkZWQgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGVsZXRlIHR5cGVkRGF0YS50eFJlcXVlc3RJZDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YVRzc1NweSA9IHNpbm9uLnNweSh0c3NFdGhXYWxsZXQsICdzaWduVHlwZWREYXRhVHNzJyBhcyBhbnkpO1xuICAgICAgICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2lnbmVkVHlwZWREYXRhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsQXJnID0gc2lnbmVkVHlwZWREYXRhVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduVHlwZWREYXRhT3B0aW9ucztcbiAgICAgICAgICAgIGFjdHVhbEFyZy50eXBlZERhdGE/LnR5cGVkRGF0YUVuY29kZWQ/LnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoYHNpZ24gdHlwZWQgZGF0YSBWNCBmb3IgJHtjb2luTmFtZX1gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgdHlwZWREYXRhID0geyAuLi50eXBlZERhdGFCYXNlIH07XG4gICAgICAgICAgdHlwZWREYXRhLnZlcnNpb24gPSBTaWduVHlwZWREYXRhVmVyc2lvbi5WNDtcbiAgICAgICAgICBpdCgnc2hvdWxkIHNpZ24gdHlwZWQgZGF0YSBWNCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHR5cGVkRGF0YS50eFJlcXVlc3RJZCA9IHR4UmVxdWVzdElkO1xuICAgICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICBgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtcbiAgICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcudHhSZXF1ZXN0SWRcbiAgICAgICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmddIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGEgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICB0eXBlZERhdGEsXG4gICAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNpZ25lZFR5cGVkRGF0YS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0eXBlZCBkYXRhIFY0IHdoZW4gY3VzdG9kaWFuTWVzc2FnZUlEIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHlwZWREYXRhLnR4UmVxdWVzdElkID0gdHhSZXF1ZXN0SWQ7XG4gICAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgICAgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZy50eFJlcXVlc3RJZFxuICAgICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZ10gfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgY3VzdG9kaWFuTWVzc2FnZUlkOiAndW5pdHRlc3QnLFxuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaWduZWRUeXBlZERhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gc2lnbiB0eXBlZCBkYXRhIFY0IHdpdGggZW1wdHkgcHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0XG4gICAgICAgICAgICAgIC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgICB0eXBlZERhdGE6IHR5cGVkRGF0YUJhc2UsXG4gICAgICAgICAgICAgICAgcHJ2OiAnJyxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2tleWNoYWluIGRvZXMgbm90IGhhdmUgcHJvcGVydHkgZW5jcnlwdGVkUHJ2Jyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHNpZ24gdHlwZWQgZGF0YSBWNCB3aGVuIHR4UmVxdWVzdElkIG5vdCBwcm92aWRlZCAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkZWxldGUgdHlwZWREYXRhLnR4UmVxdWVzdElkO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhVHNzU3B5ID0gc2lub24uc3B5KHRzc0V0aFdhbGxldCwgJ3NpZ25UeXBlZERhdGFUc3MnIGFzIGFueSk7XG4gICAgICAgICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzYCkucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nKTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaWduZWRUeXBlZERhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduZWRUeXBlZERhdGFUc3NTcHkuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdIGFzIFdhbGxldFNpZ25UeXBlZERhdGFPcHRpb25zO1xuICAgICAgICAgICAgYWN0dWFsQXJnLnR5cGVkRGF0YT8udHlwZWREYXRhRW5jb2RlZD8udG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh0eEhhc2gpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1NlbmQgTWFueScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbmRNYW55SW5wdXQgPSB7XG4gICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnYWRkcmVzcycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICByZXFJZDogbmV3IFJlcXVlc3RUcmFjZXIoKSxcbiAgICAgIH07XG5cbiAgICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHNlbmQgbWFueScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ucmVzb2x2ZXMoc2lnbmVkVHJhbnNhY3Rpb24pO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2Ugc2VuZE1hbnlcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24uY2FsbGVkT25jZVdpdGhFeGFjdGx5KHNlbmRNYW55SW5wdXQpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRUeFJlcXVlc3QgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAnc2VuZFR4UmVxdWVzdCcpO1xuICAgICAgICBzZW5kVHhSZXF1ZXN0LnJlc29sdmVzKCdzZW5kVHhSZXNwb25zZScpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2Ugc2VuZE1hbnlcbiAgICAgICAgc2VuZFR4UmVxdWVzdC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoc2lnbmVkVHJhbnNhY3Rpb24udHhSZXF1ZXN0SWQpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRNYW55ID0gYXdhaXQgdHNzU29sV2FsbGV0LnNlbmRNYW55KHNlbmRNYW55SW5wdXQpO1xuICAgICAgICBzZW5kTWFueS5zaG91bGQuZGVlcEVxdWFsKCdzZW5kVHhSZXNwb25zZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgemVybyBhbW91bnQgcmVjaXBpZW50cyBmb3IgY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ucmVzb2x2ZXMoc2lnbmVkVHJhbnNhY3Rpb24pO1xuICAgICAgICBjb25zdCBzZW5kVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NlbmRUeFJlcXVlc3QnKTtcbiAgICAgICAgc2VuZFR4UmVxdWVzdC5yZXNvbHZlcygnc2VuZFR4UmVzcG9uc2UnKTtcblxuICAgICAgICBjb25zdCBzZW5kTWFueSA9IGF3YWl0IHRzc1NvbFdhbGxldC5zZW5kTWFueSh7XG4gICAgICAgICAgdHlwZTogJ2Nsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnYXRhQWRkcmVzcycsXG4gICAgICAgICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJ2F0YUFkZHJlc3MyJyxcbiAgICAgICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgc2VuZE1hbnkuc2hvdWxkLmRlZXBFcXVhbCgnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IHplcm8gYW1vdW50IHJlY2lwaWVudHMgZm9yIHNvbCB0cmFuc2ZlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zZW5kTWFueSh7XG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgJ2ludmFsaWQgYXJndW1lbnQgZm9yIGFtb3VudCAtIHBvc2l0aXZlIG51bWJlciBncmVhdGVyIHRoYW4gemVybyBvciBudW1lcmljIHN0cmluZyBleHBlY3RlZCdcbiAgICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGFtb3VudCByZWNpcGllbnRzIGZvciBjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zZW5kTWFueSh7XG4gICAgICAgICAgICB0eXBlOiAnY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdhdGFBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6ICctMScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgICAnaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gcG9zaXRpdmUgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIG9yIG51bWVyaWMgc3RyaW5nIGV4cGVjdGVkJ1xuICAgICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3Qgbm9uLXplcm8gYW1vdW50IHJlY2lwaWVudHMgZm9yIGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNlbmRNYW55KHtcbiAgICAgICAgICAgIHR5cGU6ICdjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogJ2F0YUFkZHJlc3MnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFwiaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50IHJlcXVpcmVzIGFtb3VudCAnMCdcIik7XG4gICAgICB9KTtcblxuICAgICAgaXQoXCJzaG91bGQgcmVqZWN0IGFtb3VudCAnbWF4JyByZWNpcGllbnRzIGZvciBjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnRcIiwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2VuZE1hbnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Nsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiAnYXRhQWRkcmVzcycsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnbWF4JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcImludmFsaWQgYXJndW1lbnQgZm9yIGFtb3VudCAtIGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCByZXF1aXJlcyBhbW91bnQgJzAnXCIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2VuZCBtYW55IGFuZCBjYWxsIHNldFJlcXVlc3RUcmFjZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLnJlc29sdmVzKHNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24uY2FsbGVkT25jZVdpdGhFeGFjdGx5KHNlbmRNYW55SW5wdXQpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRUeFJlcXVlc3QgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAnc2VuZFR4UmVxdWVzdCcpO1xuICAgICAgICBzZW5kVHhSZXF1ZXN0LnJlc29sdmVzKCdzZW5kVHhSZXNwb25zZScpO1xuICAgICAgICBzZW5kVHhSZXF1ZXN0LmNhbGxlZE9uY2VXaXRoRXhhY3RseShzaWduZWRUcmFuc2FjdGlvbi50eFJlcXVlc3RJZCk7XG5cbiAgICAgICAgY29uc3Qgc2V0UmVxdWVzdFRyYWNlclNweSA9IHNpbm9uLnNweShiaXRnbywgJ3NldFJlcXVlc3RUcmFjZXInKTtcbiAgICAgICAgc2V0UmVxdWVzdFRyYWNlclNweS53aXRoQXJncyhzZW5kTWFueUlucHV0LnJlcUlkKTtcblxuICAgICAgICBjb25zdCBzZW5kTWFueSA9IGF3YWl0IHRzc1NvbFdhbGxldC5zZW5kTWFueShzZW5kTWFueUlucHV0KTtcbiAgICAgICAgc2VuZE1hbnkuc2hvdWxkLmRlZXBFcXVhbCgnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2V0UmVxdWVzdFRyYWNlclNweSk7XG4gICAgICAgIHNldFJlcXVlc3RUcmFjZXJTcHkucmVzdG9yZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFzcyBpc1Rlc3RUcmFuc2FjdGlvbiB0aHJvdWdoIHNlbmRNYW55IHRvIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZW5kTWFueUlucHV0V2l0aFRlc3RGbGFnID0ge1xuICAgICAgICAgIC4uLnNlbmRNYW55SW5wdXQsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBpc1Rlc3RUcmFuc2FjdGlvbjogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5yZXNvbHZlcyhzaWduZWRUcmFuc2FjdGlvbik7XG5cbiAgICAgICAgY29uc3Qgc2VuZFR4UmVxdWVzdCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdzZW5kVHhSZXF1ZXN0Jyk7XG4gICAgICAgIHNlbmRUeFJlcXVlc3QucmVzb2x2ZXMoJ3NlbmRUeFJlc3BvbnNlJyk7XG5cbiAgICAgICAgY29uc3Qgc2VuZE1hbnkgPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlJbnB1dFdpdGhUZXN0RmxhZyk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uIHdhcyBjYWxsZWQgd2l0aCBpc1Rlc3RUcmFuc2FjdGlvblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbik7XG4gICAgICAgIGNvbnN0IGNhbGxBcmdzID0gcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdO1xuICAgICAgICBzaG91bGQuZXhpc3QoY2FsbEFyZ3MpO1xuICAgICAgICBjYWxsQXJncyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2lzVGVzdFRyYW5zYWN0aW9uJywgdHJ1ZSk7XG4gICAgICAgIGNhbGxBcmdzIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHlwZScsICd0cmFuc2ZlcicpO1xuXG4gICAgICAgIHNlbmRNYW55LnNob3VsZC5kZWVwRXF1YWwoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJhbnNmZXIgZnJvbSBzZW5kTWFueSBmb3IgYXBpVmVyc2lvbj1mdWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB7XG4gICAgICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9kaWFsJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNpZ25lZFR4UmVzdWx0ID0ge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgaW50ZW50OiAncGF5bWVudCcsXG4gICAgICAgICAgbGF0ZXN0OiBmYWxzZSxcbiAgICAgICAgICBwb2xpY2llc0NoZWNrZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICAgICAgdXNlcklkOiAndW5pdC10ZXN0JyxcbiAgICAgICAgICB2ZXJzaW9uOiAwLFxuICAgICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiB3YWxsZXQudHlwZSgpID8/ICdob3QnLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiBzaWduZWRUeFJlc3VsdC50eFJlcXVlc3RJZCxcbiAgICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGU6ICdkZWxpdmVyZWQnLFxuICAgICAgICAgICAgICBzaWduZWRUeDoge1xuICAgICAgICAgICAgICAgIGlkOiAndHhpZCcsXG4gICAgICAgICAgICAgICAgdHg6ICd0eCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVuc2lnbmVkVHg6ICdzb21ldGhpbmcnIGFzIGFueSxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHJhbnNmZXIgPSB7XG4gICAgICAgICAgaWQ6ICd0cmFuc2ZlcklkJyxcbiAgICAgICAgICBzdGF0ZTogJ3NpZ25lZCcsXG4gICAgICAgICAgdHhpZDogJ3R4aWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uID0gc2FuZGJveC5zdHViKHdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoc2lnbmVkVHhSZXN1bHQpO1xuXG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wZXJzaXN0KClcbiAgICAgICAgICAuZ2V0KGAvYXBpL3YyL3dhbGxldC8ke3dhbGxldERhdGEuaWR9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7c2lnbmVkVHhSZXN1bHQudHhSZXF1ZXN0SWR9JmxhdGVzdD10cnVlYClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RdIH0pO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZVRyYW5zZmVyTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBlcnNpc3QoKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3dhbGxldERhdGEuaWR9L3R4cmVxdWVzdHMvJHtzaWduZWRUeFJlc3VsdC50eFJlcXVlc3RJZH0vdHJhbnNmZXJzYClcbiAgICAgICAgICAucmVwbHkoMjAwLCB0cmFuc2Zlcik7XG5cbiAgICAgICAgY29uc3QgaW5wdXQ6IFNlbmRNYW55T3B0aW9ucyA9IHtcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNlbmRNYW55UmVzdWx0ID0gYXdhaXQgd2FsbGV0LnNlbmRNYW55KGlucHV0KTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24uY2FsbGVkT25jZVdpdGhFeGFjdGx5KGlucHV0KTtcbiAgICAgICAgdHhSZXF1ZXN0Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBjcmVhdGVUcmFuc2Zlck5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgICBzZW5kTWFueVJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgICAgdHJhbnNmZXIsXG4gICAgICAgICAgdHhpZDogJ3R4aWQnLFxuICAgICAgICAgIHR4OiAndHgnLFxuICAgICAgICAgIHN0YXR1czogJ3NpZ25lZCcsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHBlbmRpbmdBcHByb3ZhbCBmcm9tIHNlbmRNYW55IGZvciBhcGlWZXJzaW9uPWZ1bGwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRzb2wsIHtcbiAgICAgICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHhSZXN1bHQgPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiBzaWduZWRUeFJlc3VsdC50eFJlcXVlc3RJZCxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgaW50ZW50OiAncGF5bWVudCcsXG4gICAgICAgICAgbGF0ZXN0OiBmYWxzZSxcbiAgICAgICAgICBwb2xpY2llc0NoZWNrZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJyxcbiAgICAgICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICAgICAgdXNlcklkOiAndW5pdC10ZXN0JyxcbiAgICAgICAgICB2ZXJzaW9uOiAwLFxuICAgICAgICAgIHdhbGxldElkOiB3YWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiB3YWxsZXQudHlwZSgpID8/ICdob3QnLFxuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1wZW5kaW5nLWFwcHJvdmFsLWlkJyxcbiAgICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGU6ICdpbml0aWFsaXplZCcsXG4gICAgICAgICAgICAgIHVuc2lnbmVkVHg6ICdzb21ldGhpbmcnIGFzIGFueSxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHJhbnNmZXIgPSB7XG4gICAgICAgICAgaWQ6ICd0cmFuc2ZlcklkJyxcbiAgICAgICAgICBzdGF0ZTogJ3NpZ25lZCcsXG4gICAgICAgICAgdHhpZDogJ3R4aWQnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSB7XG4gICAgICAgICAgaWQ6ICdzb21lLXBlbmRpbmctYXBwcm92YWwtaWQnLFxuICAgICAgICAgIHdhbGxldDogd2FsbGV0LmlkKCksXG4gICAgICAgICAgaW5mbzoge1xuICAgICAgICAgICAgdHlwZTogJ3RyYW5zYWN0aW9uUmVxdWVzdEZ1bGwnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih3YWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKHNpZ25lZFR4UmVzdWx0KTtcblxuICAgICAgICBjb25zdCB0eFJlcXVlc3ROb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucGVyc2lzdCgpXG4gICAgICAgICAgLmdldChgL2FwaS92Mi93YWxsZXQvJHt3YWxsZXREYXRhLmlkfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke3R4UmVxdWVzdC50eFJlcXVlc3RJZH0mbGF0ZXN0PXRydWVgKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdF0gfSk7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlVHJhbnNmZXJOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucGVyc2lzdCgpXG4gICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7d2FsbGV0RGF0YS5pZH0vdHhyZXF1ZXN0cy8ke3R4UmVxdWVzdC50eFJlcXVlc3RJZH0vdHJhbnNmZXJzYClcbiAgICAgICAgICAucmVwbHkoMjAwLCB0cmFuc2Zlcik7XG5cbiAgICAgICAgY29uc3QgZ2V0UGVuZGluZ0FwcHJvdmFsTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBlcnNpc3QoKVxuICAgICAgICAgIC5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS9wZW5kaW5nYXBwcm92YWxzLyR7dHhSZXF1ZXN0LnBlbmRpbmdBcHByb3ZhbElkfWApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgcGVuZGluZ0FwcHJvdmFsKTtcblxuICAgICAgICBjb25zdCBpbnB1dDogU2VuZE1hbnlPcHRpb25zID0ge1xuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2VuZE1hbnlSZXN1bHQgPSBhd2FpdCB3YWxsZXQuc2VuZE1hbnkoaW5wdXQpO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoaW5wdXQpO1xuICAgICAgICB0eFJlcXVlc3ROb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIGNyZWF0ZVRyYW5zZmVyTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBnZXRQZW5kaW5nQXBwcm92YWxOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgICAgc2VuZE1hbnlSZXN1bHQuc2hvdWxkLmRlZXBFcXVhbCh7IHBlbmRpbmdBcHByb3ZhbCwgdHhSZXF1ZXN0IH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0eFJlcXVlc3RJZCBpcyBtaXNzaW5nIGZyb20gcHJlYnVpbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgIHR4SGV4OiAnZGVhZGJlZWYnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLnJlc29sdmVzKHNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHNlbmRNYW55XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmNhbGxlZE9uY2VXaXRoRXhhY3RseShzZW5kTWFueUlucHV0KTtcblxuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2VuZE1hbnkoc2VuZE1hbnlJbnB1dClcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndHhSZXF1ZXN0SWQgbWlzc2luZyBmcm9tIHNpZ25lZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnU3VibWl0IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBzdWJtaXQgdHJhbnNhY3Rpb24gd2l0aCB0eFJlcXVlc3RJZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9ja1NlbmRUeCA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBlcnNpc3QoZmFsc2UpXG4gICAgICAgICAgLnBvc3QodHNzU29sV2FsbGV0LnVybCgnL3R4L3NlbmQnKS5yZXBsYWNlKGJnVXJsLCAnJykpXG4gICAgICAgICAgLnJlcGx5KDIwMCwgeyBtZXNzYWdlOiAnc3VjY2VzcycgfSk7XG5cbiAgICAgICAgY29uc3Qgc3VibWl0dGVkVHggPSBhd2FpdCB0c3NTb2xXYWxsZXQuc3VibWl0VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICB9KTtcbiAgICAgICAgc3VibWl0dGVkVHguc2hvdWxkLmRlZXBFcXVhbCh7IG1lc3NhZ2U6ICdzdWNjZXNzJyB9KTtcbiAgICAgICAgbm9ja1NlbmRUeC5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHR4UmVxdWVzdElkIGFuZCB0eEhleCBhcmUgYm90aCBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnN1Ym1pdFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgICAgdHhIZXg6ICdiZWVmJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtdXN0IHN1cHBseSBleGFjdGx5IG9uZSBvZiB0eFJlcXVlc3RJZCwgdHhIZXgsIG9yIGhhbGZTaWduZWQnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiB0eFJlcXVlc3RJZCBhbmQgaGFsZlNpZ25lZCBhcmUgYm90aCBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnN1Ym1pdFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgICAgaGFsZlNpZ25lZDoge1xuICAgICAgICAgICAgICB0eEhleDogJ2JlZWYnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtdXN0IHN1cHBseSBleGFjdGx5IG9uZSBvZiB0eFJlcXVlc3RJZCwgdHhIZXgsIG9yIGhhbGZTaWduZWQnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiB0eEhleCBhbmQgaGFsZlNpZ25lZCBhcmUgYm90aCBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnN1Ym1pdFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4SGV4OiAnYmVlZicsXG4gICAgICAgICAgICBoYWxmU2lnbmVkOiB7XG4gICAgICAgICAgICAgIHR4SGV4OiAnYmVlZicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ211c3Qgc3VwcGx5IGVpdGhlciB0eEhleCBvciBoYWxmU2lnbmVkLCBidXQgbm90IGJvdGgnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZmVyIHRva2VucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnMHgxMDFjMzkyODk0NmIyZTFkOTk3NTllOGU1ZDM0YjVlOTRjMWE4ZTJmJyxcbiAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICB0b2tlbkRhdGE6IHtcbiAgICAgICAgICAgIHRva2VuTmFtZTogJ2VyYzcyMTpiaXRnb2VyYzcyMScsXG4gICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4ODM5N2IwOTE1MTRjMWY3YmViYjlkZWE2YWMyNjdlYTIzYjU3MDYwNScsXG4gICAgICAgICAgICB0b2tlbklkOiAnMzgnLFxuICAgICAgICAgICAgdG9rZW5RdWFudGl0eTogJzEnLFxuICAgICAgICAgICAgZGVjaW1hbFBsYWNlczogMCxcbiAgICAgICAgICAgIHRva2VuVHlwZTogVG9rZW5UeXBlLkVSQzcyMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgbWF4RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMTAwMDAwMDAwMCxcbiAgICAgIH07XG5cbiAgICAgIGl0KCdjYWxsaW5nIHByZWJ1aWxkeFRyYW5zYWN0aW9uIHNob3VsZCBleGVjdXRlIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggcHJvcGVyIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0RnVsbFRva2VuVHJhbnNmZXIgPSB7IC4uLnR4UmVxdWVzdEZ1bGwsIGludGVudDogJ3RyYW5zZmVyVG9rZW4nIH07XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsVG9rZW5UcmFuc2Zlcik7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBwcmVidWlsZFRyYW5zYWN0aW9uXG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseShcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAndHJhbnNmZXJUb2tlbicsXG4gICAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2Z1bGwnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1BvbHlnb25XYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgaXNUc3M6IHRydWUsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXJ0b2tlbicsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UxMjM0NScsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzUG9seWdvbldhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzUG9seWdvbldhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcnRva2VuJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcG9wdWxhdGUgaW50ZW50IHdpdGggRVZNLWxpa2UgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ3Rwb2x5Z29uJykpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG9ubHkgcGFzcyBpbiBwYXJhbXMgYmVpbmcgdGVzdGVkXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ3Rwb2x5Z29uJyksIHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAndHJhbnNmZXJUb2tlbicsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWVPcHRpb25zJyk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4RmVlUGVyR2FzJywgMjAwMDAwMDAwMCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4UHJpb3JpdHlGZWVQZXJHYXMnLCAxMDAwMDAwMDAwKTtcbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJywgMSk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndG9rZW5EYXRhJyk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS50b2tlbkRhdGEhLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0b2tlblF1YW50aXR5JywgcmVjaXBpZW50c1swXS50b2tlbkRhdGEudG9rZW5RdWFudGl0eSk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS50b2tlbkRhdGEhLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0b2tlblR5cGUnLCByZWNpcGllbnRzWzBdLnRva2VuRGF0YS50b2tlblR5cGUpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0udG9rZW5EYXRhIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndG9rZW5OYW1lJywgcmVjaXBpZW50c1swXS50b2tlbkRhdGEudG9rZW5OYW1lKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnRva2VuRGF0YSEuc2hvdWxkLmhhdmUucHJvcGVydHkoXG4gICAgICAgICAgJ3Rva2VuQ29udHJhY3RBZGRyZXNzJyxcbiAgICAgICAgICByZWNpcGllbnRzWzBdLnRva2VuRGF0YS50b2tlbkNvbnRyYWN0QWRkcmVzc1xuICAgICAgICApO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0udG9rZW5EYXRhIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndG9rZW5JZCcsIHJlY2lwaWVudHNbMF0udG9rZW5EYXRhLnRva2VuSWQpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0udG9rZW5EYXRhIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZGVjaW1hbFBsYWNlcycsIHJlY2lwaWVudHNbMF0udG9rZW5EYXRhLmRlY2ltYWxQbGFjZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcG9wdWxhdGUgaW50ZW50IHdpdGggY2FsbGRhdGEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4MTAxYzM5Mjg5NDZiMmUxZDk5NzU5ZThlNWQzNGI1ZTk0YzFhOGUyZicsXG4gICAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICAgIGRhdGE6ICcweDAwMDAxMTExMjIyMicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG9ubHkgcGFzcyBpbiBwYXJhbXMgYmVpbmcgdGVzdGVkXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZU9wdGlvbnMnKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtYXhGZWVQZXJHYXMnLCAyMDAwMDAwMDAwKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtYXhQcmlvcml0eUZlZVBlckdhcycsIDEwMDAwMDAwMDApO1xuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdsZW5ndGgnLCAxKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLmRhdGEhLnNob3VsZC5lcXVhbCgnMHgwMDAwMTExMTIyMjInKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG5vdCBwb3B1bGF0ZSBpbnRlbnQgd2l0aCB0b2tlbkRhdGEgaWYgY2VydGFpbiBwYXJhbXMgYXJlIHVuZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCd0cG9seWdvbicpKTtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnMHgxMDFjMzkyODk0NmIyZTFkOTk3NTllOGU1ZDM0YjVlOTRjMWE4ZTJmJyxcbiAgICAgICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICAgICAgdG9rZW5EYXRhOiB7XG4gICAgICAgICAgICAgIHRva2VuTmFtZTogJ2VyYzcyMTpiaXRnb2VyYzcyMScsXG4gICAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHg4Mzk3YjA5MTUxNGMxZjdiZWJiOWRlYTZhYzI2N2VhMjNiNTcwNjA1JyxcbiAgICAgICAgICAgICAgdG9rZW5JZDogJzM4JyxcbiAgICAgICAgICAgICAgdG9rZW5RdWFudGl0eTogJzEnLFxuICAgICAgICAgICAgICBkZWNpbWFsUGxhY2VzOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBsZXQgaW50ZW50O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ3Rwb2x5Z29uJyksIHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICd0cmFuc2ZlclRva2VuJyxcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igb25seSBwYXNzIGluIHBhcmFtcyBiZSB0ZXN0ZWQgZm9yXG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpbnRlbnQuc2hvdWxkLmVxdWFsKHVuZGVmaW5lZCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGUubWVzc2FnZS5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgICAndG9rZW4gdHlwZSBhbmQgcXVhbnRpdHkgaXMgcmVxdWlyZWQgdG8gcmVxdWVzdCBhIHRyYW5zYWN0aW9uIHdpdGggaW50ZW50IHRvIHRyYW5zZmVyIGEgdG9rZW4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVHJhbnNmZXIgTkZUcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcG9wdWxhdGUgaW50ZW50IHdpdGggTkZUIHRva2VuIGRldGFpbHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zID0ge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICcweDlmZWY3NDkwNTA2NDQ2MjUwMTJhMmM4NjY5NzM3NzVlNzEyMzc1M2IzZWVmMGExYTQwMzc0NTNhYzI2ZDc5YmYnLFxuICAgICAgICAgICAgICBhbW91bnQ6ICcxJyxcbiAgICAgICAgICAgICAgdG9rZW5EYXRhOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5UeXBlOiBUb2tlblR5cGUuRElHSVRBTF9BU1NFVCxcbiAgICAgICAgICAgICAgICB0b2tlblF1YW50aXR5OiAnMScsXG4gICAgICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweGJiYzU2MWZiZmE1ZDEwNWVmZDhkZmIwNmFlM2U3ZTViZTQ2MzMxMTY1Yjk5ZDUxOGYwOTRjNzAxZTQwNjAzYjUnLFxuICAgICAgICAgICAgICAgIHRva2VuSWQ6ICcweDY3NWIwNTNkNzJjMjRkY2M2YmM3ZjM4Y2RkNDViNDg0M2NmYjdhZjY5YTI1YWQyMWQwMDJjMzc2MzU3ZTlkNjknLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGJhc2VDb2luID0gYml0Z28uY29pbigndGFwdCcpO1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFRERTQVV0aWxzLmRlZmF1bHQoYml0Z28sIGJhc2VDb2luKTtcbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYmFzZUNvaW4sIHBhcmFtcyk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdpbnRlbnRUeXBlJywgJ3BheW1lbnQnKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhLnNob3VsZC5kZWVwRXF1YWwoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJzB4OWZlZjc0OTA1MDY0NDYyNTAxMmEyYzg2Njk3Mzc3NWU3MTIzNzUzYjNlZWYwYTFhNDAzNzQ1M2FjMjZkNzliZicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYW1vdW50OiB7XG4gICAgICAgICAgICAgIHZhbHVlOiAnMScsXG4gICAgICAgICAgICAgIHN5bWJvbDogJ3RhcHQ6bmZ0Y29sbGVjdGlvbjEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRva2VuRGF0YToge1xuICAgICAgICAgICAgICB0b2tlblR5cGU6ICdEaWdpdGFsIEFzc2V0JyxcbiAgICAgICAgICAgICAgdG9rZW5RdWFudGl0eTogJzEnLFxuICAgICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4YmJjNTYxZmJmYTVkMTA1ZWZkOGRmYjA2YWUzZTdlNWJlNDYzMzExNjViOTlkNTE4ZjA5NGM3MDFlNDA2MDNiNScsXG4gICAgICAgICAgICAgIHRva2VuSWQ6ICcweDY3NWIwNTNkNzJjMjRkY2M2YmM3ZjM4Y2RkNDViNDg0M2NmYjdhZjY5YTI1YWQyMWQwMDJjMzc2MzU3ZTlkNjknLFxuICAgICAgICAgICAgICB0b2tlbk5hbWU6ICd0YXB0Om5mdGNvbGxlY3Rpb24xJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdXYWxsZXQgU2hhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdXNlIGtleWNoYWluIHB1YiB0byBzaGFyZSB0c3Mgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB1c2VySWQgPSAnMTIzJztcbiAgICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gJ3ZpZXcsc3BlbmQnO1xuICAgICAgICBjb25zdCB0b0tleWNoYWluID0gdXR4b0xpYi5iaXAzMi5mcm9tU2VlZChCdWZmZXIuZnJvbSgnZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMicsICdoZXgnKSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSAnbS85OTk5OTkvMS8xJztcbiAgICAgICAgY29uc3QgcHVia2V5ID0gdG9LZXljaGFpbi5kZXJpdmVQYXRoKHBhdGgpLnB1YmxpY0tleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnYml0Z28xMjM0JztcblxuICAgICAgICBjb25zdCBnZXRTaGFyaW5nS2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgdXNlcklkLCBwdWJrZXksIHBhdGggfSk7XG5cbiAgICAgICAgLy8gY29tbW9uUHViICsgY29tbW9uQ2hhaW5jb2RlXG4gICAgICAgIGNvbnN0IGNvbW1vbktleWNoYWluID0gcmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKCdoZXgnKSArIHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgIGNvbnN0IGVuY1hwcnYxVHNzID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAneHBydjEnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgY29uc3QgZ2V0S2V5Tm9jayA9IG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi90c29sL2tleS8ke3Rzc1NvbFdhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogdHNzU29sV2FsbGV0LmtleUlkcygpWzBdLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGVuY1hwcnYxVHNzLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKHRzc1NvbFdhbGxldCwgJ2NyZWF0ZVNoYXJlJykuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEucHViIS5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgb3B0aW9ucyEua2V5Y2hhaW4hLnB1YiEuc2hvdWxkLmVxdWFsKFRzc1V0aWxzLmdldFB1YmxpY0tleUZyb21Db21tb25LZXljaGFpbihjb21tb25LZXljaGFpbikpO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXQuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMsIHdhbGxldFBhc3NwaHJhc2UgfSk7XG5cbiAgICAgICAgc3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIGdldFNoYXJpbmdLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgIGdldEtleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQVZBWCB0ZXN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYmdVcmw7XG4gICAgbGV0IGJhc2Vjb2luO1xuICAgIGxldCB3YWxsZXREYXRhO1xuICAgIGxldCB3YWxsZXQ7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5wZW5kaW5nTW9ja3MoKS5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0udXJpO1xuICAgICAgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NzAwMDAwMDAwJyxcbiAgICAgICAgXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZldGNoIGNyb3NzLWNoYWluIHV0eG9zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YXZheHAnKTtcbiAgICAgIHdhbGxldERhdGEuY29pbiA9ICd0YXZheHAnO1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IHNvdXJjZUNoYWluOiAnQycgfTtcbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9jcm9zc0NoYWluVW5zcGVudHNgO1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KHBhdGgpXG4gICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICB1bnNwZW50OiB7XG4gICAgICAgICAgICBvdXRwdXRJRDogNyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwJyxcbiAgICAgICAgICAgIHR4aWQ6ICdWM1VCWlRRajM2NHpOV3F0OHVNSEQ1Tmp4eFg4VDhxa2JlWlhVUm1qblZtTEVxemFiJyxcbiAgICAgICAgICAgIHRocmVzaG9sZDogMixcbiAgICAgICAgICAgIGFkZHJlc3NlczogW1xuICAgICAgICAgICAgICAnQy1mdWppMTk5Zmx1ZWdydGhxczR0dno0MHphamZyc3g1bTdkdnk3NWFqZm02JyxcbiAgICAgICAgICAgICAgJ0MtZnVqaTFnazNtNDQ0ODkzeW5sMGdmdnhhaGpndzN2ZnRubjhzcHR5ZDlnNScsXG4gICAgICAgICAgICAgICdDLWZ1amkxdWpmempnd3pmeWdsNjBxcDJsOHJtZ2xnM2xubTd3NDA1OW5jYTUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG91dHB1dGlkeDogJzExMTFYaWFZZycsXG4gICAgICAgICAgICBsb2NrdGltZTogJzAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZnJvbVdhbGxldDogJzYzNTA5MmZkNGZmMzMxNjE0MmRmNmU2YjdhMDc4YjkyJyxcbiAgICAgICAgICB0b1dhbGxldDogJzYzNTA5MmZkNGZmMzMxNjE0MmRmNmU4OTFmNmE3ZWU2JyxcbiAgICAgICAgICB0b0FkZHJlc3M6ICcweDEyNWM0NDUxYzg3MGY3NTMyNjViMGIxYWYzY2Y2YWI4OGZmZTQ2NTcnLFxuICAgICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmZldGNoQ3Jvc3NDaGFpblVUWE9zKHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NlbmRNYW55IHNob3VsZCB3b3JrIGZvciBDID4gUCBleHBvcnQgd2l0aCBjdXN0b2RpYWwgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YXZheGMnKTtcbiAgICAgIHdhbGxldERhdGEuY29pbiA9ICd0YXZheGMnO1xuICAgICAgd2FsbGV0RGF0YS50eXBlID0gJ2N1c3RvZGlhbCc7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgd2FsbGV0RGF0YSk7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3MgPVxuICAgICAgICAnUC1mdWppMWU1NnBjNDk2NnFzZXZ6aHdna3ltNWwwamZtYTlsbGtxbnJyNGdoflAtZnVqaTFrcTA1em05bm1scThwM2xkNTVrNzlkbDNxYXk2YzBlM2F0ajU2dn5QLWZ1amkxcnA0NnozMHFnNDU3eGMzZHBmZnl4Y2d6cGZseGM4NW1oa2ptZTMnO1xuICAgICAgY29uc3QgaW5pdGlhdGVUeFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwJywgLy8gMC4wMSBBVkFYXG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGhvcDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBpbml0aWF0ZVR4UGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2luaXRpYXRlYDtcbiAgICAgIGxldCBpbml0aWF0ZVR4Qm9keTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoaW5pdGlhdGVUeFBhdGgsIChib2R5KSA9PiB7XG4gICAgICAgICAgaW5pdGlhdGVUeEJvZHkgPSBib2R5O1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgY29uc3QgZmVlRXN0aW1hdGlvblBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3R4L2ZlZT9ob3A9dHJ1ZSZyZWNpcGllbnQ9JHthZGRyZXNzfSZhbW91bnQ9MTAwMDAwMDAwMDAwMDAwMDAmdHlwZT1FeHBvcnRgO1xuICAgICAgbm9jayhiZ1VybCkuZ2V0KGZlZUVzdGltYXRpb25QYXRoKS5yZXBseSgyMDAsIHtcbiAgICAgICAgZmVlRXN0aW1hdGU6ICc3MTg3NTAwMDAwMDAwMDAnLFxuICAgICAgICBnYXNMaW1pdEVzdGltYXRlOiA1MDAwMDAsXG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LnNlbmRNYW55KGluaXRpYXRlVHhQYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBfLmlzTWF0Y2goaW5pdGlhdGVUeEJvZHksIHtcbiAgICAgICAgaG9wUGFyYW1zOiB7XG4gICAgICAgICAgZ2FzUHJpY2VNYXg6IDcxODc1MDAwMDAsXG4gICAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTkZUIFRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBldGhXYWxsZXQ6IFdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgY29pbjogJ2h0ZXRoJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBdLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmV0dXJuIGFsbCBuZnRzIGluIHRoZSB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBnZXRUb2tlbkJhbGFuY2VOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi9odGV0aC93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0/YWxsVG9rZW5zPXRydWVgKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgICAgICAuLi5uZnRSZXNwb25zZSxcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCBuZnRzID0gYXdhaXQgZXRoV2FsbGV0LmdldE5mdEJhbGFuY2VzKCk7XG4gICAgICBnZXRUb2tlbkJhbGFuY2VOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIG5mdHMuc2hvdWxkLmxlbmd0aCg1KTtcbiAgICAgIG5mdHMuc2hvdWxkLmNvbnRhaW5FcWwoe1xuICAgICAgICB0eXBlOiAnRVJDNzIxJyxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBuYW1lOiAndGVyYzcyMTpiaXRnb2VyYzcyMScsXG4gICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweDgzOTdiMDkxNTE0YzFmN2JlYmI5ZGVhNmFjMjY3ZWEyM2I1NzA2MDUnLFxuICAgICAgICB9LFxuICAgICAgICBjb2xsZWN0aW9uczoge30sXG4gICAgICAgIGJhbGFuY2VTdHJpbmc6ICcwJyxcbiAgICAgICAgY29uZmlybWVkQmFsYW5jZVN0cmluZzogJzAnLFxuICAgICAgICBzcGVuZGFibGVCYWxhbmNlU3RyaW5nOiAnMCcsXG4gICAgICAgIHRyYW5zZmVyQ291bnQ6IDAsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgdGhyb3cgd2hlbiBhdHRlbXB0aW5nIHRvIHRyYW5zZmVyIGEgbmZ0IGNvbGxlY3Rpb24gbm90IGluIHRoZSB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBnZXRUb2tlbkJhbGFuY2VOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi9odGV0aC93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0/YWxsVG9rZW5zPXRydWVgKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgICAgICAuLi5uZnRSZXNwb25zZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuc2VuZE5mdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnMTIzYWJjJyxcbiAgICAgICAgICAgIG90cDogJzAwMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0b2tlbklkOiAnMTIzJyxcbiAgICAgICAgICAgIHR5cGU6ICdFUkM3MjEnLFxuICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweDEyM2JhZGFkZHJlc3MnLFxuICAgICAgICAgICAgcmVjaXBpZW50QWRkcmVzczogJzB4YzE1YWNjMjdlZTQxZjI2Njg3N2M4ZjBjNjFkZjViY2JjNzk5N2RmNicsXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdDb2xsZWN0aW9uIG5vdCBmb3VuZCBmb3IgdG9rZW4gY29udHJhY3QgMHgxMjNiYWRhZGRyZXNzJyk7XG4gICAgICBnZXRUb2tlbkJhbGFuY2VOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHRocm93IHdoZW4gYXR0ZW1wdGluZyB0byB0cmFuc2ZlciBhIEVSQy03MjEgbmZ0IG5vdCBvd25lZCBieSB0aGUgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VG9rZW5CYWxhbmNlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvaHRldGgvd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9P2FsbFRva2Vucz10cnVlYClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICAgICAgLi4ubmZ0UmVzcG9uc2UsXG4gICAgICAgICAgLi4udW5zdXBwb3J0ZWROZnRSZXNwb25zZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuc2VuZE5mdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnMTIzYWJjJyxcbiAgICAgICAgICAgIG90cDogJzAwMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0b2tlbklkOiAnMTIzJyxcbiAgICAgICAgICAgIHR5cGU6ICdFUkM3MjEnLFxuICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweGY1ZGU3NjBmMmU5MTY2NDdmZDc2NmI0YWQ5ZTg1ZmY5NDNjZTNhMmInLFxuICAgICAgICAgICAgcmVjaXBpZW50QWRkcmVzczogJzB4YzE1YWNjMjdlZTQxZjI2Njg3N2M4ZjBjNjFkZjViY2JjNzk5N2RmNicsXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICdUb2tlbiAxMjMgbm90IGZvdW5kIGluIGNvbGxlY3Rpb24gMHhmNWRlNzYwZjJlOTE2NjQ3ZmQ3NjZiNGFkOWU4NWZmOTQzY2UzYTJiIG9yIGRvZXMgbm90IGhhdmUgYSBzcGVuZGFibGUgYmFsYW5jZSdcbiAgICAgICAgKTtcbiAgICAgIGdldFRva2VuQmFsYW5jZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgdGhyb3cgd2hlbiBhdHRlbXB0aW5nIHRvIHRyYW5zZmVyIEVSQy0xMTU1IHRva2VucyB3aGVuIHRoZSBhbW91bnQgdHJhbnNmZXJyZWQgaXMgbW9yZSB0aGFuIHRoZSBzcGVuZGFibGUgYmFsYW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdldFRva2VuQmFsYW5jZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL2h0ZXRoL3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfT9hbGxUb2tlbnM9dHJ1ZWApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgICAgIC4uLntcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkTmZ0czoge1xuICAgICAgICAgICAgICAnMHhmNWRlNzYwZjJlOTE2NjQ3ZmQ3NjZiNGFkOWU4NWZmOTQzY2UzYTJiJzoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdFUkMxMTU1JyxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uczoge1xuICAgICAgICAgICAgICAgICAgMTE4NjcwMzogJzknLFxuICAgICAgICAgICAgICAgICAgMTE4NjcwNTogJzEnLFxuICAgICAgICAgICAgICAgICAgMTI5NDg1NjogJzEnLFxuICAgICAgICAgICAgICAgICAgMTI5NDg1NzogJzEnLFxuICAgICAgICAgICAgICAgICAgMTI5NDg1ODogJzEnLFxuICAgICAgICAgICAgICAgICAgMTI5NDg1OTogJzEnLFxuICAgICAgICAgICAgICAgICAgMTI5NDg2MDogJzEnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdNdWx0aUZhdWNldCBORlQnLFxuICAgICAgICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweGY1ZGU3NjBmMmU5MTY2NDdmZDc2NmI0YWQ5ZTg1ZmY5NDNjZTNhMmInLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLnNlbmROZnQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJzEyM2FiYycsXG4gICAgICAgICAgICBvdHA6ICcwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50cmllczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYW1vdW50OiAxMCxcbiAgICAgICAgICAgICAgICB0b2tlbklkOiAnMTE4NjcwMycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhbW91bnQ6IDEsXG4gICAgICAgICAgICAgICAgdG9rZW5JZDogJzExODY3MDUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHR5cGU6ICdFUkMxMTU1JyxcbiAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHhmNWRlNzYwZjJlOTE2NjQ3ZmQ3NjZiNGFkOWU4NWZmOTQzY2UzYTJiJyxcbiAgICAgICAgICAgIHJlY2lwaWVudEFkZHJlc3M6ICcweGMxNWFjYzI3ZWU0MWYyNjY4NzdjOGYwYzYxZGY1YmNiYzc5OTdkZjYnLFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnQW1vdW50IDEwIGV4Y2VlZHMgc3BlbmRhYmxlIGJhbGFuY2Ugb2YgOSBmb3IgdG9rZW4gMTE4NjcwMycpO1xuICAgICAgZ2V0VG9rZW5CYWxhbmNlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRhIHRlc3RzOiAnLCAoKSA9PiB7XG4gICAgbGV0IGFkYVdhbGxldDogV2FsbGV0O1xuICAgIGNvbnN0IGFkYUJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGFkYUJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICBiYXNlQWRkcmVzczpcbiAgICAgICAgICAnYWRkcl90ZXN0MXE5ZmFhNXEzenIzOHdrZDRrZDN1OGpmc2h4OTdqeHZ3c3l2amczdGFjODI2NTAybm1tZ3B6eTh6d2F2bXR2bXJjMHlucHd2dGF5dmNhcWdleTN6aG1zdzQ0ZzdzaHJmcmg5JyxcbiAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IGZhbHNlLFxuICAgICAgICBtaW5pbXVtRnVuZGluZzogMTAwMDAwMCxcbiAgICAgICAgbGFzdENoYWluSW5kZXg6IHsgMDogMCB9LFxuICAgICAgfSxcbiAgICAgIGNvaW46ICd0YWRhJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYWRhV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGFkYScpLCB3YWxsZXREYXRhKTtcbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2FkYVdhbGxldC5jb2luKCl9L2tleS8ke2FkYVdhbGxldC5rZXlJZHMoKVswXX1gKS50aW1lcygzKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgIHB1YjogJzVmOFdtQzJ1VzlTQWs3TE1YMnI0RzFCeDhNTXd4OHNkZ3BvdHlIR29kaVpvJyxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcImhOSzNyZzgyUDFUOTRNYXVlWEZBYkE9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJjVjR3VTRFelBqcz1cIixcImN0XCI6XCI5VlpYOTladHNiNnA3NUN4bDJscmNYQnBsbXNzSUFROWs3WkE4MXZkRFlHNE41ZFozNkJRTldWZkRvZWxqOU8zMVh5SitYcmkwWEtJV1V6bDBLS0xmVUVScGxtdE5vT0NuNWlmSmNad0NyT3hwSFpRZTNBSjcwMG84V21zcms1SFwifScsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcblxuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7YWRhV2FsbGV0LmNvaW4oKX0va2V5LyR7YWRhV2FsbGV0LmtleUlkcygpWzFdfWApLnRpbWVzKDIpLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgcHViOiAnRzFzNDNKVHpOWnpxaFVuNGFOcHdnY2M2d2I5RlVzWlFENUpqZmZHNmlzeWQnLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJVRnJ0L1FsSVVSMVhlUWFmUEJhQWx3PT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiN1ZQQllhSlhQbTg9XCIsXCJjdFwiOlwiYWpGS3YyeTh5YUlCWFEzOXNBYkJXY25iaUVFemJqUzRBb1F0cDVjWFlxamVEUnh0M2FDeGVtUG0yMnBua0phQ2lqRmpKck1IYmttc05oTll6SGc1YUhGdWtOK25FQVZzc3lOd0hiemxoU25tOC9CVk41MHlBZEFBdFdyZWg4Y3BcIn0nLFxuICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2FkYVdhbGxldC5jb2luKCl9L2tleS8ke2FkYVdhbGxldC5rZXlJZHMoKVsyXX1gKS50aW1lcygyKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIHB1YjogJ0dIMUxWMWU5RmRxR2U4VTJjOFBNRWNtYTNmRGVoMWt0Y0dWQnJEM0F1RnF4JyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiaUl1V09ISU9FckVEZGlKbjZnNDZtZz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIlJ6aDdSUkprc2owPVwiLFwiY3RcIjpcInJjTklDVWZwOUZha1Q1M2wrYWRCNlhLelMxdk5UYzBRcTlqQXRxbnhBK1Njc3NpUzRRMGwzc2dHLzBnRHk1RGFaS3RYcnlLQkRVdkdzaTdiL2ZZYUZDVXBBb1puL1ZaVE9oT1VOL21vN1pIYjRPaE9YTDI5WVBQa2lyeUFxOUNyXCJ9JyxcbiAgICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHNlbmQgdW5zcGVudHMgaW4gcGF5bWVudCBpbnRlbnQgd2hlbiB1c2luZyBzZW5kbWFueScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbmRNYW55UGFyYW1zID0ge1xuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdW5zcGVudHM6IFsndW5zcGVudDEnLCAndW5zcGVudDInXSxcbiAgICAgIH07XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke2FkYVdhbGxldC5pZCgpfS90eHJlcXVlc3RzYClcbiAgICAgICAgLnJlcGx5KCh1cmwsIGJvZHk6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHZhbGlkYXRlIHRoYXQgdGhlIHBvcHVsYXRlZCBpbnRlbnQgaGFzIHVuc3BlbnRzXG4gICAgICAgICAgYm9keS5pbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3BheW1lbnQnKTtcbiAgICAgICAgICBib2R5LmludGVudC51bnNwZW50cy5zaG91bGQuZGVlcEVxdWFsKFsndW5zcGVudDEnLCAndW5zcGVudDInXSk7XG5cbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMjAwLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICAgICAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdzZXJpYWxpemVkVHhIZXgnLFxuICAgICAgICAgICAgICAgICAgICBmZWVJbmZvOiAnZmVlIGluZm8nLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gc3R1YiBhbGwgc3RlcHMgYWZ0ZXIgdHhyZXF1ZXN0IGNyZWF0aW9uXG4gICAgICBzaW5vbi5zdHViKGFkYVdhbGxldC5iYXNlQ29pbiwgJ3ZlcmlmeVRyYW5zYWN0aW9uJykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICBzaW5vbi5zdHViKGFkYVdhbGxldCwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKHsgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcgfSk7XG4gICAgICBzaW5vbi5zdHViKEJhc2VUc3NVdGlscy5kZWZhdWx0LnByb3RvdHlwZSwgJ3NlbmRUeFJlcXVlc3QnKS5yZXNvbHZlcygnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgIGF3YWl0IGFkYVdhbGxldC5zZW5kTWFueShzZW5kTWFueVBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHNlbmQgc2VuZGVyQWRkcmVzcyBpbiBwYXltZW50IGludGVudCB3aGVuIHVzaW5nIHNlbmRtYW55JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VuZE1hbnlQYXJhbXMgPSB7XG4gICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnYWRkcmVzcycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZW5kZXJBZGRyZXNzOiAnc2VuZGVyQWRkcjEnLFxuICAgICAgfTtcblxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7YWRhV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgKVxuICAgICAgICAucmVwbHkoKHVybCwgYm9keTogbm9jay5Cb2R5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY3JlYXRlVHhSZXF1ZXN0Qm9keSA9IGJvZHkgYXMgQ3JlYXRlVHhSZXF1ZXN0Qm9keTtcbiAgICAgICAgICBjcmVhdGVUeFJlcXVlc3RCb2R5LmludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgncGF5bWVudCcpO1xuICAgICAgICAgIGNyZWF0ZVR4UmVxdWVzdEJvZHkuaW50ZW50LnNlbmRlckFkZHJlc3M/LnNob3VsZC5lcXVhbCgnc2VuZGVyQWRkcjEnKTtcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAyMDAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgICAgICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ3NlcmlhbGl6ZWRUeEhleCcsXG4gICAgICAgICAgICAgICAgICAgIGZlZUluZm86ICdmZWUgaW5mbycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pO1xuXG4gICAgICBzaW5vbi5zdHViKGFkYVdhbGxldC5iYXNlQ29pbiwgJ3ZlcmlmeVRyYW5zYWN0aW9uJykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICBzaW5vbi5zdHViKGFkYVdhbGxldCwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKHsgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcgfSk7XG4gICAgICBzaW5vbi5zdHViKEJhc2VUc3NVdGlscy5kZWZhdWx0LnByb3RvdHlwZSwgJ3NlbmRUeFJlcXVlc3QnKS5yZXNvbHZlcygnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgIGF3YWl0IGFkYVdhbGxldC5zZW5kTWFueShzZW5kTWFueVBhcmFtcykuc2hvdWxkLmJlLnJlc29sdmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFUkMyMCBUb2tlbiBBcHByb3ZhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgd2FsbGV0O1xuICAgIGNvbnN0IHdhbGxldElkID0gJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJztcbiAgICBsZXQgdG9wZXRoQ29pbjtcbiAgICBjb25zdCB0b2tlbk5hbWUgPSAndG9wZXRoOnRlcmMxOGRwJztcbiAgICBjb25zdCBjb2luID0gJ3RvcGV0aCc7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRvcGV0aENvaW4gPSBiaXRnby5jb2luKCd0b3BldGgnKTtcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRvcGV0aENvaW4sIHtcbiAgICAgICAgaWQ6IHdhbGxldElkLFxuICAgICAgICBjb2luOiBjb2luLFxuICAgICAgICBrZXlzOiBbJ2tleWlkMScsICdrZXlpZDInLCAna2V5aWQzJ10sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBhcHByb3ZlIGEgdG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Bhc3N3b3JkMTIzJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkQXBwcm92YWxCdWlsZCA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMzQ1NicsXG4gICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkU2lnbmVkVHggPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjM0NTZzaWduZWQnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWRTZW5kUmVzdWx0ID0ge1xuICAgICAgICB0eGlkOiAnMHhhYmNkZWYnLFxuICAgICAgICB0eDogJzB4MTIzNDU2c2lnbmVkJyxcbiAgICAgICAgc3RhdHVzOiAnc2lnbmVkJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vY2sgdGhlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIEFQSVxuICAgICAgY29uc3QgZXRoVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0udXJpO1xuICAgICAgbm9jayhldGhVcmwpLnBvc3QoYC9hcGkvdjIvJHtjb2lufS93YWxsZXQvJHt3YWxsZXRJZH0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKS5yZXBseSgyMDAsIGV4cGVjdGVkQXBwcm92YWxCdWlsZCk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIGdldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZSBtZXRob2RcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVzb2x2ZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdrZXlpZDEnLFxuICAgICAgICAgIHB1YjogJ3B1YjEnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZFBydicsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgLy8gTW9jayB0aGUgc2lnbiB0cmFuc2FjdGlvbiBtZXRob2RcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnc2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoZXhwZWN0ZWRTaWduZWRUeCk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHNlbmQgdHJhbnNhY3Rpb24gbWV0aG9kXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ3NlbmRUcmFuc2FjdGlvbicpLnJlc29sdmVzKGV4cGVjdGVkU2VuZFJlc3VsdCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpO1xuXG4gICAgICBzaG91bGQuZXhpc3QocmVzdWx0KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkU2VuZFJlc3VsdCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gc2lnblRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzaWduUGFyYW1zID0gd2FsbGV0LnNpZ25UcmFuc2FjdGlvbi5maXJzdENhbGwuYXJnc1swXTtcbiAgICAgIHNpZ25QYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4UHJlYnVpbGQnLCBleHBlY3RlZEFwcHJvdmFsQnVpbGQpO1xuICAgICAgc2lnblBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nKTtcbiAgICAgIHNpZ25QYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3dhbGxldFBhc3NwaHJhc2UnLCB3YWxsZXRQYXNzcGhyYXNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIEFQSSBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Bhc3N3b3JkMTIzJztcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICd0b2tlbiBhcHByb3ZhbCBidWlsZCBmYWlsZWQnO1xuXG4gICAgICAvLyBNb2NrIHRoZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUEkgdG8gcmV0dXJuIGFuIGVycm9yXG4gICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7Y29pbn0vd2FsbGV0LyR7d2FsbGV0SWR9L3Rva2VuL2FwcHJvdmFsL2J1aWxkYCkucmVwbHlXaXRoRXJyb3IoZXJyb3JNZXNzYWdlKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmFwcHJvdmVFcmMyMFRva2VuKHdhbGxldFBhc3NwaHJhc2UsIHRva2VuTmFtZSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChlcnJvck1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgd2FsbGV0IHBhc3NwaHJhc2UgdmFsaWRhdGlvbiBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3dyb25nLXBhc3N3b3JkJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkQXBwcm92YWxCdWlsZCA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMzQ1NicsXG4gICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vY2sgdGhlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIEFQSVxuICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi8ke2NvaW59L3dhbGxldC8ke3dhbGxldElkfS90b2tlbi9hcHByb3ZhbC9idWlsZGApLnJlcGx5KDIwMCwgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkKTtcblxuICAgICAgLy8gTW9jayB0aGUgZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlIG1ldGhvZCB0byB0aHJvdyBhbiBlcnJvclxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ3VuYWJsZSB0byBkZWNyeXB0IGtleWNoYWluIHdpdGggdGhlIGdpdmVuIHdhbGxldCBwYXNzcGhyYXNlJyk7XG4gICAgICBlcnJvci5uYW1lID0gJ3dhbGxldF9wYXNzcGhyYXNlX2luY29ycmVjdCc7XG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlamVjdHMoZXJyb3IpO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmFwcHJvdmVFcmMyMFRva2VuKHdhbGxldFBhc3NwaHJhc2UsIHRva2VuTmFtZSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3VuYWJsZSB0byBkZWNyeXB0IGtleWNoYWluIHdpdGggdGhlIGdpdmVuIHdhbGxldCBwYXNzcGhyYXNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBzaWduaW5nIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAncGFzc3dvcmQxMjMnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzNDU2JyxcbiAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNpZ25pbmdFcnJvciA9IG5ldyBFcnJvcignc2lnbmluZyBmYWlsZWQnKTtcblxuICAgICAgLy8gTW9jayB0aGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgQVBJXG4gICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7Y29pbn0vd2FsbGV0LyR7d2FsbGV0SWR9L3Rva2VuL2FwcHJvdmFsL2J1aWxkYCkucmVwbHkoMjAwLCBleHBlY3RlZEFwcHJvdmFsQnVpbGQpO1xuXG4gICAgICAvLyBNb2NrIHRoZSBnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UgbWV0aG9kXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlc29sdmVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAna2V5aWQxJyxcbiAgICAgICAgICBwdWI6ICdwdWIxJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWRQcnYnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHNpZ24gdHJhbnNhY3Rpb24gbWV0aG9kIHRvIHRocm93IGFuIGVycm9yXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlamVjdHMoc2lnbmluZ0Vycm9yKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmFwcHJvdmVFcmMyMFRva2VuKHdhbGxldFBhc3NwaHJhc2UsIHRva2VuTmFtZSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChzaWduaW5nRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2VuZCB0cmFuc2FjdGlvbiBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Bhc3N3b3JkMTIzJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkQXBwcm92YWxCdWlsZCA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMzQ1NicsXG4gICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFNpZ25lZFR4ID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzNDU2c2lnbmVkJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZW5kRXJyb3IgPSBuZXcgRXJyb3IoJ3NlbmQgZmFpbGVkJyk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIEFQSVxuICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi8ke2NvaW59L3dhbGxldC8ke3dhbGxldElkfS90b2tlbi9hcHByb3ZhbC9idWlsZGApLnJlcGx5KDIwMCwgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkKTtcblxuICAgICAgLy8gTW9jayB0aGUgZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlIG1ldGhvZFxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UnKS5yZXNvbHZlcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2tleWlkMScsXG4gICAgICAgICAgcHViOiAncHViMScsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkUHJ2JyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICAvLyBNb2NrIHRoZSBzaWduIHRyYW5zYWN0aW9uIG1ldGhvZFxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdzaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhleHBlY3RlZFNpZ25lZFR4KTtcblxuICAgICAgLy8gTW9jayB0aGUgc2VuZCB0cmFuc2FjdGlvbiBtZXRob2QgdG8gdGhyb3cgYW4gZXJyb3JcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnc2VuZFRyYW5zYWN0aW9uJykucmVqZWN0cyhzZW5kRXJyb3IpO1xuXG4gICAgICBhd2FpdCB3YWxsZXQuYXBwcm92ZUVyYzIwVG9rZW4od2FsbGV0UGFzc3BocmFzZSwgdG9rZW5OYW1lKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHNlbmRFcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBbW91bnQgVmFsaWRhdGlvbiBmb3Igc2VuZENvaW5zJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB3YWxsZXQ7XG4gICAgbGV0IHBhcmFtcztcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKTtcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgfSk7XG4gICAgICBwYXJhbXMgPSB7XG4gICAgICAgIGFkZHJlc3M6ICcyTjRYejRpdENkS0tVUkVpeXRFSjFLR1BvRW5LSG1KVUl3cScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICd0ZXN0MTIzJyxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBkZWNpbWFsIGFtb3VudHMgaW4gc2VuZCBjb2lucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBhcmFtcy5hbW91bnQgPSAxNTAwMDAwMDAuNTU7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuc2VuZChwYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBJbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvIG9yIG51bWVyaWMgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBuZWdhdGl2ZSBhbW91bnQgaW4gc2VuZCBjb2lucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBhcmFtcy5hbW91bnQgPSAnLTEyJztcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5zZW5kKHBhcmFtcylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgYXJndW1lbnQgZm9yIGFtb3VudCAtIEludGVnZXIgZ3JlYXRlciB0aGFuIHplcm8gb3IgbnVtZXJpYyBzdHJpbmcgZXhwZWN0ZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHplcm8gaW4gc2VuZCBjb2lucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBhcmFtcy5hbW91bnQgPSAnMCc7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuc2VuZChwYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBJbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvIG9yIG51bWVyaWMgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUb2tlbiBBcHByb3ZhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZXRoV2FsbGV0O1xuICAgIGNvbnN0IHRva2VuTmFtZSA9ICd1c2RjJztcbiAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3RfcGFzc3BocmFzZSc7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBhcHByb3ZlIEVSQzIwIHRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja1Rva2VuQXBwcm92YWxCdWlsZCA9IHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiAnMHgxMjM0NTY3ODkwYWJjZGVmJyxcbiAgICAgICAgICB0eEluZm86IHtcbiAgICAgICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgICAgIGdhc0xpbWl0OiA2MDAwMCxcbiAgICAgICAgICAgIG5vbmNlOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgdG9rZW5OYW1lOiB0b2tlbk5hbWUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrU2lnbmVkVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgIHR4SGV4OiAnMHhhYmNkZWYxMjM0NTY3ODkwJyxcbiAgICAgICAgaGFsZlNpZ25lZDoge1xuICAgICAgICAgIHR4SGV4OiAnMHhhYmNkZWYxMjM0NTY3ODkwJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tTZW50VHJhbnNhY3Rpb24gPSB7XG4gICAgICAgIGhhc2g6ICcweDk4NzY1NDMyMTBmZWRjYmEnLFxuICAgICAgICBzdGF0dXM6ICdzaWduZWQnLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgZW5kcG9pbnRcbiAgICAgIGNvbnN0IGJ1aWxkU2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi90ZXRoL3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS90b2tlbi9hcHByb3ZhbC9idWlsZGApXG4gICAgICAgIC5yZXBseSgyMDAsIG1vY2tUb2tlbkFwcHJvdmFsQnVpbGQpO1xuXG4gICAgICAvLyBNb2NrIGdldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZVxuICAgICAgc2lub24uc3R1YihldGhXYWxsZXQsICdnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UnKS5yZXNvbHZlcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICBwcnY6ICd0ZXN0X3ByaXZhdGVfa2V5JyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICAvLyBNb2NrIHNpZ25UcmFuc2FjdGlvblxuICAgICAgc2lub24uc3R1YihldGhXYWxsZXQsICdzaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhtb2NrU2lnbmVkVHJhbnNhY3Rpb24pO1xuXG4gICAgICAvLyBNb2NrIHNlbmRUcmFuc2FjdGlvblxuICAgICAgc2lub24uc3R1YihldGhXYWxsZXQsICdzZW5kVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhtb2NrU2VudFRyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXRoV2FsbGV0LmFwcHJvdmVFcmMyMFRva2VuKHdhbGxldFBhc3NwaHJhc2UsIHRva2VuTmFtZSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwobW9ja1NlbnRUcmFuc2FjdGlvbik7XG4gICAgICBidWlsZFNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBmYWlsdXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRTY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3RldGgvd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L3Rva2VuL2FwcHJvdmFsL2J1aWxkYClcbiAgICAgICAgLnJlcGx5KDQwMCwgeyBlcnJvcjogJ0ludmFsaWQgdG9rZW4gbmFtZScgfSk7XG5cbiAgICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVzb2x2ZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgcHJ2OiAndGVzdF9wcml2YXRlX2tleScsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0LmFwcHJvdmVFcmMyMFRva2VuKHdhbGxldFBhc3NwaHJhc2UsICdpbnZhbGlkX3Rva2VuJykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0b2tlbiBuYW1lJyk7XG5cbiAgICAgIGJ1aWxkU2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcmVxdWlyZWQgcGFyYW1ldGVycyBmb3IgYXBwcm92ZUVyYzIwVG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBldGhXYWxsZXQuYXBwcm92ZUVyYzIwVG9rZW4oJycsIHRva2VuTmFtZSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NvbGFuYSBJbnN0cnVjdGlvbiBGbG93JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICAvLyBTZXQgdXAgdGVzdCBkYXRhIGFuZCB3YWxsZXRzXG4gICAgY29uc3QgdHNvbCA9IGJpdGdvLmNvaW4oJ3Rzb2wnKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsXG4gICAgICBjb2luOiAndHNvbCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGNvbnN0IHRzc1NvbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRzb2wsIHdhbGxldERhdGEpO1xuICAgIGNvbnN0IGN1c3RvZGlhbFRzc1NvbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRzb2wsIHtcbiAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICB0eXBlOiAnY3VzdG9kaWFsJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICB9LFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IGZhbHNlLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBzaWduYWJsZUhleDogJ2RlYWRiZWVmJyxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlc3RDdXN0b21JbnN0cnVjdGlvbiA9IHtcbiAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHB1YmtleTogJ0RmWHlnU200akN5TkN5YlZZWUs2RHd2V3FqS2VlOHBiRG1KR2NMV05EWGpoJyxcbiAgICAgICAgICBpc1NpZ25lcjogdHJ1ZSxcbiAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHVia2V5OiAnRXM5dk1GcnphQ0VSbUpmckY0SDJGWUQ0S0NvTmtZMTFNY0NlOEJlbndOWUInLFxuICAgICAgICAgIGlzU2lnbmVyOiBmYWxzZSxcbiAgICAgICAgICBpc1dyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBkYXRhOiAnM0J4czN6dDZLSzVoTicsXG4gICAgfTtcblxuICAgIGNvbnN0IHRlc3RSZWNpcGllbnRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiAnRGZYeWdTbTRqQ3lOQ3liVllZSzZEd3ZXcWpLZWU4cGJEbUpHY0xXTkRYamgnLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAwJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGRlc2NyaWJlKCdwcmVidWlsZFRyYW5zYWN0aW9uIHdpdGggc29sSW5zdHJ1Y3Rpb24gdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIGNvcnJlY3QgcGFyYW1ldGVycyBmb3IgY3VzdG9tIGluc3RydWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc29sSW5zdHJ1Y3Rpb24gd2l0aCBlbXB0eSByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIG11bHRpcGxlIGN1c3RvbSBpbnN0cnVjdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNlY29uZEluc3RydWN0aW9uID0ge1xuICAgICAgICAgIHByb2dyYW1JZDogJzIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyJyxcbiAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHB1YmtleTogJ0VzOXZNRnJ6YUNFUm1KZnJGNEgyRllENEtDb05rWTExTWNDZThCZW53TllCJyxcbiAgICAgICAgICAgICAgaXNTaWduZXI6IGZhbHNlLFxuICAgICAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6ICd0ZXN0RGF0YTEyMycsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbiwgc2Vjb25kSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uLCBzZWNvbmRJbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uLCBzZWNvbmRJbnN0cnVjdGlvbl0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHNvbEluc3RydWN0aW9uIHdpdGggbWVtbyBwYXJhbWV0ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHNvbEluc3RydWN0aW9uIHdpdGggcGVuZGluZyBhcHByb3ZhbCBJRCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3QsIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJywgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyB9KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgZW1wdHkgc29sSW5zdHJ1Y3Rpb25zIGFycmF5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFtdLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgJ3NvbEluc3RydWN0aW9ucycgb3IgJ3NvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YScgaXMgcmVxdWlyZWQgZm9yIGN1c3RvbVR4IGludGVudGApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3VwcG9ydCBzb2xJbnN0cnVjdGlvbiBmb3IgY29sZCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICB0eFJlcXVlc3Qud2FsbGV0VHlwZSA9ICdjb2xkJztcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJlYnVpbGRUcmFuc2FjdGlvbiB3aXRoIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gZ2V0VGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJzaW9uZWRJbnN0cnVjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJvZ3JhbUlkSW5kZXg6IDEwLFxuICAgICAgICAgICAgICBhY2NvdW50S2V5SW5kZXhlczogWzAsIDEsIDJdLFxuICAgICAgICAgICAgICBkYXRhOiAnMDEwMjAzMDQwNScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwcm9ncmFtSWRJbmRleDogMTEsXG4gICAgICAgICAgICAgIGFjY291bnRLZXlJbmRleGVzOiBbMCwgMywgNCwgNV0sXG4gICAgICAgICAgICAgIGRhdGE6ICcwNjA3MDgwOTBhJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhZGRyZXNzTG9va3VwVGFibGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFjY291bnRLZXk6ICcyc2s2YlZoak41M2h6N3NxRTcyZXFIdmhQZlNjMXNuWnpzSlI2eUE1aEY3aicsXG4gICAgICAgICAgICAgIHdyaXRhYmxlSW5kZXhlczogWzAsIDFdLFxuICAgICAgICAgICAgICByZWFkb25seUluZGV4ZXM6IFsyLCAzXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNBY2NvdW50S2V5czogW1xuICAgICAgICAgICAgJzVocjVmaXNQaTZEWE51dVJwbTVYVWJ6cGlFbm1keXhYdUJEVHd6d1pqNVBlJyxcbiAgICAgICAgICAgICcyc2s2YlZoak41M2h6N3NxRTcyZXFIdmhQZlNjMXNuWnpzSlI2eUE1aEY3aicsXG4gICAgICAgICAgICAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgbWVzc2FnZUhlYWRlcjoge1xuICAgICAgICAgICAgbnVtUmVxdWlyZWRTaWduYXR1cmVzOiAxLFxuICAgICAgICAgICAgbnVtUmVhZG9ubHlTaWduZWRBY2NvdW50czogMCxcbiAgICAgICAgICAgIG51bVJlYWRvbmx5VW5zaWduZWRBY2NvdW50czogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnMgZm9yIHZlcnNpb25lZCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSA9IGdldFRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKTtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSB3aXRoIGVtcHR5IHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgPSBnZXRUZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHdpdGggbWVtbyBwYXJhbWV0ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgPSBnZXRUZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSB3aXRoIHBlbmRpbmcgYXBwcm92YWwgSUQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgPSBnZXRUZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHsgLi4udHhSZXF1ZXN0LCBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcgfSk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGVtcHR5IHZlcnNpb25lZEluc3RydWN0aW9ucyBhcnJheScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB7XG4gICAgICAgICAgICAgIHZlcnNpb25lZEluc3RydWN0aW9uczogW10sXG4gICAgICAgICAgICAgIGFkZHJlc3NMb29rdXBUYWJsZXM6IFtdLFxuICAgICAgICAgICAgICBzdGF0aWNBY2NvdW50S2V5czogWyd0ZXN0J10sXG4gICAgICAgICAgICAgIG1lc3NhZ2VIZWFkZXI6IHsgbnVtUmVxdWlyZWRTaWduYXR1cmVzOiAxLCBudW1SZWFkb25seVNpZ25lZEFjY291bnRzOiAwLCBudW1SZWFkb25seVVuc2lnbmVkQWNjb3VudHM6IDAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGAnc29sSW5zdHJ1Y3Rpb25zJyBvciAnc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhJyBpcyByZXF1aXJlZCBmb3IgY3VzdG9tVHggaW50ZW50YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FwdG9zIEN1c3RvbSB0cmFuc2FjdGlvbiBGbG93JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICAvLyBTZXQgdXAgdGVzdCBkYXRhIGFuZCB3YWxsZXRzXG4gICAgY29uc3QgdGFwdCA9IGJpdGdvLmNvaW4oJ3RhcHQnKTtcbiAgICBjb25zdCBhcHRvc1dhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAxJyxcbiAgICAgIGNvaW46ICd0YXB0JyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMzJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQzJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ4JyxcbiAgICAgIF0sXG4gICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgY29uc3QgdHNzQXB0b3NXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0YXB0LCBhcHRvc1dhbGxldERhdGEpO1xuICAgIGNvbnN0IGN1c3RvZGlhbFRzc0FwdG9zV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGFwdCwge1xuICAgICAgLi4uYXB0b3NXYWxsZXREYXRhLFxuICAgICAgdHlwZTogJ2N1c3RvZGlhbCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG5cbiAgICBjb25zdCBhcHRvc1R4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICB9LFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IGZhbHNlLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgc2lnbmFibGVIZXg6ICdhcHRvc2RlYWRiZWVmJyxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDEwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCA9IHtcbiAgICAgIG1vZHVsZU5hbWU6ICcweDE6OmNvaW4nLFxuICAgICAgZnVuY3Rpb25OYW1lOiAndHJhbnNmZXInLFxuICAgICAgdHlwZUFyZ3VtZW50czogWycweDE6OmFwdG9zX2NvaW46OkFwdG9zQ29pbiddLFxuICAgICAgZnVuY3Rpb25Bcmd1bWVudHM6IFsnMHg3NDJkMzVDYzY2MzRDMDUzMjkyNWEzYjhENDAwRTY1QUFEODAxYzBiJywgJzEwMDAwMDAnXSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGVzdEFwdG9zUmVjaXBpZW50cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogJzB4NzQyZDM1Q2M2NjM0QzA1MzI5MjVhM2I4RDQwMEU2NUFBRDgwMWMwYicsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMDAnLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgZGVzY3JpYmUoJ3ByZWJ1aWxkVHJhbnNhY3Rpb24gd2l0aCBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBzbWFydCBjb250cmFjdCBjYWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyhhcHRvc1R4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgYXB0b3NDdXN0b21UcmFuc2FjdGlvbiB3aXRoIGVtcHR5IHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKGFwdG9zVHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NBcHRvc1dhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzQXB0b3NXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICAgICAgdHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgY3VzdG9tIHNtYXJ0IGNvbnRyYWN0IGNhbGwgd2l0aCB0eXBlIGFyZ3VtZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudENyZWF0aW9uQ2FsbCA9IHtcbiAgICAgICAgICBtb2R1bGVOYW1lOiAnMHgxOjphcHRvc19hY2NvdW50JyxcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6ICdjcmVhdGVfYWNjb3VudCcsXG4gICAgICAgICAgdHlwZUFyZ3VtZW50czogW10sXG4gICAgICAgICAgZnVuY3Rpb25Bcmd1bWVudHM6IFsnMHgxMjNkZWY0NTZhYmM3ODlmZWQwMTIzNDVhYmNkZWY2Nzg5MCddLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKGFwdG9zVHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGFjY291bnRDcmVhdGlvbkNhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogYWNjb3VudENyZWF0aW9uQ2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NBcHRvc1dhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzQXB0b3NXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICAgICAgdHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogYWNjb3VudENyZWF0aW9uQ2FsbCxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDEwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uIHdpdGggQUJJIGluZm9ybWF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjdXN0b21DYWxsV2l0aEFiaSA9IHtcbiAgICAgICAgICAuLi50ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgYWJpOiB7XG4gICAgICAgICAgICBuYW1lOiAndHJhbnNmZXInLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogJ3B1YmxpYycsXG4gICAgICAgICAgICBpc19lbnRyeTogdHJ1ZSxcbiAgICAgICAgICAgIGdlbmVyaWNfdHlwZV9wYXJhbXM6IFtdLFxuICAgICAgICAgICAgcGFyYW1zOiBbJ2FkZHJlc3MnLCAndTY0J10sXG4gICAgICAgICAgICByZXR1cm46IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoYXB0b3NUeFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogY3VzdG9tQ2FsbFdpdGhBYmksXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogY3VzdG9tQ2FsbFdpdGhBYmksXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzQXB0b3NXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc0FwdG9zV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGN1c3RvbUNhbGxXaXRoQWJpLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb24gd2l0aCBwZW5kaW5nIGFwcHJvdmFsIElEJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh7XG4gICAgICAgICAgLi4uYXB0b3NUeFJlcXVlc3QsXG4gICAgICAgICAgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLFxuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiAnYXB0b3MtYXBwcm92YWwtaWQnLFxuICAgICAgICB9KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogY3VzdG9kaWFsVHNzQXB0b3NXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IGN1c3RvZGlhbFRzc0FwdG9zV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ2FwdG9zLWFwcHJvdmFsLWlkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDEwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBtaXNzaW5nIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc0FwdG9zV2FsbGV0XG4gICAgICAgICAgLnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGAnYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtcycgaXMgYSByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yIGN1c3RvbVR4IGludGVudGApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3VwcG9ydCBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uIGZvciBjb2xkIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIGFwdG9zVHhSZXF1ZXN0LndhbGxldFR5cGUgPSAnY29sZCc7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKGFwdG9zVHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzQXB0b3NXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc0FwdG9zV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDEwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc3RhbmRhcmQgQXB0b3MgdHJhbnNmZXIgd2l0aG91dCBicmVha2luZyBjdXN0b20gZnVuY3Rpb25hbGl0eScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc3RhbmRhcmRUcmFuc2ZlclJlcXVlc3QgPSB7XG4gICAgICAgICAgLi4uYXB0b3NUeFJlcXVlc3QsXG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyhzdGFuZGFyZFRyYW5zZmVyUmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zIHN0cnVjdHVyZSBmb3Igc21hcnQgY29udHJhY3QgY2FsbHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGludmFsaWRQYXJhbXMgPSB7XG4gICAgICAgICAgbW9kdWxlTmFtZTogJzB4MTo6Y29pbicsXG4gICAgICAgICAgLy8gTWlzc2luZyByZXF1aXJlZCBmdW5jdGlvbk5hbWVcbiAgICAgICAgICB0eXBlQXJndW1lbnRzOiBbJzB4MTo6YXB0b3NfY29pbjo6QXB0b3NDb2luJ10sXG4gICAgICAgICAgZnVuY3Rpb25Bcmd1bWVudHM6IFsnMHg3NDJkMzVDYzY2MzRDMDUzMjkyNWEzYjhENDAwRTY1QUFEODAxYzBiJywgJzEwMDAwMDAnXSxcbiAgICAgICAgfSBhcyBhbnk7IC8vIFR5cGUgYXNzZXJ0aW9uIHRvIHRlc3QgaW52YWxpZCBwYXJhbXNcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZWplY3RzKG5ldyBFcnJvcignRnVuY3Rpb24gbmFtZSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGludmFsaWRQYXJhbXMsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcHJvbWlzZSB0byBiZSByZWplY3RlZCcpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKCdGdW5jdGlvbiBuYW1lIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzZXF1ZW5jZUlkOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tbWVudDogdW5kZWZpbmVkLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogdW5kZWZpbmVkLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGludmFsaWRQYXJhbXMsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICBub25jZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGZlZU9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VwZ3JhZGVFbmNyeXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHdhbGxldElkID0gd2FsbGV0RGF0YS5pZDtcbiAgICBjb25zdCBbdXNlcktleUlkLCBiYWNrdXBLZXlJZCwgYml0Z29LZXlJZF0gPSB3YWxsZXREYXRhLmtleXM7XG4gICAgY29uc3QgcGFzc3BocmFzZSA9ICd3YWxsZXRQYXNzcGhyYXNlJztcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFByZXZlbnQgbGVmdG92ZXIgaW50ZXJjZXB0b3JzIGZyb20gYmxlZWRpbmcgaW50byBvdGhlciBzdWl0ZXMgaW4gdGhlIGZpbGUuXG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBub2NrVW5sb2NrKHRpbWVzID0gMSkge1xuICAgICAgcmV0dXJuIG5vY2soYmdVcmwpLnBvc3QoJy9hcGkvdjEvdXNlci91bmxvY2snKS50aW1lcyh0aW1lcykucmVwbHkoMjAwLCB7fSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ja0tleWNoYWluKGlkOiBzdHJpbmcsIGtleWNoYWluOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgICAgcmV0dXJuIG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHtpZH1gKVxuICAgICAgICAucmVwbHkoMjAwLCB7IGlkLCBwdWI6ICdwdWInLCB0eXBlOiAnaW5kZXBlbmRlbnQnLCAuLi5rZXljaGFpbiB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub2NrUGVjRmV0Y2gocGVjOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi90YnRjL3dhbGxldC8ke3dhbGxldElkfS9wYXNzY29kZXJlY292ZXJ5YClcbiAgICAgICAgLnJlcGx5KDIwMCwgeyByZWNvdmVyeUluZm86IHsgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogcGVjIH0gfSk7XG4gICAgfVxuXG4gICAgaXQoJ3JlLWVuY3J5cHRzIGJvdGggdXNlciBhbmQgYmFja3VwIGtleXMgYW5kIFBVVHMgdGhlbSBhcyB2MicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJFbmMgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgYmFja3VwRW5jID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJFbmMgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBFbmMgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG5cbiAgICAgIGNvbnN0IHB1dHM6IEFycmF5PHsgdXJsOiBzdHJpbmc7IGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+ID0gW107XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucHV0KGAvYXBpL3YyL3RidGMva2V5LyR7dXNlcktleUlkfWAsIChib2R5KSA9PiB7XG4gICAgICAgICAgcHV0cy5wdXNoKHsgdXJsOiB1c2VyS2V5SWQsIGJvZHkgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wdXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHtiYWNrdXBLZXlJZH1gLCAoYm9keSkgPT4ge1xuICAgICAgICAgIHB1dHMucHVzaCh7IHVybDogYmFja3VwS2V5SWQsIGJvZHkgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYy14eXonIH0pO1xuXG4gICAgICBhc3NlcnQub2socmVzdWx0ID09PSB1bmRlZmluZWQsICdubyBQREYgZ2VuZXJhdG9yIOKGkiByZXR1cm5zIHVuZGVmaW5lZCcpO1xuICAgICAgcHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgICBjb25zdCB1c2VyUHV0ID0gcHV0cy5maW5kKChwKSA9PiBwLnVybCA9PT0gdXNlcktleUlkKSE7XG4gICAgICBKU09OLnBhcnNlKHVzZXJQdXQuYm9keS5lbmNyeXB0ZWRQcnYgYXMgc3RyaW5nKS52LnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIEpTT04ucGFyc2UodXNlclB1dC5ib2R5Lm9yaWdpbmFsRW5jcnlwdGVkUHJ2IGFzIHN0cmluZykudi5zaG91bGQuZXF1YWwoMik7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gbmVpdGhlciBwYXNzcGhyYXNlIG5vciBib3hEIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHt9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9wYXNzcGhyYXNlLipib3hELyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIGZvciBhbiBNUEN2MiB3YWxsZXQgd2hlbiBib3hBIG9yIGJveEIgYXJlIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtcGNXYWxsZXREYXRhID0geyAuLi53YWxsZXREYXRhLCBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInIGFzIGNvbnN0IH07XG4gICAgICBjb25zdCBtcGNXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgbXBjV2FsbGV0RGF0YSk7XG5cbiAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgIC8vIFBFQyBmZXRjaCBoYXBwZW5zIGJlZm9yZSB0aGUgTVBDdjIgdmFsaWRhdGlvbiBzaG9ydC1jaXJjdWl0cyDigJQgYWxsb3cgdGhlIGNhbGwgdG8gbm9vcFxuICAgICAgbm9ja1BlY0ZldGNoKCdwZWMnKTtcblxuICAgICAgYXdhaXQgbXBjV2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvTVBDdjIvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZS1lbmNyeXB0cyBib3hBIGFuZCBib3hCIGFzIHJlZHVjZWRFbmNyeXB0ZWRQcnYgb24gdGhlIGtleWNoYWlucyBmb3IgTVBDdjIgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1wY1dhbGxldERhdGEgPSB7IC4uLndhbGxldERhdGEsIG11bHRpc2lnVHlwZVZlcnNpb246ICdNUEN2MicgYXMgY29uc3QgfTtcbiAgICAgIGNvbnN0IG1wY1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCBtcGNXYWxsZXREYXRhKTtcbiAgICAgIGNvbnN0IHVzZXJFbmMgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgYmFja3VwRW5jID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgYm94QSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJSZWR1Y2VkUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgYm94QiA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFJlZHVjZWRQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgIG5vY2tLZXljaGFpbih1c2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlckVuYyB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnLCBlbmNyeXB0ZWRQcnY6IGJhY2t1cEVuYyB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChgL2FwaS92Mi90YnRjL2tleS8ke3VzZXJLZXlJZH1gKS5yZXBseSgyMDAsIHt9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChgL2FwaS92Mi90YnRjL2tleS8ke2JhY2t1cEtleUlkfWApLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCBjYXB0dXJlZFBkZlBhcmFtczogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gW107XG4gICAgICBjb25zdCBnZW5lcmF0ZVBkZiA9IGFzeW5jIChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICAgIGNhcHR1cmVkUGRmUGFyYW1zLnB1c2gocGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHsgb3V0cHV0OiAoKSA9PiBuZXcgQXJyYXlCdWZmZXIoMCkgfTtcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IG1wY1dhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7XG4gICAgICAgIHBhc3NwaHJhc2UsXG4gICAgICAgIGJveEEsXG4gICAgICAgIGJveEIsXG4gICAgICAgIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnLFxuICAgICAgICBnZW5lcmF0ZVBkZixcbiAgICAgIH0pO1xuXG4gICAgICBjYXB0dXJlZFBkZlBhcmFtcy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBjb25zdCB7IHVzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4gfSA9IGNhcHR1cmVkUGRmUGFyYW1zWzBdIGFzIHtcbiAgICAgICAgdXNlcktleWNoYWluOiB7IHJlZHVjZWRFbmNyeXB0ZWRQcnY/OiBzdHJpbmcgfTtcbiAgICAgICAgYmFja3VwS2V5Y2hhaW46IHsgcmVkdWNlZEVuY3J5cHRlZFBydj86IHN0cmluZyB9O1xuICAgICAgfTtcbiAgICAgIGFzc2VydC5vayh1c2VyS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydiwgJ3VzZXIgcmVkdWNlZEVuY3J5cHRlZFBydiBtdXN0IGJlIHNldCcpO1xuICAgICAgSlNPTi5wYXJzZSh1c2VyS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydiEpLnYuc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgYXNzZXJ0Lm9rKGJhY2t1cEtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYsICdiYWNrdXAgcmVkdWNlZEVuY3J5cHRlZFBydiBtdXN0IGJlIHNldCcpO1xuICAgICAgSlNPTi5wYXJzZShiYWNrdXBLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2ISkudi5zaG91bGQuZXF1YWwoMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2tpcHMga2V5Y2hhaW5zIHRoYXQgYXJlIGFscmVhZHkgdjInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyVjIgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAyIH0pO1xuICAgICAgY29uc3QgYmFja3VwVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgIG5vY2tLZXljaGFpbih1c2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlclYyIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcsIGVuY3J5cHRlZFBydjogYmFja3VwVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG5cbiAgICAgIGNvbnN0IHB1dHM6IHN0cmluZ1tdID0gW107XG4gICAgICAvLyBPbmx5IHRoZSBiYWNrdXAga2V5IHNob3VsZCBiZSBQVVQg4oCUIHVzZXIgaXMgYWxyZWFkeSB2Mi5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wdXQobmV3IFJlZ0V4cChgL2FwaS92Mi90YnRjL2tleS8oJHt1c2VyS2V5SWR9fCR7YmFja3VwS2V5SWR9KWApKVxuICAgICAgICAucmVwbHkoMjAwLCBmdW5jdGlvbiAodXJpKSB7XG4gICAgICAgICAgcHV0cy5wdXNoKHVyaSk7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycgfSk7XG5cbiAgICAgIHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgcHV0c1swXS5zaG91bGQuY29udGFpbkVxbChiYWNrdXBLZXlJZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBiYWNrdXAga2V5Y2hhaW4gd2l0aCBubyBlbmNyeXB0ZWRQcnYgKHB1YmxpYy1rZXktb25seSkgd2l0aG91dCBQVVRpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnIH0pOyAvLyBwdWJsaWMga2V5IG9ubHlcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChgL2FwaS92Mi90YnRjL2tleS8ke3VzZXJLZXlJZH1gKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycgfSk7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGhlcmUgd2l0aG91dCB1bmhhbmRsZWQgbm9jayBlcnJvciwgdGhlIGZsb3cgY29tcGxldGVkIHdpdGhvdXQgUFVUaW5nIHRoZSBiYWNrdXAuXG4gICAgfSk7XG5cbiAgICBpdCgncmUtZW5jcnlwdHMgYSBiYWNrdXAga2V5IGZyb20gYm94QiB3aXRob3V0IFBVVGluZyB0byB0aGUgc2VydmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJveEIgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgIG5vY2tLZXljaGFpbih1c2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlclYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcgfSk7IC8vIG5vIGVuY3J5cHRlZFBydiBzZXJ2ZXItc2lkZVxuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuICAgICAgbm9jayhiZ1VybCkucHV0KGAvYXBpL3YyL3RidGMva2V5LyR7dXNlcktleUlkfWApLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBib3hCLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZXJpdmVzIHRoZSBwYXNzcGhyYXNlIGZyb20gYm94RCB3aGVuIHBhc3NwaHJhc2UgaXMgb21pdHRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBlYyA9ICdwZWMtZGVyaXZlJztcbiAgICAgIGNvbnN0IGRlcml2ZWRQYXNzID0gJ2Rlcml2ZWRGcm9tQm94RCc7XG4gICAgICBjb25zdCBib3hEID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiBkZXJpdmVkUGFzcywgcGFzc3dvcmQ6IHBlYywgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCB1c2VyVjEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IGRlcml2ZWRQYXNzLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cFYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IGRlcml2ZWRQYXNzLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgbm9ja1BlY0ZldGNoKHBlYyk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnLCBlbmNyeXB0ZWRQcnY6IGJhY2t1cFYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuICAgICAgbm9jayhiZ1VybCkucHV0KG5ldyBSZWdFeHAoYC9hcGkvdjIvdGJ0Yy9rZXkvYCkpLnR3aWNlKCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIC8vIE5vIHBhc3NwaHJhc2Ug4oCUIG11c3QgYmUgZGVyaXZlZCBmcm9tIGJveEQuXG4gICAgICBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBib3hEIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21ha2VzIG5vIFBVVCBjYWxscyBpbiBkcnktcnVuIG1vZGUgYW5kIHJldHVybnMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cFYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICAvLyBObyB1bmxvY2ssIG5vIFBFQywgbm8gUFVUcyBleHBlY3RlZC5cbiAgICAgIG5vY2tLZXljaGFpbih1c2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlclYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcsIGVuY3J5cHRlZFBydjogYmFja3VwVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIGRyeVJ1bjogdHJ1ZSB9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gdW5sb2NrIHJlamVjdHMgd2l0aCBhbiBlcnJvciB1bnJlbGF0ZWQgdG8gc2Vzc2lvbiBkdXJhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoJy9hcGkvdjEvdXNlci91bmxvY2snKS5yZXBseVdpdGhFcnJvcignaW52YWxpZCBPVFAnKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9pbnZhbGlkIE9UUC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Byb2NlZWRzIHdoZW4gdW5sb2NrIHJlcG9ydHMgXCJhbHJlYWR5IHVubG9ja2VkIGxvbmdlclwiJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cFYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5wb3N0KCcvYXBpL3YxL3VzZXIvdW5sb2NrJykucmVwbHkoNDAxLCB7IGVycm9yOiAnU2Vzc2lvbiBhbHJlYWR5IHVubG9ja2VkIGxvbmdlcicgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnLCBlbmNyeXB0ZWRQcnY6IGJhY2t1cFYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuICAgICAgbm9jayhiZ1VybCkucHV0KG5ldyBSZWdFeHAoYC9hcGkvdjIvdGJ0Yy9rZXkvYCkpLnR3aWNlKCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VzZXMgdGhlIHN1cHBsaWVkIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUgYW5kIHNraXBzIHRoZSBwYXNzY29kZXJlY292ZXJ5IGZldGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cFYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGRvIE5PVCBub2NrIHBhc3Njb2RlcmVjb3Zlcnkg4oCUIHRoZSB0ZXN0IGZhaWxzIGlmIHRoZSBjb2RlIHRyaWVzIHRvIGNhbGwgaXQuXG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnLCBlbmNyeXB0ZWRQcnY6IGJhY2t1cFYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuICAgICAgbm9jayhiZ1VybCkucHV0KG5ldyBSZWdFeHAoYC9hcGkvdjIvdGJ0Yy9rZXkvYCkpLnR3aWNlKCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMtc3VwcGxpZWQnIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ09GQyB3YWxsZXRzICgyIGtleXMsIG5vIGJhY2t1cCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvZmNDb2luID0gYml0Z28uY29pbignb2ZjJyk7XG4gICAgICBjb25zdCBvZmNVc2VyS2V5SWQgPSAnb2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnO1xuICAgICAgY29uc3Qgb2ZjQml0Z29LZXlJZCA9ICdvZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMic7XG4gICAgICBjb25zdCBvZmNXYWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJ29mYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDB3YWxsZXQxJyxcbiAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgIGtleXM6IFtvZmNVc2VyS2V5SWQsIG9mY0JpdGdvS2V5SWRdLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyBhcyBjb25zdCxcbiAgICAgICAgdHlwZTogJ2hvdCcgYXMgY29uc3QsXG4gICAgICB9O1xuICAgICAgY29uc3Qgb2ZjV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwgb2ZjV2FsbGV0RGF0YSBhcyBhbnkpO1xuXG4gICAgICBmdW5jdGlvbiBub2NrT2ZjS2V5Y2hhaW4oaWQ6IHN0cmluZywga2V5Y2hhaW46IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgICAgIC5nZXQoYC9hcGkvdjIvb2ZjL2tleS8ke2lkfWApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgeyBpZCwgcHViOiAncHViJywgdHlwZTogJ2luZGVwZW5kZW50JywgLi4ua2V5Y2hhaW4gfSk7XG4gICAgICB9XG5cbiAgICAgIGl0KCdyZS1lbmNyeXB0cyB0aGUgdXNlciBrZXkgYW5kIHNraXBzIGJpdGdvIGtleSB3aXRoIG5vIGVuY3J5cHRlZFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdXNlckVuYyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgICBub2NrT2ZjS2V5Y2hhaW4ob2ZjVXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJFbmMgfSk7XG4gICAgICAgIG5vY2tPZmNLZXljaGFpbihvZmNCaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcblxuICAgICAgICBjb25zdCBwdXRzOiBBcnJheTx7IGlkOiBzdHJpbmc7IGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+ID0gW107XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLnB1dChgL2FwaS92Mi9vZmMva2V5LyR7b2ZjVXNlcktleUlkfWAsIChib2R5KSA9PiB7XG4gICAgICAgICAgICBwdXRzLnB1c2goeyBpZDogb2ZjVXNlcktleUlkLCBib2R5IH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb2ZjV2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycgfSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgICAgIHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgICBwdXRzWzBdLmlkLnNob3VsZC5lcXVhbChvZmNVc2VyS2V5SWQpO1xuICAgICAgICBKU09OLnBhcnNlKHB1dHNbMF0uYm9keS5lbmNyeXB0ZWRQcnYgYXMgc3RyaW5nKS52LnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2tpcHMgdXNlciBrZXkgYWxyZWFkeSBhdCB2MicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdXNlclYyID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KTtcblxuICAgICAgICBub2NrVW5sb2NrKCk7XG4gICAgICAgIG5vY2tPZmNLZXljaGFpbihvZmNVc2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlclYyIH0pO1xuICAgICAgICBub2NrT2ZjS2V5Y2hhaW4ob2ZjQml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG5cbiAgICAgICAgYXdhaXQgb2ZjV2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycgfSk7XG4gICAgICAgIC8vIE5vIFBVVHMgZXhwZWN0ZWQg4oCUIG5vY2sgd2lsbCBlcnJvciBpZiBhbnkgdW5leHBlY3RlZCBjYWxsIGlzIG1hZGUuXG4gICAgICB9KTtcblxuICAgICAgaXQoJ21ha2VzIG5vIFBVVCBjYWxscyBpbiBkcnktcnVuIG1vZGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHVzZXJFbmMgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICAgIG5vY2tPZmNLZXljaGFpbihvZmNVc2VyS2V5SWQsIHsgc291cmNlOiAndXNlcicsIGVuY3J5cHRlZFBydjogdXNlckVuYyB9KTtcbiAgICAgICAgbm9ja09mY0tleWNoYWluKG9mY0JpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9mY1dhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIGRyeVJ1bjogdHJ1ZSB9KTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19