@dbx-tools/databricks 0.6.72 → 0.6.73

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.
@@ -272,9 +272,15 @@ export class DatabricksFileSystem extends BaseFileSystem {
272
272
  if (handle === undefined) {
273
273
  throw new FileSystemError("IO_ERROR", "DBFS upload handle missing", absolutePath);
274
274
  }
275
- for (let offset = 0; offset < buffer.length; offset += DBFS_PUT_MAX_BYTES) {
276
- const slice = buffer.subarray(offset, offset + DBFS_PUT_MAX_BYTES);
277
- await client.dbfs.addBlock({ handle, data: slice.toString("base64") });
275
+ try {
276
+ for (let offset = 0; offset < buffer.length; offset += DBFS_PUT_MAX_BYTES) {
277
+ const slice = buffer.subarray(offset, offset + DBFS_PUT_MAX_BYTES);
278
+ await client.dbfs.addBlock({ handle, data: slice.toString("base64") });
279
+ }
280
+ }
281
+ catch (err) {
282
+ await client.dbfs.close({ handle }).catch(() => undefined);
283
+ throw err;
278
284
  }
279
285
  await client.dbfs.close({ handle });
280
286
  }
@@ -318,4 +324,4 @@ function bufferToReadableStream(buffer) {
318
324
  },
319
325
  });
