@bitgo/sdk-coin-canton 1.23.3 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/canton.d.ts +2 -0
- package/dist/src/canton.d.ts.map +1 -1
- package/dist/src/canton.js +5 -1
- package/dist/src/lib/cantonCommandBuilder.d.ts +9 -0
- package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -1
- package/dist/src/lib/cantonCommandBuilder.js +20 -2
- package/dist/src/lib/clearSigning.d.ts +58 -0
- package/dist/src/lib/clearSigning.d.ts.map +1 -0
- package/dist/src/lib/clearSigning.js +66 -0
- package/dist/src/lib/iface.d.ts +1 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +2 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +6 -1
- package/dist/src/lib/messages/cantonBaseMessage.d.ts +16 -0
- package/dist/src/lib/messages/cantonBaseMessage.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonBaseMessage.js +28 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts +14 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.js +23 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts +17 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.js +25 -0
- package/dist/src/lib/messages/cantonSignTopology/index.d.ts +3 -0
- package/dist/src/lib/messages/cantonSignTopology/index.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTopology/index.js +19 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts +13 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.js +22 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts +14 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.js +22 -0
- package/dist/src/lib/messages/cantonSignTransaction/index.d.ts +3 -0
- package/dist/src/lib/messages/cantonSignTransaction/index.d.ts.map +1 -0
- package/dist/src/lib/messages/cantonSignTransaction/index.js +19 -0
- package/dist/src/lib/messages/index.d.ts +5 -0
- package/dist/src/lib/messages/index.d.ts.map +1 -0
- package/dist/src/lib/messages/index.js +21 -0
- package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
- package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
- package/dist/src/lib/utils.d.ts +2 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +25 -7
- package/dist/test/resources.d.ts +7 -0
- package/dist/test/resources.d.ts.map +1 -1
- package/dist/test/resources.js +9 -2
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +45 -1
- package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.js +30 -1
- package/dist/test/unit/canton.js +17 -1
- package/dist/test/unit/index.d.ts +4 -0
- package/dist/test/unit/index.d.ts.map +1 -1
- package/dist/test/unit/index.js +5 -1
- package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts +2 -0
- package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts.map +1 -0
- package/dist/test/unit/messages/cantonSignTopologyMessage.js +46 -0
- package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts +2 -0
- package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts.map +1 -0
- package/dist/test/unit/messages/cantonSignTransactionMessage.js +48 -0
- package/dist/test/unit/messages/clearSigning.d.ts +2 -0
- package/dist/test/unit/messages/clearSigning.d.ts.map +1 -0
- package/dist/test/unit/messages/clearSigning.js +72 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
- package/dist/test/unit/utils.js +50 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
package/dist/test/unit/canton.js
CHANGED
|
@@ -29,6 +29,22 @@ function buildOneStepPreApprovalRawTx(prepareResponse, commandId) {
|
|
|
29
29
|
function walletWithRootAddress(rootAddress) {
|
|
30
30
|
return { coinSpecific: () => ({ rootAddress }) };
|
|
31
31
|
}
|
|
32
|
+
describe('Canton coin:', function () {
|
|
33
|
+
let bitgo;
|
|
34
|
+
let basecoin;
|
|
35
|
+
before(function () {
|
|
36
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
|
|
37
|
+
bitgo.safeRegister('canton', src_1.Canton.createInstance);
|
|
38
|
+
bitgo.safeRegister('tcanton', src_1.Tcanton.createInstance);
|
|
39
|
+
bitgo.initializeTestVars();
|
|
40
|
+
basecoin = bitgo.coin('tcanton');
|
|
41
|
+
});
|
|
42
|
+
describe('supportsMessageSigning', function () {
|
|
43
|
+
it('should return true', function () {
|
|
44
|
+
basecoin.supportsMessageSigning().should.equal(true);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
});
|
|
32
48
|
describe('Canton verifyTransaction:', function () {
|
|
33
49
|
let bitgo;
|
|
34
50
|
let basecoin;
|
|
@@ -686,4 +702,4 @@ describe('Canton verifyTransaction - CreateCommand:', function () {
|
|
|
686
702
|
});
|
|
687
703
|
});
|
|
688
704
|
});
|
|
689
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2NhbnRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUNoQiw0Q0FBMEM7QUFDMUMsOENBQTBEO0FBRTFELDRDQUF1QztBQUV2QyxtQ0FBZ0c7QUFFaEcsNENBTXNCO0FBRXRCOzs7OztHQUtHO0FBQ0gsU0FBUyw0QkFBNEIsQ0FDbkMsZUFBeUQsRUFDekQsU0FBaUI7SUFFakIsTUFBTSxJQUFJLEdBQUc7UUFDWCxzQkFBc0IsRUFBRSxlQUFlO1FBQ3ZDLE1BQU0sRUFBRSxvQkFBb0I7UUFDNUIsbUJBQW1CLEVBQUUsRUFBRTtRQUN2QixlQUFlLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO1FBQ25DLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUNsQyxZQUFZLEVBQUUsU0FBUztRQUN2QixvQkFBb0IsRUFBRSwyQkFBMkI7UUFDakQsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO0tBQ3ZDLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQseUZBQXlGO0FBQ3pGLFNBQVMscUJBQXFCLENBQUMsV0FBbUI7SUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBd0IsQ0FBQztBQUN6RSxDQUFDO0FBRUQsUUFBUSxDQUFDLDJCQUEyQixFQUFFO0lBQ3BDLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQWdCLENBQUM7SUFFckIsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtC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Z0JBQzVCLE1BQU0sRUFBRSxFQUFhO2FBQ3RCLENBQUM7aUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IENhbnRvbkNvbW1hbmQsIElXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmltcG9ydCB7IENhbnRvbiwgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsIFRjYW50b24sIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgQ2FudG9uUHJlcGFyZUNvbW1hbmRSZXNwb25zZSB9IGZyb20gJy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuaW1wb3J0IHtcbiAgQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLFxuICBDYW50b25DcmVhdGVDb21tYW5kUHJlcGFyZVJlc3BvbnNlLFxuICBDYW50b25Ub2tlblByZUFwcHJvdmFsUHJlcGFyZVJlc3BvbnNlLFxuICBPbmVTdGVwRW5hYmxlbWVudCxcbiAgT25lU3RlcFByZUFwcHJvdmFsUHJlcGFyZVJlc3BvbnNlLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGJhc2U2NC1lbmNvZGVkIHJhdyB0cmFuc2FjdGlvbiBmb3IgYSBPbmVTdGVwUHJlQXBwcm92YWwgKGVuYWJsZSB0b2tlbiBmbG93KS5cbiAqIEZvciBUU1Mgd2FsbGV0cyAod2hpY2ggQ2FudG9uIGFsd2F5cyBpcyksIHZlcmlmeVRyYW5zYWN0aW9uIHJlY2VpdmVzIHR4UGFyYW1zLmVuYWJsZVRva2VucyxcbiAqIG5vdCB0eFBhcmFtcy5yZWNpcGllbnRzLiBUaGUgd2FsbGV0IFNESydzIGJ1aWxkVG9rZW5FbmFibGVtZW50cyBwYXNzZXMgZW5hYmxlVG9rZW5zIHRocm91Z2hcbiAqIHVuY2hhbmdlZCBmb3IgVFNTIHdhbGxldHMgcmF0aGVyIHRoYW4gY29udmVydGluZyB0aGVtIHRvIHJlY2lwaWVudHMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkT25lU3RlcFByZUFwcHJvdmFsUmF3VHgoXG4gIHByZXBhcmVSZXNwb25zZTogdHlwZW9mIE9uZVN0ZXBQcmVBcHByb3ZhbFByZXBhcmVSZXNwb25zZSxcbiAgY29tbWFuZElkOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgcHJlcGFyZUNvbW1hbmRSZXNwb25zZTogcHJlcGFyZVJlc3BvbnNlLFxuICAgIHR4VHlwZTogJ09uZVN0ZXBQcmVBcHByb3ZhbCcsXG4gICAgcHJlcGFyZWRUcmFuc2FjdGlvbjogJycsXG4gICAgcGFydHlTaWduYXR1cmVzOiB7IHNpZ25hdHVyZXM6IFtdIH0sXG4gICAgZGVkdXBsaWNhdGlvblBlcmlvZDogeyBFbXB0eToge30gfSxcbiAgICBzdWJtaXNzaW9uSWQ6IGNvbW1hbmRJZCxcbiAgICBoYXNoaW5nU2NoZW1lVmVyc2lvbjogJ0hBU0hJTkdfU0NIRU1FX1ZFUlNJT05fVjInLFxuICAgIG1pbkxlZGdlclRpbWU6IHsgdGltZTogeyBFbXB0eToge30gfSB9LFxuICB9O1xuICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoZGF0YSkpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cblxuLyoqIFJldHVybnMgYSBtb2NrIHdhbGxldCB3aG9zZSBjb2luU3BlY2lmaWMoKS5yb290QWRkcmVzcyBtYXRjaGVzIHRoZSBnaXZlbiBwYXJ0eSBJRC4gKi9cbmZ1bmN0aW9uIHdhbGxldFdpdGhSb290QWRkcmVzcyhyb290QWRkcmVzczogc3RyaW5nKTogSVdhbGxldCB7XG4gIHJldHVybiB7IGNvaW5TcGVjaWZpYzogKCkgPT4gKHsgcm9vdEFkZHJlc3MgfSkgfSBhcyB1bmtub3duIGFzIElXYWxsZXQ7XG59XG5cbmRlc2NyaWJlKCdDYW50b24gdmVyaWZ5VHJhbnNhY3Rpb246JywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luOiBDYW50b247XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2NhbnRvbicsIENhbnRvbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0Y2FudG9uJywgVGNhbnRvbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0Y2FudG9uJykgYXMgQ2FudG9uO1xuICB9KTtcblxuICBkZXNjcmliZSgnT25lU3RlcFByZUFwcHJvdmFsIChlbmFibGUgdG9rZW4gZmxvdyk6JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0eFBhcmFtcyBoYXMgbm8gdHlwZSAobm9uLWVuYWJsZXRva2VuIGZsb3cpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBidWlsZE9uZVN0ZXBQcmVBcHByb3ZhbFJhd1R4KE9uZVN0ZXBQcmVBcHByb3ZhbFByZXBhcmVSZXNwb25zZSwgT25lU3RlcEVuYWJsZW1lbnQuY29tbWFuZElkKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczoge30sXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGVuYWJsZVRva2VucyBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGJ1aWxkT25lU3RlcFByZUFwcHJvdmFsUmF3VHgoT25lU3RlcFByZUFwcHJvdmFsUHJlcGFyZVJlc3BvbnNlLCBPbmVTdGVwRW5hYmxlbWVudC5jb21tYW5kSWQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7IHR5cGU6ICdlbmFibGV0b2tlbicgfSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gZW5hYmxlVG9rZW5zIGlzIGVtcHR5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBidWlsZE9uZVN0ZXBQcmVBcHByb3ZhbFJhd1R4KE9uZVN0ZXBQcmVBcHByb3ZhbFByZXBhcmVSZXNwb25zZSwgT25lU3RlcEVuYWJsZW1lbnQuY29tbWFuZElkKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczogeyB0eXBlOiAnZW5hYmxldG9rZW4nLCBlbmFibGVUb2tlbnM6IFtdIH0sXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvaW4gcHJlLWFwcHJvdmFsIChUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwpOicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCB0eEhleDogc3RyaW5nO1xuICAgICAgbGV0IHJlY2VpdmVyOiBzdHJpbmc7XG5cbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHR4SGV4ID0gYnVpbGRPbmVTdGVwUHJlQXBwcm92YWxSYXdUeChPbmVTdGVwUHJlQXBwcm92YWxQcmVwYXJlUmVzcG9uc2UsIE9uZVN0ZXBFbmFibGVtZW50LmNvbW1hbmRJZCk7XG4gICAgICAgIC8vIER5bmFtaWNhbGx5IGRlcml2ZSByZWNlaXZlciBmcm9tIHBhcnNlZCB0cmFuc2FjdGlvbiB0byBhdm9pZCBoYXJkY29kaW5nIHByb3RvYnVmLWRlY29kZWQgYWRkcmVzc2VzXG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGNhbnRvbicpKS5mcm9tKHR4SGV4KTtcbiAgICAgICAgcmVjZWl2ZXIgPSAodHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIGFueSkudG9Kc29uKCkucmVjZWl2ZXIgYXMgc3RyaW5nO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB3YWxsZXQgaGFzIG5vIGNvaW5TcGVjaWZpYyAocmVjZWl2ZXIgY2hlY2sgc2tpcHBlZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFR5cGljYWwgY2FzZTogd2FsbGV0IG1vY2sgaGFzIG5vIGNvaW5TcGVjaWZpYygpIG1ldGhvZCwgYW5kIG5vIGFkZHJlc3MgaW4gZW5hYmxlVG9rZW5zXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdjYW50b24nIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB3YWxsZXQgcm9vdEFkZHJlc3MgbWF0Y2hlcyByZWNlaXZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVHlwaWNhbCBVSSBmbG93OiBlbmFibGVUb2tlbnMgaGFzIG5vIGFkZHJlc3MsIHJlY2VpdmVyIHZhbGlkYXRlZCBmcm9tIHdhbGxldC5jb2luU3BlY2lmaWMoKS5yb290QWRkcmVzc1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnZW5hYmxldG9rZW4nLFxuICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnY2FudG9uJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldDogd2FsbGV0V2l0aFJvb3RBZGRyZXNzKHJlY2VpdmVyKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGVuYWJsZVRva2VuLmFkZHJlc3MgbWF0Y2hlcyByZWNlaXZlciAoZXhwbGljaXQgYWRkcmVzcyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdjYW50b24nLCBhZGRyZXNzOiByZWNlaXZlciB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gd2FsbGV0IHJvb3RBZGRyZXNzIGRvZXMgbm90IG1hdGNoIHJlY2VpdmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSAnd3JvbmctcGFydHk6OjEyMjBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJztcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnY2FudG9uJyB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3YWxsZXQ6IHdhbGxldFdpdGhSb290QWRkcmVzcyh3cm9uZ0FkZHJlc3MpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL09uZVN0ZXBQcmVBcHByb3ZhbCByZWNlaXZlciBtaXNtYXRjaC8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBleHBsaWNpdCBlbmFibGVUb2tlbi5hZGRyZXNzIGRvZXMgbm90IG1hdGNoIHJlY2VpdmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSAnd3JvbmctcGFydHk6OjEyMjBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJztcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnY2FudG9uJywgYWRkcmVzczogd3JvbmdBZGRyZXNzIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL09uZVN0ZXBQcmVBcHByb3ZhbCByZWNlaXZlciBtaXNtYXRjaC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndG9rZW4gcHJlLWFwcHJvdmFsIChUcmFuc2ZlclByZWFwcHJvdmFsKTonLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgdHhIZXg6IHN0cmluZztcbiAgICAgIGxldCByZWNlaXZlcjogc3RyaW5nO1xuXG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjb21tYW5kSWQgPSAnN2Q5OTc4OWQtMmYyMi00OWUxLTg1Y2ItNzlkMmNlNWE2OWMxJztcbiAgICAgICAgdHhIZXggPSBidWlsZE9uZVN0ZXBQcmVBcHByb3ZhbFJhd1R4KENhbnRvblRva2VuUHJlQXBwcm92YWxQcmVwYXJlUmVzcG9uc2UsIGNvbW1hbmRJZCk7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGNhbnRvbicpKS5mcm9tKHR4SGV4KTtcbiAgICAgICAgcmVjZWl2ZXIgPSAodHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIGFueSkudG9Kc29uKCkucmVjZWl2ZXIgYXMgc3RyaW5nO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB3YWxsZXQgcm9vdEFkZHJlc3MgbWF0Y2hlcyByZWNlaXZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIGVuYWJsZVRva2VuczogW3sgbmFtZTogJ3RjYW50b246dGVzdGNvaW4xJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldDogd2FsbGV0V2l0aFJvb3RBZGRyZXNzKHJlY2VpdmVyKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGVuYWJsZVRva2VuLmFkZHJlc3MgbWF0Y2hlcyByZWNlaXZlciAoZXhwbGljaXQgYWRkcmVzcyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICd0Y2FudG9uOnRlc3Rjb2luMScsIGFkZHJlc3M6IHJlY2VpdmVyIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB3YWxsZXQgcm9vdEFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggcmVjZWl2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICd3cm9uZy1wYXJ0eTo6MTIyMGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiJztcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAndGNhbnRvbjp0ZXN0Y29pbjEnIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdhbGxldDogd2FsbGV0V2l0aFJvb3RBZGRyZXNzKHdyb25nQWRkcmVzcyksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvT25lU3RlcFByZUFwcHJvdmFsIHJlY2VpdmVyIG1pc21hdGNoLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGV4cGxpY2l0IGVuYWJsZVRva2VuLmFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggcmVjZWl2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICd3cm9uZy1wYXJ0eTo6MTIyMGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiJztcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAndGNhbnRvbjp0ZXN0Y29pbjEnLCBhZGRyZXNzOiB3cm9uZ0FkZHJlc3MgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvT25lU3RlcFByZUFwcHJvdmFsIHJlY2VpdmVyIG1pc21hdGNoLyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tIEV4ZXJjaXNlQ29tbWFuZCB2ZXJpZmljYXRpb24gdGVzdHMgLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IENBTlRPTl9DTURfQUNUX0FTID0gJ1JlZ1JlZ2lzdHJhcjo6MTIyMDUwOGU1NGZiNzA5ZGNiMWE5YjQwOTY0MDhhZDQxNWQyMjE3ZDg4ODFhZDkwMzRhOTg1MDc1MjkzM2JhODhhZDUnO1xuY29uc3QgQ0FOVE9OX0NNRF9URU1QTEFURV9JRCA9XG4gICc3YTc1ZWY2ZTY5ZjY5Mzk1YTRlNjA5MTllMjI4NTI4YmI4ZjM4ODExNTBjY2ZkZTNmMzFiY2M3Mzg2NGIxOGFiOlV0aWxpdHkuUmVnaXN0cnkuQXBwLlYwLlNlcnZpY2UuQWxsb2NhdGlvbkZhY3Rvcnk6QWxsb2NhdGlvbkZhY3RvcnknO1xuY29uc3QgQ0FOVE9OX0NNRF9DT05UUkFDVF9JRCA9XG4gICcwMGYzYWZkY2U4NDZhNDBjNmYzZjYxOGM0YjU4NGIwMjJhMDE5NzAxMDA1N2VjZDU5NDU4MjAwMTgzYWIyN2RlMGFjYTEyMTIyMDRhZWY3ZWRlMzdhNWY0MWI2NzRhMWQ5NTQ0NmQ0MmE0MDQ0NjFjNTU1OGM0ZTZkMTg2MGI2NTU2MDEyMGVmMTgnO1xuY29uc3QgQ0FOVE9OX0NNRF9DSE9JQ0UgPSAnQWxsb2NhdGlvbkZhY3RvcnlfT2ZmZXJNaW50JztcblxuZnVuY3Rpb24gYnVpbGRDYW50b25Db21tYW5kUmF3VHgocHJlcGFyZVJlc3BvbnNlOiBQYXJ0aWFsPENhbnRvblByZXBhcmVDb21tYW5kUmVzcG9uc2U+LCBjb21tYW5kSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgcHJlcGFyZUNvbW1hbmRSZXNwb25zZTogcHJlcGFyZVJlc3BvbnNlLFxuICAgIHR4VHlwZTogJ0NhbnRvbkNvbW1hbmQnLFxuICAgIHByZXBhcmVkVHJhbnNhY3Rpb246ICcnLFxuICAgIHBhcnR5U2lnbmF0dXJlczogeyBzaWduYXR1cmVzOiBbXSB9LFxuICAgIGRlZHVwbGljYXRpb25QZXJpb2Q6IHsgRW1wdHk6IHt9IH0sXG4gICAgc3VibWlzc2lvbklkOiBjb21tYW5kSWQsXG4gICAgaGFzaGluZ1NjaGVtZVZlcnNpb246ICdIQVNISU5HX1NDSEVNRV9WRVJTSU9OX1YyJyxcbiAgICBtaW5MZWRnZXJUaW1lOiB7IHRpbWU6IHsgRW1wdHk6IHt9IH0gfSxcbiAgfTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGRhdGEpKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmRlc2NyaWJlKCdDYW50b24gdmVyaWZ5VHJhbnNhY3Rpb24gLSBDYW50b25Db21tYW5kOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjogQ2FudG9uO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdjYW50b24nLCBDYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGNhbnRvbicsIFRjYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGNhbnRvbicpIGFzIENhbnRvbjtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0hhcHB5IHBhdGggdGVzdHM6JywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB0eEhleDogc3RyaW5nO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4SGV4ID0gYnVpbGRDYW50b25Db21tYW5kUmF3VHgoQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLCAndGVzdC1jYW50b24tY21kLTAwMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGNhbnRvbkNvbW1hbmRQYXJhbXMgaXMgdW5kZWZpbmVkIChubyB1c2VyIHBhcmFtcyB0byB2ZXJpZnkpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7fSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgbWF0Y2hpbmcgRXhlcmNpc2VDb21tYW5kICh0ZW1wbGF0ZUlkLCBjaG9pY2UsIGNvbnRyYWN0SWQsIGFjdEFzLCBhcmd1bWVudCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgIEV4ZXJjaXNlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgY29udHJhY3RJZDogQ0FOVE9OX0NNRF9DT05UUkFDVF9JRCxcbiAgICAgICAgICAgICAgICBjaG9pY2U6IENBTlRPTl9DTURfQ0hPSUNFLFxuICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7XG4gICAgICAgICAgICAgICAgICBleHBlY3RlZEFkbWluOiBDQU5UT05fQ01EX0FDVF9BUyxcbiAgICAgICAgICAgICAgICAgIG1pbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudElkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRtaW46IENBTlRPTl9DTURfQUNUX0FTLFxuICAgICAgICAgICAgICAgICAgICAgIGlkOiAnVEVTVFRPS0VOJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiAnMTAwJyxcbiAgICAgICAgICAgICAgICAgICAgaG9sZGVyOiAnUmVnSXNzdWVyOjoxMjIwNTA4ZTU0ZmI3MDlkY2IxYTliNDA5NjQwOGFkNDE1ZDIyMTdkODg4MWFkOTAzNGE5ODUwNzUyOTMzYmE4OGFkNScsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogJ3Rlc3QtcHJlcGFyZS1taW50JyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIHJlYWRBczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGNvbnRyYWN0SWQgaXMgb21pdHRlZCAoSU1TLXJlc29sdmVkKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICBjaG9pY2U6IENBTlRPTl9DTURfQ0hPSUNFLFxuICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIHJlYWRBczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aXRoIHJlc29sdmVDb250cmFjdHMgaW5qZWN0QXMgc2tpcHBpbmcgY29udHJhY3RJZCAoZW1wdHkgY29udHJhY3RJZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgIEV4ZXJjaXNlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgY29udHJhY3RJZDogJycsXG4gICAgICAgICAgICAgICAgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSxcbiAgICAgICAgICAgICAgICBjaG9pY2VBcmd1bWVudDoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICByZWFkQXM6IFtdLFxuICAgICAgICAgICAgcmVzb2x2ZUNvbnRyYWN0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgICAgICBpbmplY3RBczogJ2NvbW1hbmQuRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdpdGggcmVzb2x2ZUNvbnRyYWN0cyBpbmplY3RBcyBza2lwcGluZyBub24tZW1wdHkgY29udHJhY3RJZCBtaXNtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFVzZXIgc3VwcGxpZXMgYSBwbGFjZWhvbGRlciBjb250cmFjdElkIHRoYXQgZG9lc24ndCBtYXRjaCB3aGF0J3Mgb24tY2hhaW47XG4gICAgICAvLyByZXNvbHZlQ29udHJhY3RzIG1hcmtzIGl0IGFzIElNUy1pbmplY3RlZCwgc28gdGhlIG1pc21hdGNoIG11c3QgYmUgaWdub3JlZC5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICBjb250cmFjdElkOiAnMDBwbGFjZWhvbGRlcl9jb250cmFjdF9pZF9ub3Rfb25fY2hhaW4nLFxuICAgICAgICAgICAgICAgIGNob2ljZTogQ0FOVE9OX0NNRF9DSE9JQ0UsXG4gICAgICAgICAgICAgICAgY2hvaWNlQXJndW1lbnQ6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjdEFzOiBbQ0FOVE9OX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgcmVhZEFzOiBbXSxcbiAgICAgICAgICAgIHJlc29sdmVDb250cmFjdHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICAgICAgaW5qZWN0QXM6ICdjb21tYW5kLkV4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXJyb3IgY2FzZXM6JywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB0eEhleDogc3RyaW5nO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4SGV4ID0gYnVpbGRDYW50b25Db21tYW5kUmF3VHgoQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLCAndGVzdC1jYW50b24tY21kLTAwMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHByZXBhcmVkVHJhbnNhY3Rpb24gaXMgbWlzc2luZyBvbiB0eCBwcmVidWlsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVtcHR5UHJlcGFyZSA9IHsgLi4uQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLCBwcmVwYXJlZFRyYW5zYWN0aW9uOiB1bmRlZmluZWQgfTtcbiAgICAgIGNvbnN0IGJhZFR4ID0gYnVpbGRDYW50b25Db21tYW5kUmF3VHgoZW1wdHlQcmVwYXJlLCAnY21kLWJhZCcpO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBiYWRUeCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICBFeGVyY2lzZUNvbW1hbmQ6IHsgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCwgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSwgY2hvaWNlQXJndW1lbnQ6IHt9IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFjdEFzOiBbQ0FOVE9OX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21pc3NpbmcgcHJlcGFyZWRUcmFuc2FjdGlvbi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHVzZXIgY29tbWFuZCBoYXMgbmVpdGhlciBDcmVhdGVDb21tYW5kIG5vciBFeGVyY2lzZUNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7IFVua25vd25Db21tYW5kOiB7fSB9IGFzIHVua25vd24gYXMgQ2FudG9uQ29tbWFuZCxcbiAgICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbXVzdCBjb250YWluIGEgQ3JlYXRlQ29tbWFuZCBvciBFeGVyY2lzZUNvbW1hbmQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB1c2VyIGNvbW1hbmQgY29udGFpbnMgYm90aCBDcmVhdGVDb21tYW5kIGFuZCBFeGVyY2lzZUNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgQ3JlYXRlQ29tbWFuZDogeyB0ZW1wbGF0ZUlkOiBDQU5UT05fQ01EX1RFTVBMQVRFX0lELCBjcmVhdGVBcmd1bWVudHM6IHt9IH0sXG4gICAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7IHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsIGNob2ljZTogQ0FOVE9OX0NNRF9DSE9JQ0UsIGNob2ljZUFyZ3VtZW50OiB7fSB9LFxuICAgICAgICAgICAgICB9IGFzIHVua25vd24gYXMgQ2FudG9uQ29tbWFuZCxcbiAgICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZXhhY3RseSBvbmUgb2YgQ3JlYXRlQ29tbWFuZCBvciBFeGVyY2lzZUNvbW1hbmQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gaW52YWxpZCB1c2VyIHRlbXBsYXRlSWQgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICAgIEV4ZXJjaXNlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogJ0ludmFsaWRGb3JtYXQnLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSxcbiAgICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7fSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9pbnZhbGlkIHVzZXIgdGVtcGxhdGVJZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiB0ZW1wbGF0ZUlkIG1vZHVsZS9lbnRpdHkgbWlzbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiAnU29tZVBrZzpXcm9uZy5Nb2R1bGU6V3JvbmdFbnRpdHknLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSxcbiAgICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7fSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC90ZW1wbGF0ZUlkIG1pc21hdGNoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIHN1Ym1pdHRlckluZm8uYWN0QXMgbWlzbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiBDQU5UT05fQ01EX1RFTVBMQVRFX0lELFxuICAgICAgICAgICAgICAgICAgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSxcbiAgICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7fSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY3RBczogWydXcm9uZ1BhcnR5OjoxMjIwYWFhYSddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3N1Ym1pdHRlckluZm8uYWN0QXMuKmRvZXMgbm90IG1hdGNoIHVzZXIgYWN0QXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gY2hvaWNlIG1pc21hdGNoIGZvciBFeGVyY2lzZUNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiBDQU5UT05fQ01EX1RFTVBMQVRFX0lELFxuICAgICAgICAgICAgICAgICAgY2hvaWNlOiAnV3JvbmdDaG9pY2UnLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlQXJndW1lbnQ6IHt9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFjdEFzOiBbQ0FOVE9OX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2Nob2ljZSBtaXNtYXRjaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBjb250cmFjdElkIG1pc21hdGNoIHdoZW4gdXNlciBwcm92aWRlcyBleHBsaWNpdCBjb250cmFjdElkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICAgIEV4ZXJjaXNlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICAgIGNvbnRyYWN0SWQ6ICcwMHdyb25nY29udHJhY3RpZCcsXG4gICAgICAgICAgICAgICAgICBjaG9pY2U6IENBTlRPTl9DTURfQ0hPSUNFLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlQXJndW1lbnQ6IHt9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFjdEFzOiBbQ0FOVE9OX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2NvbnRyYWN0SWQgbWlzbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gYXJndW1lbnQgZGVlcCBtaXNtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICBFeGVyY2lzZUNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgICBjaG9pY2U6IENBTlRPTl9DTURfQ0hPSUNFLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlQXJndW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRBZG1pbjogJ1dyb25nUGFydHk6OnRvdGFsbHktZGlmZmVyZW50JyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzbWF0Y2gvKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tIENyZWF0ZUNvbW1hbmQgdmVyaWZpY2F0aW9uIHRlc3RzIC0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBDUkVBVEVfQ01EX0FDVF9BUyA9ICdSZWdQcm92aWRlcjo6MTIyMDUwOGU1NGZiNzA5ZGNiMWE5YjQwOTY0MDhhZDQxNWQyMjE3ZDg4ODFhZDkwMzRhOTg1MDc1MjkzM2JhODhhZDUnO1xuY29uc3QgQ1JFQVRFX0NNRF9URU1QTEFURV9JRCA9XG4gICc3YTc1ZWY2ZTY5ZjY5Mzk1YTRlNjA5MTllMjI4NTI4YmI4ZjM4ODExNTBjY2ZkZTNmMzFiY2M3Mzg2NGIxOGFiOlV0aWxpdHkuUmVnaXN0cnkuQXBwLlYwLlNlcnZpY2UuUHJvdmlkZXI6UHJvdmlkZXJTZXJ2aWNlUmVxdWVzdCc7XG5jb25zdCBDUkVBVEVfQ01EX09QRVJBVE9SID0gJ1JlZ09wZXJhdG9yOjoxMjIwNTA4ZTU0ZmI3MDlkY2IxYTliNDA5NjQwOGFkNDE1ZDIyMTdkODg4MWFkOTAzNGE5ODUwNzUyOTMzYmE4OGFkNSc7XG5cbmRlc2NyaWJlKCdDYW50b24gdmVyaWZ5VHJhbnNhY3Rpb24gLSBDcmVhdGVDb21tYW5kOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjogQ2FudG9uO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdjYW50b24nLCBDYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGNhbnRvbicsIFRjYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGNhbnRvbicpIGFzIENhbnRvbjtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0hhcHB5IHBhdGggdGVzdHM6JywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB0eEhleDogc3RyaW5nO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4SGV4ID0gYnVpbGRDYW50b25Db21tYW5kUmF3VHgoQ2FudG9uQ3JlYXRlQ29tbWFuZFByZXBhcmVSZXNwb25zZSwgJ3Rlc3QtY3JlYXRlLWNtZC0wMDEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIG1hdGNoaW5nIENyZWF0ZUNvbW1hbmQgKHRlbXBsYXRlSWQsIGNyZWF0ZUFyZ3VtZW50cywgYWN0QXMpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICBDcmVhdGVDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ1JFQVRFX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICBjcmVhdGVBcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBDUkVBVEVfQ01EX09QRVJBVE9SLFxuICAgICAgICAgICAgICAgICAgcHJvdmlkZXI6IENSRUFURV9DTURfQUNUX0FTLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWN0QXM6IFtDUkVBVEVfQ01EX0FDVF9BU10sXG4gICAgICAgICAgICByZWFkQXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBjcmVhdGVBcmd1bWVudHMgaXMgZW1wdHkgKG5vIGRlZXAtY29tcGFyZSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgIENyZWF0ZUNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiBDUkVBVEVfQ01EX1RFTVBMQVRFX0lELFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFyZ3VtZW50czoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWN0QXM6IFtDUkVBVEVfQ01EX0FDVF9BU10sXG4gICAgICAgICAgICByZWFkQXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2l0aCByZXNvbHZlQ29udHJhY3RzIGluamVjdEFzIHNraXBwaW5nIGNyZWF0ZUFyZ3VtZW50cyBmaWVsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgQ3JlYXRlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENSRUFURV9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgY3JlYXRlQXJndW1lbnRzOiB7XG4gICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ3BsYWNlaG9sZGVyLW9wZXJhdG9yLWlkJyxcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiBDUkVBVEVfQ01EX0FDVF9BUyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjdEFzOiBbQ1JFQVRFX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgcmVhZEFzOiBbXSxcbiAgICAgICAgICAgIHJlc29sdmVDb250cmFjdHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6ICdzb21lLXRlbXBsYXRlJyxcbiAgICAgICAgICAgICAgICBhY3RBczogW0NSRUFURV9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgICAgICBpbmplY3RBczogJ2NvbW1hbmQuQ3JlYXRlQ29tbWFuZC5jcmVhdGVBcmd1bWVudHMub3BlcmF0b3InLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFcnJvciBjYXNlczonLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHR4SGV4OiBzdHJpbmc7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdHhIZXggPSBidWlsZENhbnRvbkNvbW1hbmRSYXdUeChDYW50b25DcmVhdGVDb21tYW5kUHJlcGFyZVJlc3BvbnNlLCAndGVzdC1jcmVhdGUtY21kLWVycicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiB0ZW1wbGF0ZUlkIG1pc21hdGNoIGZvciBDcmVhdGVDb21tYW5kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICAgIENyZWF0ZUNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6ICdXcm9uZ1BrZzpXcm9uZy5Nb2R1bGU6V3JvbmdFbnRpdHknLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlQXJndW1lbnRzOiB7fSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY3RBczogW0NSRUFURV9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC90ZW1wbGF0ZUlkIG1pc21hdGNoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIGNyZWF0ZUFyZ3VtZW50cyBkZWVwIG1pc21hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICAgIENyZWF0ZUNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENSRUFURV9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVBcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdXcm9uZ09wZXJhdG9yOjp0b3RhbGx5LWRpZmZlcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiBDUkVBVEVfQ01EX0FDVF9BUyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWN0QXM6IFtDUkVBVEVfQ01EX0FDVF9BU10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gYWN0QXMgbWlzbWF0Y2ggZm9yIENyZWF0ZUNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgQ3JlYXRlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ1JFQVRFX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUFyZ3VtZW50czoge30sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWN0QXM6IFsnV3JvbmdQYXJ0eTo6MTIyMGFhYWEnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zdWJtaXR0ZXJJbmZvLmFjdEFzLipkb2VzIG5vdCBtYXRjaCB1c2VyIGFjdEFzLyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
705
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2NhbnRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUNoQiw0Q0FBMEM7QUFDMUMsOENBQTBEO0FBRTFELDRDQUF1QztBQUV2QyxtQ0FBZ0c7QUFFaEcsNENBTXNCO0FBRXRCOzs7OztHQUtHO0FBQ0gsU0FBUyw0QkFBNEIsQ0FDbkMsZUFBeUQsRUFDekQsU0FBaUI7SUFFakIsTUFBTSxJQUFJLEdBQUc7UUFDWCxzQkFBc0IsRUFBRSxlQUFlO1FBQ3ZDLE1BQU0sRUFBRSxvQkFBb0I7UUFDNUIsbUJBQW1CLEVBQUUsRUFBRTtRQUN2QixlQUFlLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO1FBQ25DLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUNsQyxZQUFZLEVBQUUsU0FBUztRQUN2QixvQkFBb0IsRUFBRSwyQkFBMkI7UUFDakQsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO0tBQ3ZDLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQseUZBQXlGO0FBQ3pGLFNBQVMscUJBQXFCLENBQUMsV0FBbUI7SUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBd0IsQ0FBQztBQUN6RSxDQUFDO0FBRUQsUUFBUSxDQUFDLGNBQWMsRUFBRTtJQUN2QixJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFnQixDQUFDO0lBRXJCLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFB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QUNSLG1CQUFtQixFQUFFO3dCQUNuQixPQUFPLEVBQUU7NEJBQ1AsYUFBYSxFQUFFO2dDQUNiLFVBQVUsRUFBRSxzQkFBc0I7Z0NBQ2xDLGVBQWUsRUFBRTtvQ0FDZixRQUFRLEVBQUUsa0NBQWtDO29DQUM1QyxRQUFRLEVBQUUsaUJBQWlCO2lDQUM1Qjs2QkFDRjt5QkFDRjt3QkFDRCxLQUFLLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztxQkFDM0I7aUJBQ3lCO2dCQUM1QixNQUFNLEVBQUUsRUFBYTthQUN0QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUs7WUFDMUQsTUFBTSxRQUFRO2lCQUNYLGlCQUFpQixDQUFDO2dCQUNqQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7Z0JBQ3JCLFFBQVEsRUFBRTtvQkFDUixtQkFBbUIsRUFBRTt3QkFDbkIsT0FBTyxFQUFFOzRCQUNQLGFBQWEsRUFBRTtnQ0FDYixVQUFVLEVBQUUsc0JBQXNCO2dDQUNsQyxlQUFlLEVBQUUsRUFBRTs2QkFDcEI7eUJBQ0Y7d0JBQ0QsS0FBSyxFQUFFLENBQUMsc0JBQXNCLENBQUM7cUJBQ2hDO2lCQUN5QjtnQkFDNUIsTUFBTSxFQUFFLEVBQWE7YUFDdEIsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQ2FudG9uQ29tbWFuZCwgSVdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcblxuaW1wb3J0IHsgQ2FudG9uLCBDYW50b25UcmFuc2FjdGlvblBhcmFtcywgVGNhbnRvbiwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBDYW50b25QcmVwYXJlQ29tbWFuZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5pbXBvcnQge1xuICBDYW50b25FeGVyY2lzZUNvbW1hbmRQcmVwYXJlUmVzcG9uc2UsXG4gIENhbnRvbkNyZWF0ZUNvbW1hbmRQcmVwYXJlUmVzcG9uc2UsXG4gIENhbnRvblRva2VuUHJlQXBwcm92YWxQcmVwYXJlUmVzcG9uc2UsXG4gIE9uZVN0ZXBFbmFibGVtZW50LFxuICBPbmVTdGVwUHJlQXBwcm92YWxQcmVwYXJlUmVzcG9uc2UsXG59IGZyb20gJy4uL3Jlc291cmNlcyc7XG5cbi8qKlxuICogQnVpbGRzIGEgYmFzZTY0LWVuY29kZWQgcmF3IHRyYW5zYWN0aW9uIGZvciBhIE9uZVN0ZXBQcmVBcHByb3ZhbCAoZW5hYmxlIHRva2VuIGZsb3cpLlxuICogRm9yIFRTUyB3YWxsZXRzICh3aGljaCBDYW50b24gYWx3YXlzIGlzKSwgdmVyaWZ5VHJhbnNhY3Rpb24gcmVjZWl2ZXMgdHhQYXJhbXMuZW5hYmxlVG9rZW5zLFxuICogbm90IHR4UGFyYW1zLnJlY2lwaWVudHMuIFRoZSB3YWxsZXQgU0RLJ3MgYnVpbGRUb2tlbkVuYWJsZW1lbnRzIHBhc3NlcyBlbmFibGVUb2tlbnMgdGhyb3VnaFxuICogdW5jaGFuZ2VkIGZvciBUU1Mgd2FsbGV0cyByYXRoZXIgdGhhbiBjb252ZXJ0aW5nIHRoZW0gdG8gcmVjaXBpZW50cy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRPbmVTdGVwUHJlQXBwcm92YWxSYXdUeChcbiAgcHJlcGFyZVJlc3BvbnNlOiB0eXBlb2YgT25lU3RlcFByZUFwcHJvdmFsUHJlcGFyZVJlc3BvbnNlLFxuICBjb21tYW5kSWQ6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgZGF0YSA9IHtcbiAgICBwcmVwYXJlQ29tbWFuZFJlc3BvbnNlOiBwcmVwYXJlUmVzcG9uc2UsXG4gICAgdHhUeXBlOiAnT25lU3RlcFByZUFwcHJvdmFsJyxcbiAgICBwcmVwYXJlZFRyYW5zYWN0aW9uOiAnJyxcbiAgICBwYXJ0eVNpZ25hdHVyZXM6IHsgc2lnbmF0dXJlczogW10gfSxcbiAgICBkZWR1cGxpY2F0aW9uUGVyaW9kOiB7IEVtcHR5OiB7fSB9LFxuICAgIHN1Ym1pc3Npb25JZDogY29tbWFuZElkLFxuICAgIGhhc2hpbmdTY2hlbWVWZXJzaW9uOiAnSEFTSElOR19TQ0hFTUVfVkVSU0lPTl9WMicsXG4gICAgbWluTGVkZ2VyVGltZTogeyB0aW1lOiB7IEVtcHR5OiB7fSB9IH0sXG4gIH07XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShkYXRhKSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xufVxuXG4vKiogUmV0dXJucyBhIG1vY2sgd2FsbGV0IHdob3NlIGNvaW5TcGVjaWZpYygpLnJvb3RBZGRyZXNzIG1hdGNoZXMgdGhlIGdpdmVuIHBhcnR5IElELiAqL1xuZnVuY3Rpb24gd2FsbGV0V2l0aFJvb3RBZGRyZXNzKHJvb3RBZGRyZXNzOiBzdHJpbmcpOiBJV2FsbGV0IHtcbiAgcmV0dXJuIHsgY29pblNwZWNpZmljOiAoKSA9PiAoeyByb290QWRkcmVzcyB9KSB9IGFzIHVua25vd24gYXMgSVdhbGxldDtcbn1cblxuZGVzY3JpYmUoJ0NhbnRvbiBjb2luOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjogQ2FudG9uO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdjYW50b24nLCBDYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGNhbnRvbicsIFRjYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGNhbnRvbicpIGFzIENhbnRvbjtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N1cHBvcnRzTWVzc2FnZVNpZ25pbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLnN1cHBvcnRzTWVzc2FnZVNpZ25pbmcoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdDYW50b24gdmVyaWZ5VHJhbnNhY3Rpb246JywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luOiBDYW50b247XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2NhbnRvbicsIENhbnRvbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0Y2FudG9uJywgVGNhbnRvbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0Y2FudG9uJykgYXMgQ2FudG9uO1xuICB9KTtcblxuICBkZXNjcmliZSgnT25lU3RlcFByZUFwcHJvdmFsIChlbmFibGUgdG9rZW4gZmxvdyk6JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0eFBhcmFtcyBoYXMgbm8gdHlwZSAobm9uLWVuYWJsZXRva2VuIGZsb3cpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBidWlsZE9uZVN0ZXBQcmVBcHByb3ZhbFJhd1R4KE9uZVN0ZXBQcmVBcHByb3ZhbFByZXBhcmVSZXNwb25zZSwgT25lU3RlcEVuYWJsZW1lbnQuY29tbWFuZElkKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczoge30sXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGVuYWJsZVRva2VucyBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGJ1aWxkT25lU3RlcFByZUFwcHJvdmFsUmF3VHgoT25lU3RlcFByZUFwcHJvdmFsUHJlcGFyZVJlc3BvbnNlLCBPbmVTdGVwRW5hYmxlbWVudC5jb21tYW5kSWQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7IHR5cGU6ICdlbmFibGV0b2tlbicgfSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gZW5hYmxlVG9rZW5zIGlzIGVtcHR5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBidWlsZE9uZVN0ZXBQcmVBcHByb3ZhbFJhd1R4KE9uZVN0ZXBQcmVBcHByb3ZhbFByZXBhcmVSZXNwb25zZSwgT25lU3RlcEVuYWJsZW1lbnQuY29tbWFuZElkKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczogeyB0eXBlOiAnZW5hYmxldG9rZW4nLCBlbmFibGVUb2tlbnM6IFtdIH0sXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvaW4gcHJlLWFwcHJvdmFsIChUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwpOicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCB0eEhleDogc3RyaW5nO1xuICAgICAgbGV0IHJlY2VpdmVyOiBzdHJpbmc7XG5cbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHR4SGV4ID0gYnVpbGRPbmVTdGVwUHJlQXBwcm92YWxSYXdUeChPbmVTdGVwUHJlQXBwcm92YWxQcmVwYXJlUmVzcG9uc2UsIE9uZVN0ZXBFbmFibGVtZW50LmNvbW1hbmRJZCk7XG4gICAgICAgIC8vIER5bmFtaWNhbGx5IGRlcml2ZSByZWNlaXZlciBmcm9tIHBhcnNlZCB0cmFuc2FjdGlvbiB0byBhdm9pZCBoYXJkY29kaW5nIHByb3RvYnVmLWRlY29kZWQgYWRkcmVzc2VzXG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGNhbnRvbicpKS5mcm9tKHR4SGV4KTtcbiAgICAgICAgcmVjZWl2ZXIgPSAodHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIGFueSkudG9Kc29uKCkucmVjZWl2ZXIgYXMgc3RyaW5nO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB3YWxsZXQgaGFzIG5vIGNvaW5TcGVjaWZpYyAocmVjZWl2ZXIgY2hlY2sgc2tpcHBlZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFR5cGljYWwgY2FzZTogd2FsbGV0IG1vY2sgaGFzIG5vIGNvaW5TcGVjaWZpYygpIG1ldGhvZCwgYW5kIG5vIGFkZHJlc3MgaW4gZW5hYmxlVG9rZW5zXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdjYW50b24nIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB3YWxsZXQgcm9vdEFkZHJlc3MgbWF0Y2hlcyByZWNlaXZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVHlwaWNhbCBVSSBmbG93OiBlbmFibGVUb2tlbnMgaGFzIG5vIGFkZHJlc3MsIHJlY2VpdmVyIHZhbGlkYXRlZCBmcm9tIHdhbGxldC5jb2luU3BlY2lmaWMoKS5yb290QWRkcmVzc1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnZW5hYmxldG9rZW4nLFxuICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnY2FudG9uJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldDogd2FsbGV0V2l0aFJvb3RBZGRyZXNzKHJlY2VpdmVyKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGVuYWJsZVRva2VuLmFkZHJlc3MgbWF0Y2hlcyByZWNlaXZlciAoZXhwbGljaXQgYWRkcmVzcyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdjYW50b24nLCBhZGRyZXNzOiByZWNlaXZlciB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gd2FsbGV0IHJvb3RBZGRyZXNzIGRvZXMgbm90IG1hdGNoIHJlY2VpdmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSAnd3JvbmctcGFydHk6OjEyMjBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJztcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnY2FudG9uJyB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3YWxsZXQ6IHdhbGxldFdpdGhSb290QWRkcmVzcyh3cm9uZ0FkZHJlc3MpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL09uZVN0ZXBQcmVBcHByb3ZhbCByZWNlaXZlciBtaXNtYXRjaC8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBleHBsaWNpdCBlbmFibGVUb2tlbi5hZGRyZXNzIGRvZXMgbm90IG1hdGNoIHJlY2VpdmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSAnd3JvbmctcGFydHk6OjEyMjBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJztcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnY2FudG9uJywgYWRkcmVzczogd3JvbmdBZGRyZXNzIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL09uZVN0ZXBQcmVBcHByb3ZhbCByZWNlaXZlciBtaXNtYXRjaC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndG9rZW4gcHJlLWFwcHJvdmFsIChUcmFuc2ZlclByZWFwcHJvdmFsKTonLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgdHhIZXg6IHN0cmluZztcbiAgICAgIGxldCByZWNlaXZlcjogc3RyaW5nO1xuXG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjb21tYW5kSWQgPSAnN2Q5OTc4OWQtMmYyMi00OWUxLTg1Y2ItNzlkMmNlNWE2OWMxJztcbiAgICAgICAgdHhIZXggPSBidWlsZE9uZVN0ZXBQcmVBcHByb3ZhbFJhd1R4KENhbnRvblRva2VuUHJlQXBwcm92YWxQcmVwYXJlUmVzcG9uc2UsIGNvbW1hbmRJZCk7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGNhbnRvbicpKS5mcm9tKHR4SGV4KTtcbiAgICAgICAgcmVjZWl2ZXIgPSAodHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIGFueSkudG9Kc29uKCkucmVjZWl2ZXIgYXMgc3RyaW5nO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB3YWxsZXQgcm9vdEFkZHJlc3MgbWF0Y2hlcyByZWNlaXZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIGVuYWJsZVRva2VuczogW3sgbmFtZTogJ3RjYW50b246dGVzdGNvaW4xJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldDogd2FsbGV0V2l0aFJvb3RBZGRyZXNzKHJlY2VpdmVyKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGVuYWJsZVRva2VuLmFkZHJlc3MgbWF0Y2hlcyByZWNlaXZlciAoZXhwbGljaXQgYWRkcmVzcyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICd0Y2FudG9uOnRlc3Rjb2luMScsIGFkZHJlc3M6IHJlY2VpdmVyIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB3YWxsZXQgcm9vdEFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggcmVjZWl2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICd3cm9uZy1wYXJ0eTo6MTIyMGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiJztcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAndGNhbnRvbjp0ZXN0Y29pbjEnIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdhbGxldDogd2FsbGV0V2l0aFJvb3RBZGRyZXNzKHdyb25nQWRkcmVzcyksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvT25lU3RlcFByZUFwcHJvdmFsIHJlY2VpdmVyIG1pc21hdGNoLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGV4cGxpY2l0IGVuYWJsZVRva2VuLmFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggcmVjZWl2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICd3cm9uZy1wYXJ0eTo6MTIyMGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiJztcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAndGNhbnRvbjp0ZXN0Y29pbjEnLCBhZGRyZXNzOiB3cm9uZ0FkZHJlc3MgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvT25lU3RlcFByZUFwcHJvdmFsIHJlY2VpdmVyIG1pc21hdGNoLyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tIEV4ZXJjaXNlQ29tbWFuZCB2ZXJpZmljYXRpb24gdGVzdHMgLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IENBTlRPTl9DTURfQUNUX0FTID0gJ1JlZ1JlZ2lzdHJhcjo6MTIyMDUwOGU1NGZiNzA5ZGNiMWE5YjQwOTY0MDhhZDQxNWQyMjE3ZDg4ODFhZDkwMzRhOTg1MDc1MjkzM2JhODhhZDUnO1xuY29uc3QgQ0FOVE9OX0NNRF9URU1QTEFURV9JRCA9XG4gICc3YTc1ZWY2ZTY5ZjY5Mzk1YTRlNjA5MTllMjI4NTI4YmI4ZjM4ODExNTBjY2ZkZTNmMzFiY2M3Mzg2NGIxOGFiOlV0aWxpdHkuUmVnaXN0cnkuQXBwLlYwLlNlcnZpY2UuQWxsb2NhdGlvbkZhY3Rvcnk6QWxsb2NhdGlvbkZhY3RvcnknO1xuY29uc3QgQ0FOVE9OX0NNRF9DT05UUkFDVF9JRCA9XG4gICcwMGYzYWZkY2U4NDZhNDBjNmYzZjYxOGM0YjU4NGIwMjJhMDE5NzAxMDA1N2VjZDU5NDU4MjAwMTgzYWIyN2RlMGFjYTEyMTIyMDRhZWY3ZWRlMzdhNWY0MWI2NzRhMWQ5NTQ0NmQ0MmE0MDQ0NjFjNTU1OGM0ZTZkMTg2MGI2NTU2MDEyMGVmMTgnO1xuY29uc3QgQ0FOVE9OX0NNRF9DSE9JQ0UgPSAnQWxsb2NhdGlvbkZhY3RvcnlfT2ZmZXJNaW50JztcblxuZnVuY3Rpb24gYnVpbGRDYW50b25Db21tYW5kUmF3VHgocHJlcGFyZVJlc3BvbnNlOiBQYXJ0aWFsPENhbnRvblByZXBhcmVDb21tYW5kUmVzcG9uc2U+LCBjb21tYW5kSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgcHJlcGFyZUNvbW1hbmRSZXNwb25zZTogcHJlcGFyZVJlc3BvbnNlLFxuICAgIHR4VHlwZTogJ0NhbnRvbkNvbW1hbmQnLFxuICAgIHByZXBhcmVkVHJhbnNhY3Rpb246ICcnLFxuICAgIHBhcnR5U2lnbmF0dXJlczogeyBzaWduYXR1cmVzOiBbXSB9LFxuICAgIGRlZHVwbGljYXRpb25QZXJpb2Q6IHsgRW1wdHk6IHt9IH0sXG4gICAgc3VibWlzc2lvbklkOiBjb21tYW5kSWQsXG4gICAgaGFzaGluZ1NjaGVtZVZlcnNpb246ICdIQVNISU5HX1NDSEVNRV9WRVJTSU9OX1YyJyxcbiAgICBtaW5MZWRnZXJUaW1lOiB7IHRpbWU6IHsgRW1wdHk6IHt9IH0gfSxcbiAgfTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGRhdGEpKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmRlc2NyaWJlKCdDYW50b24gdmVyaWZ5VHJhbnNhY3Rpb24gLSBDYW50b25Db21tYW5kOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjogQ2FudG9uO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdjYW50b24nLCBDYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGNhbnRvbicsIFRjYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGNhbnRvbicpIGFzIENhbnRvbjtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0hhcHB5IHBhdGggdGVzdHM6JywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB0eEhleDogc3RyaW5nO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4SGV4ID0gYnVpbGRDYW50b25Db21tYW5kUmF3VHgoQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLCAndGVzdC1jYW50b24tY21kLTAwMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGNhbnRvbkNvbW1hbmRQYXJhbXMgaXMgdW5kZWZpbmVkIChubyB1c2VyIHBhcmFtcyB0byB2ZXJpZnkpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7fSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgbWF0Y2hpbmcgRXhlcmNpc2VDb21tYW5kICh0ZW1wbGF0ZUlkLCBjaG9pY2UsIGNvbnRyYWN0SWQsIGFjdEFzLCBhcmd1bWVudCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgIEV4ZXJjaXNlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgY29udHJhY3RJZDogQ0FOVE9OX0NNRF9DT05UUkFDVF9JRCxcbiAgICAgICAgICAgICAgICBjaG9pY2U6IENBTlRPTl9DTURfQ0hPSUNFLFxuICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7XG4gICAgICAgICAgICAgICAgICBleHBlY3RlZEFkbWluOiBDQU5UT05fQ01EX0FDVF9BUyxcbiAgICAgICAgICAgICAgICAgIG1pbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudElkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRtaW46IENBTlRPTl9DTURfQUNUX0FTLFxuICAgICAgICAgICAgICAgICAgICAgIGlkOiAnVEVTVFRPS0VOJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiAnMTAwJyxcbiAgICAgICAgICAgICAgICAgICAgaG9sZGVyOiAnUmVnSXNzdWVyOjoxMjIwNTA4ZTU0ZmI3MDlkY2IxYTliNDA5NjQwOGFkNDE1ZDIyMTdkODg4MWFkOTAzNGE5ODUwNzUyOTMzYmE4OGFkNScsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogJ3Rlc3QtcHJlcGFyZS1taW50JyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIHJlYWRBczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGNvbnRyYWN0SWQgaXMgb21pdHRlZCAoSU1TLXJlc29sdmVkKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICBjaG9pY2U6IENBTlRPTl9DTURfQ0hPSUNFLFxuICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIHJlYWRBczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aXRoIHJlc29sdmVDb250cmFjdHMgaW5qZWN0QXMgc2tpcHBpbmcgY29udHJhY3RJZCAoZW1wdHkgY29udHJhY3RJZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgIEV4ZXJjaXNlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgY29udHJhY3RJZDogJycsXG4gICAgICAgICAgICAgICAgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSxcbiAgICAgICAgICAgICAgICBjaG9pY2VBcmd1bWVudDoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICByZWFkQXM6IFtdLFxuICAgICAgICAgICAgcmVzb2x2ZUNvbnRyYWN0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgICAgICBpbmplY3RBczogJ2NvbW1hbmQuRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdpdGggcmVzb2x2ZUNvbnRyYWN0cyBpbmplY3RBcyBza2lwcGluZyBub24tZW1wdHkgY29udHJhY3RJZCBtaXNtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFVzZXIgc3VwcGxpZXMgYSBwbGFjZWhvbGRlciBjb250cmFjdElkIHRoYXQgZG9lc24ndCBtYXRjaCB3aGF0J3Mgb24tY2hhaW47XG4gICAgICAvLyByZXNvbHZlQ29udHJhY3RzIG1hcmtzIGl0IGFzIElNUy1pbmplY3RlZCwgc28gdGhlIG1pc21hdGNoIG11c3QgYmUgaWdub3JlZC5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICBjb250cmFjdElkOiAnMDBwbGFjZWhvbGRlcl9jb250cmFjdF9pZF9ub3Rfb25fY2hhaW4nLFxuICAgICAgICAgICAgICAgIGNob2ljZTogQ0FOVE9OX0NNRF9DSE9JQ0UsXG4gICAgICAgICAgICAgICAgY2hvaWNlQXJndW1lbnQ6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjdEFzOiBbQ0FOVE9OX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgcmVhZEFzOiBbXSxcbiAgICAgICAgICAgIHJlc29sdmVDb250cmFjdHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICAgICAgaW5qZWN0QXM6ICdjb21tYW5kLkV4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXJyb3IgY2FzZXM6JywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB0eEhleDogc3RyaW5nO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4SGV4ID0gYnVpbGRDYW50b25Db21tYW5kUmF3VHgoQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLCAndGVzdC1jYW50b24tY21kLTAwMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHByZXBhcmVkVHJhbnNhY3Rpb24gaXMgbWlzc2luZyBvbiB0eCBwcmVidWlsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVtcHR5UHJlcGFyZSA9IHsgLi4uQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLCBwcmVwYXJlZFRyYW5zYWN0aW9uOiB1bmRlZmluZWQgfTtcbiAgICAgIGNvbnN0IGJhZFR4ID0gYnVpbGRDYW50b25Db21tYW5kUmF3VHgoZW1wdHlQcmVwYXJlLCAnY21kLWJhZCcpO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBiYWRUeCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICBFeGVyY2lzZUNvbW1hbmQ6IHsgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCwgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSwgY2hvaWNlQXJndW1lbnQ6IHt9IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFjdEFzOiBbQ0FOVE9OX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21pc3NpbmcgcHJlcGFyZWRUcmFuc2FjdGlvbi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHVzZXIgY29tbWFuZCBoYXMgbmVpdGhlciBDcmVhdGVDb21tYW5kIG5vciBFeGVyY2lzZUNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7IFVua25vd25Db21tYW5kOiB7fSB9IGFzIHVua25vd24gYXMgQ2FudG9uQ29tbWFuZCxcbiAgICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbXVzdCBjb250YWluIGEgQ3JlYXRlQ29tbWFuZCBvciBFeGVyY2lzZUNvbW1hbmQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB1c2VyIGNvbW1hbmQgY29udGFpbnMgYm90aCBDcmVhdGVDb21tYW5kIGFuZCBFeGVyY2lzZUNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgQ3JlYXRlQ29tbWFuZDogeyB0ZW1wbGF0ZUlkOiBDQU5UT05fQ01EX1RFTVBMQVRFX0lELCBjcmVhdGVBcmd1bWVudHM6IHt9IH0sXG4gICAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7IHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsIGNob2ljZTogQ0FOVE9OX0NNRF9DSE9JQ0UsIGNob2ljZUFyZ3VtZW50OiB7fSB9LFxuICAgICAgICAgICAgICB9IGFzIHVua25vd24gYXMgQ2FudG9uQ29tbWFuZCxcbiAgICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZXhhY3RseSBvbmUgb2YgQ3JlYXRlQ29tbWFuZCBvciBFeGVyY2lzZUNvbW1hbmQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gaW52YWxpZCB1c2VyIHRlbXBsYXRlSWQgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICAgIEV4ZXJjaXNlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogJ0ludmFsaWRGb3JtYXQnLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSxcbiAgICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7fSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9pbnZhbGlkIHVzZXIgdGVtcGxhdGVJZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiB0ZW1wbGF0ZUlkIG1vZHVsZS9lbnRpdHkgbWlzbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiAnU29tZVBrZzpXcm9uZy5Nb2R1bGU6V3JvbmdFbnRpdHknLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSxcbiAgICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7fSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY3RBczogW0NBTlRPTl9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC90ZW1wbGF0ZUlkIG1pc21hdGNoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIHN1Ym1pdHRlckluZm8uYWN0QXMgbWlzbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiBDQU5UT05fQ01EX1RFTVBMQVRFX0lELFxuICAgICAgICAgICAgICAgICAgY2hvaWNlOiBDQU5UT05fQ01EX0NIT0lDRSxcbiAgICAgICAgICAgICAgICAgIGNob2ljZUFyZ3VtZW50OiB7fSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY3RBczogWydXcm9uZ1BhcnR5OjoxMjIwYWFhYSddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3N1Ym1pdHRlckluZm8uYWN0QXMuKmRvZXMgbm90IG1hdGNoIHVzZXIgYWN0QXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gY2hvaWNlIG1pc21hdGNoIGZvciBFeGVyY2lzZUNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgRXhlcmNpc2VDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiBDQU5UT05fQ01EX1RFTVBMQVRFX0lELFxuICAgICAgICAgICAgICAgICAgY2hvaWNlOiAnV3JvbmdDaG9pY2UnLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlQXJndW1lbnQ6IHt9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFjdEFzOiBbQ0FOVE9OX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2Nob2ljZSBtaXNtYXRjaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBjb250cmFjdElkIG1pc21hdGNoIHdoZW4gdXNlciBwcm92aWRlcyBleHBsaWNpdCBjb250cmFjdElkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICAgIEV4ZXJjaXNlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ0FOVE9OX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICAgIGNvbnRyYWN0SWQ6ICcwMHdyb25nY29udHJhY3RpZCcsXG4gICAgICAgICAgICAgICAgICBjaG9pY2U6IENBTlRPTl9DTURfQ0hPSUNFLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlQXJndW1lbnQ6IHt9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFjdEFzOiBbQ0FOVE9OX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2NvbnRyYWN0SWQgbWlzbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gYXJndW1lbnQgZGVlcCBtaXNtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICBFeGVyY2lzZUNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENBTlRPTl9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgICBjaG9pY2U6IENBTlRPTl9DTURfQ0hPSUNFLFxuICAgICAgICAgICAgICAgICAgY2hvaWNlQXJndW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRBZG1pbjogJ1dyb25nUGFydHk6OnRvdGFsbHktZGlmZmVyZW50JyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWN0QXM6IFtDQU5UT05fQ01EX0FDVF9BU10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzbWF0Y2gvKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tIENyZWF0ZUNvbW1hbmQgdmVyaWZpY2F0aW9uIHRlc3RzIC0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBDUkVBVEVfQ01EX0FDVF9BUyA9ICdSZWdQcm92aWRlcjo6MTIyMDUwOGU1NGZiNzA5ZGNiMWE5YjQwOTY0MDhhZDQxNWQyMjE3ZDg4ODFhZDkwMzRhOTg1MDc1MjkzM2JhODhhZDUnO1xuY29uc3QgQ1JFQVRFX0NNRF9URU1QTEFURV9JRCA9XG4gICc3YTc1ZWY2ZTY5ZjY5Mzk1YTRlNjA5MTllMjI4NTI4YmI4ZjM4ODExNTBjY2ZkZTNmMzFiY2M3Mzg2NGIxOGFiOlV0aWxpdHkuUmVnaXN0cnkuQXBwLlYwLlNlcnZpY2UuUHJvdmlkZXI6UHJvdmlkZXJTZXJ2aWNlUmVxdWVzdCc7XG5jb25zdCBDUkVBVEVfQ01EX09QRVJBVE9SID0gJ1JlZ09wZXJhdG9yOjoxMjIwNTA4ZTU0ZmI3MDlkY2IxYTliNDA5NjQwOGFkNDE1ZDIyMTdkODg4MWFkOTAzNGE5ODUwNzUyOTMzYmE4OGFkNSc7XG5cbmRlc2NyaWJlKCdDYW50b24gdmVyaWZ5VHJhbnNhY3Rpb24gLSBDcmVhdGVDb21tYW5kOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjogQ2FudG9uO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdjYW50b24nLCBDYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGNhbnRvbicsIFRjYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGNhbnRvbicpIGFzIENhbnRvbjtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0hhcHB5IHBhdGggdGVzdHM6JywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB0eEhleDogc3RyaW5nO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHR4SGV4ID0gYnVpbGRDYW50b25Db21tYW5kUmF3VHgoQ2FudG9uQ3JlYXRlQ29tbWFuZFByZXBhcmVSZXNwb25zZSwgJ3Rlc3QtY3JlYXRlLWNtZC0wMDEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIG1hdGNoaW5nIENyZWF0ZUNvbW1hbmQgKHRlbXBsYXRlSWQsIGNyZWF0ZUFyZ3VtZW50cywgYWN0QXMpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICBDcmVhdGVDb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ1JFQVRFX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICBjcmVhdGVBcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBDUkVBVEVfQ01EX09QRVJBVE9SLFxuICAgICAgICAgICAgICAgICAgcHJvdmlkZXI6IENSRUFURV9DTURfQUNUX0FTLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWN0QXM6IFtDUkVBVEVfQ01EX0FDVF9BU10sXG4gICAgICAgICAgICByZWFkQXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBjcmVhdGVBcmd1bWVudHMgaXMgZW1wdHkgKG5vIGRlZXAtY29tcGFyZSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICBjYW50b25Db21tYW5kUGFyYW1zOiB7XG4gICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgIENyZWF0ZUNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiBDUkVBVEVfQ01EX1RFTVBMQVRFX0lELFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFyZ3VtZW50czoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWN0QXM6IFtDUkVBVEVfQ01EX0FDVF9BU10sXG4gICAgICAgICAgICByZWFkQXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgIHdhbGxldDoge30gYXMgSVdhbGxldCxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2l0aCByZXNvbHZlQ29udHJhY3RzIGluamVjdEFzIHNraXBwaW5nIGNyZWF0ZUFyZ3VtZW50cyBmaWVsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgQ3JlYXRlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENSRUFURV9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgY3JlYXRlQXJndW1lbnRzOiB7XG4gICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ3BsYWNlaG9sZGVyLW9wZXJhdG9yLWlkJyxcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiBDUkVBVEVfQ01EX0FDVF9BUyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjdEFzOiBbQ1JFQVRFX0NNRF9BQ1RfQVNdLFxuICAgICAgICAgICAgcmVhZEFzOiBbXSxcbiAgICAgICAgICAgIHJlc29sdmVDb250cmFjdHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6ICdzb21lLXRlbXBsYXRlJyxcbiAgICAgICAgICAgICAgICBhY3RBczogW0NSRUFURV9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgICAgICBpbmplY3RBczogJ2NvbW1hbmQuQ3JlYXRlQ29tbWFuZC5jcmVhdGVBcmd1bWVudHMub3BlcmF0b3InLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIENhbnRvblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFcnJvciBjYXNlczonLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHR4SGV4OiBzdHJpbmc7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdHhIZXggPSBidWlsZENhbnRvbkNvbW1hbmRSYXdUeChDYW50b25DcmVhdGVDb21tYW5kUHJlcGFyZVJlc3BvbnNlLCAndGVzdC1jcmVhdGUtY21kLWVycicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiB0ZW1wbGF0ZUlkIG1pc21hdGNoIGZvciBDcmVhdGVDb21tYW5kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICAgIENyZWF0ZUNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6ICdXcm9uZ1BrZzpXcm9uZy5Nb2R1bGU6V3JvbmdFbnRpdHknLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlQXJndW1lbnRzOiB7fSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY3RBczogW0NSRUFURV9DTURfQUNUX0FTXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC90ZW1wbGF0ZUlkIG1pc21hdGNoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIGNyZWF0ZUFyZ3VtZW50cyBkZWVwIG1pc21hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIGNhbnRvbkNvbW1hbmRQYXJhbXM6IHtcbiAgICAgICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgICAgIENyZWF0ZUNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IENSRUFURV9DTURfVEVNUExBVEVfSUQsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVBcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdXcm9uZ09wZXJhdG9yOjp0b3RhbGx5LWRpZmZlcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiBDUkVBVEVfQ01EX0FDVF9BUyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWN0QXM6IFtDUkVBVEVfQ01EX0FDVF9BU10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBJV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gYWN0QXMgbWlzbWF0Y2ggZm9yIENyZWF0ZUNvbW1hbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgY2FudG9uQ29tbWFuZFBhcmFtczoge1xuICAgICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgQ3JlYXRlQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogQ1JFQVRFX0NNRF9URU1QTEFURV9JRCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUFyZ3VtZW50czoge30sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWN0QXM6IFsnV3JvbmdQYXJ0eTo6MTIyMGFhYWEnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIElXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zdWJtaXR0ZXJJbmZvLmFjdEFzLipkb2VzIG5vdCBtYXRjaCB1c2VyIGFjdEFzLyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/unit/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAKhB,OAAO,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/unit/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAKhB,OAAO,UAAU,CAAC;AAClB,OAAO,yBAAyB,CAAC;AACjC,OAAO,yCAAyC,CAAC;AACjD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,kCAAkC,CAAC"}
|
package/dist/test/unit/index.js
CHANGED
|
@@ -5,6 +5,10 @@ const sdk_api_1 = require("@bitgo/sdk-api");
|
|
|
5
5
|
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
6
6
|
const src_1 = require("../../src");
|
|
7
7
|
require("./canton");
|
|
8
|
+
require("./messages/clearSigning");
|
|
9
|
+
require("./messages/cantonSignTransactionMessage");
|
|
10
|
+
require("./messages/cantonSignTopologyMessage");
|
|
11
|
+
require("./messages/messageBuilderFactory");
|
|
8
12
|
describe('Canton:', function () {
|
|
9
13
|
let bitgo;
|
|
10
14
|
before(function () {
|
|
@@ -14,4 +18,4 @@ describe('Canton:', function () {
|
|
|
14
18
|
bitgo.initializeTestVars();
|
|
15
19
|
});
|
|
16
20
|
});
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZ0I7QUFDaEIsNENBQTBDO0FBQzFDLDhDQUEwRDtBQUMxRCxtQ0FBNEM7QUFFNUMsb0JBQWtCO0FBQ2xCLG1DQUFpQztBQUNqQyxtREFBaUQ7QUFDakQsZ0RBQThDO0FBQzlDLDRDQUEwQztBQUUxQyxRQUFRLENBQUMsU0FBUyxFQUFFO0lBQ2xCLElBQUksS0FBbUIsQ0FBQztJQUV4QixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFlBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxhQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQ2FudG9uLCBUY2FudG9uIH0gZnJvbSAnLi4vLi4vc3JjJztcblxuaW1wb3J0ICcuL2NhbnRvbic7XG5pbXBvcnQgJy4vbWVzc2FnZXMvY2xlYXJTaWduaW5nJztcbmltcG9ydCAnLi9tZXNzYWdlcy9jYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlJztcbmltcG9ydCAnLi9tZXNzYWdlcy9jYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlJztcbmltcG9ydCAnLi9tZXNzYWdlcy9tZXNzYWdlQnVpbGRlckZhY3RvcnknO1xuXG5kZXNjcmliZSgnQ2FudG9uOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2NhbnRvbicsIENhbnRvbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0Y2FudG9uJywgVGNhbnRvbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cantonSignTopologyMessage.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/cantonSignTopologyMessage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
9
|
+
const cantonSignTopologyMessage_1 = require("../../../src/lib/messages/cantonSignTopology/cantonSignTopologyMessage");
|
|
10
|
+
// A real base64-encoded topology hash (multiHash from GenerateTopologyResponse).
|
|
11
|
+
const SAMPLE_TOPOLOGY_HASH = 'EiDQky+Uxo2zEwFp+JabeazILMMd7QR639/B/u+OGR+npg==';
|
|
12
|
+
function makeOptions(payload = SAMPLE_TOPOLOGY_HASH) {
|
|
13
|
+
return { coinConfig: {}, payload };
|
|
14
|
+
}
|
|
15
|
+
describe('CantonSignTopologyMessage', function () {
|
|
16
|
+
describe('constructor', function () {
|
|
17
|
+
it('should set type to CANTON_SIGN_TOPOLOGY', function () {
|
|
18
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage(makeOptions());
|
|
19
|
+
msg.getType().should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
20
|
+
});
|
|
21
|
+
it('should store the payload', function () {
|
|
22
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage(makeOptions());
|
|
23
|
+
msg.getPayload().should.equal(SAMPLE_TOPOLOGY_HASH);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe('getSignablePayload', function () {
|
|
27
|
+
it('should decode base64 topology hash to raw bytes', async function () {
|
|
28
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage(makeOptions());
|
|
29
|
+
const signable = await msg.getSignablePayload();
|
|
30
|
+
should_1.default.ok(Buffer.isBuffer(signable));
|
|
31
|
+
assert_1.default.deepStrictEqual(signable, Buffer.from(SAMPLE_TOPOLOGY_HASH, 'base64'));
|
|
32
|
+
});
|
|
33
|
+
it('should produce same byte structure as CANTON_SIGN_TRANSACTION for equivalent hash', async function () {
|
|
34
|
+
// Both message types decode base64 → raw bytes identically; the type is the HSM format discriminator
|
|
35
|
+
const hash = 'EiDQky+Uxo2zEwFp+JabeazILMMd7QR639/B/u+OGR+npg==';
|
|
36
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage({ coinConfig: {}, payload: hash });
|
|
37
|
+
const signable = await msg.getSignablePayload();
|
|
38
|
+
assert_1.default.deepStrictEqual(signable, Buffer.from(hash, 'base64'));
|
|
39
|
+
});
|
|
40
|
+
it('should throw when payload is missing', async function () {
|
|
41
|
+
const msg = new cantonSignTopologyMessage_1.CantonSignTopologyMessage({ ...makeOptions(), payload: '' });
|
|
42
|
+
await msg.getSignablePayload().should.be.rejectedWith('Message payload is missing');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9tZXNzYWdlcy9jYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qiw4Q0FBc0U7QUFDdEUsc0hBQW1IO0FBRW5ILGlGQUFpRjtBQUNqRixNQUFNLG9CQUFvQixHQUFHLGtEQUFrRCxDQUFDO0FBRWhGLFNBQVMsV0FBVyxDQUFDLE9BQU8sR0FBRyxvQkFBb0I7SUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVELFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtJQUNwQyxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLHFEQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDekQsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQkFBMEIsRUFBRTtZQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLHFEQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDekQsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFO1FBQzdCLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLO1lBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUkscURBQXlCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hELGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyQyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFrQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRkFBbUYsRUFBRSxLQUFLO1lBQzNGLHFHQUFxRztZQUNyRyxNQUFNLElBQUksR0FBRyxrREFBa0QsQ0FBQztZQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLHFEQUF5QixDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRixNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hELGdCQUFNLENBQUMsZUFBZSxDQUFDLFFBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLO1lBQzlDLE1BQU0sR0FBRyxHQUFHLElBQUkscURBQXlCLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLE1BQU0sR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBNZXNzYWdlT3B0aW9ucywgTWVzc2FnZVN0YW5kYXJkVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBDYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9tZXNzYWdlcy9jYW50b25TaWduVG9wb2xvZ3kvY2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZSc7XG5cbi8vIEEgcmVhbCBiYXNlNjQtZW5jb2RlZCB0b3BvbG9neSBoYXNoIChtdWx0aUhhc2ggZnJvbSBHZW5lcmF0ZVRvcG9sb2d5UmVzcG9uc2UpLlxuY29uc3QgU0FNUExFX1RPUE9MT0dZX0hBU0ggPSAnRWlEUWt5K1V4bzJ6RXdGcCtKYWJlYXpJTE1NZDdRUjYzOS9CL3UrT0dSK25wZz09JztcblxuZnVuY3Rpb24gbWFrZU9wdGlvbnMocGF5bG9hZCA9IFNBTVBMRV9UT1BPTE9HWV9IQVNIKTogTWVzc2FnZU9wdGlvbnMge1xuICByZXR1cm4geyBjb2luQ29uZmlnOiB7fSBhcyBhbnksIHBheWxvYWQgfTtcbn1cblxuZGVzY3JpYmUoJ0NhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCB0eXBlIHRvIENBTlRPTl9TSUdOX1RPUE9MT0dZJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXNnID0gbmV3IENhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2UobWFrZU9wdGlvbnMoKSk7XG4gICAgICBtc2cuZ2V0VHlwZSgpLnNob3VsZC5lcXVhbChNZXNzYWdlU3RhbmRhcmRUeXBlLkNBTlRPTl9TSUdOX1RPUE9MT0dZKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3RvcmUgdGhlIHBheWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZShtYWtlT3B0aW9ucygpKTtcbiAgICAgIG1zZy5nZXRQYXlsb2FkKCkuc2hvdWxkLmVxdWFsKFNBTVBMRV9UT1BPTE9HWV9IQVNIKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFNpZ25hYmxlUGF5bG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGRlY29kZSBiYXNlNjQgdG9wb2xvZ3kgaGFzaCB0byByYXcgYnl0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZShtYWtlT3B0aW9ucygpKTtcbiAgICAgIGNvbnN0IHNpZ25hYmxlID0gYXdhaXQgbXNnLmdldFNpZ25hYmxlUGF5bG9hZCgpO1xuICAgICAgc2hvdWxkLm9rKEJ1ZmZlci5pc0J1ZmZlcihzaWduYWJsZSkpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzaWduYWJsZSBhcyBCdWZmZXIsIEJ1ZmZlci5mcm9tKFNBTVBMRV9UT1BPTE9HWV9IQVNILCAnYmFzZTY0JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHNhbWUgYnl0ZSBzdHJ1Y3R1cmUgYXMgQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04gZm9yIGVxdWl2YWxlbnQgaGFzaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEJvdGggbWVzc2FnZSB0eXBlcyBkZWNvZGUgYmFzZTY0IOKGkiByYXcgYnl0ZXMgaWRlbnRpY2FsbHk7IHRoZSB0eXBlIGlzIHRoZSBIU00gZm9ybWF0IGRpc2NyaW1pbmF0b3JcbiAgICAgIGNvbnN0IGhhc2ggPSAnRWlEUWt5K1V4bzJ6RXdGcCtKYWJlYXpJTE1NZDdRUjYzOS9CL3UrT0dSK25wZz09JztcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlKHsgY29pbkNvbmZpZzoge30gYXMgYW55LCBwYXlsb2FkOiBoYXNoIH0pO1xuICAgICAgY29uc3Qgc2lnbmFibGUgPSBhd2FpdCBtc2cuZ2V0U2lnbmFibGVQYXlsb2FkKCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25hYmxlIGFzIEJ1ZmZlciwgQnVmZmVyLmZyb20oaGFzaCwgJ2Jhc2U2NCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBwYXlsb2FkIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZSh7IC4uLm1ha2VPcHRpb25zKCksIHBheWxvYWQ6ICcnIH0pO1xuICAgICAgYXdhaXQgbXNnLmdldFNpZ25hYmxlUGF5bG9hZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ01lc3NhZ2UgcGF5bG9hZCBpcyBtaXNzaW5nJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cantonSignTransactionMessage.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/cantonSignTransactionMessage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
9
|
+
const cantonSignTransactionMessage_1 = require("../../../src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage");
|
|
10
|
+
// A real base64-encoded preparedTransactionHash from Canton's prepareSubmission response.
|
|
11
|
+
// This is exactly what Canton's signTransaction sends as txHash.
|
|
12
|
+
const SAMPLE_TX_HASH = '7Ey4Q2TqWQcK1eAl6p15UT02M4mx92Tvo9ifvtzlm5o=';
|
|
13
|
+
function makeOptions(payload = SAMPLE_TX_HASH) {
|
|
14
|
+
return { coinConfig: {}, payload };
|
|
15
|
+
}
|
|
16
|
+
describe('CantonSignTransactionMessage', function () {
|
|
17
|
+
describe('constructor', function () {
|
|
18
|
+
it('should set type to CANTON_SIGN_TRANSACTION', function () {
|
|
19
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage(makeOptions());
|
|
20
|
+
msg.getType().should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TRANSACTION);
|
|
21
|
+
});
|
|
22
|
+
it('should store the payload', function () {
|
|
23
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage(makeOptions());
|
|
24
|
+
msg.getPayload().should.equal(SAMPLE_TX_HASH);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('getSignablePayload', function () {
|
|
28
|
+
it('should decode base64 txHash to raw bytes', async function () {
|
|
29
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage(makeOptions());
|
|
30
|
+
const signable = await msg.getSignablePayload();
|
|
31
|
+
should_1.default.ok(Buffer.isBuffer(signable));
|
|
32
|
+
// Decoding the base64 txHash and re-encoding should round-trip
|
|
33
|
+
assert_1.default.deepStrictEqual(signable, Buffer.from(SAMPLE_TX_HASH, 'base64'));
|
|
34
|
+
});
|
|
35
|
+
it('should produce the same bytes as the transaction signablePayload in normal tx flow', async function () {
|
|
36
|
+
// In the normal tx flow: Buffer.from(preparedTransactionHash, 'base64')
|
|
37
|
+
// txHash IS the preparedTransactionHash — they must be identical
|
|
38
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage(makeOptions());
|
|
39
|
+
const signable = await msg.getSignablePayload();
|
|
40
|
+
assert_1.default.deepStrictEqual(signable, Buffer.from(SAMPLE_TX_HASH, 'base64'));
|
|
41
|
+
});
|
|
42
|
+
it('should throw when payload is missing', async function () {
|
|
43
|
+
const msg = new cantonSignTransactionMessage_1.CantonSignTransactionMessage({ ...makeOptions(), payload: '' });
|
|
44
|
+
await msg.getSignablePayload().should.be.rejectedWith('Message payload is missing');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9tZXNzYWdlcy9jYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qiw4Q0FBc0U7QUFDdEUsK0hBQTRIO0FBRTVILDBGQUEwRjtBQUMxRixpRUFBaUU7QUFDakUsTUFBTSxjQUFjLEdBQUcsOENBQThDLENBQUM7QUFFdEUsU0FBUyxXQUFXLENBQUMsT0FBTyxHQUFHLGNBQWM7SUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVELFFBQVEsQ0FBQyw4QkFBOEIsRUFBRTtJQUN2QyxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRTtZQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLDJEQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQkFBMEIsRUFBRTtZQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLDJEQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSztZQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLDJEQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNoRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckMsK0RBQStEO1lBQy9ELGdCQUFNLENBQUMsZUFBZSxDQUFDLFFBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvRkFBb0YsRUFBRSxLQUFLO1lBQzVGLHdFQUF3RTtZQUN4RSxpRUFBaUU7WUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSwyREFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDaEQsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsUUFBa0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEtBQUs7WUFDOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSwyREFBNEIsQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEYsTUFBTSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IE1lc3NhZ2VPcHRpb25zLCBNZXNzYWdlU3RhbmRhcmRUeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL21lc3NhZ2VzL2NhbnRvblNpZ25UcmFuc2FjdGlvbi9jYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlJztcblxuLy8gQSByZWFsIGJhc2U2NC1lbmNvZGVkIHByZXBhcmVkVHJhbnNhY3Rpb25IYXNoIGZyb20gQ2FudG9uJ3MgcHJlcGFyZVN1Ym1pc3Npb24gcmVzcG9uc2UuXG4vLyBUaGlzIGlzIGV4YWN0bHkgd2hhdCBDYW50b24ncyBzaWduVHJhbnNhY3Rpb24gc2VuZHMgYXMgdHhIYXNoLlxuY29uc3QgU0FNUExFX1RYX0hBU0ggPSAnN0V5NFEyVHFXUWNLMWVBbDZwMTVVVDAyTTRteDkyVHZvOWlmdnR6bG01bz0nO1xuXG5mdW5jdGlvbiBtYWtlT3B0aW9ucyhwYXlsb2FkID0gU0FNUExFX1RYX0hBU0gpOiBNZXNzYWdlT3B0aW9ucyB7XG4gIHJldHVybiB7IGNvaW5Db25maWc6IHt9IGFzIGFueSwgcGF5bG9hZCB9O1xufVxuXG5kZXNjcmliZSgnQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHR5cGUgdG8gQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtc2cgPSBuZXcgQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZShtYWtlT3B0aW9ucygpKTtcbiAgICAgIG1zZy5nZXRUeXBlKCkuc2hvdWxkLmVxdWFsKE1lc3NhZ2VTdGFuZGFyZFR5cGUuQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdG9yZSB0aGUgcGF5bG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlKG1ha2VPcHRpb25zKCkpO1xuICAgICAgbXNnLmdldFBheWxvYWQoKS5zaG91bGQuZXF1YWwoU0FNUExFX1RYX0hBU0gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2lnbmFibGVQYXlsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZGVjb2RlIGJhc2U2NCB0eEhhc2ggdG8gcmF3IGJ5dGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXNnID0gbmV3IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2UobWFrZU9wdGlvbnMoKSk7XG4gICAgICBjb25zdCBzaWduYWJsZSA9IGF3YWl0IG1zZy5nZXRTaWduYWJsZVBheWxvYWQoKTtcbiAgICAgIHNob3VsZC5vayhCdWZmZXIuaXNCdWZmZXIoc2lnbmFibGUpKTtcbiAgICAgIC8vIERlY29kaW5nIHRoZSBiYXNlNjQgdHhIYXNoIGFuZCByZS1lbmNvZGluZyBzaG91bGQgcm91bmQtdHJpcFxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzaWduYWJsZSBhcyBCdWZmZXIsIEJ1ZmZlci5mcm9tKFNBTVBMRV9UWF9IQVNILCAnYmFzZTY0JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHRoZSBzYW1lIGJ5dGVzIGFzIHRoZSB0cmFuc2FjdGlvbiBzaWduYWJsZVBheWxvYWQgaW4gbm9ybWFsIHR4IGZsb3cnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBJbiB0aGUgbm9ybWFsIHR4IGZsb3c6IEJ1ZmZlci5mcm9tKHByZXBhcmVkVHJhbnNhY3Rpb25IYXNoLCAnYmFzZTY0JylcbiAgICAgIC8vIHR4SGFzaCBJUyB0aGUgcHJlcGFyZWRUcmFuc2FjdGlvbkhhc2gg4oCUIHRoZXkgbXVzdCBiZSBpZGVudGljYWxcbiAgICAgIGNvbnN0IG1zZyA9IG5ldyBDYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlKG1ha2VPcHRpb25zKCkpO1xuICAgICAgY29uc3Qgc2lnbmFibGUgPSBhd2FpdCBtc2cuZ2V0U2lnbmFibGVQYXlsb2FkKCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25hYmxlIGFzIEJ1ZmZlciwgQnVmZmVyLmZyb20oU0FNUExFX1RYX0hBU0gsICdiYXNlNjQnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcGF5bG9hZCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXNnID0gbmV3IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2UoeyAuLi5tYWtlT3B0aW9ucygpLCBwYXlsb2FkOiAnJyB9KTtcbiAgICAgIGF3YWl0IG1zZy5nZXRTaWduYWJsZVBheWxvYWQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdNZXNzYWdlIHBheWxvYWQgaXMgbWlzc2luZycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearSigning.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/clearSigning.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
9
|
+
const clearSigning_1 = require("../../../src/lib/clearSigning");
|
|
10
|
+
const resources_1 = require("../../resources");
|
|
11
|
+
// A single topology transaction byte string — not a PreparedTransaction proto
|
|
12
|
+
const TOPOLOGY_TX = resources_1.GenerateTopologyResponse.topologyTransactions[0];
|
|
13
|
+
describe('Canton clearSigning', function () {
|
|
14
|
+
describe('detectCantonSigningPayloadType', function () {
|
|
15
|
+
it('should detect a Daml prepared transaction as CANTON_SIGN_TRANSACTION', function () {
|
|
16
|
+
const type = (0, clearSigning_1.detectCantonSigningPayloadType)(resources_1.PreparedTransactionRawData);
|
|
17
|
+
type.should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TRANSACTION);
|
|
18
|
+
});
|
|
19
|
+
it('should detect a topology transaction as CANTON_SIGN_TOPOLOGY', function () {
|
|
20
|
+
const type = (0, clearSigning_1.detectCantonSigningPayloadType)(TOPOLOGY_TX);
|
|
21
|
+
type.should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
22
|
+
});
|
|
23
|
+
it('should return CANTON_SIGN_TOPOLOGY for bytes that fail proto parsing', function () {
|
|
24
|
+
// Random base64 that is not a valid PreparedTransaction proto
|
|
25
|
+
const randomBytes = Buffer.from('not-a-valid-proto-payload').toString('base64');
|
|
26
|
+
const type = (0, clearSigning_1.detectCantonSigningPayloadType)(randomBytes);
|
|
27
|
+
type.should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
28
|
+
});
|
|
29
|
+
it('should return CANTON_SIGN_TOPOLOGY for empty bytes', function () {
|
|
30
|
+
const type = (0, clearSigning_1.detectCantonSigningPayloadType)(Buffer.alloc(0).toString('base64'));
|
|
31
|
+
type.should.equal(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('decodePreparedTransaction — invalid input', function () {
|
|
35
|
+
it('should throw a descriptive error when called with topology bytes', function () {
|
|
36
|
+
should_1.default.throws(() => (0, clearSigning_1.decodePreparedTransaction)(TOPOLOGY_TX), /not a Daml PreparedTransaction.*detectCantonSigningPayloadType/);
|
|
37
|
+
});
|
|
38
|
+
it('should throw a descriptive error when called with random bytes', function () {
|
|
39
|
+
const randomBytes = Buffer.from('not-a-valid-proto-payload').toString('base64');
|
|
40
|
+
should_1.default.throws(() => (0, clearSigning_1.decodePreparedTransaction)(randomBytes), /not a Daml PreparedTransaction.*detectCantonSigningPayloadType/);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('decodePreparedTransaction', function () {
|
|
44
|
+
it('should decode a prepared transaction and return structured command info', function () {
|
|
45
|
+
const decoded = (0, clearSigning_1.decodePreparedTransaction)(resources_1.PreparedTransactionRawData);
|
|
46
|
+
should_1.default.exist(decoded);
|
|
47
|
+
should_1.default.exist(decoded.kind);
|
|
48
|
+
should_1.default.exist(decoded.templateId);
|
|
49
|
+
should_1.default.exist(decoded.templateId.moduleName);
|
|
50
|
+
should_1.default.exist(decoded.templateId.entityName);
|
|
51
|
+
should_1.default.exist(decoded.argument);
|
|
52
|
+
});
|
|
53
|
+
it('decoded templateId should have module and entity name fields', function () {
|
|
54
|
+
const decoded = (0, clearSigning_1.decodePreparedTransaction)(resources_1.PreparedTransactionRawData);
|
|
55
|
+
decoded.templateId.moduleName.should.be.a.String().and.not.empty();
|
|
56
|
+
decoded.templateId.entityName.should.be.a.String().and.not.empty();
|
|
57
|
+
});
|
|
58
|
+
it('decoded kind should be CreateCommand or ExerciseCommand', function () {
|
|
59
|
+
const decoded = (0, clearSigning_1.decodePreparedTransaction)(resources_1.PreparedTransactionRawData);
|
|
60
|
+
assert_1.default.ok(decoded.kind === 'CreateCommand' || decoded.kind === 'ExerciseCommand', `expected CreateCommand or ExerciseCommand, got: ${decoded.kind}`);
|
|
61
|
+
});
|
|
62
|
+
it('ExerciseCommand should include choice and actingParties', function () {
|
|
63
|
+
const decoded = (0, clearSigning_1.decodePreparedTransaction)(resources_1.PreparedTransactionRawData);
|
|
64
|
+
if (decoded.kind === 'ExerciseCommand') {
|
|
65
|
+
should_1.default.exist(decoded.choice);
|
|
66
|
+
should_1.default.exist(decoded.actingParties);
|
|
67
|
+
decoded.actingParties.should.be.an.Array();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXJTaWduaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L21lc3NhZ2VzL2NsZWFyU2lnbmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsOENBQXNEO0FBQ3RELGdFQUEwRztBQUMxRywrQ0FBdUY7QUFFdkYsOEVBQThFO0FBQzlFLE1BQU0sV0FBVyxHQUFHLG9DQUF3QixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXJFLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixRQUFRLENBQUMsZ0NBQWdDLEVBQUU7UUFDekMsRUFBRSxDQUFDLHNFQUFzRSxFQUFFO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLElBQUEsNkNBQThCLEVBQUMsc0NBQTBCLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhEQUE4RCxFQUFFO1lBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUEsNkNBQThCLEVBQUMsV0FBVyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRTtZQUN6RSw4REFBOEQ7WUFDOUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRixNQUFNLElBQUksR0FBRyxJQUFBLDZDQUE4QixFQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUFtQixDQUFDLG9CQUFv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LElBQUksS0FBSyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN2QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLGFBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgTWVzc2FnZVN0YW5kYXJkVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBkZXRlY3RDYW50b25TaWduaW5nUGF5bG9hZFR5cGUsIGRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2NsZWFyU2lnbmluZyc7XG5pbXBvcnQgeyBQcmVwYXJlZFRyYW5zYWN0aW9uUmF3RGF0YSwgR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcblxuLy8gQSBzaW5nbGUgdG9wb2xvZ3kgdHJhbnNhY3Rpb24gYnl0ZSBzdHJpbmcg4oCUIG5vdCBhIFByZXBhcmVkVHJhbnNhY3Rpb24gcHJvdG9cbmNvbnN0IFRPUE9MT0dZX1RYID0gR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlLnRvcG9sb2d5VHJhbnNhY3Rpb25zWzBdO1xuXG5kZXNjcmliZSgnQ2FudG9uIGNsZWFyU2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2RldGVjdENhbnRvblNpZ25pbmdQYXlsb2FkVHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGRldGVjdCBhIERhbWwgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYXMgQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eXBlID0gZGV0ZWN0Q2FudG9uU2lnbmluZ1BheWxvYWRUeXBlKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhKTtcbiAgICAgIHR5cGUuc2hvdWxkLmVxdWFsKE1lc3NhZ2VTdGFuZGFyZFR5cGUuQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXRlY3QgYSB0b3BvbG9neSB0cmFuc2FjdGlvbiBhcyBDQU5UT05fU0lHTl9UT1BPTE9HWScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBkZXRlY3RDYW50b25TaWduaW5nUGF5bG9hZFR5cGUoVE9QT0xPR1lfVFgpO1xuICAgICAgdHlwZS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UT1BPTE9HWSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBDQU5UT05fU0lHTl9UT1BPTE9HWSBmb3IgYnl0ZXMgdGhhdCBmYWlsIHByb3RvIHBhcnNpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBSYW5kb20gYmFzZTY0IHRoYXQgaXMgbm90IGEgdmFsaWQgUHJlcGFyZWRUcmFuc2FjdGlvbiBwcm90b1xuICAgICAgY29uc3QgcmFuZG9tQnl0ZXMgPSBCdWZmZXIuZnJvbSgnbm90LWEtdmFsaWQtcHJvdG8tcGF5bG9hZCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBkZXRlY3RDYW50b25TaWduaW5nUGF5bG9hZFR5cGUocmFuZG9tQnl0ZXMpO1xuICAgICAgdHlwZS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UT1BPTE9HWSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBDQU5UT05fU0lHTl9UT1BPTE9HWSBmb3IgZW1wdHkgYnl0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eXBlID0gZGV0ZWN0Q2FudG9uU2lnbmluZ1BheWxvYWRUeXBlKEJ1ZmZlci5hbGxvYygwKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgdHlwZS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UT1BPTE9HWSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uIOKAlCBpbnZhbGlkIGlucHV0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYSBkZXNjcmlwdGl2ZSBlcnJvciB3aGVuIGNhbGxlZCB3aXRoIHRvcG9sb2d5IGJ5dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgKCkgPT4gZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihUT1BPTE9HWV9UWCksXG4gICAgICAgIC9ub3QgYSBEYW1sIFByZXBhcmVkVHJhbnNhY3Rpb24uKmRldGVjdENhbnRvblNpZ25pbmdQYXlsb2FkVHlwZS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGEgZGVzY3JpcHRpdmUgZXJyb3Igd2hlbiBjYWxsZWQgd2l0aCByYW5kb20gYnl0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByYW5kb21CeXRlcyA9IEJ1ZmZlci5mcm9tKCdub3QtYS12YWxpZC1wcm90by1wYXlsb2FkJykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgKCkgPT4gZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihyYW5kb21CeXRlcyksXG4gICAgICAgIC9ub3QgYSBEYW1sIFByZXBhcmVkVHJhbnNhY3Rpb24uKmRldGVjdENhbnRvblNpZ25pbmdQYXlsb2FkVHlwZS9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZGVjb2RlIGEgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYW5kIHJldHVybiBzdHJ1Y3R1cmVkIGNvbW1hbmQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmtpbmQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQudGVtcGxhdGVJZCk7XG4gICAgICBzaG91bGQuZXhpc3QoZGVjb2RlZC50ZW1wbGF0ZUlkLm1vZHVsZU5hbWUpO1xuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQudGVtcGxhdGVJZC5lbnRpdHlOYW1lKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmFyZ3VtZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNvZGVkIHRlbXBsYXRlSWQgc2hvdWxkIGhhdmUgbW9kdWxlIGFuZCBlbnRpdHkgbmFtZSBmaWVsZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihQcmVwYXJlZFRyYW5zYWN0aW9uUmF3RGF0YSk7XG4gICAgICBkZWNvZGVkLnRlbXBsYXRlSWQubW9kdWxlTmFtZS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmVtcHR5KCk7XG4gICAgICBkZWNvZGVkLnRlbXBsYXRlSWQuZW50aXR5TmFtZS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmVtcHR5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVjb2RlZCBraW5kIHNob3VsZCBiZSBDcmVhdGVDb21tYW5kIG9yIEV4ZXJjaXNlQ29tbWFuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhKTtcbiAgICAgIGFzc2VydC5vayhcbiAgICAgICAgZGVjb2RlZC5raW5kID09PSAnQ3JlYXRlQ29tbWFuZCcgfHwgZGVjb2RlZC5raW5kID09PSAnRXhlcmNpc2VDb21tYW5kJyxcbiAgICAgICAgYGV4cGVjdGVkIENyZWF0ZUNvbW1hbmQgb3IgRXhlcmNpc2VDb21tYW5kLCBnb3Q6ICR7ZGVjb2RlZC5raW5kfWBcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnRXhlcmNpc2VDb21tYW5kIHNob3VsZCBpbmNsdWRlIGNob2ljZSBhbmQgYWN0aW5nUGFydGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhKTtcbiAgICAgIGlmIChkZWNvZGVkLmtpbmQgPT09ICdFeGVyY2lzZUNvbW1hbmQnKSB7XG4gICAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmNob2ljZSk7XG4gICAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmFjdGluZ1BhcnRpZXMpO1xuICAgICAgICBkZWNvZGVkLmFjdGluZ1BhcnRpZXMhLnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/messageBuilderFactory.ts"],"names":[],"mappings":""}
|