appium-ios-device 2.5.0 → 2.5.2
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/CHANGELOG.md +14 -0
- package/build/lib/afc/index.js +1 -1
- package/build/lib/afc/index.js.map +1 -1
- package/build/lib/afc/streams.js +1 -1
- package/build/lib/afc/streams.js.map +1 -1
- package/build/lib/afc/transformer/afcdecoder.js +1 -1
- package/build/lib/afc/transformer/afcdecoder.js.map +1 -1
- package/build/lib/base-service.js +1 -1
- package/build/lib/base-service.js.map +1 -1
- package/build/lib/house-arrest/index.js +1 -1
- package/build/lib/house-arrest/index.js.map +1 -1
- package/build/lib/installation-proxy/index.js +1 -1
- package/build/lib/installation-proxy/index.js.map +1 -1
- package/build/lib/instrument/headers.js +1 -1
- package/build/lib/instrument/headers.js.map +1 -1
- package/build/lib/instrument/index.js +1 -1
- package/build/lib/instrument/index.js.map +1 -1
- package/build/lib/instrument/transformer/dtx-decode.js +1 -1
- package/build/lib/instrument/transformer/dtx-decode.js.map +1 -1
- package/build/lib/instrument/transformer/dtx-encode.js +1 -1
- package/build/lib/instrument/transformer/dtx-encode.js.map +1 -1
- package/build/lib/instrument/transformer/nskeyed.js +1 -1
- package/build/lib/instrument/transformer/nskeyed.js.map +1 -1
- package/build/lib/mcinstall/index.js +1 -1
- package/build/lib/mcinstall/index.js.map +1 -1
- package/build/lib/notification-proxy/index.js +1 -1
- package/build/lib/notification-proxy/index.js.map +1 -1
- package/build/lib/plist-service/index.js +1 -1
- package/build/lib/plist-service/index.js.map +1 -1
- package/build/lib/plist-service/transformer/plist-service-decoder.js +1 -1
- package/build/lib/plist-service/transformer/plist-service-decoder.js.map +1 -1
- package/build/lib/plist-service/transformer/plist-service-encoder.js +1 -1
- package/build/lib/plist-service/transformer/plist-service-encoder.js.map +1 -1
- package/build/lib/services.js +1 -1
- package/build/lib/services.js.map +1 -1
- package/build/lib/ssl-helper.js +1 -1
- package/build/lib/ssl-helper.js.map +1 -1
- package/build/lib/syslog/transformer/syslog-decoder.js +20 -29
- package/build/lib/syslog/transformer/syslog-decoder.js.map +1 -1
- package/build/lib/usbmux/index.js +1 -1
- package/build/lib/usbmux/index.js.map +1 -1
- package/build/lib/usbmux/transformer/usbmux-decoder.js +1 -1
- package/build/lib/usbmux/transformer/usbmux-decoder.js.map +1 -1
- package/build/lib/usbmux/transformer/usbmux-encoder.js +1 -1
- package/build/lib/usbmux/transformer/usbmux-encoder.js.map +1 -1
- package/build/lib/util/transformer/length-based-splitter.js +1 -1
- package/build/lib/util/transformer/length-based-splitter.js.map +1 -1
- package/build/lib/util/transformer/stream-logger.js +1 -1
- package/build/lib/util/transformer/stream-logger.js.map +1 -1
- package/build/lib/utilities.js +1 -1
- package/build/lib/utilities.js.map +1 -1
- package/build/lib/webinspector/index.js +1 -1
- package/build/lib/webinspector/index.js.map +1 -1
- package/build/lib/webinspector/transformer/webinspector-decoder.js +1 -1
- package/build/lib/webinspector/transformer/webinspector-decoder.js.map +1 -1
- package/build/lib/webinspector/transformer/webinspector-encoder.js +1 -1
- package/build/lib/webinspector/transformer/webinspector-encoder.js.map +1 -1
- package/build/lib/xctest.js +1 -1
- package/build/lib/xctest.js.map +1 -1
- package/lib/syslog/transformer/syslog-decoder.js +19 -32
- package/package.json +2 -2
|
@@ -41,4 +41,4 @@ class DTXEncoder extends _stream.default.Transform {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
exports.DTXEncoder = DTXEncoder;
|
|
44
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3RyZWFtIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfaGVhZGVycyIsIkRUWEVuY29kZXIiLCJTdHJlYW0iLCJUcmFuc2Zvcm0iLCJjb25zdHJ1Y3RvciIsIm9iamVjdE1vZGUiLCJfdHJhbnNmb3JtIiwiZGF0YSIsImVuY29kaW5nIiwib25EYXRhIiwicHVzaCIsIl9lbmNvZGUiLCJzeW5jIiwiY2hhbm5lbENvZGUiLCJzZWxlY3RvciIsImF1eGlsaWFyaWVzIiwiaWRlbnRpZmllciIsImR0eCIsIkRUWE1lc3NhZ2UiLCJleHBlY3RzUmVwbHkiLCJEVFhNZXNzYWdlQXV4IiwiYnVpbGQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2luc3RydW1lbnQvdHJhbnNmb3JtZXIvZHR4LWVuY29kZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQge0RUWE1lc3NhZ2UsIERUWE1lc3NhZ2VBdXh9IGZyb20gJy4uL2hlYWRlcnMnO1xuXG5cbmNsYXNzIERUWEVuY29kZXIgZXh0ZW5kcyBTdHJlYW0uVHJhbnNmb3JtIHtcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICB9XG5cbiAgX3RyYW5zZm9ybSAoZGF0YSwgZW5jb2RpbmcsIG9uRGF0YSkge1xuICAgIHRoaXMucHVzaCh0aGlzLl9lbmNvZGUoZGF0YSksICdidWZmZXInKTtcbiAgICBvbkRhdGEoKTtcbiAgfVxuXG4gIF9lbmNvZGUgKGRhdGEpIHtcbiAgICBjb25zdCB7c3luYywgY2hhbm5lbENvZGUsIHNlbGVjdG9yLCBhdXhpbGlhcmllcywgaWRlbnRpZmllcn0gPSBkYXRhO1xuICAgIGNvbnN0IGR0eCA9IG5ldyBEVFhNZXNzYWdlKHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBjaGFubmVsQ29kZSxcbiAgICAgIHNlbGVjdG9yLFxuICAgICAgZXhwZWN0c1JlcGx5OiBzeW5jXG4gICAgfSk7XG4gICAgaWYgKGF1eGlsaWFyaWVzIGluc3RhbmNlb2YgRFRYTWVzc2FnZUF1eCkge1xuICAgICAgZHR4LmF1eGlsaWFyaWVzID0gYXV4aWxpYXJpZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGR0eC5hdXhpbGlhcmllcy5kYXRhID0gYXV4aWxpYXJpZXM7XG4gICAgfVxuICAgIHJldHVybiBkdHguYnVpbGQoKTtcbiAgfVxufVxuXG5leHBvcnQgeyBEVFhFbmNvZGVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBR0EsTUFBTUUsVUFBVSxTQUFTQyxlQUFNLENBQUNDLFNBQVMsQ0FBQztFQUV4Q0MsV0FBV0EsQ0FBQSxFQUFJO0lBQ2IsS0FBSyxDQUFDO01BQUVDLFVBQVUsRUFBRTtJQUFLLENBQUMsQ0FBQztFQUM3QjtFQUVBQyxVQUFVQSxDQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRUMsTUFBTSxFQUFFO0lBQ2xDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDSixJQUFJLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDdkNFLE1BQU0sQ0FBQyxDQUFDO0VBQ1Y7RUFFQUUsT0FBT0EsQ0FBRUosSUFBSSxFQUFFO0lBQ2IsTUFBTTtNQUFDSyxJQUFJO01BQUVDLFdBQVc7TUFBRUMsUUFBUTtNQUFFQyxXQUFXO01BQUVDO0lBQVUsQ0FBQyxHQUFHVCxJQUFJO0lBQ25FLE1BQU1VLEdBQUcsR0FBRyxJQUFJQyxtQkFBVSxDQUFDO01BQ3pCRixVQUFVO01BQ1ZILFdBQVc7TUFDWEMsUUFBUTtNQUNSSyxZQUFZLEVBQUVQO0lBQ2hCLENBQUMsQ0FBQztJQUNGLElBQUlHLFdBQVcsWUFBWUssc0JBQWEsRUFBRTtNQUN4Q0gsR0FBRyxDQUFDRixXQUFXLEdBQUdBLFdBQVc7SUFDL0IsQ0FBQyxNQUFNO01BQ0xFLEdBQUcsQ0FBQ0YsV0FBVyxDQUFDUixJQUFJLEdBQUdRLFdBQVc7SUFDcEM7SUFDQSxPQUFPRSxHQUFHLENBQUNJLEtBQUssQ0FBQyxDQUFDO0VBQ3BCO0FBQ0Y7QUFBQ0MsT0FBQSxDQUFBckIsVUFBQSxHQUFBQSxVQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dtx-encode.js","names":["_stream","_interopRequireDefault","require","_headers","DTXEncoder","Stream","Transform","constructor","objectMode","_transform","data","encoding","onData","push","_encode","sync","channelCode","selector","auxiliaries","identifier","dtx","DTXMessage","expectsReply","DTXMessageAux","build","exports"],"sources":["../../../../lib/instrument/transformer/dtx-encode.js"],"sourcesContent":["import Stream from 'stream';\nimport {DTXMessage, DTXMessageAux} from '../headers';\n\n\nclass DTXEncoder extends Stream.Transform {\n\n constructor () {\n super({ objectMode: true });\n }\n\n _transform (data, encoding, onData) {\n this.push(this._encode(data), 'buffer');\n onData();\n }\n\n _encode (data) {\n const {sync, channelCode, selector, auxiliaries, identifier} = data;\n const dtx = new DTXMessage({\n identifier,\n channelCode,\n selector,\n expectsReply: sync\n });\n if (auxiliaries instanceof DTXMessageAux) {\n dtx.auxiliaries = auxiliaries;\n } else {\n dtx.auxiliaries.data = auxiliaries;\n }\n return dtx.build();\n }\n}\n\nexport { DTXEncoder };\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,UAAU,SAASC,eAAM,CAACC,SAAS,CAAC;EAExCC,WAAWA,CAAA,EAAI;IACb,KAAK,CAAC;MAAEC,UAAU,EAAE;IAAK,CAAC,CAAC;EAC7B;EAEAC,UAAUA,CAAEC,IAAI,EAAEC,QAAQ,EAAEC,MAAM,EAAE;IAClC,IAAI,CAACC,IAAI,CAAC,IAAI,CAACC,OAAO,CAACJ,IAAI,CAAC,EAAE,QAAQ,CAAC;IACvCE,MAAM,
|
|
1
|
+
{"version":3,"file":"dtx-encode.js","names":["_stream","_interopRequireDefault","require","_headers","DTXEncoder","Stream","Transform","constructor","objectMode","_transform","data","encoding","onData","push","_encode","sync","channelCode","selector","auxiliaries","identifier","dtx","DTXMessage","expectsReply","DTXMessageAux","build","exports"],"sources":["../../../../lib/instrument/transformer/dtx-encode.js"],"sourcesContent":["import Stream from 'stream';\nimport {DTXMessage, DTXMessageAux} from '../headers';\n\n\nclass DTXEncoder extends Stream.Transform {\n\n constructor () {\n super({ objectMode: true });\n }\n\n _transform (data, encoding, onData) {\n this.push(this._encode(data), 'buffer');\n onData();\n }\n\n _encode (data) {\n const {sync, channelCode, selector, auxiliaries, identifier} = data;\n const dtx = new DTXMessage({\n identifier,\n channelCode,\n selector,\n expectsReply: sync\n });\n if (auxiliaries instanceof DTXMessageAux) {\n dtx.auxiliaries = auxiliaries;\n } else {\n dtx.auxiliaries.data = auxiliaries;\n }\n return dtx.build();\n }\n}\n\nexport { DTXEncoder };\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,UAAU,SAASC,eAAM,CAACC,SAAS,CAAC;EAExCC,WAAWA,CAAA,EAAI;IACb,KAAK,CAAC;MAAEC,UAAU,EAAE;IAAK,CAAC,CAAC;EAC7B;EAEAC,UAAUA,CAAEC,IAAI,EAAEC,QAAQ,EAAEC,MAAM,EAAE;IAClC,IAAI,CAACC,IAAI,CAAC,IAAI,CAACC,OAAO,CAACJ,IAAI,CAAC,EAAE,QAAQ,CAAC;IACvCE,MAAM,CAAC,CAAC;EACV;EAEAE,OAAOA,CAAEJ,IAAI,EAAE;IACb,MAAM;MAACK,IAAI;MAAEC,WAAW;MAAEC,QAAQ;MAAEC,WAAW;MAAEC;IAAU,CAAC,GAAGT,IAAI;IACnE,MAAMU,GAAG,GAAG,IAAIC,mBAAU,CAAC;MACzBF,UAAU;MACVH,WAAW;MACXC,QAAQ;MACRK,YAAY,EAAEP;IAChB,CAAC,CAAC;IACF,IAAIG,WAAW,YAAYK,sBAAa,EAAE;MACxCH,GAAG,CAACF,WAAW,GAAGA,WAAW;IAC/B,CAAC,MAAM;MACLE,GAAG,CAACF,WAAW,CAACR,IAAI,GAAGQ,WAAW;IACpC;IACA,OAAOE,GAAG,CAACI,KAAK,CAAC,CAAC;EACpB;AACF;AAACC,OAAA,CAAArB,UAAA,GAAAA,UAAA"}
|
|
@@ -432,4 +432,4 @@ function updateNSKeyedArchiveClass(name, subClass) {
|
|
|
432
432
|
UNARCHIVE_CLASS_MAP[name] = subClass;
|
|
433
433
|
}
|
|
434
434
|
}
|
|
435
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnBsaXN0UGFyc2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYnBsaXN0Q3JlYXRvciIsIl91dWlkIiwiX2xvZGFzaCIsIk5TS0VZRURfQVJDSElWRV9WRVJTSU9OIiwiTlVMTF9VSUQiLCJwbGlzdGxpYiIsIlVJRCIsIkNZQ0xFX1RPS0VOIiwiUFJJTUlUSVZFX1RZUEVTIiwiTk9OX0VOQ09EQUJMRV9UWVBFUyIsIk5TS0VZRURBUkNISVZFUiIsIlVOSVgyQVBQTEVfVElNRVNUQU1QX1NFQ09ORCIsIkZPUk1BVF9WRVJTSU9OIiwiTlNfT0JKRUNUIiwiQXJjaGl2ZWRPYmplY3QiLCJjb25zdHJ1Y3RvciIsIm9iamVjdCIsInVuYXJjaGl2ZXIiLCJfdW5hcmNoaXZlciIsImRlY29kZUluZGV4IiwiaW5kZXgiLCJkZWNvZGVPYmplY3QiLCJkZWNvZGUiLCJrZXkiLCJkZWNvZGVLZXkiLCJBcmNoaXZpbmdPYmplY3QiLCJhcmNoaXZlciIsIl9hcmNoaXZlT2JqIiwiX2FyY2hpdmVyIiwiZW5jb2RlIiwidmFsIiwiQmFzZUFyY2hpdmVIYW5kbGVyIiwiYWRkaXRpb25DbGFzc2VzIiwiZGVjb2RlQXJjaGl2ZSIsImFyY2hpdmUiLCJFcnJvciIsImVuY29kZUFyY2hpdmUiLCJvYmoiLCJleHBvcnRzIiwiRGljdEFyY2hpdmUiLCJrZXlVaWRzIiwidmFsVWlkcyIsImQiLCJpIiwibGVuZ3RoIiwiTGlzdEFyY2hpdmUiLCJ1aWRzIiwibWFwIiwiYmluZCIsIkRUVGFwTWVzc2FnZVBsaXN0IiwiTlNFcnJvciIsIiRjbGFzcyIsImRvbWFpbiIsInVzZXJpbmZvIiwiY29kZSIsIk5TRXhjZXB0aW9uIiwicmVhc29uIiwibmFtZSIsIk5TVVJMIiwiYmFzZSIsInJlbGF0aXZlIiwiX2Jhc2UiLCJfcmVsYXRpdmUiLCJOU0RhdGUiLCJkYXRhIiwiX2RhdGEiLCJOU011dGFibGVTdHJpbmciLCJOU011dGFibGVEYXRhIiwiTlNVVUlEIiwidXVpZFN0cmluZ2lmeSIsIkJ1ZmZlciIsImZyb20iLCJ1dWlkUGFyc2UiLCJidWZmZXIiLCJYQ1RDYXBhYmlsaXRpZXMiLCJOU0lnbm9yZSIsIk5TTnVsbCIsIlhDVGVzdENvbmZpZ3VyYXRpb24iLCJfZGVmYXVsdCIsImFnZ3JlZ2F0ZVN0YXRpc3RpY3NCZWZvcmVDcmFzaCIsIlhDU3VpdGVSZWNvcmRzS2V5IiwiYXV0b21hdGlvbkZyYW1ld29ya1BhdGgiLCJiYXNlbGluZUZpbGVSZWxhdGl2ZVBhdGgiLCJ1bmRlZmluZWQiLCJiYXNlbGluZUZpbGVVUkwiLCJkZWZhdWx0VGVzdEV4ZWN1dGlvblRpbWVBbGxvd2FuY2UiLCJkaXNhYmxlUGVyZm9ybWFuY2VNZXRyaWNzIiwiZW1pdE9TTG9ncyIsImZvcm1hdFZlcnNpb24iLCJnYXRoZXJMb2NhbGl6YWJsZVN0cmluZ3NEYXRhIiwiaW5pdGlhbGl6ZUZvclVJVGVzdGluZyIsIm1heGltdW1UZXN0RXhlY3V0aW9uVGltZUFsbG93YW5jZSIsInByb2R1Y3RNb2R1bGVOYW1lIiwicmFuZG9tRXhlY3V0aW9uT3JkZXJpbmdTZWVkIiwicmVwb3J0QWN0aXZpdGllcyIsInJlcG9ydFJlc3VsdHNUb0lERSIsInN5c3RlbUF0dGFjaG1lbnRMaWZldGltZSIsInRhcmdldEFwcGxpY2F0aW9uQXJndW1lbnRzIiwidGFyZ2V0QXBwbGljYXRpb25CdW5kbGVJRCIsInRhcmdldEFwcGxpY2F0aW9uRW52aXJvbm1lbnQiLCJ0YXJnZXRBcHBsaWNhdGlvblBhdGgiLCJ0ZXN0QXBwbGljYXRpb25EZXBlbmRlbmNpZXMiLCJ0ZXN0QXBwbGljYXRpb25Vc2VyT3ZlcnJpZGVzIiwidGVzdEJ1bmRsZVJlbGF0aXZlUGF0aCIsInRlc3RFeGVjdXRpb25PcmRlcmluZyIsInRlc3RUaW1lb3V0c0VuYWJsZWQiLCJ0ZXN0c0RyaXZlbkJ5SURFIiwidGVzdHNNdXN0UnVuT25NYWluVGhyZWFkIiwidGVzdHNUb1J1biIsInRlc3RzVG9Ta2lwIiwidHJlYXRNaXNzaW5nQmFzZWxpbmVzQXNGYWlsdXJlcyIsInVzZXJBdHRhY2htZW50TGlmZXRpbWUiLCJ0ZXN0QnVuZGxlVVJMIiwiVHlwZUVycm9yIiwic2Vzc2lvbklkZW50aWZpZXIiLCJnZXRCeXRlcyIsIlhDQWN0aXZpdHlSZWNvcmQiLCJfa2V5cyIsInJlZHVjZSIsImFjYyIsIlVOQVJDSElWRV9DTEFTU19NQVAiLCJEVFN5c21vblRhcE1lc3NhZ2UiLCJEVFRhcEhlYXJ0YmVhdE1lc3NhZ2UiLCJEVFRhcE1lc3NhZ2VBcmNoaXZlIiwiRFRLVHJhY2VUYXBNZXNzYWdlIiwiRXJyb3JBcmNoaXZlIiwiRXhjZXB0aW9uQXJjaGl2ZSIsIk5TRGljdGlvbmFyeSIsIk5TTXV0YWJsZURpY3Rpb25hcnkiLCJOU0FycmF5IiwiTlNNdXRhYmxlQXJyYXkiLCJOU011dGFibGVTZXQiLCJOU1NldCIsIlVuYXJjaGl2ZSIsImlucHV0Qnl0ZXMiLCJpbnB1dCIsInVucGFja2VkVWlkcyIsInRvcFVJRCIsIm9iamVjdHMiLCJ1bnBhY2tBcmNoaXZlSGVhZGVyIiwicGxpc3QiLCJwYXJzZUJ1ZmZlciIsIiRhcmNoaXZlciIsIiR2ZXJzaW9uIiwidG9wIiwiJHRvcCIsInJvb3QiLCJKU09OIiwic3RyaW5naWZ5IiwiJG9iamVjdHMiLCJjbGFzc0ZvclVpZCIsIm1ldGEiLCIkY2xhc3NuYW1lIiwia2xhc3MiLCJfIiwiaXNOaWwiLCJpc1VuZGVmaW5lZCIsInJhd09iaiIsImtsYXNzT2JqIiwidG9PYmplY3QiLCJBcmNoaXZlIiwiaW5wdXRPYmplY3QiLCJ1aWRGb3JBcmNoaXZlciIsImFkZGl0aW9uIiwicHVzaCIsIiRjbGFzc2VzIiwiaXNOdWxsIiwiaW5jbHVkZXMiLCJhcmNoaXZlT2JqIiwiZW5jb2RlVG9wTGV2ZWwiLCJBcnJheSIsImVuY29kZUFycmF5IiwiU2V0IiwiZW5jb2RlU2V0IiwiZW5jb2RlWENUZXN0Q29uZmlndXJhdGlvbiIsIk9iamVjdCIsIm9iak5hbWUiLCJlbmNvZGVEaWN0Iiwib2JqcyIsImtleXMiLCJ2YWx1ZXMiLCJlbnRyaWVzIiwiZm9yRWFjaCIsInZhbHVlIiwidG9CeXRlcyIsImJwbGlzdENyZWF0ZSIsInVuYXJjaGl2ZSIsInVwZGF0ZU5TS2V5ZWRBcmNoaXZlQ2xhc3MiLCJzdWJDbGFzcyIsIl9zdWJDbGFzcyRwcm90b3R5cGUiLCJfc3ViQ2xhc3MkcHJvdG90eXBlMiIsImlzRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvaW5zdHJ1bWVudC90cmFuc2Zvcm1lci9uc2tleWVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwbGlzdGxpYiBmcm9tICdicGxpc3QtcGFyc2VyJztcbmltcG9ydCBicGxpc3RDcmVhdGUgZnJvbSAnYnBsaXN0LWNyZWF0b3InO1xuaW1wb3J0IHsgcGFyc2UgYXMgdXVpZFBhcnNlLCBzdHJpbmdpZnkgYXMgdXVpZFN0cmluZ2lmeSB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgTlNLRVlFRF9BUkNISVZFX1ZFUlNJT04gPSAxMDBfMDAwO1xuY29uc3QgTlVMTF9VSUQgPSBuZXcgcGxpc3RsaWIuVUlEKDApO1xuY29uc3QgQ1lDTEVfVE9LRU4gPSAnQ3ljbGVUb2tlbic7XG5jb25zdCBQUklNSVRJVkVfVFlQRVMgPSBbJ051bWJlcicsICdTdHJpbmcnLCAnQm9vbGVhbicsICdVSUQnLCAnQnVmZmVyJ107XG5jb25zdCBOT05fRU5DT0RBQkxFX1RZUEVTID0gWydudW1iZXInLCAnYm9vbGVhbiddO1xuY29uc3QgTlNLRVlFREFSQ0hJVkVSID0gJ05TS2V5ZWRBcmNoaXZlcic7XG5jb25zdCBVTklYMkFQUExFX1RJTUVTVEFNUF9TRUNPTkQgPSA5NzgzMDcyMDA7XG5jb25zdCBGT1JNQVRfVkVSU0lPTiA9ICdmb3JtYXRWZXJzaW9uJztcbmNvbnN0IE5TX09CSkVDVCA9ICdOU09iamVjdCc7XG5cblxuY2xhc3MgQXJjaGl2ZWRPYmplY3Qge1xuICAvKipcbiAgICogU3RhdGVmdWwgd3JhcHBlciBhcm91bmQgQXJjaGl2ZSBmb3IgYW4gb2JqZWN0IGJlaW5nIGFyY2hpdmVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7VW5hcmNoaXZlfSB1bmFyY2hpdmVyXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3Iob2JqZWN0LCB1bmFyY2hpdmVyKSB7XG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG4gICAgdGhpcy5fdW5hcmNoaXZlciA9IHVuYXJjaGl2ZXI7XG4gIH1cblxuICBkZWNvZGVJbmRleChpbmRleCkge1xuICAgIHJldHVybiB0aGlzLl91bmFyY2hpdmVyLmRlY29kZU9iamVjdChpbmRleCk7XG4gIH1cblxuICBkZWNvZGUoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX3VuYXJjaGl2ZXIuZGVjb2RlS2V5KHRoaXMub2JqZWN0LCBrZXkpO1xuICB9XG59XG5cbmNsYXNzIEFyY2hpdmluZ09iamVjdCB7XG4gIC8qKlxuICAgKiBTdGF0ZWZ1bCB3cmFwcGVyIGFyb3VuZCBVbmFyY2hpdmUgZm9yIGFuIGFyY2hpdmVkIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJjaGl2ZX0gYXJjaGl2ZXJcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvYmplY3QsIGFyY2hpdmVyKSB7XG4gICAgdGhpcy5fYXJjaGl2ZU9iaiA9IG9iamVjdDtcbiAgICB0aGlzLl9hcmNoaXZlciA9IGFyY2hpdmVyO1xuICB9XG5cbiAgZW5jb2RlKGtleSwgdmFsKSB7XG4gICAgdGhpcy5fYXJjaGl2ZU9ialtrZXldID0gdGhpcy5fYXJjaGl2ZXIuZW5jb2RlKHZhbCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIG11c3QgYmUgaW5oZXJpdGVkIHdoZW4gY3JlYXRpbmcgYW4gYXJjaGl2ZS91bmFyY2hpdmUgc3ViY2xhc3NcbiAqIEFuZCB5b3UgbmVlZCB0byBjYWxsIGB1cGRhdGVOU0tleWVkQXJjaGl2ZUNsYXNzYCBhZGQgc3ViY2xhc3MgdG8gYXJjaGl2ZS91bmFyY2hpdmUgb2JqZWN0XG4gKi9cbmNsYXNzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIC8qKlxuICAgKiBzb21lIG9mIHRoZSBjbGFzc2VzIG1heSBoYXZlIHRvIGFkZCAnTlNPYmplY3QnIG9yIG1heWJlIG1vcmUgaW4gJGNsYXNzZXMgd2hpbGUgZW5jb2RpbmcuXG4gICAqL1xuICBhZGRpdGlvbkNsYXNzZXMgPSBbXTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJjaGl2ZWRPYmplY3R9IGFyY2hpdmVcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3Qga25vdyBob3cgdG8gZGVjb2RlIHRoZSBvYmplY3RgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqICBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzXG4gICAqIEBwYXJhbSB7QXJjaGl2aW5nT2JqZWN0fSBhcmNoaXZlXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZW5jb2RlQXJjaGl2ZShvYmosIGFyY2hpdmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3Qga25vdyBob3cgdG8gZW5jb2RlIHRoZSBvYmplY3RgKTtcbiAgfVxufVxuXG4vKipcbiAqIFwiRGVsZWdhdGUgZm9yIHBhY2tpbmcvdW5wYWNraW5nIE5TKE11dGFibGUpRGljdGlvbmFyeSBvYmplY3RzXCJcbiAqL1xuY2xhc3MgRGljdEFyY2hpdmUgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICBjb25zdCBrZXlVaWRzID0gYXJjaGl2ZS5kZWNvZGUoJ05TLmtleXMnKTtcbiAgICBjb25zdCB2YWxVaWRzID0gYXJjaGl2ZS5kZWNvZGUoJ05TLm9iamVjdHMnKTtcbiAgICBjb25zdCBkID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlVaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBhcmNoaXZlLmRlY29kZUluZGV4KGtleVVpZHNbaV0pO1xuICAgICAgZFtrZXldID0gYXJjaGl2ZS5kZWNvZGVJbmRleCh2YWxVaWRzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWxlZ2F0ZSBmb3IgcGFja2luZy91bnBhY2tpbmcgTlMoTXV0YWJsZSlBcnJheSBvYmplY3RzXG4gKi9cbmNsYXNzIExpc3RBcmNoaXZlIGV4dGVuZHMgQmFzZUFyY2hpdmVIYW5kbGVyIHtcbiAgZGVjb2RlQXJjaGl2ZShhcmNoaXZlKSB7XG4gICAgY29uc3QgdWlkcyA9IGFyY2hpdmUuZGVjb2RlKCdOUy5vYmplY3RzJyk7XG4gICAgcmV0dXJuIHVpZHMubWFwKGFyY2hpdmUuZGVjb2RlSW5kZXguYmluZChhcmNoaXZlKSk7XG4gIH1cbn1cblxuY2xhc3MgRFRUYXBNZXNzYWdlUGxpc3QgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICByZXR1cm4gYXJjaGl2ZS5kZWNvZGUoJ0RUVGFwTWVzc2FnZVBsaXN0Jyk7XG4gIH1cbn1cblxuY2xhc3MgTlNFcnJvciBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIGRlY29kZUFyY2hpdmUoYXJjaGl2ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAkY2xhc3M6ICdOU0Vycm9yJyxcbiAgICAgIGRvbWFpbjogYXJjaGl2ZS5kZWNvZGUoJ05TRG9tYWluJyksXG4gICAgICB1c2VyaW5mbzogYXJjaGl2ZS5kZWNvZGUoJ05TVXNlckluZm8nKSxcbiAgICAgIGNvZGU6IGFyY2hpdmUuZGVjb2RlKCdOU0NvZGUnKVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTlNFeGNlcHRpb24gZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGNsYXNzOiAnTlNFeGNlcHRpb24nLFxuICAgICAgcmVhc29uOiBhcmNoaXZlLmRlY29kZSgnTlMucmVhc29uJyksXG4gICAgICB1c2VyaW5mbzogYXJjaGl2ZS5kZWNvZGUoJ3VzZXJpbmZvJyksXG4gICAgICBuYW1lOiBhcmNoaXZlLmRlY29kZSgnTlMubmFtZScpXG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBOU1VSTCBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0geyp9IGJhc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlIHVzdWFsbHkgaW9zIGRldmljZSByZWxhdGl2ZSBwYXRoIGUuZzogZmlsZTovL3h4L1xuICAgKi9cbiAgY29uc3RydWN0b3IoYmFzZSwgcmVsYXRpdmUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2Jhc2UgPSBiYXNlO1xuICAgIHRoaXMuX3JlbGF0aXZlID0gcmVsYXRpdmU7XG4gICAgdGhpcy5hZGRpdGlvbkNsYXNzZXMgPSBbTlNfT0JKRUNUXTtcbiAgfVxuXG4gIGRlY29kZUFyY2hpdmUoYXJjaGl2ZSkge1xuICAgIHJldHVybiB7ICRjbGFzczogJ05TVVJMJywgYmFzZTogYXJjaGl2ZS5kZWNvZGUoJ05TLmJhc2UnKSwgcmVsYXRpdmU6IGFyY2hpdmUuZGVjb2RlKCdOUy5yZWxhdGl2ZScpIH07XG4gIH1cblxuICBlbmNvZGVBcmNoaXZlKG9iaiwgYXJjaGl2ZSkge1xuICAgIGFyY2hpdmUuZW5jb2RlKCdOUy5iYXNlJywgb2JqLl9iYXNlKTtcbiAgICBhcmNoaXZlLmVuY29kZSgnTlMucmVsYXRpdmUnLCBvYmouX3JlbGF0aXZlKTtcbiAgfVxufVxuXG5jbGFzcyBOU0RhdGUgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRhdGEgdGltZXN0YW1wIGluIHNlY29uZHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgZGVjb2RlQXJjaGl2ZShhcmNoaXZlKSB7XG4gICAgcmV0dXJuIFVOSVgyQVBQTEVfVElNRVNUQU1QX1NFQ09ORCArIGFyY2hpdmUuZGVjb2RlKCdOUy50aW1lJyk7XG4gIH1cblxuICBlbmNvZGVBcmNoaXZlKG9iaiwgYXJjaGl2ZSkge1xuICAgIGFyY2hpdmUuZW5jb2RlKCdOUy50aW1lJywgb2JqLl9kYXRhIC0gVU5JWDJBUFBMRV9USU1FU1RBTVBfU0VDT05EKTtcbiAgfVxufVxuXG5jbGFzcyBOU011dGFibGVTdHJpbmcgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICByZXR1cm4gYXJjaGl2ZS5kZWNvZGUoJ05TLnN0cmluZycpO1xuICB9XG59XG5cbmNsYXNzIE5TTXV0YWJsZURhdGEgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICByZXR1cm4gYXJjaGl2ZS5kZWNvZGUoJ05TLmRhdGEnKTtcbiAgfVxufVxuXG5jbGFzcyBOU1VVSUQgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgdXVpZCBmb3JtYXQgZGF0YSBlLmc6MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICB0aGlzLmFkZGl0aW9uQ2xhc3NlcyA9IFtOU19PQkpFQ1RdO1xuICB9XG5cbiAgZGVjb2RlQXJjaGl2ZShhcmNoaXZlKSB7XG4gICAgcmV0dXJuIHV1aWRTdHJpbmdpZnkoYXJjaGl2ZS5kZWNvZGUoJ05TLnV1aWRieXRlcycpKTtcbiAgfVxuXG4gIGVuY29kZUFyY2hpdmUob2JqLCBhcmNoaXZlKSB7XG4gICAgYXJjaGl2ZS5fYXJjaGl2ZU9ialsnTlMudXVpZGJ5dGVzJ10gPSBCdWZmZXIuZnJvbSh1dWlkUGFyc2Uob2JqLl9kYXRhKS5idWZmZXIpO1xuICB9XG59XG5cbmNsYXNzIFhDVENhcGFiaWxpdGllcyBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIGRlY29kZUFyY2hpdmUoYXJjaGl2ZSkge1xuICAgIHJldHVybiBhcmNoaXZlLmRlY29kZSgnY2FwYWJpbGl0aWVzLWRpY3Rpb25hcnknKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvbWUgb2YgdGhlIHBsaXN0IGNsYXNzZXMgbWF5IG5vdCBiZSBpbmNsdWRlZCBhbmQgc2hvdWxkIG5vdCBiZSBjYXJlZC5cbiAqIFVzaW5nIHRoaXMgYXMgYSBkZWZhdWx0IGRlY29kZXIgZm9yIHVua25vd24gZW50aXRpZXMgdG8gYXZvaWQgaW50ZXJydXB0aW5nIGRlY29kZSBwcm9jZXNzLlxuICovXG5jbGFzcyBOU0lnbm9yZSBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIGRlY29kZUFyY2hpdmUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY2xhc3MgTlNOdWxsIGV4dGVuZHMgQmFzZUFyY2hpdmVIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZGl0aW9uQ2xhc3NlcyA9IFtOU19PQkpFQ1RdO1xuICB9XG4gIGRlY29kZUFyY2hpdmUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBYQ1Rlc3RDb25maWd1cmF0aW9uUGxpc3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgTlNVUkx9IHRlc3RCdW5kbGVVUkxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgTlNVVUlEfSBzZXNzaW9uSWRlbnRpZmllclxuICogQHByb3BlcnR5IHtzdHJpbmc/fSBwcm9kdWN0TW9kdWxlTmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmc/fSB0YXJnZXRBcHBsaWNhdGlvbkJ1bmRsZUlEXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdP30gdGFyZ2V0QXBwbGljYXRpb25Bcmd1bWVudHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW10/fSB0ZXN0c1RvUnVuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdP30gdGVzdHNUb1NraXBcbiAqL1xuY2xhc3MgWENUZXN0Q29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIHN0YXRpYyBfZGVmYXVsdCA9IHtcbiAgICBhZ2dyZWdhdGVTdGF0aXN0aWNzQmVmb3JlQ3Jhc2g6IHtcbiAgICAgIFhDU3VpdGVSZWNvcmRzS2V5OiB7fVxuICAgIH0sXG4gICAgYXV0b21hdGlvbkZyYW1ld29ya1BhdGg6ICcvRGV2ZWxvcGVyL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvWENUQXV0b21hdGlvblN1cHBvcnQuZnJhbWV3b3JrJyxcbiAgICBiYXNlbGluZUZpbGVSZWxhdGl2ZVBhdGg6IHVuZGVmaW5lZCxcbiAgICBiYXNlbGluZUZpbGVVUkw6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VGVzdEV4ZWN1dGlvblRpbWVBbGxvd2FuY2U6IHVuZGVmaW5lZCxcbiAgICBkaXNhYmxlUGVyZm9ybWFuY2VNZXRyaWNzOiBmYWxzZSxcbiAgICBlbWl0T1NMb2dzOiBmYWxzZSxcbiAgICBmb3JtYXRWZXJzaW9uOiAyLFxuICAgIGdhdGhlckxvY2FsaXphYmxlU3RyaW5nc0RhdGE6IGZhbHNlLFxuICAgIGluaXRpYWxpemVGb3JVSVRlc3Rpbmc6IHRydWUsXG4gICAgbWF4aW11bVRlc3RFeGVjdXRpb25UaW1lQWxsb3dhbmNlOiB1bmRlZmluZWQsXG4gICAgcHJvZHVjdE1vZHVsZU5hbWU6ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcicsXG4gICAgcmFuZG9tRXhlY3V0aW9uT3JkZXJpbmdTZWVkOiB1bmRlZmluZWQsXG4gICAgcmVwb3J0QWN0aXZpdGllczogdHJ1ZSxcbiAgICByZXBvcnRSZXN1bHRzVG9JREU6IHRydWUsXG4gICAgc3lzdGVtQXR0YWNobWVudExpZmV0aW1lOiAyLFxuICAgIHRhcmdldEFwcGxpY2F0aW9uQXJndW1lbnRzOiBbXSxcbiAgICB0YXJnZXRBcHBsaWNhdGlvbkJ1bmRsZUlEOiB1bmRlZmluZWQsXG4gICAgdGFyZ2V0QXBwbGljYXRpb25FbnZpcm9ubWVudDogdW5kZWZpbmVkLFxuICAgIHRhcmdldEFwcGxpY2F0aW9uUGF0aDogJy9LRUVQLVRISVMtTk9ULUVNUFRZL0tFRVAtVEhJUy1OT1QtRU1QVFknLFxuICAgIHRlc3RBcHBsaWNhdGlvbkRlcGVuZGVuY2llczoge30sXG4gICAgdGVzdEFwcGxpY2F0aW9uVXNlck92ZXJyaWRlczogdW5kZWZpbmVkLFxuICAgIHRlc3RCdW5kbGVSZWxhdGl2ZVBhdGg6IHVuZGVmaW5lZCxcbiAgICB0ZXN0RXhlY3V0aW9uT3JkZXJpbmc6IDAsXG4gICAgdGVzdFRpbWVvdXRzRW5hYmxlZDogZmFsc2UsXG4gICAgdGVzdHNEcml2ZW5CeUlERTogZmFsc2UsXG4gICAgdGVzdHNNdXN0UnVuT25NYWluVGhyZWFkOiB0cnVlLFxuICAgIHRlc3RzVG9SdW46IHVuZGVmaW5lZCxcbiAgICB0ZXN0c1RvU2tpcDogdW5kZWZpbmVkLFxuICAgIHRyZWF0TWlzc2luZ0Jhc2VsaW5lc0FzRmFpbHVyZXM6IGZhbHNlLFxuICAgIHVzZXJBdHRhY2htZW50TGlmZXRpbWU6IDFcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1hDVGVzdENvbmZpZ3VyYXRpb25QbGlzdH0gZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCFkYXRhLnRlc3RCdW5kbGVVUkwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Rlc3RCdW5kbGVVUkwgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmICghZGF0YS5zZXNzaW9uSWRlbnRpZmllcikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vzc2lvbklkZW50aWZpZXIgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YS50ZXN0QnVuZGxlVVJMID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YS50ZXN0QnVuZGxlVVJMID0gbmV3IE5TVVJMKHVuZGVmaW5lZCwgZGF0YS50ZXN0QnVuZGxlVVJMKTtcbiAgICB9XG4gICAgaWYgKCEoZGF0YS50ZXN0QnVuZGxlVVJMIGluc3RhbmNlb2YgTlNVUkwpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCB0ZXN0QnVuZGxlVVJMIHRvIGJlIGEgdmFsaWQgTlNVUkwgaW5zdGFuY2UsIGdvdCAke2RhdGEudGVzdEJ1bmRsZVVSTC5jb25zdHJ1Y3Rvci5uYW1lfSBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YS5zZXNzaW9uSWRlbnRpZmllciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEuc2Vzc2lvbklkZW50aWZpZXIgPSBuZXcgTlNVVUlEKGRhdGEuc2Vzc2lvbklkZW50aWZpZXIpO1xuICAgIH1cbiAgICBpZiAoIShkYXRhLnNlc3Npb25JZGVudGlmaWVyIGluc3RhbmNlb2YgTlNVVUlEKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgc2Vzc2lvbklkZW50aWZpZXIgdG8gYmUgYSB2YWxpZCBOU1VVSUQgaW5zdGFuY2UsIGdvdCAke2RhdGEuc2Vzc2lvbklkZW50aWZpZXIuY29uc3RydWN0b3IubmFtZX0gaW5zdGVhZGApO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhID0geyAuLi5YQ1Rlc3RDb25maWd1cmF0aW9uLl9kZWZhdWx0LCAuLi5kYXRhIH07XG4gIH1cblxuICBnZXRCeXRlcygpIHtcbiAgICByZXR1cm4gYXJjaGl2ZSh0aGlzKTtcbiAgfVxufVxuXG5jbGFzcyBYQ0FjdGl2aXR5UmVjb3JkIGV4dGVuZHMgQmFzZUFyY2hpdmVIYW5kbGVyIHtcbiAgc3RhdGljIF9rZXlzID0gWydhY3Rpdml0eVR5cGUnLCAnYXR0YWNobWVudHMnLCAnZmluaXNoJywgJ3N0YXJ0JywgJ3RpdGxlJywgJ3V1aWQnXTtcbiAgZGVjb2RlQXJjaGl2ZShhcmNoaXZlKSB7XG4gICAgcmV0dXJuIFhDQWN0aXZpdHlSZWNvcmQuX2tleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBhcmNoaXZlLmRlY29kZShrZXkpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbn1cblxuLyoqXG4gKiBkZWNvZGUgYW5kIGVuY29kZSBBcmNoaXZlIG9mIGN1cnJlbnRseSBrbm93biBkYXRhIGZvcm1hdHNcbiAqL1xuY29uc3QgVU5BUkNISVZFX0NMQVNTX01BUCA9IHtcbiAgRFRUYXBNZXNzYWdlUGxpc3QsXG4gIERUU3lzbW9uVGFwTWVzc2FnZTogRFRUYXBNZXNzYWdlUGxpc3QsXG4gIERUVGFwSGVhcnRiZWF0TWVzc2FnZTogRFRUYXBNZXNzYWdlUGxpc3QsXG4gIERUVGFwTWVzc2FnZUFyY2hpdmU6IERUVGFwTWVzc2FnZVBsaXN0LFxuICBEVEtUcmFjZVRhcE1lc3NhZ2U6IERUVGFwTWVzc2FnZVBsaXN0LFxuICBFcnJvckFyY2hpdmU6IE5TRXJyb3IsXG4gIEV4Y2VwdGlvbkFyY2hpdmU6IE5TRXhjZXB0aW9uLFxuICBOU0RpY3Rpb25hcnk6IERpY3RBcmNoaXZlLFxuICBOU011dGFibGVEaWN0aW9uYXJ5OiBEaWN0QXJjaGl2ZSxcbiAgTlNBcnJheTogTGlzdEFyY2hpdmUsXG4gIE5TTXV0YWJsZUFycmF5OiBMaXN0QXJjaGl2ZSxcbiAgTlNNdXRhYmxlU2V0OiBMaXN0QXJjaGl2ZSxcbiAgTlNTZXQ6IExpc3RBcmNoaXZlLFxuICBOU0RhdGUsXG4gIE5TRXJyb3IsXG4gIE5TRXhjZXB0aW9uLFxuICBOU011dGFibGVTdHJpbmcsXG4gIE5TTXV0YWJsZURhdGEsXG4gIE5TTnVsbCxcbiAgTlNVVUlELFxuICBOU1VSTCxcbiAgWENBY3Rpdml0eVJlY29yZCxcbiAgWENUQ2FwYWJpbGl0aWVzLFxuICBYQ1Rlc3RDb25maWd1cmF0aW9uLFxufTtcblxuLyoqXG4gKiBDYXBhYmxlIG9mIHVucGFja2luZyBhbiBhcmNoaXZlZCBvYmplY3QgdHJlZSBpbiB0aGUgTlNLZXllZEFyY2hpdmUgZm9ybWF0LlxuICogQXBwbGUncyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBsZS9zd2lmdC1jb3JlbGlicy1mb3VuZGF0aW9uL2Jsb2IvbWFpbi9Tb3VyY2VzL0ZvdW5kYXRpb24vTlNLZXllZFVuYXJjaGl2ZXIuc3dpZnRcbiAqL1xuY2xhc3MgVW5hcmNoaXZlIHtcbiAgY29uc3RydWN0b3IoaW5wdXRCeXRlcykge1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dEJ5dGVzO1xuICAgIHRoaXMudW5wYWNrZWRVaWRzID0ge307XG4gICAgdGhpcy50b3BVSUQgPSBOVUxMX1VJRDtcbiAgICB0aGlzLm9iamVjdHMgPSBbXTtcbiAgfVxuXG4gIHVucGFja0FyY2hpdmVIZWFkZXIoKSB7XG4gICAgY29uc3QgcGxpc3QgPSBwbGlzdGxpYi5wYXJzZUJ1ZmZlcih0aGlzLmlucHV0KVswXTtcbiAgICBpZiAocGxpc3QuJGFyY2hpdmVyICE9PSBOU0tFWUVEQVJDSElWRVIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZW5jb2RlcjogJHtwbGlzdC4kYXJjaGl2ZXJ9YCk7XG4gICAgfVxuICAgIGlmIChwbGlzdC4kdmVyc2lvbiAhPT0gTlNLRVlFRF9BUkNISVZFX1ZFUlNJT04pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtOU0tFWUVEX0FSQ0hJVkVfVkVSU0lPTn0sIGdvdCAke3BsaXN0LiR2ZXJzaW9ufWApO1xuICAgIH1cbiAgICBjb25zdCB0b3AgPSBwbGlzdC4kdG9wO1xuICAgIGNvbnN0IHRvcFVJRCA9IHRvcC5yb290O1xuICAgIGlmICghdG9wVUlEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRvcCBvYmplY3QgZGlkIG5vdCBoYXZlIGEgVUlEISBkdW1wOiAke0pTT04uc3RyaW5naWZ5KHRvcCl9YCk7XG4gICAgfVxuICAgIHRoaXMudG9wVUlEID0gdG9wVUlEO1xuICAgIHRoaXMub2JqZWN0cyA9IHBsaXN0LiRvYmplY3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZSB0aGUgVU5BUkNISVZFX0NMQVNTX01BUCB0byBmaW5kIHRoZSB1bmFyY2hpdmluZyBkZWxlZ2F0ZSBvZiBhIHVpZFxuICAgKi9cbiAgY2xhc3NGb3JVaWQoaW5kZXgpIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5vYmplY3RzW2luZGV4LlVJRF07XG4gICAgY29uc3QgbmFtZSA9IG1ldGEuJGNsYXNzbmFtZTtcbiAgICBjb25zdCBrbGFzcyA9IFVOQVJDSElWRV9DTEFTU19NQVBbbmFtZV0gPz8gTlNJZ25vcmU7XG4gICAgcmV0dXJuIGtsYXNzO1xuICB9XG5cbiAgZGVjb2RlS2V5KG9iaiwga2V5KSB7XG4gICAgY29uc3QgdmFsID0gb2JqW2tleV07XG4gICAgcmV0dXJuIF8uaXNOaWwodmFsPy5VSUQpID8gdmFsIDogdGhpcy5kZWNvZGVPYmplY3QodmFsKTtcbiAgfVxuXG4gIGRlY29kZU9iamVjdChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gTlVMTF9VSUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBvYmogPSB0aGlzLnVucGFja2VkVWlkc1tpbmRleF07XG4gICAgaWYgKG9iaiA9PT0gQ1lDTEVfVE9LRU4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYXJjaGl2ZSBoYXMgYSBjeWNsZSB3aXRoICR7aW5kZXh9YCk7XG4gICAgfVxuICAgIGlmICghXy5pc1VuZGVmaW5lZChvYmopKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBjb25zdCByYXdPYmogPSB0aGlzLm9iamVjdHNbaW5kZXguVUlEXTtcbiAgICB0aGlzLnVucGFja2VkVWlkc1tpbmRleC5VSURdID0gQ1lDTEVfVE9LRU47XG5cbiAgICBpZiAoIXJhd09iaj8uJGNsYXNzKSB7XG4gICAgICB0aGlzLnVucGFja2VkVWlkc1tpbmRleC5VSURdID0gb2JqO1xuICAgICAgcmV0dXJuIHJhd09iajtcbiAgICB9XG4gICAgY29uc3Qga2xhc3MgPSB0aGlzLmNsYXNzRm9yVWlkKHJhd09iai4kY2xhc3MpO1xuICAgIGNvbnN0IGtsYXNzT2JqID0gbmV3IGtsYXNzKCkuZGVjb2RlQXJjaGl2ZShuZXcgQXJjaGl2ZWRPYmplY3QocmF3T2JqLCB0aGlzKSk7XG4gICAgdGhpcy51bnBhY2tlZFVpZHNbaW5kZXguVUlEXSA9IGtsYXNzT2JqO1xuICAgIHJldHVybiBrbGFzc09iajtcbiAgfVxuXG4gIHRvT2JqZWN0KCkge1xuICAgIHRoaXMudW5wYWNrQXJjaGl2ZUhlYWRlcigpO1xuICAgIHJldHVybiB0aGlzLmRlY29kZU9iamVjdCh0aGlzLnRvcFVJRCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDYXBhYmxlIG9mIHBhY2tpbmcgYW4gb2JqZWN0IHRyZWUgaW50byB0aGUgTlNLZXllZEFyY2hpdmUgZm9ybWF0LlxuICogQXBwbGUncyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBsZS9zd2lmdC1jb3JlbGlicy1mb3VuZGF0aW9uL2Jsb2IvbWFpbi9Tb3VyY2VzL0ZvdW5kYXRpb24vTlNLZXllZEFyY2hpdmVyLnN3aWZ0XG4gKi9cbmNsYXNzIEFyY2hpdmUge1xuICBjb25zdHJ1Y3RvcihpbnB1dE9iamVjdCkge1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dE9iamVjdDtcbiAgICB0aGlzLm9iamVjdHMgPSBbJyRudWxsJ107IC8vIG9iamVjdHMgdGhhdCBnbyBkaXJlY3RseSBpbnRvIHRoZSBhcmNoaXZlLCBhbHdheXMgc3RhcnQgd2l0aCAkbnVsbFxuICB9XG5cbiAgdWlkRm9yQXJjaGl2ZXIoYXJjaGl2ZXIsIC4uLmFkZGl0aW9uKSB7XG4gICAgY29uc3QgdmFsID0gbmV3IHBsaXN0bGliLlVJRCh0aGlzLm9iamVjdHMubGVuZ3RoKTtcbiAgICB0aGlzLm9iamVjdHMucHVzaCh7XG4gICAgICAkY2xhc3NlczogW2FyY2hpdmVyLCAuLi5hZGRpdGlvbl0sXG4gICAgICAkY2xhc3NuYW1lOiBhcmNoaXZlclxuICAgIH0pO1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBhcmNoaXZlKG9iaikge1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKG9iaikgfHwgXy5pc051bGwob2JqKSkge1xuICAgICAgcmV0dXJuIE5VTExfVUlEO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IG5ldyBwbGlzdGxpYi5VSUQodGhpcy5vYmplY3RzLmxlbmd0aCk7XG4gICAgaWYgKFBSSU1JVElWRV9UWVBFUy5pbmNsdWRlcyhvYmouY29uc3RydWN0b3IubmFtZSkpIHtcbiAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICAgIGNvbnN0IGFyY2hpdmVPYmogPSB7fTtcbiAgICB0aGlzLm9iamVjdHMucHVzaChhcmNoaXZlT2JqKTtcbiAgICB0aGlzLmVuY29kZVRvcExldmVsKG9iaiwgYXJjaGl2ZU9iaik7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgZW5jb2RlKHZhbCkge1xuICAgIGlmIChOT05fRU5DT0RBQkxFX1RZUEVTLmluY2x1ZGVzKHR5cGVvZiB2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcmNoaXZlKHZhbCk7XG4gIH1cblxuICBlbmNvZGVUb3BMZXZlbChvYmosIGFyY2hpdmVPYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuY29kZUFycmF5KG9iaiwgYXJjaGl2ZU9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuY29kZVNldChvYmosIGFyY2hpdmVPYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgWENUZXN0Q29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlWENUZXN0Q29uZmlndXJhdGlvbihvYmosIGFyY2hpdmVPYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICBjb25zdCBvYmpOYW1lID0gb2JqLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAvLyBPbmx5IHNwZWNpYWwgY2xhc3MgaW5zdGFuY2UgYXJlIHVzZWZ1bCwgc3VjaCBhcyBOU1VSTCwgTlNVVUlELCBOU0RhdGUuXG4gICAgICAvLyBBbmQgdGhpcyBjbGFzcyBtdXN0IGFsc28gaGF2ZSB0aGUgZW5jb2RlQXJjaGl2ZSBtZXRob2RcbiAgICAgIGlmIChvYmpOYW1lIGluIFVOQVJDSElWRV9DTEFTU19NQVApIHtcbiAgICAgICAgb2JqLmVuY29kZUFyY2hpdmUob2JqLCBuZXcgQXJjaGl2aW5nT2JqZWN0KGFyY2hpdmVPYmosIHRoaXMpKTtcbiAgICAgICAgYXJjaGl2ZU9iai4kY2xhc3MgPSB0aGlzLnVpZEZvckFyY2hpdmVyKG9iak5hbWUsIC4uLihvYmouYWRkaXRpb25DbGFzc2VzID8/IFtdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGVEaWN0KG9iaiwgYXJjaGl2ZU9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKGBVbmFibGUgdG8gZW5jb2RlIHR5cGVzOiAke3R5cGVvZiBvYmp9YCk7XG4gICAgfVxuICB9XG5cbiAgZW5jb2RlQXJyYXkob2JqcywgYXJjaGl2ZU9iaikge1xuICAgIGFyY2hpdmVPYmouJGNsYXNzID0gdGhpcy51aWRGb3JBcmNoaXZlcignTlNBcnJheScsIE5TX09CSkVDVCk7XG4gICAgYXJjaGl2ZU9ialsnTlMub2JqZWN0cyddID0gb2Jqcy5tYXAodGhpcy5hcmNoaXZlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgZW5jb2RlU2V0KG9ianMsIGFyY2hpdmVPYmopIHtcbiAgICBhcmNoaXZlT2JqLiRjbGFzcyA9IHRoaXMudWlkRm9yQXJjaGl2ZXIoJ05TU2V0JywgTlNfT0JKRUNUKTtcbiAgICBhcmNoaXZlT2JqWydOUy5vYmplY3RzJ10gPSBvYmpzLm1hcCh0aGlzLmFyY2hpdmUuYmluZCh0aGlzKSk7XG4gIH1cblxuICBlbmNvZGVEaWN0KG9iaiwgYXJjaGl2ZU9iaikge1xuICAgIGFyY2hpdmVPYmpbJ05TLmtleXMnXSA9IF8ua2V5cyhvYmopLm1hcCh0aGlzLmFyY2hpdmUuYmluZCh0aGlzKSk7XG4gICAgYXJjaGl2ZU9ialsnTlMub2JqZWN0cyddID0gXy52YWx1ZXMob2JqKS5tYXAodGhpcy5hcmNoaXZlLmJpbmQodGhpcykpO1xuICAgIC8vZGljdCBoYXMgdG8gbWFrZSBjbGFzc2VzIGFmdGVyIHZhbHVlXG4gICAgYXJjaGl2ZU9iai4kY2xhc3MgPSB0aGlzLnVpZEZvckFyY2hpdmVyKCdOU0RpY3Rpb25hcnknLCBOU19PQkpFQ1QpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7WENUZXN0Q29uZmlndXJhdGlvbn0gb2JqXG4gICAqIEBwYXJhbSB7Kn0gYXJjaGl2ZU9ialxuICAgKi9cbiAgZW5jb2RlWENUZXN0Q29uZmlndXJhdGlvbihvYmosIGFyY2hpdmVPYmopIHtcbiAgICBhcmNoaXZlT2JqLiRjbGFzcyA9IHRoaXMudWlkRm9yQXJjaGl2ZXIoJ1hDVGVzdENvbmZpZ3VyYXRpb24nLCBOU19PQkpFQ1QpO1xuICAgIF8uZW50cmllcyhvYmouX2RhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gYXJjaGl2ZU9ialtrZXldID0gKGtleSA9PT0gRk9STUFUX1ZFUlNJT04pID8gdGhpcy5hcmNoaXZlKHZhbHVlKSA6IHRoaXMuZW5jb2RlKHZhbHVlKSk7XG4gIH1cblxuICB0b0J5dGVzKCkge1xuICAgIGlmICh0aGlzLm9iamVjdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmFyY2hpdmUodGhpcy5pbnB1dCk7XG4gICAgfVxuICAgIGNvbnN0IGQgPSB7XG4gICAgICAkdmVyc2lvbjogTlNLRVlFRF9BUkNISVZFX1ZFUlNJT04sXG4gICAgICAkYXJjaGl2ZXI6IE5TS0VZRURBUkNISVZFUixcbiAgICAgICR0b3A6IHsgcm9vdDogbmV3IHBsaXN0bGliLlVJRCgxKSB9LFxuICAgICAgJG9iamVjdHM6IHRoaXMub2JqZWN0c1xuICAgIH07XG4gICAgcmV0dXJuIGJwbGlzdENyZWF0ZShkKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgTlNLZXllZCBCdWZmZXIgZnJvbSBhbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dE9iamVjdFxuICogQHJldHVybnMge0J1ZmZlcn0gTlNLZXllZCBCdWZmZXJcbiAqL1xuZnVuY3Rpb24gYXJjaGl2ZShpbnB1dE9iamVjdCkge1xuICByZXR1cm4gbmV3IEFyY2hpdmUoaW5wdXRPYmplY3QpLnRvQnl0ZXMoKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgTlNLZXllZCBCdWZmZXIgaW50byBKUyBPYmplY3RcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbnB1dEJ5dGVzIE5TS2V5ZWQgQnVmZmVyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBKUyBPYmplY3RcbiAqL1xuZnVuY3Rpb24gdW5hcmNoaXZlKGlucHV0Qnl0ZXMpIHtcbiAgcmV0dXJuIG5ldyBVbmFyY2hpdmUoaW5wdXRCeXRlcykudG9PYmplY3QoKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdW5rbm93biBOU0tleWVkQXJjaGl2ZSB0eXBlcyBmb3IgcGFja2luZy91bnBhY2tpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHBhY2tpbmcvdW5wYWNraW5nIGtleSBuYW1lXG4gKiBAcGFyYW0ge0Jhc2VBcmNoaXZlSGFuZGxlcn0gc3ViQ2xhc3MgaW5oZXJpdCBmcm9tIEJhc2VBcmNoaXZlSGFuZGxlciBjbGFzc1xuICovXG5mdW5jdGlvbiB1cGRhdGVOU0tleWVkQXJjaGl2ZUNsYXNzKG5hbWUsIHN1YkNsYXNzKSB7XG4gIGlmICghXy5pc0Z1bmN0aW9uKHN1YkNsYXNzLnByb3RvdHlwZT8uZGVjb2RlQXJjaGl2ZSkgJiYgIV8uaXNGdW5jdGlvbihzdWJDbGFzcy5wcm90b3R5cGU/LmVuY29kZUFyY2hpdmUpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3N1YkNsYXNzIG11c3QgaGF2ZSBkZWNvZGVBcmNoaXZlIG9yIGVuY29kZUFyY2hpdmUgbWV0aG9kcycpO1xuICB9XG4gIGlmICghKG5hbWUgaW4gVU5BUkNISVZFX0NMQVNTX01BUCkpIHtcbiAgICBVTkFSQ0hJVkVfQ0xBU1NfTUFQW25hbWVdID0gc3ViQ2xhc3M7XG4gIH1cbn1cblxuZXhwb3J0IHsgdXBkYXRlTlNLZXllZEFyY2hpdmVDbGFzcywgQmFzZUFyY2hpdmVIYW5kbGVyLCBOU1VSTCwgTlNVVUlELCBOU0RhdGUsIFhDVGVzdENvbmZpZ3VyYXRpb24sIHVuYXJjaGl2ZSwgYXJjaGl2ZSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLElBQUFBLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLE1BQU1JLHVCQUF1QixHQUFHLE9BQU87QUFDdkMsTUFBTUMsUUFBUSxHQUFHLElBQUlDLHFCQUFRLENBQUNDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTUMsV0FBVyxHQUFHLFlBQVk7QUFDaEMsTUFBTUMsZUFBZSxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQztBQUN4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
|
|
435
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnBsaXN0UGFyc2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYnBsaXN0Q3JlYXRvciIsIl91dWlkIiwiX2xvZGFzaCIsIk5TS0VZRURfQVJDSElWRV9WRVJTSU9OIiwiTlVMTF9VSUQiLCJwbGlzdGxpYiIsIlVJRCIsIkNZQ0xFX1RPS0VOIiwiUFJJTUlUSVZFX1RZUEVTIiwiTk9OX0VOQ09EQUJMRV9UWVBFUyIsIk5TS0VZRURBUkNISVZFUiIsIlVOSVgyQVBQTEVfVElNRVNUQU1QX1NFQ09ORCIsIkZPUk1BVF9WRVJTSU9OIiwiTlNfT0JKRUNUIiwiQXJjaGl2ZWRPYmplY3QiLCJjb25zdHJ1Y3RvciIsIm9iamVjdCIsInVuYXJjaGl2ZXIiLCJfdW5hcmNoaXZlciIsImRlY29kZUluZGV4IiwiaW5kZXgiLCJkZWNvZGVPYmplY3QiLCJkZWNvZGUiLCJrZXkiLCJkZWNvZGVLZXkiLCJBcmNoaXZpbmdPYmplY3QiLCJhcmNoaXZlciIsIl9hcmNoaXZlT2JqIiwiX2FyY2hpdmVyIiwiZW5jb2RlIiwidmFsIiwiQmFzZUFyY2hpdmVIYW5kbGVyIiwiYWRkaXRpb25DbGFzc2VzIiwiZGVjb2RlQXJjaGl2ZSIsImFyY2hpdmUiLCJFcnJvciIsImVuY29kZUFyY2hpdmUiLCJvYmoiLCJleHBvcnRzIiwiRGljdEFyY2hpdmUiLCJrZXlVaWRzIiwidmFsVWlkcyIsImQiLCJpIiwibGVuZ3RoIiwiTGlzdEFyY2hpdmUiLCJ1aWRzIiwibWFwIiwiYmluZCIsIkRUVGFwTWVzc2FnZVBsaXN0IiwiTlNFcnJvciIsIiRjbGFzcyIsImRvbWFpbiIsInVzZXJpbmZvIiwiY29kZSIsIk5TRXhjZXB0aW9uIiwicmVhc29uIiwibmFtZSIsIk5TVVJMIiwiYmFzZSIsInJlbGF0aXZlIiwiX2Jhc2UiLCJfcmVsYXRpdmUiLCJOU0RhdGUiLCJkYXRhIiwiX2RhdGEiLCJOU011dGFibGVTdHJpbmciLCJOU011dGFibGVEYXRhIiwiTlNVVUlEIiwidXVpZFN0cmluZ2lmeSIsIkJ1ZmZlciIsImZyb20iLCJ1dWlkUGFyc2UiLCJidWZmZXIiLCJYQ1RDYXBhYmlsaXRpZXMiLCJOU0lnbm9yZSIsIk5TTnVsbCIsIlhDVGVzdENvbmZpZ3VyYXRpb24iLCJfZGVmYXVsdCIsImFnZ3JlZ2F0ZVN0YXRpc3RpY3NCZWZvcmVDcmFzaCIsIlhDU3VpdGVSZWNvcmRzS2V5IiwiYXV0b21hdGlvbkZyYW1ld29ya1BhdGgiLCJiYXNlbGluZUZpbGVSZWxhdGl2ZVBhdGgiLCJ1bmRlZmluZWQiLCJiYXNlbGluZUZpbGVVUkwiLCJkZWZhdWx0VGVzdEV4ZWN1dGlvblRpbWVBbGxvd2FuY2UiLCJkaXNhYmxlUGVyZm9ybWFuY2VNZXRyaWNzIiwiZW1pdE9TTG9ncyIsImZvcm1hdFZlcnNpb24iLCJnYXRoZXJMb2NhbGl6YWJsZVN0cmluZ3NEYXRhIiwiaW5pdGlhbGl6ZUZvclVJVGVzdGluZyIsIm1heGltdW1UZXN0RXhlY3V0aW9uVGltZUFsbG93YW5jZSIsInByb2R1Y3RNb2R1bGVOYW1lIiwicmFuZG9tRXhlY3V0aW9uT3JkZXJpbmdTZWVkIiwicmVwb3J0QWN0aXZpdGllcyIsInJlcG9ydFJlc3VsdHNUb0lERSIsInN5c3RlbUF0dGFjaG1lbnRMaWZldGltZSIsInRhcmdldEFwcGxpY2F0aW9uQXJndW1lbnRzIiwidGFyZ2V0QXBwbGljYXRpb25CdW5kbGVJRCIsInRhcmdldEFwcGxpY2F0aW9uRW52aXJvbm1lbnQiLCJ0YXJnZXRBcHBsaWNhdGlvblBhdGgiLCJ0ZXN0QXBwbGljYXRpb25EZXBlbmRlbmNpZXMiLCJ0ZXN0QXBwbGljYXRpb25Vc2VyT3ZlcnJpZGVzIiwidGVzdEJ1bmRsZVJlbGF0aXZlUGF0aCIsInRlc3RFeGVjdXRpb25PcmRlcmluZyIsInRlc3RUaW1lb3V0c0VuYWJsZWQiLCJ0ZXN0c0RyaXZlbkJ5SURFIiwidGVzdHNNdXN0UnVuT25NYWluVGhyZWFkIiwidGVzdHNUb1J1biIsInRlc3RzVG9Ta2lwIiwidHJlYXRNaXNzaW5nQmFzZWxpbmVzQXNGYWlsdXJlcyIsInVzZXJBdHRhY2htZW50TGlmZXRpbWUiLCJ0ZXN0QnVuZGxlVVJMIiwiVHlwZUVycm9yIiwic2Vzc2lvbklkZW50aWZpZXIiLCJnZXRCeXRlcyIsIlhDQWN0aXZpdHlSZWNvcmQiLCJfa2V5cyIsInJlZHVjZSIsImFjYyIsIlVOQVJDSElWRV9DTEFTU19NQVAiLCJEVFN5c21vblRhcE1lc3NhZ2UiLCJEVFRhcEhlYXJ0YmVhdE1lc3NhZ2UiLCJEVFRhcE1lc3NhZ2VBcmNoaXZlIiwiRFRLVHJhY2VUYXBNZXNzYWdlIiwiRXJyb3JBcmNoaXZlIiwiRXhjZXB0aW9uQXJjaGl2ZSIsIk5TRGljdGlvbmFyeSIsIk5TTXV0YWJsZURpY3Rpb25hcnkiLCJOU0FycmF5IiwiTlNNdXRhYmxlQXJyYXkiLCJOU011dGFibGVTZXQiLCJOU1NldCIsIlVuYXJjaGl2ZSIsImlucHV0Qnl0ZXMiLCJpbnB1dCIsInVucGFja2VkVWlkcyIsInRvcFVJRCIsIm9iamVjdHMiLCJ1bnBhY2tBcmNoaXZlSGVhZGVyIiwicGxpc3QiLCJwYXJzZUJ1ZmZlciIsIiRhcmNoaXZlciIsIiR2ZXJzaW9uIiwidG9wIiwiJHRvcCIsInJvb3QiLCJKU09OIiwic3RyaW5naWZ5IiwiJG9iamVjdHMiLCJjbGFzc0ZvclVpZCIsIm1ldGEiLCIkY2xhc3NuYW1lIiwia2xhc3MiLCJfIiwiaXNOaWwiLCJpc1VuZGVmaW5lZCIsInJhd09iaiIsImtsYXNzT2JqIiwidG9PYmplY3QiLCJBcmNoaXZlIiwiaW5wdXRPYmplY3QiLCJ1aWRGb3JBcmNoaXZlciIsImFkZGl0aW9uIiwicHVzaCIsIiRjbGFzc2VzIiwiaXNOdWxsIiwiaW5jbHVkZXMiLCJhcmNoaXZlT2JqIiwiZW5jb2RlVG9wTGV2ZWwiLCJBcnJheSIsImVuY29kZUFycmF5IiwiU2V0IiwiZW5jb2RlU2V0IiwiZW5jb2RlWENUZXN0Q29uZmlndXJhdGlvbiIsIk9iamVjdCIsIm9iak5hbWUiLCJlbmNvZGVEaWN0Iiwib2JqcyIsImtleXMiLCJ2YWx1ZXMiLCJlbnRyaWVzIiwiZm9yRWFjaCIsInZhbHVlIiwidG9CeXRlcyIsImJwbGlzdENyZWF0ZSIsInVuYXJjaGl2ZSIsInVwZGF0ZU5TS2V5ZWRBcmNoaXZlQ2xhc3MiLCJzdWJDbGFzcyIsIl9zdWJDbGFzcyRwcm90b3R5cGUiLCJfc3ViQ2xhc3MkcHJvdG90eXBlMiIsImlzRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvaW5zdHJ1bWVudC90cmFuc2Zvcm1lci9uc2tleWVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwbGlzdGxpYiBmcm9tICdicGxpc3QtcGFyc2VyJztcbmltcG9ydCBicGxpc3RDcmVhdGUgZnJvbSAnYnBsaXN0LWNyZWF0b3InO1xuaW1wb3J0IHsgcGFyc2UgYXMgdXVpZFBhcnNlLCBzdHJpbmdpZnkgYXMgdXVpZFN0cmluZ2lmeSB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgTlNLRVlFRF9BUkNISVZFX1ZFUlNJT04gPSAxMDBfMDAwO1xuY29uc3QgTlVMTF9VSUQgPSBuZXcgcGxpc3RsaWIuVUlEKDApO1xuY29uc3QgQ1lDTEVfVE9LRU4gPSAnQ3ljbGVUb2tlbic7XG5jb25zdCBQUklNSVRJVkVfVFlQRVMgPSBbJ051bWJlcicsICdTdHJpbmcnLCAnQm9vbGVhbicsICdVSUQnLCAnQnVmZmVyJ107XG5jb25zdCBOT05fRU5DT0RBQkxFX1RZUEVTID0gWydudW1iZXInLCAnYm9vbGVhbiddO1xuY29uc3QgTlNLRVlFREFSQ0hJVkVSID0gJ05TS2V5ZWRBcmNoaXZlcic7XG5jb25zdCBVTklYMkFQUExFX1RJTUVTVEFNUF9TRUNPTkQgPSA5NzgzMDcyMDA7XG5jb25zdCBGT1JNQVRfVkVSU0lPTiA9ICdmb3JtYXRWZXJzaW9uJztcbmNvbnN0IE5TX09CSkVDVCA9ICdOU09iamVjdCc7XG5cblxuY2xhc3MgQXJjaGl2ZWRPYmplY3Qge1xuICAvKipcbiAgICogU3RhdGVmdWwgd3JhcHBlciBhcm91bmQgQXJjaGl2ZSBmb3IgYW4gb2JqZWN0IGJlaW5nIGFyY2hpdmVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7VW5hcmNoaXZlfSB1bmFyY2hpdmVyXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3Iob2JqZWN0LCB1bmFyY2hpdmVyKSB7XG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG4gICAgdGhpcy5fdW5hcmNoaXZlciA9IHVuYXJjaGl2ZXI7XG4gIH1cblxuICBkZWNvZGVJbmRleChpbmRleCkge1xuICAgIHJldHVybiB0aGlzLl91bmFyY2hpdmVyLmRlY29kZU9iamVjdChpbmRleCk7XG4gIH1cblxuICBkZWNvZGUoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX3VuYXJjaGl2ZXIuZGVjb2RlS2V5KHRoaXMub2JqZWN0LCBrZXkpO1xuICB9XG59XG5cbmNsYXNzIEFyY2hpdmluZ09iamVjdCB7XG4gIC8qKlxuICAgKiBTdGF0ZWZ1bCB3cmFwcGVyIGFyb3VuZCBVbmFyY2hpdmUgZm9yIGFuIGFyY2hpdmVkIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJjaGl2ZX0gYXJjaGl2ZXJcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvYmplY3QsIGFyY2hpdmVyKSB7XG4gICAgdGhpcy5fYXJjaGl2ZU9iaiA9IG9iamVjdDtcbiAgICB0aGlzLl9hcmNoaXZlciA9IGFyY2hpdmVyO1xuICB9XG5cbiAgZW5jb2RlKGtleSwgdmFsKSB7XG4gICAgdGhpcy5fYXJjaGl2ZU9ialtrZXldID0gdGhpcy5fYXJjaGl2ZXIuZW5jb2RlKHZhbCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIG11c3QgYmUgaW5oZXJpdGVkIHdoZW4gY3JlYXRpbmcgYW4gYXJjaGl2ZS91bmFyY2hpdmUgc3ViY2xhc3NcbiAqIEFuZCB5b3UgbmVlZCB0byBjYWxsIGB1cGRhdGVOU0tleWVkQXJjaGl2ZUNsYXNzYCBhZGQgc3ViY2xhc3MgdG8gYXJjaGl2ZS91bmFyY2hpdmUgb2JqZWN0XG4gKi9cbmNsYXNzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIC8qKlxuICAgKiBzb21lIG9mIHRoZSBjbGFzc2VzIG1heSBoYXZlIHRvIGFkZCAnTlNPYmplY3QnIG9yIG1heWJlIG1vcmUgaW4gJGNsYXNzZXMgd2hpbGUgZW5jb2RpbmcuXG4gICAqL1xuICBhZGRpdGlvbkNsYXNzZXMgPSBbXTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJjaGl2ZWRPYmplY3R9IGFyY2hpdmVcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3Qga25vdyBob3cgdG8gZGVjb2RlIHRoZSBvYmplY3RgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqICBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzXG4gICAqIEBwYXJhbSB7QXJjaGl2aW5nT2JqZWN0fSBhcmNoaXZlXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZW5jb2RlQXJjaGl2ZShvYmosIGFyY2hpdmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3Qga25vdyBob3cgdG8gZW5jb2RlIHRoZSBvYmplY3RgKTtcbiAgfVxufVxuXG4vKipcbiAqIFwiRGVsZWdhdGUgZm9yIHBhY2tpbmcvdW5wYWNraW5nIE5TKE11dGFibGUpRGljdGlvbmFyeSBvYmplY3RzXCJcbiAqL1xuY2xhc3MgRGljdEFyY2hpdmUgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICBjb25zdCBrZXlVaWRzID0gYXJjaGl2ZS5kZWNvZGUoJ05TLmtleXMnKTtcbiAgICBjb25zdCB2YWxVaWRzID0gYXJjaGl2ZS5kZWNvZGUoJ05TLm9iamVjdHMnKTtcbiAgICBjb25zdCBkID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlVaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBhcmNoaXZlLmRlY29kZUluZGV4KGtleVVpZHNbaV0pO1xuICAgICAgZFtrZXldID0gYXJjaGl2ZS5kZWNvZGVJbmRleCh2YWxVaWRzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWxlZ2F0ZSBmb3IgcGFja2luZy91bnBhY2tpbmcgTlMoTXV0YWJsZSlBcnJheSBvYmplY3RzXG4gKi9cbmNsYXNzIExpc3RBcmNoaXZlIGV4dGVuZHMgQmFzZUFyY2hpdmVIYW5kbGVyIHtcbiAgZGVjb2RlQXJjaGl2ZShhcmNoaXZlKSB7XG4gICAgY29uc3QgdWlkcyA9IGFyY2hpdmUuZGVjb2RlKCdOUy5vYmplY3RzJyk7XG4gICAgcmV0dXJuIHVpZHMubWFwKGFyY2hpdmUuZGVjb2RlSW5kZXguYmluZChhcmNoaXZlKSk7XG4gIH1cbn1cblxuY2xhc3MgRFRUYXBNZXNzYWdlUGxpc3QgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICByZXR1cm4gYXJjaGl2ZS5kZWNvZGUoJ0RUVGFwTWVzc2FnZVBsaXN0Jyk7XG4gIH1cbn1cblxuY2xhc3MgTlNFcnJvciBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIGRlY29kZUFyY2hpdmUoYXJjaGl2ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAkY2xhc3M6ICdOU0Vycm9yJyxcbiAgICAgIGRvbWFpbjogYXJjaGl2ZS5kZWNvZGUoJ05TRG9tYWluJyksXG4gICAgICB1c2VyaW5mbzogYXJjaGl2ZS5kZWNvZGUoJ05TVXNlckluZm8nKSxcbiAgICAgIGNvZGU6IGFyY2hpdmUuZGVjb2RlKCdOU0NvZGUnKVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTlNFeGNlcHRpb24gZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGNsYXNzOiAnTlNFeGNlcHRpb24nLFxuICAgICAgcmVhc29uOiBhcmNoaXZlLmRlY29kZSgnTlMucmVhc29uJyksXG4gICAgICB1c2VyaW5mbzogYXJjaGl2ZS5kZWNvZGUoJ3VzZXJpbmZvJyksXG4gICAgICBuYW1lOiBhcmNoaXZlLmRlY29kZSgnTlMubmFtZScpXG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBOU1VSTCBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0geyp9IGJhc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlIHVzdWFsbHkgaW9zIGRldmljZSByZWxhdGl2ZSBwYXRoIGUuZzogZmlsZTovL3h4L1xuICAgKi9cbiAgY29uc3RydWN0b3IoYmFzZSwgcmVsYXRpdmUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2Jhc2UgPSBiYXNlO1xuICAgIHRoaXMuX3JlbGF0aXZlID0gcmVsYXRpdmU7XG4gICAgdGhpcy5hZGRpdGlvbkNsYXNzZXMgPSBbTlNfT0JKRUNUXTtcbiAgfVxuXG4gIGRlY29kZUFyY2hpdmUoYXJjaGl2ZSkge1xuICAgIHJldHVybiB7ICRjbGFzczogJ05TVVJMJywgYmFzZTogYXJjaGl2ZS5kZWNvZGUoJ05TLmJhc2UnKSwgcmVsYXRpdmU6IGFyY2hpdmUuZGVjb2RlKCdOUy5yZWxhdGl2ZScpIH07XG4gIH1cblxuICBlbmNvZGVBcmNoaXZlKG9iaiwgYXJjaGl2ZSkge1xuICAgIGFyY2hpdmUuZW5jb2RlKCdOUy5iYXNlJywgb2JqLl9iYXNlKTtcbiAgICBhcmNoaXZlLmVuY29kZSgnTlMucmVsYXRpdmUnLCBvYmouX3JlbGF0aXZlKTtcbiAgfVxufVxuXG5jbGFzcyBOU0RhdGUgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRhdGEgdGltZXN0YW1wIGluIHNlY29uZHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgZGVjb2RlQXJjaGl2ZShhcmNoaXZlKSB7XG4gICAgcmV0dXJuIFVOSVgyQVBQTEVfVElNRVNUQU1QX1NFQ09ORCArIGFyY2hpdmUuZGVjb2RlKCdOUy50aW1lJyk7XG4gIH1cblxuICBlbmNvZGVBcmNoaXZlKG9iaiwgYXJjaGl2ZSkge1xuICAgIGFyY2hpdmUuZW5jb2RlKCdOUy50aW1lJywgb2JqLl9kYXRhIC0gVU5JWDJBUFBMRV9USU1FU1RBTVBfU0VDT05EKTtcbiAgfVxufVxuXG5jbGFzcyBOU011dGFibGVTdHJpbmcgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICByZXR1cm4gYXJjaGl2ZS5kZWNvZGUoJ05TLnN0cmluZycpO1xuICB9XG59XG5cbmNsYXNzIE5TTXV0YWJsZURhdGEgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICBkZWNvZGVBcmNoaXZlKGFyY2hpdmUpIHtcbiAgICByZXR1cm4gYXJjaGl2ZS5kZWNvZGUoJ05TLmRhdGEnKTtcbiAgfVxufVxuXG5jbGFzcyBOU1VVSUQgZXh0ZW5kcyBCYXNlQXJjaGl2ZUhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgdXVpZCBmb3JtYXQgZGF0YSBlLmc6MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICB0aGlzLmFkZGl0aW9uQ2xhc3NlcyA9IFtOU19PQkpFQ1RdO1xuICB9XG5cbiAgZGVjb2RlQXJjaGl2ZShhcmNoaXZlKSB7XG4gICAgcmV0dXJuIHV1aWRTdHJpbmdpZnkoYXJjaGl2ZS5kZWNvZGUoJ05TLnV1aWRieXRlcycpKTtcbiAgfVxuXG4gIGVuY29kZUFyY2hpdmUob2JqLCBhcmNoaXZlKSB7XG4gICAgYXJjaGl2ZS5fYXJjaGl2ZU9ialsnTlMudXVpZGJ5dGVzJ10gPSBCdWZmZXIuZnJvbSh1dWlkUGFyc2Uob2JqLl9kYXRhKS5idWZmZXIpO1xuICB9XG59XG5cbmNsYXNzIFhDVENhcGFiaWxpdGllcyBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIGRlY29kZUFyY2hpdmUoYXJjaGl2ZSkge1xuICAgIHJldHVybiBhcmNoaXZlLmRlY29kZSgnY2FwYWJpbGl0aWVzLWRpY3Rpb25hcnknKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvbWUgb2YgdGhlIHBsaXN0IGNsYXNzZXMgbWF5IG5vdCBiZSBpbmNsdWRlZCBhbmQgc2hvdWxkIG5vdCBiZSBjYXJlZC5cbiAqIFVzaW5nIHRoaXMgYXMgYSBkZWZhdWx0IGRlY29kZXIgZm9yIHVua25vd24gZW50aXRpZXMgdG8gYXZvaWQgaW50ZXJydXB0aW5nIGRlY29kZSBwcm9jZXNzLlxuICovXG5jbGFzcyBOU0lnbm9yZSBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIGRlY29kZUFyY2hpdmUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY2xhc3MgTlNOdWxsIGV4dGVuZHMgQmFzZUFyY2hpdmVIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZGl0aW9uQ2xhc3NlcyA9IFtOU19PQkpFQ1RdO1xuICB9XG4gIGRlY29kZUFyY2hpdmUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBYQ1Rlc3RDb25maWd1cmF0aW9uUGxpc3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgTlNVUkx9IHRlc3RCdW5kbGVVUkxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgTlNVVUlEfSBzZXNzaW9uSWRlbnRpZmllclxuICogQHByb3BlcnR5IHtzdHJpbmc/fSBwcm9kdWN0TW9kdWxlTmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmc/fSB0YXJnZXRBcHBsaWNhdGlvbkJ1bmRsZUlEXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdP30gdGFyZ2V0QXBwbGljYXRpb25Bcmd1bWVudHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW10/fSB0ZXN0c1RvUnVuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdP30gdGVzdHNUb1NraXBcbiAqL1xuY2xhc3MgWENUZXN0Q29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VBcmNoaXZlSGFuZGxlciB7XG4gIHN0YXRpYyBfZGVmYXVsdCA9IHtcbiAgICBhZ2dyZWdhdGVTdGF0aXN0aWNzQmVmb3JlQ3Jhc2g6IHtcbiAgICAgIFhDU3VpdGVSZWNvcmRzS2V5OiB7fVxuICAgIH0sXG4gICAgYXV0b21hdGlvbkZyYW1ld29ya1BhdGg6ICcvRGV2ZWxvcGVyL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvWENUQXV0b21hdGlvblN1cHBvcnQuZnJhbWV3b3JrJyxcbiAgICBiYXNlbGluZUZpbGVSZWxhdGl2ZVBhdGg6IHVuZGVmaW5lZCxcbiAgICBiYXNlbGluZUZpbGVVUkw6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VGVzdEV4ZWN1dGlvblRpbWVBbGxvd2FuY2U6IHVuZGVmaW5lZCxcbiAgICBkaXNhYmxlUGVyZm9ybWFuY2VNZXRyaWNzOiBmYWxzZSxcbiAgICBlbWl0T1NMb2dzOiBmYWxzZSxcbiAgICBmb3JtYXRWZXJzaW9uOiAyLFxuICAgIGdhdGhlckxvY2FsaXphYmxlU3RyaW5nc0RhdGE6IGZhbHNlLFxuICAgIGluaXRpYWxpemVGb3JVSVRlc3Rpbmc6IHRydWUsXG4gICAgbWF4aW11bVRlc3RFeGVjdXRpb25UaW1lQWxsb3dhbmNlOiB1bmRlZmluZWQsXG4gICAgcHJvZHVjdE1vZHVsZU5hbWU6ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcicsXG4gICAgcmFuZG9tRXhlY3V0aW9uT3JkZXJpbmdTZWVkOiB1bmRlZmluZWQsXG4gICAgcmVwb3J0QWN0aXZpdGllczogdHJ1ZSxcbiAgICByZXBvcnRSZXN1bHRzVG9JREU6IHRydWUsXG4gICAgc3lzdGVtQXR0YWNobWVudExpZmV0aW1lOiAyLFxuICAgIHRhcmdldEFwcGxpY2F0aW9uQXJndW1lbnRzOiBbXSxcbiAgICB0YXJnZXRBcHBsaWNhdGlvbkJ1bmRsZUlEOiB1bmRlZmluZWQsXG4gICAgdGFyZ2V0QXBwbGljYXRpb25FbnZpcm9ubWVudDogdW5kZWZpbmVkLFxuICAgIHRhcmdldEFwcGxpY2F0aW9uUGF0aDogJy9LRUVQLVRISVMtTk9ULUVNUFRZL0tFRVAtVEhJUy1OT1QtRU1QVFknLFxuICAgIHRlc3RBcHBsaWNhdGlvbkRlcGVuZGVuY2llczoge30sXG4gICAgdGVzdEFwcGxpY2F0aW9uVXNlck92ZXJyaWRlczogdW5kZWZpbmVkLFxuICAgIHRlc3RCdW5kbGVSZWxhdGl2ZVBhdGg6IHVuZGVmaW5lZCxcbiAgICB0ZXN0RXhlY3V0aW9uT3JkZXJpbmc6IDAsXG4gICAgdGVzdFRpbWVvdXRzRW5hYmxlZDogZmFsc2UsXG4gICAgdGVzdHNEcml2ZW5CeUlERTogZmFsc2UsXG4gICAgdGVzdHNNdXN0UnVuT25NYWluVGhyZWFkOiB0cnVlLFxuICAgIHRlc3RzVG9SdW46IHVuZGVmaW5lZCxcbiAgICB0ZXN0c1RvU2tpcDogdW5kZWZpbmVkLFxuICAgIHRyZWF0TWlzc2luZ0Jhc2VsaW5lc0FzRmFpbHVyZXM6IGZhbHNlLFxuICAgIHVzZXJBdHRhY2htZW50TGlmZXRpbWU6IDFcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1hDVGVzdENvbmZpZ3VyYXRpb25QbGlzdH0gZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCFkYXRhLnRlc3RCdW5kbGVVUkwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Rlc3RCdW5kbGVVUkwgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmICghZGF0YS5zZXNzaW9uSWRlbnRpZmllcikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vzc2lvbklkZW50aWZpZXIgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YS50ZXN0QnVuZGxlVVJMID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YS50ZXN0QnVuZGxlVVJMID0gbmV3IE5TVVJMKHVuZGVmaW5lZCwgZGF0YS50ZXN0QnVuZGxlVVJMKTtcbiAgICB9XG4gICAgaWYgKCEoZGF0YS50ZXN0QnVuZGxlVVJMIGluc3RhbmNlb2YgTlNVUkwpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCB0ZXN0QnVuZGxlVVJMIHRvIGJlIGEgdmFsaWQgTlNVUkwgaW5zdGFuY2UsIGdvdCAke2RhdGEudGVzdEJ1bmRsZVVSTC5jb25zdHJ1Y3Rvci5uYW1lfSBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YS5zZXNzaW9uSWRlbnRpZmllciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEuc2Vzc2lvbklkZW50aWZpZXIgPSBuZXcgTlNVVUlEKGRhdGEuc2Vzc2lvbklkZW50aWZpZXIpO1xuICAgIH1cbiAgICBpZiAoIShkYXRhLnNlc3Npb25JZGVudGlmaWVyIGluc3RhbmNlb2YgTlNVVUlEKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgc2Vzc2lvbklkZW50aWZpZXIgdG8gYmUgYSB2YWxpZCBOU1VVSUQgaW5zdGFuY2UsIGdvdCAke2RhdGEuc2Vzc2lvbklkZW50aWZpZXIuY29uc3RydWN0b3IubmFtZX0gaW5zdGVhZGApO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhID0geyAuLi5YQ1Rlc3RDb25maWd1cmF0aW9uLl9kZWZhdWx0LCAuLi5kYXRhIH07XG4gIH1cblxuICBnZXRCeXRlcygpIHtcbiAgICByZXR1cm4gYXJjaGl2ZSh0aGlzKTtcbiAgfVxufVxuXG5jbGFzcyBYQ0FjdGl2aXR5UmVjb3JkIGV4dGVuZHMgQmFzZUFyY2hpdmVIYW5kbGVyIHtcbiAgc3RhdGljIF9rZXlzID0gWydhY3Rpdml0eVR5cGUnLCAnYXR0YWNobWVudHMnLCAnZmluaXNoJywgJ3N0YXJ0JywgJ3RpdGxlJywgJ3V1aWQnXTtcbiAgZGVjb2RlQXJjaGl2ZShhcmNoaXZlKSB7XG4gICAgcmV0dXJuIFhDQWN0aXZpdHlSZWNvcmQuX2tleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBhcmNoaXZlLmRlY29kZShrZXkpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbn1cblxuLyoqXG4gKiBkZWNvZGUgYW5kIGVuY29kZSBBcmNoaXZlIG9mIGN1cnJlbnRseSBrbm93biBkYXRhIGZvcm1hdHNcbiAqL1xuY29uc3QgVU5BUkNISVZFX0NMQVNTX01BUCA9IHtcbiAgRFRUYXBNZXNzYWdlUGxpc3QsXG4gIERUU3lzbW9uVGFwTWVzc2FnZTogRFRUYXBNZXNzYWdlUGxpc3QsXG4gIERUVGFwSGVhcnRiZWF0TWVzc2FnZTogRFRUYXBNZXNzYWdlUGxpc3QsXG4gIERUVGFwTWVzc2FnZUFyY2hpdmU6IERUVGFwTWVzc2FnZVBsaXN0LFxuICBEVEtUcmFjZVRhcE1lc3NhZ2U6IERUVGFwTWVzc2FnZVBsaXN0LFxuICBFcnJvckFyY2hpdmU6IE5TRXJyb3IsXG4gIEV4Y2VwdGlvbkFyY2hpdmU6IE5TRXhjZXB0aW9uLFxuICBOU0RpY3Rpb25hcnk6IERpY3RBcmNoaXZlLFxuICBOU011dGFibGVEaWN0aW9uYXJ5OiBEaWN0QXJjaGl2ZSxcbiAgTlNBcnJheTogTGlzdEFyY2hpdmUsXG4gIE5TTXV0YWJsZUFycmF5OiBMaXN0QXJjaGl2ZSxcbiAgTlNNdXRhYmxlU2V0OiBMaXN0QXJjaGl2ZSxcbiAgTlNTZXQ6IExpc3RBcmNoaXZlLFxuICBOU0RhdGUsXG4gIE5TRXJyb3IsXG4gIE5TRXhjZXB0aW9uLFxuICBOU011dGFibGVTdHJpbmcsXG4gIE5TTXV0YWJsZURhdGEsXG4gIE5TTnVsbCxcbiAgTlNVVUlELFxuICBOU1VSTCxcbiAgWENBY3Rpdml0eVJlY29yZCxcbiAgWENUQ2FwYWJpbGl0aWVzLFxuICBYQ1Rlc3RDb25maWd1cmF0aW9uLFxufTtcblxuLyoqXG4gKiBDYXBhYmxlIG9mIHVucGFja2luZyBhbiBhcmNoaXZlZCBvYmplY3QgdHJlZSBpbiB0aGUgTlNLZXllZEFyY2hpdmUgZm9ybWF0LlxuICogQXBwbGUncyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBsZS9zd2lmdC1jb3JlbGlicy1mb3VuZGF0aW9uL2Jsb2IvbWFpbi9Tb3VyY2VzL0ZvdW5kYXRpb24vTlNLZXllZFVuYXJjaGl2ZXIuc3dpZnRcbiAqL1xuY2xhc3MgVW5hcmNoaXZlIHtcbiAgY29uc3RydWN0b3IoaW5wdXRCeXRlcykge1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dEJ5dGVzO1xuICAgIHRoaXMudW5wYWNrZWRVaWRzID0ge307XG4gICAgdGhpcy50b3BVSUQgPSBOVUxMX1VJRDtcbiAgICB0aGlzLm9iamVjdHMgPSBbXTtcbiAgfVxuXG4gIHVucGFja0FyY2hpdmVIZWFkZXIoKSB7XG4gICAgY29uc3QgcGxpc3QgPSBwbGlzdGxpYi5wYXJzZUJ1ZmZlcih0aGlzLmlucHV0KVswXTtcbiAgICBpZiAocGxpc3QuJGFyY2hpdmVyICE9PSBOU0tFWUVEQVJDSElWRVIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZW5jb2RlcjogJHtwbGlzdC4kYXJjaGl2ZXJ9YCk7XG4gICAgfVxuICAgIGlmIChwbGlzdC4kdmVyc2lvbiAhPT0gTlNLRVlFRF9BUkNISVZFX1ZFUlNJT04pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtOU0tFWUVEX0FSQ0hJVkVfVkVSU0lPTn0sIGdvdCAke3BsaXN0LiR2ZXJzaW9ufWApO1xuICAgIH1cbiAgICBjb25zdCB0b3AgPSBwbGlzdC4kdG9wO1xuICAgIGNvbnN0IHRvcFVJRCA9IHRvcC5yb290O1xuICAgIGlmICghdG9wVUlEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRvcCBvYmplY3QgZGlkIG5vdCBoYXZlIGEgVUlEISBkdW1wOiAke0pTT04uc3RyaW5naWZ5KHRvcCl9YCk7XG4gICAgfVxuICAgIHRoaXMudG9wVUlEID0gdG9wVUlEO1xuICAgIHRoaXMub2JqZWN0cyA9IHBsaXN0LiRvYmplY3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZSB0aGUgVU5BUkNISVZFX0NMQVNTX01BUCB0byBmaW5kIHRoZSB1bmFyY2hpdmluZyBkZWxlZ2F0ZSBvZiBhIHVpZFxuICAgKi9cbiAgY2xhc3NGb3JVaWQoaW5kZXgpIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5vYmplY3RzW2luZGV4LlVJRF07XG4gICAgY29uc3QgbmFtZSA9IG1ldGEuJGNsYXNzbmFtZTtcbiAgICBjb25zdCBrbGFzcyA9IFVOQVJDSElWRV9DTEFTU19NQVBbbmFtZV0gPz8gTlNJZ25vcmU7XG4gICAgcmV0dXJuIGtsYXNzO1xuICB9XG5cbiAgZGVjb2RlS2V5KG9iaiwga2V5KSB7XG4gICAgY29uc3QgdmFsID0gb2JqW2tleV07XG4gICAgcmV0dXJuIF8uaXNOaWwodmFsPy5VSUQpID8gdmFsIDogdGhpcy5kZWNvZGVPYmplY3QodmFsKTtcbiAgfVxuXG4gIGRlY29kZU9iamVjdChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gTlVMTF9VSUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBvYmogPSB0aGlzLnVucGFja2VkVWlkc1tpbmRleF07XG4gICAgaWYgKG9iaiA9PT0gQ1lDTEVfVE9LRU4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYXJjaGl2ZSBoYXMgYSBjeWNsZSB3aXRoICR7aW5kZXh9YCk7XG4gICAgfVxuICAgIGlmICghXy5pc1VuZGVmaW5lZChvYmopKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBjb25zdCByYXdPYmogPSB0aGlzLm9iamVjdHNbaW5kZXguVUlEXTtcbiAgICB0aGlzLnVucGFja2VkVWlkc1tpbmRleC5VSURdID0gQ1lDTEVfVE9LRU47XG5cbiAgICBpZiAoIXJhd09iaj8uJGNsYXNzKSB7XG4gICAgICB0aGlzLnVucGFja2VkVWlkc1tpbmRleC5VSURdID0gb2JqO1xuICAgICAgcmV0dXJuIHJhd09iajtcbiAgICB9XG4gICAgY29uc3Qga2xhc3MgPSB0aGlzLmNsYXNzRm9yVWlkKHJhd09iai4kY2xhc3MpO1xuICAgIGNvbnN0IGtsYXNzT2JqID0gbmV3IGtsYXNzKCkuZGVjb2RlQXJjaGl2ZShuZXcgQXJjaGl2ZWRPYmplY3QocmF3T2JqLCB0aGlzKSk7XG4gICAgdGhpcy51bnBhY2tlZFVpZHNbaW5kZXguVUlEXSA9IGtsYXNzT2JqO1xuICAgIHJldHVybiBrbGFzc09iajtcbiAgfVxuXG4gIHRvT2JqZWN0KCkge1xuICAgIHRoaXMudW5wYWNrQXJjaGl2ZUhlYWRlcigpO1xuICAgIHJldHVybiB0aGlzLmRlY29kZU9iamVjdCh0aGlzLnRvcFVJRCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDYXBhYmxlIG9mIHBhY2tpbmcgYW4gb2JqZWN0IHRyZWUgaW50byB0aGUgTlNLZXllZEFyY2hpdmUgZm9ybWF0LlxuICogQXBwbGUncyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBsZS9zd2lmdC1jb3JlbGlicy1mb3VuZGF0aW9uL2Jsb2IvbWFpbi9Tb3VyY2VzL0ZvdW5kYXRpb24vTlNLZXllZEFyY2hpdmVyLnN3aWZ0XG4gKi9cbmNsYXNzIEFyY2hpdmUge1xuICBjb25zdHJ1Y3RvcihpbnB1dE9iamVjdCkge1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dE9iamVjdDtcbiAgICB0aGlzLm9iamVjdHMgPSBbJyRudWxsJ107IC8vIG9iamVjdHMgdGhhdCBnbyBkaXJlY3RseSBpbnRvIHRoZSBhcmNoaXZlLCBhbHdheXMgc3RhcnQgd2l0aCAkbnVsbFxuICB9XG5cbiAgdWlkRm9yQXJjaGl2ZXIoYXJjaGl2ZXIsIC4uLmFkZGl0aW9uKSB7XG4gICAgY29uc3QgdmFsID0gbmV3IHBsaXN0bGliLlVJRCh0aGlzLm9iamVjdHMubGVuZ3RoKTtcbiAgICB0aGlzLm9iamVjdHMucHVzaCh7XG4gICAgICAkY2xhc3NlczogW2FyY2hpdmVyLCAuLi5hZGRpdGlvbl0sXG4gICAgICAkY2xhc3NuYW1lOiBhcmNoaXZlclxuICAgIH0pO1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBhcmNoaXZlKG9iaikge1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKG9iaikgfHwgXy5pc051bGwob2JqKSkge1xuICAgICAgcmV0dXJuIE5VTExfVUlEO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IG5ldyBwbGlzdGxpYi5VSUQodGhpcy5vYmplY3RzLmxlbmd0aCk7XG4gICAgaWYgKFBSSU1JVElWRV9UWVBFUy5pbmNsdWRlcyhvYmouY29uc3RydWN0b3IubmFtZSkpIHtcbiAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICAgIGNvbnN0IGFyY2hpdmVPYmogPSB7fTtcbiAgICB0aGlzLm9iamVjdHMucHVzaChhcmNoaXZlT2JqKTtcbiAgICB0aGlzLmVuY29kZVRvcExldmVsKG9iaiwgYXJjaGl2ZU9iaik7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgZW5jb2RlKHZhbCkge1xuICAgIGlmIChOT05fRU5DT0RBQkxFX1RZUEVTLmluY2x1ZGVzKHR5cGVvZiB2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcmNoaXZlKHZhbCk7XG4gIH1cblxuICBlbmNvZGVUb3BMZXZlbChvYmosIGFyY2hpdmVPYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuY29kZUFycmF5KG9iaiwgYXJjaGl2ZU9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuY29kZVNldChvYmosIGFyY2hpdmVPYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgWENUZXN0Q29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlWENUZXN0Q29uZmlndXJhdGlvbihvYmosIGFyY2hpdmVPYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICBjb25zdCBvYmpOYW1lID0gb2JqLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAvLyBPbmx5IHNwZWNpYWwgY2xhc3MgaW5zdGFuY2UgYXJlIHVzZWZ1bCwgc3VjaCBhcyBOU1VSTCwgTlNVVUlELCBOU0RhdGUuXG4gICAgICAvLyBBbmQgdGhpcyBjbGFzcyBtdXN0IGFsc28gaGF2ZSB0aGUgZW5jb2RlQXJjaGl2ZSBtZXRob2RcbiAgICAgIGlmIChvYmpOYW1lIGluIFVOQVJDSElWRV9DTEFTU19NQVApIHtcbiAgICAgICAgb2JqLmVuY29kZUFyY2hpdmUob2JqLCBuZXcgQXJjaGl2aW5nT2JqZWN0KGFyY2hpdmVPYmosIHRoaXMpKTtcbiAgICAgICAgYXJjaGl2ZU9iai4kY2xhc3MgPSB0aGlzLnVpZEZvckFyY2hpdmVyKG9iak5hbWUsIC4uLihvYmouYWRkaXRpb25DbGFzc2VzID8/IFtdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGVEaWN0KG9iaiwgYXJjaGl2ZU9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKGBVbmFibGUgdG8gZW5jb2RlIHR5cGVzOiAke3R5cGVvZiBvYmp9YCk7XG4gICAgfVxuICB9XG5cbiAgZW5jb2RlQXJyYXkob2JqcywgYXJjaGl2ZU9iaikge1xuICAgIGFyY2hpdmVPYmouJGNsYXNzID0gdGhpcy51aWRGb3JBcmNoaXZlcignTlNBcnJheScsIE5TX09CSkVDVCk7XG4gICAgYXJjaGl2ZU9ialsnTlMub2JqZWN0cyddID0gb2Jqcy5tYXAodGhpcy5hcmNoaXZlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgZW5jb2RlU2V0KG9ianMsIGFyY2hpdmVPYmopIHtcbiAgICBhcmNoaXZlT2JqLiRjbGFzcyA9IHRoaXMudWlkRm9yQXJjaGl2ZXIoJ05TU2V0JywgTlNfT0JKRUNUKTtcbiAgICBhcmNoaXZlT2JqWydOUy5vYmplY3RzJ10gPSBvYmpzLm1hcCh0aGlzLmFyY2hpdmUuYmluZCh0aGlzKSk7XG4gIH1cblxuICBlbmNvZGVEaWN0KG9iaiwgYXJjaGl2ZU9iaikge1xuICAgIGFyY2hpdmVPYmpbJ05TLmtleXMnXSA9IF8ua2V5cyhvYmopLm1hcCh0aGlzLmFyY2hpdmUuYmluZCh0aGlzKSk7XG4gICAgYXJjaGl2ZU9ialsnTlMub2JqZWN0cyddID0gXy52YWx1ZXMob2JqKS5tYXAodGhpcy5hcmNoaXZlLmJpbmQodGhpcykpO1xuICAgIC8vZGljdCBoYXMgdG8gbWFrZSBjbGFzc2VzIGFmdGVyIHZhbHVlXG4gICAgYXJjaGl2ZU9iai4kY2xhc3MgPSB0aGlzLnVpZEZvckFyY2hpdmVyKCdOU0RpY3Rpb25hcnknLCBOU19PQkpFQ1QpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7WENUZXN0Q29uZmlndXJhdGlvbn0gb2JqXG4gICAqIEBwYXJhbSB7Kn0gYXJjaGl2ZU9ialxuICAgKi9cbiAgZW5jb2RlWENUZXN0Q29uZmlndXJhdGlvbihvYmosIGFyY2hpdmVPYmopIHtcbiAgICBhcmNoaXZlT2JqLiRjbGFzcyA9IHRoaXMudWlkRm9yQXJjaGl2ZXIoJ1hDVGVzdENvbmZpZ3VyYXRpb24nLCBOU19PQkpFQ1QpO1xuICAgIF8uZW50cmllcyhvYmouX2RhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gYXJjaGl2ZU9ialtrZXldID0gKGtleSA9PT0gRk9STUFUX1ZFUlNJT04pID8gdGhpcy5hcmNoaXZlKHZhbHVlKSA6IHRoaXMuZW5jb2RlKHZhbHVlKSk7XG4gIH1cblxuICB0b0J5dGVzKCkge1xuICAgIGlmICh0aGlzLm9iamVjdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmFyY2hpdmUodGhpcy5pbnB1dCk7XG4gICAgfVxuICAgIGNvbnN0IGQgPSB7XG4gICAgICAkdmVyc2lvbjogTlNLRVlFRF9BUkNISVZFX1ZFUlNJT04sXG4gICAgICAkYXJjaGl2ZXI6IE5TS0VZRURBUkNISVZFUixcbiAgICAgICR0b3A6IHsgcm9vdDogbmV3IHBsaXN0bGliLlVJRCgxKSB9LFxuICAgICAgJG9iamVjdHM6IHRoaXMub2JqZWN0c1xuICAgIH07XG4gICAgcmV0dXJuIGJwbGlzdENyZWF0ZShkKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgTlNLZXllZCBCdWZmZXIgZnJvbSBhbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dE9iamVjdFxuICogQHJldHVybnMge0J1ZmZlcn0gTlNLZXllZCBCdWZmZXJcbiAqL1xuZnVuY3Rpb24gYXJjaGl2ZShpbnB1dE9iamVjdCkge1xuICByZXR1cm4gbmV3IEFyY2hpdmUoaW5wdXRPYmplY3QpLnRvQnl0ZXMoKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgTlNLZXllZCBCdWZmZXIgaW50byBKUyBPYmplY3RcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbnB1dEJ5dGVzIE5TS2V5ZWQgQnVmZmVyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBKUyBPYmplY3RcbiAqL1xuZnVuY3Rpb24gdW5hcmNoaXZlKGlucHV0Qnl0ZXMpIHtcbiAgcmV0dXJuIG5ldyBVbmFyY2hpdmUoaW5wdXRCeXRlcykudG9PYmplY3QoKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdW5rbm93biBOU0tleWVkQXJjaGl2ZSB0eXBlcyBmb3IgcGFja2luZy91bnBhY2tpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHBhY2tpbmcvdW5wYWNraW5nIGtleSBuYW1lXG4gKiBAcGFyYW0ge0Jhc2VBcmNoaXZlSGFuZGxlcn0gc3ViQ2xhc3MgaW5oZXJpdCBmcm9tIEJhc2VBcmNoaXZlSGFuZGxlciBjbGFzc1xuICovXG5mdW5jdGlvbiB1cGRhdGVOU0tleWVkQXJjaGl2ZUNsYXNzKG5hbWUsIHN1YkNsYXNzKSB7XG4gIGlmICghXy5pc0Z1bmN0aW9uKHN1YkNsYXNzLnByb3RvdHlwZT8uZGVjb2RlQXJjaGl2ZSkgJiYgIV8uaXNGdW5jdGlvbihzdWJDbGFzcy5wcm90b3R5cGU/LmVuY29kZUFyY2hpdmUpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3N1YkNsYXNzIG11c3QgaGF2ZSBkZWNvZGVBcmNoaXZlIG9yIGVuY29kZUFyY2hpdmUgbWV0aG9kcycpO1xuICB9XG4gIGlmICghKG5hbWUgaW4gVU5BUkNISVZFX0NMQVNTX01BUCkpIHtcbiAgICBVTkFSQ0hJVkVfQ0xBU1NfTUFQW25hbWVdID0gc3ViQ2xhc3M7XG4gIH1cbn1cblxuZXhwb3J0IHsgdXBkYXRlTlNLZXllZEFyY2hpdmVDbGFzcywgQmFzZUFyY2hpdmVIYW5kbGVyLCBOU1VSTCwgTlNVVUlELCBOU0RhdGUsIFhDVGVzdENvbmZpZ3VyYXRpb24sIHVuYXJjaGl2ZSwgYXJjaGl2ZSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLElBQUFBLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLE1BQU1JLHVCQUF1QixHQUFHLE9BQU87QUFDdkMsTUFBTUMsUUFBUSxHQUFHLElBQUlDLHFCQUFRLENBQUNDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTUMsV0FBVyxHQUFHLFlBQVk7QUFDaEMsTUFBTUMsZUFBZSxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQztBQUN4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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nskeyed.js","names":["_bplistParser","_interopRequireDefault","require","_bplistCreator","_uuid","_lodash","NSKEYED_ARCHIVE_VERSION","NULL_UID","plistlib","UID","CYCLE_TOKEN","PRIMITIVE_TYPES","NON_ENCODABLE_TYPES","NSKEYEDARCHIVER","UNIX2APPLE_TIMESTAMP_SECOND","FORMAT_VERSION","NS_OBJECT","ArchivedObject","constructor","object","unarchiver","_unarchiver","decodeIndex","index","decodeObject","decode","key","decodeKey","ArchivingObject","archiver","_archiveObj","_archiver","encode","val","BaseArchiveHandler","additionClasses","decodeArchive","archive","Error","encodeArchive","obj","exports","DictArchive","keyUids","valUids","d","i","length","ListArchive","uids","map","bind","DTTapMessagePlist","NSError","$class","domain","userinfo","code","NSException","reason","name","NSURL","base","relative","_base","_relative","NSDate","data","_data","NSMutableString","NSMutableData","NSUUID","uuidStringify","Buffer","from","uuidParse","buffer","XCTCapabilities","NSIgnore","NSNull","XCTestConfiguration","_default","aggregateStatisticsBeforeCrash","XCSuiteRecordsKey","automationFrameworkPath","baselineFileRelativePath","undefined","baselineFileURL","defaultTestExecutionTimeAllowance","disablePerformanceMetrics","emitOSLogs","formatVersion","gatherLocalizableStringsData","initializeForUITesting","maximumTestExecutionTimeAllowance","productModuleName","randomExecutionOrderingSeed","reportActivities","reportResultsToIDE","systemAttachmentLifetime","targetApplicationArguments","targetApplicationBundleID","targetApplicationEnvironment","targetApplicationPath","testApplicationDependencies","testApplicationUserOverrides","testBundleRelativePath","testExecutionOrdering","testTimeoutsEnabled","testsDrivenByIDE","testsMustRunOnMainThread","testsToRun","testsToSkip","treatMissingBaselinesAsFailures","userAttachmentLifetime","testBundleURL","TypeError","sessionIdentifier","getBytes","XCActivityRecord","_keys","reduce","acc","UNARCHIVE_CLASS_MAP","DTSysmonTapMessage","DTTapHeartbeatMessage","DTTapMessageArchive","DTKTraceTapMessage","ErrorArchive","ExceptionArchive","NSDictionary","NSMutableDictionary","NSArray","NSMutableArray","NSMutableSet","NSSet","Unarchive","inputBytes","input","unpackedUids","topUID","objects","unpackArchiveHeader","plist","parseBuffer","$archiver","$version","top","$top","root","JSON","stringify","$objects","classForUid","meta","$classname","klass","_","isNil","isUndefined","rawObj","klassObj","toObject","Archive","inputObject","uidForArchiver","addition","push","$classes","isNull","includes","archiveObj","encodeTopLevel","Array","encodeArray","Set","encodeSet","encodeXCTestConfiguration","Object","objName","encodeDict","objs","keys","values","entries","forEach","value","toBytes","bplistCreate","unarchive","updateNSKeyedArchiveClass","subClass","_subClass$prototype","_subClass$prototype2","isFunction","prototype"],"sources":["../../../../lib/instrument/transformer/nskeyed.js"],"sourcesContent":["import plistlib from 'bplist-parser';\nimport bplistCreate from 'bplist-creator';\nimport { parse as uuidParse, stringify as uuidStringify } from 'uuid';\nimport _ from 'lodash';\n\nconst NSKEYED_ARCHIVE_VERSION = 100_000;\nconst NULL_UID = new plistlib.UID(0);\nconst CYCLE_TOKEN = 'CycleToken';\nconst PRIMITIVE_TYPES = ['Number', 'String', 'Boolean', 'UID', 'Buffer'];\nconst NON_ENCODABLE_TYPES = ['number', 'boolean'];\nconst NSKEYEDARCHIVER = 'NSKeyedArchiver';\nconst UNIX2APPLE_TIMESTAMP_SECOND = 978307200;\nconst FORMAT_VERSION = 'formatVersion';\nconst NS_OBJECT = 'NSObject';\n\n\nclass ArchivedObject {\n /**\n * Stateful wrapper around Archive for an object being archived.\n * @param {Object} object\n * @param {Unarchive} unarchiver\n * @constructor\n */\n constructor(object, unarchiver) {\n this.object = object;\n this._unarchiver = unarchiver;\n }\n\n decodeIndex(index) {\n return this._unarchiver.decodeObject(index);\n }\n\n decode(key) {\n return this._unarchiver.decodeKey(this.object, key);\n }\n}\n\nclass ArchivingObject {\n /**\n * Stateful wrapper around Unarchive for an archived object\n * @param {Object} object\n * @param {Archive} archiver\n * @constructor\n */\n constructor(object, archiver) {\n this._archiveObj = object;\n this._archiver = archiver;\n }\n\n encode(key, val) {\n this._archiveObj[key] = this._archiver.encode(val);\n }\n}\n\n/**\n * This class must be inherited when creating an archive/unarchive subclass\n * And you need to call `updateNSKeyedArchiveClass` add subclass to archive/unarchive object\n */\nclass BaseArchiveHandler {\n /**\n * some of the classes may have to add 'NSObject' or maybe more in $classes while encoding.\n */\n additionClasses = [];\n /**\n * @param {ArchivedObject} archive\n */\n // eslint-disable-next-line no-unused-vars\n decodeArchive(archive) {\n throw new Error(`Did not know how to decode the object`);\n }\n\n /**\n * @param {Object} obj an instance of this class\n * @param {ArchivingObject} archive\n */\n // eslint-disable-next-line no-unused-vars\n encodeArchive(obj, archive) {\n throw new Error(`Did not know how to encode the object`);\n }\n}\n\n/**\n * \"Delegate for packing/unpacking NS(Mutable)Dictionary objects\"\n */\nclass DictArchive extends BaseArchiveHandler {\n decodeArchive(archive) {\n const keyUids = archive.decode('NS.keys');\n const valUids = archive.decode('NS.objects');\n const d = {};\n for (let i = 0; i < keyUids.length; i++) {\n const key = archive.decodeIndex(keyUids[i]);\n d[key] = archive.decodeIndex(valUids[i]);\n }\n return d;\n }\n}\n\n/**\n * Delegate for packing/unpacking NS(Mutable)Array objects\n */\nclass ListArchive extends BaseArchiveHandler {\n decodeArchive(archive) {\n const uids = archive.decode('NS.objects');\n return uids.map(archive.decodeIndex.bind(archive));\n }\n}\n\nclass DTTapMessagePlist extends BaseArchiveHandler {\n decodeArchive(archive) {\n return archive.decode('DTTapMessagePlist');\n }\n}\n\nclass NSError extends BaseArchiveHandler {\n decodeArchive(archive) {\n return {\n $class: 'NSError',\n domain: archive.decode('NSDomain'),\n userinfo: archive.decode('NSUserInfo'),\n code: archive.decode('NSCode')\n };\n }\n}\n\nclass NSException extends BaseArchiveHandler {\n decodeArchive(archive) {\n return {\n $class: 'NSException',\n reason: archive.decode('NS.reason'),\n userinfo: archive.decode('userinfo'),\n name: archive.decode('NS.name')\n };\n }\n}\n\nclass NSURL extends BaseArchiveHandler {\n /**\n * @param {*} base\n * @param {string} relative usually ios device relative path e.g: file://xx/\n */\n constructor(base, relative) {\n super();\n this._base = base;\n this._relative = relative;\n this.additionClasses = [NS_OBJECT];\n }\n\n decodeArchive(archive) {\n return { $class: 'NSURL', base: archive.decode('NS.base'), relative: archive.decode('NS.relative') };\n }\n\n encodeArchive(obj, archive) {\n archive.encode('NS.base', obj._base);\n archive.encode('NS.relative', obj._relative);\n }\n}\n\nclass NSDate extends BaseArchiveHandler {\n /**\n * @param {number} data timestamp in seconds\n */\n constructor(data) {\n super();\n this._data = data;\n }\n\n decodeArchive(archive) {\n return UNIX2APPLE_TIMESTAMP_SECOND + archive.decode('NS.time');\n }\n\n encodeArchive(obj, archive) {\n archive.encode('NS.time', obj._data - UNIX2APPLE_TIMESTAMP_SECOND);\n }\n}\n\nclass NSMutableString extends BaseArchiveHandler {\n decodeArchive(archive) {\n return archive.decode('NS.string');\n }\n}\n\nclass NSMutableData extends BaseArchiveHandler {\n decodeArchive(archive) {\n return archive.decode('NS.data');\n }\n}\n\nclass NSUUID extends BaseArchiveHandler {\n /**\n * @param {string} data uuid format data e.g:00000000-0000-0000-0000-000000000000\n */\n constructor(data) {\n super();\n this._data = data;\n this.additionClasses = [NS_OBJECT];\n }\n\n decodeArchive(archive) {\n return uuidStringify(archive.decode('NS.uuidbytes'));\n }\n\n encodeArchive(obj, archive) {\n archive._archiveObj['NS.uuidbytes'] = Buffer.from(uuidParse(obj._data).buffer);\n }\n}\n\nclass XCTCapabilities extends BaseArchiveHandler {\n decodeArchive(archive) {\n return archive.decode('capabilities-dictionary');\n }\n}\n\n/**\n * Some of the plist classes may not be included and should not be cared.\n * Using this as a default decoder for unknown entities to avoid interrupting decode process.\n */\nclass NSIgnore extends BaseArchiveHandler {\n decodeArchive() {\n return null;\n }\n}\n\nclass NSNull extends BaseArchiveHandler {\n constructor() {\n super();\n this.additionClasses = [NS_OBJECT];\n }\n decodeArchive() {\n return null;\n }\n}\n\n/**\n * @typedef {Object} XCTestConfigurationPlist\n * @property {string | NSURL} testBundleURL\n * @property {string | NSUUID} sessionIdentifier\n * @property {string?} productModuleName\n * @property {string?} targetApplicationBundleID\n * @property {string[]?} targetApplicationArguments\n * @property {string[]?} testsToRun\n * @property {string[]?} testsToSkip\n */\nclass XCTestConfiguration extends BaseArchiveHandler {\n static _default = {\n aggregateStatisticsBeforeCrash: {\n XCSuiteRecordsKey: {}\n },\n automationFrameworkPath: '/Developer/Library/PrivateFrameworks/XCTAutomationSupport.framework',\n baselineFileRelativePath: undefined,\n baselineFileURL: undefined,\n defaultTestExecutionTimeAllowance: undefined,\n disablePerformanceMetrics: false,\n emitOSLogs: false,\n formatVersion: 2,\n gatherLocalizableStringsData: false,\n initializeForUITesting: true,\n maximumTestExecutionTimeAllowance: undefined,\n productModuleName: 'WebDriverAgentRunner',\n randomExecutionOrderingSeed: undefined,\n reportActivities: true,\n reportResultsToIDE: true,\n systemAttachmentLifetime: 2,\n targetApplicationArguments: [],\n targetApplicationBundleID: undefined,\n targetApplicationEnvironment: undefined,\n targetApplicationPath: '/KEEP-THIS-NOT-EMPTY/KEEP-THIS-NOT-EMPTY',\n testApplicationDependencies: {},\n testApplicationUserOverrides: undefined,\n testBundleRelativePath: undefined,\n testExecutionOrdering: 0,\n testTimeoutsEnabled: false,\n testsDrivenByIDE: false,\n testsMustRunOnMainThread: true,\n testsToRun: undefined,\n testsToSkip: undefined,\n treatMissingBaselinesAsFailures: false,\n userAttachmentLifetime: 1\n }\n\n /**\n * @param {XCTestConfigurationPlist} data\n */\n constructor(data) {\n super();\n if (!data.testBundleURL) {\n throw new TypeError('testBundleURL cannot be empty');\n }\n if (!data.sessionIdentifier) {\n throw new TypeError('sessionIdentifier cannot be empty');\n }\n if (typeof data.testBundleURL === 'string') {\n data.testBundleURL = new NSURL(undefined, data.testBundleURL);\n }\n if (!(data.testBundleURL instanceof NSURL)) {\n throw new TypeError(`Expected testBundleURL to be a valid NSURL instance, got ${data.testBundleURL.constructor.name} instead`);\n }\n if (typeof data.sessionIdentifier === 'string') {\n data.sessionIdentifier = new NSUUID(data.sessionIdentifier);\n }\n if (!(data.sessionIdentifier instanceof NSUUID)) {\n throw new TypeError(`Expected sessionIdentifier to be a valid NSUUID instance, got ${data.sessionIdentifier.constructor.name} instead`);\n }\n this._data = { ...XCTestConfiguration._default, ...data };\n }\n\n getBytes() {\n return archive(this);\n }\n}\n\nclass XCActivityRecord extends BaseArchiveHandler {\n static _keys = ['activityType', 'attachments', 'finish', 'start', 'title', 'uuid'];\n decodeArchive(archive) {\n return XCActivityRecord._keys.reduce((acc, key) => {\n acc[key] = archive.decode(key);\n return acc;\n }, {});\n }\n}\n\n/**\n * decode and encode Archive of currently known data formats\n */\nconst UNARCHIVE_CLASS_MAP = {\n DTTapMessagePlist,\n DTSysmonTapMessage: DTTapMessagePlist,\n DTTapHeartbeatMessage: DTTapMessagePlist,\n DTTapMessageArchive: DTTapMessagePlist,\n DTKTraceTapMessage: DTTapMessagePlist,\n ErrorArchive: NSError,\n ExceptionArchive: NSException,\n NSDictionary: DictArchive,\n NSMutableDictionary: DictArchive,\n NSArray: ListArchive,\n NSMutableArray: ListArchive,\n NSMutableSet: ListArchive,\n NSSet: ListArchive,\n NSDate,\n NSError,\n NSException,\n NSMutableString,\n NSMutableData,\n NSNull,\n NSUUID,\n NSURL,\n XCActivityRecord,\n XCTCapabilities,\n XCTestConfiguration,\n};\n\n/**\n * Capable of unpacking an archived object tree in the NSKeyedArchive format.\n * Apple's implementation can be found here:\n * https://github.com/apple/swift-corelibs-foundation/blob/main/Sources/Foundation/NSKeyedUnarchiver.swift\n */\nclass Unarchive {\n constructor(inputBytes) {\n this.input = inputBytes;\n this.unpackedUids = {};\n this.topUID = NULL_UID;\n this.objects = [];\n }\n\n unpackArchiveHeader() {\n const plist = plistlib.parseBuffer(this.input)[0];\n if (plist.$archiver !== NSKEYEDARCHIVER) {\n throw new Error(`unsupported encoder: ${plist.$archiver}`);\n }\n if (plist.$version !== NSKEYED_ARCHIVE_VERSION) {\n throw new Error(`expected ${NSKEYED_ARCHIVE_VERSION}, got ${plist.$version}`);\n }\n const top = plist.$top;\n const topUID = top.root;\n if (!topUID) {\n throw new Error(`top object did not have a UID! dump: ${JSON.stringify(top)}`);\n }\n this.topUID = topUID;\n this.objects = plist.$objects;\n }\n\n /**\n * use the UNARCHIVE_CLASS_MAP to find the unarchiving delegate of a uid\n */\n classForUid(index) {\n const meta = this.objects[index.UID];\n const name = meta.$classname;\n const klass = UNARCHIVE_CLASS_MAP[name] ?? NSIgnore;\n return klass;\n }\n\n decodeKey(obj, key) {\n const val = obj[key];\n return _.isNil(val?.UID) ? val : this.decodeObject(val);\n }\n\n decodeObject(index) {\n if (index === NULL_UID) {\n return null;\n }\n const obj = this.unpackedUids[index];\n if (obj === CYCLE_TOKEN) {\n throw new Error(`archive has a cycle with ${index}`);\n }\n if (!_.isUndefined(obj)) {\n return obj;\n }\n const rawObj = this.objects[index.UID];\n this.unpackedUids[index.UID] = CYCLE_TOKEN;\n\n if (!rawObj?.$class) {\n this.unpackedUids[index.UID] = obj;\n return rawObj;\n }\n const klass = this.classForUid(rawObj.$class);\n const klassObj = new klass().decodeArchive(new ArchivedObject(rawObj, this));\n this.unpackedUids[index.UID] = klassObj;\n return klassObj;\n }\n\n toObject() {\n this.unpackArchiveHeader();\n return this.decodeObject(this.topUID);\n }\n}\n\n/**\n * Capable of packing an object tree into the NSKeyedArchive format.\n * Apple's implementation can be found here:\n * https://github.com/apple/swift-corelibs-foundation/blob/main/Sources/Foundation/NSKeyedArchiver.swift\n */\nclass Archive {\n constructor(inputObject) {\n this.input = inputObject;\n this.objects = ['$null']; // objects that go directly into the archive, always start with $null\n }\n\n uidForArchiver(archiver, ...addition) {\n const val = new plistlib.UID(this.objects.length);\n this.objects.push({\n $classes: [archiver, ...addition],\n $classname: archiver\n });\n return val;\n }\n\n archive(obj) {\n if (_.isUndefined(obj) || _.isNull(obj)) {\n return NULL_UID;\n }\n const index = new plistlib.UID(this.objects.length);\n if (PRIMITIVE_TYPES.includes(obj.constructor.name)) {\n this.objects.push(obj);\n return index;\n }\n const archiveObj = {};\n this.objects.push(archiveObj);\n this.encodeTopLevel(obj, archiveObj);\n return index;\n }\n\n encode(val) {\n if (NON_ENCODABLE_TYPES.includes(typeof val)) {\n return val;\n }\n return this.archive(val);\n }\n\n encodeTopLevel(obj, archiveObj) {\n if (obj instanceof Array) {\n return this.encodeArray(obj, archiveObj);\n } else if (obj instanceof Set) {\n return this.encodeSet(obj, archiveObj);\n } else if (obj instanceof XCTestConfiguration) {\n return this.encodeXCTestConfiguration(obj, archiveObj);\n } else if (obj instanceof Object) {\n const objName = obj.constructor.name;\n // Only special class instance are useful, such as NSURL, NSUUID, NSDate.\n // And this class must also have the encodeArchive method\n if (objName in UNARCHIVE_CLASS_MAP) {\n obj.encodeArchive(obj, new ArchivingObject(archiveObj, this));\n archiveObj.$class = this.uidForArchiver(objName, ...(obj.additionClasses ?? []));\n } else {\n return this.encodeDict(obj, archiveObj);\n }\n } else {\n throw Error(`Unable to encode types: ${typeof obj}`);\n }\n }\n\n encodeArray(objs, archiveObj) {\n archiveObj.$class = this.uidForArchiver('NSArray', NS_OBJECT);\n archiveObj['NS.objects'] = objs.map(this.archive.bind(this));\n }\n\n encodeSet(objs, archiveObj) {\n archiveObj.$class = this.uidForArchiver('NSSet', NS_OBJECT);\n archiveObj['NS.objects'] = objs.map(this.archive.bind(this));\n }\n\n encodeDict(obj, archiveObj) {\n archiveObj['NS.keys'] = _.keys(obj).map(this.archive.bind(this));\n archiveObj['NS.objects'] = _.values(obj).map(this.archive.bind(this));\n //dict has to make classes after value\n archiveObj.$class = this.uidForArchiver('NSDictionary', NS_OBJECT);\n }\n\n /**\n *\n * @param {XCTestConfiguration} obj\n * @param {*} archiveObj\n */\n encodeXCTestConfiguration(obj, archiveObj) {\n archiveObj.$class = this.uidForArchiver('XCTestConfiguration', NS_OBJECT);\n _.entries(obj._data).forEach(([key, value]) => archiveObj[key] = (key === FORMAT_VERSION) ? this.archive(value) : this.encode(value));\n }\n\n toBytes() {\n if (this.objects.length === 1) {\n this.archive(this.input);\n }\n const d = {\n $version: NSKEYED_ARCHIVE_VERSION,\n $archiver: NSKEYEDARCHIVER,\n $top: { root: new plistlib.UID(1) },\n $objects: this.objects\n };\n return bplistCreate(d);\n }\n}\n\n/**\n * Creates NSKeyed Buffer from an object\n * @param {Object} inputObject\n * @returns {Buffer} NSKeyed Buffer\n */\nfunction archive(inputObject) {\n return new Archive(inputObject).toBytes();\n}\n\n/**\n * Parses NSKeyed Buffer into JS Object\n * @param {Buffer} inputBytes NSKeyed Buffer\n * @returns {Object} JS Object\n */\nfunction unarchive(inputBytes) {\n return new Unarchive(inputBytes).toObject();\n}\n\n/**\n * Update unknown NSKeyedArchive types for packing/unpacking\n * @param {String} name packing/unpacking key name\n * @param {BaseArchiveHandler} subClass inherit from BaseArchiveHandler class\n */\nfunction updateNSKeyedArchiveClass(name, subClass) {\n if (!_.isFunction(subClass.prototype?.decodeArchive) && !_.isFunction(subClass.prototype?.encodeArchive)) {\n throw Error('subClass must have decodeArchive or encodeArchive methods');\n }\n if (!(name in UNARCHIVE_CLASS_MAP)) {\n UNARCHIVE_CLASS_MAP[name] = subClass;\n }\n}\n\nexport { updateNSKeyedArchiveClass, BaseArchiveHandler, NSURL, NSUUID, NSDate, XCTestConfiguration, unarchive, archive };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nskeyed.js","names":["_bplistParser","_interopRequireDefault","require","_bplistCreator","_uuid","_lodash","NSKEYED_ARCHIVE_VERSION","NULL_UID","plistlib","UID","CYCLE_TOKEN","PRIMITIVE_TYPES","NON_ENCODABLE_TYPES","NSKEYEDARCHIVER","UNIX2APPLE_TIMESTAMP_SECOND","FORMAT_VERSION","NS_OBJECT","ArchivedObject","constructor","object","unarchiver","_unarchiver","decodeIndex","index","decodeObject","decode","key","decodeKey","ArchivingObject","archiver","_archiveObj","_archiver","encode","val","BaseArchiveHandler","additionClasses","decodeArchive","archive","Error","encodeArchive","obj","exports","DictArchive","keyUids","valUids","d","i","length","ListArchive","uids","map","bind","DTTapMessagePlist","NSError","$class","domain","userinfo","code","NSException","reason","name","NSURL","base","relative","_base","_relative","NSDate","data","_data","NSMutableString","NSMutableData","NSUUID","uuidStringify","Buffer","from","uuidParse","buffer","XCTCapabilities","NSIgnore","NSNull","XCTestConfiguration","_default","aggregateStatisticsBeforeCrash","XCSuiteRecordsKey","automationFrameworkPath","baselineFileRelativePath","undefined","baselineFileURL","defaultTestExecutionTimeAllowance","disablePerformanceMetrics","emitOSLogs","formatVersion","gatherLocalizableStringsData","initializeForUITesting","maximumTestExecutionTimeAllowance","productModuleName","randomExecutionOrderingSeed","reportActivities","reportResultsToIDE","systemAttachmentLifetime","targetApplicationArguments","targetApplicationBundleID","targetApplicationEnvironment","targetApplicationPath","testApplicationDependencies","testApplicationUserOverrides","testBundleRelativePath","testExecutionOrdering","testTimeoutsEnabled","testsDrivenByIDE","testsMustRunOnMainThread","testsToRun","testsToSkip","treatMissingBaselinesAsFailures","userAttachmentLifetime","testBundleURL","TypeError","sessionIdentifier","getBytes","XCActivityRecord","_keys","reduce","acc","UNARCHIVE_CLASS_MAP","DTSysmonTapMessage","DTTapHeartbeatMessage","DTTapMessageArchive","DTKTraceTapMessage","ErrorArchive","ExceptionArchive","NSDictionary","NSMutableDictionary","NSArray","NSMutableArray","NSMutableSet","NSSet","Unarchive","inputBytes","input","unpackedUids","topUID","objects","unpackArchiveHeader","plist","parseBuffer","$archiver","$version","top","$top","root","JSON","stringify","$objects","classForUid","meta","$classname","klass","_","isNil","isUndefined","rawObj","klassObj","toObject","Archive","inputObject","uidForArchiver","addition","push","$classes","isNull","includes","archiveObj","encodeTopLevel","Array","encodeArray","Set","encodeSet","encodeXCTestConfiguration","Object","objName","encodeDict","objs","keys","values","entries","forEach","value","toBytes","bplistCreate","unarchive","updateNSKeyedArchiveClass","subClass","_subClass$prototype","_subClass$prototype2","isFunction","prototype"],"sources":["../../../../lib/instrument/transformer/nskeyed.js"],"sourcesContent":["import plistlib from 'bplist-parser';\nimport bplistCreate from 'bplist-creator';\nimport { parse as uuidParse, stringify as uuidStringify } from 'uuid';\nimport _ from 'lodash';\n\nconst NSKEYED_ARCHIVE_VERSION = 100_000;\nconst NULL_UID = new plistlib.UID(0);\nconst CYCLE_TOKEN = 'CycleToken';\nconst PRIMITIVE_TYPES = ['Number', 'String', 'Boolean', 'UID', 'Buffer'];\nconst NON_ENCODABLE_TYPES = ['number', 'boolean'];\nconst NSKEYEDARCHIVER = 'NSKeyedArchiver';\nconst UNIX2APPLE_TIMESTAMP_SECOND = 978307200;\nconst FORMAT_VERSION = 'formatVersion';\nconst NS_OBJECT = 'NSObject';\n\n\nclass ArchivedObject {\n /**\n * Stateful wrapper around Archive for an object being archived.\n * @param {Object} object\n * @param {Unarchive} unarchiver\n * @constructor\n */\n constructor(object, unarchiver) {\n this.object = object;\n this._unarchiver = unarchiver;\n }\n\n decodeIndex(index) {\n return this._unarchiver.decodeObject(index);\n }\n\n decode(key) {\n return this._unarchiver.decodeKey(this.object, key);\n }\n}\n\nclass ArchivingObject {\n /**\n * Stateful wrapper around Unarchive for an archived object\n * @param {Object} object\n * @param {Archive} archiver\n * @constructor\n */\n constructor(object, archiver) {\n this._archiveObj = object;\n this._archiver = archiver;\n }\n\n encode(key, val) {\n this._archiveObj[key] = this._archiver.encode(val);\n }\n}\n\n/**\n * This class must be inherited when creating an archive/unarchive subclass\n * And you need to call `updateNSKeyedArchiveClass` add subclass to archive/unarchive object\n */\nclass BaseArchiveHandler {\n /**\n * some of the classes may have to add 'NSObject' or maybe more in $classes while encoding.\n */\n additionClasses = [];\n /**\n * @param {ArchivedObject} archive\n */\n // eslint-disable-next-line no-unused-vars\n decodeArchive(archive) {\n throw new Error(`Did not know how to decode the object`);\n }\n\n /**\n * @param {Object} obj an instance of this class\n * @param {ArchivingObject} archive\n */\n // eslint-disable-next-line no-unused-vars\n encodeArchive(obj, archive) {\n throw new Error(`Did not know how to encode the object`);\n }\n}\n\n/**\n * \"Delegate for packing/unpacking NS(Mutable)Dictionary objects\"\n */\nclass DictArchive extends BaseArchiveHandler {\n decodeArchive(archive) {\n const keyUids = archive.decode('NS.keys');\n const valUids = archive.decode('NS.objects');\n const d = {};\n for (let i = 0; i < keyUids.length; i++) {\n const key = archive.decodeIndex(keyUids[i]);\n d[key] = archive.decodeIndex(valUids[i]);\n }\n return d;\n }\n}\n\n/**\n * Delegate for packing/unpacking NS(Mutable)Array objects\n */\nclass ListArchive extends BaseArchiveHandler {\n decodeArchive(archive) {\n const uids = archive.decode('NS.objects');\n return uids.map(archive.decodeIndex.bind(archive));\n }\n}\n\nclass DTTapMessagePlist extends BaseArchiveHandler {\n decodeArchive(archive) {\n return archive.decode('DTTapMessagePlist');\n }\n}\n\nclass NSError extends BaseArchiveHandler {\n decodeArchive(archive) {\n return {\n $class: 'NSError',\n domain: archive.decode('NSDomain'),\n userinfo: archive.decode('NSUserInfo'),\n code: archive.decode('NSCode')\n };\n }\n}\n\nclass NSException extends BaseArchiveHandler {\n decodeArchive(archive) {\n return {\n $class: 'NSException',\n reason: archive.decode('NS.reason'),\n userinfo: archive.decode('userinfo'),\n name: archive.decode('NS.name')\n };\n }\n}\n\nclass NSURL extends BaseArchiveHandler {\n /**\n * @param {*} base\n * @param {string} relative usually ios device relative path e.g: file://xx/\n */\n constructor(base, relative) {\n super();\n this._base = base;\n this._relative = relative;\n this.additionClasses = [NS_OBJECT];\n }\n\n decodeArchive(archive) {\n return { $class: 'NSURL', base: archive.decode('NS.base'), relative: archive.decode('NS.relative') };\n }\n\n encodeArchive(obj, archive) {\n archive.encode('NS.base', obj._base);\n archive.encode('NS.relative', obj._relative);\n }\n}\n\nclass NSDate extends BaseArchiveHandler {\n /**\n * @param {number} data timestamp in seconds\n */\n constructor(data) {\n super();\n this._data = data;\n }\n\n decodeArchive(archive) {\n return UNIX2APPLE_TIMESTAMP_SECOND + archive.decode('NS.time');\n }\n\n encodeArchive(obj, archive) {\n archive.encode('NS.time', obj._data - UNIX2APPLE_TIMESTAMP_SECOND);\n }\n}\n\nclass NSMutableString extends BaseArchiveHandler {\n decodeArchive(archive) {\n return archive.decode('NS.string');\n }\n}\n\nclass NSMutableData extends BaseArchiveHandler {\n decodeArchive(archive) {\n return archive.decode('NS.data');\n }\n}\n\nclass NSUUID extends BaseArchiveHandler {\n /**\n * @param {string} data uuid format data e.g:00000000-0000-0000-0000-000000000000\n */\n constructor(data) {\n super();\n this._data = data;\n this.additionClasses = [NS_OBJECT];\n }\n\n decodeArchive(archive) {\n return uuidStringify(archive.decode('NS.uuidbytes'));\n }\n\n encodeArchive(obj, archive) {\n archive._archiveObj['NS.uuidbytes'] = Buffer.from(uuidParse(obj._data).buffer);\n }\n}\n\nclass XCTCapabilities extends BaseArchiveHandler {\n decodeArchive(archive) {\n return archive.decode('capabilities-dictionary');\n }\n}\n\n/**\n * Some of the plist classes may not be included and should not be cared.\n * Using this as a default decoder for unknown entities to avoid interrupting decode process.\n */\nclass NSIgnore extends BaseArchiveHandler {\n decodeArchive() {\n return null;\n }\n}\n\nclass NSNull extends BaseArchiveHandler {\n constructor() {\n super();\n this.additionClasses = [NS_OBJECT];\n }\n decodeArchive() {\n return null;\n }\n}\n\n/**\n * @typedef {Object} XCTestConfigurationPlist\n * @property {string | NSURL} testBundleURL\n * @property {string | NSUUID} sessionIdentifier\n * @property {string?} productModuleName\n * @property {string?} targetApplicationBundleID\n * @property {string[]?} targetApplicationArguments\n * @property {string[]?} testsToRun\n * @property {string[]?} testsToSkip\n */\nclass XCTestConfiguration extends BaseArchiveHandler {\n static _default = {\n aggregateStatisticsBeforeCrash: {\n XCSuiteRecordsKey: {}\n },\n automationFrameworkPath: '/Developer/Library/PrivateFrameworks/XCTAutomationSupport.framework',\n baselineFileRelativePath: undefined,\n baselineFileURL: undefined,\n defaultTestExecutionTimeAllowance: undefined,\n disablePerformanceMetrics: false,\n emitOSLogs: false,\n formatVersion: 2,\n gatherLocalizableStringsData: false,\n initializeForUITesting: true,\n maximumTestExecutionTimeAllowance: undefined,\n productModuleName: 'WebDriverAgentRunner',\n randomExecutionOrderingSeed: undefined,\n reportActivities: true,\n reportResultsToIDE: true,\n systemAttachmentLifetime: 2,\n targetApplicationArguments: [],\n targetApplicationBundleID: undefined,\n targetApplicationEnvironment: undefined,\n targetApplicationPath: '/KEEP-THIS-NOT-EMPTY/KEEP-THIS-NOT-EMPTY',\n testApplicationDependencies: {},\n testApplicationUserOverrides: undefined,\n testBundleRelativePath: undefined,\n testExecutionOrdering: 0,\n testTimeoutsEnabled: false,\n testsDrivenByIDE: false,\n testsMustRunOnMainThread: true,\n testsToRun: undefined,\n testsToSkip: undefined,\n treatMissingBaselinesAsFailures: false,\n userAttachmentLifetime: 1\n }\n\n /**\n * @param {XCTestConfigurationPlist} data\n */\n constructor(data) {\n super();\n if (!data.testBundleURL) {\n throw new TypeError('testBundleURL cannot be empty');\n }\n if (!data.sessionIdentifier) {\n throw new TypeError('sessionIdentifier cannot be empty');\n }\n if (typeof data.testBundleURL === 'string') {\n data.testBundleURL = new NSURL(undefined, data.testBundleURL);\n }\n if (!(data.testBundleURL instanceof NSURL)) {\n throw new TypeError(`Expected testBundleURL to be a valid NSURL instance, got ${data.testBundleURL.constructor.name} instead`);\n }\n if (typeof data.sessionIdentifier === 'string') {\n data.sessionIdentifier = new NSUUID(data.sessionIdentifier);\n }\n if (!(data.sessionIdentifier instanceof NSUUID)) {\n throw new TypeError(`Expected sessionIdentifier to be a valid NSUUID instance, got ${data.sessionIdentifier.constructor.name} instead`);\n }\n this._data = { ...XCTestConfiguration._default, ...data };\n }\n\n getBytes() {\n return archive(this);\n }\n}\n\nclass XCActivityRecord extends BaseArchiveHandler {\n static _keys = ['activityType', 'attachments', 'finish', 'start', 'title', 'uuid'];\n decodeArchive(archive) {\n return XCActivityRecord._keys.reduce((acc, key) => {\n acc[key] = archive.decode(key);\n return acc;\n }, {});\n }\n}\n\n/**\n * decode and encode Archive of currently known data formats\n */\nconst UNARCHIVE_CLASS_MAP = {\n DTTapMessagePlist,\n DTSysmonTapMessage: DTTapMessagePlist,\n DTTapHeartbeatMessage: DTTapMessagePlist,\n DTTapMessageArchive: DTTapMessagePlist,\n DTKTraceTapMessage: DTTapMessagePlist,\n ErrorArchive: NSError,\n ExceptionArchive: NSException,\n NSDictionary: DictArchive,\n NSMutableDictionary: DictArchive,\n NSArray: ListArchive,\n NSMutableArray: ListArchive,\n NSMutableSet: ListArchive,\n NSSet: ListArchive,\n NSDate,\n NSError,\n NSException,\n NSMutableString,\n NSMutableData,\n NSNull,\n NSUUID,\n NSURL,\n XCActivityRecord,\n XCTCapabilities,\n XCTestConfiguration,\n};\n\n/**\n * Capable of unpacking an archived object tree in the NSKeyedArchive format.\n * Apple's implementation can be found here:\n * https://github.com/apple/swift-corelibs-foundation/blob/main/Sources/Foundation/NSKeyedUnarchiver.swift\n */\nclass Unarchive {\n constructor(inputBytes) {\n this.input = inputBytes;\n this.unpackedUids = {};\n this.topUID = NULL_UID;\n this.objects = [];\n }\n\n unpackArchiveHeader() {\n const plist = plistlib.parseBuffer(this.input)[0];\n if (plist.$archiver !== NSKEYEDARCHIVER) {\n throw new Error(`unsupported encoder: ${plist.$archiver}`);\n }\n if (plist.$version !== NSKEYED_ARCHIVE_VERSION) {\n throw new Error(`expected ${NSKEYED_ARCHIVE_VERSION}, got ${plist.$version}`);\n }\n const top = plist.$top;\n const topUID = top.root;\n if (!topUID) {\n throw new Error(`top object did not have a UID! dump: ${JSON.stringify(top)}`);\n }\n this.topUID = topUID;\n this.objects = plist.$objects;\n }\n\n /**\n * use the UNARCHIVE_CLASS_MAP to find the unarchiving delegate of a uid\n */\n classForUid(index) {\n const meta = this.objects[index.UID];\n const name = meta.$classname;\n const klass = UNARCHIVE_CLASS_MAP[name] ?? NSIgnore;\n return klass;\n }\n\n decodeKey(obj, key) {\n const val = obj[key];\n return _.isNil(val?.UID) ? val : this.decodeObject(val);\n }\n\n decodeObject(index) {\n if (index === NULL_UID) {\n return null;\n }\n const obj = this.unpackedUids[index];\n if (obj === CYCLE_TOKEN) {\n throw new Error(`archive has a cycle with ${index}`);\n }\n if (!_.isUndefined(obj)) {\n return obj;\n }\n const rawObj = this.objects[index.UID];\n this.unpackedUids[index.UID] = CYCLE_TOKEN;\n\n if (!rawObj?.$class) {\n this.unpackedUids[index.UID] = obj;\n return rawObj;\n }\n const klass = this.classForUid(rawObj.$class);\n const klassObj = new klass().decodeArchive(new ArchivedObject(rawObj, this));\n this.unpackedUids[index.UID] = klassObj;\n return klassObj;\n }\n\n toObject() {\n this.unpackArchiveHeader();\n return this.decodeObject(this.topUID);\n }\n}\n\n/**\n * Capable of packing an object tree into the NSKeyedArchive format.\n * Apple's implementation can be found here:\n * https://github.com/apple/swift-corelibs-foundation/blob/main/Sources/Foundation/NSKeyedArchiver.swift\n */\nclass Archive {\n constructor(inputObject) {\n this.input = inputObject;\n this.objects = ['$null']; // objects that go directly into the archive, always start with $null\n }\n\n uidForArchiver(archiver, ...addition) {\n const val = new plistlib.UID(this.objects.length);\n this.objects.push({\n $classes: [archiver, ...addition],\n $classname: archiver\n });\n return val;\n }\n\n archive(obj) {\n if (_.isUndefined(obj) || _.isNull(obj)) {\n return NULL_UID;\n }\n const index = new plistlib.UID(this.objects.length);\n if (PRIMITIVE_TYPES.includes(obj.constructor.name)) {\n this.objects.push(obj);\n return index;\n }\n const archiveObj = {};\n this.objects.push(archiveObj);\n this.encodeTopLevel(obj, archiveObj);\n return index;\n }\n\n encode(val) {\n if (NON_ENCODABLE_TYPES.includes(typeof val)) {\n return val;\n }\n return this.archive(val);\n }\n\n encodeTopLevel(obj, archiveObj) {\n if (obj instanceof Array) {\n return this.encodeArray(obj, archiveObj);\n } else if (obj instanceof Set) {\n return this.encodeSet(obj, archiveObj);\n } else if (obj instanceof XCTestConfiguration) {\n return this.encodeXCTestConfiguration(obj, archiveObj);\n } else if (obj instanceof Object) {\n const objName = obj.constructor.name;\n // Only special class instance are useful, such as NSURL, NSUUID, NSDate.\n // And this class must also have the encodeArchive method\n if (objName in UNARCHIVE_CLASS_MAP) {\n obj.encodeArchive(obj, new ArchivingObject(archiveObj, this));\n archiveObj.$class = this.uidForArchiver(objName, ...(obj.additionClasses ?? []));\n } else {\n return this.encodeDict(obj, archiveObj);\n }\n } else {\n throw Error(`Unable to encode types: ${typeof obj}`);\n }\n }\n\n encodeArray(objs, archiveObj) {\n archiveObj.$class = this.uidForArchiver('NSArray', NS_OBJECT);\n archiveObj['NS.objects'] = objs.map(this.archive.bind(this));\n }\n\n encodeSet(objs, archiveObj) {\n archiveObj.$class = this.uidForArchiver('NSSet', NS_OBJECT);\n archiveObj['NS.objects'] = objs.map(this.archive.bind(this));\n }\n\n encodeDict(obj, archiveObj) {\n archiveObj['NS.keys'] = _.keys(obj).map(this.archive.bind(this));\n archiveObj['NS.objects'] = _.values(obj).map(this.archive.bind(this));\n //dict has to make classes after value\n archiveObj.$class = this.uidForArchiver('NSDictionary', NS_OBJECT);\n }\n\n /**\n *\n * @param {XCTestConfiguration} obj\n * @param {*} archiveObj\n */\n encodeXCTestConfiguration(obj, archiveObj) {\n archiveObj.$class = this.uidForArchiver('XCTestConfiguration', NS_OBJECT);\n _.entries(obj._data).forEach(([key, value]) => archiveObj[key] = (key === FORMAT_VERSION) ? this.archive(value) : this.encode(value));\n }\n\n toBytes() {\n if (this.objects.length === 1) {\n this.archive(this.input);\n }\n const d = {\n $version: NSKEYED_ARCHIVE_VERSION,\n $archiver: NSKEYEDARCHIVER,\n $top: { root: new plistlib.UID(1) },\n $objects: this.objects\n };\n return bplistCreate(d);\n }\n}\n\n/**\n * Creates NSKeyed Buffer from an object\n * @param {Object} inputObject\n * @returns {Buffer} NSKeyed Buffer\n */\nfunction archive(inputObject) {\n return new Archive(inputObject).toBytes();\n}\n\n/**\n * Parses NSKeyed Buffer into JS Object\n * @param {Buffer} inputBytes NSKeyed Buffer\n * @returns {Object} JS Object\n */\nfunction unarchive(inputBytes) {\n return new Unarchive(inputBytes).toObject();\n}\n\n/**\n * Update unknown NSKeyedArchive types for packing/unpacking\n * @param {String} name packing/unpacking key name\n * @param {BaseArchiveHandler} subClass inherit from BaseArchiveHandler class\n */\nfunction updateNSKeyedArchiveClass(name, subClass) {\n if (!_.isFunction(subClass.prototype?.decodeArchive) && !_.isFunction(subClass.prototype?.encodeArchive)) {\n throw Error('subClass must have decodeArchive or encodeArchive methods');\n }\n if (!(name in UNARCHIVE_CLASS_MAP)) {\n UNARCHIVE_CLASS_MAP[name] = subClass;\n }\n}\n\nexport { updateNSKeyedArchiveClass, BaseArchiveHandler, NSURL, NSUUID, NSDate, XCTestConfiguration, unarchive, archive };\n"],"mappings":"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"}
|
|
@@ -56,4 +56,4 @@ class MCInstallProxyService extends _baseService.BaseServicePlist {
|
|
|
56
56
|
exports.MCInstallProxyService = MCInstallProxyService;
|
|
57
57
|
var _default = MCInstallProxyService;
|
|
58
58
|
exports.default = _default;
|
|
59
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmFzZVNlcnZpY2UiLCJyZXF1aXJlIiwiX3N1cHBvcnQiLCJNQ19JTlNUQUxMX1NFUlZJQ0VfTkFNRSIsImV4cG9ydHMiLCJBQ0tOT1dMRURHRUQiLCJjaGVja0FDSyIsInJlcyIsIm5hbWUiLCJTdGF0dXMiLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJNQ0luc3RhbGxQcm94eVNlcnZpY2UiLCJCYXNlU2VydmljZVBsaXN0IiwiY29uc3RydWN0b3IiLCJzb2NrZXRDbGllbnQiLCJnZXRQcm9maWxlTGlzdCIsIl9wbGlzdFNlcnZpY2UiLCJzZW5kUGxpc3RBbmRSZWNlaXZlIiwiUmVxdWVzdFR5cGUiLCJpbnN0YWxsUHJvZmlsZSIsInBhdGgiLCJwYXlsb2FkIiwiZnMiLCJyZWFkRmlsZSIsInJlbW92ZVByb2ZpbGUiLCJpZGVudCIsInByb2ZpbGVzIiwibWV0YSIsIlByb2ZpbGVNZXRhZGF0YSIsImRhdGEiLCJwbGlzdCIsImNyZWF0ZUJpbmFyeVBsaXN0IiwiUGF5bG9hZFVVSUQiLCJQYXlsb2FkVmVyc2lvbiIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9tY2luc3RhbGwvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYXNlU2VydmljZVBsaXN0fSBmcm9tICcuLi9iYXNlLXNlcnZpY2UnO1xuaW1wb3J0IHtmcywgcGxpc3R9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgTUNfSU5TVEFMTF9TRVJWSUNFX05BTUUgPSAnY29tLmFwcGxlLm1vYmlsZS5NQ0luc3RhbGwnO1xuY29uc3QgQUNLTk9XTEVER0VEID0gJ0Fja25vd2xlZGdlZCc7XG5cbmZ1bmN0aW9uIGNoZWNrQUNLIChyZXMsIG5hbWUpIHtcbiAgaWYgKHJlcy5TdGF0dXMgIT09IEFDS05PV0xFREdFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBlcnJvcjogJHtKU09OLnN0cmluZ2lmeShyZXMpfWApO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmNsYXNzIE1DSW5zdGFsbFByb3h5U2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlUGxpc3Qge1xuICBjb25zdHJ1Y3RvciAoc29ja2V0Q2xpZW50KSB7XG4gICAgc3VwZXIoc29ja2V0Q2xpZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm9maWxlTGlzdFxuICAgKiBAcHJvcGVydHkge0FycmF5fSBPcmRlcmVkSWRlbnRpZmllcnMgbGlzdCBvZiBhbGwgcHJvZmlsZSBpZGVudFxuICAgKiBAcHJvcGVydHkge09iamVjdH0gUHJvZmlsZU1hbmlmZXN0XG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBQcm9maWxlTWV0YWRhdGFcbiAgICogQHByb3BlcnR5IHtTdHJpbmd9IFN0YXR1c1xuICAgKi9cblxuICAvKipcbiAgICogR2V0IGFsbCBwcm9maWxlcyBvZiBpT1MgZGV2aWNlc1xuICAgKiBAcmV0dXJucyB7UHJvZmlsZUxpc3R9XG4gICAqIGUuZy5cbiAgICoge1xuICAgKiAgIE9yZGVyZWRJZGVudGlmaWVyczogWyAnMmZhYzFjMmIzZDY4NDg0MzE4OWIyOTgxYzcxOGIwMTMyODU0YTg0N2EnIF0sXG4gICAqICAgUHJvZmlsZU1hbmlmZXN0OiB7XG4gICAqICAgICAnMmZhYzFjMmIzZDY4NDg0MzE4OWIyOTgxYzcxOGIwMTMyODU0YTg0N2EnOiB7XG4gICAqICAgICAgIERlc2NyaXB0aW9uOiAnQ2hhcmxlcyBQcm94eSBDQSAoNyBEZWMgMjAyMCwgTWFjQm9vay1Qcm8ubG9jYWwpJyxcbiAgICogICAgICAgSXNBY3RpdmU6IHRydWVcbiAgICogICAgIH1cbiAgICogICB9LFxuICAgKiAgIFByb2ZpbGVNZXRhZGF0YToge1xuICAgKiAgICAgJzJmYWMxYzJiM2Q2ODQ4NDMxODliMjk4MWM3MThiMDEzMjg1NGE4NDdhJzoge1xuICAgKiAgICAgICBQYXlsb2FkRGlzcGxheU5hbWU6ICdDaGFybGVzIFByb3h5IENBICg3IERlYyAyMDIwLCBNYWNCb29rLVByby5sb2NhbCknLFxuICAgKiAgICAgICBQYXlsb2FkUmVtb3ZhbERpc2FsbG93ZWQ6IGZhbHNlLFxuICAgKiAgICAgICBQYXlsb2FkVVVJRDogJ0IzMDAwNUNDLUJDNzMtNEU0Mi04NTQ1LThEQTZDNDRBOEE3MScsXG4gICAqICAgICAgIFBheWxvYWRWZXJzaW9uOiAxXG4gICAqICAgICB9XG4gICAqICAgfSxcbiAgICogICBTdGF0dXM6ICdBY2tub3dsZWRnZWQnXG4gICAqIH1cbiAgICovXG4gIGFzeW5jIGdldFByb2ZpbGVMaXN0ICgpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9wbGlzdFNlcnZpY2Uuc2VuZFBsaXN0QW5kUmVjZWl2ZSh7UmVxdWVzdFR5cGU6ICdHZXRQcm9maWxlTGlzdCd9KTtcbiAgICByZXR1cm4gY2hlY2tBQ0socmVzLCAnZ2V0UHJvZmlsZUxpc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxsIHByb2ZpbGUgdG8gaU9TIGRldmljZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCAgbXVzdCBiZSBhIGNlcnRpZmljYXRlIGZpbGUgLlBFTSAuQ0VSIGFuZCBtb3JlIGZvcm1hdHNcbiAgICogZS5nOiAvRG93bmxvYWRzL2NoYXJsZXMtY2VydGlmaWNhdGUucGVtXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IGUuZy4ge1N0YXR1czogJ0Fja25vd2xlZGdlZCd9XG4gICAqL1xuICBhc3luYyBpbnN0YWxsUHJvZmlsZSAocGF0aCkge1xuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9wbGlzdFNlcnZpY2Uuc2VuZFBsaXN0QW5kUmVjZWl2ZSh7J1JlcXVlc3RUeXBlJzogJ0luc3RhbGxQcm9maWxlJywgJ1BheWxvYWQnOiBwYXlsb2FkfSk7XG4gICAgcmV0dXJuIGNoZWNrQUNLKHJlcywgJ2luc3RhbGxQcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHByb2ZpbGUgZnJvbSBpT1MgZGV2aWNlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBpZGVudCAgUXVlcnkgaWRlbnRpZmllciBsaXN0IHRocm91Z2ggZ2V0UHJvZmlsZUxpc3QgbWV0aG9kXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IGUuZy4ge1N0YXR1czogJ0Fja25vd2xlZGdlZCd9XG4gICAqL1xuICBhc3luYyByZW1vdmVQcm9maWxlIChpZGVudCkge1xuICAgIGNvbnN0IHByb2ZpbGVzID0gYXdhaXQgdGhpcy5nZXRQcm9maWxlTGlzdCgpO1xuICAgIGNvbnN0IG1ldGEgPSBwcm9maWxlcy5Qcm9maWxlTWV0YWRhdGFbaWRlbnRdO1xuICAgIGlmICghbWV0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3QgZmluZCBpbnN0YWxsZWQgcHJvZmlsZSBpZGVudDoke2lkZW50fWApO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gcGxpc3QuY3JlYXRlQmluYXJ5UGxpc3QoeydQYXlsb2FkVHlwZSc6ICdDb25maWd1cmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQYXlsb2FkSWRlbnRpZmllcic6IGlkZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BheWxvYWRVVUlEJzogbWV0YS5QYXlsb2FkVVVJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQYXlsb2FkVmVyc2lvbic6IG1ldGEuUGF5bG9hZFZlcnNpb259KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9wbGlzdFNlcnZpY2Uuc2VuZFBsaXN0QW5kUmVjZWl2ZSh7J1JlcXVlc3RUeXBlJzogJ1JlbW92ZVByb2ZpbGUnLCAnUHJvZmlsZUlkZW50aWZpZXInOiBkYXRhfSk7XG4gICAgcmV0dXJuIGNoZWNrQUNLKHJlcywgJ3JlbW92ZVByb2ZpbGUnKTtcbiAgfVxufVxuXG5leHBvcnQgeyBNQ0luc3RhbGxQcm94eVNlcnZpY2UsIE1DX0lOU1RBTExfU0VSVklDRV9OQU1FIH07XG5leHBvcnQgZGVmYXVsdCBNQ0luc3RhbGxQcm94eVNlcnZpY2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFHQSxNQUFNRSx1QkFBdUIsR0FBRyw0QkFBNEI7QUFBQ0MsT0FBQSxDQUFBRCx1QkFBQSxHQUFBQSx1QkFBQTtBQUM3RCxNQUFNRSxZQUFZLEdBQUcsY0FBYztBQUVuQyxTQUFTQyxRQUFRQSxDQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRTtFQUM1QixJQUFJRCxHQUFHLENBQUNFLE1BQU0sS0FBS0osWUFBWSxFQUFFO0lBQy9CLE1BQU0sSUFBSUssS0FBSyxDQUFFLEdBQUVGLElBQUssV0FBVUcsSUFBSSxDQUFDQyxTQUFTLENBQUNMLEdBQUcsQ0FBRSxFQUFDLENBQUM7RUFDMUQ7RUFDQSxPQUFPQSxHQUFHO0FBQ1o7QUFFQSxNQUFNTSxxQkFBcUIsU0FBU0MsNkJBQWdCLENBQUM7RUFDbkRDLFdBQVdBLENBQUVDLFlBQVksRUFBRTtJQUN6QixLQUFLLENBQUNBLFlBQVksQ0FBQztFQUNyQjtFQWlDQSxNQUFNQyxjQUFjQSxDQUFBLEVBQUk7SUFDdEIsTUFBTVYsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDVyxhQUFhLENBQUNDLG1CQUFtQixDQUFDO01BQUNDLFdBQVcsRUFBRTtJQUFnQixDQUFDLENBQUM7SUFDekYsT0FBT2QsUUFBUSxDQUFDQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7RUFDeEM7RUFRQSxNQUFNYyxjQUFjQSxDQUFFQyxJQUFJLEVBQUU7SUFDMUIsTUFBTUMsT0FBTyxHQUFHLE1BQU1DLFdBQUUsQ0FBQ0MsUUFBUSxDQUFDSCxJQUFJLENBQUM7SUFDdkMsTUFBTWYsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDVyxhQUFhLENBQUNDLG1CQUFtQixDQUFDO01BQUMsYUFBYSxFQUFFLGdCQUFnQjtNQUFFLFNBQVMsRUFBRUk7SUFBTyxDQUFDLENBQUM7SUFDL0csT0FBT2pCLFFBQVEsQ0FBQ0MsR0FBRyxFQUFFLGdCQUFnQixDQUFDO0VBQ3hDO0VBT0EsTUFBTW1CLGFBQWFBLENBQUVDLEtBQUssRUFBRTtJQUMxQixNQUFNQyxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLE1BQU1ZLElBQUksR0FBR0QsUUFBUSxDQUFDRSxlQUFlLENBQUNILEtBQUssQ0FBQztJQUM1QyxJQUFJLENBQUNFLElBQUksRUFBRTtNQUNULE1BQU0sSUFBSW5CLEtBQUssQ0FBRSxvQ0FBbUNpQixLQUFNLEVBQUMsQ0FBQztJQUM5RDtJQUNBLE1BQU1JLElBQUksR0FBR0MsY0FBSyxDQUFDQyxpQkFBaUIsQ0FBQztNQUFDLGFBQWEsRUFBRSxlQUFlO01BQzlCLG1CQUFtQixFQUFFTixLQUFLO01BQzFCLGFBQWEsRUFBRUUsSUFBSSxDQUFDSyxXQUFXO01BQy9CLGdCQUFnQixFQUFFTCxJQUFJLENBQUNNO0lBQWMsQ0FBQyxDQUFDO0lBQzdFLE1BQU01QixHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUNXLGFBQWEsQ0FBQ0MsbUJBQW1CLENBQUM7TUFBQyxhQUFhLEVBQUUsZUFBZTtNQUFFLG1CQUFtQixFQUFFWTtJQUFJLENBQUMsQ0FBQztJQUNySCxPQUFPekIsUUFBUSxDQUFDQyxHQUFHLEVBQUUsZUFBZSxDQUFDO0VBQ3ZDO0FBQ0Y7QUFBQ0gsT0FBQSxDQUFBUyxxQkFBQSxHQUFBQSxxQkFBQTtBQUFBLElBQUF1QixRQUFBLEdBR2N2QixxQkFBcUI7QUFBQVQsT0FBQSxDQUFBaUMsT0FBQSxHQUFBRCxRQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_baseService","require","_support","MC_INSTALL_SERVICE_NAME","exports","ACKNOWLEDGED","checkACK","res","name","Status","Error","JSON","stringify","MCInstallProxyService","BaseServicePlist","constructor","socketClient","getProfileList","_plistService","sendPlistAndReceive","RequestType","installProfile","path","payload","fs","readFile","removeProfile","ident","profiles","meta","ProfileMetadata","data","plist","createBinaryPlist","PayloadUUID","PayloadVersion","_default","default"],"sources":["../../../lib/mcinstall/index.js"],"sourcesContent":["import {BaseServicePlist} from '../base-service';\nimport {fs, plist} from '@appium/support';\n\n\nconst MC_INSTALL_SERVICE_NAME = 'com.apple.mobile.MCInstall';\nconst ACKNOWLEDGED = 'Acknowledged';\n\nfunction checkACK (res, name) {\n if (res.Status !== ACKNOWLEDGED) {\n throw new Error(`${name} error: ${JSON.stringify(res)}`);\n }\n return res;\n}\n\nclass MCInstallProxyService extends BaseServicePlist {\n constructor (socketClient) {\n super(socketClient);\n }\n\n /**\n * @typedef {Object} ProfileList\n * @property {Array} OrderedIdentifiers list of all profile ident\n * @property {Object} ProfileManifest\n * @property {Object} ProfileMetadata\n * @property {String} Status\n */\n\n /**\n * Get all profiles of iOS devices\n * @returns {ProfileList}\n * e.g.\n * {\n * OrderedIdentifiers: [ '2fac1c2b3d684843189b2981c718b0132854a847a' ],\n * ProfileManifest: {\n * '2fac1c2b3d684843189b2981c718b0132854a847a': {\n * Description: 'Charles Proxy CA (7 Dec 2020, MacBook-Pro.local)',\n * IsActive: true\n * }\n * },\n * ProfileMetadata: {\n * '2fac1c2b3d684843189b2981c718b0132854a847a': {\n * PayloadDisplayName: 'Charles Proxy CA (7 Dec 2020, MacBook-Pro.local)',\n * PayloadRemovalDisallowed: false,\n * PayloadUUID: 'B30005CC-BC73-4E42-8545-8DA6C44A8A71',\n * PayloadVersion: 1\n * }\n * },\n * Status: 'Acknowledged'\n * }\n */\n async getProfileList () {\n const res = await this._plistService.sendPlistAndReceive({RequestType: 'GetProfileList'});\n return checkACK(res, 'getProfileList');\n }\n\n /**\n * Install profile to iOS device\n * @param {String} path must be a certificate file .PEM .CER and more formats\n * e.g: /Downloads/charles-certificate.pem\n * @returns {Object} e.g. {Status: 'Acknowledged'}\n */\n async installProfile (path) {\n const payload = await fs.readFile(path);\n const res = await this._plistService.sendPlistAndReceive({'RequestType': 'InstallProfile', 'Payload': payload});\n return checkACK(res, 'installProfile');\n }\n\n /**\n * Remove profile from iOS device\n * @param {String} ident Query identifier list through getProfileList method\n * @returns {Object} e.g. {Status: 'Acknowledged'}\n */\n async removeProfile (ident) {\n const profiles = await this.getProfileList();\n const meta = profiles.ProfileMetadata[ident];\n if (!meta) {\n throw new Error(`not find installed profile ident:${ident}`);\n }\n const data = plist.createBinaryPlist({'PayloadType': 'Configuration',\n 'PayloadIdentifier': ident,\n 'PayloadUUID': meta.PayloadUUID,\n 'PayloadVersion': meta.PayloadVersion});\n const res = await this._plistService.sendPlistAndReceive({'RequestType': 'RemoveProfile', 'ProfileIdentifier': data});\n return checkACK(res, 'removeProfile');\n }\n}\n\nexport { MCInstallProxyService, MC_INSTALL_SERVICE_NAME };\nexport default MCInstallProxyService;\n"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,uBAAuB,GAAG,4BAA4B;AAACC,OAAA,CAAAD,uBAAA,GAAAA,uBAAA;AAC7D,MAAME,YAAY,GAAG,cAAc;AAEnC,SAASC,QAAQA,CAAEC,GAAG,EAAEC,IAAI,EAAE;EAC5B,IAAID,GAAG,CAACE,MAAM,KAAKJ,YAAY,EAAE;IAC/B,MAAM,IAAIK,KAAK,CAAE,GAAEF,IAAK,WAAUG,IAAI,CAACC,SAAS,CAACL,GAAG,CAAE,EAAC,CAAC;EAC1D;EACA,OAAOA,GAAG;AACZ;AAEA,MAAMM,qBAAqB,SAASC,6BAAgB,CAAC;EACnDC,WAAWA,CAAEC,YAAY,EAAE;IACzB,KAAK,CAACA,YAAY,CAAC;EACrB;EAiCA,MAAMC,cAAcA,CAAA,EAAI;IACtB,MAAMV,GAAG,GAAG,MAAM,IAAI,CAACW,aAAa,CAACC,mBAAmB,CAAC;MAACC,WAAW,EAAE;IAAgB,CAAC,CAAC;IACzF,OAAOd,QAAQ,CAACC,GAAG,EAAE,gBAAgB,CAAC;EACxC;EAQA,MAAMc,cAAcA,CAAEC,IAAI,EAAE;IAC1B,MAAMC,OAAO,GAAG,MAAMC,WAAE,CAACC,QAAQ,CAACH,IAAI,CAAC;IACvC,MAAMf,GAAG,GAAG,MAAM,IAAI,CAACW,aAAa,CAACC,mBAAmB,CAAC;MAAC,aAAa,EAAE,gBAAgB;MAAE,SAAS,EAAEI;IAAO,CAAC,CAAC;IAC/G,OAAOjB,QAAQ,CAACC,GAAG,EAAE,gBAAgB,CAAC;EACxC;EAOA,MAAMmB,aAAaA,CAAEC,KAAK,EAAE;IAC1B,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACX,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","names":["_baseService","require","_support","MC_INSTALL_SERVICE_NAME","exports","ACKNOWLEDGED","checkACK","res","name","Status","Error","JSON","stringify","MCInstallProxyService","BaseServicePlist","constructor","socketClient","getProfileList","_plistService","sendPlistAndReceive","RequestType","installProfile","path","payload","fs","readFile","removeProfile","ident","profiles","meta","ProfileMetadata","data","plist","createBinaryPlist","PayloadUUID","PayloadVersion","_default","default"],"sources":["../../../lib/mcinstall/index.js"],"sourcesContent":["import {BaseServicePlist} from '../base-service';\nimport {fs, plist} from '@appium/support';\n\n\nconst MC_INSTALL_SERVICE_NAME = 'com.apple.mobile.MCInstall';\nconst ACKNOWLEDGED = 'Acknowledged';\n\nfunction checkACK (res, name) {\n if (res.Status !== ACKNOWLEDGED) {\n throw new Error(`${name} error: ${JSON.stringify(res)}`);\n }\n return res;\n}\n\nclass MCInstallProxyService extends BaseServicePlist {\n constructor (socketClient) {\n super(socketClient);\n }\n\n /**\n * @typedef {Object} ProfileList\n * @property {Array} OrderedIdentifiers list of all profile ident\n * @property {Object} ProfileManifest\n * @property {Object} ProfileMetadata\n * @property {String} Status\n */\n\n /**\n * Get all profiles of iOS devices\n * @returns {ProfileList}\n * e.g.\n * {\n * OrderedIdentifiers: [ '2fac1c2b3d684843189b2981c718b0132854a847a' ],\n * ProfileManifest: {\n * '2fac1c2b3d684843189b2981c718b0132854a847a': {\n * Description: 'Charles Proxy CA (7 Dec 2020, MacBook-Pro.local)',\n * IsActive: true\n * }\n * },\n * ProfileMetadata: {\n * '2fac1c2b3d684843189b2981c718b0132854a847a': {\n * PayloadDisplayName: 'Charles Proxy CA (7 Dec 2020, MacBook-Pro.local)',\n * PayloadRemovalDisallowed: false,\n * PayloadUUID: 'B30005CC-BC73-4E42-8545-8DA6C44A8A71',\n * PayloadVersion: 1\n * }\n * },\n * Status: 'Acknowledged'\n * }\n */\n async getProfileList () {\n const res = await this._plistService.sendPlistAndReceive({RequestType: 'GetProfileList'});\n return checkACK(res, 'getProfileList');\n }\n\n /**\n * Install profile to iOS device\n * @param {String} path must be a certificate file .PEM .CER and more formats\n * e.g: /Downloads/charles-certificate.pem\n * @returns {Object} e.g. {Status: 'Acknowledged'}\n */\n async installProfile (path) {\n const payload = await fs.readFile(path);\n const res = await this._plistService.sendPlistAndReceive({'RequestType': 'InstallProfile', 'Payload': payload});\n return checkACK(res, 'installProfile');\n }\n\n /**\n * Remove profile from iOS device\n * @param {String} ident Query identifier list through getProfileList method\n * @returns {Object} e.g. {Status: 'Acknowledged'}\n */\n async removeProfile (ident) {\n const profiles = await this.getProfileList();\n const meta = profiles.ProfileMetadata[ident];\n if (!meta) {\n throw new Error(`not find installed profile ident:${ident}`);\n }\n const data = plist.createBinaryPlist({'PayloadType': 'Configuration',\n 'PayloadIdentifier': ident,\n 'PayloadUUID': meta.PayloadUUID,\n 'PayloadVersion': meta.PayloadVersion});\n const res = await this._plistService.sendPlistAndReceive({'RequestType': 'RemoveProfile', 'ProfileIdentifier': data});\n return checkACK(res, 'removeProfile');\n }\n}\n\nexport { MCInstallProxyService, MC_INSTALL_SERVICE_NAME };\nexport default MCInstallProxyService;\n"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,uBAAuB,GAAG,4BAA4B;AAACC,OAAA,CAAAD,uBAAA,GAAAA,uBAAA;AAC7D,MAAME,YAAY,GAAG,cAAc;AAEnC,SAASC,QAAQA,CAAEC,GAAG,EAAEC,IAAI,EAAE;EAC5B,IAAID,GAAG,CAACE,MAAM,KAAKJ,YAAY,EAAE;IAC/B,MAAM,IAAIK,KAAK,CAAE,GAAEF,IAAK,WAAUG,IAAI,CAACC,SAAS,CAACL,GAAG,CAAE,EAAC,CAAC;EAC1D;EACA,OAAOA,GAAG;AACZ;AAEA,MAAMM,qBAAqB,SAASC,6BAAgB,CAAC;EACnDC,WAAWA,CAAEC,YAAY,EAAE;IACzB,KAAK,CAACA,YAAY,CAAC;EACrB;EAiCA,MAAMC,cAAcA,CAAA,EAAI;IACtB,MAAMV,GAAG,GAAG,MAAM,IAAI,CAACW,aAAa,CAACC,mBAAmB,CAAC;MAACC,WAAW,EAAE;IAAgB,CAAC,CAAC;IACzF,OAAOd,QAAQ,CAACC,GAAG,EAAE,gBAAgB,CAAC;EACxC;EAQA,MAAMc,cAAcA,CAAEC,IAAI,EAAE;IAC1B,MAAMC,OAAO,GAAG,MAAMC,WAAE,CAACC,QAAQ,CAACH,IAAI,CAAC;IACvC,MAAMf,GAAG,GAAG,MAAM,IAAI,CAACW,aAAa,CAACC,mBAAmB,CAAC;MAAC,aAAa,EAAE,gBAAgB;MAAE,SAAS,EAAEI;IAAO,CAAC,CAAC;IAC/G,OAAOjB,QAAQ,CAACC,GAAG,EAAE,gBAAgB,CAAC;EACxC;EAOA,MAAMmB,aAAaA,CAAEC,KAAK,EAAE;IAC1B,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACX,cAAc,CAAC,CAAC;IAC5C,MAAMY,IAAI,GAAGD,QAAQ,CAACE,eAAe,CAACH,KAAK,CAAC;IAC5C,IAAI,CAACE,IAAI,EAAE;MACT,MAAM,IAAInB,KAAK,CAAE,oCAAmCiB,KAAM,EAAC,CAAC;IAC9D;IACA,MAAMI,IAAI,GAAGC,cAAK,CAACC,iBAAiB,CAAC;MAAC,aAAa,EAAE,eAAe;MAC9B,mBAAmB,EAAEN,KAAK;MAC1B,aAAa,EAAEE,IAAI,CAACK,WAAW;MAC/B,gBAAgB,EAAEL,IAAI,CAACM;IAAc,CAAC,CAAC;IAC7E,MAAM5B,GAAG,GAAG,MAAM,IAAI,CAACW,aAAa,CAACC,mBAAmB,CAAC;MAAC,aAAa,EAAE,eAAe;MAAE,mBAAmB,EAAEY;IAAI,CAAC,CAAC;IACrH,OAAOzB,QAAQ,CAACC,GAAG,EAAE,eAAe,CAAC;EACvC;AACF;AAACH,OAAA,CAAAS,qBAAA,GAAAA,qBAAA;AAAA,IAAAuB,QAAA,GAGcvB,qBAAqB;AAAAT,OAAA,CAAAiC,OAAA,GAAAD,QAAA"}
|
|
@@ -94,4 +94,4 @@ class NotificationProxyService extends _baseService.BaseServiceSocket {
|
|
|
94
94
|
exports.NotificationProxyService = NotificationProxyService;
|
|
95
95
|
var _default = NotificationProxyService;
|
|
96
96
|
exports.default = _default;
|
|
97
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGxpc3RTZXJ2aWNlRW5jb2RlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BsaXN0U2VydmljZURlY29kZXIiLCJfbGVuZ3RoQmFzZWRTcGxpdHRlciIsIl9jb25zdGFudHMiLCJfbG9kYXNoIiwiX2Jhc2VTZXJ2aWNlIiwiTk9USUZJQ0FUSU9OX1BST1hZX1NFUlZJQ0VfTkFNRSIsImV4cG9ydHMiLCJNQVhfRlJBTUVfU0laRSIsIktCIiwiUkVMQVlfTk9USUZJQ0FUSU9OIiwiUFJPWFlfREVBVEgiLCJOb3RpZmljYXRpb25Qcm94eVNlcnZpY2UiLCJCYXNlU2VydmljZVNvY2tldCIsImNvbnN0cnVjdG9yIiwic29ja2V0Q2xpZW50IiwiX2RlY29kZXIiLCJQbGlzdFNlcnZpY2VEZWNvZGVyIiwiX3NwbGl0dGVyIiwiTGVuZ3RoQmFzZWRTcGxpdHRlciIsInJlYWRhYmxlU3RyZWFtIiwibGl0dGxlRW5kaWFuIiwibWF4RnJhbWVMZW5ndGgiLCJsZW5ndGhGaWVsZE9mZnNldCIsImxlbmd0aEZpZWxkTGVuZ3RoIiwibGVuZ3RoQWRqdXN0bWVudCIsIl9zb2NrZXRDbGllbnQiLCJwaXBlIiwiX2VuY29kZXIiLCJQbGlzdFNlcnZpY2VFbmNvZGVyIiwiX2Fzc2lnbkNsaWVudEZhaWx1cmVIYW5kbGVycyIsIl9saXN0ZW5lcnMiLCJvbiIsIl9oYW5kbGVEYXRhIiwiYmluZCIsImRhdGEiLCJDb21tYW5kIiwibGlzdGVuZXIiLCJOYW1lIiwiXyIsImlzRnVuY3Rpb24iLCJub3RpZmljYXRpb24iLCJwcm94eURlYXRoIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwib2JzZXJ2ZU5vdGlmaWNhdGlvbiIsIndyaXRlIiwicG9zdE5vdGlmaWNhdGlvbiIsInNodXRkb3duIiwiY2xvc2UiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvbm90aWZpY2F0aW9uLXByb3h5L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQbGlzdFNlcnZpY2VFbmNvZGVyIGZyb20gJy4uL3BsaXN0LXNlcnZpY2UvdHJhbnNmb3JtZXIvcGxpc3Qtc2VydmljZS1lbmNvZGVyJztcbmltcG9ydCBQbGlzdFNlcnZpY2VEZWNvZGVyIGZyb20gJy4uL3BsaXN0LXNlcnZpY2UvdHJhbnNmb3JtZXIvcGxpc3Qtc2VydmljZS1kZWNvZGVyJztcbmltcG9ydCBMZW5ndGhCYXNlZFNwbGl0dGVyIGZyb20gJy4uL3V0aWwvdHJhbnNmb3JtZXIvbGVuZ3RoLWJhc2VkLXNwbGl0dGVyJztcbmltcG9ydCB7IEtCIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCYXNlU2VydmljZVNvY2tldCB9IGZyb20gJy4uL2Jhc2Utc2VydmljZSc7XG5cblxuY29uc3QgTk9USUZJQ0FUSU9OX1BST1hZX1NFUlZJQ0VfTkFNRSA9ICdjb20uYXBwbGUubW9iaWxlLm5vdGlmaWNhdGlvbl9wcm94eSc7XG5jb25zdCBNQVhfRlJBTUVfU0laRSA9IDE2ICogS0I7XG5cbmNvbnN0IFJFTEFZX05PVElGSUNBVElPTiA9ICdSZWxheU5vdGlmaWNhdGlvbic7XG5jb25zdCBQUk9YWV9ERUFUSCA9ICdQcm94eURlYXRoJztcblxuY2xhc3MgTm90aWZpY2F0aW9uUHJveHlTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2VTb2NrZXQge1xuICBjb25zdHJ1Y3RvciAoc29ja2V0Q2xpZW50KSB7XG4gICAgc3VwZXIoc29ja2V0Q2xpZW50KTtcblxuICAgIHRoaXMuX2RlY29kZXIgPSBuZXcgUGxpc3RTZXJ2aWNlRGVjb2RlcigpO1xuICAgIHRoaXMuX3NwbGl0dGVyID0gbmV3IExlbmd0aEJhc2VkU3BsaXR0ZXIoe1xuICAgICAgcmVhZGFibGVTdHJlYW06IHNvY2tldENsaWVudCxcbiAgICAgIGxpdHRsZUVuZGlhbjogZmFsc2UsXG4gICAgICBtYXhGcmFtZUxlbmd0aDogTUFYX0ZSQU1FX1NJWkUsXG4gICAgICBsZW5ndGhGaWVsZE9mZnNldDogMCxcbiAgICAgIGxlbmd0aEZpZWxkTGVuZ3RoOiA0LFxuICAgICAgbGVuZ3RoQWRqdXN0bWVudDogNCxcbiAgICB9KTtcbiAgICB0aGlzLl9zb2NrZXRDbGllbnQucGlwZSh0aGlzLl9zcGxpdHRlcikucGlwZSh0aGlzLl9kZWNvZGVyKTtcblxuICAgIHRoaXMuX2VuY29kZXIgPSBuZXcgUGxpc3RTZXJ2aWNlRW5jb2RlcigpO1xuICAgIHRoaXMuX2VuY29kZXIucGlwZSh0aGlzLl9zb2NrZXRDbGllbnQpO1xuICAgIHRoaXMuX2Fzc2lnbkNsaWVudEZhaWx1cmVIYW5kbGVycyh0aGlzLl9lbmNvZGVyKTtcblxuICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICAgIHRoaXMuX2RlY29kZXIub24oJ2RhdGEnLCB0aGlzLl9oYW5kbGVEYXRhLmJpbmQodGhpcykpO1xuICB9XG5cbiAgX2hhbmRsZURhdGEgKGRhdGEpIHtcbiAgICBzd2l0Y2ggKGRhdGEuQ29tbWFuZCkge1xuICAgICAgY2FzZSBSRUxBWV9OT1RJRklDQVRJT046IHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLl9saXN0ZW5lcnNbZGF0YS5OYW1lXTtcbiAgICAgICAgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGxpc3RlbmVyLm5vdGlmaWNhdGlvbikpIHtcbiAgICAgICAgICBsaXN0ZW5lci5ub3RpZmljYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgUFJPWFlfREVBVEg6IHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLl9saXN0ZW5lcnNbZGF0YS5OYW1lXTtcbiAgICAgICAgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGxpc3RlbmVyLnByb3h5RGVhdGgpKSB7XG4gICAgICAgICAgbGlzdGVuZXIucHJveHlEZWF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbZGF0YS5OYW1lXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YSB0eXBlICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhcGkgdG8gbGlzdGVuIHRvIG5vdGlmaWNhdGlvbnMgdGhhdCB0aGUgcGhvbmUgYnJvYWRjYXN0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbm90aWZpY2F0aW9uIFRoZSBuYW1lIG9mIHRoZSBub3RpZmljYXRpb24gd2hpY2ggaXMgZGVzaXJlZCB0byBiZSBvYnNlcnZlZFxuICAgKiBAcGFyYW0ge09iamVjdH0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIG9iamVjdCB3aGljaCB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGVyZSBpcyBhIG5vdGlmaWNhdGlvbiBvciBpZiB0aGUgcHJveHkgaXMgZGVhZFxuICAgKi9cbiAgb2JzZXJ2ZU5vdGlmaWNhdGlvbiAobm90aWZpY2F0aW9uLCBsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLl9saXN0ZW5lcnNbbm90aWZpY2F0aW9uXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3RpZmljYXRpb24gbGlzdGVuZXIgZm9yICR7bm90aWZpY2F0aW9ufSBhbHJlYWR5IGV4aXN0cy4gQW5vdGhlciBvbmUgY2FuJ3QgYmUgYWRkZWRgKTtcbiAgICB9XG4gICAgdGhpcy5fbGlzdGVuZXJzW25vdGlmaWNhdGlvbl0gPSBsaXN0ZW5lcjtcbiAgICB0aGlzLl9lbmNvZGVyLndyaXRlKHtcbiAgICAgIENvbW1hbmQ6ICdPYnNlcnZlTm90aWZpY2F0aW9uJyxcbiAgICAgIE5hbWU6IG5vdGlmaWNhdGlvblxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhcGkgdG8gYnJvYWRjYXN0IG5vdGlmaWNhdGlvbnMgdG8gdGhlIHBob25lLiBUaGlzIGFsbG93cyB0aGUgY2xpZW50IHRvIHRhbGsgdG8gdGhlIGRhZW1vbnMgb3IgYXBwcyBvbiB0aGUgcGhvbmVcbiAgICogQHBhcmFtIHsqfSBub3RpZmljYXRpb24gVGhlIG5hbWUgb2YgdGhlIG5vdGlmaWNhdGlvbiB3aGljaCBpcyBkZXNpcmVkIG5vdGlmaWVkXG4gICAqL1xuICBwb3N0Tm90aWZpY2F0aW9uIChub3RpZmljYXRpb24pIHtcbiAgICB0aGlzLl9lbmNvZGVyLndyaXRlKHtcbiAgICAgIENvbW1hbmQ6ICdQb3N0Tm90aWZpY2F0aW9uJyxcbiAgICAgIE5hbWU6IG5vdGlmaWNhdGlvblxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhcGkgdG8gc2h1dGRvd24gdGhlIHByb3h5LiBDb25zZXF1ZW50bHksIGFsbCB0aGUgbm90aWZpY2F0aW9ucyB0aGF0IGFyZSBvYnNlcnZpbmcgd2lsbCByZWNpZXZlIHRoZSBwcm94eURlYXRoIHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7Kn0gbm90aWZpY2F0aW9uIFRoZSBuYW1lIG9mIHRoZSBub3RpZmljYXRpb24gd2hpY2ggaXMgZGVzaXJlZCBub3RpZmllZFxuICAgKi9cbiAgc2h1dGRvd24gKCkge1xuICAgIHRoaXMuX2VuY29kZXIud3JpdGUoe1xuICAgICAgQ29tbWFuZDogJ1NodXRkb3duJyxcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aGlzLnNodXRkb3duKCk7XG4gICAgc3VwZXIuY2xvc2UoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOb3RpZmljYXRpb25Qcm94eVNlcnZpY2U7XG5leHBvcnQgeyBOb3RpZmljYXRpb25Qcm94eVNlcnZpY2UsIE5PVElGSUNBVElPTl9QUk9YWV9TRVJWSUNFX05BTUUgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxvQkFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_plistServiceEncoder","_interopRequireDefault","require","_plistServiceDecoder","_lengthBasedSplitter","_constants","_lodash","_baseService","NOTIFICATION_PROXY_SERVICE_NAME","exports","MAX_FRAME_SIZE","KB","RELAY_NOTIFICATION","PROXY_DEATH","NotificationProxyService","BaseServiceSocket","constructor","socketClient","_decoder","PlistServiceDecoder","_splitter","LengthBasedSplitter","readableStream","littleEndian","maxFrameLength","lengthFieldOffset","lengthFieldLength","lengthAdjustment","_socketClient","pipe","_encoder","PlistServiceEncoder","_assignClientFailureHandlers","_listeners","on","_handleData","bind","data","Command","listener","Name","_","isFunction","notification","proxyDeath","Error","JSON","stringify","observeNotification","write","postNotification","shutdown","close","_default","default"],"sources":["../../../lib/notification-proxy/index.js"],"sourcesContent":["import PlistServiceEncoder from '../plist-service/transformer/plist-service-encoder';\nimport PlistServiceDecoder from '../plist-service/transformer/plist-service-decoder';\nimport LengthBasedSplitter from '../util/transformer/length-based-splitter';\nimport { KB } from '../constants';\nimport _ from 'lodash';\nimport { BaseServiceSocket } from '../base-service';\n\n\nconst NOTIFICATION_PROXY_SERVICE_NAME = 'com.apple.mobile.notification_proxy';\nconst MAX_FRAME_SIZE = 16 * KB;\n\nconst RELAY_NOTIFICATION = 'RelayNotification';\nconst PROXY_DEATH = 'ProxyDeath';\n\nclass NotificationProxyService extends BaseServiceSocket {\n constructor (socketClient) {\n super(socketClient);\n\n this._decoder = new PlistServiceDecoder();\n this._splitter = new LengthBasedSplitter({\n readableStream: socketClient,\n littleEndian: false,\n maxFrameLength: MAX_FRAME_SIZE,\n lengthFieldOffset: 0,\n lengthFieldLength: 4,\n lengthAdjustment: 4,\n });\n this._socketClient.pipe(this._splitter).pipe(this._decoder);\n\n this._encoder = new PlistServiceEncoder();\n this._encoder.pipe(this._socketClient);\n this._assignClientFailureHandlers(this._encoder);\n\n this._listeners = {};\n this._decoder.on('data', this._handleData.bind(this));\n }\n\n _handleData (data) {\n switch (data.Command) {\n case RELAY_NOTIFICATION: {\n const listener = this._listeners[data.Name];\n if (!listener) {\n return;\n }\n if (_.isFunction(listener.notification)) {\n listener.notification();\n }\n break;\n }\n case PROXY_DEATH: {\n const listener = this._listeners[data.Name];\n if (!listener) {\n return;\n }\n if (_.isFunction(listener.proxyDeath)) {\n listener.proxyDeath();\n }\n delete this._listeners[data.Name];\n break;\n }\n default:\n throw new Error(`Unknown data type ${JSON.stringify(data)}`);\n }\n }\n\n /**\n * The api to listen to notifications that the phone broadcasts\n * @param {string} notification The name of the notification which is desired to be observed\n * @param {Object} listener The listener object which will be invoked when there is a notification or if the proxy is dead\n */\n observeNotification (notification, listener) {\n if (this._listeners[notification]) {\n throw new Error(`Notification listener for ${notification} already exists. Another one can't be added`);\n }\n this._listeners[notification] = listener;\n this._encoder.write({\n Command: 'ObserveNotification',\n Name: notification\n });\n }\n\n /**\n * The api to broadcast notifications to the phone. This allows the client to talk to the daemons or apps on the phone\n * @param {*} notification The name of the notification which is desired notified\n */\n postNotification (notification) {\n this._encoder.write({\n Command: 'PostNotification',\n Name: notification\n });\n }\n\n /**\n * The api to shutdown the proxy. Consequently, all the notifications that are observing will recieve the proxyDeath response\n * @param {*} notification The name of the notification which is desired notified\n */\n shutdown () {\n this._encoder.write({\n Command: 'Shutdown',\n });\n }\n\n close () {\n this.shutdown();\n super.close();\n }\n}\n\nexport default NotificationProxyService;\nexport { NotificationProxyService, NOTIFICATION_PROXY_SERVICE_NAME };\n"],"mappings":";;;;;;;;AAAA,IAAAA,oBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,oBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,oBAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AAGA,MAAMM,+BAA+B,GAAG,qCAAqC;AAACC,OAAA,CAAAD,+BAAA,GAAAA,+BAAA;AAC9E,MAAME,cAAc,GAAG,EAAE,GAAGC,aAAE;AAE9B,MAAMC,kBAAkB,GAAG,mBAAmB;AAC9C,MAAMC,WAAW,GAAG,YAAY;AAEhC,MAAMC,wBAAwB,SAASC,8BAAiB,CAAC;EACvDC,WAAWA,CAAEC,YAAY,EAAE;IACzB,KAAK,CAACA,YAAY,CAAC;IAEnB,IAAI,CAACC,QAAQ,GAAG,IAAIC,4BAAmB,
|
|
1
|
+
{"version":3,"file":"index.js","names":["_plistServiceEncoder","_interopRequireDefault","require","_plistServiceDecoder","_lengthBasedSplitter","_constants","_lodash","_baseService","NOTIFICATION_PROXY_SERVICE_NAME","exports","MAX_FRAME_SIZE","KB","RELAY_NOTIFICATION","PROXY_DEATH","NotificationProxyService","BaseServiceSocket","constructor","socketClient","_decoder","PlistServiceDecoder","_splitter","LengthBasedSplitter","readableStream","littleEndian","maxFrameLength","lengthFieldOffset","lengthFieldLength","lengthAdjustment","_socketClient","pipe","_encoder","PlistServiceEncoder","_assignClientFailureHandlers","_listeners","on","_handleData","bind","data","Command","listener","Name","_","isFunction","notification","proxyDeath","Error","JSON","stringify","observeNotification","write","postNotification","shutdown","close","_default","default"],"sources":["../../../lib/notification-proxy/index.js"],"sourcesContent":["import PlistServiceEncoder from '../plist-service/transformer/plist-service-encoder';\nimport PlistServiceDecoder from '../plist-service/transformer/plist-service-decoder';\nimport LengthBasedSplitter from '../util/transformer/length-based-splitter';\nimport { KB } from '../constants';\nimport _ from 'lodash';\nimport { BaseServiceSocket } from '../base-service';\n\n\nconst NOTIFICATION_PROXY_SERVICE_NAME = 'com.apple.mobile.notification_proxy';\nconst MAX_FRAME_SIZE = 16 * KB;\n\nconst RELAY_NOTIFICATION = 'RelayNotification';\nconst PROXY_DEATH = 'ProxyDeath';\n\nclass NotificationProxyService extends BaseServiceSocket {\n constructor (socketClient) {\n super(socketClient);\n\n this._decoder = new PlistServiceDecoder();\n this._splitter = new LengthBasedSplitter({\n readableStream: socketClient,\n littleEndian: false,\n maxFrameLength: MAX_FRAME_SIZE,\n lengthFieldOffset: 0,\n lengthFieldLength: 4,\n lengthAdjustment: 4,\n });\n this._socketClient.pipe(this._splitter).pipe(this._decoder);\n\n this._encoder = new PlistServiceEncoder();\n this._encoder.pipe(this._socketClient);\n this._assignClientFailureHandlers(this._encoder);\n\n this._listeners = {};\n this._decoder.on('data', this._handleData.bind(this));\n }\n\n _handleData (data) {\n switch (data.Command) {\n case RELAY_NOTIFICATION: {\n const listener = this._listeners[data.Name];\n if (!listener) {\n return;\n }\n if (_.isFunction(listener.notification)) {\n listener.notification();\n }\n break;\n }\n case PROXY_DEATH: {\n const listener = this._listeners[data.Name];\n if (!listener) {\n return;\n }\n if (_.isFunction(listener.proxyDeath)) {\n listener.proxyDeath();\n }\n delete this._listeners[data.Name];\n break;\n }\n default:\n throw new Error(`Unknown data type ${JSON.stringify(data)}`);\n }\n }\n\n /**\n * The api to listen to notifications that the phone broadcasts\n * @param {string} notification The name of the notification which is desired to be observed\n * @param {Object} listener The listener object which will be invoked when there is a notification or if the proxy is dead\n */\n observeNotification (notification, listener) {\n if (this._listeners[notification]) {\n throw new Error(`Notification listener for ${notification} already exists. Another one can't be added`);\n }\n this._listeners[notification] = listener;\n this._encoder.write({\n Command: 'ObserveNotification',\n Name: notification\n });\n }\n\n /**\n * The api to broadcast notifications to the phone. This allows the client to talk to the daemons or apps on the phone\n * @param {*} notification The name of the notification which is desired notified\n */\n postNotification (notification) {\n this._encoder.write({\n Command: 'PostNotification',\n Name: notification\n });\n }\n\n /**\n * The api to shutdown the proxy. Consequently, all the notifications that are observing will recieve the proxyDeath response\n * @param {*} notification The name of the notification which is desired notified\n */\n shutdown () {\n this._encoder.write({\n Command: 'Shutdown',\n });\n }\n\n close () {\n this.shutdown();\n super.close();\n }\n}\n\nexport default NotificationProxyService;\nexport { NotificationProxyService, NOTIFICATION_PROXY_SERVICE_NAME };\n"],"mappings":"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"}
|