@bitgo/sdk-coin-ton 4.0.7 → 4.1.1

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.
@@ -46,6 +46,7 @@ const sdk_core_1 = require("@bitgo/sdk-core");
46
46
  const should_1 = __importDefault(require("should"));
47
47
  const utils_1 = __importDefault(require("../../src/lib/utils"));
48
48
  const tonweb_1 = __importDefault(require("tonweb"));
49
+ const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
49
50
  describe('TON:', function () {
50
51
  let basecoin;
51
52
  const bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
@@ -644,9 +645,11 @@ describe('TON:', function () {
644
645
  }),
645
646
  };
646
647
  sandbox.stub(tonweb_1.default, 'HttpProvider').returns(mockProvider);
647
- const decryptStub = sandbox.stub(bitgo, 'decrypt');
648
- decryptStub.onFirstCall().resolves(JSON.stringify({ dummy: 'userSigningMaterial' }));
649
- decryptStub.onSecondCall().resolves(JSON.stringify({ dummy: 'backupSigningMaterial' }));
648
+ sandbox.stub(basecoin, 'isMpcV2Keycard').resolves({
649
+ version: 'v1',
650
+ userPrv: JSON.stringify({ dummy: 'userSigningMaterial' }),
651
+ });
652
+ sandbox.stub(bitgo, 'decrypt').resolves(JSON.stringify({ dummy: 'backupSigningMaterial' }));
650
653
  sandbox
651
654
  .stub(sdk_core_1.EDDSAMethods, 'getTSSSignature')
652
655
  .resolves(Buffer.from('1baafa0d62174bf0c78f3256318613ffc44b6dd54ab1a63c2185232f92ede9da' +
@@ -718,6 +721,7 @@ describe('TON:', function () {
718
721
  result.txRequests[0].should.have.property('transactions');
719
722
  result.txRequests[0].transactions[0].should.have.property('unsignedTx');
720
723
  result.txRequests[0].transactions[0].unsignedTx.should.equal(mockUnsignedTx);
724
+ sandbox.restore();
721
725
  });
722
726
  it('should take OVC output and generate a signed sweep transaction', async function () {
723
727
  // Define the parameters (mock OVC response)
@@ -747,6 +751,117 @@ describe('TON:', function () {
747
751
  recoveryTxn.transactions[0].scanIndex.should.equal(0);
748
752
  recoveryTxn.lastScanIndex.should.equal(0);
749
753
  });
754
+ describe('MPCv2 signed recovery', function () {
755
+ const walletPassphrase = 'test-passphrase-mpcv2';
756
+ const recoveryDestination = 'UQBL2idCXR4ATdQtaNa4VpofcpSxuxIgHH7_slOZfdOXSadJ';
757
+ const apiKey = 'db2554641c61e60a979cc6c0053f2ec91da9b13e71d287768c93c2fb556be53b';
758
+ let mpcV2UserKey;
759
+ let mpcV2BackupKey;
760
+ let mpcV2CommonKeyChain;
761
+ let mpcV2WalletAddress;
762
+ let mpcV2RecoverParams;
763
+ let mockProvider;
764
+ before(async function () {
765
+ const [userDkg, backupDkg] = await sdk_lib_mpc_1.MPSUtil.generateEdDsaDKGKeyShares();
766
+ mpcV2CommonKeyChain = userDkg.getCommonKeychain();
767
+ mpcV2UserKey = await (0, sdk_api_1.encrypt)(walletPassphrase, userDkg.getReducedKeyShare().toString('base64'));
768
+ mpcV2BackupKey = await (0, sdk_api_1.encrypt)(walletPassphrase, backupDkg.getReducedKeyShare().toString('base64'));
769
+ const mpc = await sdk_core_1.EDDSAMethods.getInitializedMpcInstance();
770
+ const accountId = mpc.deriveUnhardened(mpcV2CommonKeyChain, 'm/0').slice(0, 64);
771
+ mpcV2WalletAddress = await utils_1.default.getAddressFromPublicKey(accountId);
772
+ mpcV2RecoverParams = {
773
+ userKey: mpcV2UserKey,
774
+ backupKey: mpcV2BackupKey,
775
+ bitgoKey: mpcV2CommonKeyChain,
776
+ recoveryDestination,
777
+ walletPassphrase,
778
+ apiKey,
779
+ };
780
+ });
781
+ beforeEach(function () {
782
+ mockProvider = {
783
+ getBalance: sandbox.stub().resolves('1000000000'),
784
+ getEstimateFee: sandbox.stub().resolves({
785
+ source_fees: { in_fwd_fee: 1000, storage_fee: 1000, gas_fee: 1000, fwd_fee: 1000 },
786
+ }),
787
+ call: sandbox.stub(),
788
+ send: sandbox.stub().callsFake((method) => {
789
+ if (method === 'runGetMethod') {
790
+ return Promise.resolve({ gas_used: 0, stack: [['num', '0']] });
791
+ }
792
+ return Promise.resolve({});
793
+ }),
794
+ };
795
+ sandbox.stub(tonweb_1.default, 'HttpProvider').returns(mockProvider);
796
+ });
797
+ it('should recover native TON using MPCv2 signing material', async function () {
798
+ const getTSSSignatureSpy = sandbox.spy(sdk_core_1.EDDSAMethods, 'getTSSSignature');
799
+ const result = (await basecoin.recover(mpcV2RecoverParams));
800
+ result.should.not.be.empty();
801
+ result.should.hasOwnProperty('serializedTx');
802
+ result.should.hasOwnProperty('scanIndex');
803
+ should_1.default.equal(result.scanIndex, 0);
804
+ result.serializedTx.should.be.a.String().and.not.be.empty();
805
+ sandbox.assert.calledWith(mockProvider.getBalance, mpcV2WalletAddress);
806
+ sandbox.assert.notCalled(getTSSSignatureSpy);
807
+ });
808
+ it('should recover jetton using MPCv2 signing material', async function () {
809
+ mockProvider.call.callsFake((address, method) => {
810
+ if (method === 'get_wallet_data') {
811
+ return Promise.resolve({
812
+ stack: [
813
+ ['num', '5000000000'],
814
+ ['num', '0'],
815
+ ['cell', { bytes: '' }],
816
+ ['cell', { bytes: '' }],
817
+ ],
818
+ });
819
+ }
820
+ return Promise.resolve({ stack: [] });
821
+ });
822
+ const getTSSSignatureSpy = sandbox.spy(sdk_core_1.EDDSAMethods, 'getTSSSignature');
823
+ const jettonParams = {
824
+ ...mpcV2RecoverParams,
825
+ senderJettonAddress: recoveryDestination,
826
+ };
827
+ const result = (await basecoin.recover(jettonParams));
828
+ result.should.not.be.empty();
829
+ result.should.hasOwnProperty('serializedTx');
830
+ result.should.hasOwnProperty('scanIndex');
831
+ should_1.default.equal(result.scanIndex, 0);
832
+ result.serializedTx.should.be.a.String().and.not.be.empty();
833
+ sandbox.assert.calledWith(mockProvider.getBalance, mpcV2WalletAddress);
834
+ sandbox.assert.notCalled(getTSSSignatureSpy);
835
+ });
836
+ it('should use MPCv1 path when signing material is MPCv1 format', async function () {
837
+ sandbox.stub(basecoin, 'isMpcV2Keycard').resolves({
838
+ version: 'v1',
839
+ userPrv: JSON.stringify({ uShare: {}, bitgoYShare: {} }),
840
+ });
841
+ const getTSSSignatureStub = sandbox
842
+ .stub(sdk_core_1.EDDSAMethods, 'getTSSSignature')
843
+ .resolves(Buffer.from('1baafa0d62174bf0c78f3256318613ffc44b6dd54ab1a63c2185232f92ede9da' +
844
+ 'e1b2818dbeb52a8215fd56f5a5f2a9f94c079ce89e4dc3b1ce6ed6e84ce71857', 'hex'));
845
+ sandbox.stub(bitgo, 'decrypt').resolves(JSON.stringify({ bShare: {}, yShares: {} }));
846
+ const result = (await basecoin.recover(mpcV2RecoverParams));
847
+ result.should.not.be.empty();
848
+ result.should.hasOwnProperty('serializedTx');
849
+ result.should.hasOwnProperty('scanIndex');
850
+ should_1.default.equal(result.scanIndex, 0);
851
+ result.serializedTx.should.be.a.String().and.not.be.empty();
852
+ sandbox.assert.calledOnce(getTSSSignatureStub);
853
+ });
854
+ it('should throw when commonKeyChain from MPCv2 keycard does not match bitgoKey', async function () {
855
+ const mismatchedBitgoKey = mpcV2CommonKeyChain.slice(0, -8) + '00000000';
856
+ const mismatchedParams = {
857
+ ...mpcV2RecoverParams,
858
+ bitgoKey: mismatchedBitgoKey,
859
+ };
860
+ await basecoin
861
+ .recover(mismatchedParams)
862
+ .should.be.rejectedWith('EdDSA MPCv2 recovery: commonKeyChain from keycard does not match bitgoKey');
863
+ });
864
+ });
750
865
  });
751
866
  });
752
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3Rvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QztBQUM1Qyw0Q0FBMEM7QUFDMUMsbUNBQWtFO0FBQ2xFLDZDQUErQjtBQUMvQixvREFBNEI7QUFDNUIsMkRBQTZDO0FBQzdDLDhDQUF1RTtBQUN2RSxvREFBNEI7QUFDNUIsZ0VBQXdDO0FBQ3hDLG9EQUE0QjtBQUU1QixRQUFRLENBQUMsTUFBTSxFQUFFO0lBQ2YsSUFBSSxRQUFRLENBQUM7SUFDYixNQUFNLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDNUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQixNQUFNLGNBQWMsR0FBRztRQUNyQjtZQUNFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUMvRSxNQUFNLEVBQUUsRUFBRTtTQUNYO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDbEcsTUFBTSxFQUFFLEVBQUU7U0FDWDtLQUNGLENBQUM7SUFDRixNQUFNLHdCQUF3QixHQUFHO1FBQy9CO1lBQ0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ3pGLE1BQU0sRUFBRSxFQUFFO1NBQ1g7UUFDRDtZQUNFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUM1RyxNQUFNLEVBQUUsRUFBRTtTQUNYO0tBQ0YsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHO1FBQ25CO1lBQ0UsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztTQUN2RDtRQUNEO1lBQ0UsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLFNBQVMsQ0FBQztTQUMxRTtLQUNGLENBQUM7SUFFRixNQUFNLHNCQUFzQixHQUFHO1FBQzdCO1lBQ0UsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDO1NBQ2pFO1FBQ0Q7WUFDRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsbUJBQW1CLENBQUM7U0FDcEY7S0FDRixDQUFDO0lBRUYsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7UUFDcEMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekQsTUFBTSxvQkFBb0IsR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3RCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsS0FBSztnQkFDOUMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDO29CQUM3RCxRQUFRO29CQUNSLFVBQVU7b0JBQ1YsWUFBWTtpQkFDTixDQUFDLENBQUM7Z0JBQ1YscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFekMsTUFBTSwrQkFBK0IsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDdkUsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLG9CQUFvQjtvQkFDaEMsWUFBWSxFQUFFLEVBQUU7aUJBQ1YsQ0FBQyxDQUFDO2dCQUNWLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMseUVBQXlFLEVBQUUsS0FBSztnQkFDakYsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDdkUseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7Z0JBQzFELE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxRQUFRO3FCQUNYLGlCQUFpQixDQUFDO29CQUNqQixRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxVQUFVO29CQUNWLFlBQVk7aUJBQ04sQ0FBQztxQkFDUixNQUFNLENBQUMsWUFBWSxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMseUVBQXlFLEVBQUUsS0FBSztnQkFDakYsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDdkUseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7Z0JBQzVELE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxRQUFRO3FCQUNYLGlCQUFpQixDQUFDO29CQUNqQixRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxVQUFVO29CQUNWLFlBQVk7aUJBQ04sQ0FBQztxQkFDUixNQUFNLENBQUMsWUFBWSxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsNEZBQTRGLEVBQUUsS0FBSztnQkFDcEcsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixNQUFNLFFBQVE7cUJBQ1gsaUJBQWlCLENBQUM7b0JBQ2pCLFFBQVE7b0JBQ1IsVUFBVTtvQkFDVixZQUFZO2lCQUNOLENBQUM7cUJBQ1IsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw0RkFBNEYsRUFBRSxLQUFLO2dCQUNwRyxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sUUFBUTtxQkFDWCxpQkFBaUIsQ0FBQztvQkFDakIsUUFBUTtvQkFDUixVQUFVO29CQUNWLFlBQVk7aUJBQ04sQ0FBQztxQkFDUixNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGdGQUFnRixFQUFFLEtBQUs7Z0JBQ3hGLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxnQkFBTSxDQUFDLE9BQU8sQ0FDbEUseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDaEQsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDbEQsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsVUFBVTtvQkFDVixZQUFZO2lCQUNOLENBQUMsQ0FBQztnQkFDVixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO2dCQUM5RCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sUUFBUTtxQkFDWCxpQkFBaUIsQ0FBQztvQkFDakIsUUFBUTtvQkFDUixVQUFVO2lCQUNKLENBQUM7cUJBQ1IsTUFBTSxDQUFDLFlBQVksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztZQUN6RSxNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsOEJBQThCLENBQUMsU0FBUyxDQUFDO2FBQ2hFLENBQUM7WUFDRixNQUFNLFVBQVUsR0FBRztnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUN4RixNQUFNLEVBQUUsRUFBRTthQUNYLENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDeEIsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDN0QsUUFBUTtnQkFDUixVQUFVO2dCQUNWLFlBQVk7YUFDTixDQUFDLENBQUM7WUFDVixxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUs7WUFDL0MsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDO2dCQUM5RCxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7YUFDaEYsQ0FBQyxDQUEyQixDQUFDO1lBQzlCLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQ3BDLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFDO2dCQUN6RyxFQUFFLEVBQUUsOENBQThDO2dCQUNsRCxPQUFPLEVBQUU7b0JBQ1A7d0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsT0FBTzt3QkFDekQsTUFBTSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsTUFBTTtxQkFDeEQ7aUJBQ0Y7Z0JBQ0QsWUFBWSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsTUFBTTtnQkFDN0QsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRSxHQUFHO2dCQUNqQixHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO2dCQUN2QixjQUFjLEVBQUUsU0FBUzthQUMxQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO1lBQzlELE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDOUQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUMvRSxtQkFBbUIsRUFBRSxLQUFLO2dCQUMxQixxQkFBcUIsRUFBRSxLQUFLO2FBQzdCLENBQUMsQ0FBMkIsQ0FBQztZQUM5QixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUNwQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQztnQkFDekcsRUFBRSxFQUFFLDhDQUE4QztnQkFDbEQsT0FBTyxFQUFFO29CQUNQO3dCQUNFLE9BQU8sRUFBRSxRQUFRLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsT0FBTzt3QkFDbkUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNO3FCQUNsRTtpQkFDRjtnQkFDRCxZQUFZLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLE1BQU07Z0JBQ3ZFLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUUsR0FBRztnQkFDakIsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRTtnQkFDdkIsY0FBYyxFQUFFLFNBQVM7YUFDMUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSztZQUNoRSxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQzlELEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzthQUNuRyxDQUFDLENBQTJCLENBQUM7WUFDOUIsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztnQkFDcEMsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUM7Z0JBQ3pHLEVBQUUsRUFBRSxRQUFRLENBQUMsd0NBQXdDLENBQUMsSUFBSTtnQkFDMUQsT0FBTyxFQUFFO29CQUNQO3dCQUNFLE9BQU8sRUFBRSxRQUFRLENBQUMsd0NBQXdDLENBQUMsU0FBUyxDQUFDLE9BQU87d0JBQzVFLE1BQU0sRUFBRSxRQUFRLENBQUMsd0NBQXdDLENBQUMsU0FBUyxDQUFDLE1BQU07cUJBQzNFO2lCQUNGO2dCQUNELFlBQVksRUFBRSxRQUFRLENBQUMsd0NBQXdDLENBQUMsU0FBUyxDQUFDLE1BQU07Z0JBQ2hGLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixZQUFZLEVBQUUsR0FBRztnQkFDakIsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRTtnQkFDdkIsY0FBYyxFQUFFLGlCQUFpQjthQUNsQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxLQUFLO1lBQy9FLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDOUQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNsRyxtQkFBbUIsRUFBRSxLQUFLO2dCQUMxQixxQkFBcUIsRUFBRSxLQUFLO2FBQzdCLENBQUMsQ0FBMkIsQ0FBQztZQUM5QixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUNwQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQztnQkFDekcsRUFBRSxFQUFFLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxJQUFJO2dCQUMxRCxPQUFPLEVBQUU7b0JBQ1A7d0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPO3dCQUN0RixNQUFNLEVBQUUsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLG1CQUFtQixDQUFDLE1BQU07cUJBQ3JGO2lCQUNGO2dCQUNELFlBQVksRUFBRSxRQUFRLENBQUMsd0NBQXdDLENBQUMsbUJBQW1CLENBQUMsTUFBTTtnQkFDMUYsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRSxHQUFHO2dCQUNqQixHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO2dCQUN2QixjQUFjLEVBQUUsaUJBQWlCO2FBQ2xDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEtBQUs7WUFDaEUsSUFBSSxDQUFDO2dCQUNILE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLGdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSztZQUNoRSxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5ILE1BQU0sNkJBQTZCLEdBQUc7WUFDcEM7Z0JBQ0U7b0JBQ0UsT0FBTyxFQUFFLGtEQUFrRDtvQkFDM0QsTUFBTSxFQUFFLFVBQVU7aUJBQ25CO2FBQ0Y7WUFDRDtnQkFDRTtvQkFDRSxPQUFPLEVBQUUsa0RBQWtEO29CQUMzRCxNQUFNLEVBQUUsV0FBVztpQkFDcEI7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLHVDQUF1QyxHQUFHO1lBQzlDO2dCQUNFO29CQUNFLE9BQU8sRUFBRSxrREFBa0Q7b0JBQzNELE1BQU0sRUFBRSxVQUFVO2lCQUNuQjthQUNGO1lBQ0Q7Z0JBQ0U7b0JBQ0UsT0FBTyxFQUFFLGtEQUFrRDtvQkFDM0QsTUFBTSxFQUFFLFdBQVc7aUJBQ3BCO2FBQ0Y7U0FDRixDQUFDO1FBRUYsTUFBTSw4QkFBOEIsR0FBRztZQUNyQztnQkFDRTtvQkFDRSxPQUFPLEVBQUUsa0RBQWtEO29CQUMzRCxNQUFNLEVBQUUsVUFBVTtpQkFDbkI7YUFDRjtZQUNEO2dCQUNFO29CQUNFLE9BQU8sRUFBRSxrREFBa0Q7b0JBQzNELE1BQU0sRUFBRSxXQUFXO2lCQUNwQjthQUNGO1NBQ0YsQ0FBQztRQUVGLE1BQU0sd0NBQXdDLEdBQUc7WUFDL0M7Z0JBQ0U7b0JBQ0UsT0FBTyxFQUFFLGtEQUFrRDtvQkFDM0QsTUFBTSxFQUFFLFVBQVU7aUJBQ25CO2FBQ0Y7WUFDRDtnQkFDRTtvQkFDRSxPQUFPLEVBQUUsa0RBQWtEO29CQUMzRCxNQUFNLEVBQUUsV0FBVztpQkFDcEI7YUFDRjtTQUNGLENBQUM7UUFFRixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsTUFBTSx5QkFBeUIsR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RSxNQUFNLG1DQUFtQyxHQUFHLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNGLE1BQU0sMEJBQTBCLEdBQUcsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekUsTUFBTSxvQ0FBb0MsR0FBRyx3Q0FBd0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3RixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsS0FBSztnQkFDeEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDeEQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7aUJBQzFELENBQUMsQ0FBQztnQkFFSCxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUNqQyxNQUFNLEVBQUUseUJBQXlCO29CQUNqQyxPQUFPLEVBQUUsMEJBQTBCO2lCQUNwQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLO2dCQUN2RCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sUUFBUSxDQUFDLGdCQUFnQixDQUFDO29CQUN4RCxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDekQsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIscUJBQXFCLEVBQUUsS0FBSztpQkFDQyxDQUFDLENBQUM7Z0JBRWpDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQ2pDLE1BQU0sRUFBRSxtQ0FBbUM7b0JBQzNDLE9BQU8sRUFBRSxvQ0FBb0M7aUJBQzlDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHNGQUFzRixFQUFFLEtBQUs7Z0JBQzlGLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBRyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQzFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLGNBQWMsQ0FBQztRQUVuQixNQUFNLENBQUM7WUFDTCxjQUFjO2dCQUNaLGtJQUFrSSxDQUFDO1lBQ3JJLFNBQVMsR0FBRztnQkFDVjtvQkFDRSxFQUFFLEVBQUUsa0NBQWtDO29CQUN0QyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsS0FBSztvQkFDWCxjQUFjLEVBQ1osa0lBQWtJO29CQUNwSSxZQUFZLEVBQ1YsZzBDQUFnMEM7aUJBQ24wQztnQkFDRDtvQkFDRSxFQUFFLEVBQUUsa0NBQWtDO29CQUN0QyxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsY0FBYyxFQUNaLGtJQUFrSTtvQkFDcEksWUFBWSxFQUNWLGcwQ0FBZzBDO2lCQUNuMEM7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGtDQUFrQztvQkFDdEMsTUFBTSxFQUFFLE9BQU87b0JBQ2YsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsY0FBYyxFQUNaLGtJQUFrSTtvQkFDcEksZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsT0FBTyxFQUFFLElBQUk7aUJBQ2Q7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSztZQUNyRSxNQUFNLE9BQU8sR0FBRyxrREFBa0QsQ0FBQztZQUNuRSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSztZQUN0RSxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUM7WUFDL0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEtBQUs7WUFDNUUsTUFBTSxPQUFPLEdBQUcsa0RBQWtELENBQUM7WUFDbkUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEtBQUs7WUFDbkUsTUFBTSxRQUFRLEdBQUcsNkRBQTZELENBQUM7WUFDL0UsTUFBTSxRQUFRLEdBQUcsNkRBQTZELENBQUM7WUFDL0UsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxLQUFLO1lBQy9FLE1BQU0sVUFBVSxHQUFHLGtEQUFrRCxDQUFDO1lBQ3RFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztZQUVoQixNQUFNLE1BQU0sR0FBRyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUN6RSxDQUFDLE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0VBQW9FLEVBQUUsS0FBSztZQUM1RSxNQUFNLFVBQVUsR0FBRywyREFBMkQsQ0FBQztZQUMvRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFaEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDekUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZHQUE2RyxFQUFFLEtBQUs7WUFDckgsTUFBTSxxQkFBcUIsR0FBRyxrREFBa0QsQ0FBQztZQUNqRixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFaEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUNwRixDQUFDLE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUUsS0FBSztZQUMxRSxNQUFNLE9BQU8sR0FBRyxrREFBa0QsQ0FBQztZQUNuRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFaEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2xELE1BQU0sZ0JBQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0VBQW9FLEVBQUUsS0FBSztZQUM1RSxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBRWhCLE1BQU0sTUFBTSxHQUFHLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDaEUsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsWUFBWSxFQUFFO2FBQzVDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUMzQixJQUFJLGNBQWMsQ0FBQztRQUNuQixJQUFJLGdCQUFnQixDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxLQUFLO1lBQ1YsY0FBYztnQkFDWixrSUFBa0ksQ0FBQztZQUNySSxNQUFNLEdBQUcsR0FBRyxNQUFNLHVCQUFZLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUMzRCxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLHlCQUF5QixFQUFFO1lBQ2xDLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLO2dCQUNyRCxDQUFDLE1BQU0sZUFBSyxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNsRSxrREFBa0QsQ0FDbkQsQ0FBQztnQkFDRixDQUFDLE1BQU0sZUFBSyxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDeEUsa0RBQWtELENBQ25ELENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxLQUFLO2dCQUM3RCxDQUFDLE1BQU0sZUFBSyxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDekUsa0RBQWtELENBQ25ELENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLO2dCQUNsRCxDQUFDLE1BQU0sZUFBSyxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2hGLG9FQUFvRSxDQUNyRSxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSztnQkFDbkQsTUFBTSxhQUFhLEdBQUc7b0JBQ3BCLFdBQVcsRUFBRSxTQUFTO29CQUN0QixZQUFZLEVBQUUsa0VBQWtFO29CQUNoRixnQkFBZ0IsRUFBRSxVQUFVO29CQUM1QixvQkFBb0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO29CQUN2QyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO29CQUMxQixhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUU7b0JBQ3RCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7b0JBQ3ZDLG9CQUFvQixFQUFFLGtEQUFrRDtvQkFDeEUsWUFBWSxFQUFFLGtEQUFrRDtpQkFDakUsQ0FBQztnQkFDRixNQUFNLHNCQUFzQixHQUFHLE1BQU0sZUFBSyxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNwRixzQkFBc0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7WUFDMUYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFDckIsRUFBRSxDQUFDLDhDQUE4QyxFQUFFO2dCQUNqRCxnQkFBTSxDQUFDLEtBQUssQ0FDVixlQUFLLENBQUMsVUFBVSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssQ0FBQyxFQUMzRSxrREFBa0QsQ0FDbkQsQ0FBQztnQkFDRixnQkFBTSxDQUFDLEtBQUssQ0FDVixlQUFLLENBQUMsVUFBVSxDQUFDLGtEQUFrRCxFQUFFLElBQUksQ0FBQyxFQUMxRSxrREFBa0QsQ0FDbkQsQ0FBQztnQkFDRixnQkFBTSxDQUFDLEtBQUssQ0FDVixlQUFLLENBQUMsVUFBVSxDQUFDLGtEQUFrRCxFQUFFLElBQUksQ0FBQyxFQUMxRSxrREFBa0QsQ0FDbkQsQ0FBQztnQkFDRixnQkFBTSxDQUFDLEtBQUssQ0FDVixlQUFLLENBQUMsVUFBVSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssQ0FBQyxFQUMzRSxrREFBa0QsQ0FDbkQsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNEJBQTRCLEVBQUUsS0FBSztZQUNwQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLDhDQUE4QyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pGLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0NBQWdDLEVBQUUsS0FBSztZQUN4QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsb0JBQW9CLENBQUMsOENBQThDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsb0JBQW9CLENBQUMsOENBQThDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtZQUN2SCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsb0JBQW9CLENBQUMsOENBQThDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtZQUNwSCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsb0JBQW9CLENBQUMsb0NBQW9DLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsb0JBQW9CLENBQUMseURBQXlELENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0NBQWdDLEVBQUUsS0FBSztZQUN4QyxNQUFNLEVBQUUsR0FBRyxNQUFNLGVBQUssQ0FBQyxzQkFBc0IsQ0FDM0Msd3lCQUF3eUIsQ0FDenlCLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsOENBQThDLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRTtZQUNqRCxNQUFNLEtBQUssR0FBRyxzRUFBc0UsQ0FBQztZQUNyRixNQUFNLFdBQVcsR0FBRyxvRUFBb0UsQ0FBQztZQUN6RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFcEUsTUFBTSxLQUFLLEdBQUcsc0VBQXNFLENBQUM7WUFDckYsTUFBTSxXQUFXLEdBQUcscUVBQXFFLENBQUM7WUFDMUYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsZUFBZSxFQUFFO1FBQ3hCLEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO1lBQzlELE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDekYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEtBQUs7WUFDekQsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx5REFBeUQsRUFBRTtRQUNsRSxJQUFJLE9BQTJCLENBQUM7UUFDaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxxQ0FBcUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsb0NBQW9DO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7WUFDbEUsNkJBQTZCO1lBQzdCLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixRQUFRLEVBQ04sa0lBQWtJO2dCQUNwSSxtQkFBbUIsRUFBRSxrREFBa0Q7Z0JBQ3ZFLE1BQU0sRUFBRSxrRUFBa0U7Z0JBQzFFLE9BQU8sRUFDTCxrSUFBa0k7Z0JBQ3BJLGdCQUFnQixFQUFFLGlCQUFpQjthQUNwQyxDQUFDO1lBRUYsa0RBQWtEO1lBQ2xELE1BQU0sVUFBVSxHQUFHO2dCQUNqQixZQUFZLEVBQ1YsMFBBQTBQO2dCQUM1UCxTQUFTLEVBQUUsQ0FBQztnQkFDWixJQUFJLEVBQUUsTUFBTTthQUNiLENBQUM7WUFFRix3REFBd0Q7WUFDeEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUV2RCw0QkFBNEI7WUFDNUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRXRELHNCQUFzQjtZQUN0QixNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzlCLDBQQUEwUCxDQUMzUCxDQUFDO1lBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyw2QkFBNkI7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSztZQUNyRSxNQUFNLGNBQWMsR0FBRztnQkFDckIsUUFBUSxFQUNOLGtJQUFrSTtnQkFDcEksbUJBQW1CLEVBQUUsa0RBQWtEO2dCQUN2RSxNQUFNLEVBQUUsa0VBQWtFO2dCQUMxRSxPQUFPLEVBQ0wsZzBDQUFnMEM7Z0JBQ2wwQyxTQUFTLEVBQ1AsZzBDQUFnMEM7Z0JBQ2wwQyxnQkFBZ0IsRUFBRSxrQkFBa0I7Z0JBQ3BDLG1CQUFtQixFQUFFLGtEQUFrRDthQUN4RSxDQUFDO1lBRUYsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFDakQsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBQ3RDLFdBQVcsRUFBRTt3QkFDWCxVQUFVLEVBQUUsSUFBSTt3QkFDaEIsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLE9BQU8sRUFBRSxJQUFJO3dCQUNiLE9BQU8sRUFBRSxJQUFJO3FCQUNkO2lCQUNGLENBQUM7Z0JBQ0YsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUN6RCxJQUFJLE1BQU0sS0FBSyxpQkFBaUIsRUFBRSxDQUFDO3dCQUNqQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7NEJBQ3JCLEtBQUssRUFBRTtnQ0FDTCxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7Z0NBQ3JCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztnQ0FDWixDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztnQ0FDdkIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7NkJBQ3hCO3lCQUNGLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUM7Z0JBQ0YsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUU7b0JBQ2hELElBQUksTUFBTSxLQUFLLGNBQWMsRUFBRSxDQUFDO3dCQUM5QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7NEJBQ3JCLFFBQVEsRUFBRSxDQUFDOzRCQUNYLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3lCQUN0QixDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDekIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7b0JBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QixDQUFDLENBQUM7YUFDSCxDQUFDO1lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUzRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuRCxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckYsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXhGLE9BQU87aUJBQ0osSUFBSSxDQUFDLHVCQUFZLEVBQUUsaUJBQWlCLENBQUM7aUJBQ3JDLFFBQVEsQ0FDUCxNQUFNLENBQUMsSUFBSSxDQUNULGtFQUFrRTtnQkFDaEUsa0VBQWtFLEVBQ3BFLEtBQUssQ0FDTixDQUNGLENBQUM7WUFFSixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFdEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0ZBQWtGLEVBQUUsS0FBSztZQUMxRiw2QkFBNkI7WUFDN0IsTUFBTSxjQUFjLEdBQUc7Z0JBQ3JCLFFBQVEsRUFDTixrSUFBa0k7Z0JBQ3BJLG1CQUFtQixFQUFFLGtEQUFrRDtnQkFDdkUsTUFBTSxFQUFFLGtFQUFrRTthQUMzRSxDQUFDO1lBRUYsMERBQTBEO1lBQzFELE1BQU0sY0FBYyxHQUFHO2dCQUNyQixZQUFZLEVBQ1YsMFBBQTBQO2dCQUM1UCxTQUFTLEVBQUUsQ0FBQztnQkFDWixJQUFJLEVBQUUsTUFBTTtnQkFDWixXQUFXLEVBQUUsa0VBQWtFO2dCQUMvRSxjQUFjLEVBQUUsS0FBSztnQkFDckIsUUFBUSxFQUFFO29CQUNSLE1BQU0sRUFBRTt3QkFDTjs0QkFDRSxPQUFPLEVBQUUsa0RBQWtEOzRCQUMzRCxXQUFXLEVBQUUsWUFBWTs0QkFDekIsS0FBSyxFQUFFLFVBQVU7eUJBQ2xCO3FCQUNGO29CQUNELE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxPQUFPLEVBQUUsa0RBQWtEOzRCQUMzRCxXQUFXLEVBQUUsV0FBVzs0QkFDeEIsUUFBUSxFQUFFLE1BQU07eUJBQ2pCO3FCQUNGO29CQUNELFdBQVcsRUFBRSxTQUFTO29CQUN0QixJQUFJLEVBQUUsRUFBRTtpQkFDVDtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsR0FBRyxFQUFFLE9BQU87b0JBQ1osU0FBUyxFQUFFLFNBQVM7aUJBQ3JCO2dCQUNELFlBQVksRUFBRTtvQkFDWixjQUFjLEVBQ1osa0lBQWtJO2lCQUNySTthQUNGLENBQUM7WUFFRixNQUFNLGFBQWEsR0FBRztnQkFDcEIsWUFBWSxFQUFFO29CQUNaO3dCQUNFLFVBQVUsRUFBRSxjQUFjO3dCQUMxQixlQUFlLEVBQUUsRUFBRTtxQkFDcEI7aUJBQ0Y7Z0JBQ0QsVUFBVSxFQUFFLEtBQUs7YUFDbEIsQ0FBQztZQUVGLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUM7YUFDNUIsQ0FBQztZQUVGLDRFQUE0RTtZQUM1RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRTNELDRCQUE0QjtZQUM1QixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFdEQsc0JBQXNCO1lBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEtBQUs7WUFDeEUsNENBQTRDO1lBQzVDLE1BQU0sTUFBTSxHQUFHO2dCQUNiLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQ1YsMFBBQTBQO29CQUM1UCxTQUFTLEVBQUUsQ0FBQztvQkFDWixhQUFhLEVBQUUsQ0FBQztpQkFDakI7YUFDRixDQUFDO1lBRUYsNERBQTREO1lBQzVELE1BQU0sa0JBQWtCLEdBQUc7Z0JBQ3pCLFlBQVksRUFBRTtvQkFDWjt3QkFDRSxZQUFZLEVBQ1YsMFBBQTBQO3dCQUM1UCxTQUFTLEVBQUUsQ0FBQztxQkFDYjtpQkFDRjtnQkFDRCxhQUFhLEVBQUUsQ0FBQzthQUNqQixDQUFDO1lBRUYsb0ZBQW9GO1lBQ3BGLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFDQUFxQyxDQUFDLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFFM0Ysd0RBQXdEO1lBQ3hELE1BQU0sV0FBVyxHQUFHLE1BQU0sUUFBUSxDQUFDLG1DQUFtQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRS9FLHNCQUFzQjtZQUN0QixXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNuRCwwUEFBMFAsQ0FDM1AsQ0FBQztZQUNGLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsV0FBVyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3RCaXRHbyB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRvbiwgVG9uUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsIFR0b24gfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3Rvbic7XG5pbXBvcnQgeyBFRERTQU1ldGhvZHMsIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IFRvbndlYiBmcm9tICd0b253ZWInO1xuXG5kZXNjcmliZSgnVE9OOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJhc2Vjb2luO1xuICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0b24nLCBUb24uY3JlYXRlSW5zdGFuY2UpO1xuICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3R0b24nLCBUdG9uLmNyZWF0ZUluc3RhbmNlKTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGNvbnN0IHR4UHJlYnVpbGRMaXN0ID0gW1xuICAgIHtcbiAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gICAge1xuICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IHR4UHJlYnVpbGRCb3VuY2VhYmxlTGlzdCA9IFtcbiAgICB7XG4gICAgICB0eEhleDogQnVmZmVyLmZyb20odGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnR4Qm91bmNlYWJsZSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHR4SW5mbzoge30sXG4gICAgfSxcbiAgICB7XG4gICAgICB0eEhleDogQnVmZmVyLmZyb20odGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eEJvdW5jZWFibGUsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgdHhQYXJhbXNMaXN0ID0gW1xuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudF0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCB0eFBhcmFtc0JvdW5jZWFibGVMaXN0ID0gW1xuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50Qm91bmNlYWJsZV0sXG4gICAgfSxcbiAgICB7XG4gICAgICByZWNpcGllbnRzOiBbdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlXSxcbiAgICB9LFxuICBdO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHRoZSByaWdodCBpbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRvbiA9IGJpdGdvLmNvaW4oJ3RvbicpO1xuICAgIGNvbnN0IHR0b24gPSBiaXRnby5jb2luKCd0dG9uJyk7XG5cbiAgICB0b24uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHRvbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHRvbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnR3JhbScpO1xuICAgIHRvbi5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlOSk7XG5cbiAgICB0dG9uLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0dG9uJyk7XG4gICAgdHRvbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHR0b24uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgR3JhbScpO1xuICAgIHR0b24uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IHRyYW5zYWN0aW9uOiAnLCAoKSA9PiB7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dG9uJyk7XG4gICAgdHhQYXJhbXNMaXN0LmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHR4UGFyYW1zTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gdHhQcmVidWlsZExpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHhQYXJhbXNCb3VuY2VhYmxlID0gdHhQYXJhbXNCb3VuY2VhYmxlTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0eFByZWJ1aWxkQm91bmNlYWJsZSA9IHR4UHJlYnVpbGRCb3VuY2VhYmxlTGlzdFtpbmRleF07XG5cbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcblxuICAgICAgICBjb25zdCBpc0JvdW5jZWFibGVUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtc0JvdW5jZWFibGUsXG4gICAgICAgICAgdHhQcmVidWlsZDogdHhQcmVidWlsZEJvdW5jZWFibGUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICBpc0JvdW5jZWFibGVUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIG51bWJlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4UGFyYW1zKSk7XG4gICAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50c1swXS5hbW91bnQgPSAyMDAwMDAwMDtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIHN0cmluZ3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4UGFyYW1zKSk7XG4gICAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50c1swXS5hbW91bnQgPSAnMjAwMDAwMDAnO1xuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2hlbiByZWNpcGllbnRzIGFtb3VudHMgYXJlIG51bWJlciBhbmQgYW1vdW50IGlzIHNhbWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgICAgLnNob3VsZC5yZXNvbHZlZFdpdGgodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudHMgYW1vdW50cyBhcmUgc3RyaW5nIGFuZCBhbW91bnQgaXMgc2FtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICAuc2hvdWxkLnJlc29sdmVkV2l0aCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50IGFkZHJlc3MgYXJlIG5vbiBib3VuY2VhYmxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0eFBhcmFtcykpO1xuICAgICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9IG5ldyBUb253ZWIuQWRkcmVzcyhcbiAgICAgICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHNbMF0uYWRkcmVzc1xuICAgICAgICApLnRvU3RyaW5nKHRydWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7fTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCByZWNpcGllbnQgaGF2aW5nIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3Rlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbkZvck1lbW9JZC5yZWNpcGllbnRdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb25Gb3JNZW1vSWQudHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICB9IGFzIGFueSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXhwbGFpbiBUcmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndHRvbicpO1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pKSBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAnd2l0aGRyYXdBbW91bnQnXSxcbiAgICAgICAgaWQ6ICd0dXlPa3lGVU12X25lVl9GZU5CSDI0TmQ0Y01MMmpVZ0RQNHpqR2t1T0ZJPScsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICAgIHdpdGhkcmF3QW1vdW50OiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIG5vbi1ib3VuY2VhYmxlIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdG9BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICAgIGZyb21BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiAndHV5T2t5RlVNdl9uZVZfRmVOQkgyNE5kNGNNTDJqVWdEUDR6akdrdU9GST0nLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6ICdVTktOT1dOJyB9LFxuICAgICAgICB3aXRoZHJhd0Ftb3VudDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaW5nbGUgbm9taW5hdG9yIHdpdGhkcmF3IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4SWQsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICAgIHdpdGhkcmF3QW1vdW50OiAnOTMyMTc4MTEyMzMwMDAwJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgbm9uLWJvdW5jZWFibGUgc2luZ2xlIG5vbWluYXRvciB3aXRoZHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gKGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4LCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB0b0FkZHJlc3NCb3VuY2VhYmxlOiBmYWxzZSxcbiAgICAgICAgZnJvbUFkZHJlc3NCb3VuY2VhYmxlOiBmYWxzZSxcbiAgICAgIH0pKSBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAnd2l0aGRyYXdBbW91bnQnXSxcbiAgICAgICAgaWQ6IHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHhJZCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24ucmVjaXBpZW50Qm91bmNlYWJsZS5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlLmFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiAnVU5LTk9XTicgfSxcbiAgICAgICAgd2l0aGRyYXdBbW91bnQ6ICc5MzIxNzgxMTIzMzAwMDAnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIG1pc3NpbmcgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiAncmFuZG9tU3RyaW5nJyB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGFyc2UgVHJhbnNhY3Rpb25zOiAnLCAoKSA9PiB7XG4gICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dG9uJyk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnNMaXN0ID0gW3Rlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlTGlzdCA9IFtcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdFUUNTQmpSM2ZVT0w5OFdUdzJGX0lUNEJyY3FqWkpXVkxXVVN6NVdRRHBhTDlKcGwnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnRVFBYkp1Zy1rLXR1ZldNakVDMVJLU00waWlKVERVY1lrQzd6V0FOSHJrVDU1Rm9sJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMjM0MDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICBdO1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGVMaXN0ID0gW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ1VRQ1NCalIzZlVPTDk4V1R3MkZfSVQ0QnJjcWpaSldWTFdVU3o1V1FEcGFMOU1lZycsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdVUUFiSnVnLWstdHVmV01qRUMxUktTTTBpaUpURFVjWWtDN3pXQU5IcmtUNTVBZmcnLFxuICAgICAgICAgIGFtb3VudDogJzEyMzQwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUxpc3QgPSBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnRVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYd3RHJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ0VRQTBpOC1DZEduRl9EaFVISGY5MlIxT05INnNJQTl2TFpfV0xjQ0loZkJCWHd0RycsXG4gICAgICAgICAgYW1vdW50OiAnMTIzNDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uT3V0cHV0c1Jlc3BvbnNlQm91bmNlYWJsZUxpc3QgPSBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnVVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYMWFEJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ1VRQTBpOC1DZEduRl9EaFVISGY5MlIxT05INnNJQTl2TFpfV0xjQ0loZkJCWDFhRCcsXG4gICAgICAgICAgYW1vdW50OiAnMTIzNDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIHRyYW5zYWN0aW9uc0xpc3QuZm9yRWFjaCgoXywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25zTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlID0gdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGUgPSB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlQm91bmNlYWJsZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2UgPSB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlID0gdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlTGlzdFtpbmRleF07XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgYSBUT04gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcblxuICAgICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICBpbnB1dHM6IHRyYW5zYWN0aW9uSW5wdXRzUmVzcG9uc2UsXG4gICAgICAgICAgb3V0cHV0czogdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgYSBub24tYm91bmNlYWJsZSBUT04gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHRvQWRkcmVzc0JvdW5jZWFibGU6IGZhbHNlLFxuICAgICAgICAgIGZyb21BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICAgIH0gYXMgVG9uUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpO1xuXG4gICAgICAgIHBhcnNlZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIGlucHV0czogdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGUsXG4gICAgICAgICAgb3V0cHV0czogdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2UgYSBUT04gdHJhbnNhY3Rpb24gd2hlbiBleHBsYWluVHJhbnNhY3Rpb24gcmVzcG9uc2UgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdHViID0gc2lub24uc3R1YihUb24ucHJvdG90eXBlLCAnZXhwbGFpblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHN0dWIucmVzb2x2ZXModW5kZWZpbmVkKTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4OiB0cmFuc2FjdGlvbiB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgICAgICBzdHViLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndHRvbicpO1xuICAgIGxldCBrZXljaGFpbnM7XG4gICAgbGV0IGNvbW1vbktleWNoYWluO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbW1vbktleWNoYWluID1cbiAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJztcbiAgICAgIGtleWNoYWlucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNjQyNGMzNTNlYWY3OGQwMDA3NjZlOTU5NDk4Njg0NjgnLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAne1wiaXZcIjpcImNaZDVpN0w0Unh0d3JBTFcycks3VUE9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCI1emdvSDFCZDNGdz1cIixcImN0XCI6XCI5dlZsblhGUnRyTTlGVkVvK2QyY2hiR0hsTTlsRlplbXVlQnVBczNCSWtQbzMzRm83anp3d05LL2tJV2tFeWcrTm1FQmQ1SWFxQVMxNTdudnZ2d3p6c21NV2xRZFV6OXFibVhOdjNwZzk4N2NYRlIwOGV4Uys0dWh3UDFZTk9qSlRSdlJOY085WnFIYjQ2ZDRmbXlKL3lDOS9zdXNDZ2U3ci9Fc2JhTjVDM2FmdjFkenlidXE5MTJGd2FRRWxaTFlZcDVCSUN1ZEZPTVo5azBVRE1mS00vUE1Ea0g3V2V4b0dIcjlHS3EvYmdDSDJCMzlUWlp5SEtVNlV5NDdsWGVwMnM2aDBEck13SE9ybm1pTDNEWmpPajg4WW52cGhsenh1bzRlT2xEMlVIaWEyK252SWFJU1lzMjlQcjBEQXZSRXV0Y2h2Y0JwRXhqMWtXV1B2N2hRWXJ2OEYwTkFkYXRzYldsM3creEt5ZmlNS28xVVNscnd5SnZpeXBHdFF0WE9KeXcwWFBOMHJ2MitMNWxXOEJianB6SGZZWU4xM2ZKVGVkbEdURmhoa3pWdGJiUEFLRTAya3g3ekNKY2pZYWlleGRTVHNyRExTY1lOVDkvSmhkdDI3S3Bzb29laHdWb2hMZlNLejR2YkZmUnUyTVBadzMvK2MvaGZpSk5ndHo2ZXNXYm54R3JjRThVMkl3UFlDYUsrR2hrNERjcVdOSW5pNTlSSTVCNWtBc1FPVG9JSTQwcVBONTEwdVRneEJTUE83cTdNSGdreGRkNENxQnErb2pyOWowUDdvYW84RTVZK0NCREpyb2pEb0NoMW9DQ0RXOXZvMmRYbFZjRDhTSWJ3N1UvOUFmdkViQTR4eUUvNW1kMU03Q0l3TG5XczJZbnYwWXRhS29xaGRTOXg2Rm1IbE1EaE4vREtIaW5yd21vd3RyVFQ4MmZPa3BPNWc5c2FTbWdVN1F5M2dMdDh0K1Z3ZEV5ZUZlUVVLUlN5Y2k4cWdxWFFhWklnNCthWGdhU09ubENGTXRtQjhla1l4RWhUWTV1elJmck5nUzRzMVFlcUZCcE50VUYrWWRpMjk3cGJWWG5Kb1hBTitTVldkODBHQ3greUkyZHBWQzg5azNyT1dLOVdleXFsbnp1TEpXcDJSSU9COWNkVzhHRnYvZk4rUUFKcFllVnhPRTQrblpEc0tuc2o4bktjZzl0NERseDFHNmdMTTEvVnE5WXhOTGJ1enVSQzBhc1VZdmRNbm9NdnN6bXBtKytUeG5kWWlzZ05Zc2NwWlNvejd3dmNhekpORVBmaFBWakVrZDZ0VVV1TjRHTTM1SDBEbUtDVVFOVCthNkI2aG1IbFRadmp4aXlHQWc1Ylk1OWhkanZKKzIyUWR1YXpsRUVDNkxJM0hyQTd1SzBUcHBsV3pTMXRDSUZ2VE1VaGo2NURFWm1OSjIrWlk5YlE0dnNNZitEUlIzT09HNHQrRE1sTmZqT2Qzek52M1FvWTk1QmpmV3ByeUZ3UHpEcTdiQ1A2N0pEc29qN2oyVFk1RlJTclJrRDc3SDBFd2x1eDJjV2ZqUlR3Y01IY2RReHh1VjBPUDBhTmpHRGp5YkZOXCJ9JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNjQyNGMzNTNlYWY3OGQwMDA3NjZlOTYxMzdkNDQwNGInLFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgICAnMTliZGZlMmE0YjQ5OGEwNTUxMTM4MTIzNWE4ODkyZDU0MjY3ODA3YzRhM2Y2NTRlMzEwYjkzOGI4YjQyNGZmNGFkZWRiZTkyZjRjMTQ2ZGU2NDFjNjc1MDhhOTYxMzI0Yzg1MDRjZGY4ZTBjMGFjYmI2OGQ2MTA0Y2NjY2Q3ODEnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAgICd7XCJpdlwiOlwidmkwZFBlZi9SeDdrRy9wUnlTUWk2UT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjllZmhRc2lFdlZzPVwiLFwiY3RcIjpcIkd3NmF0dmY2Z3hLenNqdGwzeHNlaXBPM3JBeHAxbUF6N1l1MWloRnNpNS9sZjJ2TVplZ0FwZ1p4K3B5SUxGUzlLS0xIYk5GM1U2V2dTWWRycjJ0NHZ6ZExzWGtIMVdJeGZIUytjZDJDNU41OXlBRFpEblBKQlQ2cHYvSVJ2YVllbFAwQ2szbklZUTJoU01tOG9wK1ZPV0MvU3pIZWg3c2xZRHF3RUhUR2FuMFdpZ2Z2azF5UmQ3Q0NKVGFFQW9tbmMvNGVGaTJOWTNYM2d0LzNvcHk5SUFna25ud1VGb2huOTZFV3BFUTBGNnBiekgvWjhWRjZnRitEVWNyckJ5QXhFeFVQbkhRWmlGazNZSFUvdlZWNEZ4QlUvbVZBRTh4QnNCbjV1bDVlNVNVTVBmYzdUQnVKV3Y0QkJ5VE5nOXhEU2hGLzkxWXgybmJmVW01ZDlRbU04bHBLZ3p6UXZjSzhQT0FQazg3Z1JDdUtuc0doNXZOUzBVcHBrSGMrb2NmelJRbEdBNmp6ZTdReXlRTzByTWo1THk4a1dqd2sydklTdktZSFlTMU5SN1ZVNTQ5VUlYbzdOWGphdHVuS1NjMytJcmVvUlVISXNoaWFMZzZobCtweENDdWMwcVE0M1YwbWRJZkNqVE44Z2tHV0xOazhSN3RBR1B6OWp5YXBRUGNQRUdIZ0V6MEFUSWk2eU1OV0NzaWJTMmVMaUUxdVZFSk9Ob000bGs2RlBsM1EyQ0hiVzJNZUVicWpZOGhiYXcxOG1OYjJ4U0JIL0Z3cGlpYWwrVHZpMmltcWduQ080WnBPOWJsbEtmdFpQY1F5MHN0TitlR0JsYjV1ZnlmbEtrRFNpQ2hIWXJvR2pFcG1pRmljZGRlNDhjSnN6RjUydUtObmYxcTY3ZkE5L1MyRkFIUWFiM0VYb2p4SDJHYmsra2tWMmgvVFlLRkZaU1dDM3ZpNGU4bU8rdmpNVWNSMEFkc2dQRnlFSXowU0NHdWJhM0NuVExOZEV1WndzYXVBZUhreDJ2VVRuUmdKUFZnTmVldVhtc1ZHNzZTeTJnZ0pIdWFsczBIajhVMlhkYTBxTzFSdUZmb0NXZnNzOXduNkhHUndQUGtoU0IvOG9OZ3VBcW1SVkdLa2Q4Wnd0M0l2clRkOWZrMC9yRkZESktHejdXeU5Ia1lnVW1OaUdjSXREMTJ2MGp4N0ZaNTJFSnpsM0F2MVJ5SlVRSzE4KzhFWVBoM1NHaVU5ZHQ3VlgwYUYwdW82Sm91S2hPZWxkVXZNUCtBdWdRejhmVWNsd1RRc2Jib1ZnMjdZeG8wRHlBVFZ3VGhXNWE1NlI2UWY1WmlRSmx1RnV6czV5OThycTBTNXEwNDZsRTZvM3ZWbUpwRWR3amVTQ0pvRVQ1Q0w0blRna1h5V3ZobTRlQjh1L2U2NmwzbzBxYmFTeDhxOVlZbVQ5RXBSY2w1VFA0VGhMQktFVFlkelZ2ZzRleGpRZmVrdE1hdGs1RXlVcEVJaFpQWGg1dlhwSlplc2RmTzlMSjh6VGFIQnNCakRQVTdjZE5nUU1iZWJwYXRhUmk4QTBlbDIvSUpYbCtFK29sZ0F6NXpDNGkyTzFRPT1cIn0nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc2NDI0YzM1M2VhZjc4ZDAwMDc2NmU5NTEwYjEyNWZiYScsXG4gICAgICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJyxcbiAgICAgICAgICB2ZXJpZmllZFZzc1Byb29mOiB0cnVlLFxuICAgICAgICAgIGlzQml0R286IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSB3ZWxsIGZvcm1hdHRlZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGFuIGluY29ycmVjdGx5IGZvcm1hdHRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnd3JvbmdhZGRyZXNzJztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsaWRhdGluZyBhIG5vbi1ib3VuY2VhYmxlIGFkZHJlc3MgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdVUUEwaTgtQ2RHbkZfRGhVSEhmOTJSMU9OSDZzSUE5dkxaX1dMY0NJaGZCQlgxYUQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYWRkcmVzc2VzIHdpdGggbWVtb0lkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MxID0gJ0VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRkw3bj9tZW1vSWQ9MTIzJztcbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaT9tZW1vSWQ9MTIzJztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MxKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzMikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgaXNXYWxsZXRBZGRyZXNzIHdpdGggdmFsaWQgYWRkcmVzcyBmb3IgaW5kZXggNCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5ld0FkZHJlc3MgPSAnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJztcbiAgICAgIGNvbnN0IGluZGV4ID0gNDtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBjb21tb25LZXljaGFpbiwgYWRkcmVzczogbmV3QWRkcmVzcywgaW5kZXgsIGtleWNoYWlucyB9O1xuICAgICAgKGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpc1dhbGxldEFkZHJlc3Mgd2l0aCB2YWxpZCBhZGRyZXNzYW5kIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbmV3QWRkcmVzcyA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24/bWVtb0lkPTQnO1xuICAgICAgY29uc3QgaW5kZXggPSA0O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzOiBuZXdBZGRyZXNzLCBpbmRleCwga2V5Y2hhaW5zIH07XG4gICAgICAoYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBpc1dhbGxldEFkZHJlc3Mgd2l0aCB2YWxpZCBhZGRyZXNzIGZvciBpbmRleCA1IGFuZCBhZGRyZXNzIGlzIGZvciBhIGRpZmZlcmVudCBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzc0ZvckluZGV4NSA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nO1xuICAgICAgY29uc3QgaW5kZXggPSA1O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzOiB3cm9uZ0FkZHJlc3NGb3JJbmRleDUsIGluZGV4LCBrZXljaGFpbnMgfTtcbiAgICAgIChhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGlzV2FsbGV0QWRkcmVzcyB3aGVuIGtleWNoYWlucyBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzLCBpbmRleCB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaXNXYWxsZXRBZGRyZXNzIHdoZW4gbmV3IGFkZHJlc3MgaXMgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICdiYWRBZGRyZXNzJztcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBjb21tb25LZXljaGFpbiwgYWRkcmVzczogd3JvbmdBZGRyZXNzLCBpbmRleCB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyksIHtcbiAgICAgICAgbWVzc2FnZTogYGludmFsaWQgYWRkcmVzczogJHt3cm9uZ0FkZHJlc3N9YCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXRpbCBjbGFzcyAnLCAoKSA9PiB7XG4gICAgbGV0IGNvbW1vbktleWNoYWluO1xuICAgIGxldCBkZXJpdmVkUHVibGljS2V5O1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb21tb25LZXljaGFpbiA9XG4gICAgICAgICcxOWJkZmUyYTRiNDk4YTA1NTExMzgxMjM1YTg4OTJkNTQyNjc4MDdjNGEzZjY1NGUzMTBiOTM4YjhiNDI0ZmY0YWRlZGJlOTJmNGMxNDZkZTY0MWM2NzUwOGE5NjEzMjRjODUwNGNkZjhlMGMwYWNiYjY4ZDYxMDRjY2NjZDc4MSc7XG4gICAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgICAgZGVyaXZlZFB1YmxpY0tleSA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCAnbS8nICsgMCkuc2xpY2UoMCwgNjQpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFkZHJlc3NGcm9tUHVibGljS2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgYm91bmNlYWJsZSBhZGRyZXNzIGJ5IGRlZmF1bHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5KSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdFUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmF2UTUnXG4gICAgICAgICk7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LCB0cnVlKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdFUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmF2UTUnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgbm9uLWJvdW5jZWFibGUgYWRkcmVzcyB3aGVuIHJlcXVlc3RlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKGF3YWl0IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGRlcml2ZWRQdWJsaWNLZXksIGZhbHNlKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdVUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmFxbjgnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgcmF3IGFkZHJlc3Mgd2hlbiByZXF1ZXN0ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LCBmYWxzZSwgZmFsc2UpKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgJzA6ZDU3YjI1MDkzYjFkYzA5ZDkxOTYyZWQxMzQ5N2U1NzFiZmI3M2JiOTM5YzNmMGU1ZWQwODU4NWEzYmU5ZWY2YSdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGdldCB2YWxpZCB2ZXN0aW5nIGNvbnRyYWN0IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlc3RpbmdQYXJhbXMgPSB7XG4gICAgICAgICAgc3ViV2FsbGV0SWQ6IDY5ODk4MzE5MSxcbiAgICAgICAgICBwdWJsaWNLZXlIZXg6ICc3MTAxMzM5NDg2Mjk5NWNmYjUyN2RlYTljYWRjYzg0ZDY2ZDExOTdkMmE0NDU0NTc5YjkzYTA4MjIzZTRiMzA5JyxcbiAgICAgICAgICB2ZXN0aW5nU3RhcnRUaW1lOiAxNzYwOTk5MTY0LFxuICAgICAgICAgIHZlc3RpbmdUb3RhbER1cmF0aW9uOiA2MCAqIDYwICogMjQgKiAzMCxcbiAgICAgICAgICB1bmxvY2tQZXJpb2Q6IDYwICogNjAgKiAyNCxcbiAgICAgICAgICBjbGlmZkR1cmF0aW9uOiA2MCAqIDYwLFxuICAgICAgICAgIHZlc3RpbmdUb3RhbEFtb3VudDogQmlnSW50KCc0MDAwMDAwMDAnKSxcbiAgICAgICAgICB2ZXN0aW5nU2VuZGVyQWRkcmVzczogJzBRRE9FeXpDNktYaVZoMlJjbzJiYXBIOTZWbjZsYjlZV3hna1RWV3RxLTlDWEZ0cCcsXG4gICAgICAgICAgb3duZXJBZGRyZXNzOiAnMFFEQnJPZ2pRVGhiTjdlV0JIRXJSaHJKUUgzQXBlY0dEdHUzSzExTHVqam14NDlaJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdmVzdGluZ0NvbnRyYWN0QWRkcmVzcyA9IGF3YWl0IHV0aWxzLmdldFZlc3RpbmdDb250cmFjdEFkZHJlc3ModmVzdGluZ1BhcmFtcyk7XG4gICAgICAgIHZlc3RpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCdFUUFqbWdNYndVM1dWS19wbjJnajFYQkdfTk12cmtvVDRlYXJ2c19DOVE2ZnMtU0UnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhZGRyZXNzIGFzIHBlciBib3VuY2VhYmxlIGZsYWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgICB1dGlscy5nZXRBZGRyZXNzKCdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknLCBmYWxzZSksXG4gICAgICAgICAgJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaSdcbiAgICAgICAgKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIHV0aWxzLmdldEFkZHJlc3MoJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaScsIHRydWUpLFxuICAgICAgICAgICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nXG4gICAgICAgICk7XG4gICAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgICB1dGlscy5nZXRBZGRyZXNzKCdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nLCB0cnVlKSxcbiAgICAgICAgICAnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJ1xuICAgICAgICApO1xuICAgICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgICAgdXRpbHMuZ2V0QWRkcmVzcygnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJywgZmFsc2UpLFxuICAgICAgICAgICdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYmxvY2sgaGFzaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCgnTVB1T3ZIZHUveit0Mmw4MllwWnRpSlFrOCtGVkttV3VLeGQ2dWJuMDlmST0nKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoJ01QdU92SGR1L3ordDJsODJZcFp0aUpRazgrRlZLbVd1S3hkJyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCgnJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdHJhbnNhY3Rpb24gaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ3dsVGRET0FYd0pwOEVTUmZRQUVKUUluMFRjaV9TNW9MYlZLQll4RHR2cGs9JyksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKCczc3lreDZSdWp5N1V0QndIUS9YNWtMZ3ZLRTBTS0xBK0FCaUNLaTdzWDhvPScpLCB0cnVlKTsgLy8gTm8gdXJsIGZyaWVuZGx5IHR4aWRcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnM3N5a3g2UnVqeTdVdEJ3SFFfWDVrTGd2S0UwU0tMQS1BQmlDS2k3c1g4bz0nKSwgdHJ1ZSk7IC8vIFVybCBmcmllbmRseSB0eGlkXG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ3dsVGRET0FYd0pwOEVTUmZRQUVKUUluMFRjaV9TNW9MYj0nKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKCd3bFRkRE9BWHdKcDhFU1JmUUFFSlFJbjBUY2lfUzVvTGJWS0JZeER0YWZkc2FzZGFkc2Z2cGs9JyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgdHJhbnNhY3Rpb24gaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHV0aWxzLmdldE1lc3NhZ2VIYXNoRnJvbURhdGEoXG4gICAgICAgICd0ZTZjY2tFQ0NnRUFBa29BQTdWMms0Vncxbmh4cjdYY0NCaldjRkZIS3FHd0NnbFBTUnVZQWtXaldpVFZBSUFBQVBiTGd2YTBHN3l0S3cveGVFOWEzRkhLMlJNOGZnT3BHdlRwUVJzZWVNZXIzZWZSS3NpUUFBRHhQaG5hUUZaV1lybFFBRFJxYkNVSUFRSURBZ0hnQkFVQWduSUFaMFVJd21rbmtNYVc3UWJvVGNxNDhGZloxTlQ1b01VajJWUE9CcjN6UG94cmlhYjRTZlY2NWk2SGQxSjJzRnN1VGNJV1VvYmNLWE1jSXlzK0pXa25BaE1Nd1N2V0JobVR6d1JBQ0FrQjRZZ0EwbkN1R3M4T05mYTdnUU1hemdvbzVWUTJBVUVwNlNOekFFaTBhMFNhb0JBSEhnblBKQlFRSi9tZW9Dd3pLNS9QYWpCU3h1SksyR2t2YTdObWxBTE5EczJJTUVXaTRaUmZJVjRWZUpwS0JoemhLak5sRmp1ejYwZythZVQ1Y05pNENVMU5HTHNyZXkvNEFBQUFHQUFjQmdFQjN3Y0FhR0lBSzJjWWRZQ3R4dEJhV0o5aGk3TitIVnplTXNQUXhMSFNxWW43YmZwT2NSeWgzTlpRQUFBQUFBQUFBQUFBQUFBQUFBQUFzV2dBMG5DdUdzOE9OZmE3Z1FNYXpnb281VlEyQVVFcDZTTnpBRWkwYTBTYW9CRUFGYk9NT3NCVzQyZ3RMRSt3eGRtL0RxNXZHV0hvWWxqcFZNVDl0djBuT0k1UTdtc29BQVlVV0dBQUFCN1pjRjdXaE1yTVZ5cEFBSjFCbllNVGlBQUFBQUFBQUFBQUVRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBRy9KaDZFZ1RCUllRQUFBQUFBQUFnQUFBQUFBQTRFNTJBUC9lQVluVmhKa29JSTRZVXJocExmcERGdDZtUktpa3RiRm5xcytRRkFXREFBYWNRMD1cXFxcJ1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChpZCwgJ1RzVmdOS1QwNWNkZTRRNTRzQytSRkM3blRvVHJIazlwcEdnRTVNMGpYdEU9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlc2VyaWFsaXplIGEgY2VsbCB0byBnZXQgdGhlIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhMSA9ICd0ZTZjY2tFQkFRRUFKQUFBUTRBYUZVVGdVUS9rMmkrRGRBb29pYjB3TlZSRVpRMnorOFI5V1F2dkZOcFVKQkFSeUFnSyc7XG4gICAgICBjb25zdCByYXdBZGRyZXNzMSA9ICcwOmQwYWEyNzAyODg3ZjI2ZDE3YzFiYTA1MTQ0NGRlOTgxYWFhMjIzMjg2ZDlmZGUyM2VhYzg1Zjc4YTZkMmExMjAnO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmdldFJhd1dhbGxldEFkZHJlc3NGcm9tQ2VsbChkYXRhMSksIHJhd0FkZHJlc3MxKTtcblxuICAgICAgY29uc3QgZGF0YTIgPSAndGU2Y2NrRUJBUUVBSkFBQVE1Lzc1dzAzNHFQOVQwWlhZM211TTVvdXZGbE5vTlBreTJZVXMrSGN4ZDhvdGpEa0lPUHEnO1xuICAgICAgY29uc3QgcmF3QWRkcmVzczIgPSAnLTE6ZGYzODY5YmYxNTFmZWE3YTMyYmIxYmNkNzE5Y2QxNzVlMmNhNmQwNjlmMjY1YjMwYTU5ZjBlZTYyZWY5NDViMSc7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuZ2V0UmF3V2FsbGV0QWRkcmVzc0Zyb21DZWxsKGRhdGEyKSwgcmF3QWRkcmVzczIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QWRkcmVzc0JvYycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBCT0MgZm9yIGEgZnJpZW5kbHkgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHV0aWxzLmdldEFkZHJlc3NCb2ModGVzdERhdGEuZ2V0TWVtYmVyU3RhY2tGaXh0dXJlLmZyaWVuZGx5QWRkcmVzcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdldE1lbWJlclN0YWNrRml4dHVyZS5ib2MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgQk9DIGZvciBhIHJhdyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0JvYyh0ZXN0RGF0YS5nZXRNZW1iZXJTdGFja0ZpeHR1cmUucmF3QWRkcmVzcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdldE1lbWJlclN0YWNrRml4dHVyZS5ib2MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9uIHJlY292ZXIgLSBOb24tQml0R28gYW5kIFVuc2lnbmVkIFN3ZWVwIFRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTsgLy8gQ3JlYXRlIGEgbmV3IHNhbmRib3ggZm9yIGVhY2ggdGVzdFxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpOyAvLyBSZXN0b3JlIGFsbCBzdHVicyBhZnRlciBlYWNoIHRlc3RcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHJlY292ZXIgZnVuZHMgZm9yIG5vbi1CaXRHbyByZWNvdmVyeScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSByZWNvdmVyeSBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICcxYmFhZmEwZDYyMTc0YmYwYzc4ZjMyNTYzMTg2MTNmZmM0NGI2ZGQ1NGFiMWE2M2MyMTg1MjMyZjkyZWRlOWRhZTFiMjgxOGRiZWI1MmE4MjE1ZmQ1NmY1YTVmMmE5Zjk0YzA3OWNlODllNGRjM2IxY2U2ZWQ2ZTg0Y2U3MTg1NycsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdkdW1teVBhc3NwaHJhc2UnLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciBub24tQml0R28gcmVjb3ZlcnlcbiAgICAgIGNvbnN0IG1vY2tSZXN1bHQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDpcbiAgICAgICAgICAndGU2Y2NrRUJBZ0VBcWdBQjRZZ0FsN1JPaExvOEFKdW9XdEd0Y0swMFB1VXBZM1lrUURqOS8yU25NdnVuTHBJRmJsODk2d2xNdjdmc1VPYytzTUh6RWw4cTN2WDVibTZub0hnaW5QSktCUnpuT3JPN3ZlSXBISUVwaVJMYkg3L2VOZHBTc1JodkwyNjBKUC9mRDB2QUlVMU5HTHRBQkRxQUFBQUFDQUFjQVFCb1FnQi9PZWlOZExlYUw3K08wNFh1dWp1Q2hTR3JSZDdabkZsMmZDZDlGWGR6QXlET0pZQ3dBQUFBQUFBQUFBQUFBQUFBQUZ3WEd0OD0nLFxuICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgIGNvaW46ICd0dG9uJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgdGhlIHJlY292ZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBtb2NrZWQgcmVzdWx0XG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgICAgc2FuZGJveC5zdHViKGJhc2Vjb2luLCAncmVjb3ZlcicpLnJlc29sdmVzKG1vY2tSZXN1bHQpO1xuXG4gICAgICAvLyBDYWxsIHRoZSByZWNvdmVyIGZ1bmN0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdFxuICAgICAgcmVzdWx0LnNlcmlhbGl6ZWRUeC5zaG91bGQuZXF1YWwoXG4gICAgICAgICd0ZTZjY2tFQkFnRUFxZ0FCNFlnQWw3Uk9oTG84QUp1b1d0R3RjSzAwUHVVcFkzWWtRRGo5LzJTbk12dW5McElGYmw4OTZ3bE12N2ZzVU9jK3NNSHpFbDhxM3ZYNWJtNm5vSGdpblBKS0JSem5Pck83dmVJcEhJRXBpUkxiSDcvZU5kcFNzUmh2TDI2MEpQL2ZEMHZBSVUxTkdMdEFCRHFBQUFBQUNBQWNBUUJvUWdCL09laU5kTGVhTDcrTzA0WHV1anVDaFNHclJkN1puRmwyZkNkOUZYZHpBeURPSllDd0FBQUFBQUFBQUFBQUFBQUFBRndYR3Q4PSdcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHJlc3VsdC5jb2luLnNob3VsZC5lcXVhbCgndHRvbicpO1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7IC8vIFJlc3RvcmUgdGhlIHN0dWJiZWQgbWV0aG9kXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSByZWNvdmVyIGZ1bmRzIHVzaW5nIHNlbmRlckpldHRvbkFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJ2UzMWIxNTgwNDAwZGQ0Zjk2ZThjNjI4MWNmYjgzZTI4YWEyNWZjZjhmYjgzMTk5NmE0MDE3NmEzZTMwODc4YzgwZjM2NmZmNjQ2MzU2N2RiZWI3YWE3ZmFlZWI5ZjBmNmQxZmMwYTA5MWVjOTkxOGU4MWFkMmMzNGMzNDVmNGQwJyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICd7XCJpdlwiOlwiLzlDYTE4MG9td0VZS2lNZ1VKOTBKUT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImlwUEZxZzZxSEhZPVwiLFwiY3RcIjpcImVGNlpzdHZxb2JMV0IvVWZqcG1zT2N6NStiZ3ZrTWhxK1poK2Y2VERJYSsrSmtQWVJxNmhyMkxoYmlkQkJDTllIQ2dhaGkzbmQvRmRzRkxRMVVrYU45dDQwbUhiVWRsU1RBNDJUaEg1Rkk5VW0xYUFDbTk2MUV1NWIwTXA3bzZVM3p1VmxhRmF5NlQrL25VV2xPS2p2Ky81TVl3ZnhBL0V6TWQ2eURpZTdxQUlyeUxDUEVJdlJ1dXNIdXB6Y0pXZk4yV0dreHc0RWhHc1NRdnM2MitQQk9DSlVlT0NUaHYySHBzc0pWOWdiNm1qNGxZVlRxdEVheTdHNlZGTmIrVDZPSURVOUhOcmR4Vis1RDF6elY1c0hOV3FEZ2hGMDN3OWFkd3hnVENQU2VaeXdaUERnQnJNL05xSEl0KzhDUGQ4NHdnZXk2MU16NThicjA4emwyaWtrc0RGNVBCOERKekVlbnM2QWJZMGdvc3F6QVBUdU9teTdJUzl2UDlsZkNTYUhEb1M2NmhEL0kweWgxYzZ0aDRnUTFkeml3eCtobkJLTmdxcGVrSno2UDBpc25CM3VyaFpJbnBjMFJ6S2g2UjJqcngraEtOci8yZG9rM2RJd2diWFdHcTdOQW0xbVNSRUVzL0NoVlZlVU1tZVU5VUZtd2hPVGJSSzhDTFlIcUFxeWRSTENleE5tV2hUT1BLeTNXcVM4eUc2V2tIcVNHYjlGR0x5QlJjbVFGSUJwaWhWOFhsNFcyZEI2QVg3SHNJMEYyZFlBQlgwZHJMaXVqMk43bU5yYVJHenhzNWpUMGx6d2pYbXk1Z215YXIyM0RxYTJlQlZPeUdkSzNETDhqWXZnWDBtSjU4L3BLa29ncnh6TXJQa0pvMmErZ1A0T1I3Y0RjTDZUeHJjd25WaVlPT0dQOU9hUVpmY0tLYUFobUpaSkd3enlXemp2eUVJTGtDa3NFU3V5K2M1M3RkTEFrdTUxajJLaVYzMlJnMHRETzNVTmp6ZTBxVGozdCtZZm1UTjFHdWlOanhGeDhkTmJYMnl4ell4QitNemVzdU5aQU11bndWSHJxSnBBaW96UnFwRTc5UjdLUkx3N3FoQmhtNVVlejYwRkJ0bUFmMGtRc0dkaUlsRXdDeVRjQll5QURsWkUrb2pEOCt4MnVpSkJCSXpkMHM3bjlaWTNhQ1l1VFZFWUdmSTlFTUdzOVd6WGNHZVR1Mnh3Mk91YlZIWWt2YUJic3dsckppaElxUkgrY2UvOSt3RGVkY2pic2JvMk1PRHNDSjNzSzlLTDZKak1XUHZoU3dSNmNNYnpEaldyRm1SeXVla21mU1RIdWhRRWRCQUsxMU40My9ab1lZREJNd0J3eGpNd3dBNGhMdUJxamVoWVEyTjBONG82ZnBiR1NBMStnMElKcWtRdmgycW44dGVZU2o2N20xdkdsRUp1ODUyVWpKWjR0ZHQ5clNqUTVUYzIzWUsrWEQya0tyWGJCN3dwcnJhYTlQUWpucnJJVDI1eVgrbDVnN1cwRWNHVGxBY3Y1LzVGQzZmNis3UjhLNVdsTEdycDNZTS8rNTcwZ0JTMnFiSWhsMkp6ZndnVHFqZnloNVpcIn0nLFxuICAgICAgICBiYWNrdXBLZXk6XG4gICAgICAgICAgJ3tcIml2XCI6XCJOWTY1Zm1lMnNNZVlkdTc3U1cvYUx3PT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiMVNFcm1vZm1WN3M9XCIsXCJjdFwiOlwiMjh6UUc3eEEyekZ6QUZ5TkpRZm5JUHZvdTEyUndWUHUzanV6bzJjSURhcmV5Zk1rSVhwMVFEYm82bVNCZnpsSmZPTGdZQW4waVFIOHVDZ25tWUNONENiSzJJZk91a01tUUhHYTRsSE1HVVhyTDFybk5Pc1Vaa2g4WU1jTU12cjdxb0NSamFLTFF2UlVXZXFHdDEvVENvUk9vSHdSODhjdFZoRUt3a2hwUW9JWTBUQmVMZHZsdUdWQjdwRkFUdEVLZ29seVFhaXpaOFlPRnZqUW45QUdoVmxPclJyalJ3ekhYcWl1N3lXOGd1TDZmMEI3WmN6dkZnTGRDVEZWTml5UVFkcjZGbzFNaTRHUy93UktiV2FrRXg3TGt0bDNrdmE4OEJYQVJlOCt1bmRUWjBIMk1ibXpNU3I1ekJZcGZoVlhUTy9heHR0a3RMMkFXcU15OGxSODVZN3RWcDMwN1ZVQThYTlkzbmVUYlR4dVNxbSt4cmxCL1IwbkdGRXZSZmlrR3NrNEtLSE9RNkhGbmVOUmRoai9rNmR4RTJWeUg5SXdRNmorTHhqbXMrcGcxeWI1NmlCbkdXTTFzVTBiZEthSkZUUlpHZGlGLy9sUWFLVVZQY0gyUmVOSnNSSmFVOGdvNWcxSEJ1T0hlTXFkbmxCN3VLMk1RS05QQ1JiM3kwWkZReDh5Z2lkT2FBRjZhaUpwejNMZXduWGhzdEQxeTlsWjB5WTlxWEltQjRsRkNyTXJtQm5IUGpFeW16bXJLK3BjaGQ0ZEJKSHRKaXF3bmd4cXBMNmwrYWE2OXhHZXlXRHNWbU1rbFpWUHdkUzVsKzVTVnlnUUdGNU0xczFJN1JmYlRXYjdXbEhGRkN2MEMxSi90cEtUM0J6aUdFZlA1VmowYXFlcWljZ21UUkZ3dmhSMUhpTm1HdkJBTkhNL1B2U3Y1K2N5Umo4RzdFSG1UZXVIZWdoTzJoOVp3b1piaWhuU215Yi9uY1NNOU1neHJTUjRYejdHMzNobmJ1amZIVjRJcEJHL3ZXVHBKVUtJMTFMZ3dyNzFVMmNWQ245V0ErVFk5Q1hzR2tmZU9RYmJYbmdvUHQ0cE9oaWtKS1FZZzlyT3ZnYVIraFpBT1NJdGs2cFdYb3pBREQ4c1NmczdSNituL3dsa0V2dVBJMWNmY2ltYkhMUTZvSDlrVGtEVS9MYk96bXRERGQ4TVlaVWJxdnB5RVM3YkZ1am13NnRjMVpJQkxEc1NXRDJyNHNpdjBLUGVWcjVXdW9KU1l3NlFSZHVBcnlPMU5EdzRTazFhbHlwZ09YeEphcGNYZ3F3aTF2OUhkUnpHMUEwSVVMRFp0eUVjSGpVQkZXM3ZZcUh4VmMvai96MmhuQUMvU2J0UmNDY1pLZ0RlclROTGJQdzNpVFFRZkxpdytMUGtlWmRPNFVVd3NJbWFQM3l3YjExMmllbGpXSm9VdHVZQVlDRW56NWs5c1AzUGZDRGRnU2I1QlJKWklhRGs3aTN2V05YVzF5ZExOZVh6UllwbXI0dnlNa0dFN2FnTC8rSTVTWmg1RVZLL0NZY0FYZ1kyTXAvVmZaV21lTWJGVlBYUzg5eExBd1duUVE9PVwifScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdHaGdoamZidmRrbW4hMjM0JyxcbiAgICAgICAgc2VuZGVySmV0dG9uQWRkcmVzczogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrUHJvdmlkZXIgPSB7XG4gICAgICAgIGdldEJhbGFuY2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCcxMDAwMDAwMDAwJyksXG4gICAgICAgIGdldEVzdGltYXRlRmVlOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgc291cmNlX2ZlZXM6IHtcbiAgICAgICAgICAgIGluX2Z3ZF9mZWU6IDEwMDAsXG4gICAgICAgICAgICBzdG9yYWdlX2ZlZTogMTAwMCxcbiAgICAgICAgICAgIGdhc19mZWU6IDEwMDAsXG4gICAgICAgICAgICBmd2RfZmVlOiAxMDAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxsOiBzYW5kYm94LnN0dWIoKS5jYWxsc0Zha2UoKGFkZHJlc3MsIG1ldGhvZCwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2dldF93YWxsZXRfZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGFjazogW1xuICAgICAgICAgICAgICAgIFsnbnVtJywgJzUwMDAwMDAwMDAnXSxcbiAgICAgICAgICAgICAgICBbJ251bScsICcwJ10sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN0YWNrOiBbXSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHNlbmQ6IHNhbmRib3guc3R1YigpLmNhbGxzRmFrZSgobWV0aG9kLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICBpZiAobWV0aG9kID09PSAncnVuR2V0TWV0aG9kJykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICAgIGdhc191c2VkOiAwLFxuICAgICAgICAgICAgICBzdGFjazogW1snbnVtJywgJzAnXV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3NlbmRCb2MnKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb2s6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIHNhbmRib3guc3R1YihUb253ZWIsICdIdHRwUHJvdmlkZXInKS5yZXR1cm5zKG1vY2tQcm92aWRlcik7XG5cbiAgICAgIGNvbnN0IGRlY3J5cHRTdHViID0gc2FuZGJveC5zdHViKGJpdGdvLCAnZGVjcnlwdCcpO1xuICAgICAgZGVjcnlwdFN0dWIub25GaXJzdENhbGwoKS5yZXNvbHZlcyhKU09OLnN0cmluZ2lmeSh7IGR1bW15OiAndXNlclNpZ25pbmdNYXRlcmlhbCcgfSkpO1xuICAgICAgZGVjcnlwdFN0dWIub25TZWNvbmRDYWxsKCkucmVzb2x2ZXMoSlNPTi5zdHJpbmdpZnkoeyBkdW1teTogJ2JhY2t1cFNpZ25pbmdNYXRlcmlhbCcgfSkpO1xuXG4gICAgICBzYW5kYm94XG4gICAgICAgIC5zdHViKEVERFNBTWV0aG9kcywgJ2dldFRTU1NpZ25hdHVyZScpXG4gICAgICAgIC5yZXNvbHZlcyhcbiAgICAgICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgICAgICcxYmFhZmEwZDYyMTc0YmYwYzc4ZjMyNTYzMTg2MTNmZmM0NGI2ZGQ1NGFiMWE2M2MyMTg1MjMyZjkyZWRlOWRhJyArXG4gICAgICAgICAgICAgICdlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgICAgICdoZXgnXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICByZXN1bHQuc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uIGlmIHVzZXJLZXkgYW5kIGJhY2t1cEtleSBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSByZWNvdmVyeSBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciB1bnNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgbW9ja1Vuc2lnbmVkVHggPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDpcbiAgICAgICAgICAndGU2Y2NrRUJBZ0VBcWdBQjRZZ0FsN1JPaExvOEFKdW9XdEd0Y0swMFB1VXBZM1lrUURqOS8yU25NdnVuTHBJRmJsODk2d2xNdjdmc1VPYytzTUh6RWw4cTN2WDVibTZub0hnaW5QSktCUnpuT3JPN3ZlSXBISUVwaVJMYkg3L2VOZHBTc1JodkwyNjBKUC9mRDB2QUlVMU5HTHRBQkRxQUFBQUFDQUFjQVFCb1FnQi9PZWlOZExlYUw3K08wNFh1dWp1Q2hTR3JSZDdabkZsMmZDZDlGWGR6QXlET0pZQ3dBQUFBQUFBQUFBQUFBQUFBQUZ3WEd0OD0nLFxuICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgIGNvaW46ICd0dG9uJyxcbiAgICAgICAgc2lnbmFibGVIZXg6ICdkZDk4ZWI1YTM3MDBjMDIwMzIzNzA5NWNhMWMwZDUyODhiYzBkNjUwYTliNTlmN2I4MWJhYzU1MmY3NjEzN2RmJyxcbiAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICBwYXJzZWRUeDoge1xuICAgICAgICAgIGlucHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnVVFCTDJpZENYUjRBVGRRdGFOYTRWcG9mY3BTeHV4SWdISDdfc2xPWmZkT1hTYWRKJyxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICAgICAgdmFsdWU6IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnVVFCTDJpZENYUjRBVGRRdGFOYTRWcG9mY3BTeHV4SWdISDdfc2xPWmZkT1hTYWRKJyxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICc5OTkwMDAwMDAnLFxuICAgICAgICAgICAgICBjb2luTmFtZTogJ3R0b24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNwZW5kQW1vdW50OiA5OTkwMDAwMDAsXG4gICAgICAgICAgdHlwZTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICBmZWU6IDEwMDAwMDAsXG4gICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tUeFJlcXVlc3QgPSB7XG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IG1vY2tVbnNpZ25lZFR4LFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB3YWxsZXRDb2luOiAndG9uJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tUeFJlcXVlc3RzID0ge1xuICAgICAgICB0eFJlcXVlc3RzOiBbbW9ja1R4UmVxdWVzdF0sXG4gICAgICB9O1xuXG4gICAgICAvLyBTdHViIHRoZSByZWNvdmVyIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgbW9ja2VkIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4sICdyZWNvdmVyJykucmVzb2x2ZXMobW9ja1R4UmVxdWVzdHMpO1xuXG4gICAgICAvLyBDYWxsIHRoZSByZWNvdmVyIGZ1bmN0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdFxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eFJlcXVlc3RzJyk7XG4gICAgICByZXN1bHQudHhSZXF1ZXN0c1swXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHJhbnNhY3Rpb25zJyk7XG4gICAgICByZXN1bHQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Vuc2lnbmVkVHgnKTtcbiAgICAgIHJlc3VsdC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnNob3VsZC5lcXVhbChtb2NrVW5zaWduZWRUeCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRha2UgT1ZDIG91dHB1dCBhbmQgZ2VuZXJhdGUgYSBzaWduZWQgc3dlZXAgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBEZWZpbmUgdGhlIHBhcmFtZXRlcnMgKG1vY2sgT1ZDIHJlc3BvbnNlKVxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBvdmNSZXNwb25zZToge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeDpcbiAgICAgICAgICAgICd0ZTZjY2tFQkFnRUFxZ0FCNFlnQWw3Uk9oTG84QUp1b1d0R3RjSzAwUHVVcFkzWWtRRGo5LzJTbk12dW5McElGYmw4OTZ3bE12N2ZzVU9jK3NNSHpFbDhxM3ZYNWJtNm5vSGdpblBKS0JSem5Pck83dmVJcEhJRXBpUkxiSDcvZU5kcFNzUmh2TDI2MEpQL2ZEMHZBSVUxTkdMdEFCRHFBQUFBQUNBQWNBUUJvUWdCL09laU5kTGVhTDcrTzA0WHV1anVDaFNHclJkN1puRmwyZkNkOUZYZHpBeURPSllDd0FBQUFBQUFBQUFBQUFBQUFBRndYR3Q4PScsXG4gICAgICAgICAgc2NhbkluZGV4OiAwLFxuICAgICAgICAgIGxhc3RTY2FuSW5kZXg6IDAsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBNb2NrIHRoZSBleHBlY3RlZCByZXN1bHQgZm9yIHRoZSBzaWduZWQgc3dlZXAgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IG1vY2tTaWduZWRTd2VlcFR4biA9IHtcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VyaWFsaXplZFR4OlxuICAgICAgICAgICAgICAndGU2Y2NrRUJBZ0VBcWdBQjRZZ0FsN1JPaExvOEFKdW9XdEd0Y0swMFB1VXBZM1lrUURqOS8yU25NdnVuTHBJRmJsODk2d2xNdjdmc1VPYytzTUh6RWw4cTN2WDVibTZub0hnaW5QSktCUnpuT3JPN3ZlSXBISUVwaVJMYkg3L2VOZHBTc1JodkwyNjBKUC9mRDB2QUlVMU5HTHRBQkRxQUFBQUFDQUFjQVFCb1FnQi9PZWlOZExlYUw3K08wNFh1dWp1Q2hTR3JSZDdabkZsMmZDZDlGWGR6QXlET0pZQ3dBQUFBQUFBQUFBQUFBQUFBQUZ3WEd0OD0nLFxuICAgICAgICAgICAgc2NhbkluZGV4OiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGxhc3RTY2FuSW5kZXg6IDAsXG4gICAgICB9O1xuXG4gICAgICAvLyBTdHViIHRoZSBjcmVhdGVCcm9hZGNhc3RhYmxlU3dlZXBUcmFuc2FjdGlvbiBmdW5jdGlvbiB0byByZXR1cm4gdGhlIG1vY2tlZCByZXN1bHRcbiAgICAgIHNhbmRib3guc3R1YihiYXNlY29pbiwgJ2NyZWF0ZUJyb2FkY2FzdGFibGVTd2VlcFRyYW5zYWN0aW9uJykucmVzb2x2ZXMobW9ja1NpZ25lZFN3ZWVwVHhuKTtcblxuICAgICAgLy8gQ2FsbCB0aGUgY3JlYXRlQnJvYWRjYXN0YWJsZVN3ZWVwVHJhbnNhY3Rpb24gZnVuY3Rpb25cbiAgICAgIGNvbnN0IHJlY292ZXJ5VHhuID0gYXdhaXQgYmFzZWNvaW4uY3JlYXRlQnJvYWRjYXN0YWJsZVN3ZWVwVHJhbnNhY3Rpb24ocGFyYW1zKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdFxuICAgICAgcmVjb3ZlcnlUeG4udHJhbnNhY3Rpb25zWzBdLnNlcmlhbGl6ZWRUeC5zaG91bGQuZXF1YWwoXG4gICAgICAgICd0ZTZjY2tFQkFnRUFxZ0FCNFlnQWw3Uk9oTG84QUp1b1d0R3RjSzAwUHVVcFkzWWtRRGo5LzJTbk12dW5McElGYmw4OTZ3bE12N2ZzVU9jK3NNSHpFbDhxM3ZYNWJtNm5vSGdpblBKS0JSem5Pck83dmVJcEhJRXBpUkxiSDcvZU5kcFNzUmh2TDI2MEpQL2ZEMHZBSVUxTkdMdEFCRHFBQUFBQUNBQWNBUUJvUWdCL09laU5kTGVhTDcrTzA0WHV1anVDaFNHclJkN1puRmwyZkNkOUZYZHpBeURPSllDd0FBQUFBQUFBQUFBQUFBQUFBRndYR3Q4PSdcbiAgICAgICk7XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMF0uc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHJlY292ZXJ5VHhuLmxhc3RTY2FuSW5kZXguc2hvdWxkLmVxdWFsKDApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
867
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3Rvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QztBQUM1Qyw0Q0FBbUQ7QUFDbkQsbUNBQWtFO0FBQ2xFLDZDQUErQjtBQUMvQixvREFBNEI7QUFDNUIsMkRBQTZDO0FBQzdDLDhDQUFrRztBQUNsRyxvREFBNEI7QUFDNUIsZ0VBQXdDO0FBQ3hDLG9EQUE0QjtBQUM1QixvREFBNkM7QUFFN0MsUUFBUSxDQUFDLE1BQU0sRUFBRTtJQUNmLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDM0IsTUFBTSxjQUFjLEdBQUc7UUFDckI7WUFDRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDL0UsTUFBTSxFQUFFLEVBQUU7U0FDWDtRQUNEO1lBQ0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2xHLE1BQU0sRUFBRSxFQUFFO1NBQ1g7S0FDRixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsR0FBRztR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b0JBQ3ZCLEdBQUcsa0JBQWtCO29CQUNyQixRQUFRLEVBQUUsa0JBQWtCO2lCQUM3QixDQUFDO2dCQUVGLE1BQU0sUUFBUTtxQkFDWCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7cUJBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDJFQUEyRSxDQUFDLENBQUM7WUFDekcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEksIGVuY3J5cHQgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUb24sIFRvblBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLCBUdG9uIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy90b24nO1xuaW1wb3J0IHsgRUREU0FNZXRob2RzLCBNUENSZWNvdmVyeU9wdGlvbnMsIE1QQ1R4LCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCBUb253ZWIgZnJvbSAndG9ud2ViJztcbmltcG9ydCB7IE1QU1V0aWwgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuXG5kZXNjcmliZSgnVE9OOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJhc2Vjb2luO1xuICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0b24nLCBUb24uY3JlYXRlSW5zdGFuY2UpO1xuICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3R0b24nLCBUdG9uLmNyZWF0ZUluc3RhbmNlKTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGNvbnN0IHR4UHJlYnVpbGRMaXN0ID0gW1xuICAgIHtcbiAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gICAge1xuICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IHR4UHJlYnVpbGRCb3VuY2VhYmxlTGlzdCA9IFtcbiAgICB7XG4gICAgICB0eEhleDogQnVmZmVyLmZyb20odGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnR4Qm91bmNlYWJsZSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHR4SW5mbzoge30sXG4gICAgfSxcbiAgICB7XG4gICAgICB0eEhleDogQnVmZmVyLmZyb20odGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eEJvdW5jZWFibGUsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgdHhQYXJhbXNMaXN0ID0gW1xuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudF0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCB0eFBhcmFtc0JvdW5jZWFibGVMaXN0ID0gW1xuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50Qm91bmNlYWJsZV0sXG4gICAgfSxcbiAgICB7XG4gICAgICByZWNpcGllbnRzOiBbdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlXSxcbiAgICB9LFxuICBdO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHRoZSByaWdodCBpbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRvbiA9IGJpdGdvLmNvaW4oJ3RvbicpO1xuICAgIGNvbnN0IHR0b24gPSBiaXRnby5jb2luKCd0dG9uJyk7XG5cbiAgICB0b24uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHRvbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHRvbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnR3JhbScpO1xuICAgIHRvbi5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlOSk7XG5cbiAgICB0dG9uLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0dG9uJyk7XG4gICAgdHRvbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHR0b24uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgR3JhbScpO1xuICAgIHR0b24uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IHRyYW5zYWN0aW9uOiAnLCAoKSA9PiB7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dG9uJyk7XG4gICAgdHhQYXJhbXNMaXN0LmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHR4UGFyYW1zTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gdHhQcmVidWlsZExpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHhQYXJhbXNCb3VuY2VhYmxlID0gdHhQYXJhbXNCb3VuY2VhYmxlTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0eFByZWJ1aWxkQm91bmNlYWJsZSA9IHR4UHJlYnVpbGRCb3VuY2VhYmxlTGlzdFtpbmRleF07XG5cbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcblxuICAgICAgICBjb25zdCBpc0JvdW5jZWFibGVUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtc0JvdW5jZWFibGUsXG4gICAgICAgICAgdHhQcmVidWlsZDogdHhQcmVidWlsZEJvdW5jZWFibGUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICBpc0JvdW5jZWFibGVUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIG51bWJlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4UGFyYW1zKSk7XG4gICAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50c1swXS5hbW91bnQgPSAyMDAwMDAwMDtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIHN0cmluZ3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4UGFyYW1zKSk7XG4gICAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50c1swXS5hbW91bnQgPSAnMjAwMDAwMDAnO1xuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2hlbiByZWNpcGllbnRzIGFtb3VudHMgYXJlIG51bWJlciBhbmQgYW1vdW50IGlzIHNhbWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgICAgLnNob3VsZC5yZXNvbHZlZFdpdGgodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudHMgYW1vdW50cyBhcmUgc3RyaW5nIGFuZCBhbW91bnQgaXMgc2FtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICAuc2hvdWxkLnJlc29sdmVkV2l0aCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50IGFkZHJlc3MgYXJlIG5vbiBib3VuY2VhYmxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0eFBhcmFtcykpO1xuICAgICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9IG5ldyBUb253ZWIuQWRkcmVzcyhcbiAgICAgICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHNbMF0uYWRkcmVzc1xuICAgICAgICApLnRvU3RyaW5nKHRydWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7fTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCByZWNpcGllbnQgaGF2aW5nIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3Rlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbkZvck1lbW9JZC5yZWNpcGllbnRdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb25Gb3JNZW1vSWQudHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICB9IGFzIGFueSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXhwbGFpbiBUcmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndHRvbicpO1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pKSBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAnd2l0aGRyYXdBbW91bnQnXSxcbiAgICAgICAgaWQ6ICd0dXlPa3lGVU12X25lVl9GZU5CSDI0TmQ0Y01MMmpVZ0RQNHpqR2t1T0ZJPScsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICAgIHdpdGhkcmF3QW1vdW50OiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIG5vbi1ib3VuY2VhYmxlIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdG9BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICAgIGZyb21BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiAndHV5T2t5RlVNdl9uZVZfRmVOQkgyNE5kNGNNTDJqVWdEUDR6akdrdU9GST0nLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6ICdVTktOT1dOJyB9LFxuICAgICAgICB3aXRoZHJhd0Ftb3VudDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaW5nbGUgbm9taW5hdG9yIHdpdGhkcmF3IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4SWQsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICAgIHdpdGhkcmF3QW1vdW50OiAnOTMyMTc4MTEyMzMwMDAwJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgbm9uLWJvdW5jZWFibGUgc2luZ2xlIG5vbWluYXRvciB3aXRoZHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gKGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4LCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB0b0FkZHJlc3NCb3VuY2VhYmxlOiBmYWxzZSxcbiAgICAgICAgZnJvbUFkZHJlc3NCb3VuY2VhYmxlOiBmYWxzZSxcbiAgICAgIH0pKSBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAnd2l0aGRyYXdBbW91bnQnXSxcbiAgICAgICAgaWQ6IHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHhJZCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24ucmVjaXBpZW50Qm91bmNlYWJsZS5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlLmFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiAnVU5LTk9XTicgfSxcbiAgICAgICAgd2l0aGRyYXdBbW91bnQ6ICc5MzIxNzgxMTIzMzAwMDAnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIG1pc3NpbmcgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiAncmFuZG9tU3RyaW5nJyB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGFyc2UgVHJhbnNhY3Rpb25zOiAnLCAoKSA9PiB7XG4gICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dG9uJyk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnNMaXN0ID0gW3Rlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlTGlzdCA9IFtcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdFUUNTQmpSM2ZVT0w5OFdUdzJGX0lUNEJyY3FqWkpXVkxXVVN6NVdRRHBhTDlKcGwnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnRVFBYkp1Zy1rLXR1ZldNakVDMVJLU00waWlKVERVY1lrQzd6V0FOSHJrVDU1Rm9sJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMjM0MDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICBdO1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGVMaXN0ID0gW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ1VRQ1NCalIzZlVPTDk4V1R3MkZfSVQ0QnJjcWpaSldWTFdVU3o1V1FEcGFMOU1lZycsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdVUUFiSnVnLWstdHVmV01qRUMxUktTTTBpaUpURFVjWWtDN3pXQU5IcmtUNTVBZmcnLFxuICAgICAgICAgIGFtb3VudDogJzEyMzQwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUxpc3QgPSBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnRVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYd3RHJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ0VRQTBpOC1DZEduRl9EaFVISGY5MlIxT05INnNJQTl2TFpfV0xjQ0loZkJCWHd0RycsXG4gICAgICAgICAgYW1vdW50OiAnMTIzNDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uT3V0cHV0c1Jlc3BvbnNlQm91bmNlYWJsZUxpc3QgPSBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnVVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYMWFEJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ1VRQTBpOC1DZEduRl9EaFVISGY5MlIxT05INnNJQTl2TFpfV0xjQ0loZkJCWDFhRCcsXG4gICAgICAgICAgYW1vdW50OiAnMTIzNDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIHRyYW5zYWN0aW9uc0xpc3QuZm9yRWFjaCgoXywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25zTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlID0gdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGUgPSB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlQm91bmNlYWJsZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2UgPSB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlID0gdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlTGlzdFtpbmRleF07XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgYSBUT04gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcblxuICAgICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICBpbnB1dHM6IHRyYW5zYWN0aW9uSW5wdXRzUmVzcG9uc2UsXG4gICAgICAgICAgb3V0cHV0czogdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgYSBub24tYm91bmNlYWJsZSBUT04gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHRvQWRkcmVzc0JvdW5jZWFibGU6IGZhbHNlLFxuICAgICAgICAgIGZyb21BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICAgIH0gYXMgVG9uUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpO1xuXG4gICAgICAgIHBhcnNlZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIGlucHV0czogdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGUsXG4gICAgICAgICAgb3V0cHV0czogdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2UgYSBUT04gdHJhbnNhY3Rpb24gd2hlbiBleHBsYWluVHJhbnNhY3Rpb24gcmVzcG9uc2UgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdHViID0gc2lub24uc3R1YihUb24ucHJvdG90eXBlLCAnZXhwbGFpblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHN0dWIucmVzb2x2ZXModW5kZWZpbmVkKTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4OiB0cmFuc2FjdGlvbiB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgICAgICBzdHViLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndHRvbicpO1xuICAgIGxldCBrZXljaGFpbnM7XG4gICAgbGV0IGNvbW1vbktleWNoYWluO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbW1vbktleWNoYWluID1cbiAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJztcbiAgICAgIGtleWNoYWlucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNjQyNGMzNTNlYWY3OGQwMDA3NjZlOTU5NDk4Njg0NjgnLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAne1wiaXZcIjpcImNaZDVpN0w0Unh0d3JBTFcycks3VUE9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCI1emdvSDFCZDNGdz1cIixcImN0XCI6XCI5dlZsblhGUnRyTTlGVkVvK2QyY2hiR0hsTTlsRlplbXVlQnVBczNCSWtQbzMzRm83anp3d05LL2tJV2tFeWcrTm1FQmQ1SWFxQVMxNTdudnZ2d3p6c21NV2xRZFV6OXFibVhOdjNwZzk4N2NYRlIwOGV4Uys0dWh3UDFZTk9qSlRSdlJOY085WnFIYjQ2ZDRmbXlKL3lDOS9zdXNDZ2U3ci9Fc2JhTjVDM2FmdjFkenlidXE5MTJGd2FRRWxaTFlZcDVCSUN1ZEZPTVo5azBVRE1mS00vUE1Ea0g3V2V4b0dIcjlHS3EvYmdDSDJCMzlUWlp5SEtVNlV5NDdsWGVwMnM2aDBEck13SE9ybm1pTDNEWmpPajg4WW52cGhsenh1bzRlT2xEMlVIaWEyK252SWFJU1lzMjlQcjBEQXZSRXV0Y2h2Y0JwRXhqMWtXV1B2N2hRWXJ2OEYwTkFkYXRzYldsM3creEt5ZmlNS28xVVNscnd5SnZpeXBHdFF0WE9KeXcwWFBOMHJ2MitMNWxXOEJianB6SGZZWU4xM2ZKVGVkbEdURmhoa3pWdGJiUEFLRTAya3g3ekNKY2pZYWlleGRTVHNyRExTY1lOVDkvSmhkdDI3S3Bzb29laHdWb2hMZlNLejR2YkZmUnUyTVBadzMvK2MvaGZpSk5ndHo2ZXNXYm54R3JjRThVMkl3UFlDYUsrR2hrNERjcVdOSW5pNTlSSTVCNWtBc1FPVG9JSTQwcVBONTEwdVRneEJTUE83cTdNSGdreGRkNENxQnErb2pyOWowUDdvYW84RTVZK0NCREpyb2pEb0NoMW9DQ0RXOXZvMmRYbFZjRDhTSWJ3N1UvOUFmdkViQTR4eUUvNW1kMU03Q0l3TG5XczJZbnYwWXRhS29xaGRTOXg2Rm1IbE1EaE4vREtIaW5yd21vd3RyVFQ4MmZPa3BPNWc5c2FTbWdVN1F5M2dMdDh0K1Z3ZEV5ZUZlUVVLUlN5Y2k4cWdxWFFhWklnNCthWGdhU09ubENGTXRtQjhla1l4RWhUWTV1elJmck5nUzRzMVFlcUZCcE50VUYrWWRpMjk3cGJWWG5Kb1hBTitTVldkODBHQ3greUkyZHBWQzg5azNyT1dLOVdleXFsbnp1TEpXcDJSSU9COWNkVzhHRnYvZk4rUUFKcFllVnhPRTQrblpEc0tuc2o4bktjZzl0NERseDFHNmdMTTEvVnE5WXhOTGJ1enVSQzBhc1VZdmRNbm9NdnN6bXBtKytUeG5kWWlzZ05Zc2NwWlNvejd3dmNhekpORVBmaFBWakVrZDZ0VVV1TjRHTTM1SDBEbUtDVVFOVCthNkI2aG1IbFRadmp4aXlHQWc1Ylk1OWhkanZKKzIyUWR1YXpsRUVDNkxJM0hyQTd1SzBUcHBsV3pTMXRDSUZ2VE1VaGo2NURFWm1OSjIrWlk5YlE0dnNNZitEUlIzT09HNHQrRE1sTmZqT2Qzek52M1FvWTk1QmpmV3ByeUZ3UHpEcTdiQ1A2N0pEc29qN2oyVFk1RlJTclJrRDc3SDBFd2x1eDJjV2ZqUlR3Y01IY2RReHh1VjBPUDBhTmpHRGp5YkZOXCJ9JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNjQyNGMzNTNlYWY3OGQwMDA3NjZlOTYxMzdkNDQwNGInLFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgICAnMTliZGZlMmE0YjQ5OGEwNTUxMTM4MTIzNWE4ODkyZDU0MjY3ODA3YzRhM2Y2NTRlMzEwYjkzOGI4YjQyNGZmNGFkZWRiZTkyZjRjMTQ2ZGU2NDFjNjc1MDhhOTYxMzI0Yzg1MDRjZGY4ZTBjMGFjYmI2OGQ2MTA0Y2NjY2Q3ODEnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAgICd7XCJpdlwiOlwidmkwZFBlZi9SeDdrRy9wUnlTUWk2UT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjllZmhRc2lFdlZzPVwiLFwiY3RcIjpcIkd3NmF0dmY2Z3hLenNqdGwzeHNlaXBPM3JBeHAxbUF6N1l1MWloRnNpNS9sZjJ2TVplZ0FwZ1p4K3B5SUxGUzlLS0xIYk5GM1U2V2dTWWRycjJ0NHZ6ZExzWGtIMVdJeGZIUytjZDJDNU41OXlBRFpEblBKQlQ2cHYvSVJ2YVllbFAwQ2szbklZUTJoU01tOG9wK1ZPV0MvU3pIZWg3c2xZRHF3RUhUR2FuMFdpZ2Z2azF5UmQ3Q0NKVGFFQW9tbmMvNGVGaTJOWTNYM2d0LzNvcHk5SUFna25ud1VGb2huOTZFV3BFUTBGNnBiekgvWjhWRjZnRitEVWNyckJ5QXhFeFVQbkhRWmlGazNZSFUvdlZWNEZ4QlUvbVZBRTh4QnNCbjV1bDVlNVNVTVBmYzdUQnVKV3Y0QkJ5VE5nOXhEU2hGLzkxWXgybmJmVW01ZDlRbU04bHBLZ3p6UXZjSzhQT0FQazg3Z1JDdUtuc0doNXZOUzBVcHBrSGMrb2NmelJRbEdBNmp6ZTdReXlRTzByTWo1THk4a1dqd2sydklTdktZSFlTMU5SN1ZVNTQ5VUlYbzdOWGphdHVuS1NjMytJcmVvUlVISXNoaWFMZzZobCtweENDdWMwcVE0M1YwbWRJZkNqVE44Z2tHV0xOazhSN3RBR1B6OWp5YXBRUGNQRUdIZ0V6MEFUSWk2eU1OV0NzaWJTMmVMaUUxdVZFSk9Ob000bGs2RlBsM1EyQ0hiVzJNZUVicWpZOGhiYXcxOG1OYjJ4U0JIL0Z3cGlpYWwrVHZpMmltcWduQ080WnBPOWJsbEtmdFpQY1F5MHN0TitlR0JsYjV1ZnlmbEtrRFNpQ2hIWXJvR2pFcG1pRmljZGRlNDhjSnN6RjUydUtObmYxcTY3ZkE5L1MyRkFIUWFiM0VYb2p4SDJHYmsra2tWMmgvVFlLRkZaU1dDM3ZpNGU4bU8rdmpNVWNSMEFkc2dQRnlFSXowU0NHdWJhM0NuVExOZEV1WndzYXVBZUhreDJ2VVRuUmdKUFZnTmVldVhtc1ZHNzZTeTJnZ0pIdWFsczBIajhVMlhkYTBxTzFSdUZmb0NXZnNzOXduNkhHUndQUGtoU0IvOG9OZ3VBcW1SVkdLa2Q4Wnd0M0l2clRkOWZrMC9yRkZESktHejdXeU5Ia1lnVW1OaUdjSXREMTJ2MGp4N0ZaNTJFSnpsM0F2MVJ5SlVRSzE4KzhFWVBoM1NHaVU5ZHQ3VlgwYUYwdW82Sm91S2hPZWxkVXZNUCtBdWdRejhmVWNsd1RRc2Jib1ZnMjdZeG8wRHlBVFZ3VGhXNWE1NlI2UWY1WmlRSmx1RnV6czV5OThycTBTNXEwNDZsRTZvM3ZWbUpwRWR3amVTQ0pvRVQ1Q0w0blRna1h5V3ZobTRlQjh1L2U2NmwzbzBxYmFTeDhxOVlZbVQ5RXBSY2w1VFA0VGhMQktFVFlkelZ2ZzRleGpRZmVrdE1hdGs1RXlVcEVJaFpQWGg1dlhwSlplc2RmTzlMSjh6VGFIQnNCakRQVTdjZE5nUU1iZWJwYXRhUmk4QTBlbDIvSUpYbCtFK29sZ0F6NXpDNGkyTzFRPT1cIn0nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc2NDI0YzM1M2VhZjc4ZDAwMDc2NmU5NTEwYjEyNWZiYScsXG4gICAgICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJyxcbiAgICAgICAgICB2ZXJpZmllZFZzc1Byb29mOiB0cnVlLFxuICAgICAgICAgIGlzQml0R286IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSB3ZWxsIGZvcm1hdHRlZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGFuIGluY29ycmVjdGx5IGZvcm1hdHRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnd3JvbmdhZGRyZXNzJztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsaWRhdGluZyBhIG5vbi1ib3VuY2VhYmxlIGFkZHJlc3MgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdVUUEwaTgtQ2RHbkZfRGhVSEhmOTJSMU9OSDZzSUE5dkxaX1dMY0NJaGZCQlgxYUQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYWRkcmVzc2VzIHdpdGggbWVtb0lkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MxID0gJ0VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRkw3bj9tZW1vSWQ9MTIzJztcbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaT9tZW1vSWQ9MTIzJztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MxKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzMikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgaXNXYWxsZXRBZGRyZXNzIHdpdGggdmFsaWQgYWRkcmVzcyBmb3IgaW5kZXggNCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5ld0FkZHJlc3MgPSAnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJztcbiAgICAgIGNvbnN0IGluZGV4ID0gNDtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBjb21tb25LZXljaGFpbiwgYWRkcmVzczogbmV3QWRkcmVzcywgaW5kZXgsIGtleWNoYWlucyB9O1xuICAgICAgKGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpc1dhbGxldEFkZHJlc3Mgd2l0aCB2YWxpZCBhZGRyZXNzYW5kIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbmV3QWRkcmVzcyA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24/bWVtb0lkPTQnO1xuICAgICAgY29uc3QgaW5kZXggPSA0O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzOiBuZXdBZGRyZXNzLCBpbmRleCwga2V5Y2hhaW5zIH07XG4gICAgICAoYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBpc1dhbGxldEFkZHJlc3Mgd2l0aCB2YWxpZCBhZGRyZXNzIGZvciBpbmRleCA1IGFuZCBhZGRyZXNzIGlzIGZvciBhIGRpZmZlcmVudCBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzc0ZvckluZGV4NSA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nO1xuICAgICAgY29uc3QgaW5kZXggPSA1O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzOiB3cm9uZ0FkZHJlc3NGb3JJbmRleDUsIGluZGV4LCBrZXljaGFpbnMgfTtcbiAgICAgIChhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGlzV2FsbGV0QWRkcmVzcyB3aGVuIGtleWNoYWlucyBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzLCBpbmRleCB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaXNXYWxsZXRBZGRyZXNzIHdoZW4gbmV3IGFkZHJlc3MgaXMgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICdiYWRBZGRyZXNzJztcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBjb21tb25LZXljaGFpbiwgYWRkcmVzczogd3JvbmdBZGRyZXNzLCBpbmRleCB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyksIHtcbiAgICAgICAgbWVzc2FnZTogYGludmFsaWQgYWRkcmVzczogJHt3cm9uZ0FkZHJlc3N9YCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXRpbCBjbGFzcyAnLCAoKSA9PiB7XG4gICAgbGV0IGNvbW1vbktleWNoYWluO1xuICAgIGxldCBkZXJpdmVkUHVibGljS2V5O1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb21tb25LZXljaGFpbiA9XG4gICAgICAgICcxOWJkZmUyYTRiNDk4YTA1NTExMzgxMjM1YTg4OTJkNTQyNjc4MDdjNGEzZjY1NGUzMTBiOTM4YjhiNDI0ZmY0YWRlZGJlOTJmNGMxNDZkZTY0MWM2NzUwOGE5NjEzMjRjODUwNGNkZjhlMGMwYWNiYjY4ZDYxMDRjY2NjZDc4MSc7XG4gICAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgICAgZGVyaXZlZFB1YmxpY0tleSA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCAnbS8nICsgMCkuc2xpY2UoMCwgNjQpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFkZHJlc3NGcm9tUHVibGljS2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgYm91bmNlYWJsZSBhZGRyZXNzIGJ5IGRlZmF1bHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5KSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdFUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmF2UTUnXG4gICAgICAgICk7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LCB0cnVlKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdFUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmF2UTUnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgbm9uLWJvdW5jZWFibGUgYWRkcmVzcyB3aGVuIHJlcXVlc3RlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKGF3YWl0IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGRlcml2ZWRQdWJsaWNLZXksIGZhbHNlKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdVUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmFxbjgnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgcmF3IGFkZHJlc3Mgd2hlbiByZXF1ZXN0ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LCBmYWxzZSwgZmFsc2UpKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgJzA6ZDU3YjI1MDkzYjFkYzA5ZDkxOTYyZWQxMzQ5N2U1NzFiZmI3M2JiOTM5YzNmMGU1ZWQwODU4NWEzYmU5ZWY2YSdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGdldCB2YWxpZCB2ZXN0aW5nIGNvbnRyYWN0IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlc3RpbmdQYXJhbXMgPSB7XG4gICAgICAgICAgc3ViV2FsbGV0SWQ6IDY5ODk4MzE5MSxcbiAgICAgICAgICBwdWJsaWNLZXlIZXg6ICc3MTAxMzM5NDg2Mjk5NWNmYjUyN2RlYTljYWRjYzg0ZDY2ZDExOTdkMmE0NDU0NTc5YjkzYTA4MjIzZTRiMzA5JyxcbiAgICAgICAgICB2ZXN0aW5nU3RhcnRUaW1lOiAxNzYwOTk5MTY0LFxuICAgICAgICAgIHZlc3RpbmdUb3RhbER1cmF0aW9uOiA2MCAqIDYwICogMjQgKiAzMCxcbiAgICAgICAgICB1bmxvY2tQZXJpb2Q6IDYwICogNjAgKiAyNCxcbiAgICAgICAgICBjbGlmZkR1cmF0aW9uOiA2MCAqIDYwLFxuICAgICAgICAgIHZlc3RpbmdUb3RhbEFtb3VudDogQmlnSW50KCc0MDAwMDAwMDAnKSxcbiAgICAgICAgICB2ZXN0aW5nU2VuZGVyQWRkcmVzczogJzBRRE9FeXpDNktYaVZoMlJjbzJiYXBIOTZWbjZsYjlZV3hna1RWV3RxLTlDWEZ0cCcsXG4gICAgICAgICAgb3duZXJBZGRyZXNzOiAnMFFEQnJPZ2pRVGhiTjdlV0JIRXJSaHJKUUgzQXBlY0dEdHUzSzExTHVqam14NDlaJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdmVzdGluZ0NvbnRyYWN0QWRkcmVzcyA9IGF3YWl0IHV0aWxzLmdldFZlc3RpbmdDb250cmFjdEFkZHJlc3ModmVzdGluZ1BhcmFtcyk7XG4gICAgICAgIHZlc3RpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCdFUUFqbWdNYndVM1dWS19wbjJnajFYQkdfTk12cmtvVDRlYXJ2c19DOVE2ZnMtU0UnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhZGRyZXNzIGFzIHBlciBib3VuY2VhYmxlIGZsYWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgICB1dGlscy5nZXRBZGRyZXNzKCdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknLCBmYWxzZSksXG4gICAgICAgICAgJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaSdcbiAgICAgICAgKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIHV0aWxzLmdldEFkZHJlc3MoJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaScsIHRydWUpLFxuICAgICAgICAgICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nXG4gICAgICAgICk7XG4gICAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgICB1dGlscy5nZXRBZGRyZXNzKCdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nLCB0cnVlKSxcbiAgICAgICAgICAnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJ1xuICAgICAgICApO1xuICAgICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgICAgdXRpbHMuZ2V0QWRkcmVzcygnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJywgZmFsc2UpLFxuICAgICAgICAgICdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYmxvY2sgaGFzaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCgnTVB1T3ZIZHUveit0Mmw4MllwWnRpSlFrOCtGVkttV3VLeGQ2dWJuMDlmST0nKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoJ01QdU92SGR1L3ordDJsODJZcFp0aUpRazgrRlZLbVd1S3hkJyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCgnJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdHJhbnNhY3Rpb24gaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ3dsVGRET0FYd0pwOEVTUmZRQUVKUUluMFRjaV9TNW9MYlZLQll4RHR2cGs9JyksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKCczc3lreDZSdWp5N1V0QndIUS9YNWtMZ3ZLRTBTS0xBK0FCaUNLaTdzWDhvPScpLCB0cnVlKTsgLy8gTm8gdXJsIGZyaWVuZGx5IHR4aWRcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnM3N5a3g2UnVqeTdVdEJ3SFFfWDVrTGd2S0UwU0tMQS1BQmlDS2k3c1g4bz0nKSwgdHJ1ZSk7IC8vIFVybCBmcmllbmRseSB0eGlkXG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ3dsVGRET0FYd0pwOEVTUmZRQUVKUUluMFRjaV9TNW9MYj0nKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKCd3bFRkRE9BWHdKcDhFU1JmUUFFSlFJbjBUY2lfUzVvTGJWS0JZeER0YWZkc2FzZGFkc2Z2cGs9JyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgdHJhbnNhY3Rpb24gaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHV0aWxzLmdldE1lc3NhZ2VIYXNoRnJvbURhdGEoXG4gICAgICAgICd0ZTZjY2tFQ0NnRUFBa29BQTdWMms0Vncxbmh4cjdYY0NCaldjRkZIS3FHd0NnbFBTUnVZQWtXaldpVFZBSUFBQVBiTGd2YTBHN3l0S3cveGVFOWEzRkhLMlJNOGZnT3BHdlRwUVJzZWVNZXIzZWZSS3NpUUFBRHhQaG5hUUZaV1lybFFBRFJxYkNVSUFRSURBZ0hnQkFVQWduSUFaMFVJd21rbmtNYVc3UWJvVGNxNDhGZloxTlQ1b01VajJWUE9CcjN6UG94cmlhYjRTZlY2NWk2SGQxSjJzRnN1VGNJV1VvYmNLWE1jSXlzK0pXa25BaE1Nd1N2V0JobVR6d1JBQ0FrQjRZZ0EwbkN1R3M4T05mYTdnUU1hemdvbzVWUTJBVUVwNlNOekFFaTBhMFNhb0JBSEhnblBKQlFRSi9tZW9Dd3pLNS9QYWpCU3h1SksyR2t2YTdObWxBTE5EczJJTUVXaTRaUmZJVjRWZUpwS0JoemhLak5sRmp1ejYwZythZVQ1Y05pNENVMU5HTHNyZXkvNEFBQUFHQUFjQmdFQjN3Y0FhR0lBSzJjWWRZQ3R4dEJhV0o5aGk3TitIVnplTXNQUXhMSFNxWW43YmZwT2NSeWgzTlpRQUFBQUFBQUFBQUFBQUFBQUFBQUFzV2dBMG5DdUdzOE9OZmE3Z1FNYXpnb281VlEyQVVFcDZTTnpBRWkwYTBTYW9CRUFGYk9NT3NCVzQyZ3RMRSt3eGRtL0RxNXZHV0hvWWxqcFZNVDl0djBuT0k1UTdtc29BQVlVV0dBQUFCN1pjRjdXaE1yTVZ5cEFBSjFCbllNVGlBQUFBQUFBQUFBQUVRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBRy9KaDZFZ1RCUllRQUFBQUFBQUFnQUFBQUFBQTRFNTJBUC9lQVluVmhKa29JSTRZVXJocExmcERGdDZtUktpa3RiRm5xcytRRkFXREFBYWNRMD1cXFxcJ1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChpZCwgJ1RzVmdOS1QwNWNkZTRRNTRzQytSRkM3blRvVHJIazlwcEdnRTVNMGpYdEU9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlc2VyaWFsaXplIGEgY2VsbCB0byBnZXQgdGhlIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhMSA9ICd0ZTZjY2tFQkFRRUFKQUFBUTRBYUZVVGdVUS9rMmkrRGRBb29pYjB3TlZSRVpRMnorOFI5V1F2dkZOcFVKQkFSeUFnSyc7XG4gICAgICBjb25zdCByYXdBZGRyZXNzMSA9ICcwOmQwYWEyNzAyODg3ZjI2ZDE3YzFiYTA1MTQ0NGRlOTgxYWFhMjIzMjg2ZDlmZGUyM2VhYzg1Zjc4YTZkMmExMjAnO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmdldFJhd1dhbGxldEFkZHJlc3NGcm9tQ2VsbChkYXRhMSksIHJhd0FkZHJlc3MxKTtcblxuICAgICAgY29uc3QgZGF0YTIgPSAndGU2Y2NrRUJBUUVBSkFBQVE1Lzc1dzAzNHFQOVQwWlhZM211TTVvdXZGbE5vTlBreTJZVXMrSGN4ZDhvdGpEa0lPUHEnO1xuICAgICAgY29uc3QgcmF3QWRkcmVzczIgPSAnLTE6ZGYzODY5YmYxNTFmZWE3YTMyYmIxYmNkNzE5Y2QxNzVlMmNhNmQwNjlmMjY1YjMwYTU5ZjBlZTYyZWY5NDViMSc7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuZ2V0UmF3V2FsbGV0QWRkcmVzc0Zyb21DZWxsKGRhdGEyKSwgcmF3QWRkcmVzczIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QWRkcmVzc0JvYycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBCT0MgZm9yIGEgZnJpZW5kbHkgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHV0aWxzLmdldEFkZHJlc3NCb2ModGVzdERhdGEuZ2V0TWVtYmVyU3RhY2tGaXh0dXJlLmZyaWVuZGx5QWRkcmVzcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdldE1lbWJlclN0YWNrRml4dHVyZS5ib2MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgQk9DIGZvciBhIHJhdyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0JvYyh0ZXN0RGF0YS5nZXRNZW1iZXJTdGFja0ZpeHR1cmUucmF3QWRkcmVzcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdldE1lbWJlclN0YWNrRml4dHVyZS5ib2MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9uIHJlY292ZXIgLSBOb24tQml0R28gYW5kIFVuc2lnbmVkIFN3ZWVwIFRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTsgLy8gQ3JlYXRlIGEgbmV3IHNhbmRib3ggZm9yIGVhY2ggdGVzdFxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpOyAvLyBSZXN0b3JlIGFsbCBzdHVicyBhZnRlciBlYWNoIHRlc3RcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHJlY292ZXIgZnVuZHMgZm9yIG5vbi1CaXRHbyByZWNvdmVyeScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSByZWNvdmVyeSBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICcxYmFhZmEwZDYyMTc0YmYwYzc4ZjMyNTYzMTg2MTNmZmM0NGI2ZGQ1NGFiMWE2M2MyMTg1MjMyZjkyZWRlOWRhZTFiMjgxOGRiZWI1MmE4MjE1ZmQ1NmY1YTVmMmE5Zjk0YzA3OWNlODllNGRjM2IxY2U2ZWQ2ZTg0Y2U3MTg1NycsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdkdW1teVBhc3NwaHJhc2UnLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciBub24tQml0R28gcmVjb3ZlcnlcbiAgICAgIGNvbnN0IG1vY2tSZXN1bHQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDpcbiAgICAgICAgICAndGU2Y2NrRUJBZ0VBcWdBQjRZZ0FsN1JPaExvOEFKdW9XdEd0Y0swMFB1VXBZM1lrUURqOS8yU25NdnVuTHBJRmJsODk2d2xNdjdmc1VPYytzTUh6RWw4cTN2WDVibTZub0hnaW5QSktCUnpuT3JPN3ZlSXBISUVwaVJMYkg3L2VOZHBTc1JodkwyNjBKUC9mRDB2QUlVMU5HTHRBQkRxQUFBQUFDQUFjQVFCb1FnQi9PZWlOZExlYUw3K08wNFh1dWp1Q2hTR3JSZDdabkZsMmZDZDlGWGR6QXlET0pZQ3dBQUFBQUFBQUFBQUFBQUFBQUZ3WEd0OD0nLFxuICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgIGNvaW46ICd0dG9uJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgdGhlIHJlY292ZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBtb2NrZWQgcmVzdWx0XG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgICAgc2FuZGJveC5zdHViKGJhc2Vjb2luLCAncmVjb3ZlcicpLnJlc29sdmVzKG1vY2tSZXN1bHQpO1xuXG4gICAgICAvLyBDYWxsIHRoZSByZWNvdmVyIGZ1bmN0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdFxuICAgICAgcmVzdWx0LnNlcmlhbGl6ZWRUeC5zaG91bGQuZXF1YWwoXG4gICAgICAgICd0ZTZjY2tFQkFnRUFxZ0FCNFlnQWw3Uk9oTG84QUp1b1d0R3RjSzAwUHVVcFkzWWtRRGo5LzJTbk12dW5McElGYmw4OTZ3bE12N2ZzVU9jK3NNSHpFbDhxM3ZYNWJtNm5vSGdpblBKS0JSem5Pck83dmVJcEhJRXBpUkxiSDcvZU5kcFNzUmh2TDI2MEpQL2ZEMHZBSVUxTkdMdEFCRHFBQUFBQUNBQWNBUUJvUWdCL09laU5kTGVhTDcrTzA0WHV1anVDaFNHclJkN1puRmwyZkNkOUZYZHpBeURPSllDd0FBQUFBQUFBQUFBQUFBQUFBRndYR3Q4PSdcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHJlc3VsdC5jb2luLnNob3VsZC5lcXVhbCgndHRvbicpO1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7IC8vIFJlc3RvcmUgdGhlIHN0dWJiZWQgbWV0aG9kXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSByZWNvdmVyIGZ1bmRzIHVzaW5nIHNlbmRlckpldHRvbkFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJ2UzMWIxNTgwNDAwZGQ0Zjk2ZThjNjI4MWNmYjgzZTI4YWEyNWZjZjhmYjgzMTk5NmE0MDE3NmEzZTMwODc4YzgwZjM2NmZmNjQ2MzU2N2RiZWI3YWE3ZmFlZWI5ZjBmNmQxZmMwYTA5MWVjOTkxOGU4MWFkMmMzNGMzNDVmNGQwJyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICd7XCJpdlwiOlwiLzlDYTE4MG9td0VZS2lNZ1VKOTBKUT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImlwUEZxZzZxSEhZPVwiLFwiY3RcIjpcImVGNlpzdHZxb2JMV0IvVWZqcG1zT2N6NStiZ3ZrTWhxK1poK2Y2VERJYSsrSmtQWVJxNmhyMkxoYmlkQkJDTllIQ2dhaGkzbmQvRmRzRkxRMVVrYU45dDQwbUhiVWRsU1RBNDJUaEg1Rkk5VW0xYUFDbTk2MUV1NWIwTXA3bzZVM3p1VmxhRmF5NlQrL25VV2xPS2p2Ky81TVl3ZnhBL0V6TWQ2eURpZTdxQUlyeUxDUEVJdlJ1dXNIdXB6Y0pXZk4yV0dreHc0RWhHc1NRdnM2MitQQk9DSlVlT0NUaHYySHBzc0pWOWdiNm1qNGxZVlRxdEVheTdHNlZGTmIrVDZPSURVOUhOcmR4Vis1RDF6elY1c0hOV3FEZ2hGMDN3OWFkd3hnVENQU2VaeXdaUERnQnJNL05xSEl0KzhDUGQ4NHdnZXk2MU16NThicjA4emwyaWtrc0RGNVBCOERKekVlbnM2QWJZMGdvc3F6QVBUdU9teTdJUzl2UDlsZkNTYUhEb1M2NmhEL0kweWgxYzZ0aDRnUTFkeml3eCtobkJLTmdxcGVrSno2UDBpc25CM3VyaFpJbnBjMFJ6S2g2UjJqcngraEtOci8yZG9rM2RJd2diWFdHcTdOQW0xbVNSRUVzL0NoVlZlVU1tZVU5VUZtd2hPVGJSSzhDTFlIcUFxeWRSTENleE5tV2hUT1BLeTNXcVM4eUc2V2tIcVNHYjlGR0x5QlJjbVFGSUJwaWhWOFhsNFcyZEI2QVg3SHNJMEYyZFlBQlgwZHJMaXVqMk43bU5yYVJHenhzNWpUMGx6d2pYbXk1Z215YXIyM0RxYTJlQlZPeUdkSzNETDhqWXZnWDBtSjU4L3BLa29ncnh6TXJQa0pvMmErZ1A0T1I3Y0RjTDZUeHJjd25WaVlPT0dQOU9hUVpmY0tLYUFobUpaSkd3enlXemp2eUVJTGtDa3NFU3V5K2M1M3RkTEFrdTUxajJLaVYzMlJnMHRETzNVTmp6ZTBxVGozdCtZZm1UTjFHdWlOanhGeDhkTmJYMnl4ell4QitNemVzdU5aQU11bndWSHJxSnBBaW96UnFwRTc5UjdLUkx3N3FoQmhtNVVlejYwRkJ0bUFmMGtRc0dkaUlsRXdDeVRjQll5QURsWkUrb2pEOCt4MnVpSkJCSXpkMHM3bjlaWTNhQ1l1VFZFWUdmSTlFTUdzOVd6WGNHZVR1Mnh3Mk91YlZIWWt2YUJic3dsckppaElxUkgrY2UvOSt3RGVkY2pic2JvMk1PRHNDSjNzSzlLTDZKak1XUHZoU3dSNmNNYnpEaldyRm1SeXVla21mU1RIdWhRRWRCQUsxMU40My9ab1lZREJNd0J3eGpNd3dBNGhMdUJxamVoWVEyTjBONG82ZnBiR1NBMStnMElKcWtRdmgycW44dGVZU2o2N20xdkdsRUp1ODUyVWpKWjR0ZHQ5clNqUTVUYzIzWUsrWEQya0tyWGJCN3dwcnJhYTlQUWpucnJJVDI1eVgrbDVnN1cwRWNHVGxBY3Y1LzVGQzZmNis3UjhLNVdsTEdycDNZTS8rNTcwZ0JTMnFiSWhsMkp6ZndnVHFqZnloNVpcIn0nLFxuICAgICAgICBiYWNrdXBLZXk6XG4gICAgICAgICAgJ3tcIml2XCI6XCJOWTY1Zm1lMnNNZVlkdTc3U1cvYUx3PT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiMVNFcm1vZm1WN3M9XCIsXCJjdFwiOlwiMjh6UUc3eEEyekZ6QUZ5TkpRZm5JUHZvdTEyUndWUHUzanV6bzJjSURhcmV5Zk1rSVhwMVFEYm82bVNCZnpsSmZPTGdZQW4waVFIOHVDZ25tWUNONENiSzJJZk91a01tUUhHYTRsSE1HVVhyTDFybk5Pc1Vaa2g4WU1jTU12cjdxb0NSamFLTFF2UlVXZXFHdDEvVENvUk9vSHdSODhjdFZoRUt3a2hwUW9JWTBUQmVMZHZsdUdWQjdwRkFUdEVLZ29seVFhaXpaOFlPRnZqUW45QUdoVmxPclJyalJ3ekhYcWl1N3lXOGd1TDZmMEI3WmN6dkZnTGRDVEZWTml5UVFkcjZGbzFNaTRHUy93UktiV2FrRXg3TGt0bDNrdmE4OEJYQVJlOCt1bmRUWjBIMk1ibXpNU3I1ekJZcGZoVlhUTy9heHR0a3RMMkFXcU15OGxSODVZN3RWcDMwN1ZVQThYTlkzbmVUYlR4dVNxbSt4cmxCL1IwbkdGRXZSZmlrR3NrNEtLSE9RNkhGbmVOUmRoai9rNmR4RTJWeUg5SXdRNmorTHhqbXMrcGcxeWI1NmlCbkdXTTFzVTBiZEthSkZUUlpHZGlGLy9sUWFLVVZQY0gyUmVOSnNSSmFVOGdvNWcxSEJ1T0hlTXFkbmxCN3VLMk1RS05QQ1JiM3kwWkZReDh5Z2lkT2FBRjZhaUpwejNMZXduWGhzdEQxeTlsWjB5WTlxWEltQjRsRkNyTXJtQm5IUGpFeW16bXJLK3BjaGQ0ZEJKSHRKaXF3bmd4cXBMNmwrYWE2OXhHZXlXRHNWbU1rbFpWUHdkUzVsKzVTVnlnUUdGNU0xczFJN1JmYlRXYjdXbEhGRkN2MEMxSi90cEtUM0J6aUdFZlA1VmowYXFlcWljZ21UUkZ3dmhSMUhpTm1HdkJBTkhNL1B2U3Y1K2N5Umo4RzdFSG1UZXVIZWdoTzJoOVp3b1piaWhuU215Yi9uY1NNOU1neHJTUjRYejdHMzNobmJ1amZIVjRJcEJHL3ZXVHBKVUtJMTFMZ3dyNzFVMmNWQ245V0ErVFk5Q1hzR2tmZU9RYmJYbmdvUHQ0cE9oaWtKS1FZZzlyT3ZnYVIraFpBT1NJdGs2cFdYb3pBREQ4c1NmczdSNituL3dsa0V2dVBJMWNmY2ltYkhMUTZvSDlrVGtEVS9MYk96bXRERGQ4TVlaVWJxdnB5RVM3YkZ1am13NnRjMVpJQkxEc1NXRDJyNHNpdjBLUGVWcjVXdW9KU1l3NlFSZHVBcnlPMU5EdzRTazFhbHlwZ09YeEphcGNYZ3F3aTF2OUhkUnpHMUEwSVVMRFp0eUVjSGpVQkZXM3ZZcUh4VmMvai96MmhuQUMvU2J0UmNDY1pLZ0RlclROTGJQdzNpVFFRZkxpdytMUGtlWmRPNFVVd3NJbWFQM3l3YjExMmllbGpXSm9VdHVZQVlDRW56NWs5c1AzUGZDRGRnU2I1QlJKWklhRGs3aTN2V05YVzF5ZExOZVh6UllwbXI0dnlNa0dFN2FnTC8rSTVTWmg1RVZLL0NZY0FYZ1kyTXAvVmZaV21lTWJGVlBYUzg5eExBd1duUVE9PVwifScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdHaGdoamZidmRrbW4hMjM0JyxcbiAgICAgICAgc2VuZGVySmV0dG9uQWRkcmVzczogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrUHJvdmlkZXIgPSB7XG4gICAgICAgIGdldEJhbGFuY2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCcxMDAwMDAwMDAwJyksXG4gICAgICAgIGdldEVzdGltYXRlRmVlOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgc291cmNlX2ZlZXM6IHtcbiAgICAgICAgICAgIGluX2Z3ZF9mZWU6IDEwMDAsXG4gICAgICAgICAgICBzdG9yYWdlX2ZlZTogMTAwMCxcbiAgICAgICAgICAgIGdhc19mZWU6IDEwMDAsXG4gICAgICAgICAgICBmd2RfZmVlOiAxMDAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxsOiBzYW5kYm94LnN0dWIoKS5jYWxsc0Zha2UoKGFkZHJlc3MsIG1ldGhvZCwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2dldF93YWxsZXRfZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGFjazogW1xuICAgICAgICAgICAgICAgIFsnbnVtJywgJzUwMDAwMDAwMDAnXSxcbiAgICAgICAgICAgICAgICBbJ251bScsICcwJ10sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN0YWNrOiBbXSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHNlbmQ6IHNhbmRib3guc3R1YigpLmNhbGxzRmFrZSgobWV0aG9kLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICBpZiAobWV0aG9kID09PSAncnVuR2V0TWV0aG9kJykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICAgIGdhc191c2VkOiAwLFxuICAgICAgICAgICAgICBzdGFjazogW1snbnVtJywgJzAnXV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3NlbmRCb2MnKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb2s6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIHNhbmRib3guc3R1YihUb253ZWIsICdIdHRwUHJvdmlkZXInKS5yZXR1cm5zKG1vY2tQcm92aWRlcik7XG4gICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4gYXMgYW55LCAnaXNNcGNWMktleWNhcmQnKS5yZXNvbHZlcyh7XG4gICAgICAgIHZlcnNpb246ICd2MScsXG4gICAgICAgIHVzZXJQcnY6IEpTT04uc3RyaW5naWZ5KHsgZHVtbXk6ICd1c2VyU2lnbmluZ01hdGVyaWFsJyB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdkZWNyeXB0JykucmVzb2x2ZXMoSlNPTi5zdHJpbmdpZnkoeyBkdW1teTogJ2JhY2t1cFNpZ25pbmdNYXRlcmlhbCcgfSkpO1xuXG4gICAgICBzYW5kYm94XG4gICAgICAgIC5zdHViKEVERFNBTWV0aG9kcywgJ2dldFRTU1NpZ25hdHVyZScpXG4gICAgICAgIC5yZXNvbHZlcyhcbiAgICAgICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgICAgICcxYmFhZmEwZDYyMTc0YmYwYzc4ZjMyNTYzMTg2MTNmZmM0NGI2ZGQ1NGFiMWE2M2MyMTg1MjMyZjkyZWRlOWRhJyArXG4gICAgICAgICAgICAgICdlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgICAgICdoZXgnXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICByZXN1bHQuc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uIGlmIHVzZXJLZXkgYW5kIGJhY2t1cEtleSBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSByZWNvdmVyeSBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciB1bnNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgbW9ja1Vuc2lnbmVkVHggPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDpcbiAgICAgICAgICAndGU2Y2NrRUJBZ0VBcWdBQjRZZ0FsN1JPaExvOEFKdW9XdEd0Y0swMFB1VXBZM1lrUURqOS8yU25NdnVuTHBJRmJsODk2d2xNdjdmc1VPYytzTUh6RWw4cTN2WDVibTZub0hnaW5QSktCUnpuT3JPN3ZlSXBISUVwaVJMYkg3L2VOZHBTc1JodkwyNjBKUC9mRDB2QUlVMU5HTHRBQkRxQUFBQUFDQUFjQVFCb1FnQi9PZWlOZExlYUw3K08wNFh1dWp1Q2hTR3JSZDdabkZsMmZDZDlGWGR6QXlET0pZQ3dBQUFBQUFBQUFBQUFBQUFBQUZ3WEd0OD0nLFxuICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgIGNvaW46ICd0dG9uJyxcbiAgICAgICAgc2lnbmFibGVIZXg6ICdkZDk4ZWI1YTM3MDBjMDIwMzIzNzA5NWNhMWMwZDUyODhiYzBkNjUwYTliNTlmN2I4MWJhYzU1MmY3NjEzN2RmJyxcbiAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICBwYXJzZWRUeDoge1xuICAgICAgICAgIGlucHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnVVFCTDJpZENYUjRBVGRRdGFOYTRWcG9mY3BTeHV4SWdISDdfc2xPWmZkT1hTYWRKJyxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICAgICAgdmFsdWU6IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnVVFCTDJpZENYUjRBVGRRdGFOYTRWcG9mY3BTeHV4SWdISDdfc2xPWmZkT1hTYWRKJyxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICc5OTkwMDAwMDAnLFxuICAgICAgICAgICAgICBjb2luTmFtZTogJ3R0b24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNwZW5kQW1vdW50OiA5OTkwMDAwMDAsXG4gICAgICAgICAgdHlwZTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICBmZWU6IDEwMDAwMDAsXG4gICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tUeFJlcXVlc3QgPSB7XG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IG1vY2tVbnNpZ25lZFR4LFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB3YWxsZXRDb2luOiAndG9uJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tUeFJlcXVlc3RzID0ge1xuICAgICAgICB0eFJlcXVlc3RzOiBbbW9ja1R4UmVxdWVzdF0sXG4gICAgICB9O1xuXG4gICAgICAvLyBTdHViIHRoZSByZWNvdmVyIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgbW9ja2VkIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4sICdyZWNvdmVyJykucmVzb2x2ZXMobW9ja1R4UmVxdWVzdHMpO1xuXG4gICAgICAvLyBDYWxsIHRoZSByZWNvdmVyIGZ1bmN0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdFxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eFJlcXVlc3RzJyk7XG4gICAgICByZXN1bHQudHhSZXF1ZXN0c1swXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHJhbnNhY3Rpb25zJyk7XG4gICAgICByZXN1bHQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Vuc2lnbmVkVHgnKTtcbiAgICAgIHJlc3VsdC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnNob3VsZC5lcXVhbChtb2NrVW5zaWduZWRUeCk7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGFrZSBPVkMgb3V0cHV0IGFuZCBnZW5lcmF0ZSBhIHNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSB0aGUgcGFyYW1ldGVycyAobW9jayBPVkMgcmVzcG9uc2UpXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIG92Y1Jlc3BvbnNlOiB7XG4gICAgICAgICAgc2VyaWFsaXplZFR4OlxuICAgICAgICAgICAgJ3RlNmNja0VCQWdFQXFnQUI0WWdBbDdST2hMbzhBSnVvV3RHdGNLMDBQdVVwWTNZa1FEajkvMlNuTXZ1bkxwSUZibDg5NndsTXY3ZnNVT2Mrc01IekVsOHEzdlg1Ym02bm9IZ2luUEpLQlJ6bk9yTzd2ZUlwSElFcGlSTGJINy9lTmRwU3NSaHZMMjYwSlAvZkQwdkFJVTFOR0x0QUJEcUFBQUFBQ0FBY0FRQm9RZ0IvT2VpTmRMZWFMNytPMDRYdXVqdUNoU0dyUmQ3Wm5GbDJmQ2Q5RlhkekF5RE9KWUN3QUFBQUFBQUFBQUFBQUFBQUFGd1hHdDg9JyxcbiAgICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgICAgbGFzdFNjYW5JbmRleDogMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vY2sgdGhlIGV4cGVjdGVkIHJlc3VsdCBmb3IgdGhlIHNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgbW9ja1NpZ25lZFN3ZWVwVHhuID0ge1xuICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXJpYWxpemVkVHg6XG4gICAgICAgICAgICAgICd0ZTZjY2tFQkFnRUFxZ0FCNFlnQWw3Uk9oTG84QUp1b1d0R3RjSzAwUHVVcFkzWWtRRGo5LzJTbk12dW5McElGYmw4OTZ3bE12N2ZzVU9jK3NNSHpFbDhxM3ZYNWJtNm5vSGdpblBKS0JSem5Pck83dmVJcEhJRXBpUkxiSDcvZU5kcFNzUmh2TDI2MEpQL2ZEMHZBSVUxTkdMdEFCRHFBQUFBQUNBQWNBUUJvUWdCL09laU5kTGVhTDcrTzA0WHV1anVDaFNHclJkN1puRmwyZkNkOUZYZHpBeURPSllDd0FBQUFBQUFBQUFBQUFBQUFBRndYR3Q4PScsXG4gICAgICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbGFzdFNjYW5JbmRleDogMCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgdGhlIGNyZWF0ZUJyb2FkY2FzdGFibGVTd2VlcFRyYW5zYWN0aW9uIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgbW9ja2VkIHJlc3VsdFxuICAgICAgc2FuZGJveC5zdHViKGJhc2Vjb2luLCAnY3JlYXRlQnJvYWRjYXN0YWJsZVN3ZWVwVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhtb2NrU2lnbmVkU3dlZXBUeG4pO1xuXG4gICAgICAvLyBDYWxsIHRoZSBjcmVhdGVCcm9hZGNhc3RhYmxlU3dlZXBUcmFuc2FjdGlvbiBmdW5jdGlvblxuICAgICAgY29uc3QgcmVjb3ZlcnlUeG4gPSBhd2FpdCBiYXNlY29pbi5jcmVhdGVCcm9hZGNhc3RhYmxlU3dlZXBUcmFuc2FjdGlvbihwYXJhbXMpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcmVzdWx0XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMF0uc2VyaWFsaXplZFR4LnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3RlNmNja0VCQWdFQXFnQUI0WWdBbDdST2hMbzhBSnVvV3RHdGNLMDBQdVVwWTNZa1FEajkvMlNuTXZ1bkxwSUZibDg5NndsTXY3ZnNVT2Mrc01IekVsOHEzdlg1Ym02bm9IZ2luUEpLQlJ6bk9yTzd2ZUlwSElFcGlSTGJINy9lTmRwU3NSaHZMMjYwSlAvZkQwdkFJVTFOR0x0QUJEcUFBQUFBQ0FBY0FRQm9RZ0IvT2VpTmRMZWFMNytPMDRYdXVqdUNoU0dyUmQ3Wm5GbDJmQ2Q5RlhkekF5RE9KWUN3QUFBQUFBQUFBQUFBQUFBQUFGd1hHdDg9J1xuICAgICAgKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1swXS5zY2FuSW5kZXguc2hvdWxkLmVxdWFsKDApO1xuICAgICAgcmVjb3ZlcnlUeG4ubGFzdFNjYW5JbmRleC5zaG91bGQuZXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTVBDdjIgc2lnbmVkIHJlY292ZXJ5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd0ZXN0LXBhc3NwaHJhc2UtbXBjdjInO1xuICAgICAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9ICdVUUJMMmlkQ1hSNEFUZFF0YU5hNFZwb2ZjcFN4dXhJZ0hIN19zbE9aZmRPWFNhZEonO1xuICAgICAgY29uc3QgYXBpS2V5ID0gJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InO1xuXG4gICAgICBsZXQgbXBjVjJVc2VyS2V5OiBzdHJpbmc7XG4gICAgICBsZXQgbXBjVjJCYWNrdXBLZXk6IHN0cmluZztcbiAgICAgIGxldCBtcGNWMkNvbW1vbktleUNoYWluOiBzdHJpbmc7XG4gICAgICBsZXQgbXBjVjJXYWxsZXRBZGRyZXNzOiBzdHJpbmc7XG4gICAgICBsZXQgbXBjVjJSZWNvdmVyUGFyYW1zOiBNUENSZWNvdmVyeU9wdGlvbnMgJiB7IGFwaUtleTogc3RyaW5nIH07XG5cbiAgICAgIGxldCBtb2NrUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0QmFsYW5jZTogc2lub24uU2lub25TdHViO1xuICAgICAgICBnZXRFc3RpbWF0ZUZlZTogc2lub24uU2lub25TdHViO1xuICAgICAgICBjYWxsOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgICAgIHNlbmQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICAgIH07XG5cbiAgICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgICAgIG1wY1YyQ29tbW9uS2V5Q2hhaW4gPSB1c2VyRGtnLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgICAgIG1wY1YyVXNlcktleSA9IGF3YWl0IGVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICBtcGNWMkJhY2t1cEtleSA9IGF3YWl0IGVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgYmFja3VwRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG5cbiAgICAgICAgY29uc3QgbXBjID0gYXdhaXQgRUREU0FNZXRob2RzLmdldEluaXRpYWxpemVkTXBjSW5zdGFuY2UoKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gbXBjLmRlcml2ZVVuaGFyZGVuZWQobXBjVjJDb21tb25LZXlDaGFpbiwgJ20vMCcpLnNsaWNlKDAsIDY0KTtcbiAgICAgICAgbXBjVjJXYWxsZXRBZGRyZXNzID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoYWNjb3VudElkKTtcblxuICAgICAgICBtcGNWMlJlY292ZXJQYXJhbXMgPSB7XG4gICAgICAgICAgdXNlcktleTogbXBjVjJVc2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogbXBjVjJCYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IG1wY1YyQ29tbW9uS2V5Q2hhaW4sXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIGFwaUtleSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgICAgIGdldEJhbGFuY2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCcxMDAwMDAwMDAwJyksXG4gICAgICAgICAgZ2V0RXN0aW1hdGVGZWU6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICAgIHNvdXJjZV9mZWVzOiB7IGluX2Z3ZF9mZWU6IDEwMDAsIHN0b3JhZ2VfZmVlOiAxMDAwLCBnYXNfZmVlOiAxMDAwLCBmd2RfZmVlOiAxMDAwIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2FsbDogc2FuZGJveC5zdHViKCksXG4gICAgICAgICAgc2VuZDogc2FuZGJveC5zdHViKCkuY2FsbHNGYWtlKChtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3J1bkdldE1ldGhvZCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGdhc191c2VkOiAwLCBzdGFjazogW1snbnVtJywgJzAnXV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICBzYW5kYm94LnN0dWIoVG9ud2ViLCAnSHR0cFByb3ZpZGVyJykucmV0dXJucyhtb2NrUHJvdmlkZXIgYXMgYW55KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlY292ZXIgbmF0aXZlIFRPTiB1c2luZyBNUEN2MiBzaWduaW5nIG1hdGVyaWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBnZXRUU1NTaWduYXR1cmVTcHkgPSBzYW5kYm94LnNweShFRERTQU1ldGhvZHMsICdnZXRUU1NTaWduYXR1cmUnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihtcGNWMlJlY292ZXJQYXJhbXMpKSBhcyBNUENUeDtcblxuICAgICAgICByZXN1bHQuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQuc2NhbkluZGV4LCAwKTtcbiAgICAgICAgKHJlc3VsdC5zZXJpYWxpemVkVHggYXMgc3RyaW5nKS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZFdpdGgobW9ja1Byb3ZpZGVyLmdldEJhbGFuY2UsIG1wY1YyV2FsbGV0QWRkcmVzcyk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0Lm5vdENhbGxlZChnZXRUU1NTaWduYXR1cmVTcHkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVjb3ZlciBqZXR0b24gdXNpbmcgTVBDdjIgc2lnbmluZyBtYXRlcmlhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1Byb3ZpZGVyLmNhbGwuY2FsbHNGYWtlKChhZGRyZXNzOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2dldF93YWxsZXRfZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGFjazogW1xuICAgICAgICAgICAgICAgIFsnbnVtJywgJzUwMDAwMDAwMDAnXSxcbiAgICAgICAgICAgICAgICBbJ251bScsICcwJ10sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN0YWNrOiBbXSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0VFNTU2lnbmF0dXJlU3B5ID0gc2FuZGJveC5zcHkoRUREU0FNZXRob2RzLCAnZ2V0VFNTU2lnbmF0dXJlJyk7XG5cbiAgICAgICAgY29uc3QgamV0dG9uUGFyYW1zID0ge1xuICAgICAgICAgIC4uLm1wY1YyUmVjb3ZlclBhcmFtcyxcbiAgICAgICAgICBzZW5kZXJKZXR0b25BZGRyZXNzOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBiYXNlY29pbi5yZWNvdmVyKGpldHRvblBhcmFtcykpIGFzIE1QQ1R4O1xuXG4gICAgICAgIHJlc3VsdC5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzY2FuSW5kZXgnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdC5zY2FuSW5kZXgsIDApO1xuICAgICAgICAocmVzdWx0LnNlcmlhbGl6ZWRUeCBhcyBzdHJpbmcpLnNob3VsZC5iZS5hLlN0cmluZygpLmFuZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkV2l0aChtb2NrUHJvdmlkZXIuZ2V0QmFsYW5jZSwgbXBjVjJXYWxsZXRBZGRyZXNzKTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQubm90Q2FsbGVkKGdldFRTU1NpZ25hdHVyZVNweSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB1c2UgTVBDdjEgcGF0aCB3aGVuIHNpZ25pbmcgbWF0ZXJpYWwgaXMgTVBDdjEgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4gYXMgYW55LCAnaXNNcGNWMktleWNhcmQnKS5yZXNvbHZlcyh7XG4gICAgICAgICAgdmVyc2lvbjogJ3YxJyxcbiAgICAgICAgICB1c2VyUHJ2OiBKU09OLnN0cmluZ2lmeSh7IHVTaGFyZToge30sIGJpdGdvWVNoYXJlOiB7fSB9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0VFNTU2lnbmF0dXJlU3R1YiA9IHNhbmRib3hcbiAgICAgICAgICAuc3R1YihFRERTQU1ldGhvZHMsICdnZXRUU1NTaWduYXR1cmUnKVxuICAgICAgICAgIC5yZXNvbHZlcyhcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICAgICAgICAnMWJhYWZhMGQ2MjE3NGJmMGM3OGYzMjU2MzE4NjEzZmZjNDRiNmRkNTRhYjFhNjNjMjE4NTIzMmY5MmVkZTlkYScgK1xuICAgICAgICAgICAgICAgICdlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgICAgICAgJ2hleCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgIHNhbmRib3guc3R1YihiaXRnbywgJ2RlY3J5cHQnKS5yZXNvbHZlcyhKU09OLnN0cmluZ2lmeSh7IGJTaGFyZToge30sIHlTaGFyZXM6IHt9IH0pKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihtcGNWMlJlY292ZXJQYXJhbXMpKSBhcyBNUENUeDtcblxuICAgICAgICByZXN1bHQuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQuc2NhbkluZGV4LCAwKTtcbiAgICAgICAgKHJlc3VsdC5zZXJpYWxpemVkVHggYXMgc3RyaW5nKS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UoZ2V0VFNTU2lnbmF0dXJlU3R1Yik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGNvbW1vbktleUNoYWluIGZyb20gTVBDdjIga2V5Y2FyZCBkb2VzIG5vdCBtYXRjaCBiaXRnb0tleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbWlzbWF0Y2hlZEJpdGdvS2V5ID0gbXBjVjJDb21tb25LZXlDaGFpbi5zbGljZSgwLCAtOCkgKyAnMDAwMDAwMDAnO1xuICAgICAgICBjb25zdCBtaXNtYXRjaGVkUGFyYW1zID0ge1xuICAgICAgICAgIC4uLm1wY1YyUmVjb3ZlclBhcmFtcyxcbiAgICAgICAgICBiaXRnb0tleTogbWlzbWF0Y2hlZEJpdGdvS2V5LFxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnJlY292ZXIobWlzbWF0Y2hlZFBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRWREU0EgTVBDdjIgcmVjb3Zlcnk6IGNvbW1vbktleUNoYWluIGZyb20ga2V5Y2FyZCBkb2VzIG5vdCBtYXRjaCBiaXRnb0tleScpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=