@appium/base-driver 8.2.0 → 8.2.4
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/build/lib/basedriver/capabilities.js +3 -1
- package/build/lib/basedriver/commands/index.js +2 -4
- package/build/lib/basedriver/driver.js +5 -5
- package/build/lib/basedriver/helpers.js +137 -81
- package/build/lib/express/express-logging.js +2 -2
- package/build/lib/index.js +126 -0
- package/build/lib/jsonwp-proxy/protocol-converter.js +2 -5
- package/build/lib/jsonwp-proxy/proxy.js +2 -5
- package/build/lib/protocol/errors.js +4 -2
- package/build/lib/protocol/helpers.js +3 -20
- package/build/lib/protocol/protocol.js +9 -19
- package/build/lib/protocol/routes.js +1 -10
- package/build/test/basedriver/capability-specs.js +10 -10
- package/build/test/basedriver/commands/event-specs.js +10 -10
- package/build/test/basedriver/driver-e2e-specs.js +3 -3
- package/build/test/basedriver/driver-e2e-tests.js +6 -223
- package/build/test/basedriver/driver-specs.js +3 -3
- package/build/test/basedriver/driver-tests.js +4 -4
- package/build/test/basedriver/helpers-specs.js +5 -1
- package/build/test/basedriver/timeout-specs.js +7 -7
- package/build/test/basedriver/websockets-e2e-specs.js +5 -5
- package/build/test/express/server-e2e-specs.js +156 -0
- package/build/test/express/server-specs.js +151 -0
- package/build/test/express/static-specs.js +23 -0
- package/build/test/helpers.js +57 -0
- package/build/test/jsonwp-proxy/mock-request.js +93 -0
- package/build/test/jsonwp-proxy/protocol-converter-specs.js +173 -0
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +61 -0
- package/build/test/jsonwp-proxy/proxy-specs.js +294 -0
- package/build/test/jsonwp-proxy/url-specs.js +167 -0
- package/build/test/jsonwp-status/status-specs.js +36 -0
- package/build/test/protocol/errors-specs.js +388 -0
- package/build/test/protocol/fake-driver.js +168 -0
- package/build/test/protocol/helpers.js +27 -0
- package/build/test/protocol/protocol-e2e-specs.js +1182 -0
- package/build/test/protocol/routes-specs.js +82 -0
- package/build/test/protocol/validator-specs.js +151 -0
- package/index.d.ts +0 -1
- package/index.js +1 -62
- package/lib/basedriver/capabilities.js +3 -0
- package/lib/basedriver/commands/index.js +0 -2
- package/lib/basedriver/driver.js +5 -5
- package/lib/basedriver/helpers.js +197 -81
- package/lib/express/express-logging.js +1 -1
- package/lib/index.js +64 -0
- package/lib/jsonwp-proxy/protocol-converter.js +1 -5
- package/lib/jsonwp-proxy/proxy.js +1 -3
- package/lib/protocol/errors.js +1 -1
- package/lib/protocol/helpers.js +5 -25
- package/lib/protocol/protocol.js +9 -25
- package/lib/protocol/routes.js +0 -3
- package/package.json +7 -15
- package/test/basedriver/capability-specs.js +1 -1
- package/test/basedriver/commands/event-specs.js +1 -1
- package/test/basedriver/driver-e2e-specs.js +1 -1
- package/test/basedriver/driver-e2e-tests.js +1 -179
- package/test/basedriver/driver-specs.js +1 -1
- package/test/basedriver/driver-tests.js +1 -1
- package/test/basedriver/helpers-specs.js +4 -0
- package/test/basedriver/timeout-specs.js +1 -1
- package/test/basedriver/websockets-e2e-specs.js +1 -1
- package/build/index.js +0 -124
- package/build/lib/basedriver/commands/execute-child.js +0 -137
- package/build/lib/basedriver/commands/execute.js +0 -119
- package/build/test/basedriver/fixtures/custom-element-finder-bad.js +0 -12
- package/build/test/basedriver/fixtures/custom-element-finder.js +0 -36
- package/lib/basedriver/commands/execute-child.js +0 -132
- package/lib/basedriver/commands/execute.js +0 -126
|
@@ -754,7 +754,9 @@ class ProxyRequestError extends _es6Error.default {
|
|
|
754
754
|
}
|
|
755
755
|
|
|
756
756
|
getActualError() {
|
|
757
|
-
|
|
757
|
+
var _this$jsonwp, _this$jsonwp2;
|
|
758
|
+
|
|
759
|
+
if (_support.util.hasValue((_this$jsonwp = this.jsonwp) === null || _this$jsonwp === void 0 ? void 0 : _this$jsonwp.status) && _support.util.hasValue((_this$jsonwp2 = this.jsonwp) === null || _this$jsonwp2 === void 0 ? void 0 : _this$jsonwp2.value)) {
|
|
758
760
|
return errorFromMJSONWPStatusCode(this.jsonwp.status, this.jsonwp.value);
|
|
759
761
|
} else if (_support.util.hasValue(this.w3c) && _lodash.default.isNumber(this.w3cStatus) && this.w3cStatus >= 300) {
|
|
760
762
|
return errorFromW3CJsonCode(this.w3c.error, this.w3c.message || this.message, this.w3c.stacktrace);
|
|
@@ -932,4 +934,4 @@ function getResponseForJsonwpError(err) {
|
|
|
932
934
|
}require('source-map-support').install();
|
|
933
935
|
|
|
934
936
|
|
|
935
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm90b2NvbC9lcnJvcnMuanMiXSwibmFtZXMiOlsibWpzb253cExvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInczY0xvZyIsIlczQ19VTktOT1dOX0VSUk9SIiwiUHJvdG9jb2xFcnJvciIsIkVTNkVycm9yIiwiY29uc3RydWN0b3IiLCJtc2ciLCJqc29ud3BDb2RlIiwidzNjU3RhdHVzIiwiZXJyb3IiLCJIVFRQU3RhdHVzQ29kZXMiLCJCQURfUkVRVUVTVCIsIl9zdGFja3RyYWNlIiwic3RhY2t0cmFjZSIsInN0YWNrIiwidmFsdWUiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImNvZGUiLCJOT1RfRk9VTkQiLCJlcnIiLCJOb1N1Y2hFbGVtZW50RXJyb3IiLCJOb1N1Y2hGcmFtZUVycm9yIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRWxlbWVudE5vdFZpc2libGVFcnJvciIsIkludmFsaWRFbGVtZW50U3RhdGVFcnJvciIsIlVua25vd25FcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImVycm9yT3JNZXNzYWdlIiwib3JpZ01lc3NhZ2UiLCJfIiwiaXNTdHJpbmciLCJtZXNzYWdlIiwiVW5rbm93bk1ldGhvZEVycm9yIiwiTUVUSE9EX05PVF9BTExPV0VEIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsIkVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciIsIkVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IiLCJFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IiLCJJbnNlY3VyZUNlcnRpZmljYXRlRXJyb3IiLCJKYXZhU2NyaXB0RXJyb3IiLCJYUGF0aExvb2t1cEVycm9yIiwiVGltZW91dEVycm9yIiwiUkVRVUVTVF9USU1FT1VUIiwiTm9TdWNoV2luZG93RXJyb3IiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkludmFsaWRDb29raWVEb21haW5FcnJvciIsIk5vU3VjaENvb2tpZUVycm9yIiwiVW5hYmxlVG9TZXRDb29raWVFcnJvciIsIlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciIsIk5vQWxlcnRPcGVuRXJyb3IiLCJOb1N1Y2hBbGVydEVycm9yIiwiU2NyaXB0VGltZW91dEVycm9yIiwiSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIiwiSW52YWxpZENvb3JkaW5hdGVzRXJyb3IiLCJJTUVOb3RBdmFpbGFibGVFcnJvciIsIklNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciIsIkludmFsaWRTZWxlY3RvckVycm9yIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsImRldGFpbHMiLCJNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciIsIk5vU3VjaENvbnRleHRFcnJvciIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJOb3RZZXRJbXBsZW1lbnRlZEVycm9yIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIlVuYWJsZVRvQ2FwdHVyZVNjcmVlbiIsIkJhZFBhcmFtZXRlcnNFcnJvciIsInJlcXVpcmVkUGFyYW1zIiwiYWN0dWFsUGFyYW1zIiwiZXJyTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJQcm94eVJlcXVlc3RFcnJvciIsInJlc3BvbnNlRXJyb3IiLCJodHRwU3RhdHVzIiwicmVzcG9uc2VFcnJvck9iaiIsInV0aWwiLCJzYWZlSnNvblBhcnNlIiwiaXNQbGFpbk9iamVjdCIsImlzRW1wdHkiLCJoYXMiLCJ3M2MiLCJqc29ud3AiLCJnZXRBY3R1YWxFcnJvciIsImhhc1ZhbHVlIiwic3RhdHVzIiwiZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUiLCJpc051bWJlciIsImVycm9yRnJvbVczQ0pzb25Db2RlIiwiZXJyb3JzIiwianNvbndwRXJyb3JDb2RlTWFwIiwiRXJyb3JDbGFzcyIsInZhbHVlcyIsInczY0Vycm9yQ29kZU1hcCIsImlzVW5rbm93bkVycm9yIiwibmFtZSIsImZpbmQiLCJlcXVhbE5hbWVzIiwiaXNFcnJvclR5cGUiLCJ0eXBlIiwiZGVidWciLCJ0b0xvd2VyQ2FzZSIsInJlc3VsdEVycm9yIiwiZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciIsInczY0Vycm9yU3RyaW5nIiwiaHR0cFJlc0JvZHkiLCJnZXRSZXNwb25zZUZvckpzb253cEVycm9yIiwiTk9UX0lNUExFTUVOVEVEIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLFNBQWpCLENBQW5COztBQUNBLE1BQU1DLE1BQU0sR0FBR0YsZ0JBQU9DLFNBQVAsQ0FBaUIsS0FBakIsQ0FBZjs7QUFFQSxNQUFNRSxpQkFBaUIsR0FBRyxlQUExQjs7QUFHQSxNQUFNQyxhQUFOLFNBQTRCQyxpQkFBNUIsQ0FBcUM7QUFDbkNDLEVBQUFBLFdBQVcsQ0FBRUMsR0FBRixFQUFPQyxVQUFQLEVBQW1CQyxTQUFuQixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDOUMsVUFBTUgsR0FBTjtBQUNBLFNBQUtDLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0UsS0FBTCxHQUFhQSxLQUFLLElBQUlQLGlCQUF0Qjs7QUFDQSxRQUFJLEtBQUtLLFVBQUwsS0FBb0IsSUFBeEIsRUFBOEI7QUFDNUIsV0FBS0EsVUFBTCxHQUFrQixFQUFsQjtBQUNEOztBQUNELFNBQUtDLFNBQUwsR0FBaUJBLFNBQVMsSUFBSUUsNkJBQWdCQyxXQUE5QztBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDRDs7QUFFYSxNQUFWQyxVQUFVLEdBQUk7QUFDaEIsV0FBTyxLQUFLRCxXQUFMLElBQW9CLEtBQUtFLEtBQWhDO0FBQ0Q7O0FBRWEsTUFBVkQsVUFBVSxDQUFFRSxLQUFGLEVBQVM7QUFDckIsU0FBS0gsV0FBTCxHQUFtQkcsS0FBbkI7QUFDRDs7QUFsQmtDOzs7O0FBeUJyQyxNQUFNQyxpQkFBTixTQUFnQ2IsYUFBaEMsQ0FBOEM7QUFDakMsU0FBSmMsSUFBSSxHQUFJO0FBQ2IsV0FBTyxDQUFQO0FBQ0Q7O0FB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R0FBR2hFLDZCQUFnQmlHLGVBQTdCO0FBQ0QsR0FKTSxNQUlBLElBQUlULFdBQVcsQ0FBQy9FLEdBQUQsRUFBTXNFLE1BQU0sQ0FBQ3pFLGlCQUFiLENBQWYsRUFBZ0Q7QUFFckQwRCxJQUFBQSxVQUFVLEdBQUdoRSw2QkFBZ0JRLFNBQTdCO0FBQ0Q7O0FBR0QsU0FBTyxDQUFDd0QsVUFBRCxFQUFhK0IsV0FBYixDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRVM2RXJyb3IgZnJvbSAnZXM2LWVycm9yJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsLCBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgU3RhdHVzQ29kZXMgYXMgSFRUUFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuXG5jb25zdCBtanNvbndwTG9nID0gbG9nZ2VyLmdldExvZ2dlcignTUpTT05XUCcpO1xuY29uc3QgdzNjTG9nID0gbG9nZ2VyLmdldExvZ2dlcignVzNDJyk7XG5cbmNvbnN0IFczQ19VTktOT1dOX0VSUk9SID0gJ3Vua25vd24gZXJyb3InO1xuXG4vLyBiYXNlIGVycm9yIGNsYXNzIGZvciBhbGwgb2Ygb3VyIGVycm9yc1xuY2xhc3MgUHJvdG9jb2xFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1zZywganNvbndwQ29kZSwgdzNjU3RhdHVzLCBlcnJvcikge1xuICAgIHN1cGVyKG1zZyk7XG4gICAgdGhpcy5qc29ud3BDb2RlID0ganNvbndwQ29kZTtcbiAgICB0aGlzLmVycm9yID0gZXJyb3IgfHwgVzNDX1VOS05PV05fRVJST1I7XG4gICAgaWYgKHRoaXMuanNvbndwQ29kZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5qc29ud3BDb2RlID0gMTM7XG4gICAgfVxuICAgIHRoaXMudzNjU3RhdHVzID0gdzNjU3RhdHVzIHx8IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgICB0aGlzLl9zdGFja3RyYWNlID0gbnVsbDtcbiAgfVxuXG4gIGdldCBzdGFja3RyYWNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2t0cmFjZSB8fCB0aGlzLnN0YWNrO1xuICB9XG5cbiAgc2V0IHN0YWNrdHJhY2UgKHZhbHVlKSB7XG4gICAgdGhpcy5fc3RhY2t0cmFjZSA9IHZhbHVlO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TZWxlbml1bUhRL3NlbGVuaXVtL2Jsb2IvMTc2YjRhOWUzMDgyYWMxOTI2ZjJhNDM2ZWIzNDY3NjBjMzdhNTk5OC9qYXZhL2NsaWVudC9zcmMvb3JnL29wZW5xYS9zZWxlbml1bS9yZW1vdGUvRXJyb3JDb2Rlcy5qYXZhI0wyMTVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TZWxlbml1bUhRL3NlbGVuaXVtL2lzc3Vlcy81NTYyI2lzc3VlY29tbWVudC0zNzAzNzk0NzBcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNkZm4tZXJyb3ItY29kZVxuXG5jbGFzcyBOb1N1Y2hEcml2ZXJFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDY7XG4gIH1cbiAgLy8gVzNDIEVycm9yIGlzIGNhbGxlZCBJbnZhbGlkU2Vzc2lvbklEXG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIHNlc3Npb24gaWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2Vzc2lvbiBpcyBlaXRoZXIgdGVybWluYXRlZCBvciBub3Qgc3RhcnRlZCcsIE5vU3VjaERyaXZlckVycm9yLmNvZGUoKSxcbiAgICAgICAgICBOb1N1Y2hEcml2ZXJFcnJvci53M2NTdGF0dXMoKSwgTm9TdWNoRHJpdmVyRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgTm9TdWNoRWxlbWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBlbGVtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvdWxkIG5vdCBiZSBsb2NhdGVkIG9uIHRoZSBwYWdlIHVzaW5nIHRoZSBnaXZlbiAnICtcbiAgICAgICAgICAnc2VhcmNoIHBhcmFtZXRlcnMuJywgTm9TdWNoRWxlbWVudEVycm9yLmNvZGUoKSwgTm9TdWNoRWxlbWVudEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIE5vU3VjaEVsZW1lbnRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBOb1N1Y2hGcmFtZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gODtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBmcmFtZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHN3aXRjaCB0byBhIGZyYW1lIGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgYmVjYXVzZSAnICtcbiAgICAgICAgICAndGhlIGZyYW1lIGNvdWxkIG5vdCBiZSBmb3VuZC4nLCBOb1N1Y2hGcmFtZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBOb1N1Y2hGcmFtZUVycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hGcmFtZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFVua25vd25Db21tYW5kRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmtub3duIGNvbW1hbmQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kLCBvciBhIHJlcXVlc3Qgd2FzICcgK1xuICAgICAgICAgICdyZWNlaXZlZCB1c2luZyBhbiBIVFRQIG1ldGhvZCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcHBlZCAnICtcbiAgICAgICAgICAncmVzb3VyY2UuJywgVW5rbm93bkNvbW1hbmRFcnJvci5jb2RlKCksIFVua25vd25Db21tYW5kRXJyb3IudzNjU3RhdHVzKCksIFVua25vd25Db21tYW5kRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxMDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc3RhbGUgZWxlbWVudCByZWZlcmVuY2UnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY29tbWFuZCBmYWlsZWQgYmVjYXVzZSB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGlzIG5vICcgK1xuICAgICAgICAgICdsb25nZXIgYXR0YWNoZWQgdG8gdGhlIERPTS4nLCBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvci5jb2RlKCksXG4gICAgICAgICAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IudzNjU3RhdHVzKCksIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxMTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCB2aXNpYmxlJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzICcgK1xuICAgICAgICAgICdub3QgdmlzaWJsZSBvbiB0aGUgcGFnZS4nLCBFbGVtZW50Tm90VmlzaWJsZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBFbGVtZW50Tm90VmlzaWJsZUVycm9yLnczY1N0YXR1cygpLCBFbGVtZW50Tm90VmlzaWJsZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRFbGVtZW50U3RhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDEyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgZWxlbWVudCBzdGF0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZWxlbWVudCBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyAnICtcbiAgICAgICAgICAnaW4gYW4gaW52YWxpZCBzdGF0ZSAoZS5nLiBhdHRlbXB0aW5nIHRvIGNsaWNrIGEgZGlzYWJsZWQgZWxlbWVudCkuJyxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IuY29kZSgpLCBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFVua25vd25FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDEzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuIFczQ19VTktOT1dOX0VSUk9SO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnJvck9yTWVzc2FnZSkge1xuICAgIGNvbnN0IG9yaWdNZXNzYWdlID0gXy5pc1N0cmluZygoZXJyb3JPck1lc3NhZ2UgfHwge30pLm1lc3NhZ2UpXG4gICAgICA/IGVycm9yT3JNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIDogZXJyb3JPck1lc3NhZ2U7XG4gICAgY29uc3QgbWVzc2FnZSA9ICdBbiB1bmtub3duIHNlcnZlci1zaWRlIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvbW1hbmQuJyArXG4gICAgICAob3JpZ01lc3NhZ2UgPyBgIE9yaWdpbmFsIGVycm9yOiAke29yaWdNZXNzYWdlfWAgOiAnJyk7XG4gICAgc3VwZXIobWVzc2FnZSwgVW5rbm93bkVycm9yLmNvZGUoKSwgVW5rbm93bkVycm9yLnczY1N0YXR1cygpLCBVbmtub3duRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgVW5rbm93bk1ldGhvZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNDA1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTUVUSE9EX05PVF9BTExPV0VEO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmtub3duIG1ldGhvZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIHJlcXVlc3RlZCBjb21tYW5kIG1hdGNoZWQgYSBrbm93biBVUkwgYnV0IGRpZCBub3QgbWF0Y2ggYW4gbWV0aG9kIGZvciB0aGF0IFVSTCcsXG4gICAgICAgICAgVW5rbm93bk1ldGhvZEVycm9yLmNvZGUoKSwgVW5rbm93bk1ldGhvZEVycm9yLnczY1N0YXR1cygpLCBVbmtub3duTWV0aG9kRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDQwNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQgb3BlcmF0aW9uJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHNlcnZlci1zaWRlIGVycm9yIG9jY3VycmVkLiBDb21tYW5kIGNhbm5vdCBiZSBzdXBwb3J0ZWQuJyxcbiAgICAgICAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLmNvZGUoKSwgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDE1O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCBzZWxlY3RhYmxlJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBjYW5ub3QgYmUgc2VsZWN0ZWQuJyxcbiAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuY29kZSgpLCBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2NDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBjbGljayBpbnRlcmNlcHRlZCc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgRWxlbWVudCBDbGljayBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCByZWNlaXZpbmcgJyArXG4gICAgICAgICAgJ3RoZSBldmVudHMgaXMgb2JzY3VyaW5nIHRoZSBlbGVtZW50IHRoYXQgd2FzIHJlcXVlc3RlZCBjbGlja2VkJyxcbiAgICAgICAgICBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLmNvZGUoKSwgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYwO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCBpbnRlcmFjdGFibGUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBub3QgcG9pbnRlci0gb3Iga2V5Ym9hcmQgaW50ZXJhY3RhYmxlJyxcbiAgICAgICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IuY29kZSgpLCBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW5zZWN1cmUgY2VydGlmaWNhdGUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ05hdmlnYXRpb24gY2F1c2VkIHRoZSB1c2VyIGFnZW50IHRvIGhpdCBhIGNlcnRpZmljYXRlIHdhcm5pbmcsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIHJlc3VsdCBvZiBhbiBleHBpcmVkIG9yIGludmFsaWQgVExTIGNlcnRpZmljYXRlJyxcbiAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksIG51bGwsIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBKYXZhU2NyaXB0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnamF2YXNjcmlwdCBlcnJvcic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nIHVzZXIgc3VwcGxpZWQgSmF2YVNjcmlwdC4nLFxuICAgICAgICAgIEphdmFTY3JpcHRFcnJvci5jb2RlKCksIEphdmFTY3JpcHRFcnJvci53M2NTdGF0dXMoKSwgSmF2YVNjcmlwdEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFhQYXRoTG9va3VwRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxOTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIHNlbGVjdG9yJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZWFyY2hpbmcgZm9yIGFuIGVsZW1lbnQgYnkgWFBhdGguJyxcbiAgICAgICAgICBYUGF0aExvb2t1cEVycm9yLmNvZGUoKSwgWFBhdGhMb29rdXBFcnJvci53M2NTdGF0dXMoKSwgWFBhdGhMb29rdXBFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyMTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLlJFUVVFU1RfVElNRU9VVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndGltZW91dCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gb3BlcmF0aW9uIGRpZCBub3QgY29tcGxldGUgYmVmb3JlIGl0cyB0aW1lb3V0IGV4cGlyZWQuJyxcbiAgICAgICAgICBUaW1lb3V0RXJyb3IuY29kZSgpLCBUaW1lb3V0RXJyb3IudzNjU3RhdHVzKCksIFRpbWVvdXRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBOb1N1Y2hXaW5kb3dFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDIzO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIHdpbmRvdyc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudCB3aW5kb3cgY291bGQgbm90IGJlIHNhdGlzZmllZCAnICtcbiAgICAgICAgICAnYmVjYXVzZSB0aGUgd2luZG93IGNvdWxkIG5vdCBiZSBmb3VuZC4nLCBOb1N1Y2hXaW5kb3dFcnJvci5jb2RlKCksXG4gICAgICAgICAgTm9TdWNoV2luZG93RXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaFdpbmRvd0Vycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjE7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgYXJndW1lbnQnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGNvbW1hbmQgYXJlIGVpdGhlciBpbnZhbGlkIG9yIG1hbGZvcm1lZCcsXG4gICAgICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IuY29kZSgpLCBJbnZhbGlkQXJndW1lbnRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBjb29raWUgZG9tYWluJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGlsbGVnYWwgYXR0ZW1wdCB3YXMgbWFkZSB0byBzZXQgYSBjb29raWUgdW5kZXIgYSBkaWZmZXJlbnQgJyArXG4gICAgICAgICAgJ2RvbWFpbiB0aGFuIHRoZSBjdXJyZW50IHBhZ2UuJywgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmNvZGUoKSxcbiAgICAgICAgICBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IudzNjU3RhdHVzKCksIEludmFsaWRDb29raWVEb21haW5FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBOb1N1Y2hDb29raWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGNvb2tpZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTm8gY29va2llIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIG5hbWUgd2FzIGZvdW5kIGFtb25nc3QgdGhlIGFzc29jaWF0ZWQgY29va2llcyBvZiB0aGUgY3VycmVudCBicm93c2luZyBjb250ZXh04oCZcyBhY3RpdmUgZG9jdW1lbnQnLFxuICAgICAgICAgIE5vU3VjaENvb2tpZUVycm9yLmNvZGUoKSwgTm9TdWNoQ29va2llRXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaENvb2tpZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFVuYWJsZVRvU2V0Q29va2llRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5hYmxlIHRvIHNldCBjb29raWUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgcmVxdWVzdCB0byBzZXQgYSBjb29raWVcXCdzIHZhbHVlIGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQuJyxcbiAgICAgICAgICBVbmFibGVUb1NldENvb2tpZUVycm9yLmNvZGUoKSwgVW5hYmxlVG9TZXRDb29raWVFcnJvci53M2NTdGF0dXMoKSwgVW5hYmxlVG9TZXRDb29raWVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5leHBlY3RlZCBhbGVydCBvcGVuJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIG1vZGFsIGRpYWxvZyB3YXMgb3BlbiwgYmxvY2tpbmcgdGhpcyBvcGVyYXRpb24nLFxuICAgICAgICAgIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvci5jb2RlKCksIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvci53M2NTdGF0dXMoKSwgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIE5vQWxlcnRPcGVuRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBhbGVydCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBvcGVyYXRlIG9uIGEgbW9kYWwgZGlhbG9nIHdoZW4gb25lICcgK1xuICAgICAgICAgICd3YXMgbm90IG9wZW4uJywgTm9BbGVydE9wZW5FcnJvci5jb2RlKCksIE5vQWxlcnRPcGVuRXJyb3IudzNjU3RhdHVzKCksIE5vQWxlcnRPcGVuRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgTm9TdWNoQWxlcnRFcnJvciBleHRlbmRzIE5vQWxlcnRPcGVuRXJyb3Ige31cblxuY2xhc3MgU2NyaXB0VGltZW91dEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjg7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5SRVFVRVNUX1RJTUVPVVQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3NjcmlwdCB0aW1lb3V0JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHNjcmlwdCBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBpdHMgdGltZW91dCBleHBpcmVkLicsXG4gICAgICAgICAgU2NyaXB0VGltZW91dEVycm9yLmNvZGUoKSwgU2NyaXB0VGltZW91dEVycm9yLnczY1N0YXR1cygpLCBTY3JpcHRUaW1lb3V0RXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjk7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBjb29yZGluYXRlcyc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIGNvb3JkaW5hdGVzIHByb3ZpZGVkIHRvIGFuIGludGVyYWN0aW9ucyBvcGVyYXRpb24gYXJlIGludmFsaWQuJyxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IuY29kZSgpLCBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRDb29yZGluYXRlc0Vycm9yIGV4dGVuZHMgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIHt9XG5cbmNsYXNzIElNRU5vdEF2YWlsYWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzA7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnSU1FIHdhcyBub3QgYXZhaWxhYmxlLicsIElNRU5vdEF2YWlsYWJsZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBJTUVOb3RBdmFpbGFibGVFcnJvci53M2NTdGF0dXMoKSwgSU1FTm90QXZhaWxhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzE7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gSU1FIGVuZ2luZSBjb3VsZCBub3QgYmUgc3RhcnRlZC4nLFxuICAgICAgICAgIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvci5jb2RlKCksIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFNlbGVjdG9yRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIHNlbGVjdG9yJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBcmd1bWVudCB3YXMgYW4gaW52YWxpZCBzZWxlY3RvciAoZS5nLiBYUGF0aC9DU1MpLicsXG4gICAgICAgICAgSW52YWxpZFNlbGVjdG9yRXJyb3IuY29kZSgpLCBJbnZhbGlkU2VsZWN0b3JFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBTZXNzaW9uTm90Q3JlYXRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzM7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Nlc3Npb24gbm90IGNyZWF0ZWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChkZXRhaWxzKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnQSBuZXcgc2Vzc2lvbiBjb3VsZCBub3QgYmUgY3JlYXRlZC4nO1xuICAgIGlmIChkZXRhaWxzKSB7XG4gICAgICBtZXNzYWdlICs9IGAgRGV0YWlsczogJHtkZXRhaWxzfWA7XG4gICAgfVxuXG4gICAgc3VwZXIobWVzc2FnZSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci5jb2RlKCksIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IudzNjU3RhdHVzKCksIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzNDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbW92ZSB0YXJnZXQgb3V0IG9mIGJvdW5kcyc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGFyZ2V0IHByb3ZpZGVkIGZvciBhIG1vdmUgYWN0aW9uIGlzIG91dCBvZiBib3VuZHMuJyxcbiAgICAgICAgICBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvci5jb2RlKCksIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLnczY1N0YXR1cygpLCBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBOb1N1Y2hDb250ZXh0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzNTtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdObyBzdWNoIGNvbnRleHQgZm91bmQuJywgTm9TdWNoQ29udGV4dEVycm9yLmNvZGUoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDM2O1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoYXQgY29tbWFuZCBjb3VsZCBub3QgYmUgZXhlY3V0ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4nLFxuICAgICAgICAgIEludmFsaWRDb250ZXh0RXJyb3IuY29kZSgpKTtcbiAgfVxufVxuXG4vLyBUaGVzZSBhcmUgYWxpYXNlcyBmb3IgVW5rbm93bk1ldGhvZEVycm9yXG5jbGFzcyBOb3RZZXRJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgVW5rbm93bk1ldGhvZEVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIFVua25vd25NZXRob2RFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ01ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG5jbGFzcyBVbmFibGVUb0NhcHR1cmVTY3JlZW4gZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5hYmxlIHRvIGNhcHR1cmUgc2NyZWVuJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHNjcmVlbiBjYXB0dXJlIHdhcyBtYWRlIGltcG9zc2libGUnLFxuICAgICAgICAgIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbi5jb2RlKCksIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbi53M2NTdGF0dXMoKSwgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmVycm9yKCkpO1xuICB9XG59XG5cblxuLy8gRXF1aXZhbGVudCB0byBXM0MgSW52YWxpZEFyZ3VtZW50RXJyb3JcbmNsYXNzIEJhZFBhcmFtZXRlcnNFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgYXJndW1lbnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChyZXF1aXJlZFBhcmFtcywgYWN0dWFsUGFyYW1zLCBlcnJNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgaWYgKCFlcnJNZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gYFBhcmFtZXRlcnMgd2VyZSBpbmNvcnJlY3QuIFdlIHdhbnRlZCBgICtcbiAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShyZXF1aXJlZFBhcmFtcyl9IGFuZCB5b3UgYCArXG4gICAgICAgICAgYHNlbnQgJHtKU09OLnN0cmluZ2lmeShhY3R1YWxQYXJhbXMpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgPSBgUGFyYW1ldGVycyB3ZXJlIGluY29ycmVjdC4gWW91IHNlbnQgJHtKU09OLnN0cmluZ2lmeShhY3R1YWxQYXJhbXMpfSwgJHtlcnJNZXNzYWdlfWA7XG4gICAgfVxuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMudzNjU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG59XG5cbi8qKlxuICogUHJveHlSZXF1ZXN0RXJyb3IgaXMgYSBjdXN0b20gZXJyb3IgYW5kIHdpbGwgYmUgdGhyb3duIHVwIG9uIHVuc3VjY2Vzc2Z1bCBwcm94eSByZXF1ZXN0IGFuZFxuICogd2lsbCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm94eSBmYWlsdXJlLlxuICogSW4gY2FzZSBvZiBQcm94eVJlcXVlc3RFcnJvciBzaG91bGQgZmV0Y2ggdGhlIGFjdHVhbCBlcnJvciBieSBjYWxsaW5nIGBnZXRBY3R1YWxFcnJvcigpYFxuICogZm9yIHByb3h5IGZhaWx1cmUgdG8gZ2VuZXJhdGUgdGhlIGNsaWVudCByZXNwb25zZS5cbiAqL1xuY2xhc3MgUHJveHlSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFUzZFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChlcnIsIHJlc3BvbnNlRXJyb3IsIGh0dHBTdGF0dXMpIHtcbiAgICBsZXQgcmVzcG9uc2VFcnJvck9iaiA9IHV0aWwuc2FmZUpzb25QYXJzZShyZXNwb25zZUVycm9yKTtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChyZXNwb25zZUVycm9yT2JqKSkge1xuICAgICAgcmVzcG9uc2VFcnJvck9iaiA9IHt9O1xuICAgIH1cbiAgICBsZXQgb3JpZ01lc3NhZ2UgPSBfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3IpID8gcmVzcG9uc2VFcnJvciA6ICcnO1xuICAgIGlmICghXy5pc0VtcHR5KHJlc3BvbnNlRXJyb3JPYmopKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyhyZXNwb25zZUVycm9yT2JqLnZhbHVlKSkge1xuICAgICAgICBvcmlnTWVzc2FnZSA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChyZXNwb25zZUVycm9yT2JqLnZhbHVlKSAmJiBfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZSkpIHtcbiAgICAgICAgb3JpZ01lc3NhZ2UgPSByZXNwb25zZUVycm9yT2JqLnZhbHVlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyKF8uaXNFbXB0eShlcnIpID8gYFByb3h5IHJlcXVlc3QgdW5zdWNjZXNzZnVsLiAke29yaWdNZXNzYWdlfWAgOiBlcnIpO1xuXG4gICAgdGhpcy53M2NTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG5cbiAgICAvLyBJZiB0aGUgcmVzcG9uc2UgZXJyb3IgaXMgYW4gb2JqZWN0IGFuZCB2YWx1ZSBpcyBhbiBvYmplY3QsIGl0J3MgYSBXM0MgZXJyb3IgKGZvciBKU09OV1AgdmFsdWUgaXMgYSBzdHJpbmcpXG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChyZXNwb25zZUVycm9yT2JqLnZhbHVlKSAmJiBfLmhhcyhyZXNwb25zZUVycm9yT2JqLnZhbHVlLCAnZXJyb3InKSkge1xuICAgICAgdGhpcy53M2MgPSByZXNwb25zZUVycm9yT2JqLnZhbHVlO1xuICAgICAgdGhpcy53M2NTdGF0dXMgPSBodHRwU3RhdHVzIHx8IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5qc29ud3AgPSByZXNwb25zZUVycm9yT2JqO1xuICAgIH1cbiAgfVxuXG4gIGdldEFjdHVhbEVycm9yICgpIHtcbiAgICAvLyBJZiBpdCdzIE1KU09OV1AgZXJyb3IsIHJldHVybnMgYWN0dWFsIGVycm9yIGNhdXNlIGZvciByZXF1ZXN0IGZhaWx1cmUgYmFzZWQgb24gYGpzb253cC5zdGF0dXNgXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5qc29ud3ApICYmIHV0aWwuaGFzVmFsdWUodGhpcy5qc29ud3Auc3RhdHVzKSAmJiB1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKHRoaXMuanNvbndwLnN0YXR1cywgdGhpcy5qc29ud3AudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLnczYykgJiYgXy5pc051bWJlcih0aGlzLnczY1N0YXR1cykgJiYgdGhpcy53M2NTdGF0dXMgPj0gMzAwKSB7XG4gICAgICByZXR1cm4gZXJyb3JGcm9tVzNDSnNvbkNvZGUodGhpcy53M2MuZXJyb3IsIHRoaXMudzNjLm1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlLCB0aGlzLnczYy5zdGFja3RyYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVbmtub3duRXJyb3IodGhpcy5tZXNzYWdlKTtcbiAgfVxufVxuLy8gbWFwIG9mIGVycm9yIGNsYXNzIG5hbWUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGVycm9ycyA9IHtOb3RZZXRJbXBsZW1lbnRlZEVycm9yLFxuICAgICAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgQmFkUGFyYW1ldGVyc0Vycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaERyaXZlckVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEVsZW1lbnRFcnJvcixcbiAgICAgICAgICAgICAgICBVbmtub3duQ29tbWFuZEVycm9yLFxuICAgICAgICAgICAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLFxuICAgICAgICAgICAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLFxuICAgICAgICAgICAgICAgIFVua25vd25FcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLFxuICAgICAgICAgICAgICAgIEphdmFTY3JpcHRFcnJvcixcbiAgICAgICAgICAgICAgICBYUGF0aExvb2t1cEVycm9yLFxuICAgICAgICAgICAgICAgIFRpbWVvdXRFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hXaW5kb3dFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hDb29raWVFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZENvb3JkaW5hdGVzRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IsXG4gICAgICAgICAgICAgICAgTm9BbGVydE9wZW5FcnJvcixcbiAgICAgICAgICAgICAgICBTY3JpcHRUaW1lb3V0RXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLFxuICAgICAgICAgICAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvcixcbiAgICAgICAgICAgICAgICBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLFxuICAgICAgICAgICAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEFsZXJ0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoQ29udGV4dEVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRDb250ZXh0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoRnJhbWVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmFibGVUb0NhcHR1cmVTY3JlZW4sXG4gICAgICAgICAgICAgICAgVW5rbm93bk1ldGhvZEVycm9yLFxuICAgICAgICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgICAgICAgICAgUHJveHlSZXF1ZXN0RXJyb3J9O1xuXG4vLyBtYXAgb2YgZXJyb3IgY29kZSB0byBlcnJvciBjbGFzc1xuY29uc3QganNvbndwRXJyb3JDb2RlTWFwID0ge307XG5mb3IgKGxldCBFcnJvckNsYXNzIG9mIF8udmFsdWVzKGVycm9ycykpIHtcbiAgaWYgKEVycm9yQ2xhc3MuY29kZSkge1xuICAgIGpzb253cEVycm9yQ29kZU1hcFtFcnJvckNsYXNzLmNvZGUoKV0gPSBFcnJvckNsYXNzO1xuICB9XG59XG5cbmNvbnN0IHczY0Vycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmIChFcnJvckNsYXNzLmVycm9yKSB7XG4gICAgdzNjRXJyb3JDb2RlTWFwW0Vycm9yQ2xhc3MuZXJyb3IoKV0gPSBFcnJvckNsYXNzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5rbm93bkVycm9yIChlcnIpIHtcbiAgcmV0dXJuICFlcnIuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICAgIV8udmFsdWVzKGVycm9ycykuZmluZChmdW5jdGlvbiBlcXVhbE5hbWVzIChlcnJvcikge1xuICAgICAgICAgICByZXR1cm4gZXJyb3IubmFtZSA9PT0gZXJyLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNFcnJvclR5cGUgKGVyciwgdHlwZSkge1xuICAvLyBgbmFtZWAgcHJvcGVydHkgaXMgdGhlIGNvbnN0cnVjdG9yIG5hbWVcbiAgaWYgKHR5cGUubmFtZSA9PT0gUHJvdG9jb2xFcnJvci5uYW1lKSB7XG4gICAgLy8gYGpzb253cENvZGVgIGlzIGAwYCBvbiBzdWNjZXNzXG4gICAgcmV0dXJuICEhZXJyLmpzb253cENvZGU7XG4gIH0gZWxzZSBpZiAodHlwZS5uYW1lID09PSBQcm94eVJlcXVlc3RFcnJvci5uYW1lKSB7XG4gICAgLy8gYHN0YXR1c2AgaXMgYDBgIG9uIHN1Y2Nlc3NcbiAgICBpZiAoZXJyLmpzb253cCkge1xuICAgICAgcmV0dXJuICEhZXJyLmpzb253cC5zdGF0dXM7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChlcnIudzNjKSkge1xuICAgICAgcmV0dXJuIF8uaXNOdW1iZXIoZXJyLnczY1N0YXR1cykgJiYgZXJyLnczY1N0YXR1cyA+PSAzMDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBlcnIuY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGFuIGVycm9yIGRlcml2ZWQgZnJvbSBNSlNPTldQIHN0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IGNvZGUgSlNPTldQIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IHZhbHVlIFRoZSBlcnJvciBtZXNzYWdlLCBvciBhbiBvYmplY3Qgd2l0aCBhIGBtZXNzYWdlYCBwcm9wZXJ0eVxuICogQHJldHVybiB7UHJvdG9jb2xFcnJvcn0gVGhlIGVycm9yIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHByb3ZpZGVkIEpTT05XUCBzdGF0dXMgY29kZVxuICovXG5mdW5jdGlvbiBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSAoY29kZSwgdmFsdWUgPSAnJykge1xuICAvLyBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgcHVsbCBtZXNzYWdlIGZyb20gaXQsIG90aGVyd2lzZSB1c2UgdGhlIHBsYWluXG4gIC8vIHZhbHVlLCBvciBkZWZhdWx0IHRvIGFuIGVtcHR5IHN0cmluZywgaWYgbnVsbFxuICBjb25zdCBtZXNzYWdlID0gKHZhbHVlIHx8IHt9KS5tZXNzYWdlIHx8IHZhbHVlIHx8ICcnO1xuICBpZiAoY29kZSAhPT0gVW5rbm93bkVycm9yLmNvZGUoKSAmJiBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0pIHtcbiAgICBtanNvbndwTG9nLmRlYnVnKGBNYXRjaGVkIEpTT05XUCBlcnJvciBjb2RlICR7Y29kZX0gdG8gJHtqc29ud3BFcnJvckNvZGVNYXBbY29kZV0ubmFtZX1gKTtcbiAgICByZXR1cm4gbmV3IGpzb253cEVycm9yQ29kZU1hcFtjb2RlXShtZXNzYWdlKTtcbiAgfVxuICBtanNvbndwTG9nLmRlYnVnKGBNYXRjaGVkIEpTT05XUCBlcnJvciBjb2RlICR7Y29kZX0gdG8gVW5rbm93bkVycm9yYCk7XG4gIHJldHVybiBuZXcgVW5rbm93bkVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGFuIGVycm9yIGRlcml2ZWQgZnJvbSBXM0MgSlNPTiBDb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSBXM0MgZXJyb3Igc3RyaW5nIChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jaGFuZGxpbmctZXJyb3JzIGBKU09OIEVycm9yIENvZGVgIGNvbHVtbilcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBAcGFyYW0gez9zdHJpbmd9IHN0YWNrdHJhY2UgYW4gb3B0aW9uYWwgZXJyb3Igc3RhY2t0cmFjZVxuICogQHJldHVybiB7UHJvdG9jb2xFcnJvcn0gIFRoZSBlcnJvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVzNDIGVycm9yIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlcnJvckZyb21XM0NKc29uQ29kZSAoY29kZSwgbWVzc2FnZSwgc3RhY2t0cmFjZSA9IG51bGwpIHtcbiAgaWYgKGNvZGUgJiYgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICB3M2NMb2cuZGVidWcoYE1hdGNoZWQgVzNDIGVycm9yIGNvZGUgJyR7Y29kZX0nIHRvICR7dzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0ubmFtZX1gKTtcbiAgICBjb25zdCByZXN1bHRFcnJvciA9IG5ldyB3M2NFcnJvckNvZGVNYXBbY29kZS50b0xvd2VyQ2FzZSgpXShtZXNzYWdlKTtcbiAgICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgICByZXR1cm4gcmVzdWx0RXJyb3I7XG4gIH1cbiAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byBVbmtub3duRXJyb3JgKTtcbiAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgVW5rbm93bkVycm9yKG1lc3NhZ2UpO1xuICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgcmV0dXJuIHJlc3VsdEVycm9yO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gQXBwaXVtIGVycm9yIHRvIHByb3BlciBXM0MgSFRUUCByZXNwb25zZVxuICogQHBhcmFtIHtQcm90b2NvbEVycm9yfSBlcnIgVGhlIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZFxuICovXG5mdW5jdGlvbiBnZXRSZXNwb25zZUZvclczQ0Vycm9yIChlcnIpIHtcbiAgbGV0IGh0dHBTdGF0dXM7XG5cbiAgLy8gVzNDIGRlZmluZWQgZXJyb3IgbWVzc2FnZSAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jZGZuLWVycm9yLWNvZGUpXG4gIGxldCB3M2NFcnJvclN0cmluZztcblxuICBpZiAoIWVyci53M2NTdGF0dXMpIHtcbiAgICBlcnIgPSB1dGlsLmhhc1ZhbHVlKGVyci5zdGF0dXMpXG4gICAgICAvLyBJZiBpdCdzIGEgSlNPTldQIGVycm9yLCBmaW5kIGNvcnJlc3BvbmRpbmcgZXJyb3JcbiAgICAgID8gZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUoZXJyLnN0YXR1cywgZXJyLnZhbHVlKVxuICAgICAgOiBuZXcgZXJyb3JzLlVua25vd25FcnJvcihlcnIubWVzc2FnZSk7XG4gIH1cblxuICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKSkge1xuICAgIC8vIHJlc3BvbmQgd2l0aCBhIDQwMCBpZiB3ZSBoYXZlIGJhZCBwYXJhbWV0ZXJzXG4gICAgdzNjTG9nLmRlYnVnKGBCYWQgcGFyYW1ldGVyczogJHtlcnJ9YCk7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBCYWRQYXJhbWV0ZXJzRXJyb3IuZXJyb3IoKTtcbiAgfSBlbHNlIHtcbiAgICB3M2NFcnJvclN0cmluZyA9IGVyci5lcnJvcjtcbiAgfVxuXG4gIGh0dHBTdGF0dXMgPSBlcnIudzNjU3RhdHVzO1xuXG4gIGlmICghdzNjRXJyb3JTdHJpbmcpIHtcbiAgICB3M2NFcnJvclN0cmluZyA9IFVua25vd25FcnJvci5lcnJvcigpO1xuICB9XG5cbiAgbGV0IGh0dHBSZXNCb2R5ID0ge1xuICAgIHZhbHVlOiB7XG4gICAgICBlcnJvcjogdzNjRXJyb3JTdHJpbmcsXG4gICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgIHN0YWNrdHJhY2U6IGVyci5zdGFja3RyYWNlIHx8IGVyci5zdGFjayxcbiAgICB9XG4gIH07XG4gIHJldHVybiBbaHR0cFN0YXR1cywgaHR0cFJlc0JvZHldO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gQXBwaXVtIGVycm9yIHRvIGEgcHJvcGVyIEpTT05XUCByZXNwb25zZVxuICogQHBhcmFtIHtQcm90b2NvbEVycm9yfSBlcnIgVGhlIGVycm9yIHRvIGJlIGNvbnZlcnRlZFxuICovXG5mdW5jdGlvbiBnZXRSZXNwb25zZUZvckpzb253cEVycm9yIChlcnIpIHtcbiAgaWYgKGlzVW5rbm93bkVycm9yKGVycikpIHtcbiAgICBlcnIgPSBuZXcgZXJyb3JzLlVua25vd25FcnJvcihlcnIpO1xuICB9XG4gIC8vIE1KU09OV1AgZXJyb3JzIGFyZSB1c3VhbGx5IDUwMCBzdGF0dXMgY29kZSBzbyBzZXQgaXQgdG8gdGhhdCBieSBkZWZhdWx0XG4gIGxldCBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgbGV0IGh0dHBSZXNCb2R5ID0ge1xuICAgIHN0YXR1czogZXJyLmpzb253cENvZGUsXG4gICAgdmFsdWU6IHtcbiAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlXG4gICAgfVxuICB9O1xuXG4gIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNDAwIGlmIHdlIGhhdmUgYmFkIHBhcmFtZXRlcnNcbiAgICBtanNvbndwTG9nLmRlYnVnKGBCYWQgcGFyYW1ldGVyczogJHtlcnJ9YCk7XG4gICAgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgICBodHRwUmVzQm9keSA9IGVyci5tZXNzYWdlO1xuICB9IGVsc2UgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IpIHx8XG4gICAgICAgICAgICAgaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA1MDEgaWYgdGhlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWRcbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9JTVBMRU1FTlRFRDtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyIGZvciB0aGUgc2Vzc2lvblxuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG5cblxuICByZXR1cm4gW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XTtcbn1cblxuZXhwb3J0IHtcbiAgUHJvdG9jb2xFcnJvciwgZXJyb3JzLCBpc0Vycm9yVHlwZSwgaXNVbmtub3duRXJyb3IsXG4gIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLCBlcnJvckZyb21XM0NKc29uQ29kZSxcbiAgZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciwgZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvcixcbn07XG4iXSwiZmlsZSI6ImxpYi9wcm90b2NvbC9lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
937
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm90b2NvbC9lcnJvcnMuanMiXSwibmFtZXMiOlsibWpzb253cExvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInczY0xvZyIsIlczQ19VTktOT1dOX0VSUk9SIiwiUHJvdG9jb2xFcnJvciIsIkVTNkVycm9yIiwiY29uc3RydWN0b3IiLCJtc2ciLCJqc29ud3BDb2RlIiwidzNjU3RhdHVzIiwiZXJyb3IiLCJIVFRQU3RhdHVzQ29kZXMiLCJCQURfUkVRVUVTVCIsIl9zdGFja3RyYWNlIiwic3RhY2t0cmFjZSIsInN0YWNrIiwidmFsdWUiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImNvZGUiLCJOT1RfRk9VTkQiLCJlcnIiLCJOb1N1Y2hFbGVtZW50RXJyb3IiLCJOb1N1Y2hGcmFtZUVycm9yIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRWxlbWVudE5vdFZpc2libGVFcnJvciIsIkludmFsaWRFbGVtZW50U3RhdGVFcnJvciIsIlVua25vd25FcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImVycm9yT3JNZXNzYWdlIiwib3JpZ01lc3NhZ2UiLCJfIiwiaXNTdHJpbmciLCJtZXNzYWdlIiwiVW5rbm93bk1ldGhvZEVycm9yIiwiTUVUSE9EX05PVF9BTExPV0VEIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsIkVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciIsIkVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IiLCJFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IiLCJJbnNlY3VyZUNlcnRpZmljYXRlRXJyb3IiLCJKYXZhU2NyaXB0RXJyb3IiLCJYUGF0aExvb2t1cEVycm9yIiwiVGltZW91dEVycm9yIiwiUkVRVUVTVF9USU1FT1VUIiwiTm9TdWNoV2luZG93RXJyb3IiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkludmFsaWRDb29raWVEb21haW5FcnJvciIsIk5vU3VjaENvb2tpZUVycm9yIiwiVW5hYmxlVG9TZXRDb29raWVFcnJvciIsIlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciIsIk5vQWxlcnRPcGVuRXJyb3IiLCJOb1N1Y2hBbGVydEVycm9yIiwiU2NyaXB0VGltZW91dEVycm9yIiwiSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIiwiSW52YWxpZENvb3JkaW5hdGVzRXJyb3IiLCJJTUVOb3RBdmFpbGFibGVFcnJvciIsIklNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciIsIkludmFsaWRTZWxlY3RvckVycm9yIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsImRldGFpbHMiLCJNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciIsIk5vU3VjaENvbnRleHRFcnJvciIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJOb3RZZXRJbXBsZW1lbnRlZEVycm9yIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIlVuYWJsZVRvQ2FwdHVyZVNjcmVlbiIsIkJhZFBhcmFtZXRlcnNFcnJvciIsInJlcXVpcmVkUGFyYW1zIiwiYWN0dWFsUGFyYW1zIiwiZXJyTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJQcm94eVJlcXVlc3RFcnJvciIsInJlc3BvbnNlRXJyb3IiLCJodHRwU3RhdHVzIiwicmVzcG9uc2VFcnJvck9iaiIsInV0aWwiLCJzYWZlSnNvblBhcnNlIiwiaXNQbGFpbk9iamVjdCIsImlzRW1wdHkiLCJoYXMiLCJ3M2MiLCJqc29ud3AiLCJnZXRBY3R1YWxFcnJvciIsImhhc1ZhbHVlIiwic3RhdHVzIiwiZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUiLCJpc051bWJlciIsImVycm9yRnJvbVczQ0pzb25Db2RlIiwiZXJyb3JzIiwianNvbndwRXJyb3JDb2RlTWFwIiwiRXJyb3JDbGFzcyIsInZhbHVlcyIsInczY0Vycm9yQ29kZU1hcCIsImlzVW5rbm93bkVycm9yIiwibmFtZSIsImZpbmQiLCJlcXVhbE5hbWVzIiwiaXNFcnJvclR5cGUiLCJ0eXBlIiwiZGVidWciLCJ0b0xvd2VyQ2FzZSIsInJlc3VsdEVycm9yIiwiZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciIsInczY0Vycm9yU3RyaW5nIiwiaHR0cFJlc0JvZHkiLCJnZXRSZXNwb25zZUZvckpzb253cEVycm9yIiwiTk9UX0lNUExFTUVOVEVEIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLFNBQWpCLENBQW5COztBQUNBLE1BQU1DLE1BQU0sR0FBR0YsZ0JBQU9DLFNBQVAsQ0FBaUIsS0FBakIsQ0FBZjs7QUFFQSxNQUFNRSxpQkFBaUIsR0FBRyxlQUExQjs7QUFHQSxNQUFNQyxhQUFOLFNBQTRCQyxpQkFBNUIsQ0FBcUM7QUFDbkNDLEVBQUFBLFdBQVcsQ0FBRUMsR0FBRixFQUFPQyxVQUFQLEVBQW1CQyxTQUFuQixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDOUMsVUFBTUgsR0FBTjtBQUNBLFNBQUtDLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0UsS0FBTCxHQUFhQSxLQUFLLElBQUlQLGlCQUF0Qjs7QUFDQSxRQUFJLEtBQUtLLFVBQUwsS0FBb0IsSUFBeEIsRUFBOEI7QUFDNUIsV0FBS0EsVUFBTCxHQUFrQixFQUFsQjtBQUNEOztBQUNELFNBQUtDLFNBQUwsR0FBaUJBLFNBQVMsSUFBSUUsNkJBQWdCQyxXQUE5QztBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDRDs7QUFFYSxNQUFWQyxVQUFVLEdBQUk7QUFDaEIsV0FBTyxLQUFLRCxXQUFMLElBQW9CLEtBQUtFLEtBQWhDO0FBQ0Q7O0FBRWEsTUFBVkQsVUFBVSxDQUFFRSxLQUFGLEVBQVM7QUFDckIsU0FBS0gsV0FBTCxHQUFtQkcsS0FBbkI7QUFDRDs7QUFsQmtDOzs7O0FBeUJyQyxNQUFNQyxpQkFBTixTQUFnQ2IsYUFBaEMsQ0FBOEM7QUFDakMsU0FBSmMsSUFBSSxHQUFJO0FBQ2IsV0FBTyxDQUFQO0FBQ0Q7O0FB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N0I7QUFDRCxHQUpNLE1BSUEsSUFBSVQsV0FBVyxDQUFDL0UsR0FBRCxFQUFNc0UsTUFBTSxDQUFDekUsaUJBQWIsQ0FBZixFQUFnRDtBQUVyRDBELElBQUFBLFVBQVUsR0FBR2hFLDZCQUFnQlEsU0FBN0I7QUFDRDs7QUFHRCxTQUFPLENBQUN3RCxVQUFELEVBQWErQixXQUFiLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFUzZFcnJvciBmcm9tICdlczYtZXJyb3InO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBTdGF0dXNDb2RlcyBhcyBIVFRQU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5cbmNvbnN0IG1qc29ud3BMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdNSlNPTldQJyk7XG5jb25zdCB3M2NMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdXM0MnKTtcblxuY29uc3QgVzNDX1VOS05PV05fRVJST1IgPSAndW5rbm93biBlcnJvcic7XG5cbi8vIGJhc2UgZXJyb3IgY2xhc3MgZm9yIGFsbCBvZiBvdXIgZXJyb3JzXG5jbGFzcyBQcm90b2NvbEVycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobXNnLCBqc29ud3BDb2RlLCB3M2NTdGF0dXMsIGVycm9yKSB7XG4gICAgc3VwZXIobXNnKTtcbiAgICB0aGlzLmpzb253cENvZGUgPSBqc29ud3BDb2RlO1xuICAgIHRoaXMuZXJyb3IgPSBlcnJvciB8fCBXM0NfVU5LTk9XTl9FUlJPUjtcbiAgICBpZiAodGhpcy5qc29ud3BDb2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLmpzb253cENvZGUgPSAxMztcbiAgICB9XG4gICAgdGhpcy53M2NTdGF0dXMgPSB3M2NTdGF0dXMgfHwgSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIHRoaXMuX3N0YWNrdHJhY2UgPSBudWxsO1xuICB9XG5cbiAgZ2V0IHN0YWNrdHJhY2UgKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFja3RyYWNlIHx8IHRoaXMuc3RhY2s7XG4gIH1cblxuICBzZXQgc3RhY2t0cmFjZSAodmFsdWUpIHtcbiAgICB0aGlzLl9zdGFja3RyYWNlID0gdmFsdWU7XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vYmxvYi8xNzZiNGE5ZTMwODJhYzE5MjZmMmE0MzZlYjM0Njc2MGMzN2E1OTk4L2phdmEvY2xpZW50L3NyYy9vcmcvb3BlbnFhL3NlbGVuaXVtL3JlbW90ZS9FcnJvckNvZGVzLmphdmEjTDIxNVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vaXNzdWVzLzU1NjIjaXNzdWVjb21tZW50LTM3MDM3OTQ3MFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi1lcnJvci1jb2RlXG5cbmNsYXNzIE5vU3VjaERyaXZlckVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjtcbiAgfVxuICAvLyBXM0MgRXJyb3IgaXMgY2FsbGVkIEludmFsaWRTZXNzaW9uSURcbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2Vzc2lvbiBpZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSBzZXNzaW9uIGlzIGVpdGhlciB0ZXJtaW5hdGVkIG9yIG5vdCBzdGFydGVkJywgTm9TdWNoRHJpdmVyRXJyb3IuY29kZSgpLFxuICAgICAgICAgIE5vU3VjaERyaXZlckVycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hEcml2ZXJFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBOb1N1Y2hFbGVtZW50RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGVsZW1lbnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQgb24gdGhlIHBhZ2UgdXNpbmcgdGhlIGdpdmVuICcgK1xuICAgICAgICAgICdzZWFyY2ggcGFyYW1ldGVycy4nLCBOb1N1Y2hFbGVtZW50RXJyb3IuY29kZSgpLCBOb1N1Y2hFbGVtZW50RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgTm9TdWNoRWxlbWVudEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIE5vU3VjaEZyYW1lRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA4O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGZyYW1lJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHJlcXVlc3QgdG8gc3dpdGNoIHRvIGEgZnJhbWUgY291bGQgbm90IGJlIHNhdGlzZmllZCBiZWNhdXNlICcgK1xuICAgICAgICAgICd0aGUgZnJhbWUgY291bGQgbm90IGJlIGZvdW5kLicsIE5vU3VjaEZyYW1lRXJyb3IuY29kZSgpLFxuICAgICAgICAgIE5vU3VjaEZyYW1lRXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaEZyYW1lRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgVW5rbm93bkNvbW1hbmRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDk7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vua25vd24gY29tbWFuZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQsIG9yIGEgcmVxdWVzdCB3YXMgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkIHVzaW5nIGFuIEhUVFAgbWV0aG9kIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFwcGVkICcgK1xuICAgICAgICAgICdyZXNvdXJjZS4nLCBVbmtub3duQ29tbWFuZEVycm9yLmNvZGUoKSwgVW5rbm93bkNvbW1hbmRFcnJvci53M2NTdGF0dXMoKSwgVW5rbm93bkNvbW1hbmRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZWxlbWVudCBjb21tYW5kIGZhaWxlZCBiZWNhdXNlIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQgaXMgbm8gJyArXG4gICAgICAgICAgJ2xvbmdlciBhdHRhY2hlZCB0byB0aGUgRE9NLicsIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvci53M2NTdGF0dXMoKSwgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgRWxlbWVudE5vdFZpc2libGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDExO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IHZpc2libGUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgJyArXG4gICAgICAgICAgJ25vdCB2aXNpYmxlIG9uIHRoZSBwYWdlLicsIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuY29kZSgpLFxuICAgICAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IudzNjU3RhdHVzKCksIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBlbGVtZW50IHN0YXRlJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzICcgK1xuICAgICAgICAgICdpbiBhbiBpbnZhbGlkIHN0YXRlIChlLmcuIGF0dGVtcHRpbmcgdG8gY2xpY2sgYSBkaXNhYmxlZCBlbGVtZW50KS4nLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci5jb2RlKCksIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgVW5rbm93bkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTM7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gVzNDX1VOS05PV05fRVJST1I7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycm9yT3JNZXNzYWdlKSB7XG4gICAgY29uc3Qgb3JpZ01lc3NhZ2UgPSBfLmlzU3RyaW5nKChlcnJvck9yTWVzc2FnZSB8fCB7fSkubWVzc2FnZSlcbiAgICAgID8gZXJyb3JPck1lc3NhZ2UubWVzc2FnZVxuICAgICAgOiBlcnJvck9yTWVzc2FnZTtcbiAgICBjb25zdCBtZXNzYWdlID0gJ0FuIHVua25vd24gc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4nICtcbiAgICAgIChvcmlnTWVzc2FnZSA/IGAgT3JpZ2luYWwgZXJyb3I6ICR7b3JpZ01lc3NhZ2V9YCA6ICcnKTtcbiAgICBzdXBlcihtZXNzYWdlLCBVbmtub3duRXJyb3IuY29kZSgpLCBVbmtub3duRXJyb3IudzNjU3RhdHVzKCksIFVua25vd25FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBVbmtub3duTWV0aG9kRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA0MDU7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5NRVRIT0RfTk9UX0FMTE9XRUQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vua25vd24gbWV0aG9kJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgcmVxdWVzdGVkIGNvbW1hbmQgbWF0Y2hlZCBhIGtub3duIFVSTCBidXQgZGlkIG5vdCBtYXRjaCBhbiBtZXRob2QgZm9yIHRoYXQgVVJMJyxcbiAgICAgICAgICBVbmtub3duTWV0aG9kRXJyb3IuY29kZSgpLCBVbmtub3duTWV0aG9kRXJyb3IudzNjU3RhdHVzKCksIFVua25vd25NZXRob2RFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNDA1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQuIENvbW1hbmQgY2Fubm90IGJlIHN1cHBvcnRlZC4nLFxuICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuY29kZSgpLCBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTU7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IHNlbGVjdGFibGUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBzZWxlY3QgYW4gZWxlbWVudCB0aGF0IGNhbm5vdCBiZSBzZWxlY3RlZC4nLFxuICAgICAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDY0O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoZSBFbGVtZW50IENsaWNrIGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IHJlY2VpdmluZyAnICtcbiAgICAgICAgICAndGhlIGV2ZW50cyBpcyBvYnNjdXJpbmcgdGhlIGVsZW1lbnQgdGhhdCB3YXMgcmVxdWVzdGVkIGNsaWNrZWQnLFxuICAgICAgICAgIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IuY29kZSgpLCBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjA7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IGludGVyYWN0YWJsZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIG5vdCBwb2ludGVyLSBvciBrZXlib2FyZCBpbnRlcmFjdGFibGUnLFxuICAgICAgICAgIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci5jb2RlKCksIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnNlY3VyZSBjZXJ0aWZpY2F0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTmF2aWdhdGlvbiBjYXVzZWQgdGhlIHVzZXIgYWdlbnQgdG8gaGl0IGEgY2VydGlmaWNhdGUgd2FybmluZywgd2hpY2ggaXMgdXN1YWxseSB0aGUgcmVzdWx0IG9mIGFuIGV4cGlyZWQgb3IgaW52YWxpZCBUTFMgY2VydGlmaWNhdGUnLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmNvZGUoKSwgbnVsbCwgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEphdmFTY3JpcHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDE3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdqYXZhc2NyaXB0IGVycm9yJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBleGVjdXRpbmcgdXNlciBzdXBwbGllZCBKYXZhU2NyaXB0LicsXG4gICAgICAgICAgSmF2YVNjcmlwdEVycm9yLmNvZGUoKSwgSmF2YVNjcmlwdEVycm9yLnczY1N0YXR1cygpLCBKYXZhU2NyaXB0RXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgWFBhdGhMb29rdXBFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDE5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNlYXJjaGluZyBmb3IgYW4gZWxlbWVudCBieSBYUGF0aC4nLFxuICAgICAgICAgIFhQYXRoTG9va3VwRXJyb3IuY29kZSgpLCBYUGF0aExvb2t1cEVycm9yLnczY1N0YXR1cygpLCBYUGF0aExvb2t1cEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDIxO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuUkVRVUVTVF9USU1FT1VUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd0aW1lb3V0JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZSBiZWZvcmUgaXRzIHRpbWVvdXQgZXhwaXJlZC4nLFxuICAgICAgICAgIFRpbWVvdXRFcnJvci5jb2RlKCksIFRpbWVvdXRFcnJvci53M2NTdGF0dXMoKSwgVGltZW91dEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIE5vU3VjaFdpbmRvd0Vycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjM7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggd2luZG93JztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHJlcXVlc3QgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IHdpbmRvdyBjb3VsZCBub3QgYmUgc2F0aXNmaWVkICcgK1xuICAgICAgICAgICdiZWNhdXNlIHRoZSB3aW5kb3cgY291bGQgbm90IGJlIGZvdW5kLicsIE5vU3VjaFdpbmRvd0Vycm9yLmNvZGUoKSxcbiAgICAgICAgICBOb1N1Y2hXaW5kb3dFcnJvci53M2NTdGF0dXMoKSwgTm9TdWNoV2luZG93RXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MTtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBhcmd1bWVudCc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgY29tbWFuZCBhcmUgZWl0aGVyIGludmFsaWQgb3IgbWFsZm9ybWVkJyxcbiAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvci5jb2RlKCksIEludmFsaWRBcmd1bWVudEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRDb29raWVEb21haW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI0O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb2tpZSBkb21haW4nO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gaWxsZWdhbCBhdHRlbXB0IHdhcyBtYWRlIHRvIHNldCBhIGNvb2tpZSB1bmRlciBhIGRpZmZlcmVudCAnICtcbiAgICAgICAgICAnZG9tYWluIHRoYW4gdGhlIGN1cnJlbnQgcGFnZS4nLCBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IuY29kZSgpLFxuICAgICAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci53M2NTdGF0dXMoKSwgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIE5vU3VjaENvb2tpZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggY29va2llJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdObyBjb29raWUgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGggbmFtZSB3YXMgZm91bmQgYW1vbmdzdCB0aGUgYXNzb2NpYXRlZCBjb29raWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHTigJlzIGFjdGl2ZSBkb2N1bWVudCcsXG4gICAgICAgICAgTm9TdWNoQ29va2llRXJyb3IuY29kZSgpLCBOb1N1Y2hDb29raWVFcnJvci53M2NTdGF0dXMoKSwgTm9TdWNoQ29va2llRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgVW5hYmxlVG9TZXRDb29raWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmFibGUgdG8gc2V0IGNvb2tpZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHNldCBhIGNvb2tpZVxcJ3MgdmFsdWUgY291bGQgbm90IGJlIHNhdGlzZmllZC4nLFxuICAgICAgICAgIFVuYWJsZVRvU2V0Q29va2llRXJyb3IuY29kZSgpLCBVbmFibGVUb1NldENvb2tpZUVycm9yLnczY1N0YXR1cygpLCBVbmFibGVUb1NldENvb2tpZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI2O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmV4cGVjdGVkIGFsZXJ0IG9wZW4nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgbW9kYWwgZGlhbG9nIHdhcyBvcGVuLCBibG9ja2luZyB0aGlzIG9wZXJhdGlvbicsXG4gICAgICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmNvZGUoKSwgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLnczY1N0YXR1cygpLCBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgTm9BbGVydE9wZW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGFsZXJ0JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG9wZXJhdGUgb24gYSBtb2RhbCBkaWFsb2cgd2hlbiBvbmUgJyArXG4gICAgICAgICAgJ3dhcyBub3Qgb3Blbi4nLCBOb0FsZXJ0T3BlbkVycm9yLmNvZGUoKSwgTm9BbGVydE9wZW5FcnJvci53M2NTdGF0dXMoKSwgTm9BbGVydE9wZW5FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBOb1N1Y2hBbGVydEVycm9yIGV4dGVuZHMgTm9BbGVydE9wZW5FcnJvciB7fVxuXG5jbGFzcyBTY3JpcHRUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyODtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLlJFUVVFU1RfVElNRU9VVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc2NyaXB0IHRpbWVvdXQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2NyaXB0IGRpZCBub3QgY29tcGxldGUgYmVmb3JlIGl0cyB0aW1lb3V0IGV4cGlyZWQuJyxcbiAgICAgICAgICBTY3JpcHRUaW1lb3V0RXJyb3IuY29kZSgpLCBTY3JpcHRUaW1lb3V0RXJyb3IudzNjU3RhdHVzKCksIFNjcmlwdFRpbWVvdXRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyOTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb3JkaW5hdGVzJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgY29vcmRpbmF0ZXMgcHJvdmlkZWQgdG8gYW4gaW50ZXJhY3Rpb25zIG9wZXJhdGlvbiBhcmUgaW52YWxpZC4nLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvci5jb2RlKCksIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZENvb3JkaW5hdGVzRXJyb3IgZXh0ZW5kcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3Ige31cblxuY2xhc3MgSU1FTm90QXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQgb3BlcmF0aW9uJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdJTUUgd2FzIG5vdCBhdmFpbGFibGUuJywgSU1FTm90QXZhaWxhYmxlRXJyb3IuY29kZSgpLFxuICAgICAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLnczY1N0YXR1cygpLCBJTUVOb3RBdmFpbGFibGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQgb3BlcmF0aW9uJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBJTUUgZW5naW5lIGNvdWxkIG5vdCBiZSBzdGFydGVkLicsXG4gICAgICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLmNvZGUoKSwgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkU2VsZWN0b3JFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FyZ3VtZW50IHdhcyBhbiBpbnZhbGlkIHNlbGVjdG9yIChlLmcuIFhQYXRoL0NTUykuJyxcbiAgICAgICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci5jb2RlKCksIEludmFsaWRTZWxlY3RvckVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRTZWxlY3RvckVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc2Vzc2lvbiBub3QgY3JlYXRlZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGRldGFpbHMpIHtcbiAgICBsZXQgbWVzc2FnZSA9ICdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLic7XG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCBEZXRhaWxzOiAke2RldGFpbHN9YDtcbiAgICB9XG5cbiAgICBzdXBlcihtZXNzYWdlLCBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmNvZGUoKSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci53M2NTdGF0dXMoKSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDM0O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdtb3ZlIHRhcmdldCBvdXQgb2YgYm91bmRzJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUYXJnZXQgcHJvdmlkZWQgZm9yIGEgbW92ZSBhY3Rpb24gaXMgb3V0IG9mIGJvdW5kcy4nLFxuICAgICAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLmNvZGUoKSwgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IudzNjU3RhdHVzKCksIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIE5vU3VjaENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDM1O1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ05vIHN1Y2ggY29udGV4dCBmb3VuZC4nLCBOb1N1Y2hDb250ZXh0RXJyb3IuY29kZSgpKTtcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkQ29udGV4dEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzY7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhhdCBjb21tYW5kIGNvdWxkIG5vdCBiZSBleGVjdXRlZCBpbiB0aGUgY3VycmVudCBjb250ZXh0LicsXG4gICAgICAgICAgSW52YWxpZENvbnRleHRFcnJvci5jb2RlKCkpO1xuICB9XG59XG5cbi8vIFRoZXNlIGFyZSBhbGlhc2VzIGZvciBVbmtub3duTWV0aG9kRXJyb3JcbmNsYXNzIE5vdFlldEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBVbmtub3duTWV0aG9kRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdNZXRob2QgaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5jbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgVW5rbm93bk1ldGhvZEVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbmNsYXNzIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbiBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmFibGUgdG8gY2FwdHVyZSBzY3JlZW4nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2NyZWVuIGNhcHR1cmUgd2FzIG1hZGUgaW1wb3NzaWJsZScsXG4gICAgICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmNvZGUoKSwgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLnczY1N0YXR1cygpLCBVbmFibGVUb0NhcHR1cmVTY3JlZW4uZXJyb3IoKSk7XG4gIH1cbn1cblxuXG4vLyBFcXVpdmFsZW50IHRvIFczQyBJbnZhbGlkQXJndW1lbnRFcnJvclxuY2xhc3MgQmFkUGFyYW1ldGVyc0Vycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBhcmd1bWVudCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKHJlcXVpcmVkUGFyYW1zLCBhY3R1YWxQYXJhbXMsIGVyck1lc3NhZ2UpIHtcbiAgICBsZXQgbWVzc2FnZTtcbiAgICBpZiAoIWVyck1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBgUGFyYW1ldGVycyB3ZXJlIGluY29ycmVjdC4gV2Ugd2FudGVkIGAgK1xuICAgICAgICAgIGAke0pTT04uc3RyaW5naWZ5KHJlcXVpcmVkUGFyYW1zKX0gYW5kIHlvdSBgICtcbiAgICAgICAgICBgc2VudCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbFBhcmFtcyl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBQYXJhbWV0ZXJzIHdlcmUgaW5jb3JyZWN0LiBZb3Ugc2VudCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbFBhcmFtcyl9LCAke2Vyck1lc3NhZ2V9YDtcbiAgICB9XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy53M2NTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm94eVJlcXVlc3RFcnJvciBpcyBhIGN1c3RvbSBlcnJvciBhbmQgd2lsbCBiZSB0aHJvd24gdXAgb24gdW5zdWNjZXNzZnVsIHByb3h5IHJlcXVlc3QgYW5kXG4gKiB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3h5IGZhaWx1cmUuXG4gKiBJbiBjYXNlIG9mIFByb3h5UmVxdWVzdEVycm9yIHNob3VsZCBmZXRjaCB0aGUgYWN0dWFsIGVycm9yIGJ5IGNhbGxpbmcgYGdldEFjdHVhbEVycm9yKClgXG4gKiBmb3IgcHJveHkgZmFpbHVyZSB0byBnZW5lcmF0ZSB0aGUgY2xpZW50IHJlc3BvbnNlLlxuICovXG5jbGFzcyBQcm94eVJlcXVlc3RFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVyciwgcmVzcG9uc2VFcnJvciwgaHR0cFN0YXR1cykge1xuICAgIGxldCByZXNwb25zZUVycm9yT2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKHJlc3BvbnNlRXJyb3IpO1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmopKSB7XG4gICAgICByZXNwb25zZUVycm9yT2JqID0ge307XG4gICAgfVxuICAgIGxldCBvcmlnTWVzc2FnZSA9IF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvcikgPyByZXNwb25zZUVycm9yIDogJyc7XG4gICAgaWYgKCFfLmlzRW1wdHkocmVzcG9uc2VFcnJvck9iaikpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpKSB7XG4gICAgICAgIG9yaWdNZXNzYWdlID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvck9iai52YWx1ZS5tZXNzYWdlKSkge1xuICAgICAgICBvcmlnTWVzc2FnZSA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIoXy5pc0VtcHR5KGVycikgPyBgUHJveHkgcmVxdWVzdCB1bnN1Y2Nlc3NmdWwuICR7b3JpZ01lc3NhZ2V9YCA6IGVycik7XG5cbiAgICB0aGlzLnczY1N0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcblxuICAgIC8vIElmIHRoZSByZXNwb25zZSBlcnJvciBpcyBhbiBvYmplY3QgYW5kIHZhbHVlIGlzIGFuIG9iamVjdCwgaXQncyBhIFczQyBlcnJvciAoZm9yIEpTT05XUCB2YWx1ZSBpcyBhIHN0cmluZylcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaGFzKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUsICdlcnJvcicpKSB7XG4gICAgICB0aGlzLnczYyA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWU7XG4gICAgICB0aGlzLnczY1N0YXR1cyA9IGh0dHBTdGF0dXMgfHwgSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmpzb253cCA9IHJlc3BvbnNlRXJyb3JPYmo7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0dWFsRXJyb3IgKCkge1xuICAgIC8vIElmIGl0J3MgTUpTT05XUCBlcnJvciwgcmV0dXJucyBhY3R1YWwgZXJyb3IgY2F1c2UgZm9yIHJlcXVlc3QgZmFpbHVyZSBiYXNlZCBvbiBganNvbndwLnN0YXR1c2BcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmpzb253cD8uc3RhdHVzKSAmJiB1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwPy52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSh0aGlzLmpzb253cC5zdGF0dXMsIHRoaXMuanNvbndwLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy53M2MpICYmIF8uaXNOdW1iZXIodGhpcy53M2NTdGF0dXMpICYmIHRoaXMudzNjU3RhdHVzID49IDMwMCkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbVczQ0pzb25Db2RlKHRoaXMudzNjLmVycm9yLCB0aGlzLnczYy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSwgdGhpcy53M2Muc3RhY2t0cmFjZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVW5rbm93bkVycm9yKHRoaXMubWVzc2FnZSk7XG4gIH1cbn1cbi8vIG1hcCBvZiBlcnJvciBjbGFzcyBuYW1lIHRvIGVycm9yIGNsYXNzXG5jb25zdCBlcnJvcnMgPSB7Tm90WWV0SW1wbGVtZW50ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLFxuICAgICAgICAgICAgICAgIEJhZFBhcmFtZXRlcnNFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hEcml2ZXJFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hFbGVtZW50RXJyb3IsXG4gICAgICAgICAgICAgICAgVW5rbm93bkNvbW1hbmRFcnJvcixcbiAgICAgICAgICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50Tm90VmlzaWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmtub3duRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvcixcbiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0RXJyb3IsXG4gICAgICAgICAgICAgICAgWFBhdGhMb29rdXBFcnJvcixcbiAgICAgICAgICAgICAgICBUaW1lb3V0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoV2luZG93RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoQ29va2llRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRDb29yZGluYXRlc0Vycm9yLFxuICAgICAgICAgICAgICAgIFVuYWJsZVRvU2V0Q29va2llRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLFxuICAgICAgICAgICAgICAgIE5vQWxlcnRPcGVuRXJyb3IsXG4gICAgICAgICAgICAgICAgU2NyaXB0VGltZW91dEVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvcixcbiAgICAgICAgICAgICAgICBJTUVOb3RBdmFpbGFibGVFcnJvcixcbiAgICAgICAgICAgICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZFNlbGVjdG9yRXJyb3IsXG4gICAgICAgICAgICAgICAgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hBbGVydEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaENvbnRleHRFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQ29udGV4dEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEZyYW1lRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLFxuICAgICAgICAgICAgICAgIFVua25vd25NZXRob2RFcnJvcixcbiAgICAgICAgICAgICAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgIFByb3h5UmVxdWVzdEVycm9yfTtcblxuLy8gbWFwIG9mIGVycm9yIGNvZGUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGpzb253cEVycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmIChFcnJvckNsYXNzLmNvZGUpIHtcbiAgICBqc29ud3BFcnJvckNvZGVNYXBbRXJyb3JDbGFzcy5jb2RlKCldID0gRXJyb3JDbGFzcztcbiAgfVxufVxuXG5jb25zdCB3M2NFcnJvckNvZGVNYXAgPSB7fTtcbmZvciAobGV0IEVycm9yQ2xhc3Mgb2YgXy52YWx1ZXMoZXJyb3JzKSkge1xuICBpZiAoRXJyb3JDbGFzcy5lcnJvcikge1xuICAgIHczY0Vycm9yQ29kZU1hcFtFcnJvckNsYXNzLmVycm9yKCldID0gRXJyb3JDbGFzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1Vua25vd25FcnJvciAoZXJyKSB7XG4gIHJldHVybiAhZXJyLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICFfLnZhbHVlcyhlcnJvcnMpLmZpbmQoZnVuY3Rpb24gZXF1YWxOYW1lcyAoZXJyb3IpIHtcbiAgICAgICAgICAgcmV0dXJuIGVycm9yLm5hbWUgPT09IGVyci5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JUeXBlIChlcnIsIHR5cGUpIHtcbiAgLy8gYG5hbWVgIHByb3BlcnR5IGlzIHRoZSBjb25zdHJ1Y3RvciBuYW1lXG4gIGlmICh0eXBlLm5hbWUgPT09IFByb3RvY29sRXJyb3IubmFtZSkge1xuICAgIC8vIGBqc29ud3BDb2RlYCBpcyBgMGAgb24gc3VjY2Vzc1xuICAgIHJldHVybiAhIWVyci5qc29ud3BDb2RlO1xuICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gUHJveHlSZXF1ZXN0RXJyb3IubmFtZSkge1xuICAgIC8vIGBzdGF0dXNgIGlzIGAwYCBvbiBzdWNjZXNzXG4gICAgaWYgKGVyci5qc29ud3ApIHtcbiAgICAgIHJldHVybiAhIWVyci5qc29ud3Auc3RhdHVzO1xuICAgIH1cblxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZXJyLnczYykpIHtcbiAgICAgIHJldHVybiBfLmlzTnVtYmVyKGVyci53M2NTdGF0dXMpICYmIGVyci53M2NTdGF0dXMgPj0gMzAwO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZXJyLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gTUpTT05XUCBzdGF0dXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlIEpTT05XUCBzdGF0dXMgY29kZVxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSB2YWx1ZSBUaGUgZXJyb3IgbWVzc2FnZSwgb3IgYW4gb2JqZWN0IHdpdGggYSBgbWVzc2FnZWAgcHJvcGVydHlcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9IFRoZSBlcnJvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBwcm92aWRlZCBKU09OV1Agc3RhdHVzIGNvZGVcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUgKGNvZGUsIHZhbHVlID0gJycpIHtcbiAgLy8gaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIHB1bGwgbWVzc2FnZSBmcm9tIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBwbGFpblxuICAvLyB2YWx1ZSwgb3IgZGVmYXVsdCB0byBhbiBlbXB0eSBzdHJpbmcsIGlmIG51bGxcbiAgY29uc3QgbWVzc2FnZSA9ICh2YWx1ZSB8fCB7fSkubWVzc2FnZSB8fCB2YWx1ZSB8fCAnJztcbiAgaWYgKGNvZGUgIT09IFVua25vd25FcnJvci5jb2RlKCkgJiYganNvbndwRXJyb3JDb2RlTWFwW2NvZGVdKSB7XG4gICAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvICR7anNvbndwRXJyb3JDb2RlTWFwW2NvZGVdLm5hbWV9YCk7XG4gICAgcmV0dXJuIG5ldyBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0obWVzc2FnZSk7XG4gIH1cbiAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvIFVua25vd25FcnJvcmApO1xuICByZXR1cm4gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gVzNDIEpTT04gQ29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVzNDIGVycm9yIHN0cmluZyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2hhbmRsaW5nLWVycm9ycyBgSlNPTiBFcnJvciBDb2RlYCBjb2x1bW4pXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHs/c3RyaW5nfSBzdGFja3RyYWNlIGFuIG9wdGlvbmFsIGVycm9yIHN0YWNrdHJhY2VcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9ICBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFczQyBlcnJvciBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tVzNDSnNvbkNvZGUgKGNvZGUsIG1lc3NhZ2UsIHN0YWNrdHJhY2UgPSBudWxsKSB7XG4gIGlmIChjb2RlICYmIHczY0Vycm9yQ29kZU1hcFtjb2RlLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byAke3czY0Vycm9yQ29kZU1hcFtjb2RlLnRvTG93ZXJDYXNlKCldLm5hbWV9YCk7XG4gICAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0obWVzc2FnZSk7XG4gICAgcmVzdWx0RXJyb3Iuc3RhY2t0cmFjZSA9IHN0YWNrdHJhY2U7XG4gICAgcmV0dXJuIHJlc3VsdEVycm9yO1xuICB9XG4gIHczY0xvZy5kZWJ1ZyhgTWF0Y2hlZCBXM0MgZXJyb3IgY29kZSAnJHtjb2RlfScgdG8gVW5rbm93bkVycm9yYCk7XG4gIGNvbnN0IHJlc3VsdEVycm9yID0gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbiAgcmVzdWx0RXJyb3Iuc3RhY2t0cmFjZSA9IHN0YWNrdHJhY2U7XG4gIHJldHVybiByZXN1bHRFcnJvcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBwcm9wZXIgVzNDIEhUVFAgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcn0gZXJyIFRoZSBlcnJvciB0aGF0IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciAoZXJyKSB7XG4gIGxldCBodHRwU3RhdHVzO1xuXG4gIC8vIFczQyBkZWZpbmVkIGVycm9yIG1lc3NhZ2UgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1lcnJvci1jb2RlKVxuICBsZXQgdzNjRXJyb3JTdHJpbmc7XG5cbiAgaWYgKCFlcnIudzNjU3RhdHVzKSB7XG4gICAgZXJyID0gdXRpbC5oYXNWYWx1ZShlcnIuc3RhdHVzKVxuICAgICAgLy8gSWYgaXQncyBhIEpTT05XUCBlcnJvciwgZmluZCBjb3JyZXNwb25kaW5nIGVycm9yXG4gICAgICA/IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGVyci5zdGF0dXMsIGVyci52YWx1ZSlcbiAgICAgIDogbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIHczY0xvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIHczY0Vycm9yU3RyaW5nID0gQmFkUGFyYW1ldGVyc0Vycm9yLmVycm9yKCk7XG4gIH0gZWxzZSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBlcnIuZXJyb3I7XG4gIH1cblxuICBodHRwU3RhdHVzID0gZXJyLnczY1N0YXR1cztcblxuICBpZiAoIXczY0Vycm9yU3RyaW5nKSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBVbmtub3duRXJyb3IuZXJyb3IoKTtcbiAgfVxuXG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICB2YWx1ZToge1xuICAgICAgZXJyb3I6IHczY0Vycm9yU3RyaW5nLFxuICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2ssXG4gICAgfVxuICB9O1xuICByZXR1cm4gW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBhIHByb3BlciBKU09OV1AgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcn0gZXJyIFRoZSBlcnJvciB0byBiZSBjb252ZXJ0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvciAoZXJyKSB7XG4gIGlmIChpc1Vua25vd25FcnJvcihlcnIpKSB7XG4gICAgZXJyID0gbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyKTtcbiAgfVxuICAvLyBNSlNPTldQIGVycm9ycyBhcmUgdXN1YWxseSA1MDAgc3RhdHVzIGNvZGUgc28gc2V0IGl0IHRvIHRoYXQgYnkgZGVmYXVsdFxuICBsZXQgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICBzdGF0dXM6IGVyci5qc29ud3BDb2RlLFxuICAgIHZhbHVlOiB7XG4gICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZVxuICAgIH1cbiAgfTtcblxuICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKSkge1xuICAgIC8vIHJlc3BvbmQgd2l0aCBhIDQwMCBpZiB3ZSBoYXZlIGJhZCBwYXJhbWV0ZXJzXG4gICAgbWpzb253cExvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgaHR0cFJlc0JvZHkgPSBlcnIubWVzc2FnZTtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKSB8fFxuICAgICAgICAgICAgIGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNTAxIGlmIHRoZSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkXG4gICAgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5OT1RfSU1QTEVNRU5URUQ7XG4gIH0gZWxzZSBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNDA0IGlmIHRoZXJlIGlzIG5vIGRyaXZlciBmb3IgdGhlIHNlc3Npb25cbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuXG5cbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbmV4cG9ydCB7XG4gIFByb3RvY29sRXJyb3IsIGVycm9ycywgaXNFcnJvclR5cGUsIGlzVW5rbm93bkVycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG4gIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IsXG59O1xuIl0sImZpbGUiOiJsaWIvcHJvdG9jb2wvZXJyb3JzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -5,7 +5,6 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.JSONWP_SUCCESS_STATUS_CODE = void 0;
|
|
9
8
|
Object.defineProperty(exports, "MJSONWP_ELEMENT_KEY", {
|
|
10
9
|
enumerable: true,
|
|
11
10
|
get: function () {
|
|
@@ -29,10 +28,6 @@ var _helpers = require("../basedriver/helpers");
|
|
|
29
28
|
|
|
30
29
|
var _constants = require("../constants");
|
|
31
30
|
|
|
32
|
-
const JSONWP_SUCCESS_STATUS_CODE = 0;
|
|
33
|
-
exports.JSONWP_SUCCESS_STATUS_CODE = JSONWP_SUCCESS_STATUS_CODE;
|
|
34
|
-
const JSONWP_UNKNOWN_ERROR_STATUS_CODE = 13;
|
|
35
|
-
|
|
36
31
|
function formatResponseValue(resValue) {
|
|
37
32
|
if (_lodash.default.isUndefined(resValue)) {
|
|
38
33
|
return null;
|
|
@@ -41,21 +36,9 @@ function formatResponseValue(resValue) {
|
|
|
41
36
|
return (0, _helpers.duplicateKeys)(resValue, _constants.MJSONWP_ELEMENT_KEY, _constants.W3C_ELEMENT_KEY);
|
|
42
37
|
}
|
|
43
38
|
|
|
44
|
-
function formatStatus(responseBody
|
|
45
|
-
|
|
46
|
-
return responseBody;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const isError = _lodash.default.has(responseBody.value, 'error') || responseCode >= 400;
|
|
50
|
-
|
|
51
|
-
if (protocol === _constants.PROTOCOLS.MJSONWP && !_lodash.default.isInteger(responseBody.status) || !protocol && !_lodash.default.has(responseBody, 'status')) {
|
|
52
|
-
responseBody.status = isError ? JSONWP_UNKNOWN_ERROR_STATUS_CODE : JSONWP_SUCCESS_STATUS_CODE;
|
|
53
|
-
} else if (protocol === _constants.PROTOCOLS.W3C && _lodash.default.has(responseBody, 'status')) {
|
|
54
|
-
delete responseBody.status;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return responseBody;
|
|
39
|
+
function formatStatus(responseBody) {
|
|
40
|
+
return _lodash.default.isPlainObject(responseBody) ? _lodash.default.omit(responseBody, ['status']) : responseBody;
|
|
58
41
|
}require('source-map-support').install();
|
|
59
42
|
|
|
60
43
|
|
|
61
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm90b2NvbC9oZWxwZXJzLmpzIl0sIm5hbWVzIjpbImZvcm1hdFJlc3BvbnNlVmFsdWUiLCJyZXNWYWx1ZSIsIl8iLCJpc1VuZGVmaW5lZCIsIk1KU09OV1BfRUxFTUVOVF9LRVkiLCJXM0NfRUxFTUVOVF9LRVkiLCJmb3JtYXRTdGF0dXMiLCJyZXNwb25zZUJvZHkiLCJpc1BsYWluT2JqZWN0Iiwib21pdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBV0EsU0FBU0EsbUJBQVQsQ0FBOEJDLFFBQTlCLEVBQXdDO0FBQ3RDLE1BQUlDLGdCQUFFQyxXQUFGLENBQWNGLFFBQWQsQ0FBSixFQUE2QjtBQUUzQixXQUFPLElBQVA7QUFDRDs7QUFHRCxTQUFPLDRCQUFjQSxRQUFkLEVBQXdCRyw4QkFBeEIsRUFBNkNDLDBCQUE3QyxDQUFQO0FBQ0Q7O0FBU0QsU0FBU0MsWUFBVCxDQUF1QkMsWUFBdkIsRUFBcUM7QUFDbkMsU0FBT0wsZ0JBQUVNLGFBQUYsQ0FBZ0JELFlBQWhCLElBQWdDTCxnQkFBRU8sSUFBRixDQUFPRixZQUFQLEVBQXFCLENBQUMsUUFBRCxDQUFyQixDQUFoQyxHQUFtRUEsWUFBMUU7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBkdXBsaWNhdGVLZXlzIH0gZnJvbSAnLi4vYmFzZWRyaXZlci9oZWxwZXJzJztcbmltcG9ydCB7IE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbi8qKlxuICogUHJlcHJvY2Vzc2VzIHRoZSByZXN1bHRpbmcgdmFsdWUgZm9yIEFQSSByZXNwb25zZXMsXG4gKiBzbyB0aGV5IGhhdmUga2V5cyBmb3IgYm90aCBXM0MgYW5kIEpTT05XUCBwcm90b2NvbHMuXG4gKiBUaGUgYXJndW1lbnQgdmFsdWUgaXMgTk9UIG11dGF0ZWRcbiAqXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc1ZhbHVlIFRoZSBhY3R1YWwgcmVzcG9uc2UgdmFsdWVcbiAqIEByZXR1cm5zIHs/T2JqZWN0fSBFaXRoZXIgbW9kaWZpZWQgdmFsdWUgb3IgdGhlIHNhbWUgb25lIGlmXG4gKiBub3RoaW5nIGhhcyBiZWVuIG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFJlc3BvbnNlVmFsdWUgKHJlc1ZhbHVlKSB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHJlc1ZhbHVlKSkge1xuICAgIC8vIGNvbnZlcnQgdW5kZWZpbmVkIHRvIG51bGxcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBJZiB0aGUgTUpTT05XUCBlbGVtZW50IGtleSBmb3JtYXQgKEVMRU1FTlQpIHdhcyBwcm92aWRlZCwgYWRkIGEgZHVwbGljYXRlIGtleSAoZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2YpXG4gIC8vIElmIHRoZSBXM0MgZWxlbWVudCBrZXkgZm9ybWF0IChlbGVtZW50LTYwNjYtMTFlNC1hNTJlLTRmNzM1NDY2Y2VjZikgd2FzIHByb3ZpZGVkLCBhZGQgYSBkdXBsaWNhdGUga2V5IChFTEVNRU5UKVxuICByZXR1cm4gZHVwbGljYXRlS2V5cyhyZXNWYWx1ZSwgTUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZKTtcbn1cblxuLyoqXG4gKiBQcm9wZXJseSBmb3JtYXRzIHRoZSBzdGF0dXMgZm9yIEFQSSByZXNwb25zZXMsXG4gKiBzbyB0aGV5IGFyZSBjb3JyZWN0IGZvciB0aGUgVzNDIHByb3RvY29sLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZUJvZHlcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBmaXhlZCByZXNwb25zZSBib2R5XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFN0YXR1cyAocmVzcG9uc2VCb2R5KSB7XG4gIHJldHVybiBfLmlzUGxhaW5PYmplY3QocmVzcG9uc2VCb2R5KSA/IF8ub21pdChyZXNwb25zZUJvZHksIFsnc3RhdHVzJ10pIDogcmVzcG9uc2VCb2R5O1xufVxuXG5cbmV4cG9ydCB7XG4gIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSwgZm9ybWF0UmVzcG9uc2VWYWx1ZSwgZm9ybWF0U3RhdHVzXG59O1xuIl0sImZpbGUiOiJsaWIvcHJvdG9jb2wvaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|