320
326
  }
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy1mcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYnJpY2tzLWZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFHSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFDTCxjQUFjLEVBQ2QsTUFBTSxFQUNOLGVBQWUsRUFDZixTQUFTLEdBS1YsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IscUJBQXFCLEdBRXRCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUV2QyxtRkFBbUY7QUFDbkYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUErQzVCOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUE0QjtJQUM1RCxNQUFNLENBQThCO0lBQzNCLFlBQVksQ0FBOEI7SUFFM0QsWUFBWSxPQUFvQztRQUM5QyxNQUFNLElBQUksR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLEtBQUssQ0FBQztZQUNKLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLGNBQWMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRCxPQUFPLEVBQUUsWUFBWTtZQUNyQixJQUFJO1lBQ0osUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLFVBQVUsRUFB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QUFDO0FBQ3JDLENBQUM7QUFFRCxLQUFLLFVBQVUsZ0JBQWdCLENBQzdCLFFBQTJEO0lBRTNELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO0lBQ2hDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVDLElBQUksSUFBSTtZQUFFLE1BQU07UUFDaEIsSUFBSSxLQUFLO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLE1BQWM7SUFDNUMsT0FBTyxJQUFJLGNBQWMsQ0FBYTtRQUNwQyxLQUFLLENBQUMsVUFBVTtZQUNkLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMzQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckIsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGFicmlja3Mge0BsaW5rIEZpbGVTeXN0ZW19IGJhY2tlZCBieSB7QGxpbmsgV29ya3NwYWNlQ2xpZW50fS5cbiAqXG4gKiBFeHRlbmRzIHtAbGluayBCYXNlRmlsZVN5c3RlbX0uIFJvdXRlcyBJL08gYnkgYWJzb2x1dGUgcGF0aDpcbiAqIC0gYC9Xb3Jrc3BhY2VgLCBgL1VzZXJzYCwgYC9SZXBvc2AsIGAvU2hhcmVkYCDihpIgd29ya3NwYWNlIG9iamVjdHMgQVBJXG4gKiAtIGAvVm9sdW1lcy8uLi5gIChvciBgY2F0YWxvZy5zY2hlbWEudm9sdW1lYCByb290cykg4oaSIFVuaXR5IENhdGFsb2cgRmlsZXMgQVBJXG4gKiAtIGAvZGJmcy8uLi5gIOKGkiBEQkZTIEFQSVxuICpcbiAqIEV2ZXJ5IHByaW1pdGl2ZSBwaWNrcyBpdHMgQVBJIHRocm91Z2gge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtLmRpc3BhdGNofVxuICogcmF0aGVyIHRoYW4gcmUtYnJhbmNoaW5nIGJ5IGhhbmQsIGFuZCBlcnJvciBub3JtYWxpemF0aW9uIGlzIGluaGVyaXRlZCBmcm9tXG4gKiB7QGxpbmsgQmFzZUZpbGVTeXN0ZW19LCBzbyBhIHByaW1pdGl2ZSBoZXJlIGlzIGp1c3QgdGhlIFNESyBjYWxsLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbFwiO1xuaW1wb3J0IHsgaGFzaCwgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIEJhc2VGaWxlU3lzdGVtLFxuICBiYXNlRlMsXG4gIEZpbGVTeXN0ZW1FcnJvcixcbiAgcG9zaXhQYXRoLFxuICB0eXBlIENvcHlPcHRpb25zLFxuICB0eXBlIEZpbGVFbnRyeSxcbiAgdHlwZSBGaWxlU3RhdCxcbiAgdHlwZSBXcml0ZUZpbGVPcHRpb25zLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZnNcIjtcbmltcG9ydCB7XG4gIGlzSG9tZVJlbGF0aXZlUGF0aCxcbiAgbm9ybWFsaXplRGF0YWJyaWNrc1Jvb3QsXG4gIHJlc29sdmVEYXRhYnJpY2tzRmlsZXNCYWNrZW5kLFxuICByZXNvbHZlRGF0YWJyaWNrc1Jvb3QsXG4gIHR5cGUgRGF0YWJyaWNrc0ZpbGVzQmFja2VuZCxcbn0gZnJvbSBcIi4vZGF0YWJyaWNrcy1wYXRoLnRzXCI7XG5pbXBvcnQgeyBnZXRXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiLi93b3Jrc3BhY2UudHNcIjtcblxuY29uc3QgREJGU19SRUFEX0NIVU5LX0JZVEVTID0gMTAyNCAqIDEwMjQ7XG5jb25zdCBEQkZTX1BVVF9NQVhfQllURVMgPSAxMDI0ICogMTAyNDtcblxuLyoqIFNlZ21lbnRzIGluIGAvVm9sdW1lcy88Y2F0YWxvZz4vPHNjaGVtYT4vPHZvbHVtZT5gLCBwcm92aXNpb25lZCBvdXQgb2YgYmFuZC4gKi9cbmNvbnN0IFZPTFVNRV9ST09UX0RFUFRIID0gNDtcblxuLyoqXG4gKiBPbmUgaGFuZGxlciBwZXIgRGF0YWJyaWNrcyBBUEksIGtleWVkIGJ5IHtAbGluayBEYXRhYnJpY2tzRmlsZXNCYWNrZW5kfSBzb1xuICogYWRkaW5nIGEgYmFja2VuZCBpcyBhIGNvbXBpbGUgZXJyb3IgdW50aWwgZXZlcnkgY2FsbCBzaXRlIGhhbmRsZXMgaXQuXG4gKi9cbnR5cGUgQmFja2VuZEhhbmRsZXJzPFQ+ID0gUmVjb3JkPERhdGFicmlja3NGaWxlc0JhY2tlbmQsIChjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCkgPT4gUHJvbWlzZTxUPj47XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW19LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzRmlsZVN5c3RlbU9wdGlvbnMge1xuICAvKiogVW5pcXVlIGlkZW50aWZpZXIuIERlZmF1bHRzIHRvIGEgc3RhYmxlIGhhc2ggb2YgdGhlIG5vcm1hbGl6ZWQgcm9vdC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGVzeXN0ZW0gcm9vdC4gQWNjZXB0czpcbiAgICogLSBgL1ZvbHVtZXMvY2F0YWxvZy9zY2hlbWEvdm9sdW1lYCAoYWxzbyBgL1ZvbHVtZS8uLi5gKVxuICAgKiAtIGBjYXRhbG9nLnNjaGVtYS52b2x1bWVgXG4gICAqIC0gYH5gIC8gYH4vLi4uYCDihpIgYC9Xb3Jrc3BhY2UvVXNlcnMvPHVzZXJOYW1lPi8uLi5gIChuZWVkcyB7QGxpbmsgdXNlck5hbWV9LFxuICAgKiAgIG9yIHVzZSB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0uY3JlYXRlfSlcbiAgICogLSBgL1dvcmtzcGFjZS8uLi5gLCBgL1VzZXJzLy4uLmAsIGAvUmVwb3MvLi4uYCwgYC9TaGFyZWQvLi4uYFxuICAgKiAtIGAvZGJmcy8uLi5gXG4gICAqL1xuICByb290OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXJuYW1lIGZvciBleHBhbmRpbmcgYH5gLiBXaGVuIG9taXR0ZWQgYW5kIHtAbGluayByb290fSBpcyBob21lLXJlbGF0aXZlLFxuICAgKiBwcmVmZXIge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtLmNyZWF0ZX0gd2hpY2ggcmVzb2x2ZXMgaXQgdmlhXG4gICAqIGBnZXRDdXJyZW50VXNlck5hbWVgLlxuICAgKi9cbiAgdXNlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGFicmlja3Mgd29ya3NwYWNlIGNsaWVudC4gRGVmYXVsdHMgdG8gYHRyeUdldFdvcmtzcGFjZUNsaWVudCgpYCwgb3RoZXJ3aXNlXG4gICAqIGEgZGVmYXVsdCB7QGxpbmsgV29ya3NwYWNlQ2xpZW50fSBmcm9tIGVudiAvIHByb2ZpbGUgYXV0aC5cbiAgICovXG4gIGNsaWVudD86IFdvcmtzcGFjZUNsaWVudDtcblxuICAvKiogQmxvY2sgYWxsIHdyaXRlIG9wZXJhdGlvbnMuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB7QGxpbmsgcm9vdH0gKGFuZCBwYXJlbnRzKSBkdXJpbmcgaW5pdC4gRGVmYXVsdHMgdG8gZmFsc2UgKHZvbHVtZVxuICAgKiBhbmQgd29ya3NwYWNlIHJvb3RzIGFyZSB1c3VhbGx5IHByb3Zpc2lvbmVkIG91dCBvZiBiYW5kKS5cbiAgICovXG4gIGNyZWF0ZVJvb3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIHtAbGluayBGaWxlU3lzdGVtfSBpbXBsZW1lbnRhdGlvbiBvdmVyIERhdGFicmlja3Mgd29ya3NwYWNlIGZpbGVzLCBVQ1xuICogdm9sdW1lcywgYW5kIERCRlMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBmcyA9IG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbSh7IHJvb3Q6IFwibWFpbi5kZWZhdWx0LmFzc2V0c1wiIH0pO1xuICogYXdhaXQgZnMud3JpdGVGaWxlKFwibm90ZXMvaGVsbG8udHh0XCIsIFwiaGlcIik7XG4gKlxuICogY29uc3QgaG9tZSA9IGF3YWl0IERhdGFicmlja3NGaWxlU3lzdGVtLmNyZWF0ZSh7IHJvb3Q6IFwiflwiIH0pO1xuICogY29uc3QgbGlzdGluZyA9IGF3YWl0IGhvbWUucmVhZGRpcihcIi5cIik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFicmlja3NGaWxlU3lzdGVtIGV4dGVuZHMgQmFzZUZpbGVTeXN0ZW08XCJkYXRhYnJpY2tzXCI+IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnRPcHRpb246IFdvcmtzcGFjZUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEYXRhYnJpY2tzRmlsZVN5c3RlbU9wdGlvbnMpIHtcbiAgICBjb25zdCByb290ID0gbm9ybWFsaXplRGF0YWJyaWNrc1Jvb3Qob3B0aW9ucy5yb290LCB7IHVzZXJOYW1lOiBvcHRpb25zLnVzZXJOYW1lIH0pO1xuICAgIHN1cGVyKHtcbiAgICAgIGlkOiBvcHRpb25zLmlkID8/IGBkYXRhYnJpY2tzLSR7aGFzaC5mbnZIYXNoKHJvb3QpfWAsXG4gICAgICBiYWNrZW5kOiBcImRhdGFicmlja3NcIixcbiAgICAgIHJvb3QsXG4gICAgICByZWFkT25seTogb3B0aW9ucy5yZWFkT25seSxcbiAgICAgIGNyZWF0ZVJvb3Q6IG9wdGlvbnMuY3JlYXRlUm9vdCA/PyBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmNsaWVudE9wdGlvbiA9IG9wdGlvbnMuY2xpZW50O1xuICAgIHRoaXMuY2xpZW50ID0gb3B0aW9ucy5jbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfSwgcmVzb2x2aW5nIGB+YCByb290cyB2aWEgdGhlXG4gICAqIHdvcmtzcGFjZSBjdXJyZW50IHVzZXIgd2hlbiBuZWVkZWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdGlvbnM6IERhdGFicmlja3NGaWxlU3lzdGVtT3B0aW9ucyk6IFByb21pc2U8RGF0YWJyaWNrc0ZpbGVTeXN0ZW0+IHtcbiAgICBpZiAoIWlzSG9tZVJlbGF0aXZlUGF0aChvcHRpb25zLnJvb3QpIHx8IG9wdGlvbnMudXNlck5hbWU/LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbShvcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgY2xpZW50ID0gb3B0aW9ucy5jbGllbnQgPz8gKGF3YWl0IGdldFdvcmtzcGFjZUNsaWVudCgpKTtcbiAgICBjb25zdCByb290ID0gYXdhaXQgcmVzb2x2ZURhdGFicmlja3NSb290KG9wdGlvbnMucm9vdCwgeyBjbGllbnQgfSk7XG4gICAgcmV0dXJuIG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbSh7IC4uLm9wdGlvbnMsIHJvb3QsIGNsaWVudCB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBvbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jbGllbnQgPSB0aGlzLmNsaWVudE9wdGlvbiA/PyAoYXdhaXQgZ2V0V29ya3NwYWNlQ2xpZW50KCkpO1xuICB9XG5cbiAgLyoqIFJ1biB0aGUgaGFuZGxlciBmb3IgYGFic29sdXRlUGF0aGAncyBEYXRhYnJpY2tzIEFQSSB3aXRoIHRoZSBsaXZlIGNsaWVudC4gKi9cbiAgcHJpdmF0ZSBkaXNwYXRjaDxUPihhYnNvbHV0ZVBhdGg6IHN0cmluZywgaGFuZGxlcnM6IEJhY2tlbmRIYW5kbGVyczxUPik6IFByb21pc2U8VD4ge1xuICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgIFwiSU9fRVJST1JcIixcbiAgICAgICAgXCJEYXRhYnJpY2tzIGZpbGVzeXN0ZW0gaXMgbm90IGluaXRpYWxpemVkIChubyBXb3Jrc3BhY2VDbGllbnQpXCIsXG4gICAgICAgIGFic29sdXRlUGF0aCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyc1tyZXNvbHZlRGF0YWJyaWNrc0ZpbGVzQmFja2VuZChhYnNvbHV0ZVBhdGgpXSh0aGlzLmNsaWVudCk7XG4gIH1cblxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgLyogUHJpbWl0aXZlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBjcmVhdGVSb290RGlyZWN0b3J5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlRGlyZWN0b3J5QXQodGhpcy5yb290KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyByZWFkQnl0ZXNBdChyZXNvbHZlZFBhdGg6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuZGlzcGF0Y2g8QnVmZmVyPihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+IHRoaXMucmVhZERiZnNGaWxlKGNsaWVudCwgcmVzb2x2ZWRQYXRoKSxcbiAgICAgIHdvcmtzcGFjZTogYXN5bmMgKGNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC53b3Jrc3BhY2UuZXhwb3J0KHsgcGF0aDogcmVzb2x2ZWRQYXRoLCBmb3JtYXQ6IFwiQVVUT1wiIH0pO1xuICAgICAgICByZXR1cm4gZGVjb2RlQmFzZTY0KHJlc3BvbnNlLmNvbnRlbnQpO1xuICAgICAgfSxcbiAgICAgIHZvbHVtZXM6IGFzeW5jIChjbGllbnQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZmlsZXMuZG93bmxvYWQoeyBmaWxlX3BhdGg6IHJlc29sdmVkUGF0aCB9KTtcbiAgICAgICAgcmV0dXJuIHJlYWRSZXNwb25zZUJvZHkoXG4gICAgICAgICAgcmVzcG9uc2UuY29udGVudHMgYXMgZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB8IHVuZGVmaW5lZCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgd3JpdGVCeXRlc0F0KFxuICAgIHJlc29sdmVkUGF0aDogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IFVpbnQ4QXJyYXksXG4gICAgb3B0aW9uczogUmVxdWlyZWQ8V3JpdGVGaWxlT3B0aW9ucz4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGNvbnRlbnQpO1xuICAgIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdGlvbnMub3ZlcndyaXRlO1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2g8dW5rbm93bj4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PiB0aGlzLndyaXRlRGJmc0ZpbGUoY2xpZW50LCByZXNvbHZlZFBhdGgsIGJ1ZmZlciwgb3ZlcndyaXRlKSxcbiAgICAgIHdvcmtzcGFjZTogKGNsaWVudCkgPT5cbiAgICAgICAgY2xpZW50LndvcmtzcGFjZS5pbXBvcnQoe1xuICAgICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgICBmb3JtYXQ6IFwiQVVUT1wiLFxuICAgICAgICAgIGNvbnRlbnQ6IGJ1ZmZlci50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgICBvdmVyd3JpdGUsXG4gICAgICAgIH0pLFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT5cbiAgICAgICAgY2xpZW50LmZpbGVzLnVwbG9hZCh7XG4gICAgICAgICAgZmlsZV9wYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgICAgY29udGVudHM6IGJ1ZmZlclRvUmVhZGFibGVTdHJlYW0oYnVmZmVyKSBhcyBuZXZlcixcbiAgICAgICAgICBvdmVyd3JpdGUsXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZUZpbGVBdChyZXNvbHZlZFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2g8dW5rbm93bj4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PiBjbGllbnQuZGJmcy5kZWxldGUoeyBwYXRoOiByZXNvbHZlZFBhdGgsIHJlY3Vyc2l2ZTogZmFsc2UgfSksXG4gICAgICB3b3Jrc3BhY2U6IChjbGllbnQpID0+IGNsaWVudC53b3Jrc3BhY2UuZGVsZXRlKHsgcGF0aDogcmVzb2x2ZWRQYXRoLCByZWN1cnNpdmU6IGZhbHNlIH0pLFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT4gY2xpZW50LmZpbGVzLmRlbGV0ZSh7IGZpbGVfcGF0aDogcmVzb2x2ZWRQYXRoIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZURpcmVjdG9yeUF0KHJlc29sdmVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaDx1bmtub3duPihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+IGNsaWVudC5kYmZzLm1rZGlycyh7IHBhdGg6IHJlc29sdmVkUGF0aCB9KSxcbiAgICAgIHdvcmtzcGFjZTogKGNsaWVudCkgPT4gY2xpZW50LndvcmtzcGFjZS5ta2RpcnMoeyBwYXRoOiByZXNvbHZlZFBhdGggfSksXG4gICAgICB2b2x1bWVzOiAoY2xpZW50KSA9PiB0aGlzLmNyZWF0ZVZvbHVtZURpcmVjdG9yaWVzKGNsaWVudCwgcmVzb2x2ZWRQYXRoKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyByZW1vdmVEaXJlY3RvcnlBdChyZXNvbHZlZFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2g8dW5rbm93bj4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiAoY2xpZW50KSA9PiBjbGllbnQuZGJmcy5kZWxldGUoeyBwYXRoOiByZXNvbHZlZFBhdGgsIHJlY3Vyc2l2ZTogZmFsc2UgfSksXG4gICAgICB3b3Jrc3BhY2U6IChjbGllbnQpID0+IGNsaWVudC53b3Jrc3BhY2UuZGVsZXRlKHsgcGF0aDogcmVzb2x2ZWRQYXRoLCByZWN1cnNpdmU6IGZhbHNlIH0pLFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT4gY2xpZW50LmZpbGVzLmRlbGV0ZURpcmVjdG9yeSh7IGRpcmVjdG9yeV9wYXRoOiByZXNvbHZlZFBhdGggfSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgbGlzdERpcmVjdG9yeUF0KHJlc29sdmVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTxGaWxlRW50cnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoPEZpbGVFbnRyeVtdPihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+XG4gICAgICAgIGNvbGxlY3QoY2xpZW50LmRiZnMubGlzdCh7IHBhdGg6IHJlc29sdmVkUGF0aCB9KSwgKGluZm8pID0+ICh7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyBcIlwiKSxcbiAgICAgICAgICB0eXBlOiBpbmZvLmlzX2RpciA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIixcbiAgICAgICAgICBzaXplOiBpbmZvLmZpbGVfc2l6ZSxcbiAgICAgICAgfSkpLFxuICAgICAgd29ya3NwYWNlOiAoY2xpZW50KSA9PlxuICAgICAgICBjb2xsZWN0KGNsaWVudC53b3Jrc3BhY2UubGlzdCh7IHBhdGg6IHJlc29sdmVkUGF0aCB9KSwgKGluZm8pID0+ICh7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyBcIlwiKSxcbiAgICAgICAgICB0eXBlOiBpbmZvLm9iamVjdF90eXBlID09PSBcIkRJUkVDVE9SWVwiID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgICAgICB9KSksXG4gICAgICB2b2x1bWVzOiAoY2xpZW50KSA9PlxuICAgICAgICBjb2xsZWN0KGNsaWVudC5maWxlcy5saXN0RGlyZWN0b3J5Q29udGVudHMoeyBkaXJlY3RvcnlfcGF0aDogcmVzb2x2ZWRQYXRoIH0pLCAoZW50cnkpID0+ICh7XG4gICAgICAgICAgbmFtZTogZW50cnkubmFtZSA/PyBwb3NpeFBhdGguYmFzZW5hbWUoZW50cnkucGF0aCA/PyBcIlwiKSxcbiAgICAgICAgICB0eXBlOiBlbnRyeS5pc19kaXJlY3RvcnkgPyBcImRpcmVjdG9yeVwiIDogXCJmaWxlXCIsXG4gICAgICAgICAgc2l6ZTogZW50cnkuZmlsZV9zaXplLFxuICAgICAgICB9KSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgc3RhdEF0KHJlc29sdmVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTxPbWl0PEZpbGVTdGF0LCBcInBhdGhcIj4+IHtcbiAgICBjb25zdCBmYWxsYmFja05hbWUgPSBwb3NpeFBhdGguYmFzZW5hbWUocmVzb2x2ZWRQYXRoKSB8fCBwb3NpeFBhdGguYmFzZW5hbWUodGhpcy5yb290KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaDxPbWl0PEZpbGVTdGF0LCBcInBhdGhcIj4+KHJlc29sdmVkUGF0aCwge1xuICAgICAgZGJmczogYXN5bmMgKGNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgY2xpZW50LmRiZnMuZ2V0U3RhdHVzKHsgcGF0aDogcmVzb2x2ZWRQYXRoIH0pO1xuICAgICAgICBjb25zdCBtb2RpZmllZCA9IG9iamVjdC50b0RhdGUoaW5mby5tb2RpZmljYXRpb25fdGltZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyByZXNvbHZlZFBhdGgpIHx8IGZhbGxiYWNrTmFtZSxcbiAgICAgICAgICB0eXBlOiBpbmZvLmlzX2RpciA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIixcbiAgICAgICAgICBzaXplOiBpbmZvLmZpbGVfc2l6ZSxcbiAgICAgICAgICBjcmVhdGVkQXQ6IG1vZGlmaWVkLFxuICAgICAgICAgIG1vZGlmaWVkQXQ6IG1vZGlmaWVkLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHdvcmtzcGFjZTogYXN5bmMgKGNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgY2xpZW50LndvcmtzcGFjZS5nZXRTdGF0dXMoeyBwYXRoOiByZXNvbHZlZFBhdGggfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcG9zaXhQYXRoLmJhc2VuYW1lKGluZm8ucGF0aCA/PyByZXNvbHZlZFBhdGgpIHx8IGZhbGxiYWNrTmFtZSxcbiAgICAgICAgICB0eXBlOiBpbmZvLm9iamVjdF90eXBlID09PSBcIkRJUkVDVE9SWVwiID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgICAgICAgIGNyZWF0ZWRBdDogb2JqZWN0LnRvRGF0ZShpbmZvLmNyZWF0ZWRfYXQpLFxuICAgICAgICAgIG1vZGlmaWVkQXQ6IG9iamVjdC50b0RhdGUoaW5mby5tb2RpZmllZF9hdCksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgdm9sdW1lczogKGNsaWVudCkgPT4gdGhpcy5zdGF0Vm9sdW1lUGF0aChjbGllbnQsIHJlc29sdmVkUGF0aCwgZmFsbGJhY2tOYW1lKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB0cnlNb3ZlRmlsZUF0KFxuICAgIHNvdXJjZVBhdGg6IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvblBhdGg6IHN0cmluZyxcbiAgICBfb3B0aW9uczogUmVxdWlyZWQ8Q29weU9wdGlvbnM+LFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBPbmx5IERCRlMgZXhwb3NlcyBhIHNlcnZlci1zaWRlIG1vdmU7IGV2ZXJ5dGhpbmcgZWxzZSBmYWxscyBiYWNrIHRvIHRoZVxuICAgIC8vIHBvcnRhYmxlIGNvcHkgKyBkZWxldGUgaW4gQmFzZUZpbGVTeXN0ZW0uXG4gICAgaWYgKFxuICAgICAgcmVzb2x2ZURhdGFicmlja3NGaWxlc0JhY2tlbmQoc291cmNlUGF0aCkgIT09IFwiZGJmc1wiIHx8XG4gICAgICByZXNvbHZlRGF0YWJyaWNrc0ZpbGVzQmFja2VuZChkZXN0aW5hdGlvblBhdGgpICE9PSBcImRiZnNcIlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoPHVua25vd24+KHNvdXJjZVBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+XG4gICAgICAgIGNsaWVudC5kYmZzLm1vdmUoeyBzb3VyY2VfcGF0aDogc291cmNlUGF0aCwgZGVzdGluYXRpb25fcGF0aDogZGVzdGluYXRpb25QYXRoIH0pLFxuICAgICAgd29ya3NwYWNlOiB1bnJlYWNoYWJsZUJhY2tlbmQsXG4gICAgICB2b2x1bWVzOiB1bnJlYWNoYWJsZUJhY2tlbmQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgLyogQmFja2VuZC1zcGVjaWZpYyBJL08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gIC8qKlxuICAgKiBVQyBgY3JlYXRlRGlyZWN0b3J5YCBpcyBzaW5nbGUtbGV2ZWwsIHNvIHdhbGsgdGhlIHBhdGggY3JlYXRpbmcgZWFjaCBsZXZlbFxuICAgKiBiZWxvdyB0aGUgdm9sdW1lIGl0c2VsZi4gQSBsZXZlbCB0aGF0IGFscmVhZHkgZXhpc3RzIGlzIG5vdCBhbiBlcnJvci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVm9sdW1lRGlyZWN0b3JpZXMoXG4gICAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gICAgYWJzb2x1dGVQYXRoOiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcnRzID0gYWJzb2x1dGVQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgbGV0IGN1cnJlbnQgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1cnJlbnQgPSBgJHtjdXJyZW50fS8ke3BhcnRzW2ldfWA7XG4gICAgICBpZiAoaSA8IFZPTFVNRV9ST09UX0RFUFRIKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNsaWVudC5maWxlcy5jcmVhdGVEaXJlY3RvcnkoeyBkaXJlY3RvcnlfcGF0aDogY3VycmVudCB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBBbHJlYWR5IHByZXNlbnQgaXMgZmluZTsgYW55dGhpbmcgZWxzZSBpcyBhIHJlYWwgZmFpbHVyZS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuZmlsZXMuZ2V0RGlyZWN0b3J5TWV0YWRhdGEoeyBkaXJlY3RvcnlfcGF0aDogY3VycmVudCB9KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXQgYSBVQyBwYXRoOiBmaWxlIG1ldGFkYXRhIGZpcnN0LCB0aGVuIGEgZGlyZWN0b3J5IHByb2JlLiAqL1xuICBwcml2YXRlIGFzeW5jIHN0YXRWb2x1bWVQYXRoKFxuICAgIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICAgIGFic29sdXRlUGF0aDogc3RyaW5nLFxuICAgIGZhbGxiYWNrTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPE9taXQ8RmlsZVN0YXQsIFwicGF0aFwiPj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGNsaWVudC5maWxlcy5nZXRNZXRhZGF0YSh7IGZpbGVfcGF0aDogYWJzb2x1dGVQYXRoIH0pO1xuICAgICAgY29uc3QgbW9kaWZpZWQgPSBvYmplY3QudG9EYXRlKG1ldGFkYXRhW1wibGFzdC1tb2RpZmllZFwiXSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmYWxsYmFja05hbWUsXG4gICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICBzaXplOiBOdW1iZXIobWV0YWRhdGFbXCJjb250ZW50LWxlbmd0aFwiXSA/PyAwKSxcbiAgICAgICAgY3JlYXRlZEF0OiBtb2RpZmllZCxcbiAgICAgICAgbW9kaWZpZWRBdDogbW9kaWZpZWQsXG4gICAgICAgIG1pbWVUeXBlOiBtZXRhZGF0YVtcImNvbnRlbnQtdHlwZVwiXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZmlsZUVycikge1xuICAgICAgLy8gQSBkaXJlY3RvcnkgaGFzIG5vIGZpbGUgbWV0YWRhdGEsIGFuZCBhbiB1bnJlYWRhYmxlIG9uZSByZXBvcnRzIGFzXG4gICAgICAvLyBtaXNzaW5nIC8gZGVuaWVkIC0gYm90aCBhcmUgd29ydGggYSBkaXJlY3RvcnkgcHJvYmUgYmVmb3JlIGZhaWxpbmcuXG4gICAgICBjb25zdCBjb2RlID0gYmFzZUZTLm1hcEZpbGVTeXN0ZW1FcnJvcihmaWxlRXJyLCBhYnNvbHV0ZVBhdGgpLmNvZGU7XG4gICAgICBpZiAoY29kZSAhPT0gXCJOT1RfRk9VTkRcIiAmJiBjb2RlICE9PSBcIlBFUk1JU1NJT05fREVOSUVEXCIpIHRocm93IGZpbGVFcnI7XG4gICAgICBhd2FpdCBjbGllbnQuZmlsZXMuZ2V0RGlyZWN0b3J5TWV0YWRhdGEoeyBkaXJlY3RvcnlfcGF0aDogYWJzb2x1dGVQYXRoIH0pO1xuICAgICAgcmV0dXJuIHsgbmFtZTogZmFsbGJhY2tOYW1lLCB0eXBlOiBcImRpcmVjdG9yeVwiIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkRGJmc0ZpbGUoY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsIGFic29sdXRlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmRiZnMucmVhZCh7XG4gICAgICAgIHBhdGg6IGFic29sdXRlUGF0aCxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBsZW5ndGg6IERCRlNfUkVBRF9DSFVOS19CWVRFUyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2h1bmsgPSBkZWNvZGVCYXNlNjQocmVzcG9uc2UuZGF0YSk7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSBicmVhaztcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoIDwgREJGU19SRUFEX0NIVU5LX0JZVEVTKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JpdGVEYmZzRmlsZShcbiAgICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgICBhYnNvbHV0ZVBhdGg6IHN0cmluZyxcbiAgICBidWZmZXI6IEJ1ZmZlcixcbiAgICBvdmVyd3JpdGU6IGJvb2xlYW4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChidWZmZXIubGVuZ3RoIDw9IERCRlNfUFVUX01BWF9CWVRFUykge1xuICAgICAgYXdhaXQgY2xpZW50LmRiZnMucHV0KHtcbiAgICAgICAgcGF0aDogYWJzb2x1dGVQYXRoLFxuICAgICAgICBjb250ZW50czogYnVmZmVyLnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICBvdmVyd3JpdGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3JlYXRlZCA9IGF3YWl0IGNsaWVudC5kYmZzLmNyZWF0ZSh7IHBhdGg6IGFic29sdXRlUGF0aCwgb3ZlcndyaXRlIH0pO1xuICAgIGNvbnN0IGhhbmRsZSA9IGNyZWF0ZWQuaGFuZGxlO1xuICAgIGlmIChoYW5kbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FcnJvcihcIklPX0VSUk9SXCIsIFwiREJGUyB1cGxvYWQgaGFuZGxlIG1pc3NpbmdcIiwgYWJzb2x1dGVQYXRoKTtcbiAgICB9XG4gICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnVmZmVyLmxlbmd0aDsgb2Zmc2V0ICs9IERCRlNfUFVUX01BWF9CWVRFUykge1xuICAgICAgY29uc3Qgc2xpY2UgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBEQkZTX1BVVF9NQVhfQllURVMpO1xuICAgICAgYXdhaXQgY2xpZW50LmRiZnMuYWRkQmxvY2soeyBoYW5kbGUsIGRhdGE6IHNsaWNlLnRvU3RyaW5nKFwiYmFzZTY0XCIpIH0pO1xuICAgIH1cbiAgICBhd2FpdCBjbGllbnQuZGJmcy5jbG9zZSh7IGhhbmRsZSB9KTtcbiAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIERyYWluIGFuIFNESyBhc3luYyBpdGVyYWJsZSBpbnRvIGEgbWFwcGVkIGFycmF5LiAqL1xuYXN5bmMgZnVuY3Rpb24gY29sbGVjdDxTLCBUPihzb3VyY2U6IEFzeW5jSXRlcmFibGU8Uz4sIG1hcDogKGl0ZW06IFMpID0+IFQpOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBpdGVtczogVFtdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBzb3VyY2UpIGl0ZW1zLnB1c2gobWFwKGl0ZW0pKTtcbiAgcmV0dXJuIGl0ZW1zO1xufVxuXG4vKiogSGFuZGxlciBmb3IgYSBiYWNrZW5kIGEgY2FsbCBzaXRlIGhhcyBhbHJlYWR5IHJ1bGVkIG91dC4gKi9cbmZ1bmN0aW9uIHVucmVhY2hhYmxlQmFja2VuZCgpOiBQcm9taXNlPG5ldmVyPiB7XG4gIHRocm93IG5ldyBGaWxlU3lzdGVtRXJyb3IoXCJOT1RfU1VQUE9SVEVEXCIsIFwiVW5zdXBwb3J0ZWQgRGF0YWJyaWNrcyBiYWNrZW5kIGZvciB0aGlzIG9wZXJhdGlvblwiKTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQmFzZTY0KGRhdGE6IHN0cmluZyB8IHVuZGVmaW5lZCk6IEJ1ZmZlciB7XG4gIGlmICghZGF0YSkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRhdGEsIFwiYmFzZTY0XCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmVzcG9uc2VCb2R5KFxuICBjb250ZW50czogZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8QnVmZmVyPiB7XG4gIGlmICghY29udGVudHMpIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gIGNvbnN0IHJlYWRlciA9IGNvbnRlbnRzLmdldFJlYWRlcigpO1xuICBjb25zdCBjaHVua3M6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgIGlmICh2YWx1ZSkgY2h1bmtzLnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcy5tYXAoKGNodW5rKSA9PiBCdWZmZXIuZnJvbShjaHVuaykpKTtcbn1cblxuZnVuY3Rpb24gYnVmZmVyVG9SZWFkYWJsZVN0cmVhbShidWZmZXI6IEJ1ZmZlcik6IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+KHtcbiAgICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSk7XG4gICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy1mcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYnJpY2tzLWZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFHSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFDTCxjQUFjLEVBQ2QsTUFBTSxFQUNOLGVBQWUsRUFDZixTQUFTLEdBS1YsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IscUJBQXFCLEdBRXRCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUV2QyxtRkFBbUY7QUFDbkYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUErQzVCOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUE0QjtJQUM1RCxNQUFNLENBQThCO0lBQzNCLFlBQVksQ0FBOEI7SUFFM0QsWUFBWSxPQUFvQztRQUM5QyxNQUFNLElBQUksR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLEtBQUssQ0FBQztZQUNKLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLGNBQWMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRCxPQUFPLEVBQUUsWUFBWTtZQUNyQixJQUFJO1lBQ0osUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLFVBQVUsRUFB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QyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGF0YWJyaWNrcyB7QGxpbmsgRmlsZVN5c3RlbX0gYmFja2VkIGJ5IHtAbGluayBXb3Jrc3BhY2VDbGllbnR9LlxuICpcbiAqIEV4dGVuZHMge0BsaW5rIEJhc2VGaWxlU3lzdGVtfS4gUm91dGVzIEkvTyBieSBhYnNvbHV0ZSBwYXRoOlxuICogLSBgL1dvcmtzcGFjZWAsIGAvVXNlcnNgLCBgL1JlcG9zYCwgYC9TaGFyZWRgIOKGkiB3b3Jrc3BhY2Ugb2JqZWN0cyBBUElcbiAqIC0gYC9Wb2x1bWVzLy4uLmAgKG9yIGBjYXRhbG9nLnNjaGVtYS52b2x1bWVgIHJvb3RzKSDihpIgVW5pdHkgQ2F0YWxvZyBGaWxlcyBBUElcbiAqIC0gYC9kYmZzLy4uLmAg4oaSIERCRlMgQVBJXG4gKlxuICogRXZlcnkgcHJpbWl0aXZlIHBpY2tzIGl0cyBBUEkgdGhyb3VnaCB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0uZGlzcGF0Y2h9XG4gKiByYXRoZXIgdGhhbiByZS1icmFuY2hpbmcgYnkgaGFuZCwgYW5kIGVycm9yIG5vcm1hbGl6YXRpb24gaXMgaW5oZXJpdGVkIGZyb21cbiAqIHtAbGluayBCYXNlRmlsZVN5c3RlbX0sIHNvIGEgcHJpbWl0aXZlIGhlcmUgaXMganVzdCB0aGUgU0RLIGNhbGwuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9zZGstZXhwZXJpbWVudGFsXCI7XG5pbXBvcnQgeyBoYXNoLCBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgQmFzZUZpbGVTeXN0ZW0sXG4gIGJhc2VGUyxcbiAgRmlsZVN5c3RlbUVycm9yLFxuICBwb3NpeFBhdGgsXG4gIHR5cGUgQ29weU9wdGlvbnMsXG4gIHR5cGUgRmlsZUVudHJ5LFxuICB0eXBlIEZpbGVTdGF0LFxuICB0eXBlIFdyaXRlRmlsZU9wdGlvbnMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1mc1wiO1xuaW1wb3J0IHtcbiAgaXNIb21lUmVsYXRpdmVQYXRoLFxuICBub3JtYWxpemVEYXRhYnJpY2tzUm9vdCxcbiAgcmVzb2x2ZURhdGFicmlja3NGaWxlc0JhY2tlbmQsXG4gIHJlc29sdmVEYXRhYnJpY2tzUm9vdCxcbiAgdHlwZSBEYXRhYnJpY2tzRmlsZXNCYWNrZW5kLFxufSBmcm9tIFwiLi9kYXRhYnJpY2tzLXBhdGgudHNcIjtcbmltcG9ydCB7IGdldFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCIuL3dvcmtzcGFjZS50c1wiO1xuXG5jb25zdCBEQkZTX1JFQURfQ0hVTktfQllURVMgPSAxMDI0ICogMTAyNDtcbmNvbnN0IERCRlNfUFVUX01BWF9CWVRFUyA9IDEwMjQgKiAxMDI0O1xuXG4vKiogU2VnbWVudHMgaW4gYC9Wb2x1bWVzLzxjYXRhbG9nPi88c2NoZW1hPi88dm9sdW1lPmAsIHByb3Zpc2lvbmVkIG91dCBvZiBiYW5kLiAqL1xuY29uc3QgVk9MVU1FX1JPT1RfREVQVEggPSA0O1xuXG4vKipcbiAqIE9uZSBoYW5kbGVyIHBlciBEYXRhYnJpY2tzIEFQSSwga2V5ZWQgYnkge0BsaW5rIERhdGFicmlja3NGaWxlc0JhY2tlbmR9IHNvXG4gKiBhZGRpbmcgYSBiYWNrZW5kIGlzIGEgY29tcGlsZSBlcnJvciB1bnRpbCBldmVyeSBjYWxsIHNpdGUgaGFuZGxlcyBpdC5cbiAqL1xudHlwZSBCYWNrZW5kSGFuZGxlcnM8VD4gPSBSZWNvcmQ8RGF0YWJyaWNrc0ZpbGVzQmFja2VuZCwgKGNsaWVudDogV29ya3NwYWNlQ2xpZW50KSA9PiBQcm9taXNlPFQ+PjtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBEYXRhYnJpY2tzRmlsZVN5c3RlbX0uICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NGaWxlU3lzdGVtT3B0aW9ucyB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllci4gRGVmYXVsdHMgdG8gYSBzdGFibGUgaGFzaCBvZiB0aGUgbm9ybWFsaXplZCByb290LiAqL1xuICBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsZXN5c3RlbSByb290LiBBY2NlcHRzOlxuICAgKiAtIGAvVm9sdW1lcy9jYXRhbG9nL3NjaGVtYS92b2x1bWVgIChhbHNvIGAvVm9sdW1lLy4uLmApXG4gICAqIC0gYGNhdGFsb2cuc2NoZW1hLnZvbHVtZWBcbiAgICogLSBgfmAgLyBgfi8uLi5gIOKGkiBgL1dvcmtzcGFjZS9Vc2Vycy88dXNlck5hbWU+Ly4uLmAgKG5lZWRzIHtAbGluayB1c2VyTmFtZX0sXG4gICAqICAgb3IgdXNlIHtAbGluayBEYXRhYnJpY2tzRmlsZVN5c3RlbS5jcmVhdGV9KVxuICAgKiAtIGAvV29ya3NwYWNlLy4uLmAsIGAvVXNlcnMvLi4uYCwgYC9SZXBvcy8uLi5gLCBgL1NoYXJlZC8uLi5gXG4gICAqIC0gYC9kYmZzLy4uLmBcbiAgICovXG4gIHJvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogVXNlcm5hbWUgZm9yIGV4cGFuZGluZyBgfmAuIFdoZW4gb21pdHRlZCBhbmQge0BsaW5rIHJvb3R9IGlzIGhvbWUtcmVsYXRpdmUsXG4gICAqIHByZWZlciB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0uY3JlYXRlfSB3aGljaCByZXNvbHZlcyBpdCB2aWFcbiAgICogYGdldEN1cnJlbnRVc2VyTmFtZWAuXG4gICAqL1xuICB1c2VyTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YWJyaWNrcyB3b3Jrc3BhY2UgY2xpZW50LiBEZWZhdWx0cyB0byBgdHJ5R2V0V29ya3NwYWNlQ2xpZW50KClgLCBvdGhlcndpc2VcbiAgICogYSBkZWZhdWx0IHtAbGluayBXb3Jrc3BhY2VDbGllbnR9IGZyb20gZW52IC8gcHJvZmlsZSBhdXRoLlxuICAgKi9cbiAgY2xpZW50PzogV29ya3NwYWNlQ2xpZW50O1xuXG4gIC8qKiBCbG9jayBhbGwgd3JpdGUgb3BlcmF0aW9ucy4gRGVmYXVsdHMgdG8gZmFsc2UuICovXG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlYXRlIHtAbGluayByb290fSAoYW5kIHBhcmVudHMpIGR1cmluZyBpbml0LiBEZWZhdWx0cyB0byBmYWxzZSAodm9sdW1lXG4gICAqIGFuZCB3b3Jrc3BhY2Ugcm9vdHMgYXJlIHVzdWFsbHkgcHJvdmlzaW9uZWQgb3V0IG9mIGJhbmQpLlxuICAgKi9cbiAgY3JlYXRlUm9vdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICoge0BsaW5rIEZpbGVTeXN0ZW19IGltcGxlbWVudGF0aW9uIG92ZXIgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgZmlsZXMsIFVDXG4gKiB2b2x1bWVzLCBhbmQgREJGUy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGZzID0gbmV3IERhdGFicmlja3NGaWxlU3lzdGVtKHsgcm9vdDogXCJtYWluLmRlZmF1bHQuYXNzZXRzXCIgfSk7XG4gKiBhd2FpdCBmcy53cml0ZUZpbGUoXCJub3Rlcy9oZWxsby50eHRcIiwgXCJoaVwiKTtcbiAqXG4gKiBjb25zdCBob21lID0gYXdhaXQgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0uY3JlYXRlKHsgcm9vdDogXCJ+XCIgfSk7XG4gKiBjb25zdCBsaXN0aW5nID0gYXdhaXQgaG9tZS5yZWFkZGlyKFwiLlwiKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0gZXh0ZW5kcyBCYXNlRmlsZVN5c3RlbTxcImRhdGFicmlja3NcIj4ge1xuICBwcml2YXRlIGNsaWVudDogV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudE9wdGlvbjogV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERhdGFicmlja3NGaWxlU3lzdGVtT3B0aW9ucykge1xuICAgIGNvbnN0IHJvb3QgPSBub3JtYWxpemVEYXRhYnJpY2tzUm9vdChvcHRpb25zLnJvb3QsIHsgdXNlck5hbWU6IG9wdGlvbnMudXNlck5hbWUgfSk7XG4gICAgc3VwZXIoe1xuICAgICAgaWQ6IG9wdGlvbnMuaWQgPz8gYGRhdGFicmlja3MtJHtoYXNoLmZudkhhc2gocm9vdCl9YCxcbiAgICAgIGJhY2tlbmQ6IFwiZGF0YWJyaWNrc1wiLFxuICAgICAgcm9vdCxcbiAgICAgIHJlYWRPbmx5OiBvcHRpb25zLnJlYWRPbmx5LFxuICAgICAgY3JlYXRlUm9vdDogb3B0aW9ucy5jcmVhdGVSb290ID8/IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuY2xpZW50T3B0aW9uID0gb3B0aW9ucy5jbGllbnQ7XG4gICAgdGhpcy5jbGllbnQgPSBvcHRpb25zLmNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW19LCByZXNvbHZpbmcgYH5gIHJvb3RzIHZpYSB0aGVcbiAgICogd29ya3NwYWNlIGN1cnJlbnQgdXNlciB3aGVuIG5lZWRlZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0aW9uczogRGF0YWJyaWNrc0ZpbGVTeXN0ZW1PcHRpb25zKTogUHJvbWlzZTxEYXRhYnJpY2tzRmlsZVN5c3RlbT4ge1xuICAgIGlmICghaXNIb21lUmVsYXRpdmVQYXRoKG9wdGlvbnMucm9vdCkgfHwgb3B0aW9ucy51c2VyTmFtZT8udHJpbSgpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGFicmlja3NGaWxlU3lzdGVtKG9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdCBjbGllbnQgPSBvcHRpb25zLmNsaWVudCA/PyAoYXdhaXQgZ2V0V29ya3NwYWNlQ2xpZW50KCkpO1xuICAgIGNvbnN0IHJvb3QgPSBhd2FpdCByZXNvbHZlRGF0YWJyaWNrc1Jvb3Qob3B0aW9ucy5yb290LCB7IGNsaWVudCB9KTtcbiAgICByZXR1cm4gbmV3IERhdGFicmlja3NGaWxlU3lzdGVtKHsgLi4ub3B0aW9ucywgcm9vdCwgY2xpZW50IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIG9uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsaWVudCA9IHRoaXMuY2xpZW50T3B0aW9uID8/IChhd2FpdCBnZXRXb3Jrc3BhY2VDbGllbnQoKSk7XG4gIH1cblxuICAvKiogUnVuIHRoZSBoYW5kbGVyIGZvciBgYWJzb2x1dGVQYXRoYCdzIERhdGFicmlja3MgQVBJIHdpdGggdGhlIGxpdmUgY2xpZW50LiAqL1xuICBwcml2YXRlIGRpc3BhdGNoPFQ+KGFic29sdXRlUGF0aDogc3RyaW5nLCBoYW5kbGVyczogQmFja2VuZEhhbmRsZXJzPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCF0aGlzLmNsaWVudCkge1xuICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgXCJJT19FUlJPUlwiLFxuICAgICAgICBcIkRhdGFicmlja3MgZmlsZXN5c3RlbSBpcyBub3QgaW5pdGlhbGl6ZWQgKG5vIFdvcmtzcGFjZUNsaWVudClcIixcbiAgICAgICAgYWJzb2x1dGVQYXRoLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZXJzW3Jlc29sdmVEYXRhYnJpY2tzRmlsZXNCYWNrZW5kKGFic29sdXRlUGF0aCldKHRoaXMuY2xpZW50KTtcbiAgfVxuXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAvKiBQcmltaXRpdmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZVJvb3REaXJlY3RvcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVEaXJlY3RvcnlBdCh0aGlzLnJvb3QpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHJlYWRCeXRlc0F0KHJlc29sdmVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5kaXNwYXRjaDxCdWZmZXI+KHJlc29sdmVkUGF0aCwge1xuICAgICAgZGJmczogKGNsaWVudCkgPT4gdGhpcy5yZWFkRGJmc0ZpbGUoY2xpZW50LCByZXNvbHZlZFBhdGgpLFxuICAgICAgd29ya3NwYWNlOiBhc3luYyAoY2xpZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LndvcmtzcGFjZS5leHBvcnQoeyBwYXRoOiByZXNvbHZlZFBhdGgsIGZvcm1hdDogXCJBVVRPXCIgfSk7XG4gICAgICAgIHJldHVybiBkZWNvZGVCYXNlNjQocmVzcG9uc2UuY29udGVudCk7XG4gICAgICB9LFxuICAgICAgdm9sdW1lczogYXN5bmMgKGNsaWVudCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5maWxlcy5kb3dubG9hZCh7IGZpbGVfcGF0aDogcmVzb2x2ZWRQYXRoIH0pO1xuICAgICAgICByZXR1cm4gcmVhZFJlc3BvbnNlQm9keShcbiAgICAgICAgICByZXNwb25zZS5jb250ZW50cyBhcyBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHwgdW5kZWZpbmVkLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB3cml0ZUJ5dGVzQXQoXG4gICAgcmVzb2x2ZWRQYXRoOiBzdHJpbmcsXG4gICAgY29udGVudDogVWludDhBcnJheSxcbiAgICBvcHRpb25zOiBSZXF1aXJlZDxXcml0ZUZpbGVPcHRpb25zPixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oY29udGVudCk7XG4gICAgY29uc3Qgb3ZlcndyaXRlID0gb3B0aW9ucy5vdmVyd3JpdGU7XG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaDx1bmtub3duPihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+IHRoaXMud3JpdGVEYmZzRmlsZShjbGllbnQsIHJlc29sdmVkUGF0aCwgYnVmZmVyLCBvdmVyd3JpdGUpLFxuICAgICAgd29ya3NwYWNlOiAoY2xpZW50KSA9PlxuICAgICAgICBjbGllbnQud29ya3NwYWNlLmltcG9ydCh7XG4gICAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICAgIGZvcm1hdDogXCJBVVRPXCIsXG4gICAgICAgICAgY29udGVudDogYnVmZmVyLnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICAgIG92ZXJ3cml0ZSxcbiAgICAgICAgfSksXG4gICAgICB2b2x1bWVzOiAoY2xpZW50KSA9PlxuICAgICAgICBjbGllbnQuZmlsZXMudXBsb2FkKHtcbiAgICAgICAgICBmaWxlX3BhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgICBjb250ZW50czogYnVmZmVyVG9SZWFkYWJsZVN0cmVhbShidWZmZXIpIGFzIG5ldmVyLFxuICAgICAgICAgIG92ZXJ3cml0ZSxcbiAgICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlRmlsZUF0KHJlc29sdmVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaDx1bmtub3duPihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+IGNsaWVudC5kYmZzLmRlbGV0ZSh7IHBhdGg6IHJlc29sdmVkUGF0aCwgcmVjdXJzaXZlOiBmYWxzZSB9KSxcbiAgICAgIHdvcmtzcGFjZTogKGNsaWVudCkgPT4gY2xpZW50LndvcmtzcGFjZS5kZWxldGUoeyBwYXRoOiByZXNvbHZlZFBhdGgsIHJlY3Vyc2l2ZTogZmFsc2UgfSksXG4gICAgICB2b2x1bWVzOiAoY2xpZW50KSA9PiBjbGllbnQuZmlsZXMuZGVsZXRlKHsgZmlsZV9wYXRoOiByZXNvbHZlZFBhdGggfSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlRGlyZWN0b3J5QXQocmVzb2x2ZWRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoPHVua25vd24+KHJlc29sdmVkUGF0aCwge1xuICAgICAgZGJmczogKGNsaWVudCkgPT4gY2xpZW50LmRiZnMubWtkaXJzKHsgcGF0aDogcmVzb2x2ZWRQYXRoIH0pLFxuICAgICAgd29ya3NwYWNlOiAoY2xpZW50KSA9PiBjbGllbnQud29ya3NwYWNlLm1rZGlycyh7IHBhdGg6IHJlc29sdmVkUGF0aCB9KSxcbiAgICAgIHZvbHVtZXM6IChjbGllbnQpID0+IHRoaXMuY3JlYXRlVm9sdW1lRGlyZWN0b3JpZXMoY2xpZW50LCByZXNvbHZlZFBhdGgpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHJlbW92ZURpcmVjdG9yeUF0KHJlc29sdmVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaDx1bmtub3duPihyZXNvbHZlZFBhdGgsIHtcbiAgICAgIGRiZnM6IChjbGllbnQpID0+IGNsaWVudC5kYmZzLmRlbGV0ZSh7IHBhdGg6IHJlc29sdmVkUGF0aCwgcmVjdXJzaXZlOiBmYWxzZSB9KSxcbiAgICAgIHdvcmtzcGFjZTogKGNsaWVudCkgPT4gY2xpZW50LndvcmtzcGFjZS5kZWxldGUoeyBwYXRoOiByZXNvbHZlZFBhdGgsIHJlY3Vyc2l2ZTogZmFsc2UgfSksXG4gICAgICB2b2x1bWVzOiAoY2xpZW50KSA9PiBjbGllbnQuZmlsZXMuZGVsZXRlRGlyZWN0b3J5KHsgZGlyZWN0b3J5X3BhdGg6IHJlc29sdmVkUGF0aCB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBsaXN0RGlyZWN0b3J5QXQocmVzb2x2ZWRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVFbnRyeVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2g8RmlsZUVudHJ5W10+KHJlc29sdmVkUGF0aCwge1xuICAgICAgZGJmczogKGNsaWVudCkgPT5cbiAgICAgICAgY29sbGVjdChjbGllbnQuZGJmcy5saXN0KHsgcGF0aDogcmVzb2x2ZWRQYXRoIH0pLCAoaW5mbykgPT4gKHtcbiAgICAgICAgICBuYW1lOiBwb3NpeFBhdGguYmFzZW5hbWUoaW5mby5wYXRoID8/IFwiXCIpLFxuICAgICAgICAgIHR5cGU6IGluZm8uaXNfZGlyID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgICAgICAgIHNpemU6IGluZm8uZmlsZV9zaXplLFxuICAgICAgICB9KSksXG4gICAgICB3b3Jrc3BhY2U6IChjbGllbnQpID0+XG4gICAgICAgIGNvbGxlY3QoY2xpZW50LndvcmtzcGFjZS5saXN0KHsgcGF0aDogcmVzb2x2ZWRQYXRoIH0pLCAoaW5mbykgPT4gKHtcbiAgICAgICAgICBuYW1lOiBwb3NpeFBhdGguYmFzZW5hbWUoaW5mby5wYXRoID8/IFwiXCIpLFxuICAgICAgICAgIHR5cGU6IGluZm8ub2JqZWN0X3R5cGUgPT09IFwiRElSRUNUT1JZXCIgPyBcImRpcmVjdG9yeVwiIDogXCJmaWxlXCIsXG4gICAgICAgIH0pKSxcbiAgICAgIHZvbHVtZXM6IChjbGllbnQpID0+XG4gICAgICAgIGNvbGxlY3QoY2xpZW50LmZpbGVzLmxpc3REaXJlY3RvcnlDb250ZW50cyh7IGRpcmVjdG9yeV9wYXRoOiByZXNvbHZlZFBhdGggfSksIChlbnRyeSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBlbnRyeS5uYW1lID8/IHBvc2l4UGF0aC5iYXNlbmFtZShlbnRyeS5wYXRoID8/IFwiXCIpLFxuICAgICAgICAgIHR5cGU6IGVudHJ5LmlzX2RpcmVjdG9yeSA/IFwiZGlyZWN0b3J5XCIgOiBcImZpbGVcIixcbiAgICAgICAgICBzaXplOiBlbnRyeS5maWxlX3NpemUsXG4gICAgICAgIH0pKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBzdGF0QXQocmVzb2x2ZWRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPE9taXQ8RmlsZVN0YXQsIFwicGF0aFwiPj4ge1xuICAgIGNvbnN0IGZhbGxiYWNrTmFtZSA9IHBvc2l4UGF0aC5iYXNlbmFtZShyZXNvbHZlZFBhdGgpIHx8IHBvc2l4UGF0aC5iYXNlbmFtZSh0aGlzLnJvb3QpO1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoPE9taXQ8RmlsZVN0YXQsIFwicGF0aFwiPj4ocmVzb2x2ZWRQYXRoLCB7XG4gICAgICBkYmZzOiBhc3luYyAoY2xpZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBjbGllbnQuZGJmcy5nZXRTdGF0dXMoeyBwYXRoOiByZXNvbHZlZFBhdGggfSk7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVkID0gb2JqZWN0LnRvRGF0ZShpbmZvLm1vZGlmaWNhdGlvbl90aW1lKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBwb3NpeFBhdGguYmFzZW5hbWUoaW5mby5wYXRoID8/IHJlc29sdmVkUGF0aCkgfHwgZmFsbGJhY2tOYW1lLFxuICAgICAgICAgIHR5cGU6IGluZm8uaXNfZGlyID8gXCJkaXJlY3RvcnlcIiA6IFwiZmlsZVwiLFxuICAgICAgICAgIHNpemU6IGluZm8uZmlsZV9zaXplLFxuICAgICAgICAgIGNyZWF0ZWRBdDogbW9kaWZpZWQsXG4gICAgICAgICAgbW9kaWZpZWRBdDogbW9kaWZpZWQsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgd29ya3NwYWNlOiBhc3luYyAoY2xpZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBjbGllbnQud29ya3NwYWNlLmdldFN0YXR1cyh7IHBhdGg6IHJlc29sdmVkUGF0aCB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBwb3NpeFBhdGguYmFzZW5hbWUoaW5mby5wYXRoID8/IHJlc29sdmVkUGF0aCkgfHwgZmFsbGJhY2tOYW1lLFxuICAgICAgICAgIHR5cGU6IGluZm8ub2JqZWN0X3R5cGUgPT09IFwiRElSRUNUT1JZXCIgPyBcImRpcmVjdG9yeVwiIDogXCJmaWxlXCIsXG4gICAgICAgICAgY3JlYXRlZEF0OiBvYmplY3QudG9EYXRlKGluZm8uY3JlYXRlZF9hdCksXG4gICAgICAgICAgbW9kaWZpZWRBdDogb2JqZWN0LnRvRGF0ZShpbmZvLm1vZGlmaWVkX2F0KSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB2b2x1bWVzOiAoY2xpZW50KSA9PiB0aGlzLnN0YXRWb2x1bWVQYXRoKGNsaWVudCwgcmVzb2x2ZWRQYXRoLCBmYWxsYmFja05hbWUpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHRyeU1vdmVGaWxlQXQoXG4gICAgc291cmNlUGF0aDogc3RyaW5nLFxuICAgIGRlc3RpbmF0aW9uUGF0aDogc3RyaW5nLFxuICAgIF9vcHRpb25zOiBSZXF1aXJlZDxDb3B5T3B0aW9ucz4sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIE9ubHkgREJGUyBleHBvc2VzIGEgc2VydmVyLXNpZGUgbW92ZTsgZXZlcnl0aGluZyBlbHNlIGZhbGxzIGJhY2sgdG8gdGhlXG4gICAgLy8gcG9ydGFibGUgY29weSArIGRlbGV0ZSBpbiBCYXNlRmlsZVN5c3RlbS5cbiAgICBpZiAoXG4gICAgICByZXNvbHZlRGF0YWJyaWNrc0ZpbGVzQmFja2VuZChzb3VyY2VQYXRoKSAhPT0gXCJkYmZzXCIgfHxcbiAgICAgIHJlc29sdmVEYXRhYnJpY2tzRmlsZXNCYWNrZW5kKGRlc3RpbmF0aW9uUGF0aCkgIT09IFwiZGJmc1wiXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2g8dW5rbm93bj4oc291cmNlUGF0aCwge1xuICAgICAgZGJmczogKGNsaWVudCkgPT5cbiAgICAgICAgY2xpZW50LmRiZnMubW92ZSh7IHNvdXJjZV9wYXRoOiBzb3VyY2VQYXRoLCBkZXN0aW5hdGlvbl9wYXRoOiBkZXN0aW5hdGlvblBhdGggfSksXG4gICAgICB3b3Jrc3BhY2U6IHVucmVhY2hhYmxlQmFja2VuZCxcbiAgICAgIHZvbHVtZXM6IHVucmVhY2hhYmxlQmFja2VuZCxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAvKiBCYWNrZW5kLXNwZWNpZmljIEkvTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgLyoqXG4gICAqIFVDIGBjcmVhdGVEaXJlY3RvcnlgIGlzIHNpbmdsZS1sZXZlbCwgc28gd2FsayB0aGUgcGF0aCBjcmVhdGluZyBlYWNoIGxldmVsXG4gICAqIGJlbG93IHRoZSB2b2x1bWUgaXRzZWxmLiBBIGxldmVsIHRoYXQgYWxyZWFkeSBleGlzdHMgaXMgbm90IGFuIGVycm9yLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVWb2x1bWVEaXJlY3RvcmllcyhcbiAgICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgICBhYnNvbHV0ZVBhdGg6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFydHMgPSBhYnNvbHV0ZVBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICBsZXQgY3VycmVudCA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY3VycmVudCA9IGAke2N1cnJlbnR9LyR7cGFydHNbaV19YDtcbiAgICAgIGlmIChpIDwgVk9MVU1FX1JPT1RfREVQVEgpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LmZpbGVzLmNyZWF0ZURpcmVjdG9yeSh7IGRpcmVjdG9yeV9wYXRoOiBjdXJyZW50IH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIEFscmVhZHkgcHJlc2VudCBpcyBmaW5lOyBhbnl0aGluZyBlbHNlIGlzIGEgcmVhbCBmYWlsdXJlLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5maWxlcy5nZXREaXJlY3RvcnlNZXRhZGF0YSh7IGRpcmVjdG9yeV9wYXRoOiBjdXJyZW50IH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogU3RhdCBhIFVDIHBhdGg6IGZpbGUgbWV0YWRhdGEgZmlyc3QsIHRoZW4gYSBkaXJlY3RvcnkgcHJvYmUuICovXG4gIHByaXZhdGUgYXN5bmMgc3RhdFZvbHVtZVBhdGgoXG4gICAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gICAgYWJzb2x1dGVQYXRoOiBzdHJpbmcsXG4gICAgZmFsbGJhY2tOYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8T21pdDxGaWxlU3RhdCwgXCJwYXRoXCI+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgY2xpZW50LmZpbGVzLmdldE1ldGFkYXRhKHsgZmlsZV9wYXRoOiBhYnNvbHV0ZVBhdGggfSk7XG4gICAgICBjb25zdCBtb2RpZmllZCA9IG9iamVjdC50b0RhdGUobWV0YWRhdGFbXCJsYXN0LW1vZGlmaWVkXCJdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGZhbGxiYWNrTmFtZSxcbiAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgIHNpemU6IE51bWJlcihtZXRhZGF0YVtcImNvbnRlbnQtbGVuZ3RoXCJdID8/IDApLFxuICAgICAgICBjcmVhdGVkQXQ6IG1vZGlmaWVkLFxuICAgICAgICBtb2RpZmllZEF0OiBtb2RpZmllZCxcbiAgICAgICAgbWltZVR5cGU6IG1ldGFkYXRhW1wiY29udGVudC10eXBlXCJdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChmaWxlRXJyKSB7XG4gICAgICAvLyBBIGRpcmVjdG9yeSBoYXMgbm8gZmlsZSBtZXRhZGF0YSwgYW5kIGFuIHVucmVhZGFibGUgb25lIHJlcG9ydHMgYXNcbiAgICAgIC8vIG1pc3NpbmcgLyBkZW5pZWQgLSBib3RoIGFyZSB3b3J0aCBhIGRpcmVjdG9yeSBwcm9iZSBiZWZvcmUgZmFpbGluZy5cbiAgICAgIGNvbnN0IGNvZGUgPSBiYXNlRlMubWFwRmlsZVN5c3RlbUVycm9yKGZpbGVFcnIsIGFic29sdXRlUGF0aCkuY29kZTtcbiAgICAgIGlmIChjb2RlICE9PSBcIk5PVF9GT1VORFwiICYmIGNvZGUgIT09IFwiUEVSTUlTU0lPTl9ERU5JRURcIikgdGhyb3cgZmlsZUVycjtcbiAgICAgIGF3YWl0IGNsaWVudC5maWxlcy5nZXREaXJlY3RvcnlNZXRhZGF0YSh7IGRpcmVjdG9yeV9wYXRoOiBhYnNvbHV0ZVBhdGggfSk7XG4gICAgICByZXR1cm4geyBuYW1lOiBmYWxsYmFja05hbWUsIHR5cGU6IFwiZGlyZWN0b3J5XCIgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWREYmZzRmlsZShjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCwgYWJzb2x1dGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZGJmcy5yZWFkKHtcbiAgICAgICAgcGF0aDogYWJzb2x1dGVQYXRoLFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIGxlbmd0aDogREJGU19SRUFEX0NIVU5LX0JZVEVTLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjaHVuayA9IGRlY29kZUJhc2U2NChyZXNwb25zZS5kYXRhKTtcbiAgICAgIGlmIChjaHVuay5sZW5ndGggPT09IDApIGJyZWFrO1xuICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgb2Zmc2V0ICs9IGNodW5rLmxlbmd0aDtcbiAgICAgIGlmIChjaHVuay5sZW5ndGggPCBEQkZTX1JFQURfQ0hVTktfQllURVMpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZURiZnNGaWxlKFxuICAgIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICAgIGFic29sdXRlUGF0aDogc3RyaW5nLFxuICAgIGJ1ZmZlcjogQnVmZmVyLFxuICAgIG92ZXJ3cml0ZTogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggPD0gREJGU19QVVRfTUFYX0JZVEVTKSB7XG4gICAgICBhd2FpdCBjbGllbnQuZGJmcy5wdXQoe1xuICAgICAgICBwYXRoOiBhYnNvbHV0ZVBhdGgsXG4gICAgICAgIGNvbnRlbnRzOiBidWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgICAgIG92ZXJ3cml0ZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgY2xpZW50LmRiZnMuY3JlYXRlKHsgcGF0aDogYWJzb2x1dGVQYXRoLCBvdmVyd3JpdGUgfSk7XG4gICAgY29uc3QgaGFuZGxlID0gY3JlYXRlZC5oYW5kbGU7XG4gICAgaWYgKGhhbmRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUVycm9yKFwiSU9fRVJST1JcIiwgXCJEQkZTIHVwbG9hZCBoYW5kbGUgbWlzc2luZ1wiLCBhYnNvbHV0ZVBhdGgpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnVmZmVyLmxlbmd0aDsgb2Zmc2V0ICs9IERCRlNfUFVUX01BWF9CWVRFUykge1xuICAgICAgICBjb25zdCBzbGljZSA9IGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIERCRlNfUFVUX01BWF9CWVRFUyk7XG4gICAgICAgIGF3YWl0IGNsaWVudC5kYmZzLmFkZEJsb2NrKHsgaGFuZGxlLCBkYXRhOiBzbGljZS50b1N0cmluZyhcImJhc2U2NFwiKSB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGF3YWl0IGNsaWVudC5kYmZzLmNsb3NlKHsgaGFuZGxlIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIGF3YWl0IGNsaWVudC5kYmZzLmNsb3NlKHsgaGFuZGxlIH0pO1xuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiogRHJhaW4gYW4gU0RLIGFzeW5jIGl0ZXJhYmxlIGludG8gYSBtYXBwZWQgYXJyYXkuICovXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0PFMsIFQ+KHNvdXJjZTogQXN5bmNJdGVyYWJsZTxTPiwgbWFwOiAoaXRlbTogUykgPT4gVCk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IGl0ZW1zOiBUW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIHNvdXJjZSkgaXRlbXMucHVzaChtYXAoaXRlbSkpO1xuICByZXR1cm4gaXRlbXM7XG59XG5cbi8qKiBIYW5kbGVyIGZvciBhIGJhY2tlbmQgYSBjYWxsIHNpdGUgaGFzIGFscmVhZHkgcnVsZWQgb3V0LiAqL1xuZnVuY3Rpb24gdW5yZWFjaGFibGVCYWNrZW5kKCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FcnJvcihcIk5PVF9TVVBQT1JURURcIiwgXCJVbnN1cHBvcnRlZCBEYXRhYnJpY2tzIGJhY2tlbmQgZm9yIHRoaXMgb3BlcmF0aW9uXCIpO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVCYXNlNjQoZGF0YTogc3RyaW5nIHwgdW5kZWZpbmVkKTogQnVmZmVyIHtcbiAgaWYgKCFkYXRhKSByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSwgXCJiYXNlNjRcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRSZXNwb25zZUJvZHkoXG4gIGNvbnRlbnRzOiBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgaWYgKCFjb250ZW50cykgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgY29uc3QgcmVhZGVyID0gY29udGVudHMuZ2V0UmVhZGVyKCk7XG4gIGNvbnN0IGNodW5rczogVWludDhBcnJheVtdID0gW107XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICBpZiAoZG9uZSkgYnJlYWs7XG4gICAgaWYgKHZhbHVlKSBjaHVua3MucHVzaCh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzLm1hcCgoY2h1bmspID0+IEJ1ZmZlci5mcm9tKGNodW5rKSkpO1xufVxuXG5mdW5jdGlvbiBidWZmZXJUb1JlYWRhYmxlU3RyZWFtKGJ1ZmZlcjogQnVmZmVyKTogZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB7XG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWZmZXIpKTtcbiAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -24,10 +24,10 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@databricks/sdk-experimental": "^0.17.0",
27
- "@dbx-tools/appkit": "0.6.72",
28
- "@dbx-tools/core": "0.6.72",
29
- "@dbx-tools/shared-core": "0.6.72",
30
- "@dbx-tools/shared-fs": "0.6.72"
27
+ "@dbx-tools/appkit": "0.6.73",
28
+ "@dbx-tools/core": "0.6.73",
29
+ "@dbx-tools/shared-core": "0.6.73",
30
+ "@dbx-tools/shared-fs": "0.6.73"
31
31
  },
32
32
  "main": "./lib/index.js",
33
33
  "license": "UNLICENSED",
@@ -43,7 +43,7 @@
43
43
  "./package.json": "./package.json"
44
44
  }
45
45
  },
46
- "version": "0.6.72",
46
+ "version": "0.6.73",
47
47
  "types": "./lib/index.d.ts",
48
48
  "type": "module",
49
49
  "exports": {
@@ -383,9 +383,14 @@ export class DatabricksFileSystem extends BaseFileSystem<"databricks"> {
383
383
  if (handle === undefined) {
384
384
  throw new FileSystemError("IO_ERROR", "DBFS upload handle missing", absolutePath);
385
385
  }
386
- for (let offset = 0; offset < buffer.length; offset += DBFS_PUT_MAX_BYTES) {
387
- const slice = buffer.subarray(offset, offset + DBFS_PUT_MAX_BYTES);
388
- await client.dbfs.addBlock({ handle, data: slice.toString("base64") });
386
+ try {
387
+ for (let offset = 0; offset < buffer.length; offset += DBFS_PUT_MAX_BYTES) {
388
+ const slice = buffer.subarray(offset, offset + DBFS_PUT_MAX_BYTES);
389
+ await client.dbfs.addBlock({ handle, data: slice.toString("base64") });
390
+ }
391
+ } catch (err) {
392
+ await client.dbfs.close({ handle }).catch(() => undefined);
393
+ throw err;
389
394
  }
390
395
  await client.dbfs.close({ handle });
391
396
  }