@blinkk/root-cms 1.0.0-rc.6 → 1.0.0-rc.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +4 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.js +1 -1
- package/dist/project.d.ts +1 -1
- package/dist/{schema-49de9659.d.ts → schema-fad0a59a.d.ts} +5 -0
- package/dist/ui/ui.css +0 -4
- package/dist/ui/ui.js +5 -4
- package/package.json +3 -3
package/dist/cli.js
CHANGED
|
@@ -151,6 +151,9 @@ function fieldType(field) {
|
|
|
151
151
|
if (field.type === "array") {
|
|
152
152
|
return dom.type.array(fieldType(field.of));
|
|
153
153
|
}
|
|
154
|
+
if (field.type === "boolean") {
|
|
155
|
+
return dom.type.boolean;
|
|
156
|
+
}
|
|
154
157
|
if (field.type === "date") {
|
|
155
158
|
return dom.type.string;
|
|
156
159
|
}
|
|
@@ -230,4 +233,4 @@ export {
|
|
|
230
233
|
generateTypes,
|
|
231
234
|
initFirebase
|
|
232
235
|
};
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9jbGllbnQudHMiLCAiLi4vY29yZS9zZWN1cml0eS50cyIsICIuLi9jbGkvY29tbWFuZHMvaW5pdC1maXJlYmFzZS50cyIsICIuLi9jbGkvY29tbWFuZHMvZ2VuZXJhdGUtdHlwZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHtQbHVnaW4sIFJvb3RDb25maWd9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge0FwcH0gZnJvbSAnZmlyZWJhc2UtYWRtaW4vYXBwJztcbmltcG9ydCB7XG4gIEZpZWxkVmFsdWUsXG4gIEZpcmVzdG9yZSxcbiAgUXVlcnksXG4gIFRpbWVzdGFtcCxcbiAgZ2V0RmlyZXN0b3JlLFxufSBmcm9tICdmaXJlYmFzZS1hZG1pbi9maXJlc3RvcmUnO1xuaW1wb3J0IHtDTVNQbHVnaW59IGZyb20gJy4vcGx1Z2luLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBEb2M8RmllbGRzID0gYW55PiB7XG4gIC8qKiBUaGUgaWQgb2YgdGhlIGRvYywgZS5nLiBcIlBhZ2VzL2Zvby1iYXJcIi4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIGlkIG9mIHRoZSBkb2MsIGUuZy4gXCJQYWdlc1wiLiAqL1xuICBjb2xsZWN0aW9uSWQ6IHN0cmluZztcbiAgLyoqIFRoZSBzbHVnIG9mIHRoZSBkb2MsIGUuZy4gXCJmb28tYmFyXCIuICovXG4gIHNsdWc6IHN0cmluZztcbiAgc3lzOiB7XG4gICAgY3JlYXRlZEF0OiBudW1iZXI7XG4gICAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gICAgbW9kaWZpZWRBdDogbnVtYmVyO1xuICAgIG1vZGlmaWVkQnk6IHN0cmluZztcbiAgICBmaXJzdFB1Ymxpc2hlZEF0PzogbnVtYmVyO1xuICAgIGZpcnN0UHVibGlzaGVkQnk/OiBzdHJpbmc7XG4gICAgcHVibGlzaGVkQXQ/OiBudW1iZXI7XG4gICAgcHVibGlzaGVkQnk/OiBzdHJpbmc7XG4gICAgbG9jYWxlcz86IHN0cmluZ1tdO1xuICB9O1xuICBmaWVsZHM6IEZpZWxkcztcbn1cblxuZXhwb3J0IHR5cGUgRG9jTW9kZSA9ICdkcmFmdCcgfCAncHVibGlzaGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBHZXREb2NPcHRpb25zIHtcbiAgLyoqIE1vZGUsIGVpdGhlciBcImRyYWZ0XCIgb3IgXCJwdWJsaXNoZWRcIi4gKi9cbiAgbW9kZTogRG9jTW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXREb2NPcHRpb25zIHtcbiAgLyoqIE1vZGUsIGVpdGhlciBcImRyYWZ0XCIgb3IgXCJwdWJsaXNoZWRcIi4gKi9cbiAgbW9kZTogRG9jTW9kZTtcbiAgLyoqXG4gICAqIEVtYWlsIG9mIHVzZXIgbW9kaWZ5aW5nIHRoZSBkb2MuIElmIGJsYW5rLCBkZWZhdWx0cyB0byBgcm9vdC1jbXMtY2xpZW50YC5cbiAgICovXG4gIG1vZGlmaWVkQnk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdERvY3NPcHRpb25zIHtcbiAgbW9kZTogRG9jTW9kZTtcbiAgb2Zmc2V0PzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgb3JkZXJCeT86IHN0cmluZztcbiAgb3JkZXJCeURpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xuICBxdWVyeT86IChxdWVyeTogUXVlcnkpID0+IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldENvdW50T3B0aW9ucyB7XG4gIG1vZGU6IERvY01vZGU7XG4gIHF1ZXJ5PzogKHF1ZXJ5OiBRdWVyeSkgPT4gUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNsYXRpb24ge1xuICBbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uc01hcCB7XG4gIFtoYXNoOiBzdHJpbmddOiBUcmFuc2xhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbGVUcmFuc2xhdGlvbnMge1xuICBbc291cmNlOiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZFRyYW5zbGF0aW9uc09wdGlvbnMge1xuICB0YWdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBSb290Q01TQ2xpZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSByb290Q29uZmlnOiBSb290Q29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IGNtc1BsdWdpbjogQ01TUGx1Z2luO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3RJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwO1xuICBwcml2YXRlIHJlYWRvbmx5IGRiOiBGaXJlc3RvcmU7XG5cbiAgY29uc3RydWN0b3Iocm9vdENvbmZpZzogUm9vdENvbmZpZykge1xuICAgIHRoaXMucm9vdENvbmZpZyA9IHJvb3RDb25maWc7XG4gICAgdGhpcy5jbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG5cbiAgICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gdGhpcy5jbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gICAgdGhpcy5wcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmlkIHx8ICdkZWZhdWx0JztcbiAgICB0aGlzLmFwcCA9IHRoaXMuY21zUGx1Z2luLmdldEZpcmViYXNlQXBwKCk7XG4gICAgdGhpcy5kYiA9IGdldEZpcmVzdG9yZSh0aGlzLmFwcCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGRvYyBkYXRhIGZyb20gUm9vdC5qcyBDTVMuXG4gICAqL1xuICBhc3luYyBnZXREb2M8RmllbGRzID0gYW55PihcbiAgICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBzbHVnOiBzdHJpbmcsXG4gICAgb3B0aW9uczogR2V0RG9jT3B0aW9uc1xuICApOiBQcm9taXNlPERvYzxGaWVsZHM+IHwgbnVsbD4ge1xuICAgIGNvbnN0IHJhd0RhdGEgPSBhd2FpdCB0aGlzLmdldFJhd0RvYyhjb2xsZWN0aW9uSWQsIHNsdWcsIG9wdGlvbnMpO1xuICAgIGlmIChyYXdEYXRhKSB7XG4gICAgICByZXR1cm4gdW5tYXJzaGFsRGF0YShyYXdEYXRhKSBhcyBEb2M8RmllbGRzPjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHJhdyBkb2MgZGF0YSBhcyBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLiBPbmx5IHVzZSB0aGlzIGlmIHlvdSBrbm93XG4gICAqIHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICovXG4gIGFzeW5jIGdldFJhd0RvYyhcbiAgICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBzbHVnOiBzdHJpbmcsXG4gICAgb3B0aW9uczogR2V0RG9jT3B0aW9uc1xuICApOiBQcm9taXNlPGFueSB8IG51bGw+IHtcbiAgICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICAgIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gICAgLy8gU2x1Z3Mgd2l0aCBzbGFzaGVzIGFyZSBlbmNvZGVkIGFzIGAtLWAgaW4gdGhlIERCLlxuICAgIHNsdWcgPSBzbHVnLnJlcGxhY2VBbGwoJy8nLCAnLS0nKTtcbiAgICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vQ29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9LyR7bW9kZUNvbGxlY3Rpb259LyR7c2x1Z31gO1xuICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMuZGIuZG9jKGRiUGF0aCk7XG4gICAgY29uc3QgZG9jID0gYXdhaXQgZG9jUmVmLmdldCgpO1xuICAgIGlmIChkb2MuZXhpc3RzKSB7XG4gICAgICByZXR1cm4gZG9jLmRhdGEoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBzZXRSYXdEb2MoXG4gICAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gICAgc2x1Zzogc3RyaW5nLFxuICAgIGRhdGE6IGFueSxcbiAgICBvcHRpb25zOiBTZXREb2NPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1vZGUgPSBvcHRpb25zLm1vZGU7XG4gICAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vQ29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9LyR7bW9kZUNvbGxlY3Rpb259LyR7c2x1Z31gO1xuICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMuZGIuZG9jKGRiUGF0aCk7XG4gICAgYXdhaXQgZG9jUmVmLnNldChkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyBkb2NzIGZyb20gYSBSb290LmpzIENNUyBjb2xsZWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgbGlzdERvY3M8VD4oXG4gICAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogTGlzdERvY3NPcHRpb25zXG4gICk6IFByb21pc2U8e2RvY3M6IFRbXX0+IHtcbiAgICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICAgIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gICAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufWA7XG4gICAgbGV0IHF1ZXJ5OiBRdWVyeSA9IHRoaXMuZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICAgIGlmIChvcHRpb25zLmxpbWl0KSB7XG4gICAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0KG9wdGlvbnMubGltaXQpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5vZmZzZXQpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkub2Zmc2V0KG9wdGlvbnMub2Zmc2V0KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub3JkZXJCeSkge1xuICAgICAgcXVlcnkgPSBxdWVyeS5vcmRlckJ5KG9wdGlvbnMub3JkZXJCeSwgb3B0aW9ucy5vcmRlckJ5RGlyZWN0aW9uKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeShxdWVyeSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBxdWVyeS5nZXQoKTtcbiAgICBjb25zdCBkb2NzOiBUW10gPSBbXTtcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gdW5tYXJzaGFsRGF0YShyZXN1bHQuZGF0YSgpKSBhcyBUO1xuICAgICAgZG9jcy5wdXNoKGRvYyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtkb2NzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZG9jcyBpbiBhIFJvb3QuanMgQ01TIGNvbGxlY3Rpb24uXG4gICAqL1xuICBhc3luYyBnZXREb2NzQ291bnQoY29sbGVjdGlvbklkOiBzdHJpbmcsIG9wdGlvbnM6IEdldENvdW50T3B0aW9ucykge1xuICAgIGNvbnN0IG1vZGUgPSBvcHRpb25zLm1vZGU7XG4gICAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vQ29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9LyR7bW9kZUNvbGxlY3Rpb259YDtcbiAgICBsZXQgcXVlcnk6IFF1ZXJ5ID0gdGhpcy5kYi5jb2xsZWN0aW9uKGRiUGF0aCk7XG4gICAgaWYgKG9wdGlvbnMucXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeShxdWVyeSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBxdWVyeS5jb3VudCgpLmdldCgpO1xuICAgIGNvbnN0IGNvdW50ID0gcmVzdWx0cy5kYXRhKCkuY291bnQ7XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBzY2hlZHVsZWQgZG9jcy5cbiAgICovXG4gIGFzeW5jIHB1Ymxpc2hTY2hlZHVsZWREb2NzKCkge1xuICAgIGNvbnN0IHByb2plY3RDb2xsZWN0aW9uc1BhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vQ29sbGVjdGlvbnNgO1xuICAgIGNvbnN0IG5vdyA9IE1hdGguY2VpbChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMuZGIuY29sbGVjdGlvbkdyb3VwKCdTY2hlZHVsZWQnKS5nZXQoKTtcbiAgICBjb25zdCBkb2NzID0gc25hcHNob3QuZG9jc1xuICAgICAgLmZpbHRlcigoZCkgPT4ge1xuICAgICAgICAvLyBGaWx0ZXIgZG9jcyBieSBwcm9qZWN0LlxuICAgICAgICBpZiAoIWQucmVmLnBhdGguc3RhcnRzV2l0aChwcm9qZWN0Q29sbGVjdGlvbnNQYXRoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaWx0ZXIgZG9jcyB3aGVyZSBzY2hlZHVsZWRBdCBpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgLy8gTk9URShzdGV2ZW5sZSk6IHRoZSBmaWx0ZXJpbmcgaXMgZG9uZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVzaW5nIGEgcXVlcnlcbiAgICAgICAgLy8gdG8gYXZvaWQgaGF2aW5nIHRvIGNyZWF0ZSBhbiBpbmRleCBpbiBmaXJlc3RvcmUuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBkLmRhdGEoKSB8fCB7fTtcbiAgICAgICAgY29uc3Qgc2NoZWR1bGVkQXQ6IFRpbWVzdGFtcCB8IHVuZGVmaW5lZCA9IGRhdGEuc3lzPy5zY2hlZHVsZWRBdDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBzY2hlZHVsZWRBdCAmJiBzY2hlZHVsZWRBdC50b01pbGxpcyAmJiBzY2hlZHVsZWRBdC50b01pbGxpcygpIDw9IG5vd1xuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGQpID0+IHtcbiAgICAgICAgY29uc3QgZGJQYXRoID0gZC5yZWYucGF0aDtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBkYlBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgY29uc3Qgc2x1ZyA9IHNlZ21lbnRzLmF0KC0xKTtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHNlZ21lbnRzLmF0KC0zKTtcbiAgICAgICAgY29uc3QgaWQgPSBgJHtjb2xsZWN0aW9ufS8ke3NsdWd9YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBkLmRhdGEoKSxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgIHNsdWcsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgIGlmIChkb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coJ25vIGRvY3MgdG8gc2NoZWR1bGUnKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBFYWNoIHRyYW5zYWN0aW9uIG9yIGJhdGNoIGNhbiB3cml0ZSBhIG1heCBvZiA1MDAgb3BzLlxuICAgIC8vIGh0dHBzOi8vZmlyZWJhc2UuZ29vZ2xlLmNvbS9kb2NzL2ZpcmVzdG9yZS9tYW5hZ2UtZGF0YS90cmFuc2FjdGlvbnNcbiAgICBsZXQgYmF0Y2hDb3VudCA9IDA7XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLmRiLmJhdGNoKCk7XG4gICAgY29uc3QgcHVibGlzaGVkRG9jczogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGRvYyBvZiBkb2NzKSB7XG4gICAgICBjb25zdCB7aWQsIGNvbGxlY3Rpb24sIHNsdWcsIGRhdGF9ID0gZG9jO1xuICAgICAgY29uc3QgZHJhZnRSZWYgPSB0aGlzLmRiLmRvYyhcbiAgICAgICAgYCR7cHJvamVjdENvbGxlY3Rpb25zUGF0aH0vJHtjb2xsZWN0aW9ufS9EcmFmdHMvJHtzbHVnfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBzY2hlZHVsZWRSZWYgPSB0aGlzLmRiLmRvYyhcbiAgICAgICAgYCR7cHJvamVjdENvbGxlY3Rpb25zUGF0aH0vJHtjb2xsZWN0aW9ufS9TY2hlZHVsZWQvJHtzbHVnfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBwdWJsaXNoZWRSZWYgPSB0aGlzLmRiLmRvYyhcbiAgICAgICAgYCR7cHJvamVjdENvbGxlY3Rpb25zUGF0aH0vJHtjb2xsZWN0aW9ufS9QdWJsaXNoZWQvJHtzbHVnfWBcbiAgICAgICk7XG4gICAgICBjb25zdCB7c2NoZWR1bGVkQXQsIHNjaGVkdWxlZEJ5LCAuLi5zeXN9ID0gZGF0YS5zeXMgfHwge307XG5cbiAgICAgIC8vIE9ubHkgdXBkYXRlIGBmaXJzdFB1Ymxpc2hlZGAgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LlxuICAgICAgY29uc3QgZmlyc3RQdWJsaXNoZWRBdCA9IHN5cy5maXJzdFB1Ymxpc2hlZEF0ID8/IHNjaGVkdWxlZEF0O1xuICAgICAgY29uc3QgZmlyc3RQdWJsaXNoZWRCeSA9IHN5cy5maXJzdFB1Ymxpc2hlZEJ5ID8/IChzY2hlZHVsZWRCeSB8fCAnJyk7XG5cbiAgICAgIC8vIFNhdmUgcHVibGlzaGVkIGRvYy5cbiAgICAgIGJhdGNoLnNldChwdWJsaXNoZWRSZWYsIHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIHNsdWcsXG4gICAgICAgIGZpZWxkczogZGF0YS5maWVsZHMgfHwge30sXG4gICAgICAgIHN5czoge1xuICAgICAgICAgIC4uLnN5cyxcbiAgICAgICAgICBmaXJzdFB1Ymxpc2hlZEF0OiBmaXJzdFB1Ymxpc2hlZEF0LFxuICAgICAgICAgIGZpcnN0UHVibGlzaGVkQnk6IGZpcnN0UHVibGlzaGVkQnksXG4gICAgICAgICAgcHVibGlzaGVkQXQ6IEZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgICAgcHVibGlzaGVkQnk6IHNjaGVkdWxlZEJ5IHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBiYXRjaENvdW50ICs9IDE7XG5cbiAgICAgIC8vIFJlbW92ZSBwdWJsaXNoZWQgZG9jLlxuICAgICAgYmF0Y2guZGVsZXRlKHNjaGVkdWxlZFJlZik7XG4gICAgICBiYXRjaENvdW50ICs9IDE7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZHJhZnQgZG9jIHRvIHJlbW92ZSBgc2NoZWR1bGVkQXRgIGFuZCBgc2NoZWR1bGVkQnlgIGZpZWxkc1xuICAgICAgLy8gYW5kIHVwZGF0ZSB0aGUgYHB1Ymxpc2hlZEF0YCBhbmQgYHB1Ymxpc2hlZEJ5YCBmaWVsZHMuXG4gICAgICBiYXRjaC51cGRhdGUoZHJhZnRSZWYsIHtcbiAgICAgICAgJ3N5cy5zY2hlZHVsZWRBdCc6IEZpZWxkVmFsdWUuZGVsZXRlKCksXG4gICAgICAgICdzeXMuc2NoZWR1bGVkQnknOiBGaWVsZFZhbHVlLmRlbGV0ZSgpLFxuICAgICAgICAnc3lzLmZpcnN0UHVibGlzaGVkQXQnOiBmaXJzdFB1Ymxpc2hlZEF0LFxuICAgICAgICAnc3lzLmZpcnN0UHVibGlzaGVkQnknOiBmaXJzdFB1Ymxpc2hlZEJ5LFxuICAgICAgICAnc3lzLnB1Ymxpc2hlZEF0JzogRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgJ3N5cy5wdWJsaXNoZWRCeSc6IHNjaGVkdWxlZEJ5IHx8ICcnLFxuICAgICAgfSk7XG4gICAgICBiYXRjaENvdW50ICs9IDE7XG5cbiAgICAgIHB1Ymxpc2hlZERvY3MucHVzaChkb2MpO1xuXG4gICAgICBpZiAoYmF0Y2hDb3VudCA+PSA0OTgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgYmF0Y2guY29tbWl0KCk7XG4gICAgY29uc29sZS5sb2coYHB1Ymxpc2hlZCAke3B1Ymxpc2hlZERvY3MubGVuZ3RofSBkb2NzIWApO1xuICAgIHJldHVybiBwdWJsaXNoZWREb2NzO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRyYW5zbGF0aW9ucyBzYXZlZCBpbiB0aGUgdHJhbnNsYXRpb25zIGNvbGxlY3Rpb24sIG9wdGlvbmFsbHlcbiAgICogZmlsdGVyZWQgYnkgdGFnLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgbWFwIGxpa2U6XG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAgXCI8aGFzaD5cIjoge1wic291cmNlXCI6IFwiSGVsbG9cIiwgXCJlc1wiOiBcIkhvbGFcIiwgXCJmclwiOiBcIkJvbmpvdXJcIn0sXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBsb2FkVHJhbnNsYXRpb25zKFxuICAgIG9wdGlvbnM/OiBMb2FkVHJhbnNsYXRpb25zT3B0aW9uc1xuICApOiBQcm9taXNlPFRyYW5zbGF0aW9uc01hcD4ge1xuICAgIGNvbnN0IGRiUGF0aCA9IGBQcm9qZWN0cy8ke3RoaXMucHJvamVjdElkfS9UcmFuc2xhdGlvbnNgO1xuICAgIGxldCBxdWVyeTogUXVlcnkgPSB0aGlzLmRiLmNvbGxlY3Rpb24oZGJQYXRoKTtcbiAgICBpZiAob3B0aW9ucz8udGFncykge1xuICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZSgndGFncycsICdhcnJheS1jb250YWlucy1hbnknLCBvcHRpb25zLnRhZ3MpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5U25hcHNob3QgPSBhd2FpdCBxdWVyeS5nZXQoKTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnNNYXA6IFRyYW5zbGF0aW9uc01hcCA9IHt9O1xuICAgIHF1ZXJ5U25hcHNob3QuZm9yRWFjaCgoZG9jKSA9PiB7XG4gICAgICBjb25zdCBoYXNoID0gZG9jLmlkO1xuICAgICAgdHJhbnNsYXRpb25zTWFwW2hhc2hdID0gZG9jLmRhdGEoKSBhcyBUcmFuc2xhdGlvbjtcbiAgICB9KTtcbiAgICByZXR1cm4gdHJhbnNsYXRpb25zTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgbWFwIG9mIHRyYW5zbGF0aW9ucywgZS5nLjpcbiAgICogYGBgXG4gICAqIGF3YWl0IGNsaWVudC5zYXZlVHJhbnNsYXRpb25zKHtcbiAgICogICBcIkhlbGxvXCI6IHtcImVzXCI6IFwiSG9sYVwiLCBcImZyXCI6IFwiQm9uam91clwifSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc2F2ZVRyYW5zbGF0aW9ucyhcbiAgICB0cmFuc2xhdGlvbnM6IHtcbiAgICAgIFtzb3VyY2U6IHN0cmluZ106IHtbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIH0sXG4gICAgdGFncz86IHN0cmluZ1tdXG4gICkge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uc1BhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vVHJhbnNsYXRpb25zYDtcbiAgICBjb25zdCBiYXRjaCA9IHRoaXMuZGIuYmF0Y2goKTtcbiAgICBsZXQgYmF0Y2hDb3VudCA9IDA7XG4gICAgT2JqZWN0LmVudHJpZXModHJhbnNsYXRpb25zKS5mb3JFYWNoKChbc291cmNlLCBzb3VyY2VUcmFuc2xhdGlvbnNdKSA9PiB7XG4gICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRUcmFuc2xhdGlvbktleShzb3VyY2UpO1xuICAgICAgY29uc3QgdHJhbnNsYXRpb25SZWYgPSB0aGlzLmRiLmRvYyhgJHt0cmFuc2xhdGlvbnNQYXRofS8ke2hhc2h9YCk7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICAgIC4uLnNvdXJjZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgc291cmNlOiB0aGlzLm5vcm1hbGl6ZVN0cmluZyhzb3VyY2UpLFxuICAgICAgfTtcbiAgICAgIGlmICh0YWdzKSB7XG4gICAgICAgIGRhdGEudGFncyA9IHRhZ3M7XG4gICAgICB9XG4gICAgICBiYXRjaC51cGRhdGUodHJhbnNsYXRpb25SZWYsIGRhdGEpO1xuICAgICAgYmF0Y2hDb3VudCArPSAxO1xuICAgIH0pO1xuICAgIGlmIChiYXRjaENvdW50ID4gNTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VwIHRvIDUwMCB0cmFuc2xhdGlvbnMgY2FuIGJlIHNhdmVkIGF0IGEgdGltZS4nKTtcbiAgICB9XG4gICAgYXdhaXQgYmF0Y2guY29tbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgXCJrZXlcIiB1c2VkIGZvciBhIHRyYW5zbGF0aW9uIGFzIHN0b3JlZCBpbiB0aGUgZGIuIFRyYW5zbGF0aW9uc1xuICAgKiBhcmUgc3RvcmVkIHVuZGVyIGBQcm9qZWN0cy88cHJvamVjdCBpZD4vVHJhbnNsYXRpb25zLzxzaGExIGhhc2g+YC5cbiAgICovXG4gIGdldFRyYW5zbGF0aW9uS2V5KHNvdXJjZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2hhMSA9IGNyeXB0b1xuICAgICAgLmNyZWF0ZUhhc2goJ3NoYTEnKVxuICAgICAgLnVwZGF0ZSh0aGlzLm5vcm1hbGl6ZVN0cmluZyhzb3VyY2UpKVxuICAgICAgLmRpZ2VzdCgnaGV4Jyk7XG4gICAgcmV0dXJuIHNoYTE7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIGEgc3RyaW5nIHRoYXQncyB1c2VkIGZvciB0cmFuc2xhdGlvbnMuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmc6XG4gICAqIC0gUmVtb3ZlcyBhbnkgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlXG4gICAqIC0gUmVtb3ZlcyBzcGFjZXMgYXQgdGhlIGVuZCBvZiBhbnkgbGluZVxuICAgKi9cbiAgbm9ybWFsaXplU3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgbGluZXMgPSBTdHJpbmcoc3RyKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltRW5kKCkpO1xuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0cmFuc2xhdGlvbnMgZm9yIGEgcGFydGljdWxhciBsb2NhbGUuXG4gICAqXG4gICAqIFJldHVybnMgYSBtYXAgbGlrZTpcbiAgICogYGBgXG4gICAqIHtcbiAgICogICBcIkhlbGxvXCI6IFwiQm9uam91clwiLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgbG9hZFRyYW5zbGF0aW9uc0ZvckxvY2FsZShcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTG9hZFRyYW5zbGF0aW9uc09wdGlvbnNcbiAgKTogUHJvbWlzZTxMb2NhbGVUcmFuc2xhdGlvbnM+IHtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnNNYXAgPSBhd2FpdCB0aGlzLmxvYWRUcmFuc2xhdGlvbnMob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRyYW5zbGF0aW9uc0ZvckxvY2FsZSh0cmFuc2xhdGlvbnNNYXAsIGxvY2FsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENtc1BsdWdpbihyb290Q29uZmlnOiBSb290Q29uZmlnKTogQ01TUGx1Z2luIHtcbiAgY29uc3QgcGx1Z2luczogUGx1Z2luW10gPSByb290Q29uZmlnLnBsdWdpbnMgfHwgW107XG4gIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuZmluZCgocGx1Z2luKSA9PiBwbHVnaW4ubmFtZSA9PT0gJ3Jvb3QtY21zJyk7XG4gIGlmICghcGx1Z2luKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCByb290LWNtcyBwbHVnaW4gY29uZmlnIGluIHJvb3QuY29uZmlnLnRzJyk7XG4gIH1cbiAgcmV0dXJuIHBsdWdpbiBhcyBDTVNQbHVnaW47XG59XG5cbi8qKlxuICogV2Fsa3MgdGhlIGRhdGEgdHJlZSBhbmQgY29udmVydHMgYW55IFRpbWVzdGFtcCBvYmplY3RzIHRvIG1pbGxpcyBhbmQgYW55XG4gKiBfYXJyYXkgbWFwcyB0byBub3JtYWwgYXJyYXlzLlxuICpcbiAqIEUuZy46XG4gKlxuICogbm9ybWFsaXplRGF0YSh7XG4gKiAgIHN5czoge21vZGlmaWVkQXQ6IFRpbWVzdGFtcCgxMjMpfSxcbiAqICAgZmllbGRzOiB7XG4gKiAgICAgX2FycmF5OiBbJ2FzZGYnXSxcbiAqICAgICBhc2RmOiB7dGl0bGU6ICdoZWxsbyd9XG4gKiAgIH1cbiAqIH0pXG4gKiAvLyA9PiB7c3lzOiB7bW9kaWZpZWRBdDogMTIzfSwgZmllbGRzOiB7Zm9vOiBbe3RpdGxlOiAnaGVsbG8nfV19fVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5tYXJzaGFsRGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgY29uc3QgdmFsID0gZGF0YVtrZXldO1xuICAgIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICBpZiAodmFsLnRvTWlsbGlzKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsLnRvTWlsbGlzKCk7XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5oYXNPd24odmFsLCAnX2FycmF5JykgJiYgQXJyYXkuaXNBcnJheSh2YWwuX2FycmF5KSkge1xuICAgICAgICBjb25zdCBhcnIgPSB2YWwuX2FycmF5Lm1hcCgoazogc3RyaW5nKSA9PiB1bm1hcnNoYWxEYXRhKHZhbFtrXSB8fCB7fSkpO1xuICAgICAgICByZXN1bHRba2V5XSA9IGFycjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdW5tYXJzaGFsRGF0YSh2YWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgdW5tYXJzaGFsRGF0YSgpYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEoZGF0YTogYW55KTogYW55IHtcbiAgcmV0dXJuIHVubWFyc2hhbERhdGEoZGF0YSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJyYXlPYmplY3Qge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIF9hcnJheTogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhbiBhcnJheSBpbnRvIGFuIGBBcnJheU9iamVjdGAsIGUuZy46XG4gKlxuICogYGBgXG4gKiBtYXJzaGFsQXJyYXkoWzEsIDIsIDNdKVxuICogLy8gPT4ge2E6IDEsIGI6IDIsIGM6IDMsIF9hcnJheTogWydhJywgJ2InLCAnYyddfVxuICogYGBgXG4gKlxuICogVGhpcyBkYXRhYmFzZSBzdG9yYWdlIG1ldGhvZCBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlIGEgc2luZ2xlIGZpZWxkIGluIGFcbiAqIGRlZXBseSBuZXN0ZWQgYXJyYXkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFyc2hhbEFycmF5KGFycjogYW55W10pOiBBcnJheU9iamVjdCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuICBjb25zdCBhcnJPYmplY3Q6IEFycmF5T2JqZWN0ID0ge19hcnJheTogW119O1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgY29uc3Qga2V5ID0gcmFuZFN0cmluZyg2KTtcbiAgICBhcnJPYmplY3Rba2V5XSA9IGl0ZW07XG4gICAgYXJyT2JqZWN0Ll9hcnJheS5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGFyck9iamVjdDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBgQXJyYXlPYmplY3RgIHRvIGEgbm9ybWFsIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5tYXJzaGFsQXJyYXkoYXJyT2JqZWN0OiBBcnJheU9iamVjdCk6IGFueVtdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFyck9iamVjdD8uX2FycmF5KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBhcnIgPSBhcnJPYmplY3QuX2FycmF5Lm1hcCgoazogc3RyaW5nKSA9PiBhcnJPYmplY3Rba10pO1xuICByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiByYW5kU3RyaW5nKGxlbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGNvbnN0IGNoYXJzID1cbiAgICAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgcmFuZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCk7XG4gICAgcmVzdWx0LnB1c2goY2hhcnMuY2hhckF0KHJhbmQpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmpvaW4oJycpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgdHJhbnNsYXRpb25zIG1hcCBmcm9tIGBsb2FkVHJhbnNsYXRpb25zKClgIHRvIGEgbWFwIG9mIHNvdXJjZSB0b1xuICogdHJhbnNsYXRlZCBzdHJpbmcgZm9yIGEgcGFydGljdWxhciBsb2NhbGUuXG4gKlxuICogUmV0dXJucyBhIG1hcCBsaWtlOlxuICogYGBgXG4gKiB7XG4gKiAgIFwiSGVsbG9cIjogXCJCb25qb3VyXCIsXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0aW9uc0ZvckxvY2FsZShcbiAgdHJhbnNsYXRpb25zTWFwOiBUcmFuc2xhdGlvbnNNYXAsXG4gIGxvY2FsZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgbG9jYWxlVHJhbnNsYXRpb25zOiBMb2NhbGVUcmFuc2xhdGlvbnMgPSB7fTtcbiAgT2JqZWN0LnZhbHVlcyh0cmFuc2xhdGlvbnNNYXApLmZvckVhY2goKHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHN0cmluZy5zb3VyY2U7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSBzdHJpbmdbbG9jYWxlXSB8fCBzdHJpbmcuZW4gfHwgc3RyaW5nLnNvdXJjZTtcbiAgICBsb2NhbGVUcmFuc2xhdGlvbnNbc291cmNlXSA9IHRyYW5zbGF0aW9uO1xuICB9KTtcbiAgcmV0dXJuIGxvY2FsZVRyYW5zbGF0aW9ucztcbn1cbiIsICJpbXBvcnQge2luaXRpYWxpemVBcHB9IGZyb20gJ2ZpcmViYXNlLWFkbWluL2FwcCc7XG5pbXBvcnQge2dldFNlY3VyaXR5UnVsZXN9IGZyb20gJ2ZpcmViYXNlLWFkbWluL3NlY3VyaXR5LXJ1bGVzJztcblxuZXhwb3J0IGNvbnN0IEZJUkVTVE9SRV9SVUxFUyA9IGBydWxlc192ZXJzaW9uID0gJzInO1xuc2VydmljZSBjbG91ZC5maXJlc3RvcmUge1xuICBtYXRjaCAvZGF0YWJhc2VzL3tkYXRhYmFzZX0vZG9jdW1lbnRzIHtcbiAgICBtYXRjaCAvUHJvamVjdHMve3Byb2plY3R9L3tkb2N1bWVudD0qKn0ge1xuICAgICAgYWxsb3cgd3JpdGU6XG4gICAgICAgIGlmIHJlcXVlc3QuYXV0aCAhPSBudWxsXG4gICAgICAgICYmIGV4aXN0cygvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpKVxuICAgICAgICAmJiBnZXQoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KSkuZGF0YS5yb2xlc1tyZXF1ZXN0LmF1dGgudG9rZW4uZW1haWxdIGluIFsnQURNSU4nLCAnRURJVE9SJ107XG4gICAgICBhbGxvdyByZWFkOlxuICAgICAgICBpZiByZXF1ZXN0LmF1dGggIT0gbnVsbFxuICAgICAgICAmJiBleGlzdHMoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KSlcbiAgICAgICAgJiYgZ2V0KC9kYXRhYmFzZXMvJChkYXRhYmFzZSkvZG9jdW1lbnRzL1Byb2plY3RzLyQocHJvamVjdCkpLmRhdGEucm9sZXNbcmVxdWVzdC5hdXRoLnRva2VuLmVtYWlsXSBpbiBbJ0FETUlOJywgJ0VESVRPUicsICdWSUVXRVInXTtcbiAgICB9XG5cbiAgICBtYXRjaCAvUHJvamVjdHMve3Byb2plY3R9L0NvbGxlY3Rpb25zL3tjb2xsZWN0aW9ufS97ZG9jdW1lbnQ9Kip9IHtcbiAgICAgIGFsbG93IHdyaXRlOlxuICAgICAgICBpZiByZXF1ZXN0LmF1dGggIT0gbnVsbFxuICAgICAgICAmJiBleGlzdHMoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KS9Db2xsZWN0aW9ucy8kKGNvbGxlY3Rpb24pKVxuICAgICAgICAmJiBnZXQoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KS9Db2xsZWN0aW9ucy8kKGNvbGxlY3Rpb24pKS5kYXRhLnJvbGVzW3JlcXVlc3QuYXV0aC50b2tlbi5lbWFpbF0gaW4gWydBRE1JTicsICdFRElUT1InXTtcbiAgICAgIGFsbG93IHJlYWQ6XG4gICAgICAgIGlmIHJlcXVlc3QuYXV0aCAhPSBudWxsXG4gICAgICAgICYmIGV4aXN0cygvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpL0NvbGxlY3Rpb25zLyQoY29sbGVjdGlvbikpXG4gICAgICAgICYmIGdldCgvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpL0NvbGxlY3Rpb25zLyQoY29sbGVjdGlvbikpLmRhdGEucm9sZXNbcmVxdWVzdC5hdXRoLnRva2VuLmVtYWlsXSBpbiBbJ0FETUlOJywgJ0VESVRPUicsICdWSUVXRVInXTtcbiAgICB9XG4gIH1cbn1cbmA7XG5cbi8qKlxuICogQWRkcyB0aGUgcm9vdC1jbXMgc2VjdXJpdHkgcnVsZXMgdG8gYSBGaXJlYmFzZSBwcm9qZWN0LlxuICogTk9URTogVGhpcyBmdW5jdGlvbiB3aWxsIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgcnVsZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseVNlY3VyaXR5UnVsZXMocHJvamVjdElkOiBzdHJpbmcpIHtcbiAgLy8gVE9ETyhzdGV2ZW5sZSk6IGNoZWNrIGlmIGFuIGFwcCBleGlzdHMgZmlyc3QgYmVmb3JlIGluaXRpYWxpemluZy5cbiAgY29uc3QgYXBwID0gaW5pdGlhbGl6ZUFwcCh7cHJvamVjdElkfSk7XG4gIGNvbnN0IHNlY3VyaXR5UnVsZXMgPSBnZXRTZWN1cml0eVJ1bGVzKGFwcCk7XG4gIGF3YWl0IHNlY3VyaXR5UnVsZXMucmVsZWFzZUZpcmVzdG9yZVJ1bGVzZXRGcm9tU291cmNlKEZJUkVTVE9SRV9SVUxFUyk7XG59XG4iLCAiaW1wb3J0IHtSb290Q29uZmlnfSBmcm9tICdAYmxpbmtrL3Jvb3QnO1xuXG5pbXBvcnQge2dldENtc1BsdWdpbn0gZnJvbSAnLi4vLi4vY29yZS9jbGllbnQuanMnO1xuaW1wb3J0IHthcHBseVNlY3VyaXR5UnVsZXN9IGZyb20gJy4uLy4uL2NvcmUvc2VjdXJpdHkuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRGaXJlYmFzZU9wdGlvbnMge1xuICAvKiogR0NQIHByb2plY3QgaWQuICovXG4gIHByb2plY3Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RmlyZWJhc2Uocm9vdENvbmZpZzogUm9vdENvbmZpZykge1xuICByZXR1cm4gKG9wdGlvbnM6IEluaXRGaXJlYmFzZU9wdGlvbnMpID0+IHtcbiAgICBsZXQgZ2NwUHJvamVjdElkOiBzdHJpbmc7XG4gICAgaWYgKG9wdGlvbnMucHJvamVjdCkge1xuICAgICAgZ2NwUHJvamVjdElkID0gb3B0aW9ucy5wcm9qZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gICAgICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gY21zUGx1Z2luLmdldENvbmZpZygpO1xuICAgICAgZ2NwUHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5maXJlYmFzZUNvbmZpZy5wcm9qZWN0SWQ7XG4gICAgfVxuICAgIGlmICghZ2NwUHJvamVjdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcmViYXNlQ29uZmlnLnByb2plY3RJZCBub3Qgc2V0IGluIGNtcyBwbHVnaW4gb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBnY3AgcHJvamVjdDogJHtnY3BQcm9qZWN0SWR9YCk7XG4gICAgY29uc29sZS5sb2coJ1x1RDgzRFx1REM2RSB1cGRhdGluZyBzZWN1cml0eSBydWxlcy4uLicpO1xuICAgIGFwcGx5U2VjdXJpdHlSdWxlcyhnY3BQcm9qZWN0SWQpO1xuICAgIGNvbnNvbGUubG9nKCdkb25lIGluaXRpYWxpemluZyBmaXJlYmFzZSBwcm9qZWN0IScpO1xuICB9O1xufVxuIiwgImltcG9ydCB7cHJvbWlzZXMgYXMgZnN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSAnbm9kZTp1cmwnO1xuXG5pbXBvcnQge1Jvb3RDb25maWd9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge3ZpdGVTc3JMb2FkTW9kdWxlfSBmcm9tICdAYmxpbmtrL3Jvb3Qvbm9kZSc7XG5pbXBvcnQgKiBhcyBkb20gZnJvbSAnZHRzLWRvbSc7XG5cbmltcG9ydCB7RmllbGQsIFNjaGVtYX0gZnJvbSAnLi4vLi4vY29yZS9zY2hlbWEuanMnO1xuXG50eXBlIFByb2plY3RNb2R1bGUgPSB0eXBlb2YgaW1wb3J0KCcuLi8uLi9jb3JlL3Byb2plY3QuanMnKTtcbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlcyhyb290Q29uZmlnOiBSb290Q29uZmlnKSB7XG4gIGNvbnN0IHJvb3REaXIgPSByb290Q29uZmlnLnJvb3REaXI7XG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3Byb2plY3QuanMnKTtcbiAgICBjb25zdCBwcm9qZWN0ID0gKGF3YWl0IHZpdGVTc3JMb2FkTW9kdWxlKFxuICAgICAgcm9vdENvbmZpZyxcbiAgICAgIG1vZHVsZVBhdGhcbiAgICApKSBhcyBQcm9qZWN0TW9kdWxlO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBwcm9qZWN0LmdldFByb2plY3RTY2hlbWFzKCk7XG4gICAgY29uc29sZS5sb2coYGdlbmVyYXRpbmcgcm9vdC1jbXMuZC50cyBmcm9tICR7cm9vdERpcn0uLi5gKTtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5yZXNvbHZlKHJvb3REaXIsICdyb290LWNtcy5kLnRzJyk7XG4gICAgYXdhaXQgZ2VuZXJhdGVTY2hlbWFEdHMob3V0cHV0UGF0aCwgc2NoZW1hcyk7XG4gICAgY29uc29sZS5sb2coJ3NhdmVkIHJvb3QtY21zLmQudHMhJyk7XG4gIH07XG59XG5cbmNvbnN0IFRFTVBMQVRFID0gYC8qKiBSb290LmpzIENNUyB0eXBlcy4gVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9vdENNU0RvYzxGaWVsZHMgZXh0ZW5kcyB7fT4ge1xuICAvKiogVGhlIGlkIG9mIHRoZSBkb2MsIGUuZy4gXCJQYWdlcy9mb28tYmFyXCIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBpZCBvZiB0aGUgZG9jLCBlLmcuIFwiUGFnZXNcIi4gKi9cbiAgY29sbGVjdGlvbklkOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2x1ZyBvZiB0aGUgZG9jLCBlLmcuIFwiZm9vLWJhclwiLiAqL1xuICBzbHVnOiBzdHJpbmc7XG4gIC8qKiBTeXN0ZW0tbGV2ZWwgbWV0YWRhdGEuICovXG4gIHN5czoge1xuICAgIGNyZWF0ZWRBdDogbnVtYmVyO1xuICAgIGNyZWF0ZWRCeTogc3RyaW5nO1xuICAgIG1vZGlmaWVkQXQ6IG51bWJlcjtcbiAgICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gICAgZmlyc3RQdWJsaXNoZWRBdD86IG51bWJlcjtcbiAgICBmaXJzdFB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIHB1Ymxpc2hlZEF0PzogbnVtYmVyO1xuICAgIHB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIGxvY2FsZXM/OiBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqIFVzZXItZW50ZXJlZCBmaWVsZCB2YWx1ZXMgZnJvbSB0aGUgQ01TLiAqL1xuICBmaWVsZHM/OiBGaWVsZHM7XG59YDtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByb290LWNtcy5kLnRzIGZpbGUgZnJvbSB0aGUgLnNjaGVtYS50cyBmaWxlcyBpbiB0aGUgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlU2NoZW1hRHRzKFxuICBvdXRwdXRQYXRoOiBzdHJpbmcsXG4gIHNjaGVtYXM6IFJlY29yZDxzdHJpbmcsIFNjaGVtYT5cbikge1xuICBjb25zdCByZXN1bHRzID0gW1RFTVBMQVRFXTtcbiAgZm9yIChjb25zdCBmaWxlSWQgaW4gc2NoZW1hcykge1xuICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYXNbZmlsZUlkXTtcbiAgICByZXN1bHRzLnB1c2gocmVuZGVyU2NoZW1hKGZpbGVJZCwgc2NoZW1hKSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0c1xuICAgIC5qb2luKCdcXG5cXG4nKVxuICAgIC5yZXBsYWNlQWxsKCcvKiogICcsICcvKiogJylcbiAgICAucmVwbGFjZUFsbCgnICAqLycsICcgKi8nKVxuICAgIC5yZXBsYWNlKC9cXHJcXG58XFxyfFxcbi9nLCAnXFxuJyk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShvdXRwdXRQYXRoLCBvdXRwdXQsICd1dGYtOCcpO1xufVxuXG5mdW5jdGlvbiBmaWVsZFByb3BlcnR5KGZpZWxkOiBGaWVsZCk6IGRvbS5Qcm9wZXJ0eURlY2xhcmF0aW9uIHtcbiAgY29uc3QgcHJvcCA9IGRvbS5jcmVhdGUucHJvcGVydHkoXG4gICAgZmllbGQuaWQhLFxuICAgIGZpZWxkVHlwZShmaWVsZCksXG4gICAgZG9tLkRlY2xhcmF0aW9uRmxhZ3MuT3B0aW9uYWxcbiAgKTtcbiAgY29uc3QganNkb2MgPSBbXTtcbiAgaWYgKGZpZWxkLmxhYmVsKSB7XG4gICAgaWYgKGZpZWxkLmhlbHApIHtcbiAgICAgIGpzZG9jLnB1c2goYCR7ZmllbGQubGFiZWx9LiAke2ZpZWxkLmhlbHB9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGpzZG9jLnB1c2goZmllbGQubGFiZWwpO1xuICAgIH1cbiAgfVxuICBpZiAoZmllbGQuZGVwcmVjYXRlZCkge1xuICAgIGpzZG9jLnB1c2goJ0BkZXByZWNhdGVkJyk7XG4gIH1cbiAgaWYgKGpzZG9jLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wLmpzRG9jQ29tbWVudCA9IGpzZG9jLmpvaW4oJ1xcbicpO1xuICB9XG4gIHJldHVybiBwcm9wO1xufVxuXG5mdW5jdGlvbiBmaWVsZFR5cGUoZmllbGQ6IEZpZWxkKTogZG9tLlR5cGUge1xuICBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgIHJldHVybiBkb20udHlwZS5hcnJheShmaWVsZFR5cGUoZmllbGQub2YpKTtcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgcmV0dXJuIGRvbS50eXBlLnN0cmluZztcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgIHJldHVybiBkb20udHlwZS5udW1iZXI7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICByZXR1cm4gZG9tLmNyZWF0ZS5vYmplY3RUeXBlKFtcbiAgICAgIGRvbS5jcmVhdGUucHJvcGVydHkoJ3NyYycsIGRvbS50eXBlLnN0cmluZyksXG4gICAgICBkb20uY3JlYXRlLnByb3BlcnR5KCd3aWR0aCcsIGRvbS50eXBlLm51bWJlciksXG4gICAgICBkb20uY3JlYXRlLnByb3BlcnR5KCdoZWlnaHQnLCBkb20udHlwZS5udW1iZXIpLFxuICAgICAgZG9tLmNyZWF0ZS5wcm9wZXJ0eShcbiAgICAgICAgJ2FsdCcsXG4gICAgICAgIGRvbS50eXBlLnN0cmluZyxcbiAgICAgICAgZG9tLkRlY2xhcmF0aW9uRmxhZ3MuT3B0aW9uYWxcbiAgICAgICksXG4gICAgXSk7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdmaWxlJykge1xuICAgIHJldHVybiBkb20uY3JlYXRlLm9iamVjdFR5cGUoW2RvbS5jcmVhdGUucHJvcGVydHkoJ3NyYycsIGRvbS50eXBlLnN0cmluZyldKTtcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gJ211bHRpc2VsZWN0Jykge1xuICAgIHJldHVybiBkb20udHlwZS5hcnJheShkb20udHlwZS5zdHJpbmcpO1xuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAnc2VsZWN0Jykge1xuICAgIHJldHVybiBkb20udHlwZS5zdHJpbmc7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRvbS50eXBlLnN0cmluZztcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBzdWJwcm9wZXJ0aWVzID0gKGZpZWxkLmZpZWxkcyB8fCBbXSkubWFwKChmKSA9PiBmaWVsZFByb3BlcnR5KGYpKTtcbiAgICByZXR1cm4gZG9tLmNyZWF0ZS5vYmplY3RUeXBlKHN1YnByb3BlcnRpZXMpO1xuICB9XG4gIHJldHVybiBkb20udHlwZS51bmtub3duO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTY2hlbWEoZmlsZUlkOiBzdHJpbmcsIHNjaGVtYTogU2NoZW1hKTogc3RyaW5nIHtcbiAgY29uc3QganNkb2MgPSBgR2VuZXJhdGVkIGZyb20gXFxgJHtmaWxlSWR9XFxgLmA7XG4gIGNvbnN0IGlkID0gcGF0aC5wYXJzZShmaWxlSWQpLm5hbWUuc3BsaXQoJy4nKVswXTtcbiAgY29uc3QgZmllbGRzSW50ZXJmYWNlID0gYCR7aWR9RmllbGRzYDtcbiAgY29uc3QgZmllbGRzID0gZG9tLmNyZWF0ZS5pbnRlcmZhY2UoXG4gICAgZmllbGRzSW50ZXJmYWNlLFxuICAgIGRvbS5EZWNsYXJhdGlvbkZsYWdzLkV4cG9ydFxuICApO1xuICBmaWVsZHMuanNEb2NDb21tZW50ID0ganNkb2M7XG4gIGZvciAoY29uc3QgZmllbGQgb2Ygc2NoZW1hLmZpZWxkcykge1xuICAgIGlmICghZmllbGQuaWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmaWVsZHMubWVtYmVycy5wdXNoKGZpZWxkUHJvcGVydHkoZmllbGQpKTtcbiAgfVxuXG4gIGNvbnN0IGZpZWxkc1R5cGVPdXRwdXQgPSBkb21cbiAgICAuZW1pdChmaWVsZHMsIHtzaW5nbGVMaW5lSnNEb2NDb21tZW50czogdHJ1ZX0pXG4gICAgLnRyaW0oKTtcbiAgaWYgKGZpbGVJZC5zdGFydHNXaXRoKCcvY29sbGVjdGlvbnMvJykpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGRvbS5jcmVhdGUubmFtZWRUeXBlUmVmZXJlbmNlKCdSb290Q01TRG9jJyk7XG4gICAgYmFzZVR5cGUudHlwZUFyZ3VtZW50cy5wdXNoKGRvbS5jcmVhdGUubmFtZWRUeXBlUmVmZXJlbmNlKGZpZWxkc0ludGVyZmFjZSkpO1xuICAgIGNvbnN0IGRvY1R5cGUgPSBkb20uY3JlYXRlLmFsaWFzKFxuICAgICAgYCR7aWR9RG9jYCxcbiAgICAgIGJhc2VUeXBlLFxuICAgICAgZG9tLkRlY2xhcmF0aW9uRmxhZ3MuRXhwb3J0XG4gICAgKTtcbiAgICBkb2NUeXBlLmpzRG9jQ29tbWVudCA9IGpzZG9jO1xuXG4gICAgY29uc3QgZG9jVHlwZU91dHB1dCA9IGRvbVxuICAgICAgLmVtaXQoZG9jVHlwZSwge3NpbmdsZUxpbmVKc0RvY0NvbW1lbnRzOiB0cnVlfSlcbiAgICAgIC50cmltKCk7XG4gICAgcmV0dXJuIGZpZWxkc1R5cGVPdXRwdXQgKyAnXFxuXFxuJyArIGRvY1R5cGVPdXRwdXQ7XG4gIH1cbiAgcmV0dXJuIHJlaW5kZW50KGZpZWxkc1R5cGVPdXRwdXQpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIDQtc3BhY2UgaW5kZW50cyB0byAyLlxuICovXG5mdW5jdGlvbiByZWluZGVudChpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXMgPSBpbnB1dC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHJlc3VsdHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGNvbnN0IGNvbnZlcnRlZExpbmUgPSBsaW5lLnJlcGxhY2UoLyB7NH0vZywgJyAgJyk7XG4gICAgcmVzdWx0cy5wdXNoKGNvbnZlcnRlZExpbmUpO1xuICB9XG4gIHJldHVybiByZXN1bHRzLmpvaW4oJ1xcbicpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sWUFBWTtBQUduQjtBQUFBLEVBQ0U7QUFBQSxFQUlBO0FBQUEsT0FDSztBQW1aQSxTQUFTLGFBQWEsWUFBbUM7QUFDOUQsUUFBTSxVQUFvQixXQUFXLFdBQVcsQ0FBQztBQUNqRCxRQUFNLFNBQVMsUUFBUSxLQUFLLENBQUNBLFlBQVdBLFFBQU8sU0FBUyxVQUFVO0FBQ2xFLE1BQUksQ0FBQyxRQUFRO0FBQ1gsVUFBTSxJQUFJLE1BQU0seURBQXlEO0FBQUEsRUFDM0U7QUFDQSxTQUFPO0FBQ1Q7OztBQ25hQSxTQUFRLHFCQUFvQjtBQUM1QixTQUFRLHdCQUF1QjtBQUV4QixJQUFNLGtCQUFrQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9jbGllbnQudHMiLCAiLi4vY29yZS9zZWN1cml0eS50cyIsICIuLi9jbGkvY29tbWFuZHMvaW5pdC1maXJlYmFzZS50cyIsICIuLi9jbGkvY29tbWFuZHMvZ2VuZXJhdGUtdHlwZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHtQbHVnaW4sIFJvb3RDb25maWd9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge0FwcH0gZnJvbSAnZmlyZWJhc2UtYWRtaW4vYXBwJztcbmltcG9ydCB7XG4gIEZpZWxkVmFsdWUsXG4gIEZpcmVzdG9yZSxcbiAgUXVlcnksXG4gIFRpbWVzdGFtcCxcbiAgZ2V0RmlyZXN0b3JlLFxufSBmcm9tICdmaXJlYmFzZS1hZG1pbi9maXJlc3RvcmUnO1xuaW1wb3J0IHtDTVNQbHVnaW59IGZyb20gJy4vcGx1Z2luLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBEb2M8RmllbGRzID0gYW55PiB7XG4gIC8qKiBUaGUgaWQgb2YgdGhlIGRvYywgZS5nLiBcIlBhZ2VzL2Zvby1iYXJcIi4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIGlkIG9mIHRoZSBkb2MsIGUuZy4gXCJQYWdlc1wiLiAqL1xuICBjb2xsZWN0aW9uSWQ6IHN0cmluZztcbiAgLyoqIFRoZSBzbHVnIG9mIHRoZSBkb2MsIGUuZy4gXCJmb28tYmFyXCIuICovXG4gIHNsdWc6IHN0cmluZztcbiAgc3lzOiB7XG4gICAgY3JlYXRlZEF0OiBudW1iZXI7XG4gICAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gICAgbW9kaWZpZWRBdDogbnVtYmVyO1xuICAgIG1vZGlmaWVkQnk6IHN0cmluZztcbiAgICBmaXJzdFB1Ymxpc2hlZEF0PzogbnVtYmVyO1xuICAgIGZpcnN0UHVibGlzaGVkQnk/OiBzdHJpbmc7XG4gICAgcHVibGlzaGVkQXQ/OiBudW1iZXI7XG4gICAgcHVibGlzaGVkQnk/OiBzdHJpbmc7XG4gICAgbG9jYWxlcz86IHN0cmluZ1tdO1xuICB9O1xuICBmaWVsZHM6IEZpZWxkcztcbn1cblxuZXhwb3J0IHR5cGUgRG9jTW9kZSA9ICdkcmFmdCcgfCAncHVibGlzaGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBHZXREb2NPcHRpb25zIHtcbiAgLyoqIE1vZGUsIGVpdGhlciBcImRyYWZ0XCIgb3IgXCJwdWJsaXNoZWRcIi4gKi9cbiAgbW9kZTogRG9jTW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXREb2NPcHRpb25zIHtcbiAgLyoqIE1vZGUsIGVpdGhlciBcImRyYWZ0XCIgb3IgXCJwdWJsaXNoZWRcIi4gKi9cbiAgbW9kZTogRG9jTW9kZTtcbiAgLyoqXG4gICAqIEVtYWlsIG9mIHVzZXIgbW9kaWZ5aW5nIHRoZSBkb2MuIElmIGJsYW5rLCBkZWZhdWx0cyB0byBgcm9vdC1jbXMtY2xpZW50YC5cbiAgICovXG4gIG1vZGlmaWVkQnk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdERvY3NPcHRpb25zIHtcbiAgbW9kZTogRG9jTW9kZTtcbiAgb2Zmc2V0PzogbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgb3JkZXJCeT86IHN0cmluZztcbiAgb3JkZXJCeURpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xuICBxdWVyeT86IChxdWVyeTogUXVlcnkpID0+IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldENvdW50T3B0aW9ucyB7XG4gIG1vZGU6IERvY01vZGU7XG4gIHF1ZXJ5PzogKHF1ZXJ5OiBRdWVyeSkgPT4gUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNsYXRpb24ge1xuICBbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uc01hcCB7XG4gIFtoYXNoOiBzdHJpbmddOiBUcmFuc2xhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbGVUcmFuc2xhdGlvbnMge1xuICBbc291cmNlOiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZFRyYW5zbGF0aW9uc09wdGlvbnMge1xuICB0YWdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBSb290Q01TQ2xpZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSByb290Q29uZmlnOiBSb290Q29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IGNtc1BsdWdpbjogQ01TUGx1Z2luO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3RJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwO1xuICBwcml2YXRlIHJlYWRvbmx5IGRiOiBGaXJlc3RvcmU7XG5cbiAgY29uc3RydWN0b3Iocm9vdENvbmZpZzogUm9vdENvbmZpZykge1xuICAgIHRoaXMucm9vdENvbmZpZyA9IHJvb3RDb25maWc7XG4gICAgdGhpcy5jbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG5cbiAgICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gdGhpcy5jbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gICAgdGhpcy5wcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmlkIHx8ICdkZWZhdWx0JztcbiAgICB0aGlzLmFwcCA9IHRoaXMuY21zUGx1Z2luLmdldEZpcmViYXNlQXBwKCk7XG4gICAgdGhpcy5kYiA9IGdldEZpcmVzdG9yZSh0aGlzLmFwcCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGRvYyBkYXRhIGZyb20gUm9vdC5qcyBDTVMuXG4gICAqL1xuICBhc3luYyBnZXREb2M8RmllbGRzID0gYW55PihcbiAgICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBzbHVnOiBzdHJpbmcsXG4gICAgb3B0aW9uczogR2V0RG9jT3B0aW9uc1xuICApOiBQcm9taXNlPERvYzxGaWVsZHM+IHwgbnVsbD4ge1xuICAgIGNvbnN0IHJhd0RhdGEgPSBhd2FpdCB0aGlzLmdldFJhd0RvYyhjb2xsZWN0aW9uSWQsIHNsdWcsIG9wdGlvbnMpO1xuICAgIGlmIChyYXdEYXRhKSB7XG4gICAgICByZXR1cm4gdW5tYXJzaGFsRGF0YShyYXdEYXRhKSBhcyBEb2M8RmllbGRzPjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHJhdyBkb2MgZGF0YSBhcyBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLiBPbmx5IHVzZSB0aGlzIGlmIHlvdSBrbm93XG4gICAqIHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICovXG4gIGFzeW5jIGdldFJhd0RvYyhcbiAgICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBzbHVnOiBzdHJpbmcsXG4gICAgb3B0aW9uczogR2V0RG9jT3B0aW9uc1xuICApOiBQcm9taXNlPGFueSB8IG51bGw+IHtcbiAgICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICAgIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gICAgLy8gU2x1Z3Mgd2l0aCBzbGFzaGVzIGFyZSBlbmNvZGVkIGFzIGAtLWAgaW4gdGhlIERCLlxuICAgIHNsdWcgPSBzbHVnLnJlcGxhY2VBbGwoJy8nLCAnLS0nKTtcbiAgICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vQ29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9LyR7bW9kZUNvbGxlY3Rpb259LyR7c2x1Z31gO1xuICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMuZGIuZG9jKGRiUGF0aCk7XG4gICAgY29uc3QgZG9jID0gYXdhaXQgZG9jUmVmLmdldCgpO1xuICAgIGlmIChkb2MuZXhpc3RzKSB7XG4gICAgICByZXR1cm4gZG9jLmRhdGEoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBzZXRSYXdEb2MoXG4gICAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gICAgc2x1Zzogc3RyaW5nLFxuICAgIGRhdGE6IGFueSxcbiAgICBvcHRpb25zOiBTZXREb2NPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1vZGUgPSBvcHRpb25zLm1vZGU7XG4gICAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vQ29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9LyR7bW9kZUNvbGxlY3Rpb259LyR7c2x1Z31gO1xuICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMuZGIuZG9jKGRiUGF0aCk7XG4gICAgYXdhaXQgZG9jUmVmLnNldChkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyBkb2NzIGZyb20gYSBSb290LmpzIENNUyBjb2xsZWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgbGlzdERvY3M8VD4oXG4gICAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogTGlzdERvY3NPcHRpb25zXG4gICk6IFByb21pc2U8e2RvY3M6IFRbXX0+IHtcbiAgICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICAgIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gICAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufWA7XG4gICAgbGV0IHF1ZXJ5OiBRdWVyeSA9IHRoaXMuZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICAgIGlmIChvcHRpb25zLmxpbWl0KSB7XG4gICAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0KG9wdGlvbnMubGltaXQpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5vZmZzZXQpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkub2Zmc2V0KG9wdGlvbnMub2Zmc2V0KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub3JkZXJCeSkge1xuICAgICAgcXVlcnkgPSBxdWVyeS5vcmRlckJ5KG9wdGlvbnMub3JkZXJCeSwgb3B0aW9ucy5vcmRlckJ5RGlyZWN0aW9uKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeShxdWVyeSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBxdWVyeS5nZXQoKTtcbiAgICBjb25zdCBkb2NzOiBUW10gPSBbXTtcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gdW5tYXJzaGFsRGF0YShyZXN1bHQuZGF0YSgpKSBhcyBUO1xuICAgICAgZG9jcy5wdXNoKGRvYyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtkb2NzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZG9jcyBpbiBhIFJvb3QuanMgQ01TIGNvbGxlY3Rpb24uXG4gICAqL1xuICBhc3luYyBnZXREb2NzQ291bnQoY29sbGVjdGlvbklkOiBzdHJpbmcsIG9wdGlvbnM6IEdldENvdW50T3B0aW9ucykge1xuICAgIGNvbnN0IG1vZGUgPSBvcHRpb25zLm1vZGU7XG4gICAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vQ29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9LyR7bW9kZUNvbGxlY3Rpb259YDtcbiAgICBsZXQgcXVlcnk6IFF1ZXJ5ID0gdGhpcy5kYi5jb2xsZWN0aW9uKGRiUGF0aCk7XG4gICAgaWYgKG9wdGlvbnMucXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeShxdWVyeSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBxdWVyeS5jb3VudCgpLmdldCgpO1xuICAgIGNvbnN0IGNvdW50ID0gcmVzdWx0cy5kYXRhKCkuY291bnQ7XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBzY2hlZHVsZWQgZG9jcy5cbiAgICovXG4gIGFzeW5jIHB1Ymxpc2hTY2hlZHVsZWREb2NzKCkge1xuICAgIGNvbnN0IHByb2plY3RDb2xsZWN0aW9uc1BhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vQ29sbGVjdGlvbnNgO1xuICAgIGNvbnN0IG5vdyA9IE1hdGguY2VpbChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMuZGIuY29sbGVjdGlvbkdyb3VwKCdTY2hlZHVsZWQnKS5nZXQoKTtcbiAgICBjb25zdCBkb2NzID0gc25hcHNob3QuZG9jc1xuICAgICAgLmZpbHRlcigoZCkgPT4ge1xuICAgICAgICAvLyBGaWx0ZXIgZG9jcyBieSBwcm9qZWN0LlxuICAgICAgICBpZiAoIWQucmVmLnBhdGguc3RhcnRzV2l0aChwcm9qZWN0Q29sbGVjdGlvbnNQYXRoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaWx0ZXIgZG9jcyB3aGVyZSBzY2hlZHVsZWRBdCBpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgLy8gTk9URShzdGV2ZW5sZSk6IHRoZSBmaWx0ZXJpbmcgaXMgZG9uZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVzaW5nIGEgcXVlcnlcbiAgICAgICAgLy8gdG8gYXZvaWQgaGF2aW5nIHRvIGNyZWF0ZSBhbiBpbmRleCBpbiBmaXJlc3RvcmUuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBkLmRhdGEoKSB8fCB7fTtcbiAgICAgICAgY29uc3Qgc2NoZWR1bGVkQXQ6IFRpbWVzdGFtcCB8IHVuZGVmaW5lZCA9IGRhdGEuc3lzPy5zY2hlZHVsZWRBdDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBzY2hlZHVsZWRBdCAmJiBzY2hlZHVsZWRBdC50b01pbGxpcyAmJiBzY2hlZHVsZWRBdC50b01pbGxpcygpIDw9IG5vd1xuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGQpID0+IHtcbiAgICAgICAgY29uc3QgZGJQYXRoID0gZC5yZWYucGF0aDtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBkYlBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgY29uc3Qgc2x1ZyA9IHNlZ21lbnRzLmF0KC0xKTtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHNlZ21lbnRzLmF0KC0zKTtcbiAgICAgICAgY29uc3QgaWQgPSBgJHtjb2xsZWN0aW9ufS8ke3NsdWd9YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBkLmRhdGEoKSxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgIHNsdWcsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgIGlmIChkb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coJ25vIGRvY3MgdG8gc2NoZWR1bGUnKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBFYWNoIHRyYW5zYWN0aW9uIG9yIGJhdGNoIGNhbiB3cml0ZSBhIG1heCBvZiA1MDAgb3BzLlxuICAgIC8vIGh0dHBzOi8vZmlyZWJhc2UuZ29vZ2xlLmNvbS9kb2NzL2ZpcmVzdG9yZS9tYW5hZ2UtZGF0YS90cmFuc2FjdGlvbnNcbiAgICBsZXQgYmF0Y2hDb3VudCA9IDA7XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLmRiLmJhdGNoKCk7XG4gICAgY29uc3QgcHVibGlzaGVkRG9jczogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGRvYyBvZiBkb2NzKSB7XG4gICAgICBjb25zdCB7aWQsIGNvbGxlY3Rpb24sIHNsdWcsIGRhdGF9ID0gZG9jO1xuICAgICAgY29uc3QgZHJhZnRSZWYgPSB0aGlzLmRiLmRvYyhcbiAgICAgICAgYCR7cHJvamVjdENvbGxlY3Rpb25zUGF0aH0vJHtjb2xsZWN0aW9ufS9EcmFmdHMvJHtzbHVnfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBzY2hlZHVsZWRSZWYgPSB0aGlzLmRiLmRvYyhcbiAgICAgICAgYCR7cHJvamVjdENvbGxlY3Rpb25zUGF0aH0vJHtjb2xsZWN0aW9ufS9TY2hlZHVsZWQvJHtzbHVnfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBwdWJsaXNoZWRSZWYgPSB0aGlzLmRiLmRvYyhcbiAgICAgICAgYCR7cHJvamVjdENvbGxlY3Rpb25zUGF0aH0vJHtjb2xsZWN0aW9ufS9QdWJsaXNoZWQvJHtzbHVnfWBcbiAgICAgICk7XG4gICAgICBjb25zdCB7c2NoZWR1bGVkQXQsIHNjaGVkdWxlZEJ5LCAuLi5zeXN9ID0gZGF0YS5zeXMgfHwge307XG5cbiAgICAgIC8vIE9ubHkgdXBkYXRlIGBmaXJzdFB1Ymxpc2hlZGAgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LlxuICAgICAgY29uc3QgZmlyc3RQdWJsaXNoZWRBdCA9IHN5cy5maXJzdFB1Ymxpc2hlZEF0ID8/IHNjaGVkdWxlZEF0O1xuICAgICAgY29uc3QgZmlyc3RQdWJsaXNoZWRCeSA9IHN5cy5maXJzdFB1Ymxpc2hlZEJ5ID8/IChzY2hlZHVsZWRCeSB8fCAnJyk7XG5cbiAgICAgIC8vIFNhdmUgcHVibGlzaGVkIGRvYy5cbiAgICAgIGJhdGNoLnNldChwdWJsaXNoZWRSZWYsIHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIHNsdWcsXG4gICAgICAgIGZpZWxkczogZGF0YS5maWVsZHMgfHwge30sXG4gICAgICAgIHN5czoge1xuICAgICAgICAgIC4uLnN5cyxcbiAgICAgICAgICBmaXJzdFB1Ymxpc2hlZEF0OiBmaXJzdFB1Ymxpc2hlZEF0LFxuICAgICAgICAgIGZpcnN0UHVibGlzaGVkQnk6IGZpcnN0UHVibGlzaGVkQnksXG4gICAgICAgICAgcHVibGlzaGVkQXQ6IEZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgICAgcHVibGlzaGVkQnk6IHNjaGVkdWxlZEJ5IHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBiYXRjaENvdW50ICs9IDE7XG5cbiAgICAgIC8vIFJlbW92ZSBwdWJsaXNoZWQgZG9jLlxuICAgICAgYmF0Y2guZGVsZXRlKHNjaGVkdWxlZFJlZik7XG4gICAgICBiYXRjaENvdW50ICs9IDE7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZHJhZnQgZG9jIHRvIHJlbW92ZSBgc2NoZWR1bGVkQXRgIGFuZCBgc2NoZWR1bGVkQnlgIGZpZWxkc1xuICAgICAgLy8gYW5kIHVwZGF0ZSB0aGUgYHB1Ymxpc2hlZEF0YCBhbmQgYHB1Ymxpc2hlZEJ5YCBmaWVsZHMuXG4gICAgICBiYXRjaC51cGRhdGUoZHJhZnRSZWYsIHtcbiAgICAgICAgJ3N5cy5zY2hlZHVsZWRBdCc6IEZpZWxkVmFsdWUuZGVsZXRlKCksXG4gICAgICAgICdzeXMuc2NoZWR1bGVkQnknOiBGaWVsZFZhbHVlLmRlbGV0ZSgpLFxuICAgICAgICAnc3lzLmZpcnN0UHVibGlzaGVkQXQnOiBmaXJzdFB1Ymxpc2hlZEF0LFxuICAgICAgICAnc3lzLmZpcnN0UHVibGlzaGVkQnknOiBmaXJzdFB1Ymxpc2hlZEJ5LFxuICAgICAgICAnc3lzLnB1Ymxpc2hlZEF0JzogRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgJ3N5cy5wdWJsaXNoZWRCeSc6IHNjaGVkdWxlZEJ5IHx8ICcnLFxuICAgICAgfSk7XG4gICAgICBiYXRjaENvdW50ICs9IDE7XG5cbiAgICAgIHB1Ymxpc2hlZERvY3MucHVzaChkb2MpO1xuXG4gICAgICBpZiAoYmF0Y2hDb3VudCA+PSA0OTgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgYmF0Y2guY29tbWl0KCk7XG4gICAgY29uc29sZS5sb2coYHB1Ymxpc2hlZCAke3B1Ymxpc2hlZERvY3MubGVuZ3RofSBkb2NzIWApO1xuICAgIHJldHVybiBwdWJsaXNoZWREb2NzO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRyYW5zbGF0aW9ucyBzYXZlZCBpbiB0aGUgdHJhbnNsYXRpb25zIGNvbGxlY3Rpb24sIG9wdGlvbmFsbHlcbiAgICogZmlsdGVyZWQgYnkgdGFnLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgbWFwIGxpa2U6XG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAgXCI8aGFzaD5cIjoge1wic291cmNlXCI6IFwiSGVsbG9cIiwgXCJlc1wiOiBcIkhvbGFcIiwgXCJmclwiOiBcIkJvbmpvdXJcIn0sXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBsb2FkVHJhbnNsYXRpb25zKFxuICAgIG9wdGlvbnM/OiBMb2FkVHJhbnNsYXRpb25zT3B0aW9uc1xuICApOiBQcm9taXNlPFRyYW5zbGF0aW9uc01hcD4ge1xuICAgIGNvbnN0IGRiUGF0aCA9IGBQcm9qZWN0cy8ke3RoaXMucHJvamVjdElkfS9UcmFuc2xhdGlvbnNgO1xuICAgIGxldCBxdWVyeTogUXVlcnkgPSB0aGlzLmRiLmNvbGxlY3Rpb24oZGJQYXRoKTtcbiAgICBpZiAob3B0aW9ucz8udGFncykge1xuICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZSgndGFncycsICdhcnJheS1jb250YWlucy1hbnknLCBvcHRpb25zLnRhZ3MpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5U25hcHNob3QgPSBhd2FpdCBxdWVyeS5nZXQoKTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnNNYXA6IFRyYW5zbGF0aW9uc01hcCA9IHt9O1xuICAgIHF1ZXJ5U25hcHNob3QuZm9yRWFjaCgoZG9jKSA9PiB7XG4gICAgICBjb25zdCBoYXNoID0gZG9jLmlkO1xuICAgICAgdHJhbnNsYXRpb25zTWFwW2hhc2hdID0gZG9jLmRhdGEoKSBhcyBUcmFuc2xhdGlvbjtcbiAgICB9KTtcbiAgICByZXR1cm4gdHJhbnNsYXRpb25zTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgbWFwIG9mIHRyYW5zbGF0aW9ucywgZS5nLjpcbiAgICogYGBgXG4gICAqIGF3YWl0IGNsaWVudC5zYXZlVHJhbnNsYXRpb25zKHtcbiAgICogICBcIkhlbGxvXCI6IHtcImVzXCI6IFwiSG9sYVwiLCBcImZyXCI6IFwiQm9uam91clwifSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc2F2ZVRyYW5zbGF0aW9ucyhcbiAgICB0cmFuc2xhdGlvbnM6IHtcbiAgICAgIFtzb3VyY2U6IHN0cmluZ106IHtbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIH0sXG4gICAgdGFncz86IHN0cmluZ1tdXG4gICkge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uc1BhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vVHJhbnNsYXRpb25zYDtcbiAgICBjb25zdCBiYXRjaCA9IHRoaXMuZGIuYmF0Y2goKTtcbiAgICBsZXQgYmF0Y2hDb3VudCA9IDA7XG4gICAgT2JqZWN0LmVudHJpZXModHJhbnNsYXRpb25zKS5mb3JFYWNoKChbc291cmNlLCBzb3VyY2VUcmFuc2xhdGlvbnNdKSA9PiB7XG4gICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRUcmFuc2xhdGlvbktleShzb3VyY2UpO1xuICAgICAgY29uc3QgdHJhbnNsYXRpb25SZWYgPSB0aGlzLmRiLmRvYyhgJHt0cmFuc2xhdGlvbnNQYXRofS8ke2hhc2h9YCk7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICAgIC4uLnNvdXJjZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgc291cmNlOiB0aGlzLm5vcm1hbGl6ZVN0cmluZyhzb3VyY2UpLFxuICAgICAgfTtcbiAgICAgIGlmICh0YWdzKSB7XG4gICAgICAgIGRhdGEudGFncyA9IHRhZ3M7XG4gICAgICB9XG4gICAgICBiYXRjaC51cGRhdGUodHJhbnNsYXRpb25SZWYsIGRhdGEpO1xuICAgICAgYmF0Y2hDb3VudCArPSAxO1xuICAgIH0pO1xuICAgIGlmIChiYXRjaENvdW50ID4gNTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VwIHRvIDUwMCB0cmFuc2xhdGlvbnMgY2FuIGJlIHNhdmVkIGF0IGEgdGltZS4nKTtcbiAgICB9XG4gICAgYXdhaXQgYmF0Y2guY29tbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgXCJrZXlcIiB1c2VkIGZvciBhIHRyYW5zbGF0aW9uIGFzIHN0b3JlZCBpbiB0aGUgZGIuIFRyYW5zbGF0aW9uc1xuICAgKiBhcmUgc3RvcmVkIHVuZGVyIGBQcm9qZWN0cy88cHJvamVjdCBpZD4vVHJhbnNsYXRpb25zLzxzaGExIGhhc2g+YC5cbiAgICovXG4gIGdldFRyYW5zbGF0aW9uS2V5KHNvdXJjZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2hhMSA9IGNyeXB0b1xuICAgICAgLmNyZWF0ZUhhc2goJ3NoYTEnKVxuICAgICAgLnVwZGF0ZSh0aGlzLm5vcm1hbGl6ZVN0cmluZyhzb3VyY2UpKVxuICAgICAgLmRpZ2VzdCgnaGV4Jyk7XG4gICAgcmV0dXJuIHNoYTE7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIGEgc3RyaW5nIHRoYXQncyB1c2VkIGZvciB0cmFuc2xhdGlvbnMuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmc6XG4gICAqIC0gUmVtb3ZlcyBhbnkgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlXG4gICAqIC0gUmVtb3ZlcyBzcGFjZXMgYXQgdGhlIGVuZCBvZiBhbnkgbGluZVxuICAgKi9cbiAgbm9ybWFsaXplU3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgbGluZXMgPSBTdHJpbmcoc3RyKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltRW5kKCkpO1xuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0cmFuc2xhdGlvbnMgZm9yIGEgcGFydGljdWxhciBsb2NhbGUuXG4gICAqXG4gICAqIFJldHVybnMgYSBtYXAgbGlrZTpcbiAgICogYGBgXG4gICAqIHtcbiAgICogICBcIkhlbGxvXCI6IFwiQm9uam91clwiLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgbG9hZFRyYW5zbGF0aW9uc0ZvckxvY2FsZShcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTG9hZFRyYW5zbGF0aW9uc09wdGlvbnNcbiAgKTogUHJvbWlzZTxMb2NhbGVUcmFuc2xhdGlvbnM+IHtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnNNYXAgPSBhd2FpdCB0aGlzLmxvYWRUcmFuc2xhdGlvbnMob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRyYW5zbGF0aW9uc0ZvckxvY2FsZSh0cmFuc2xhdGlvbnNNYXAsIGxvY2FsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENtc1BsdWdpbihyb290Q29uZmlnOiBSb290Q29uZmlnKTogQ01TUGx1Z2luIHtcbiAgY29uc3QgcGx1Z2luczogUGx1Z2luW10gPSByb290Q29uZmlnLnBsdWdpbnMgfHwgW107XG4gIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuZmluZCgocGx1Z2luKSA9PiBwbHVnaW4ubmFtZSA9PT0gJ3Jvb3QtY21zJyk7XG4gIGlmICghcGx1Z2luKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCByb290LWNtcyBwbHVnaW4gY29uZmlnIGluIHJvb3QuY29uZmlnLnRzJyk7XG4gIH1cbiAgcmV0dXJuIHBsdWdpbiBhcyBDTVNQbHVnaW47XG59XG5cbi8qKlxuICogV2Fsa3MgdGhlIGRhdGEgdHJlZSBhbmQgY29udmVydHMgYW55IFRpbWVzdGFtcCBvYmplY3RzIHRvIG1pbGxpcyBhbmQgYW55XG4gKiBfYXJyYXkgbWFwcyB0byBub3JtYWwgYXJyYXlzLlxuICpcbiAqIEUuZy46XG4gKlxuICogbm9ybWFsaXplRGF0YSh7XG4gKiAgIHN5czoge21vZGlmaWVkQXQ6IFRpbWVzdGFtcCgxMjMpfSxcbiAqICAgZmllbGRzOiB7XG4gKiAgICAgX2FycmF5OiBbJ2FzZGYnXSxcbiAqICAgICBhc2RmOiB7dGl0bGU6ICdoZWxsbyd9XG4gKiAgIH1cbiAqIH0pXG4gKiAvLyA9PiB7c3lzOiB7bW9kaWZpZWRBdDogMTIzfSwgZmllbGRzOiB7Zm9vOiBbe3RpdGxlOiAnaGVsbG8nfV19fVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5tYXJzaGFsRGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgY29uc3QgdmFsID0gZGF0YVtrZXldO1xuICAgIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICBpZiAodmFsLnRvTWlsbGlzKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsLnRvTWlsbGlzKCk7XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5oYXNPd24odmFsLCAnX2FycmF5JykgJiYgQXJyYXkuaXNBcnJheSh2YWwuX2FycmF5KSkge1xuICAgICAgICBjb25zdCBhcnIgPSB2YWwuX2FycmF5Lm1hcCgoazogc3RyaW5nKSA9PiB1bm1hcnNoYWxEYXRhKHZhbFtrXSB8fCB7fSkpO1xuICAgICAgICByZXN1bHRba2V5XSA9IGFycjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdW5tYXJzaGFsRGF0YSh2YWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIEBkZXByZWNhdGVkIFVzZSBgdW5tYXJzaGFsRGF0YSgpYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEoZGF0YTogYW55KTogYW55IHtcbiAgcmV0dXJuIHVubWFyc2hhbERhdGEoZGF0YSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJyYXlPYmplY3Qge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIF9hcnJheTogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhbiBhcnJheSBpbnRvIGFuIGBBcnJheU9iamVjdGAsIGUuZy46XG4gKlxuICogYGBgXG4gKiBtYXJzaGFsQXJyYXkoWzEsIDIsIDNdKVxuICogLy8gPT4ge2E6IDEsIGI6IDIsIGM6IDMsIF9hcnJheTogWydhJywgJ2InLCAnYyddfVxuICogYGBgXG4gKlxuICogVGhpcyBkYXRhYmFzZSBzdG9yYWdlIG1ldGhvZCBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlIGEgc2luZ2xlIGZpZWxkIGluIGFcbiAqIGRlZXBseSBuZXN0ZWQgYXJyYXkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFyc2hhbEFycmF5KGFycjogYW55W10pOiBBcnJheU9iamVjdCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuICBjb25zdCBhcnJPYmplY3Q6IEFycmF5T2JqZWN0ID0ge19hcnJheTogW119O1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgY29uc3Qga2V5ID0gcmFuZFN0cmluZyg2KTtcbiAgICBhcnJPYmplY3Rba2V5XSA9IGl0ZW07XG4gICAgYXJyT2JqZWN0Ll9hcnJheS5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGFyck9iamVjdDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBgQXJyYXlPYmplY3RgIHRvIGEgbm9ybWFsIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5tYXJzaGFsQXJyYXkoYXJyT2JqZWN0OiBBcnJheU9iamVjdCk6IGFueVtdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFyck9iamVjdD8uX2FycmF5KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBhcnIgPSBhcnJPYmplY3QuX2FycmF5Lm1hcCgoazogc3RyaW5nKSA9PiBhcnJPYmplY3Rba10pO1xuICByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiByYW5kU3RyaW5nKGxlbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGNvbnN0IGNoYXJzID1cbiAgICAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgcmFuZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCk7XG4gICAgcmVzdWx0LnB1c2goY2hhcnMuY2hhckF0KHJhbmQpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmpvaW4oJycpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgdHJhbnNsYXRpb25zIG1hcCBmcm9tIGBsb2FkVHJhbnNsYXRpb25zKClgIHRvIGEgbWFwIG9mIHNvdXJjZSB0b1xuICogdHJhbnNsYXRlZCBzdHJpbmcgZm9yIGEgcGFydGljdWxhciBsb2NhbGUuXG4gKlxuICogUmV0dXJucyBhIG1hcCBsaWtlOlxuICogYGBgXG4gKiB7XG4gKiAgIFwiSGVsbG9cIjogXCJCb25qb3VyXCIsXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0aW9uc0ZvckxvY2FsZShcbiAgdHJhbnNsYXRpb25zTWFwOiBUcmFuc2xhdGlvbnNNYXAsXG4gIGxvY2FsZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgbG9jYWxlVHJhbnNsYXRpb25zOiBMb2NhbGVUcmFuc2xhdGlvbnMgPSB7fTtcbiAgT2JqZWN0LnZhbHVlcyh0cmFuc2xhdGlvbnNNYXApLmZvckVhY2goKHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHN0cmluZy5zb3VyY2U7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSBzdHJpbmdbbG9jYWxlXSB8fCBzdHJpbmcuZW4gfHwgc3RyaW5nLnNvdXJjZTtcbiAgICBsb2NhbGVUcmFuc2xhdGlvbnNbc291cmNlXSA9IHRyYW5zbGF0aW9uO1xuICB9KTtcbiAgcmV0dXJuIGxvY2FsZVRyYW5zbGF0aW9ucztcbn1cbiIsICJpbXBvcnQge2luaXRpYWxpemVBcHB9IGZyb20gJ2ZpcmViYXNlLWFkbWluL2FwcCc7XG5pbXBvcnQge2dldFNlY3VyaXR5UnVsZXN9IGZyb20gJ2ZpcmViYXNlLWFkbWluL3NlY3VyaXR5LXJ1bGVzJztcblxuZXhwb3J0IGNvbnN0IEZJUkVTVE9SRV9SVUxFUyA9IGBydWxlc192ZXJzaW9uID0gJzInO1xuc2VydmljZSBjbG91ZC5maXJlc3RvcmUge1xuICBtYXRjaCAvZGF0YWJhc2VzL3tkYXRhYmFzZX0vZG9jdW1lbnRzIHtcbiAgICBtYXRjaCAvUHJvamVjdHMve3Byb2plY3R9L3tkb2N1bWVudD0qKn0ge1xuICAgICAgYWxsb3cgd3JpdGU6XG4gICAgICAgIGlmIHJlcXVlc3QuYXV0aCAhPSBudWxsXG4gICAgICAgICYmIGV4aXN0cygvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpKVxuICAgICAgICAmJiBnZXQoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KSkuZGF0YS5yb2xlc1tyZXF1ZXN0LmF1dGgudG9rZW4uZW1haWxdIGluIFsnQURNSU4nLCAnRURJVE9SJ107XG4gICAgICBhbGxvdyByZWFkOlxuICAgICAgICBpZiByZXF1ZXN0LmF1dGggIT0gbnVsbFxuICAgICAgICAmJiBleGlzdHMoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KSlcbiAgICAgICAgJiYgZ2V0KC9kYXRhYmFzZXMvJChkYXRhYmFzZSkvZG9jdW1lbnRzL1Byb2plY3RzLyQocHJvamVjdCkpLmRhdGEucm9sZXNbcmVxdWVzdC5hdXRoLnRva2VuLmVtYWlsXSBpbiBbJ0FETUlOJywgJ0VESVRPUicsICdWSUVXRVInXTtcbiAgICB9XG5cbiAgICBtYXRjaCAvUHJvamVjdHMve3Byb2plY3R9L0NvbGxlY3Rpb25zL3tjb2xsZWN0aW9ufS97ZG9jdW1lbnQ9Kip9IHtcbiAgICAgIGFsbG93IHdyaXRlOlxuICAgICAgICBpZiByZXF1ZXN0LmF1dGggIT0gbnVsbFxuICAgICAgICAmJiBleGlzdHMoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KS9Db2xsZWN0aW9ucy8kKGNvbGxlY3Rpb24pKVxuICAgICAgICAmJiBnZXQoL2RhdGFiYXNlcy8kKGRhdGFiYXNlKS9kb2N1bWVudHMvUHJvamVjdHMvJChwcm9qZWN0KS9Db2xsZWN0aW9ucy8kKGNvbGxlY3Rpb24pKS5kYXRhLnJvbGVzW3JlcXVlc3QuYXV0aC50b2tlbi5lbWFpbF0gaW4gWydBRE1JTicsICdFRElUT1InXTtcbiAgICAgIGFsbG93IHJlYWQ6XG4gICAgICAgIGlmIHJlcXVlc3QuYXV0aCAhPSBudWxsXG4gICAgICAgICYmIGV4aXN0cygvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpL0NvbGxlY3Rpb25zLyQoY29sbGVjdGlvbikpXG4gICAgICAgICYmIGdldCgvZGF0YWJhc2VzLyQoZGF0YWJhc2UpL2RvY3VtZW50cy9Qcm9qZWN0cy8kKHByb2plY3QpL0NvbGxlY3Rpb25zLyQoY29sbGVjdGlvbikpLmRhdGEucm9sZXNbcmVxdWVzdC5hdXRoLnRva2VuLmVtYWlsXSBpbiBbJ0FETUlOJywgJ0VESVRPUicsICdWSUVXRVInXTtcbiAgICB9XG4gIH1cbn1cbmA7XG5cbi8qKlxuICogQWRkcyB0aGUgcm9vdC1jbXMgc2VjdXJpdHkgcnVsZXMgdG8gYSBGaXJlYmFzZSBwcm9qZWN0LlxuICogTk9URTogVGhpcyBmdW5jdGlvbiB3aWxsIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgcnVsZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseVNlY3VyaXR5UnVsZXMocHJvamVjdElkOiBzdHJpbmcpIHtcbiAgLy8gVE9ETyhzdGV2ZW5sZSk6IGNoZWNrIGlmIGFuIGFwcCBleGlzdHMgZmlyc3QgYmVmb3JlIGluaXRpYWxpemluZy5cbiAgY29uc3QgYXBwID0gaW5pdGlhbGl6ZUFwcCh7cHJvamVjdElkfSk7XG4gIGNvbnN0IHNlY3VyaXR5UnVsZXMgPSBnZXRTZWN1cml0eVJ1bGVzKGFwcCk7XG4gIGF3YWl0IHNlY3VyaXR5UnVsZXMucmVsZWFzZUZpcmVzdG9yZVJ1bGVzZXRGcm9tU291cmNlKEZJUkVTVE9SRV9SVUxFUyk7XG59XG4iLCAiaW1wb3J0IHtSb290Q29uZmlnfSBmcm9tICdAYmxpbmtrL3Jvb3QnO1xuXG5pbXBvcnQge2dldENtc1BsdWdpbn0gZnJvbSAnLi4vLi4vY29yZS9jbGllbnQuanMnO1xuaW1wb3J0IHthcHBseVNlY3VyaXR5UnVsZXN9IGZyb20gJy4uLy4uL2NvcmUvc2VjdXJpdHkuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRGaXJlYmFzZU9wdGlvbnMge1xuICAvKiogR0NQIHByb2plY3QgaWQuICovXG4gIHByb2plY3Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RmlyZWJhc2Uocm9vdENvbmZpZzogUm9vdENvbmZpZykge1xuICByZXR1cm4gKG9wdGlvbnM6IEluaXRGaXJlYmFzZU9wdGlvbnMpID0+IHtcbiAgICBsZXQgZ2NwUHJvamVjdElkOiBzdHJpbmc7XG4gICAgaWYgKG9wdGlvbnMucHJvamVjdCkge1xuICAgICAgZ2NwUHJvamVjdElkID0gb3B0aW9ucy5wcm9qZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gICAgICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gY21zUGx1Z2luLmdldENvbmZpZygpO1xuICAgICAgZ2NwUHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5maXJlYmFzZUNvbmZpZy5wcm9qZWN0SWQ7XG4gICAgfVxuICAgIGlmICghZ2NwUHJvamVjdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcmViYXNlQ29uZmlnLnByb2plY3RJZCBub3Qgc2V0IGluIGNtcyBwbHVnaW4gb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBnY3AgcHJvamVjdDogJHtnY3BQcm9qZWN0SWR9YCk7XG4gICAgY29uc29sZS5sb2coJ1x1RDgzRFx1REM2RSB1cGRhdGluZyBzZWN1cml0eSBydWxlcy4uLicpO1xuICAgIGFwcGx5U2VjdXJpdHlSdWxlcyhnY3BQcm9qZWN0SWQpO1xuICAgIGNvbnNvbGUubG9nKCdkb25lIGluaXRpYWxpemluZyBmaXJlYmFzZSBwcm9qZWN0IScpO1xuICB9O1xufVxuIiwgImltcG9ydCB7cHJvbWlzZXMgYXMgZnN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSAnbm9kZTp1cmwnO1xuXG5pbXBvcnQge1Jvb3RDb25maWd9IGZyb20gJ0BibGlua2svcm9vdCc7XG5pbXBvcnQge3ZpdGVTc3JMb2FkTW9kdWxlfSBmcm9tICdAYmxpbmtrL3Jvb3Qvbm9kZSc7XG5pbXBvcnQgKiBhcyBkb20gZnJvbSAnZHRzLWRvbSc7XG5cbmltcG9ydCB7RmllbGQsIFNjaGVtYX0gZnJvbSAnLi4vLi4vY29yZS9zY2hlbWEuanMnO1xuXG50eXBlIFByb2plY3RNb2R1bGUgPSB0eXBlb2YgaW1wb3J0KCcuLi8uLi9jb3JlL3Byb2plY3QuanMnKTtcbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlcyhyb290Q29uZmlnOiBSb290Q29uZmlnKSB7XG4gIGNvbnN0IHJvb3REaXIgPSByb290Q29uZmlnLnJvb3REaXI7XG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3Byb2plY3QuanMnKTtcbiAgICBjb25zdCBwcm9qZWN0ID0gKGF3YWl0IHZpdGVTc3JMb2FkTW9kdWxlKFxuICAgICAgcm9vdENvbmZpZyxcbiAgICAgIG1vZHVsZVBhdGhcbiAgICApKSBhcyBQcm9qZWN0TW9kdWxlO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBwcm9qZWN0LmdldFByb2plY3RTY2hlbWFzKCk7XG4gICAgY29uc29sZS5sb2coYGdlbmVyYXRpbmcgcm9vdC1jbXMuZC50cyBmcm9tICR7cm9vdERpcn0uLi5gKTtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5yZXNvbHZlKHJvb3REaXIsICdyb290LWNtcy5kLnRzJyk7XG4gICAgYXdhaXQgZ2VuZXJhdGVTY2hlbWFEdHMob3V0cHV0UGF0aCwgc2NoZW1hcyk7XG4gICAgY29uc29sZS5sb2coJ3NhdmVkIHJvb3QtY21zLmQudHMhJyk7XG4gIH07XG59XG5cbmNvbnN0IFRFTVBMQVRFID0gYC8qKiBSb290LmpzIENNUyB0eXBlcy4gVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9vdENNU0RvYzxGaWVsZHMgZXh0ZW5kcyB7fT4ge1xuICAvKiogVGhlIGlkIG9mIHRoZSBkb2MsIGUuZy4gXCJQYWdlcy9mb28tYmFyXCIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBpZCBvZiB0aGUgZG9jLCBlLmcuIFwiUGFnZXNcIi4gKi9cbiAgY29sbGVjdGlvbklkOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2x1ZyBvZiB0aGUgZG9jLCBlLmcuIFwiZm9vLWJhclwiLiAqL1xuICBzbHVnOiBzdHJpbmc7XG4gIC8qKiBTeXN0ZW0tbGV2ZWwgbWV0YWRhdGEuICovXG4gIHN5czoge1xuICAgIGNyZWF0ZWRBdDogbnVtYmVyO1xuICAgIGNyZWF0ZWRCeTogc3RyaW5nO1xuICAgIG1vZGlmaWVkQXQ6IG51bWJlcjtcbiAgICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gICAgZmlyc3RQdWJsaXNoZWRBdD86IG51bWJlcjtcbiAgICBmaXJzdFB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIHB1Ymxpc2hlZEF0PzogbnVtYmVyO1xuICAgIHB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIGxvY2FsZXM/OiBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqIFVzZXItZW50ZXJlZCBmaWVsZCB2YWx1ZXMgZnJvbSB0aGUgQ01TLiAqL1xuICBmaWVsZHM/OiBGaWVsZHM7XG59YDtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByb290LWNtcy5kLnRzIGZpbGUgZnJvbSB0aGUgLnNjaGVtYS50cyBmaWxlcyBpbiB0aGUgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlU2NoZW1hRHRzKFxuICBvdXRwdXRQYXRoOiBzdHJpbmcsXG4gIHNjaGVtYXM6IFJlY29yZDxzdHJpbmcsIFNjaGVtYT5cbikge1xuICBjb25zdCByZXN1bHRzID0gW1RFTVBMQVRFXTtcbiAgZm9yIChjb25zdCBmaWxlSWQgaW4gc2NoZW1hcykge1xuICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYXNbZmlsZUlkXTtcbiAgICByZXN1bHRzLnB1c2gocmVuZGVyU2NoZW1hKGZpbGVJZCwgc2NoZW1hKSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0c1xuICAgIC5qb2luKCdcXG5cXG4nKVxuICAgIC5yZXBsYWNlQWxsKCcvKiogICcsICcvKiogJylcbiAgICAucmVwbGFjZUFsbCgnICAqLycsICcgKi8nKVxuICAgIC5yZXBsYWNlKC9cXHJcXG58XFxyfFxcbi9nLCAnXFxuJyk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShvdXRwdXRQYXRoLCBvdXRwdXQsICd1dGYtOCcpO1xufVxuXG5mdW5jdGlvbiBmaWVsZFByb3BlcnR5KGZpZWxkOiBGaWVsZCk6IGRvbS5Qcm9wZXJ0eURlY2xhcmF0aW9uIHtcbiAgY29uc3QgcHJvcCA9IGRvbS5jcmVhdGUucHJvcGVydHkoXG4gICAgZmllbGQuaWQhLFxuICAgIGZpZWxkVHlwZShmaWVsZCksXG4gICAgZG9tLkRlY2xhcmF0aW9uRmxhZ3MuT3B0aW9uYWxcbiAgKTtcbiAgY29uc3QganNkb2MgPSBbXTtcbiAgaWYgKGZpZWxkLmxhYmVsKSB7XG4gICAgaWYgKGZpZWxkLmhlbHApIHtcbiAgICAgIGpzZG9jLnB1c2goYCR7ZmllbGQubGFiZWx9LiAke2ZpZWxkLmhlbHB9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGpzZG9jLnB1c2goZmllbGQubGFiZWwpO1xuICAgIH1cbiAgfVxuICBpZiAoZmllbGQuZGVwcmVjYXRlZCkge1xuICAgIGpzZG9jLnB1c2goJ0BkZXByZWNhdGVkJyk7XG4gIH1cbiAgaWYgKGpzZG9jLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wLmpzRG9jQ29tbWVudCA9IGpzZG9jLmpvaW4oJ1xcbicpO1xuICB9XG4gIHJldHVybiBwcm9wO1xufVxuXG5mdW5jdGlvbiBmaWVsZFR5cGUoZmllbGQ6IEZpZWxkKTogZG9tLlR5cGUge1xuICBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgIHJldHVybiBkb20udHlwZS5hcnJheShmaWVsZFR5cGUoZmllbGQub2YpKTtcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIGRvbS50eXBlLmJvb2xlYW47XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdkYXRlJykge1xuICAgIHJldHVybiBkb20udHlwZS5zdHJpbmc7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICByZXR1cm4gZG9tLnR5cGUubnVtYmVyO1xuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGUub2JqZWN0VHlwZShbXG4gICAgICBkb20uY3JlYXRlLnByb3BlcnR5KCdzcmMnLCBkb20udHlwZS5zdHJpbmcpLFxuICAgICAgZG9tLmNyZWF0ZS5wcm9wZXJ0eSgnd2lkdGgnLCBkb20udHlwZS5udW1iZXIpLFxuICAgICAgZG9tLmNyZWF0ZS5wcm9wZXJ0eSgnaGVpZ2h0JywgZG9tLnR5cGUubnVtYmVyKSxcbiAgICAgIGRvbS5jcmVhdGUucHJvcGVydHkoXG4gICAgICAgICdhbHQnLFxuICAgICAgICBkb20udHlwZS5zdHJpbmcsXG4gICAgICAgIGRvbS5EZWNsYXJhdGlvbkZsYWdzLk9wdGlvbmFsXG4gICAgICApLFxuICAgIF0pO1xuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAnZmlsZScpIHtcbiAgICByZXR1cm4gZG9tLmNyZWF0ZS5vYmplY3RUeXBlKFtkb20uY3JlYXRlLnByb3BlcnR5KCdzcmMnLCBkb20udHlwZS5zdHJpbmcpXSk7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcbiAgICByZXR1cm4gZG9tLnR5cGUuYXJyYXkoZG9tLnR5cGUuc3RyaW5nKTtcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZG9tLnR5cGUuc3RyaW5nO1xuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkb20udHlwZS5zdHJpbmc7XG4gIH1cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3Qgc3VicHJvcGVydGllcyA9IChmaWVsZC5maWVsZHMgfHwgW10pLm1hcCgoZikgPT4gZmllbGRQcm9wZXJ0eShmKSk7XG4gICAgcmV0dXJuIGRvbS5jcmVhdGUub2JqZWN0VHlwZShzdWJwcm9wZXJ0aWVzKTtcbiAgfVxuICByZXR1cm4gZG9tLnR5cGUudW5rbm93bjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU2NoZW1hKGZpbGVJZDogc3RyaW5nLCBzY2hlbWE6IFNjaGVtYSk6IHN0cmluZyB7XG4gIGNvbnN0IGpzZG9jID0gYEdlbmVyYXRlZCBmcm9tIFxcYCR7ZmlsZUlkfVxcYC5gO1xuICBjb25zdCBpZCA9IHBhdGgucGFyc2UoZmlsZUlkKS5uYW1lLnNwbGl0KCcuJylbMF07XG4gIGNvbnN0IGZpZWxkc0ludGVyZmFjZSA9IGAke2lkfUZpZWxkc2A7XG4gIGNvbnN0IGZpZWxkcyA9IGRvbS5jcmVhdGUuaW50ZXJmYWNlKFxuICAgIGZpZWxkc0ludGVyZmFjZSxcbiAgICBkb20uRGVjbGFyYXRpb25GbGFncy5FeHBvcnRcbiAgKTtcbiAgZmllbGRzLmpzRG9jQ29tbWVudCA9IGpzZG9jO1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNjaGVtYS5maWVsZHMpIHtcbiAgICBpZiAoIWZpZWxkLmlkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZmllbGRzLm1lbWJlcnMucHVzaChmaWVsZFByb3BlcnR5KGZpZWxkKSk7XG4gIH1cblxuICBjb25zdCBmaWVsZHNUeXBlT3V0cHV0ID0gZG9tXG4gICAgLmVtaXQoZmllbGRzLCB7c2luZ2xlTGluZUpzRG9jQ29tbWVudHM6IHRydWV9KVxuICAgIC50cmltKCk7XG4gIGlmIChmaWxlSWQuc3RhcnRzV2l0aCgnL2NvbGxlY3Rpb25zLycpKSB7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBkb20uY3JlYXRlLm5hbWVkVHlwZVJlZmVyZW5jZSgnUm9vdENNU0RvYycpO1xuICAgIGJhc2VUeXBlLnR5cGVBcmd1bWVudHMucHVzaChkb20uY3JlYXRlLm5hbWVkVHlwZVJlZmVyZW5jZShmaWVsZHNJbnRlcmZhY2UpKTtcbiAgICBjb25zdCBkb2NUeXBlID0gZG9tLmNyZWF0ZS5hbGlhcyhcbiAgICAgIGAke2lkfURvY2AsXG4gICAgICBiYXNlVHlwZSxcbiAgICAgIGRvbS5EZWNsYXJhdGlvbkZsYWdzLkV4cG9ydFxuICAgICk7XG4gICAgZG9jVHlwZS5qc0RvY0NvbW1lbnQgPSBqc2RvYztcblxuICAgIGNvbnN0IGRvY1R5cGVPdXRwdXQgPSBkb21cbiAgICAgIC5lbWl0KGRvY1R5cGUsIHtzaW5nbGVMaW5lSnNEb2NDb21tZW50czogdHJ1ZX0pXG4gICAgICAudHJpbSgpO1xuICAgIHJldHVybiBmaWVsZHNUeXBlT3V0cHV0ICsgJ1xcblxcbicgKyBkb2NUeXBlT3V0cHV0O1xuICB9XG4gIHJldHVybiByZWluZGVudChmaWVsZHNUeXBlT3V0cHV0KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyA0LXNwYWNlIGluZGVudHMgdG8gMi5cbiAqL1xuZnVuY3Rpb24gcmVpbmRlbnQoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gaW5wdXQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCByZXN1bHRzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRMaW5lID0gbGluZS5yZXBsYWNlKC8gezR9L2csICcgICcpO1xuICAgIHJlc3VsdHMucHVzaChjb252ZXJ0ZWRMaW5lKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cy5qb2luKCdcXG4nKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxPQUFPLFlBQVk7QUFHbkI7QUFBQSxFQUNFO0FBQUEsRUFJQTtBQUFBLE9BQ0s7QUFtWkEsU0FBUyxhQUFhLFlBQW1DO0FBQzlELFFBQU0sVUFBb0IsV0FBVyxXQUFXLENBQUM7QUFDakQsUUFBTSxTQUFTLFFBQVEsS0FBSyxDQUFDQSxZQUFXQSxRQUFPLFNBQVMsVUFBVTtBQUNsRSxNQUFJLENBQUMsUUFBUTtBQUNYLFVBQU0sSUFBSSxNQUFNLHlEQUF5RDtBQUFBLEVBQzNFO0FBQ0EsU0FBTztBQUNUOzs7QUNuYUEs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U0FBSztBQUFBLEVBQ2xCO0FBQ0EsTUFBSSxNQUFNLFNBQVMsVUFBVTtBQUMzQixVQUFNLGlCQUFpQixNQUFNLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDO0FBQ3RFLFdBQVcsV0FBTyxXQUFXLGFBQWE7QUFBQSxFQUM1QztBQUNBLFNBQVcsU0FBSztBQUNsQjtBQUVBLFNBQVMsYUFBYSxRQUFnQixRQUF3QjtBQUM1RCxRQUFNLFFBQVEsb0JBQW9CLE1BQU07QUFDeEMsUUFBTSxLQUFLLEtBQUssTUFBTSxNQUFNLEVBQUUsS0FBSyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQy9DLFFBQU0sa0JBQWtCLEdBQUcsRUFBRTtBQUM3QixRQUFNLFNBQWEsV0FBTztBQUFBLElBQ3hCO0FBQUEsSUFDSSxxQkFBaUI7QUFBQSxFQUN2QjtBQUNBLFNBQU8sZUFBZTtBQUN0QixhQUFXLFNBQVMsT0FBTyxRQUFRO0FBQ2pDLFFBQUksQ0FBQyxNQUFNLElBQUk7QUFDYjtBQUFBLElBQ0Y7QUFDQSxXQUFPLFFBQVEsS0FBSyxjQUFjLEtBQUssQ0FBQztBQUFBLEVBQzFDO0FBRUEsUUFBTSxtQkFDSCxTQUFLLFFBQVEsRUFBQyx5QkFBeUIsS0FBSSxDQUFDLEVBQzVDLEtBQUs7QUFDUixNQUFJLE9BQU8sV0FBVyxlQUFlLEdBQUc7QUFDdEMsVUFBTSxXQUFlLFdBQU8sbUJBQW1CLFlBQVk7QUFDM0QsYUFBUyxjQUFjLEtBQVMsV0FBTyxtQkFBbUIsZUFBZSxDQUFDO0FBQzFFLFVBQU0sVUFBYyxXQUFPO0FBQUEsTUFDekIsR0FBRyxFQUFFO0FBQUEsTUFDTDtBQUFBLE1BQ0kscUJBQWlCO0FBQUEsSUFDdkI7QUFDQSxZQUFRLGVBQWU7QUFFdkIsVUFBTSxnQkFDSCxTQUFLLFNBQVMsRUFBQyx5QkFBeUIsS0FBSSxDQUFDLEVBQzdDLEtBQUs7QUFDUixXQUFPLG1CQUFtQixTQUFTO0FBQUEsRUFDckM7QUFDQSxTQUFPLFNBQVMsZ0JBQWdCO0FBQ2xDO0FBS0EsU0FBUyxTQUFTLE9BQXVCO0FBQ3ZDLFFBQU0sUUFBUSxNQUFNLE1BQU0sSUFBSTtBQUM5QixRQUFNLFVBQW9CLENBQUM7QUFDM0IsYUFBVyxRQUFRLE9BQU87QUFDeEIsVUFBTSxnQkFBZ0IsS0FBSyxRQUFRLFNBQVMsSUFBSTtBQUNoRCxZQUFRLEtBQUssYUFBYTtBQUFBLEVBQzVCO0FBQ0EsU0FBTyxRQUFRLEtBQUssSUFBSTtBQUMxQjsiLAogICJuYW1lcyI6IFsicGx1Z2luIl0KfQo=
|
package/dist/core.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { LoadTranslationsOptions, TranslationsMap, LocaleTranslations } from './
|
|
|
2
2
|
export { ArrayObject, Doc, DocMode, GetCountOptions, GetDocOptions, ListDocsOptions, RootCMSClient, SetDocOptions, Translation, getCmsPlugin, marshalArray, normalizeData, translationsForLocale, unmarshalArray, unmarshalData } from './client.js';
|
|
3
3
|
import { RootConfig } from '@blinkk/root';
|
|
4
4
|
import { Query } from 'firebase-admin/firestore';
|
|
5
|
-
export { s as schema } from './schema-
|
|
5
|
+
export { s as schema } from './schema-fad0a59a.js';
|
|
6
6
|
import './plugin.js';
|
|
7
7
|
import 'firebase-admin/app';
|
|
8
8
|
import 'firebase-admin/auth';
|
package/dist/core.js
CHANGED
|
@@ -595,4 +595,4 @@ export {
|
|
|
595
595
|
unmarshalArray,
|
|
596
596
|
unmarshalData
|
|
597
597
|
};
|
|
598
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9jbGllbnQudHMiLCAiLi4vY29yZS9ydW50aW1lLnRzIiwgIi4uL2NvcmUvc2NoZW1hLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgY3J5cHRvIGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7UGx1Z2luLCBSb290Q29uZmlnfSBmcm9tICdAYmxpbmtrL3Jvb3QnO1xuaW1wb3J0IHtBcHB9IGZyb20gJ2ZpcmViYXNlLWFkbWluL2FwcCc7XG5pbXBvcnQge1xuICBGaWVsZFZhbHVlLFxuICBGaXJlc3RvcmUsXG4gIFF1ZXJ5LFxuICBUaW1lc3RhbXAsXG4gIGdldEZpcmVzdG9yZSxcbn0gZnJvbSAnZmlyZWJhc2UtYWRtaW4vZmlyZXN0b3JlJztcbmltcG9ydCB7Q01TUGx1Z2lufSBmcm9tICcuL3BsdWdpbi5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jPEZpZWxkcyA9IGFueT4ge1xuICAvKiogVGhlIGlkIG9mIHRoZSBkb2MsIGUuZy4gXCJQYWdlcy9mb28tYmFyXCIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBpZCBvZiB0aGUgZG9jLCBlLmcuIFwiUGFnZXNcIi4gKi9cbiAgY29sbGVjdGlvbklkOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2x1ZyBvZiB0aGUgZG9jLCBlLmcuIFwiZm9vLWJhclwiLiAqL1xuICBzbHVnOiBzdHJpbmc7XG4gIHN5czoge1xuICAgIGNyZWF0ZWRBdDogbnVtYmVyO1xuICAgIGNyZWF0ZWRCeTogc3RyaW5nO1xuICAgIG1vZGlmaWVkQXQ6IG51bWJlcjtcbiAgICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gICAgZmlyc3RQdWJsaXNoZWRBdD86IG51bWJlcjtcbiAgICBmaXJzdFB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIHB1Ymxpc2hlZEF0PzogbnVtYmVyO1xuICAgIHB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIGxvY2FsZXM/OiBzdHJpbmdbXTtcbiAgfTtcbiAgZmllbGRzOiBGaWVsZHM7XG59XG5cbmV4cG9ydCB0eXBlIERvY01vZGUgPSAnZHJhZnQnIHwgJ3B1Ymxpc2hlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RG9jT3B0aW9ucyB7XG4gIC8qKiBNb2RlLCBlaXRoZXIgXCJkcmFmdFwiIG9yIFwicHVibGlzaGVkXCIuICovXG4gIG1vZGU6IERvY01vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0RG9jT3B0aW9ucyB7XG4gIC8qKiBNb2RlLCBlaXRoZXIgXCJkcmFmdFwiIG9yIFwicHVibGlzaGVkXCIuICovXG4gIG1vZGU6IERvY01vZGU7XG4gIC8qKlxuICAgKiBFbWFpbCBvZiB1c2VyIG1vZGlmeWluZyB0aGUgZG9jLiBJZiBibGFuaywgZGVmYXVsdHMgdG8gYHJvb3QtY21zLWNsaWVudGAuXG4gICAqL1xuICBtb2RpZmllZEJ5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3REb2NzT3B0aW9ucyB7XG4gIG1vZGU6IERvY01vZGU7XG4gIG9mZnNldD86IG51bWJlcjtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIG9yZGVyQnlEaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJztcbiAgcXVlcnk/OiAocXVlcnk6IFF1ZXJ5KSA9PiBRdWVyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRDb3VudE9wdGlvbnMge1xuICBtb2RlOiBEb2NNb2RlO1xuICBxdWVyeT86IChxdWVyeTogUXVlcnkpID0+IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uIHtcbiAgW2xvY2FsZTogc3RyaW5nXTogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGlvbnNNYXAge1xuICBbaGFzaDogc3RyaW5nXTogVHJhbnNsYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxlVHJhbnNsYXRpb25zIHtcbiAgW3NvdXJjZTogc3RyaW5nXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRUcmFuc2xhdGlvbnNPcHRpb25zIHtcbiAgdGFncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgUm9vdENNU0NsaWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm9vdENvbmZpZzogUm9vdENvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBjbXNQbHVnaW46IENNU1BsdWdpbjtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0SWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBkYjogRmlyZXN0b3JlO1xuXG4gIGNvbnN0cnVjdG9yKHJvb3RDb25maWc6IFJvb3RDb25maWcpIHtcbiAgICB0aGlzLnJvb3RDb25maWcgPSByb290Q29uZmlnO1xuICAgIHRoaXMuY21zUGx1Z2luID0gZ2V0Q21zUGx1Z2luKHJvb3RDb25maWcpO1xuXG4gICAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IHRoaXMuY21zUGx1Z2luLmdldENvbmZpZygpO1xuICAgIHRoaXMucHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gICAgdGhpcy5hcHAgPSB0aGlzLmNtc1BsdWdpbi5nZXRGaXJlYmFzZUFwcCgpO1xuICAgIHRoaXMuZGIgPSBnZXRGaXJlc3RvcmUodGhpcy5hcHApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBkb2MgZGF0YSBmcm9tIFJvb3QuanMgQ01TLlxuICAgKi9cbiAgYXN5bmMgZ2V0RG9jPEZpZWxkcyA9IGFueT4oXG4gICAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gICAgc2x1Zzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEdldERvY09wdGlvbnNcbiAgKTogUHJvbWlzZTxEb2M8RmllbGRzPiB8IG51bGw+IHtcbiAgICBjb25zdCByYXdEYXRhID0gYXdhaXQgdGhpcy5nZXRSYXdEb2MoY29sbGVjdGlvbklkLCBzbHVnLCBvcHRpb25zKTtcbiAgICBpZiAocmF3RGF0YSkge1xuICAgICAgcmV0dXJuIHVubWFyc2hhbERhdGEocmF3RGF0YSkgYXMgRG9jPEZpZWxkcz47XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyByYXcgZG9jIGRhdGEgYXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4gT25seSB1c2UgdGhpcyBpZiB5b3Uga25vd1xuICAgKiB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqL1xuICBhc3luYyBnZXRSYXdEb2MoXG4gICAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gICAgc2x1Zzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEdldERvY09wdGlvbnNcbiAgKTogUHJvbWlzZTxhbnkgfCBudWxsPiB7XG4gICAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICAgIC8vIFNsdWdzIHdpdGggc2xhc2hlcyBhcmUgZW5jb2RlZCBhcyBgLS1gIGluIHRoZSBEQi5cbiAgICBzbHVnID0gc2x1Zy5yZXBsYWNlQWxsKCcvJywgJy0tJyk7XG4gICAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufS8ke3NsdWd9YDtcbiAgICBjb25zdCBkb2NSZWYgPSB0aGlzLmRiLmRvYyhkYlBhdGgpO1xuICAgIGNvbnN0IGRvYyA9IGF3YWl0IGRvY1JlZi5nZXQoKTtcbiAgICBpZiAoZG9jLmV4aXN0cykge1xuICAgICAgcmV0dXJuIGRvYy5kYXRhKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgc2V0UmF3RG9jKFxuICAgIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICAgIHNsdWc6IHN0cmluZyxcbiAgICBkYXRhOiBhbnksXG4gICAgb3B0aW9uczogU2V0RG9jT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICAgIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gICAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufS8ke3NsdWd9YDtcbiAgICBjb25zdCBkb2NSZWYgPSB0aGlzLmRiLmRvYyhkYlBhdGgpO1xuICAgIGF3YWl0IGRvY1JlZi5zZXQoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgZG9jcyBmcm9tIGEgUm9vdC5qcyBDTVMgY29sbGVjdGlvbi5cbiAgICovXG4gIGFzeW5jIGxpc3REb2NzPFQ+KFxuICAgIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IExpc3REb2NzT3B0aW9uc1xuICApOiBQcm9taXNlPHtkb2NzOiBUW119PiB7XG4gICAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICAgIGNvbnN0IGRiUGF0aCA9IGBQcm9qZWN0cy8ke3RoaXMucHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICAgIGxldCBxdWVyeTogUXVlcnkgPSB0aGlzLmRiLmNvbGxlY3Rpb24oZGJQYXRoKTtcbiAgICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgICAgcXVlcnkgPSBxdWVyeS5saW1pdChvcHRpb25zLmxpbWl0KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub2Zmc2V0KSB7XG4gICAgICBxdWVyeSA9IHF1ZXJ5Lm9mZnNldChvcHRpb25zLm9mZnNldCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm9yZGVyQnkpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkub3JkZXJCeShvcHRpb25zLm9yZGVyQnksIG9wdGlvbnMub3JkZXJCeURpcmVjdGlvbik7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG9wdGlvbnMucXVlcnkocXVlcnkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gICAgY29uc3QgZG9jczogVFtdID0gW107XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHVubWFyc2hhbERhdGEocmVzdWx0LmRhdGEoKSkgYXMgVDtcbiAgICAgIGRvY3MucHVzaChkb2MpO1xuICAgIH0pO1xuICAgIHJldHVybiB7ZG9jc307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRvY3MgaW4gYSBSb290LmpzIENNUyBjb2xsZWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgZ2V0RG9jc0NvdW50KGNvbGxlY3Rpb25JZDogc3RyaW5nLCBvcHRpb25zOiBHZXRDb3VudE9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICAgIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gICAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufWA7XG4gICAgbGV0IHF1ZXJ5OiBRdWVyeSA9IHRoaXMuZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICAgIGlmIChvcHRpb25zLnF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG9wdGlvbnMucXVlcnkocXVlcnkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcXVlcnkuY291bnQoKS5nZXQoKTtcbiAgICBjb25zdCBjb3VudCA9IHJlc3VsdHMuZGF0YSgpLmNvdW50O1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgc2NoZWR1bGVkIGRvY3MuXG4gICAqL1xuICBhc3luYyBwdWJsaXNoU2NoZWR1bGVkRG9jcygpIHtcbiAgICBjb25zdCBwcm9qZWN0Q29sbGVjdGlvbnNQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zYDtcbiAgICBjb25zdCBub3cgPSBNYXRoLmNlaWwobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuXG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0aGlzLmRiLmNvbGxlY3Rpb25Hcm91cCgnU2NoZWR1bGVkJykuZ2V0KCk7XG4gICAgY29uc3QgZG9jcyA9IHNuYXBzaG90LmRvY3NcbiAgICAgIC5maWx0ZXIoKGQpID0+IHtcbiAgICAgICAgLy8gRmlsdGVyIGRvY3MgYnkgcHJvamVjdC5cbiAgICAgICAgaWYgKCFkLnJlZi5wYXRoLnN0YXJ0c1dpdGgocHJvamVjdENvbGxlY3Rpb25zUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlsdGVyIGRvY3Mgd2hlcmUgc2NoZWR1bGVkQXQgaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgIC8vIE5PVEUoc3RldmVubGUpOiB0aGUgZmlsdGVyaW5nIGlzIGRvbmUgbWFudWFsbHkgaW5zdGVhZCBvZiB1c2luZyBhIHF1ZXJ5XG4gICAgICAgIC8vIHRvIGF2b2lkIGhhdmluZyB0byBjcmVhdGUgYW4gaW5kZXggaW4gZmlyZXN0b3JlLlxuICAgICAgICBjb25zdCBkYXRhID0gZC5kYXRhKCkgfHwge307XG4gICAgICAgIGNvbnN0IHNjaGVkdWxlZEF0OiBUaW1lc3RhbXAgfCB1bmRlZmluZWQgPSBkYXRhLnN5cz8uc2NoZWR1bGVkQXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgc2NoZWR1bGVkQXQgJiYgc2NoZWR1bGVkQXQudG9NaWxsaXMgJiYgc2NoZWR1bGVkQXQudG9NaWxsaXMoKSA8PSBub3dcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAubWFwKChkKSA9PiB7XG4gICAgICAgIGNvbnN0IGRiUGF0aCA9IGQucmVmLnBhdGg7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gZGJQYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIGNvbnN0IHNsdWcgPSBzZWdtZW50cy5hdCgtMSk7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBzZWdtZW50cy5hdCgtMyk7XG4gICAgICAgIGNvbnN0IGlkID0gYCR7Y29sbGVjdGlvbn0vJHtzbHVnfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogZC5kYXRhKCksXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICBzbHVnLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICBpZiAoZG9jcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdubyBkb2NzIHRvIHNjaGVkdWxlJyk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gRWFjaCB0cmFuc2FjdGlvbiBvciBiYXRjaCBjYW4gd3JpdGUgYSBtYXggb2YgNTAwIG9wcy5cbiAgICAvLyBodHRwczovL2ZpcmViYXNlLmdvb2dsZS5jb20vZG9jcy9maXJlc3RvcmUvbWFuYWdlLWRhdGEvdHJhbnNhY3Rpb25zXG4gICAgbGV0IGJhdGNoQ291bnQgPSAwO1xuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5kYi5iYXRjaCgpO1xuICAgIGNvbnN0IHB1Ymxpc2hlZERvY3M6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBkb2Mgb2YgZG9jcykge1xuICAgICAgY29uc3Qge2lkLCBjb2xsZWN0aW9uLCBzbHVnLCBkYXRhfSA9IGRvYztcbiAgICAgIGNvbnN0IGRyYWZ0UmVmID0gdGhpcy5kYi5kb2MoXG4gICAgICAgIGAke3Byb2plY3RDb2xsZWN0aW9uc1BhdGh9LyR7Y29sbGVjdGlvbn0vRHJhZnRzLyR7c2x1Z31gXG4gICAgICApO1xuICAgICAgY29uc3Qgc2NoZWR1bGVkUmVmID0gdGhpcy5kYi5kb2MoXG4gICAgICAgIGAke3Byb2plY3RDb2xsZWN0aW9uc1BhdGh9LyR7Y29sbGVjdGlvbn0vU2NoZWR1bGVkLyR7c2x1Z31gXG4gICAgICApO1xuICAgICAgY29uc3QgcHVibGlzaGVkUmVmID0gdGhpcy5kYi5kb2MoXG4gICAgICAgIGAke3Byb2plY3RDb2xsZWN0aW9uc1BhdGh9LyR7Y29sbGVjdGlvbn0vUHVibGlzaGVkLyR7c2x1Z31gXG4gICAgICApO1xuICAgICAgY29uc3Qge3NjaGVkdWxlZEF0LCBzY2hlZHVsZWRCeSwgLi4uc3lzfSA9IGRhdGEuc3lzIHx8IHt9O1xuXG4gICAgICAvLyBPbmx5IHVwZGF0ZSBgZmlyc3RQdWJsaXNoZWRgIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC5cbiAgICAgIGNvbnN0IGZpcnN0UHVibGlzaGVkQXQgPSBzeXMuZmlyc3RQdWJsaXNoZWRBdCA/PyBzY2hlZHVsZWRBdDtcbiAgICAgIGNvbnN0IGZpcnN0UHVibGlzaGVkQnkgPSBzeXMuZmlyc3RQdWJsaXNoZWRCeSA/PyAoc2NoZWR1bGVkQnkgfHwgJycpO1xuXG4gICAgICAvLyBTYXZlIHB1Ymxpc2hlZCBkb2MuXG4gICAgICBiYXRjaC5zZXQocHVibGlzaGVkUmVmLCB7XG4gICAgICAgIGlkLFxuICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICBzbHVnLFxuICAgICAgICBmaWVsZHM6IGRhdGEuZmllbGRzIHx8IHt9LFxuICAgICAgICBzeXM6IHtcbiAgICAgICAgICAuLi5zeXMsXG4gICAgICAgICAgZmlyc3RQdWJsaXNoZWRBdDogZmlyc3RQdWJsaXNoZWRBdCxcbiAgICAgICAgICBmaXJzdFB1Ymxpc2hlZEJ5OiBmaXJzdFB1Ymxpc2hlZEJ5LFxuICAgICAgICAgIHB1Ymxpc2hlZEF0OiBGaWVsZFZhbHVlLnNlcnZlclRpbWVzdGFtcCgpLFxuICAgICAgICAgIHB1Ymxpc2hlZEJ5OiBzY2hlZHVsZWRCeSB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgICAvLyBSZW1vdmUgcHVibGlzaGVkIGRvYy5cbiAgICAgIGJhdGNoLmRlbGV0ZShzY2hlZHVsZWRSZWYpO1xuICAgICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIGRyYWZ0IGRvYyB0byByZW1vdmUgYHNjaGVkdWxlZEF0YCBhbmQgYHNjaGVkdWxlZEJ5YCBmaWVsZHNcbiAgICAgIC8vIGFuZCB1cGRhdGUgdGhlIGBwdWJsaXNoZWRBdGAgYW5kIGBwdWJsaXNoZWRCeWAgZmllbGRzLlxuICAgICAgYmF0Y2gudXBkYXRlKGRyYWZ0UmVmLCB7XG4gICAgICAgICdzeXMuc2NoZWR1bGVkQXQnOiBGaWVsZFZhbHVlLmRlbGV0ZSgpLFxuICAgICAgICAnc3lzLnNjaGVkdWxlZEJ5JzogRmllbGRWYWx1ZS5kZWxldGUoKSxcbiAgICAgICAgJ3N5cy5maXJzdFB1Ymxpc2hlZEF0JzogZmlyc3RQdWJsaXNoZWRBdCxcbiAgICAgICAgJ3N5cy5maXJzdFB1Ymxpc2hlZEJ5JzogZmlyc3RQdWJsaXNoZWRCeSxcbiAgICAgICAgJ3N5cy5wdWJsaXNoZWRBdCc6IEZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgICdzeXMucHVibGlzaGVkQnknOiBzY2hlZHVsZWRCeSB8fCAnJyxcbiAgICAgIH0pO1xuICAgICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgICBwdWJsaXNoZWREb2NzLnB1c2goZG9jKTtcblxuICAgICAgaWYgKGJhdGNoQ291bnQgPj0gNDk4KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IGJhdGNoLmNvbW1pdCgpO1xuICAgIGNvbnNvbGUubG9nKGBwdWJsaXNoZWQgJHtwdWJsaXNoZWREb2NzLmxlbmd0aH0gZG9jcyFgKTtcbiAgICByZXR1cm4gcHVibGlzaGVkRG9jcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0cmFuc2xhdGlvbnMgc2F2ZWQgaW4gdGhlIHRyYW5zbGF0aW9ucyBjb2xsZWN0aW9uLCBvcHRpb25hbGx5XG4gICAqIGZpbHRlcmVkIGJ5IHRhZy5cbiAgICpcbiAgICogUmV0dXJucyBhIG1hcCBsaWtlOlxuICAgKiBgYGBcbiAgICoge1xuICAgKiAgIFwiPGhhc2g+XCI6IHtcInNvdXJjZVwiOiBcIkhlbGxvXCIsIFwiZXNcIjogXCJIb2xhXCIsIFwiZnJcIjogXCJCb25qb3VyXCJ9LFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgbG9hZFRyYW5zbGF0aW9ucyhcbiAgICBvcHRpb25zPzogTG9hZFRyYW5zbGF0aW9uc09wdGlvbnNcbiAgKTogUHJvbWlzZTxUcmFuc2xhdGlvbnNNYXA+IHtcbiAgICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vVHJhbnNsYXRpb25zYDtcbiAgICBsZXQgcXVlcnk6IFF1ZXJ5ID0gdGhpcy5kYi5jb2xsZWN0aW9uKGRiUGF0aCk7XG4gICAgaWYgKG9wdGlvbnM/LnRhZ3MpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoJ3RhZ3MnLCAnYXJyYXktY29udGFpbnMtYW55Jywgb3B0aW9ucy50YWdzKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVNuYXBzaG90ID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zTWFwOiBUcmFuc2xhdGlvbnNNYXAgPSB7fTtcbiAgICBxdWVyeVNuYXBzaG90LmZvckVhY2goKGRvYykgPT4ge1xuICAgICAgY29uc3QgaGFzaCA9IGRvYy5pZDtcbiAgICAgIHRyYW5zbGF0aW9uc01hcFtoYXNoXSA9IGRvYy5kYXRhKCkgYXMgVHJhbnNsYXRpb247XG4gICAgfSk7XG4gICAgcmV0dXJuIHRyYW5zbGF0aW9uc01hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIG1hcCBvZiB0cmFuc2xhdGlvbnMsIGUuZy46XG4gICAqIGBgYFxuICAgKiBhd2FpdCBjbGllbnQuc2F2ZVRyYW5zbGF0aW9ucyh7XG4gICAqICAgXCJIZWxsb1wiOiB7XCJlc1wiOiBcIkhvbGFcIiwgXCJmclwiOiBcIkJvbmpvdXJcIn0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHNhdmVUcmFuc2xhdGlvbnMoXG4gICAgdHJhbnNsYXRpb25zOiB7XG4gICAgICBbc291cmNlOiBzdHJpbmddOiB7W2xvY2FsZTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICB9LFxuICAgIHRhZ3M/OiBzdHJpbmdbXVxuICApIHtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnNQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L1RyYW5zbGF0aW9uc2A7XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLmRiLmJhdGNoKCk7XG4gICAgbGV0IGJhdGNoQ291bnQgPSAwO1xuICAgIE9iamVjdC5lbnRyaWVzKHRyYW5zbGF0aW9ucykuZm9yRWFjaCgoW3NvdXJjZSwgc291cmNlVHJhbnNsYXRpb25zXSkgPT4ge1xuICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0VHJhbnNsYXRpb25LZXkoc291cmNlKTtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uUmVmID0gdGhpcy5kYi5kb2MoYCR7dHJhbnNsYXRpb25zUGF0aH0vJHtoYXNofWApO1xuICAgICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgICAuLi5zb3VyY2VUcmFuc2xhdGlvbnMsXG4gICAgICAgIHNvdXJjZTogdGhpcy5ub3JtYWxpemVTdHJpbmcoc291cmNlKSxcbiAgICAgIH07XG4gICAgICBpZiAodGFncykge1xuICAgICAgICBkYXRhLnRhZ3MgPSB0YWdzO1xuICAgICAgfVxuICAgICAgYmF0Y2gudXBkYXRlKHRyYW5zbGF0aW9uUmVmLCBkYXRhKTtcbiAgICAgIGJhdGNoQ291bnQgKz0gMTtcbiAgICB9KTtcbiAgICBpZiAoYmF0Y2hDb3VudCA+IDUwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cCB0byA1MDAgdHJhbnNsYXRpb25zIGNhbiBiZSBzYXZlZCBhdCBhIHRpbWUuJyk7XG4gICAgfVxuICAgIGF3YWl0IGJhdGNoLmNvbW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFwia2V5XCIgdXNlZCBmb3IgYSB0cmFuc2xhdGlvbiBhcyBzdG9yZWQgaW4gdGhlIGRiLiBUcmFuc2xhdGlvbnNcbiAgICogYXJlIHN0b3JlZCB1bmRlciBgUHJvamVjdHMvPHByb2plY3QgaWQ+L1RyYW5zbGF0aW9ucy88c2hhMSBoYXNoPmAuXG4gICAqL1xuICBnZXRUcmFuc2xhdGlvbktleShzb3VyY2U6IHN0cmluZykge1xuICAgIGNvbnN0IHNoYTEgPSBjcnlwdG9cbiAgICAgIC5jcmVhdGVIYXNoKCdzaGExJylcbiAgICAgIC51cGRhdGUodGhpcy5ub3JtYWxpemVTdHJpbmcoc291cmNlKSlcbiAgICAgIC5kaWdlc3QoJ2hleCcpO1xuICAgIHJldHVybiBzaGExO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyBhIHN0cmluZyB0aGF0J3MgdXNlZCBmb3IgdHJhbnNsYXRpb25zLiBQZXJmb3JtcyB0aGUgZm9sbG93aW5nOlxuICAgKiAtIFJlbW92ZXMgYW55IGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICAgKiAtIFJlbW92ZXMgc3BhY2VzIGF0IHRoZSBlbmQgb2YgYW55IGxpbmVcbiAgICovXG4gIG5vcm1hbGl6ZVN0cmluZyhzdHI6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmVzID0gU3RyaW5nKHN0cilcbiAgICAgIC50cmltKClcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUudHJpbUVuZCgpKTtcbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdHJhbnNsYXRpb25zIGZvciBhIHBhcnRpY3VsYXIgbG9jYWxlLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgbWFwIGxpa2U6XG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAgXCJIZWxsb1wiOiBcIkJvbmpvdXJcIixcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGxvYWRUcmFuc2xhdGlvbnNGb3JMb2NhbGUoXG4gICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IExvYWRUcmFuc2xhdGlvbnNPcHRpb25zXG4gICk6IFByb21pc2U8TG9jYWxlVHJhbnNsYXRpb25zPiB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zTWFwID0gYXdhaXQgdGhpcy5sb2FkVHJhbnNsYXRpb25zKG9wdGlvbnMpO1xuICAgIHJldHVybiB0cmFuc2xhdGlvbnNGb3JMb2NhbGUodHJhbnNsYXRpb25zTWFwLCBsb2NhbGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZzogUm9vdENvbmZpZyk6IENNU1BsdWdpbiB7XG4gIGNvbnN0IHBsdWdpbnM6IFBsdWdpbltdID0gcm9vdENvbmZpZy5wbHVnaW5zIHx8IFtdO1xuICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLmZpbmQoKHBsdWdpbikgPT4gcGx1Z2luLm5hbWUgPT09ICdyb290LWNtcycpO1xuICBpZiAoIXBsdWdpbikge1xuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgcm9vdC1jbXMgcGx1Z2luIGNvbmZpZyBpbiByb290LmNvbmZpZy50cycpO1xuICB9XG4gIHJldHVybiBwbHVnaW4gYXMgQ01TUGx1Z2luO1xufVxuXG4vKipcbiAqIFdhbGtzIHRoZSBkYXRhIHRyZWUgYW5kIGNvbnZlcnRzIGFueSBUaW1lc3RhbXAgb2JqZWN0cyB0byBtaWxsaXMgYW5kIGFueVxuICogX2FycmF5IG1hcHMgdG8gbm9ybWFsIGFycmF5cy5cbiAqXG4gKiBFLmcuOlxuICpcbiAqIG5vcm1hbGl6ZURhdGEoe1xuICogICBzeXM6IHttb2RpZmllZEF0OiBUaW1lc3RhbXAoMTIzKX0sXG4gKiAgIGZpZWxkczoge1xuICogICAgIF9hcnJheTogWydhc2RmJ10sXG4gKiAgICAgYXNkZjoge3RpdGxlOiAnaGVsbG8nfVxuICogICB9XG4gKiB9KVxuICogLy8gPT4ge3N5czoge21vZGlmaWVkQXQ6IDEyM30sIGZpZWxkczoge2ZvbzogW3t0aXRsZTogJ2hlbGxvJ31dfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubWFyc2hhbERhdGEoZGF0YTogYW55KTogYW55IHtcbiAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgIGNvbnN0IHZhbCA9IGRhdGFba2V5XTtcbiAgICBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgaWYgKHZhbC50b01pbGxpcykge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbC50b01pbGxpcygpO1xuICAgICAgfSBlbHNlIGlmIChPYmplY3QuaGFzT3duKHZhbCwgJ19hcnJheScpICYmIEFycmF5LmlzQXJyYXkodmFsLl9hcnJheSkpIHtcbiAgICAgICAgY29uc3QgYXJyID0gdmFsLl9hcnJheS5tYXAoKGs6IHN0cmluZykgPT4gdW5tYXJzaGFsRGF0YSh2YWxba10gfHwge30pKTtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBhcnI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IHVubWFyc2hhbERhdGEodmFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYHVubWFyc2hhbERhdGEoKWAgaW5zdGVhZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEYXRhKGRhdGE6IGFueSk6IGFueSB7XG4gIHJldHVybiB1bm1hcnNoYWxEYXRhKGRhdGEpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFycmF5T2JqZWN0IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBfYXJyYXk6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYW4gYXJyYXkgaW50byBhbiBgQXJyYXlPYmplY3RgLCBlLmcuOlxuICpcbiAqIGBgYFxuICogbWFyc2hhbEFycmF5KFsxLCAyLCAzXSlcbiAqIC8vID0+IHthOiAxLCBiOiAyLCBjOiAzLCBfYXJyYXk6IFsnYScsICdiJywgJ2MnXX1cbiAqIGBgYFxuICpcbiAqIFRoaXMgZGF0YWJhc2Ugc3RvcmFnZSBtZXRob2QgbWFrZXMgaXQgZWFzaWVyIHRvIHVwZGF0ZSBhIHNpbmdsZSBmaWVsZCBpbiBhXG4gKiBkZWVwbHkgbmVzdGVkIGFycmF5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcnNoYWxBcnJheShhcnI6IGFueVtdKTogQXJyYXlPYmplY3Qge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIHJldHVybiBhcnI7XG4gIH1cbiAgY29uc3QgYXJyT2JqZWN0OiBBcnJheU9iamVjdCA9IHtfYXJyYXk6IFtdfTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgIGNvbnN0IGtleSA9IHJhbmRTdHJpbmcoNik7XG4gICAgYXJyT2JqZWN0W2tleV0gPSBpdGVtO1xuICAgIGFyck9iamVjdC5fYXJyYXkucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBhcnJPYmplY3Q7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYEFycmF5T2JqZWN0YCB0byBhIG5vcm1hbCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubWFyc2hhbEFycmF5KGFyck9iamVjdDogQXJyYXlPYmplY3QpOiBhbnlbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnJPYmplY3Q/Ll9hcnJheSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgYXJyID0gYXJyT2JqZWN0Ll9hcnJheS5tYXAoKGs6IHN0cmluZykgPT4gYXJyT2JqZWN0W2tdKTtcbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoZGF0YTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmFuZFN0cmluZyhsZW46IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBjaGFycyA9XG4gICAgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IHJhbmQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpO1xuICAgIHJlc3VsdC5wdXNoKGNoYXJzLmNoYXJBdChyYW5kKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHRyYW5zbGF0aW9ucyBtYXAgZnJvbSBgbG9hZFRyYW5zbGF0aW9ucygpYCB0byBhIG1hcCBvZiBzb3VyY2UgdG9cbiAqIHRyYW5zbGF0ZWQgc3RyaW5nIGZvciBhIHBhcnRpY3VsYXIgbG9jYWxlLlxuICpcbiAqIFJldHVybnMgYSBtYXAgbGlrZTpcbiAqIGBgYFxuICoge1xuICogICBcIkhlbGxvXCI6IFwiQm9uam91clwiLFxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGlvbnNGb3JMb2NhbGUoXG4gIHRyYW5zbGF0aW9uc01hcDogVHJhbnNsYXRpb25zTWFwLFxuICBsb2NhbGU6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGxvY2FsZVRyYW5zbGF0aW9uczogTG9jYWxlVHJhbnNsYXRpb25zID0ge307XG4gIE9iamVjdC52YWx1ZXModHJhbnNsYXRpb25zTWFwKS5mb3JFYWNoKChzdHJpbmcpID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBzdHJpbmcuc291cmNlO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gc3RyaW5nW2xvY2FsZV0gfHwgc3RyaW5nLmVuIHx8IHN0cmluZy5zb3VyY2U7XG4gICAgbG9jYWxlVHJhbnNsYXRpb25zW3NvdXJjZV0gPSB0cmFuc2xhdGlvbjtcbiAgfSk7XG4gIHJldHVybiBsb2NhbGVUcmFuc2xhdGlvbnM7XG59XG4iLCAiLyoqIEBkZXByZWNhdGVkIFVzZSBjbGllbnQudHMgaW5zdGVhZC4gKi9cblxuaW1wb3J0IHtSb290Q29uZmlnfSBmcm9tICdAYmxpbmtrL3Jvb3QnO1xuaW1wb3J0IHtcbiAgRmllbGRWYWx1ZSxcbiAgUXVlcnksXG4gIFRpbWVzdGFtcCxcbiAgZ2V0RmlyZXN0b3JlLFxufSBmcm9tICdmaXJlYmFzZS1hZG1pbi9maXJlc3RvcmUnO1xuaW1wb3J0IHtcbiAgTG9hZFRyYW5zbGF0aW9uc09wdGlvbnMsXG4gIExvY2FsZVRyYW5zbGF0aW9ucyxcbiAgVHJhbnNsYXRpb24sXG4gIFRyYW5zbGF0aW9uc01hcCxcbiAgZ2V0Q21zUGx1Z2luLFxuICB0cmFuc2xhdGlvbnNGb3JMb2NhbGUsXG4gIHVubWFyc2hhbERhdGEsXG59IGZyb20gJy4vY2xpZW50LmpzJztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBkb2MgZnJvbSBSb290LmpzIENNUy5cbiAqIEBkZXByZWNhdGVkIFVzZSBSb290Q01TQ2xpZW50LmdldERvYygpIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREb2M8VD4oXG4gIHJvb3RDb25maWc6IFJvb3RDb25maWcsXG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICBzbHVnOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICBtb2RlOiAnZHJhZnQnIHwgJ3B1Ymxpc2hlZCc7XG4gIH1cbik6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgY29uc3QgY21zUGx1Z2luID0gZ2V0Q21zUGx1Z2luKHJvb3RDb25maWcpO1xuICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gY21zUGx1Z2luLmdldENvbmZpZygpO1xuICBjb25zdCBwcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmlkIHx8ICdkZWZhdWx0JztcbiAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgY29uc3QgYXBwID0gY21zUGx1Z2luLmdldEZpcmViYXNlQXBwKCk7XG4gIGNvbnN0IGRiID0gZ2V0RmlyZXN0b3JlKGFwcCk7XG4gIC8vIFNsdWdzIHdpdGggc2xhc2hlcyBhcmUgZW5jb2RlZCBhcyBgLS1gIGluIHRoZSBEQi5cbiAgc2x1ZyA9IHNsdWcucmVwbGFjZUFsbCgnLycsICctLScpO1xuICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHtwcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufS8ke3NsdWd9YDtcbiAgY29uc3QgZG9jUmVmID0gZGIuZG9jKGRiUGF0aCk7XG4gIGNvbnN0IGRvYyA9IGF3YWl0IGRvY1JlZi5nZXQoKTtcbiAgaWYgKGRvYy5leGlzdHMpIHtcbiAgICBjb25zdCBkYXRhID0gZG9jLmRhdGEoKTtcbiAgICByZXR1cm4gdW5tYXJzaGFsRGF0YShkYXRhKSBhcyBUO1xuICB9XG4gIGNvbnNvbGUubG9nKGBkb2Mgbm90IGZvdW5kOiAke2RiUGF0aH1gKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTGlzdHMgZG9jcyBmcm9tIGEgUm9vdC5qcyBDTVMgY29sbGVjdGlvbi5cbiAqIEBkZXByZWNhdGVkIFVzZSBSb290Q01TQ2xpZW50Lmxpc3REb2NzKCkgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3REb2NzPFQ+KFxuICByb290Q29uZmlnOiBSb290Q29uZmlnLFxuICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgb3B0aW9uczoge1xuICAgIG1vZGU6ICdkcmFmdCcgfCAncHVibGlzaGVkJztcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgb3JkZXJCeT86IHN0cmluZztcbiAgICBvcmRlckJ5RGlyZWN0aW9uPzogJ2FzYycgfCAnZGVzYyc7XG4gICAgcXVlcnk/OiAocXVlcnk6IFF1ZXJ5KSA9PiBRdWVyeTtcbiAgfVxuKTogUHJvbWlzZTx7ZG9jczogVFtdfT4ge1xuICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gIGNvbnN0IGNtc1BsdWdpbk9wdGlvbnMgPSBjbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuaWQgfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICBjb25zdCBhcHAgPSBjbXNQbHVnaW4uZ2V0RmlyZWJhc2VBcHAoKTtcbiAgY29uc3QgZGIgPSBnZXRGaXJlc3RvcmUoYXBwKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICBsZXQgcXVlcnk6IFF1ZXJ5ID0gZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgIHF1ZXJ5ID0gcXVlcnkubGltaXQob3B0aW9ucy5saW1pdCk7XG4gIH1cbiAgaWYgKG9wdGlvbnMub2Zmc2V0KSB7XG4gICAgcXVlcnkgPSBxdWVyeS5vZmZzZXQob3B0aW9ucy5vZmZzZXQpO1xuICB9XG4gIGlmIChvcHRpb25zLm9yZGVyQnkpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkob3B0aW9ucy5vcmRlckJ5LCBvcHRpb25zLm9yZGVyQnlEaXJlY3Rpb24pO1xuICB9XG4gIGlmIChvcHRpb25zLnF1ZXJ5KSB7XG4gICAgcXVlcnkgPSBvcHRpb25zLnF1ZXJ5KHF1ZXJ5KTtcbiAgfVxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gIGNvbnN0IGRvY3M6IFRbXSA9IFtdO1xuICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgIGNvbnN0IGRvYyA9IHVubWFyc2hhbERhdGEocmVzdWx0LmRhdGEoKSkgYXMgVDtcbiAgICBkb2NzLnB1c2goZG9jKTtcbiAgfSk7XG4gIHJldHVybiB7ZG9jc307XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRvY3MgaW4gYSBSb290LmpzIENNUyBjb2xsZWN0aW9uLlxuICogQGRlcHJlY2F0ZWQgVXNlIFJvb3RDTVNDbGllbnQuZ2V0RG9jc0NvdW50KCkgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG51bURvY3MoXG4gIHJvb3RDb25maWc6IFJvb3RDb25maWcsXG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgbW9kZTogJ2RyYWZ0JyB8ICdwdWJsaXNoZWQnO1xuICAgIHF1ZXJ5PzogKHF1ZXJ5OiBRdWVyeSkgPT4gUXVlcnk7XG4gIH1cbikge1xuICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gIGNvbnN0IGNtc1BsdWdpbk9wdGlvbnMgPSBjbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuaWQgfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICBjb25zdCBhcHAgPSBjbXNQbHVnaW4uZ2V0RmlyZWJhc2VBcHAoKTtcbiAgY29uc3QgZGIgPSBnZXRGaXJlc3RvcmUoYXBwKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICBsZXQgcXVlcnk6IFF1ZXJ5ID0gZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICBpZiAob3B0aW9ucy5xdWVyeSkge1xuICAgIHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeShxdWVyeSk7XG4gIH1cbiAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHF1ZXJ5LmNvdW50KCkuZ2V0KCk7XG4gIGNvbnN0IGNvdW50ID0gcmVzdWx0cy5kYXRhKCkuY291bnQ7XG4gIHJldHVybiBjb3VudDtcbn1cblxuLyoqXG4gKiBQdWJsaXNoZXMgc2NoZWR1bGVkIGRvY3MuXG4gKiBAZGVwcmVjYXRlZCBVc2UgUm9vdENNU0NsaWVudC5wdWJsaXNoU2NoZWR1bGVkRG9jcygpIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoU2NoZWR1bGVkRG9jcyhyb290Q29uZmlnOiBSb290Q29uZmlnKSB7XG4gIGNvbnN0IGNtc1BsdWdpbiA9IGdldENtc1BsdWdpbihyb290Q29uZmlnKTtcbiAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IGNtc1BsdWdpbi5nZXRDb25maWcoKTtcbiAgY29uc3QgcHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gIGNvbnN0IGFwcCA9IGNtc1BsdWdpbi5nZXRGaXJlYmFzZUFwcCgpO1xuICBjb25zdCBkYiA9IGdldEZpcmVzdG9yZShhcHApO1xuXG4gIGNvbnN0IHByb2plY3RDb2xsZWN0aW9uc1BhdGggPSBgUHJvamVjdHMvJHtwcm9qZWN0SWR9L0NvbGxlY3Rpb25zYDtcbiAgY29uc3Qgbm93ID0gTWF0aC5jZWlsKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcblxuICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGRiLmNvbGxlY3Rpb25Hcm91cCgnU2NoZWR1bGVkJykuZ2V0KCk7XG4gIGNvbnN0IGRvY3MgPSBzbmFwc2hvdC5kb2NzXG4gICAgLmZpbHRlcigoZCkgPT4ge1xuICAgICAgLy8gRmlsdGVyIGRvY3MgYnkgcHJvamVjdC5cbiAgICAgIGlmICghZC5yZWYucGF0aC5zdGFydHNXaXRoKHByb2plY3RDb2xsZWN0aW9uc1BhdGgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEZpbHRlciBkb2NzIHdoZXJlIHNjaGVkdWxlZEF0IGlzIGluIHRoZSBwYXN0LlxuICAgICAgLy8gTk9URShzdGV2ZW5sZSk6IHRoZSBmaWx0ZXJpbmcgaXMgZG9uZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVzaW5nIGEgcXVlcnlcbiAgICAgIC8vIHRvIGF2b2lkIGhhdmluZyB0byBjcmVhdGUgYW4gaW5kZXggaW4gZmlyZXN0b3JlLlxuICAgICAgY29uc3QgZGF0YSA9IGQuZGF0YSgpIHx8IHt9O1xuICAgICAgY29uc3Qgc2NoZWR1bGVkQXQ6IFRpbWVzdGFtcCB8IHVuZGVmaW5lZCA9IGRhdGEuc3lzPy5zY2hlZHVsZWRBdDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNjaGVkdWxlZEF0ICYmIHNjaGVkdWxlZEF0LnRvTWlsbGlzICYmIHNjaGVkdWxlZEF0LnRvTWlsbGlzKCkgPD0gbm93XG4gICAgICApO1xuICAgIH0pXG4gICAgLm1hcCgoZCkgPT4ge1xuICAgICAgY29uc3QgZGJQYXRoID0gZC5yZWYucGF0aDtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gZGJQYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBzbHVnID0gc2VnbWVudHMuYXQoLTEpO1xuICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHNlZ21lbnRzLmF0KC0zKTtcbiAgICAgIGNvbnN0IGlkID0gYCR7Y29sbGVjdGlvbn0vJHtzbHVnfWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBkLmRhdGEoKSxcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIHNsdWcsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gIGlmIChkb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIEVhY2ggdHJhbnNhY3Rpb24gb3IgYmF0Y2ggY2FuIHdyaXRlIGEgbWF4IG9mIDUwMCBvcHMuXG4gIC8vIGh0dHBzOi8vZmlyZWJhc2UuZ29vZ2xlLmNvbS9kb2NzL2ZpcmVzdG9yZS9tYW5hZ2UtZGF0YS90cmFuc2FjdGlvbnNcbiAgbGV0IGJhdGNoQ291bnQgPSAwO1xuICBjb25zdCBiYXRjaCA9IGRiLmJhdGNoKCk7XG4gIGNvbnN0IHB1Ymxpc2hlZERvY3M6IGFueVtdID0gW107XG4gIGZvciAoY29uc3QgZG9jIG9mIGRvY3MpIHtcbiAgICBjb25zdCB7aWQsIGNvbGxlY3Rpb24sIHNsdWcsIGRhdGF9ID0gZG9jO1xuICAgIGNvbnN0IGRyYWZ0UmVmID0gZGIuZG9jKFxuICAgICAgYCR7cHJvamVjdENvbGxlY3Rpb25zUGF0aH0vJHtjb2xsZWN0aW9ufS9EcmFmdHMvJHtzbHVnfWBcbiAgICApO1xuICAgIGNvbnN0IHNjaGVkdWxlZFJlZiA9IGRiLmRvYyhcbiAgICAgIGAke3Byb2plY3RDb2xsZWN0aW9uc1BhdGh9LyR7Y29sbGVjdGlvbn0vU2NoZWR1bGVkLyR7c2x1Z31gXG4gICAgKTtcbiAgICBjb25zdCBwdWJsaXNoZWRSZWYgPSBkYi5kb2MoXG4gICAgICBgJHtwcm9qZWN0Q29sbGVjdGlvbnNQYXRofS8ke2NvbGxlY3Rpb259L1B1Ymxpc2hlZC8ke3NsdWd9YFxuICAgICk7XG4gICAgY29uc3Qge3NjaGVkdWxlZEF0LCBzY2hlZHVsZWRCeSwgLi4uc3lzfSA9IGRhdGEuc3lzIHx8IHt9O1xuXG4gICAgLy8gT25seSB1cGRhdGUgYGZpcnN0UHVibGlzaGVkYCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuXG4gICAgY29uc3QgZmlyc3RQdWJsaXNoZWRBdCA9IHN5cy5maXJzdFB1Ymxpc2hlZEF0ID8/IHNjaGVkdWxlZEF0O1xuICAgIGNvbnN0IGZpcnN0UHVibGlzaGVkQnkgPSBzeXMuZmlyc3RQdWJsaXNoZWRCeSA/PyAoc2NoZWR1bGVkQnkgfHwgJycpO1xuXG4gICAgLy8gU2F2ZSBwdWJsaXNoZWQgZG9jLlxuICAgIGJhdGNoLnNldChwdWJsaXNoZWRSZWYsIHtcbiAgICAgIGlkLFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIHNsdWcsXG4gICAgICBmaWVsZHM6IGRhdGEuZmllbGRzIHx8IHt9LFxuICAgICAgc3lzOiB7XG4gICAgICAgIC4uLnN5cyxcbiAgICAgICAgZmlyc3RQdWJsaXNoZWRBdDogZmlyc3RQdWJsaXNoZWRBdCxcbiAgICAgICAgZmlyc3RQdWJsaXNoZWRCeTogZmlyc3RQdWJsaXNoZWRCeSxcbiAgICAgICAgcHVibGlzaGVkQXQ6IEZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgIHB1Ymxpc2hlZEJ5OiBzY2hlZHVsZWRCeSB8fCAnJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgLy8gUmVtb3ZlIHB1Ymxpc2hlZCBkb2MuXG4gICAgYmF0Y2guZGVsZXRlKHNjaGVkdWxlZFJlZik7XG4gICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBkcmFmdCBkb2MgdG8gcmVtb3ZlIGBzY2hlZHVsZWRBdGAgYW5kIGBzY2hlZHVsZWRCeWAgZmllbGRzXG4gICAgLy8gYW5kIHVwZGF0ZSB0aGUgYHB1Ymxpc2hlZEF0YCBhbmQgYHB1Ymxpc2hlZEJ5YCBmaWVsZHMuXG4gICAgYmF0Y2gudXBkYXRlKGRyYWZ0UmVmLCB7XG4gICAgICAnc3lzLnNjaGVkdWxlZEF0JzogRmllbGRWYWx1ZS5kZWxldGUoKSxcbiAgICAgICdzeXMuc2NoZWR1bGVkQnknOiBGaWVsZFZhbHVlLmRlbGV0ZSgpLFxuICAgICAgJ3N5cy5maXJzdFB1Ymxpc2hlZEF0JzogZmlyc3RQdWJsaXNoZWRBdCxcbiAgICAgICdzeXMuZmlyc3RQdWJsaXNoZWRCeSc6IGZpcnN0UHVibGlzaGVkQnksXG4gICAgICAnc3lzLnB1Ymxpc2hlZEF0JzogRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICdzeXMucHVibGlzaGVkQnknOiBzY2hlZHVsZWRCeSB8fCAnJyxcbiAgICB9KTtcbiAgICBiYXRjaENvdW50ICs9IDE7XG5cbiAgICBwdWJsaXNoZWREb2NzLnB1c2goZG9jKTtcblxuICAgIGlmIChiYXRjaENvdW50ID49IDQ5OCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgYmF0Y2guY29tbWl0KCk7XG4gIGNvbnNvbGUubG9nKGBwdWJsaXNoZWQgJHtwdWJsaXNoZWREb2NzLmxlbmd0aH0gZG9jcyFgKTtcbiAgcmV0dXJuIHB1Ymxpc2hlZERvY3M7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBSb290Q01TQ2xpZW50LmxvYWRUcmFuc2xhdGlvbnMoKWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkVHJhbnNsYXRpb25zKFxuICByb290Q29uZmlnOiBSb290Q29uZmlnLFxuICBvcHRpb25zPzogTG9hZFRyYW5zbGF0aW9uc09wdGlvbnNcbik6IFByb21pc2U8VHJhbnNsYXRpb25zTWFwPiB7XG4gIGNvbnN0IGNtc1BsdWdpbiA9IGdldENtc1BsdWdpbihyb290Q29uZmlnKTtcbiAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IGNtc1BsdWdpbi5nZXRDb25maWcoKTtcbiAgY29uc3QgcHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gIGNvbnN0IGFwcCA9IGNtc1BsdWdpbi5nZXRGaXJlYmFzZUFwcCgpO1xuICBjb25zdCBkYiA9IGdldEZpcmVzdG9yZShhcHApO1xuXG4gIGNvbnN0IGRiUGF0aCA9IGBQcm9qZWN0cy8ke3Byb2plY3RJZH0vVHJhbnNsYXRpb25zYDtcbiAgbGV0IHF1ZXJ5OiBRdWVyeSA9IGRiLmNvbGxlY3Rpb24oZGJQYXRoKTtcbiAgaWYgKG9wdGlvbnM/LnRhZ3MpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKCd0YWdzJywgJ2FycmF5LWNvbnRhaW5zLWFueScsIG9wdGlvbnMudGFncyk7XG4gIH1cblxuICBjb25zdCBxdWVyeVNuYXBzaG90ID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gIGNvbnN0IHRyYW5zbGF0aW9uc01hcDogVHJhbnNsYXRpb25zTWFwID0ge307XG4gIHF1ZXJ5U25hcHNob3QuZm9yRWFjaCgoZG9jKSA9PiB7XG4gICAgY29uc3QgaGFzaCA9IGRvYy5pZDtcbiAgICB0cmFuc2xhdGlvbnNNYXBbaGFzaF0gPSBkb2MuZGF0YSgpIGFzIFRyYW5zbGF0aW9uO1xuICB9KTtcbiAgcmV0dXJuIHRyYW5zbGF0aW9uc01hcDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYFJvb3RDTVNDbGllbnQubG9hZFRyYW5zbGF0aW9uc0ZvckxvY2FsZSgpYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRUcmFuc2xhdGlvbnNGb3JMb2NhbGUoXG4gIHJvb3RDb25maWc6IFJvb3RDb25maWcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBvcHRpb25zPzogTG9hZFRyYW5zbGF0aW9uc09wdGlvbnNcbik6IFByb21pc2U8TG9jYWxlVHJhbnNsYXRpb25zPiB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uc01hcCA9IGF3YWl0IGxvYWRUcmFuc2xhdGlvbnMocm9vdENvbmZpZywgb3B0aW9ucyk7XG4gIHJldHVybiB0cmFuc2xhdGlvbnNGb3JMb2NhbGUodHJhbnNsYXRpb25zTWFwLCBsb2NhbGUpO1xufVxuIiwgImltcG9ydCB7RnVuY3Rpb25hbENvbXBvbmVudH0gZnJvbSAncHJlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25GaWVsZFByb3BzIHtcbiAgdHlwZTogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGhlbHA/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkZWZhdWx0PzogYW55O1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBkZXByZWNhdGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3RyaW5nRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnc3RyaW5nJztcbiAgZGVmYXVsdD86IHN0cmluZztcbiAgdHJhbnNsYXRlPzogYm9vbGVhbjtcbiAgdmFyaWFudD86ICdpbnB1dCcgfCAndGV4dGFyZWEnO1xuICAvKiogRm9yIHRleHRhcmVhIHZhcmlhbnQsIHRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIG9mIHRleHQgdG8gc2hvdy4gKi9cbiAgbWF4Um93cz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmcoZmllbGQ6IE9taXQ8U3RyaW5nRmllbGQsICd0eXBlJz4pOiBTdHJpbmdGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdzdHJpbmcnfTtcbn1cblxuZXhwb3J0IHR5cGUgTnVtYmVyRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnbnVtYmVyJztcbiAgZGVmYXVsdD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXIoZmllbGQ6IE9taXQ8TnVtYmVyRmllbGQsICd0eXBlJz4pOiBOdW1iZXJGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdudW1iZXInfTtcbn1cblxuZXhwb3J0IHR5cGUgRGF0ZUZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ2RhdGUnO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGUoZmllbGQ6IE9taXQ8RGF0ZUZpZWxkLCAndHlwZSc+KTogRGF0ZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2RhdGUnfTtcbn1cblxuZXhwb3J0IHR5cGUgRGF0ZVRpbWVGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdkYXRldGltZSc7XG4gIGRlZmF1bHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZXRpbWUoZmllbGQ6IE9taXQ8RGF0ZVRpbWVGaWVsZCwgJ3R5cGUnPik6IERhdGVUaW1lRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnZGF0ZXRpbWUnfTtcbn1cblxuZXhwb3J0IHR5cGUgQm9vbGVhbkZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ2Jvb2xlYW4nO1xuICBkZWZhdWx0PzogYm9vbGVhbjtcbiAgY2hlY2tib3hMYWJlbD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuKGZpZWxkOiBPbWl0PEJvb2xlYW5GaWVsZCwgJ3R5cGUnPik6IEJvb2xlYW5GaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdib29sZWFuJ307XG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdEZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ3NlbGVjdCc7XG4gIGRlZmF1bHQ/OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBcnJheTx7dmFsdWU6IHN0cmluZzsgbGFiZWw/OiBzdHJpbmd9PiB8IHN0cmluZ1tdO1xuICB0cmFuc2xhdGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdChmaWVsZDogT21pdDxTZWxlY3RGaWVsZCwgJ3R5cGUnPik6IFNlbGVjdEZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ3NlbGVjdCd9O1xufVxuXG5leHBvcnQgdHlwZSBNdWx0aVNlbGVjdEZpZWxkID0gT21pdDxTZWxlY3RGaWVsZCwgJ3R5cGUnPiAmIHtcbiAgdHlwZTogJ211bHRpc2VsZWN0JztcbiAgLyoqIFNldCB0byBgdHJ1ZWAgdG8gYWxsb3cgdXNlcnMgdG8gY3JlYXRlIGFyYml0cmFyeSB2YWx1ZXMuICovXG4gIGNyZWF0YWJsZT86IGJvb2xlYW47XG4gIHRyYW5zbGF0ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlzZWxlY3QoXG4gIGZpZWxkOiBPbWl0PE11bHRpU2VsZWN0RmllbGQsICd0eXBlJz5cbik6IE11bHRpU2VsZWN0RmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnbXVsdGlzZWxlY3QnfTtcbn1cblxuZXhwb3J0IHR5cGUgSW1hZ2VGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdpbWFnZSc7XG4gIHRyYW5zbGF0ZT86IGJvb2xlYW47XG4gIC8qKiBMaXN0IG9mIHN1cHBvcnRlZCBleHRzLCBlLmcuIGBbJy5tcDQnXWAuICovXG4gIGV4dHM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZShmaWVsZDogT21pdDxJbWFnZUZpZWxkLCAndHlwZSc+KTogSW1hZ2VGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdpbWFnZSd9O1xufVxuXG5leHBvcnQgdHlwZSBGaWxlRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnZmlsZSc7XG4gIC8qKiBMaXN0IG9mIHN1cHBvcnRlZCBleHRzLCBlLmcuIGBbJy5tcDQnXWAuICovXG4gIGV4dHM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxlKGZpZWxkOiBPbWl0PEZpbGVGaWVsZCwgJ3R5cGUnPik6IEZpbGVGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdmaWxlJ307XG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdEZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ29iamVjdCc7XG4gIGZpZWxkczogRmllbGRXaXRoSWRbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3QoZmllbGQ6IE9taXQ8T2JqZWN0RmllbGQsICd0eXBlJz4pOiBPYmplY3RGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdvYmplY3QnfTtcbn1cblxuZXhwb3J0IHR5cGUgQXJyYXlGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdhcnJheSc7XG4gIGRlZmF1bHQ/OiBhbnlbXTtcbiAgLyoqXG4gICAqIFN0cmluZyBmb3JtYXQgZm9yIHRoZSBwcmV2aWV3IGxpbmUgb2YgYW4gaXRlbSBpbiB0aGUgYXJyYXkuIFBsYWNlaG9sZGVyXG4gICAqIHZhbHVlcyBzaG91bGQgdXNlIGJyYWNrZXRzLCBlLmcuIGBte19pbmRleDowMn06IHtfdHlwZX1gLlxuICAgKlxuICAgKiBNdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIHByb3ZpZGVkLCBpbiB3aGljaCBjYXNlIHRoZSBmaXJzdCBwcmV2aWV3IGxpbmUgd2l0aFxuICAgKiBubyBtaXNzaW5nIHBsYWNlaG9sZGVyIHZhbHVlcyB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIFN5c3RlbSBhZGRlZCBwbGFjZWhvbGRlciB2YWx1ZXM6XG4gICAqXG4gICAqIC0gX2luZGV4OiBUaGUgMC1iYXNlZCBpbmRleC5cbiAgICogLSBfaW5kZXg6MDI6IEEgbGVmdC1wYWRkZWQgdmVyc2lvbiBvZiBfaW5kZXggdG8gMiBkaWdpdHMuXG4gICAqIC0gX2luZGV4OjAzOiBBIGxlZnQtcGFkZGVkIHZlcnNpb24gb2YgX2luZGV4IHRvIDMgZGlnaXRzLlxuICAgKiAtIF90eXBlOiBGb3IgYXJyYXkgb2Ygb25lLW9mIGZpZWxkcywgdGhlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIGZpZWxkLlxuICAgKi9cbiAgcHJldmlldz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvLyBOT1RFKHN0ZXZlbmxlKTogdGhlIGFycmF5IGZpZWxkIHNob3VsZCBvbmx5IGFjY2VwdCBvYmplY3QgdmFsdWVzIHRvIGtlZXBcbiAgLy8gdGhlIHNjaGVtYXMgZnV0dXJlLWZyaWVuZGx5LiBGb3IgZXhhbXBsZSwgaWYgd2Ugd2VyZSB0byBhY2NlcHQgcHJpbWF0aXZlc1xuICAvLyAoZS5nLiBBcnJheTxzdHJpbmc+KSBhbmQgdGhlIGRldmVsb3BlciBkZWNpZGVzIGluIHRoZSBmdXR1cmUgdGhhdCB0aGV5XG4gIC8vIG5lZWQgdG8gYWRkIGV4dHJhIGZpZWxkcyB0byB0aGF0IGFycmF5IHR5cGUsIHRoZXkgd291bGQgaGF2ZSB0byBjcmVhdGUgYVxuICAvLyBuZXcgZmllbGQsIGNyZWF0ZSBhIG5ldyBzY2hlbWEgZmllbGQsIGFuZCB0aGVuIHBlcmZvcm0gYSBkYiBtaWdyYXRpb24gdG9cbiAgLy8gdXBkYXRlIGZyb20gdGhlIG9sZCBmaWVsZCB0eXBlIHRvIHRoZSBuZXcgZmllbGQgdHlwZS4gQnV0IGlmIHdlIGVuZm9yY2VcbiAgLy8gb2JqZWN0cyBoZXJlLCBhIGRldmVsb3BlciBzaG91bGQgdGVjaG5pY2FsbHkgYmUgYWJsZSB0byBhZGQgZmllbGRzIHRvIHRoZVxuICAvLyBuZXN0ZWQgZmllbGQgZGVmaW5pdGlvbiB3aXRob3V0IGJyZWFraW5nIGFueSBleGlzdGluZyBkYiBlbnRyaWVzLlxuICBvZjogT2JqZWN0TGlrZUZpZWxkO1xuICAvKipcbiAgICogTGFiZWwgdG8gdXNlIGZvciB0aGUgXCJhZGQgaXRlbVwiIGJ1dHRvbi4gRGVmYXVsdHMgdG8gYEFkZGAuXG4gICAqL1xuICBidXR0b25MYWJlbD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheShmaWVsZDogT21pdDxBcnJheUZpZWxkLCAndHlwZSc+KTogQXJyYXlGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdhcnJheSd9O1xufVxuXG5leHBvcnQgdHlwZSBPbmVPZkZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ29uZW9mJztcbiAgdHlwZXM6IFNjaGVtYVtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZU9mKGZpZWxkOiBPbWl0PE9uZU9mRmllbGQsICd0eXBlJz4pOiBPbmVPZkZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ29uZW9mJ307XG59XG5cbmV4cG9ydCB0eXBlIEZpZWxkID1cbiAgfCBTdHJpbmdGaWVsZFxuICB8IE51bWJlckZpZWxkXG4gIHwgRGF0ZUZpZWxkXG4gIHwgRGF0ZVRpbWVGaWVsZFxuICB8IEJvb2xlYW5GaWVsZFxuICB8IFNlbGVjdEZpZWxkXG4gIHwgTXVsdGlTZWxlY3RGaWVsZFxuICB8IEltYWdlRmllbGRcbiAgfCBGaWxlRmllbGRcbiAgfCBPYmplY3RGaWVsZFxuICB8IEFycmF5RmllbGRcbiAgfCBPbmVPZkZpZWxkO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8ge0BsaW5rIEZpZWxkfSBidXQgd2l0aCBhIHJlcXVpcmVkIGBpZGAuXG4gKiBUT0RPKHN0ZXZlbmxlKTogZml4IHRoaXMuXG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkV2l0aElkID0gRmllbGQ7XG5cbmV4cG9ydCB0eXBlIE9iamVjdExpa2VGaWVsZCA9IEltYWdlRmllbGQgfCBGaWxlRmllbGQgfCBPYmplY3RGaWVsZCB8IE9uZU9mRmllbGQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZmllbGRzOiBGaWVsZFdpdGhJZFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lU2NoZW1hKHNjaGVtYTogU2NoZW1hKTogU2NoZW1hIHtcbiAgcmV0dXJuIHNjaGVtYTtcbn1cblxuLyoqIERlZmluZXMgdGhlIHNjaGVtYSBmb3IgYSBjb2xsZWN0aW9uIG9yIHJldXNhYmxlIGNvbXBvbmVudC4gKi9cbmV4cG9ydCBjb25zdCBkZWZpbmUgPSBkZWZpbmVTY2hlbWE7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb24gPSBTY2hlbWEgJiB7XG4gIC8qKiBVUkwgcGF0aCB3aGVyZSB0aGUgY29sbGVjdGlvbiBzZXJ2ZXMgZnJvbS4gKi9cbiAgdXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogVVJMIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIGEgcHJldmlldyBwYWdlLiBVc2VkIGJ5IHRoZSBzaWRlLWJ5LXNpZGVcbiAgICogZWRpdG9yIHRvIHJlbmRlciBpbnN0YW50IHByZXZpZXdzLiBJZiBibGFuaywgZGVmYXVsdHMgdG8gdGhlIGB1cmxgIGNvbmZpZy5cbiAgICovXG4gIHByZXZpZXdVcmw/OiBzdHJpbmc7XG4gIC8qKiBQYWdlIGNvbXBvbmVudCB0byByZW5kZXIgdGhlIGNvbGxlY3Rpb24gZm9yIGluc3RhbnQgcHJldmlld3MgKi9cbiAgQ29tcG9uZW50PzogRnVuY3Rpb25hbENvbXBvbmVudDtcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGZpZWxkcyB0byB1c2UgZm9yIGRvY3VtZW50IHByZXZpZXcuIERlZmF1bHRzIHRvIFwidGl0bGVcIiBhbmRcbiAgICogXCJpbWFnZVwiLiBVc2UgZG90IG5vdGF0aW9uIGZvciBuZXN0ZWQgZmllbGRzLCBlLmcuIFwibWV0YS50aXRsZVwiLlxuICAgKi9cbiAgcHJldmlldz86IHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBpbWFnZT86IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb2xsZWN0aW9uKGNvbGxlY3Rpb246IENvbGxlY3Rpb24pOiBDb2xsZWN0aW9uIHtcbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmV4cG9ydCBjb25zdCBjb2xsZWN0aW9uID0gZGVmaW5lQ29sbGVjdGlvbjtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFBQSxPQUFPLFlBQVk7QUFHbkI7QUFBQSxFQUNFO0FBQUEsRUFJQTtBQUFBLE9BQ0s7QUF1RUEsSUFBTSxnQkFBTixNQUFvQjtBQUFBLEVBT3pCLFlBQVksWUFBd0I7QUFDbEMsU0FBSyxhQUFhO0FBQ2xCLFNBQUssWUFBWSxhQUFhLFVBQVU7QUFFeEMsVUFBTSxtQkFBbUIsS0FBSyxVQUFVLFVBQVU7QUFDbEQsU0FBSyxZQUFZLGlCQUFpQixNQUFNO0FBQ3hDLFNBQUssTUFBTSxLQUFLLFVBQVUsZUFBZTtB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QUFNLGtCQUFrQixNQUFNLGlCQUFpQixZQUFZLE9BQU87QUFDbEUsU0FBTyxzQkFBc0IsaUJBQWlCLE1BQU07QUFDdEQ7OztBQ3RSQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNCTyxTQUFTLE9BQU8sT0FBK0M7QUFDcEUsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLFNBQVE7QUFDbEM7QUFPTyxTQUFTLE9BQU8sT0FBK0M7QUFDcEUsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLFNBQVE7QUFDbEM7QUFPTyxTQUFTLEtBQUssT0FBMkM7QUFDOUQsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLE9BQU07QUFDaEM7QUFPTyxTQUFTLFNBQVMsT0FBbUQ7QUFDMUUsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLFdBQVU7QUFDcEM7QUFRTyxTQUFTLFFBQVEsT0FBaUQ7QUFDdkUsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLFVBQVM7QUFDbkM7QUFTTyxTQUFTLE9BQU8sT0FBK0M7QUFDcEUsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLFNBQVE7QUFDbEM7QUFTTyxTQUFTLFlBQ2QsT0FDa0I7QUFDbEIsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLGNBQWE7QUFDdkM7QUFTTyxTQUFTLE1BQU0sT0FBNkM7QUFDakUsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLFFBQU87QUFDakM7QUFRTyxTQUFTLEtBQUssT0FBMkM7QUFDOUQsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLE9BQU07QUFDaEM7QUFPTyxTQUFTLE9BQU8sT0FBK0M7QUFDcEUsU0FBTyxFQUFDLEdBQUcsT0FBTyxNQUFNLFNBQVE7QUFDbEM7QUFtQ08sU0FBUyxNQUFNLE9BQTZDO0FBQ2pFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxRQUFPO0FBQ2pDO0FBT08sU0FBUyxNQUFNLE9BQTZDO0FBQ2pFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxRQUFPO0FBQ2pDO0FBOEJPLFNBQVMsYUFBYSxRQUF3QjtBQUNuRCxTQUFPO0FBQ1Q7QUFHTyxJQUFNLFNBQVM7QUFzQmYsU0FBUyxpQkFBaUJHLGFBQW9DO0FBQ25FLFNBQU9BO0FBQ1Q7QUFFTyxJQUFNLGFBQWE7IiwKICAibmFtZXMiOiBbImNvbGxlY3Rpb24iLCAicGx1Z2luIiwgInN0cmluZyIsICJGaWVsZFZhbHVlIiwgImdldEZpcmVzdG9yZSIsICJnZXRGaXJlc3RvcmUiLCAiY29sbGVjdGlvbiIsICJGaWVsZFZhbHVlIiwgImNvbGxlY3Rpb24iXQp9Cg==
|
|
598
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9jbGllbnQudHMiLCAiLi4vY29yZS9ydW50aW1lLnRzIiwgIi4uL2NvcmUvc2NoZW1hLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgY3J5cHRvIGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7UGx1Z2luLCBSb290Q29uZmlnfSBmcm9tICdAYmxpbmtrL3Jvb3QnO1xuaW1wb3J0IHtBcHB9IGZyb20gJ2ZpcmViYXNlLWFkbWluL2FwcCc7XG5pbXBvcnQge1xuICBGaWVsZFZhbHVlLFxuICBGaXJlc3RvcmUsXG4gIFF1ZXJ5LFxuICBUaW1lc3RhbXAsXG4gIGdldEZpcmVzdG9yZSxcbn0gZnJvbSAnZmlyZWJhc2UtYWRtaW4vZmlyZXN0b3JlJztcbmltcG9ydCB7Q01TUGx1Z2lufSBmcm9tICcuL3BsdWdpbi5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jPEZpZWxkcyA9IGFueT4ge1xuICAvKiogVGhlIGlkIG9mIHRoZSBkb2MsIGUuZy4gXCJQYWdlcy9mb28tYmFyXCIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBpZCBvZiB0aGUgZG9jLCBlLmcuIFwiUGFnZXNcIi4gKi9cbiAgY29sbGVjdGlvbklkOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2x1ZyBvZiB0aGUgZG9jLCBlLmcuIFwiZm9vLWJhclwiLiAqL1xuICBzbHVnOiBzdHJpbmc7XG4gIHN5czoge1xuICAgIGNyZWF0ZWRBdDogbnVtYmVyO1xuICAgIGNyZWF0ZWRCeTogc3RyaW5nO1xuICAgIG1vZGlmaWVkQXQ6IG51bWJlcjtcbiAgICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gICAgZmlyc3RQdWJsaXNoZWRBdD86IG51bWJlcjtcbiAgICBmaXJzdFB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIHB1Ymxpc2hlZEF0PzogbnVtYmVyO1xuICAgIHB1Ymxpc2hlZEJ5Pzogc3RyaW5nO1xuICAgIGxvY2FsZXM/OiBzdHJpbmdbXTtcbiAgfTtcbiAgZmllbGRzOiBGaWVsZHM7XG59XG5cbmV4cG9ydCB0eXBlIERvY01vZGUgPSAnZHJhZnQnIHwgJ3B1Ymxpc2hlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RG9jT3B0aW9ucyB7XG4gIC8qKiBNb2RlLCBlaXRoZXIgXCJkcmFmdFwiIG9yIFwicHVibGlzaGVkXCIuICovXG4gIG1vZGU6IERvY01vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0RG9jT3B0aW9ucyB7XG4gIC8qKiBNb2RlLCBlaXRoZXIgXCJkcmFmdFwiIG9yIFwicHVibGlzaGVkXCIuICovXG4gIG1vZGU6IERvY01vZGU7XG4gIC8qKlxuICAgKiBFbWFpbCBvZiB1c2VyIG1vZGlmeWluZyB0aGUgZG9jLiBJZiBibGFuaywgZGVmYXVsdHMgdG8gYHJvb3QtY21zLWNsaWVudGAuXG4gICAqL1xuICBtb2RpZmllZEJ5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3REb2NzT3B0aW9ucyB7XG4gIG1vZGU6IERvY01vZGU7XG4gIG9mZnNldD86IG51bWJlcjtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIG9yZGVyQnlEaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJztcbiAgcXVlcnk/OiAocXVlcnk6IFF1ZXJ5KSA9PiBRdWVyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRDb3VudE9wdGlvbnMge1xuICBtb2RlOiBEb2NNb2RlO1xuICBxdWVyeT86IChxdWVyeTogUXVlcnkpID0+IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uIHtcbiAgW2xvY2FsZTogc3RyaW5nXTogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGlvbnNNYXAge1xuICBbaGFzaDogc3RyaW5nXTogVHJhbnNsYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxlVHJhbnNsYXRpb25zIHtcbiAgW3NvdXJjZTogc3RyaW5nXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRUcmFuc2xhdGlvbnNPcHRpb25zIHtcbiAgdGFncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgUm9vdENNU0NsaWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm9vdENvbmZpZzogUm9vdENvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBjbXNQbHVnaW46IENNU1BsdWdpbjtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0SWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBkYjogRmlyZXN0b3JlO1xuXG4gIGNvbnN0cnVjdG9yKHJvb3RDb25maWc6IFJvb3RDb25maWcpIHtcbiAgICB0aGlzLnJvb3RDb25maWcgPSByb290Q29uZmlnO1xuICAgIHRoaXMuY21zUGx1Z2luID0gZ2V0Q21zUGx1Z2luKHJvb3RDb25maWcpO1xuXG4gICAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IHRoaXMuY21zUGx1Z2luLmdldENvbmZpZygpO1xuICAgIHRoaXMucHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gICAgdGhpcy5hcHAgPSB0aGlzLmNtc1BsdWdpbi5nZXRGaXJlYmFzZUFwcCgpO1xuICAgIHRoaXMuZGIgPSBnZXRGaXJlc3RvcmUodGhpcy5hcHApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBkb2MgZGF0YSBmcm9tIFJvb3QuanMgQ01TLlxuICAgKi9cbiAgYXN5bmMgZ2V0RG9jPEZpZWxkcyA9IGFueT4oXG4gICAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gICAgc2x1Zzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEdldERvY09wdGlvbnNcbiAgKTogUHJvbWlzZTxEb2M8RmllbGRzPiB8IG51bGw+IHtcbiAgICBjb25zdCByYXdEYXRhID0gYXdhaXQgdGhpcy5nZXRSYXdEb2MoY29sbGVjdGlvbklkLCBzbHVnLCBvcHRpb25zKTtcbiAgICBpZiAocmF3RGF0YSkge1xuICAgICAgcmV0dXJuIHVubWFyc2hhbERhdGEocmF3RGF0YSkgYXMgRG9jPEZpZWxkcz47XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyByYXcgZG9jIGRhdGEgYXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4gT25seSB1c2UgdGhpcyBpZiB5b3Uga25vd1xuICAgKiB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqL1xuICBhc3luYyBnZXRSYXdEb2MoXG4gICAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gICAgc2x1Zzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEdldERvY09wdGlvbnNcbiAgKTogUHJvbWlzZTxhbnkgfCBudWxsPiB7XG4gICAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICAgIC8vIFNsdWdzIHdpdGggc2xhc2hlcyBhcmUgZW5jb2RlZCBhcyBgLS1gIGluIHRoZSBEQi5cbiAgICBzbHVnID0gc2x1Zy5yZXBsYWNlQWxsKCcvJywgJy0tJyk7XG4gICAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufS8ke3NsdWd9YDtcbiAgICBjb25zdCBkb2NSZWYgPSB0aGlzLmRiLmRvYyhkYlBhdGgpO1xuICAgIGNvbnN0IGRvYyA9IGF3YWl0IGRvY1JlZi5nZXQoKTtcbiAgICBpZiAoZG9jLmV4aXN0cykge1xuICAgICAgcmV0dXJuIGRvYy5kYXRhKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgc2V0UmF3RG9jKFxuICAgIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICAgIHNsdWc6IHN0cmluZyxcbiAgICBkYXRhOiBhbnksXG4gICAgb3B0aW9uczogU2V0RG9jT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICAgIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gICAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufS8ke3NsdWd9YDtcbiAgICBjb25zdCBkb2NSZWYgPSB0aGlzLmRiLmRvYyhkYlBhdGgpO1xuICAgIGF3YWl0IGRvY1JlZi5zZXQoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgZG9jcyBmcm9tIGEgUm9vdC5qcyBDTVMgY29sbGVjdGlvbi5cbiAgICovXG4gIGFzeW5jIGxpc3REb2NzPFQ+KFxuICAgIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IExpc3REb2NzT3B0aW9uc1xuICApOiBQcm9taXNlPHtkb2NzOiBUW119PiB7XG4gICAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICAgIGNvbnN0IGRiUGF0aCA9IGBQcm9qZWN0cy8ke3RoaXMucHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICAgIGxldCBxdWVyeTogUXVlcnkgPSB0aGlzLmRiLmNvbGxlY3Rpb24oZGJQYXRoKTtcbiAgICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgICAgcXVlcnkgPSBxdWVyeS5saW1pdChvcHRpb25zLmxpbWl0KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub2Zmc2V0KSB7XG4gICAgICBxdWVyeSA9IHF1ZXJ5Lm9mZnNldChvcHRpb25zLm9mZnNldCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm9yZGVyQnkpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkub3JkZXJCeShvcHRpb25zLm9yZGVyQnksIG9wdGlvbnMub3JkZXJCeURpcmVjdGlvbik7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG9wdGlvbnMucXVlcnkocXVlcnkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gICAgY29uc3QgZG9jczogVFtdID0gW107XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHVubWFyc2hhbERhdGEocmVzdWx0LmRhdGEoKSkgYXMgVDtcbiAgICAgIGRvY3MucHVzaChkb2MpO1xuICAgIH0pO1xuICAgIHJldHVybiB7ZG9jc307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRvY3MgaW4gYSBSb290LmpzIENNUyBjb2xsZWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgZ2V0RG9jc0NvdW50KGNvbGxlY3Rpb25JZDogc3RyaW5nLCBvcHRpb25zOiBHZXRDb3VudE9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICAgIGNvbnN0IG1vZGVDb2xsZWN0aW9uID0gbW9kZSA9PT0gJ2RyYWZ0JyA/ICdEcmFmdHMnIDogJ1B1Ymxpc2hlZCc7XG4gICAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufWA7XG4gICAgbGV0IHF1ZXJ5OiBRdWVyeSA9IHRoaXMuZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICAgIGlmIChvcHRpb25zLnF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG9wdGlvbnMucXVlcnkocXVlcnkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcXVlcnkuY291bnQoKS5nZXQoKTtcbiAgICBjb25zdCBjb3VudCA9IHJlc3VsdHMuZGF0YSgpLmNvdW50O1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgc2NoZWR1bGVkIGRvY3MuXG4gICAqL1xuICBhc3luYyBwdWJsaXNoU2NoZWR1bGVkRG9jcygpIHtcbiAgICBjb25zdCBwcm9qZWN0Q29sbGVjdGlvbnNQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L0NvbGxlY3Rpb25zYDtcbiAgICBjb25zdCBub3cgPSBNYXRoLmNlaWwobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuXG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0aGlzLmRiLmNvbGxlY3Rpb25Hcm91cCgnU2NoZWR1bGVkJykuZ2V0KCk7XG4gICAgY29uc3QgZG9jcyA9IHNuYXBzaG90LmRvY3NcbiAgICAgIC5maWx0ZXIoKGQpID0+IHtcbiAgICAgICAgLy8gRmlsdGVyIGRvY3MgYnkgcHJvamVjdC5cbiAgICAgICAgaWYgKCFkLnJlZi5wYXRoLnN0YXJ0c1dpdGgocHJvamVjdENvbGxlY3Rpb25zUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlsdGVyIGRvY3Mgd2hlcmUgc2NoZWR1bGVkQXQgaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgIC8vIE5PVEUoc3RldmVubGUpOiB0aGUgZmlsdGVyaW5nIGlzIGRvbmUgbWFudWFsbHkgaW5zdGVhZCBvZiB1c2luZyBhIHF1ZXJ5XG4gICAgICAgIC8vIHRvIGF2b2lkIGhhdmluZyB0byBjcmVhdGUgYW4gaW5kZXggaW4gZmlyZXN0b3JlLlxuICAgICAgICBjb25zdCBkYXRhID0gZC5kYXRhKCkgfHwge307XG4gICAgICAgIGNvbnN0IHNjaGVkdWxlZEF0OiBUaW1lc3RhbXAgfCB1bmRlZmluZWQgPSBkYXRhLnN5cz8uc2NoZWR1bGVkQXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgc2NoZWR1bGVkQXQgJiYgc2NoZWR1bGVkQXQudG9NaWxsaXMgJiYgc2NoZWR1bGVkQXQudG9NaWxsaXMoKSA8PSBub3dcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAubWFwKChkKSA9PiB7XG4gICAgICAgIGNvbnN0IGRiUGF0aCA9IGQucmVmLnBhdGg7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gZGJQYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIGNvbnN0IHNsdWcgPSBzZWdtZW50cy5hdCgtMSk7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBzZWdtZW50cy5hdCgtMyk7XG4gICAgICAgIGNvbnN0IGlkID0gYCR7Y29sbGVjdGlvbn0vJHtzbHVnfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogZC5kYXRhKCksXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICBzbHVnLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICBpZiAoZG9jcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdubyBkb2NzIHRvIHNjaGVkdWxlJyk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gRWFjaCB0cmFuc2FjdGlvbiBvciBiYXRjaCBjYW4gd3JpdGUgYSBtYXggb2YgNTAwIG9wcy5cbiAgICAvLyBodHRwczovL2ZpcmViYXNlLmdvb2dsZS5jb20vZG9jcy9maXJlc3RvcmUvbWFuYWdlLWRhdGEvdHJhbnNhY3Rpb25zXG4gICAgbGV0IGJhdGNoQ291bnQgPSAwO1xuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5kYi5iYXRjaCgpO1xuICAgIGNvbnN0IHB1Ymxpc2hlZERvY3M6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBkb2Mgb2YgZG9jcykge1xuICAgICAgY29uc3Qge2lkLCBjb2xsZWN0aW9uLCBzbHVnLCBkYXRhfSA9IGRvYztcbiAgICAgIGNvbnN0IGRyYWZ0UmVmID0gdGhpcy5kYi5kb2MoXG4gICAgICAgIGAke3Byb2plY3RDb2xsZWN0aW9uc1BhdGh9LyR7Y29sbGVjdGlvbn0vRHJhZnRzLyR7c2x1Z31gXG4gICAgICApO1xuICAgICAgY29uc3Qgc2NoZWR1bGVkUmVmID0gdGhpcy5kYi5kb2MoXG4gICAgICAgIGAke3Byb2plY3RDb2xsZWN0aW9uc1BhdGh9LyR7Y29sbGVjdGlvbn0vU2NoZWR1bGVkLyR7c2x1Z31gXG4gICAgICApO1xuICAgICAgY29uc3QgcHVibGlzaGVkUmVmID0gdGhpcy5kYi5kb2MoXG4gICAgICAgIGAke3Byb2plY3RDb2xsZWN0aW9uc1BhdGh9LyR7Y29sbGVjdGlvbn0vUHVibGlzaGVkLyR7c2x1Z31gXG4gICAgICApO1xuICAgICAgY29uc3Qge3NjaGVkdWxlZEF0LCBzY2hlZHVsZWRCeSwgLi4uc3lzfSA9IGRhdGEuc3lzIHx8IHt9O1xuXG4gICAgICAvLyBPbmx5IHVwZGF0ZSBgZmlyc3RQdWJsaXNoZWRgIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC5cbiAgICAgIGNvbnN0IGZpcnN0UHVibGlzaGVkQXQgPSBzeXMuZmlyc3RQdWJsaXNoZWRBdCA/PyBzY2hlZHVsZWRBdDtcbiAgICAgIGNvbnN0IGZpcnN0UHVibGlzaGVkQnkgPSBzeXMuZmlyc3RQdWJsaXNoZWRCeSA/PyAoc2NoZWR1bGVkQnkgfHwgJycpO1xuXG4gICAgICAvLyBTYXZlIHB1Ymxpc2hlZCBkb2MuXG4gICAgICBiYXRjaC5zZXQocHVibGlzaGVkUmVmLCB7XG4gICAgICAgIGlkLFxuICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICBzbHVnLFxuICAgICAgICBmaWVsZHM6IGRhdGEuZmllbGRzIHx8IHt9LFxuICAgICAgICBzeXM6IHtcbiAgICAgICAgICAuLi5zeXMsXG4gICAgICAgICAgZmlyc3RQdWJsaXNoZWRBdDogZmlyc3RQdWJsaXNoZWRBdCxcbiAgICAgICAgICBmaXJzdFB1Ymxpc2hlZEJ5OiBmaXJzdFB1Ymxpc2hlZEJ5LFxuICAgICAgICAgIHB1Ymxpc2hlZEF0OiBGaWVsZFZhbHVlLnNlcnZlclRpbWVzdGFtcCgpLFxuICAgICAgICAgIHB1Ymxpc2hlZEJ5OiBzY2hlZHVsZWRCeSB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgICAvLyBSZW1vdmUgcHVibGlzaGVkIGRvYy5cbiAgICAgIGJhdGNoLmRlbGV0ZShzY2hlZHVsZWRSZWYpO1xuICAgICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIGRyYWZ0IGRvYyB0byByZW1vdmUgYHNjaGVkdWxlZEF0YCBhbmQgYHNjaGVkdWxlZEJ5YCBmaWVsZHNcbiAgICAgIC8vIGFuZCB1cGRhdGUgdGhlIGBwdWJsaXNoZWRBdGAgYW5kIGBwdWJsaXNoZWRCeWAgZmllbGRzLlxuICAgICAgYmF0Y2gudXBkYXRlKGRyYWZ0UmVmLCB7XG4gICAgICAgICdzeXMuc2NoZWR1bGVkQXQnOiBGaWVsZFZhbHVlLmRlbGV0ZSgpLFxuICAgICAgICAnc3lzLnNjaGVkdWxlZEJ5JzogRmllbGRWYWx1ZS5kZWxldGUoKSxcbiAgICAgICAgJ3N5cy5maXJzdFB1Ymxpc2hlZEF0JzogZmlyc3RQdWJsaXNoZWRBdCxcbiAgICAgICAgJ3N5cy5maXJzdFB1Ymxpc2hlZEJ5JzogZmlyc3RQdWJsaXNoZWRCeSxcbiAgICAgICAgJ3N5cy5wdWJsaXNoZWRBdCc6IEZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgICdzeXMucHVibGlzaGVkQnknOiBzY2hlZHVsZWRCeSB8fCAnJyxcbiAgICAgIH0pO1xuICAgICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgICBwdWJsaXNoZWREb2NzLnB1c2goZG9jKTtcblxuICAgICAgaWYgKGJhdGNoQ291bnQgPj0gNDk4KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IGJhdGNoLmNvbW1pdCgpO1xuICAgIGNvbnNvbGUubG9nKGBwdWJsaXNoZWQgJHtwdWJsaXNoZWREb2NzLmxlbmd0aH0gZG9jcyFgKTtcbiAgICByZXR1cm4gcHVibGlzaGVkRG9jcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0cmFuc2xhdGlvbnMgc2F2ZWQgaW4gdGhlIHRyYW5zbGF0aW9ucyBjb2xsZWN0aW9uLCBvcHRpb25hbGx5XG4gICAqIGZpbHRlcmVkIGJ5IHRhZy5cbiAgICpcbiAgICogUmV0dXJucyBhIG1hcCBsaWtlOlxuICAgKiBgYGBcbiAgICoge1xuICAgKiAgIFwiPGhhc2g+XCI6IHtcInNvdXJjZVwiOiBcIkhlbGxvXCIsIFwiZXNcIjogXCJIb2xhXCIsIFwiZnJcIjogXCJCb25qb3VyXCJ9LFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgbG9hZFRyYW5zbGF0aW9ucyhcbiAgICBvcHRpb25zPzogTG9hZFRyYW5zbGF0aW9uc09wdGlvbnNcbiAgKTogUHJvbWlzZTxUcmFuc2xhdGlvbnNNYXA+IHtcbiAgICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vVHJhbnNsYXRpb25zYDtcbiAgICBsZXQgcXVlcnk6IFF1ZXJ5ID0gdGhpcy5kYi5jb2xsZWN0aW9uKGRiUGF0aCk7XG4gICAgaWYgKG9wdGlvbnM/LnRhZ3MpIHtcbiAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoJ3RhZ3MnLCAnYXJyYXktY29udGFpbnMtYW55Jywgb3B0aW9ucy50YWdzKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVNuYXBzaG90ID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zTWFwOiBUcmFuc2xhdGlvbnNNYXAgPSB7fTtcbiAgICBxdWVyeVNuYXBzaG90LmZvckVhY2goKGRvYykgPT4ge1xuICAgICAgY29uc3QgaGFzaCA9IGRvYy5pZDtcbiAgICAgIHRyYW5zbGF0aW9uc01hcFtoYXNoXSA9IGRvYy5kYXRhKCkgYXMgVHJhbnNsYXRpb247XG4gICAgfSk7XG4gICAgcmV0dXJuIHRyYW5zbGF0aW9uc01hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIG1hcCBvZiB0cmFuc2xhdGlvbnMsIGUuZy46XG4gICAqIGBgYFxuICAgKiBhd2FpdCBjbGllbnQuc2F2ZVRyYW5zbGF0aW9ucyh7XG4gICAqICAgXCJIZWxsb1wiOiB7XCJlc1wiOiBcIkhvbGFcIiwgXCJmclwiOiBcIkJvbmpvdXJcIn0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHNhdmVUcmFuc2xhdGlvbnMoXG4gICAgdHJhbnNsYXRpb25zOiB7XG4gICAgICBbc291cmNlOiBzdHJpbmddOiB7W2xvY2FsZTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICB9LFxuICAgIHRhZ3M/OiBzdHJpbmdbXVxuICApIHtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnNQYXRoID0gYFByb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L1RyYW5zbGF0aW9uc2A7XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLmRiLmJhdGNoKCk7XG4gICAgbGV0IGJhdGNoQ291bnQgPSAwO1xuICAgIE9iamVjdC5lbnRyaWVzKHRyYW5zbGF0aW9ucykuZm9yRWFjaCgoW3NvdXJjZSwgc291cmNlVHJhbnNsYXRpb25zXSkgPT4ge1xuICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0VHJhbnNsYXRpb25LZXkoc291cmNlKTtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uUmVmID0gdGhpcy5kYi5kb2MoYCR7dHJhbnNsYXRpb25zUGF0aH0vJHtoYXNofWApO1xuICAgICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgICAuLi5zb3VyY2VUcmFuc2xhdGlvbnMsXG4gICAgICAgIHNvdXJjZTogdGhpcy5ub3JtYWxpemVTdHJpbmcoc291cmNlKSxcbiAgICAgIH07XG4gICAgICBpZiAodGFncykge1xuICAgICAgICBkYXRhLnRhZ3MgPSB0YWdzO1xuICAgICAgfVxuICAgICAgYmF0Y2gudXBkYXRlKHRyYW5zbGF0aW9uUmVmLCBkYXRhKTtcbiAgICAgIGJhdGNoQ291bnQgKz0gMTtcbiAgICB9KTtcbiAgICBpZiAoYmF0Y2hDb3VudCA+IDUwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cCB0byA1MDAgdHJhbnNsYXRpb25zIGNhbiBiZSBzYXZlZCBhdCBhIHRpbWUuJyk7XG4gICAgfVxuICAgIGF3YWl0IGJhdGNoLmNvbW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFwia2V5XCIgdXNlZCBmb3IgYSB0cmFuc2xhdGlvbiBhcyBzdG9yZWQgaW4gdGhlIGRiLiBUcmFuc2xhdGlvbnNcbiAgICogYXJlIHN0b3JlZCB1bmRlciBgUHJvamVjdHMvPHByb2plY3QgaWQ+L1RyYW5zbGF0aW9ucy88c2hhMSBoYXNoPmAuXG4gICAqL1xuICBnZXRUcmFuc2xhdGlvbktleShzb3VyY2U6IHN0cmluZykge1xuICAgIGNvbnN0IHNoYTEgPSBjcnlwdG9cbiAgICAgIC5jcmVhdGVIYXNoKCdzaGExJylcbiAgICAgIC51cGRhdGUodGhpcy5ub3JtYWxpemVTdHJpbmcoc291cmNlKSlcbiAgICAgIC5kaWdlc3QoJ2hleCcpO1xuICAgIHJldHVybiBzaGExO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyBhIHN0cmluZyB0aGF0J3MgdXNlZCBmb3IgdHJhbnNsYXRpb25zLiBQZXJmb3JtcyB0aGUgZm9sbG93aW5nOlxuICAgKiAtIFJlbW92ZXMgYW55IGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICAgKiAtIFJlbW92ZXMgc3BhY2VzIGF0IHRoZSBlbmQgb2YgYW55IGxpbmVcbiAgICovXG4gIG5vcm1hbGl6ZVN0cmluZyhzdHI6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmVzID0gU3RyaW5nKHN0cilcbiAgICAgIC50cmltKClcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUudHJpbUVuZCgpKTtcbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdHJhbnNsYXRpb25zIGZvciBhIHBhcnRpY3VsYXIgbG9jYWxlLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgbWFwIGxpa2U6XG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAgXCJIZWxsb1wiOiBcIkJvbmpvdXJcIixcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGxvYWRUcmFuc2xhdGlvbnNGb3JMb2NhbGUoXG4gICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IExvYWRUcmFuc2xhdGlvbnNPcHRpb25zXG4gICk6IFByb21pc2U8TG9jYWxlVHJhbnNsYXRpb25zPiB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zTWFwID0gYXdhaXQgdGhpcy5sb2FkVHJhbnNsYXRpb25zKG9wdGlvbnMpO1xuICAgIHJldHVybiB0cmFuc2xhdGlvbnNGb3JMb2NhbGUodHJhbnNsYXRpb25zTWFwLCBsb2NhbGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZzogUm9vdENvbmZpZyk6IENNU1BsdWdpbiB7XG4gIGNvbnN0IHBsdWdpbnM6IFBsdWdpbltdID0gcm9vdENvbmZpZy5wbHVnaW5zIHx8IFtdO1xuICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLmZpbmQoKHBsdWdpbikgPT4gcGx1Z2luLm5hbWUgPT09ICdyb290LWNtcycpO1xuICBpZiAoIXBsdWdpbikge1xuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgcm9vdC1jbXMgcGx1Z2luIGNvbmZpZyBpbiByb290LmNvbmZpZy50cycpO1xuICB9XG4gIHJldHVybiBwbHVnaW4gYXMgQ01TUGx1Z2luO1xufVxuXG4vKipcbiAqIFdhbGtzIHRoZSBkYXRhIHRyZWUgYW5kIGNvbnZlcnRzIGFueSBUaW1lc3RhbXAgb2JqZWN0cyB0byBtaWxsaXMgYW5kIGFueVxuICogX2FycmF5IG1hcHMgdG8gbm9ybWFsIGFycmF5cy5cbiAqXG4gKiBFLmcuOlxuICpcbiAqIG5vcm1hbGl6ZURhdGEoe1xuICogICBzeXM6IHttb2RpZmllZEF0OiBUaW1lc3RhbXAoMTIzKX0sXG4gKiAgIGZpZWxkczoge1xuICogICAgIF9hcnJheTogWydhc2RmJ10sXG4gKiAgICAgYXNkZjoge3RpdGxlOiAnaGVsbG8nfVxuICogICB9XG4gKiB9KVxuICogLy8gPT4ge3N5czoge21vZGlmaWVkQXQ6IDEyM30sIGZpZWxkczoge2ZvbzogW3t0aXRsZTogJ2hlbGxvJ31dfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubWFyc2hhbERhdGEoZGF0YTogYW55KTogYW55IHtcbiAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgIGNvbnN0IHZhbCA9IGRhdGFba2V5XTtcbiAgICBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgaWYgKHZhbC50b01pbGxpcykge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbC50b01pbGxpcygpO1xuICAgICAgfSBlbHNlIGlmIChPYmplY3QuaGFzT3duKHZhbCwgJ19hcnJheScpICYmIEFycmF5LmlzQXJyYXkodmFsLl9hcnJheSkpIHtcbiAgICAgICAgY29uc3QgYXJyID0gdmFsLl9hcnJheS5tYXAoKGs6IHN0cmluZykgPT4gdW5tYXJzaGFsRGF0YSh2YWxba10gfHwge30pKTtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBhcnI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IHVubWFyc2hhbERhdGEodmFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYHVubWFyc2hhbERhdGEoKWAgaW5zdGVhZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEYXRhKGRhdGE6IGFueSk6IGFueSB7XG4gIHJldHVybiB1bm1hcnNoYWxEYXRhKGRhdGEpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFycmF5T2JqZWN0IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBfYXJyYXk6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYW4gYXJyYXkgaW50byBhbiBgQXJyYXlPYmplY3RgLCBlLmcuOlxuICpcbiAqIGBgYFxuICogbWFyc2hhbEFycmF5KFsxLCAyLCAzXSlcbiAqIC8vID0+IHthOiAxLCBiOiAyLCBjOiAzLCBfYXJyYXk6IFsnYScsICdiJywgJ2MnXX1cbiAqIGBgYFxuICpcbiAqIFRoaXMgZGF0YWJhc2Ugc3RvcmFnZSBtZXRob2QgbWFrZXMgaXQgZWFzaWVyIHRvIHVwZGF0ZSBhIHNpbmdsZSBmaWVsZCBpbiBhXG4gKiBkZWVwbHkgbmVzdGVkIGFycmF5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcnNoYWxBcnJheShhcnI6IGFueVtdKTogQXJyYXlPYmplY3Qge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIHJldHVybiBhcnI7XG4gIH1cbiAgY29uc3QgYXJyT2JqZWN0OiBBcnJheU9iamVjdCA9IHtfYXJyYXk6IFtdfTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgIGNvbnN0IGtleSA9IHJhbmRTdHJpbmcoNik7XG4gICAgYXJyT2JqZWN0W2tleV0gPSBpdGVtO1xuICAgIGFyck9iamVjdC5fYXJyYXkucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBhcnJPYmplY3Q7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYEFycmF5T2JqZWN0YCB0byBhIG5vcm1hbCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubWFyc2hhbEFycmF5KGFyck9iamVjdDogQXJyYXlPYmplY3QpOiBhbnlbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnJPYmplY3Q/Ll9hcnJheSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgYXJyID0gYXJyT2JqZWN0Ll9hcnJheS5tYXAoKGs6IHN0cmluZykgPT4gYXJyT2JqZWN0W2tdKTtcbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoZGF0YTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmFuZFN0cmluZyhsZW46IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBjb25zdCBjaGFycyA9XG4gICAgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IHJhbmQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpO1xuICAgIHJlc3VsdC5wdXNoKGNoYXJzLmNoYXJBdChyYW5kKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHRyYW5zbGF0aW9ucyBtYXAgZnJvbSBgbG9hZFRyYW5zbGF0aW9ucygpYCB0byBhIG1hcCBvZiBzb3VyY2UgdG9cbiAqIHRyYW5zbGF0ZWQgc3RyaW5nIGZvciBhIHBhcnRpY3VsYXIgbG9jYWxlLlxuICpcbiAqIFJldHVybnMgYSBtYXAgbGlrZTpcbiAqIGBgYFxuICoge1xuICogICBcIkhlbGxvXCI6IFwiQm9uam91clwiLFxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGlvbnNGb3JMb2NhbGUoXG4gIHRyYW5zbGF0aW9uc01hcDogVHJhbnNsYXRpb25zTWFwLFxuICBsb2NhbGU6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGxvY2FsZVRyYW5zbGF0aW9uczogTG9jYWxlVHJhbnNsYXRpb25zID0ge307XG4gIE9iamVjdC52YWx1ZXModHJhbnNsYXRpb25zTWFwKS5mb3JFYWNoKChzdHJpbmcpID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBzdHJpbmcuc291cmNlO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gc3RyaW5nW2xvY2FsZV0gfHwgc3RyaW5nLmVuIHx8IHN0cmluZy5zb3VyY2U7XG4gICAgbG9jYWxlVHJhbnNsYXRpb25zW3NvdXJjZV0gPSB0cmFuc2xhdGlvbjtcbiAgfSk7XG4gIHJldHVybiBsb2NhbGVUcmFuc2xhdGlvbnM7XG59XG4iLCAiLyoqIEBkZXByZWNhdGVkIFVzZSBjbGllbnQudHMgaW5zdGVhZC4gKi9cblxuaW1wb3J0IHtSb290Q29uZmlnfSBmcm9tICdAYmxpbmtrL3Jvb3QnO1xuaW1wb3J0IHtcbiAgRmllbGRWYWx1ZSxcbiAgUXVlcnksXG4gIFRpbWVzdGFtcCxcbiAgZ2V0RmlyZXN0b3JlLFxufSBmcm9tICdmaXJlYmFzZS1hZG1pbi9maXJlc3RvcmUnO1xuaW1wb3J0IHtcbiAgTG9hZFRyYW5zbGF0aW9uc09wdGlvbnMsXG4gIExvY2FsZVRyYW5zbGF0aW9ucyxcbiAgVHJhbnNsYXRpb24sXG4gIFRyYW5zbGF0aW9uc01hcCxcbiAgZ2V0Q21zUGx1Z2luLFxuICB0cmFuc2xhdGlvbnNGb3JMb2NhbGUsXG4gIHVubWFyc2hhbERhdGEsXG59IGZyb20gJy4vY2xpZW50LmpzJztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBkb2MgZnJvbSBSb290LmpzIENNUy5cbiAqIEBkZXByZWNhdGVkIFVzZSBSb290Q01TQ2xpZW50LmdldERvYygpIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREb2M8VD4oXG4gIHJvb3RDb25maWc6IFJvb3RDb25maWcsXG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICBzbHVnOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICBtb2RlOiAnZHJhZnQnIHwgJ3B1Ymxpc2hlZCc7XG4gIH1cbik6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgY29uc3QgY21zUGx1Z2luID0gZ2V0Q21zUGx1Z2luKHJvb3RDb25maWcpO1xuICBjb25zdCBjbXNQbHVnaW5PcHRpb25zID0gY21zUGx1Z2luLmdldENvbmZpZygpO1xuICBjb25zdCBwcm9qZWN0SWQgPSBjbXNQbHVnaW5PcHRpb25zLmlkIHx8ICdkZWZhdWx0JztcbiAgY29uc3QgbW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgY29uc3QgbW9kZUNvbGxlY3Rpb24gPSBtb2RlID09PSAnZHJhZnQnID8gJ0RyYWZ0cycgOiAnUHVibGlzaGVkJztcbiAgY29uc3QgYXBwID0gY21zUGx1Z2luLmdldEZpcmViYXNlQXBwKCk7XG4gIGNvbnN0IGRiID0gZ2V0RmlyZXN0b3JlKGFwcCk7XG4gIC8vIFNsdWdzIHdpdGggc2xhc2hlcyBhcmUgZW5jb2RlZCBhcyBgLS1gIGluIHRoZSBEQi5cbiAgc2x1ZyA9IHNsdWcucmVwbGFjZUFsbCgnLycsICctLScpO1xuICBjb25zdCBkYlBhdGggPSBgUHJvamVjdHMvJHtwcm9qZWN0SWR9L0NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbklkfS8ke21vZGVDb2xsZWN0aW9ufS8ke3NsdWd9YDtcbiAgY29uc3QgZG9jUmVmID0gZGIuZG9jKGRiUGF0aCk7XG4gIGNvbnN0IGRvYyA9IGF3YWl0IGRvY1JlZi5nZXQoKTtcbiAgaWYgKGRvYy5leGlzdHMpIHtcbiAgICBjb25zdCBkYXRhID0gZG9jLmRhdGEoKTtcbiAgICByZXR1cm4gdW5tYXJzaGFsRGF0YShkYXRhKSBhcyBUO1xuICB9XG4gIGNvbnNvbGUubG9nKGBkb2Mgbm90IGZvdW5kOiAke2RiUGF0aH1gKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTGlzdHMgZG9jcyBmcm9tIGEgUm9vdC5qcyBDTVMgY29sbGVjdGlvbi5cbiAqIEBkZXByZWNhdGVkIFVzZSBSb290Q01TQ2xpZW50Lmxpc3REb2NzKCkgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3REb2NzPFQ+KFxuICByb290Q29uZmlnOiBSb290Q29uZmlnLFxuICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgb3B0aW9uczoge1xuICAgIG1vZGU6ICdkcmFmdCcgfCAncHVibGlzaGVkJztcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgb3JkZXJCeT86IHN0cmluZztcbiAgICBvcmRlckJ5RGlyZWN0aW9uPzogJ2FzYycgfCAnZGVzYyc7XG4gICAgcXVlcnk/OiAocXVlcnk6IFF1ZXJ5KSA9PiBRdWVyeTtcbiAgfVxuKTogUHJvbWlzZTx7ZG9jczogVFtdfT4ge1xuICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gIGNvbnN0IGNtc1BsdWdpbk9wdGlvbnMgPSBjbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuaWQgfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICBjb25zdCBhcHAgPSBjbXNQbHVnaW4uZ2V0RmlyZWJhc2VBcHAoKTtcbiAgY29uc3QgZGIgPSBnZXRGaXJlc3RvcmUoYXBwKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICBsZXQgcXVlcnk6IFF1ZXJ5ID0gZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgIHF1ZXJ5ID0gcXVlcnkubGltaXQob3B0aW9ucy5saW1pdCk7XG4gIH1cbiAgaWYgKG9wdGlvbnMub2Zmc2V0KSB7XG4gICAgcXVlcnkgPSBxdWVyeS5vZmZzZXQob3B0aW9ucy5vZmZzZXQpO1xuICB9XG4gIGlmIChvcHRpb25zLm9yZGVyQnkpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkob3B0aW9ucy5vcmRlckJ5LCBvcHRpb25zLm9yZGVyQnlEaXJlY3Rpb24pO1xuICB9XG4gIGlmIChvcHRpb25zLnF1ZXJ5KSB7XG4gICAgcXVlcnkgPSBvcHRpb25zLnF1ZXJ5KHF1ZXJ5KTtcbiAgfVxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gIGNvbnN0IGRvY3M6IFRbXSA9IFtdO1xuICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgIGNvbnN0IGRvYyA9IHVubWFyc2hhbERhdGEocmVzdWx0LmRhdGEoKSkgYXMgVDtcbiAgICBkb2NzLnB1c2goZG9jKTtcbiAgfSk7XG4gIHJldHVybiB7ZG9jc307XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRvY3MgaW4gYSBSb290LmpzIENNUyBjb2xsZWN0aW9uLlxuICogQGRlcHJlY2F0ZWQgVXNlIFJvb3RDTVNDbGllbnQuZ2V0RG9jc0NvdW50KCkgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG51bURvY3MoXG4gIHJvb3RDb25maWc6IFJvb3RDb25maWcsXG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgbW9kZTogJ2RyYWZ0JyB8ICdwdWJsaXNoZWQnO1xuICAgIHF1ZXJ5PzogKHF1ZXJ5OiBRdWVyeSkgPT4gUXVlcnk7XG4gIH1cbikge1xuICBjb25zdCBjbXNQbHVnaW4gPSBnZXRDbXNQbHVnaW4ocm9vdENvbmZpZyk7XG4gIGNvbnN0IGNtc1BsdWdpbk9wdGlvbnMgPSBjbXNQbHVnaW4uZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHByb2plY3RJZCA9IGNtc1BsdWdpbk9wdGlvbnMuaWQgfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBtb2RlID0gb3B0aW9ucy5tb2RlO1xuICBjb25zdCBtb2RlQ29sbGVjdGlvbiA9IG1vZGUgPT09ICdkcmFmdCcgPyAnRHJhZnRzJyA6ICdQdWJsaXNoZWQnO1xuICBjb25zdCBhcHAgPSBjbXNQbHVnaW4uZ2V0RmlyZWJhc2VBcHAoKTtcbiAgY29uc3QgZGIgPSBnZXRGaXJlc3RvcmUoYXBwKTtcbiAgY29uc3QgZGJQYXRoID0gYFByb2plY3RzLyR7cHJvamVjdElkfS9Db2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25JZH0vJHttb2RlQ29sbGVjdGlvbn1gO1xuICBsZXQgcXVlcnk6IFF1ZXJ5ID0gZGIuY29sbGVjdGlvbihkYlBhdGgpO1xuICBpZiAob3B0aW9ucy5xdWVyeSkge1xuICAgIHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeShxdWVyeSk7XG4gIH1cbiAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHF1ZXJ5LmNvdW50KCkuZ2V0KCk7XG4gIGNvbnN0IGNvdW50ID0gcmVzdWx0cy5kYXRhKCkuY291bnQ7XG4gIHJldHVybiBjb3VudDtcbn1cblxuLyoqXG4gKiBQdWJsaXNoZXMgc2NoZWR1bGVkIGRvY3MuXG4gKiBAZGVwcmVjYXRlZCBVc2UgUm9vdENNU0NsaWVudC5wdWJsaXNoU2NoZWR1bGVkRG9jcygpIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoU2NoZWR1bGVkRG9jcyhyb290Q29uZmlnOiBSb290Q29uZmlnKSB7XG4gIGNvbnN0IGNtc1BsdWdpbiA9IGdldENtc1BsdWdpbihyb290Q29uZmlnKTtcbiAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IGNtc1BsdWdpbi5nZXRDb25maWcoKTtcbiAgY29uc3QgcHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gIGNvbnN0IGFwcCA9IGNtc1BsdWdpbi5nZXRGaXJlYmFzZUFwcCgpO1xuICBjb25zdCBkYiA9IGdldEZpcmVzdG9yZShhcHApO1xuXG4gIGNvbnN0IHByb2plY3RDb2xsZWN0aW9uc1BhdGggPSBgUHJvamVjdHMvJHtwcm9qZWN0SWR9L0NvbGxlY3Rpb25zYDtcbiAgY29uc3Qgbm93ID0gTWF0aC5jZWlsKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcblxuICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGRiLmNvbGxlY3Rpb25Hcm91cCgnU2NoZWR1bGVkJykuZ2V0KCk7XG4gIGNvbnN0IGRvY3MgPSBzbmFwc2hvdC5kb2NzXG4gICAgLmZpbHRlcigoZCkgPT4ge1xuICAgICAgLy8gRmlsdGVyIGRvY3MgYnkgcHJvamVjdC5cbiAgICAgIGlmICghZC5yZWYucGF0aC5zdGFydHNXaXRoKHByb2plY3RDb2xsZWN0aW9uc1BhdGgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEZpbHRlciBkb2NzIHdoZXJlIHNjaGVkdWxlZEF0IGlzIGluIHRoZSBwYXN0LlxuICAgICAgLy8gTk9URShzdGV2ZW5sZSk6IHRoZSBmaWx0ZXJpbmcgaXMgZG9uZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVzaW5nIGEgcXVlcnlcbiAgICAgIC8vIHRvIGF2b2lkIGhhdmluZyB0byBjcmVhdGUgYW4gaW5kZXggaW4gZmlyZXN0b3JlLlxuICAgICAgY29uc3QgZGF0YSA9IGQuZGF0YSgpIHx8IHt9O1xuICAgICAgY29uc3Qgc2NoZWR1bGVkQXQ6IFRpbWVzdGFtcCB8IHVuZGVmaW5lZCA9IGRhdGEuc3lzPy5zY2hlZHVsZWRBdDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNjaGVkdWxlZEF0ICYmIHNjaGVkdWxlZEF0LnRvTWlsbGlzICYmIHNjaGVkdWxlZEF0LnRvTWlsbGlzKCkgPD0gbm93XG4gICAgICApO1xuICAgIH0pXG4gICAgLm1hcCgoZCkgPT4ge1xuICAgICAgY29uc3QgZGJQYXRoID0gZC5yZWYucGF0aDtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gZGJQYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBzbHVnID0gc2VnbWVudHMuYXQoLTEpO1xuICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHNlZ21lbnRzLmF0KC0zKTtcbiAgICAgIGNvbnN0IGlkID0gYCR7Y29sbGVjdGlvbn0vJHtzbHVnfWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBkLmRhdGEoKSxcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIHNsdWcsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gIGlmIChkb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIEVhY2ggdHJhbnNhY3Rpb24gb3IgYmF0Y2ggY2FuIHdyaXRlIGEgbWF4IG9mIDUwMCBvcHMuXG4gIC8vIGh0dHBzOi8vZmlyZWJhc2UuZ29vZ2xlLmNvbS9kb2NzL2ZpcmVzdG9yZS9tYW5hZ2UtZGF0YS90cmFuc2FjdGlvbnNcbiAgbGV0IGJhdGNoQ291bnQgPSAwO1xuICBjb25zdCBiYXRjaCA9IGRiLmJhdGNoKCk7XG4gIGNvbnN0IHB1Ymxpc2hlZERvY3M6IGFueVtdID0gW107XG4gIGZvciAoY29uc3QgZG9jIG9mIGRvY3MpIHtcbiAgICBjb25zdCB7aWQsIGNvbGxlY3Rpb24sIHNsdWcsIGRhdGF9ID0gZG9jO1xuICAgIGNvbnN0IGRyYWZ0UmVmID0gZGIuZG9jKFxuICAgICAgYCR7cHJvamVjdENvbGxlY3Rpb25zUGF0aH0vJHtjb2xsZWN0aW9ufS9EcmFmdHMvJHtzbHVnfWBcbiAgICApO1xuICAgIGNvbnN0IHNjaGVkdWxlZFJlZiA9IGRiLmRvYyhcbiAgICAgIGAke3Byb2plY3RDb2xsZWN0aW9uc1BhdGh9LyR7Y29sbGVjdGlvbn0vU2NoZWR1bGVkLyR7c2x1Z31gXG4gICAgKTtcbiAgICBjb25zdCBwdWJsaXNoZWRSZWYgPSBkYi5kb2MoXG4gICAgICBgJHtwcm9qZWN0Q29sbGVjdGlvbnNQYXRofS8ke2NvbGxlY3Rpb259L1B1Ymxpc2hlZC8ke3NsdWd9YFxuICAgICk7XG4gICAgY29uc3Qge3NjaGVkdWxlZEF0LCBzY2hlZHVsZWRCeSwgLi4uc3lzfSA9IGRhdGEuc3lzIHx8IHt9O1xuXG4gICAgLy8gT25seSB1cGRhdGUgYGZpcnN0UHVibGlzaGVkYCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuXG4gICAgY29uc3QgZmlyc3RQdWJsaXNoZWRBdCA9IHN5cy5maXJzdFB1Ymxpc2hlZEF0ID8/IHNjaGVkdWxlZEF0O1xuICAgIGNvbnN0IGZpcnN0UHVibGlzaGVkQnkgPSBzeXMuZmlyc3RQdWJsaXNoZWRCeSA/PyAoc2NoZWR1bGVkQnkgfHwgJycpO1xuXG4gICAgLy8gU2F2ZSBwdWJsaXNoZWQgZG9jLlxuICAgIGJhdGNoLnNldChwdWJsaXNoZWRSZWYsIHtcbiAgICAgIGlkLFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIHNsdWcsXG4gICAgICBmaWVsZHM6IGRhdGEuZmllbGRzIHx8IHt9LFxuICAgICAgc3lzOiB7XG4gICAgICAgIC4uLnN5cyxcbiAgICAgICAgZmlyc3RQdWJsaXNoZWRBdDogZmlyc3RQdWJsaXNoZWRBdCxcbiAgICAgICAgZmlyc3RQdWJsaXNoZWRCeTogZmlyc3RQdWJsaXNoZWRCeSxcbiAgICAgICAgcHVibGlzaGVkQXQ6IEZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgIHB1Ymxpc2hlZEJ5OiBzY2hlZHVsZWRCeSB8fCAnJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgLy8gUmVtb3ZlIHB1Ymxpc2hlZCBkb2MuXG4gICAgYmF0Y2guZGVsZXRlKHNjaGVkdWxlZFJlZik7XG4gICAgYmF0Y2hDb3VudCArPSAxO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBkcmFmdCBkb2MgdG8gcmVtb3ZlIGBzY2hlZHVsZWRBdGAgYW5kIGBzY2hlZHVsZWRCeWAgZmllbGRzXG4gICAgLy8gYW5kIHVwZGF0ZSB0aGUgYHB1Ymxpc2hlZEF0YCBhbmQgYHB1Ymxpc2hlZEJ5YCBmaWVsZHMuXG4gICAgYmF0Y2gudXBkYXRlKGRyYWZ0UmVmLCB7XG4gICAgICAnc3lzLnNjaGVkdWxlZEF0JzogRmllbGRWYWx1ZS5kZWxldGUoKSxcbiAgICAgICdzeXMuc2NoZWR1bGVkQnknOiBGaWVsZFZhbHVlLmRlbGV0ZSgpLFxuICAgICAgJ3N5cy5maXJzdFB1Ymxpc2hlZEF0JzogZmlyc3RQdWJsaXNoZWRBdCxcbiAgICAgICdzeXMuZmlyc3RQdWJsaXNoZWRCeSc6IGZpcnN0UHVibGlzaGVkQnksXG4gICAgICAnc3lzLnB1Ymxpc2hlZEF0JzogRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICdzeXMucHVibGlzaGVkQnknOiBzY2hlZHVsZWRCeSB8fCAnJyxcbiAgICB9KTtcbiAgICBiYXRjaENvdW50ICs9IDE7XG5cbiAgICBwdWJsaXNoZWREb2NzLnB1c2goZG9jKTtcblxuICAgIGlmIChiYXRjaENvdW50ID49IDQ5OCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgYmF0Y2guY29tbWl0KCk7XG4gIGNvbnNvbGUubG9nKGBwdWJsaXNoZWQgJHtwdWJsaXNoZWREb2NzLmxlbmd0aH0gZG9jcyFgKTtcbiAgcmV0dXJuIHB1Ymxpc2hlZERvY3M7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBSb290Q01TQ2xpZW50LmxvYWRUcmFuc2xhdGlvbnMoKWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkVHJhbnNsYXRpb25zKFxuICByb290Q29uZmlnOiBSb290Q29uZmlnLFxuICBvcHRpb25zPzogTG9hZFRyYW5zbGF0aW9uc09wdGlvbnNcbik6IFByb21pc2U8VHJhbnNsYXRpb25zTWFwPiB7XG4gIGNvbnN0IGNtc1BsdWdpbiA9IGdldENtc1BsdWdpbihyb290Q29uZmlnKTtcbiAgY29uc3QgY21zUGx1Z2luT3B0aW9ucyA9IGNtc1BsdWdpbi5nZXRDb25maWcoKTtcbiAgY29uc3QgcHJvamVjdElkID0gY21zUGx1Z2luT3B0aW9ucy5pZCB8fCAnZGVmYXVsdCc7XG4gIGNvbnN0IGFwcCA9IGNtc1BsdWdpbi5nZXRGaXJlYmFzZUFwcCgpO1xuICBjb25zdCBkYiA9IGdldEZpcmVzdG9yZShhcHApO1xuXG4gIGNvbnN0IGRiUGF0aCA9IGBQcm9qZWN0cy8ke3Byb2plY3RJZH0vVHJhbnNsYXRpb25zYDtcbiAgbGV0IHF1ZXJ5OiBRdWVyeSA9IGRiLmNvbGxlY3Rpb24oZGJQYXRoKTtcbiAgaWYgKG9wdGlvbnM/LnRhZ3MpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKCd0YWdzJywgJ2FycmF5LWNvbnRhaW5zLWFueScsIG9wdGlvbnMudGFncyk7XG4gIH1cblxuICBjb25zdCBxdWVyeVNuYXBzaG90ID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gIGNvbnN0IHRyYW5zbGF0aW9uc01hcDogVHJhbnNsYXRpb25zTWFwID0ge307XG4gIHF1ZXJ5U25hcHNob3QuZm9yRWFjaCgoZG9jKSA9PiB7XG4gICAgY29uc3QgaGFzaCA9IGRvYy5pZDtcbiAgICB0cmFuc2xhdGlvbnNNYXBbaGFzaF0gPSBkb2MuZGF0YSgpIGFzIFRyYW5zbGF0aW9uO1xuICB9KTtcbiAgcmV0dXJuIHRyYW5zbGF0aW9uc01hcDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYFJvb3RDTVNDbGllbnQubG9hZFRyYW5zbGF0aW9uc0ZvckxvY2FsZSgpYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRUcmFuc2xhdGlvbnNGb3JMb2NhbGUoXG4gIHJvb3RDb25maWc6IFJvb3RDb25maWcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBvcHRpb25zPzogTG9hZFRyYW5zbGF0aW9uc09wdGlvbnNcbik6IFByb21pc2U8TG9jYWxlVHJhbnNsYXRpb25zPiB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uc01hcCA9IGF3YWl0IGxvYWRUcmFuc2xhdGlvbnMocm9vdENvbmZpZywgb3B0aW9ucyk7XG4gIHJldHVybiB0cmFuc2xhdGlvbnNGb3JMb2NhbGUodHJhbnNsYXRpb25zTWFwLCBsb2NhbGUpO1xufVxuIiwgImltcG9ydCB7RnVuY3Rpb25hbENvbXBvbmVudH0gZnJvbSAncHJlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25GaWVsZFByb3BzIHtcbiAgdHlwZTogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGhlbHA/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkZWZhdWx0PzogYW55O1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBkZXByZWNhdGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3RyaW5nRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnc3RyaW5nJztcbiAgZGVmYXVsdD86IHN0cmluZztcbiAgdHJhbnNsYXRlPzogYm9vbGVhbjtcbiAgdmFyaWFudD86ICdpbnB1dCcgfCAndGV4dGFyZWEnO1xuICAvKiogRm9yIHRleHRhcmVhIHZhcmlhbnQsIHRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIG9mIHRleHQgdG8gc2hvdy4gKi9cbiAgbWF4Um93cz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmcoZmllbGQ6IE9taXQ8U3RyaW5nRmllbGQsICd0eXBlJz4pOiBTdHJpbmdGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdzdHJpbmcnfTtcbn1cblxuZXhwb3J0IHR5cGUgTnVtYmVyRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnbnVtYmVyJztcbiAgZGVmYXVsdD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXIoZmllbGQ6IE9taXQ8TnVtYmVyRmllbGQsICd0eXBlJz4pOiBOdW1iZXJGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdudW1iZXInfTtcbn1cblxuZXhwb3J0IHR5cGUgRGF0ZUZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ2RhdGUnO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGUoZmllbGQ6IE9taXQ8RGF0ZUZpZWxkLCAndHlwZSc+KTogRGF0ZUZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ2RhdGUnfTtcbn1cblxuZXhwb3J0IHR5cGUgRGF0ZVRpbWVGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdkYXRldGltZSc7XG4gIGRlZmF1bHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZXRpbWUoZmllbGQ6IE9taXQ8RGF0ZVRpbWVGaWVsZCwgJ3R5cGUnPik6IERhdGVUaW1lRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnZGF0ZXRpbWUnfTtcbn1cblxuZXhwb3J0IHR5cGUgQm9vbGVhbkZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ2Jvb2xlYW4nO1xuICBkZWZhdWx0PzogYm9vbGVhbjtcbiAgY2hlY2tib3hMYWJlbD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuKGZpZWxkOiBPbWl0PEJvb2xlYW5GaWVsZCwgJ3R5cGUnPik6IEJvb2xlYW5GaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdib29sZWFuJ307XG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdEZpZWxkID0gQ29tbW9uRmllbGRQcm9wcyAmIHtcbiAgdHlwZTogJ3NlbGVjdCc7XG4gIGRlZmF1bHQ/OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBcnJheTx7dmFsdWU6IHN0cmluZzsgbGFiZWw/OiBzdHJpbmd9PiB8IHN0cmluZ1tdO1xuICB0cmFuc2xhdGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdChmaWVsZDogT21pdDxTZWxlY3RGaWVsZCwgJ3R5cGUnPik6IFNlbGVjdEZpZWxkIHtcbiAgcmV0dXJuIHsuLi5maWVsZCwgdHlwZTogJ3NlbGVjdCd9O1xufVxuXG5leHBvcnQgdHlwZSBNdWx0aVNlbGVjdEZpZWxkID0gT21pdDxTZWxlY3RGaWVsZCwgJ3R5cGUnPiAmIHtcbiAgdHlwZTogJ211bHRpc2VsZWN0JztcbiAgLyoqIFNldCB0byBgdHJ1ZWAgdG8gYWxsb3cgdXNlcnMgdG8gY3JlYXRlIGFyYml0cmFyeSB2YWx1ZXMuICovXG4gIGNyZWF0YWJsZT86IGJvb2xlYW47XG4gIHRyYW5zbGF0ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlzZWxlY3QoXG4gIGZpZWxkOiBPbWl0PE11bHRpU2VsZWN0RmllbGQsICd0eXBlJz5cbik6IE11bHRpU2VsZWN0RmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnbXVsdGlzZWxlY3QnfTtcbn1cblxuZXhwb3J0IHR5cGUgSW1hZ2VGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdpbWFnZSc7XG4gIHRyYW5zbGF0ZT86IGJvb2xlYW47XG4gIC8qKiBMaXN0IG9mIHN1cHBvcnRlZCBleHRzLCBlLmcuIGBbJy5tcDQnXWAuICovXG4gIGV4dHM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZShmaWVsZDogT21pdDxJbWFnZUZpZWxkLCAndHlwZSc+KTogSW1hZ2VGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdpbWFnZSd9O1xufVxuXG5leHBvcnQgdHlwZSBGaWxlRmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnZmlsZSc7XG4gIC8qKiBMaXN0IG9mIHN1cHBvcnRlZCBleHRzLCBlLmcuIGBbJy5tcDQnXWAuICovXG4gIGV4dHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIGZpbmFsIHNlcnZpbmcgZmlsZW5hbWUgd2hlbiBhIHVzZXIgdXBsb2FkcyBhIGZpbGUuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBmaWxlbmFtZSBpcyBoYXNoZWQgZm9yIG9iZnVzY2F0aW9uIHB1cnBvc2VzLlxuICAgKi9cbiAgcHJlc2VydmVGaWxlbmFtZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZmlsZShmaWVsZDogT21pdDxGaWxlRmllbGQsICd0eXBlJz4pOiBGaWxlRmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnZmlsZSd9O1xufVxuXG5leHBvcnQgdHlwZSBPYmplY3RGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdvYmplY3QnO1xuICBmaWVsZHM6IEZpZWxkV2l0aElkW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0KGZpZWxkOiBPbWl0PE9iamVjdEZpZWxkLCAndHlwZSc+KTogT2JqZWN0RmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnb2JqZWN0J307XG59XG5cbmV4cG9ydCB0eXBlIEFycmF5RmllbGQgPSBDb21tb25GaWVsZFByb3BzICYge1xuICB0eXBlOiAnYXJyYXknO1xuICBkZWZhdWx0PzogYW55W107XG4gIC8qKlxuICAgKiBTdHJpbmcgZm9ybWF0IGZvciB0aGUgcHJldmlldyBsaW5lIG9mIGFuIGl0ZW0gaW4gdGhlIGFycmF5LiBQbGFjZWhvbGRlclxuICAgKiB2YWx1ZXMgc2hvdWxkIHVzZSBicmFja2V0cywgZS5nLiBgbXtfaW5kZXg6MDJ9OiB7X3R5cGV9YC5cbiAgICpcbiAgICogTXVsdGlwbGUgdmFsdWVzIGNhbiBiZSBwcm92aWRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgZmlyc3QgcHJldmlldyBsaW5lIHdpdGhcbiAgICogbm8gbWlzc2luZyBwbGFjZWhvbGRlciB2YWx1ZXMgd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBTeXN0ZW0gYWRkZWQgcGxhY2Vob2xkZXIgdmFsdWVzOlxuICAgKlxuICAgKiAtIF9pbmRleDogVGhlIDAtYmFzZWQgaW5kZXguXG4gICAqIC0gX2luZGV4OjAyOiBBIGxlZnQtcGFkZGVkIHZlcnNpb24gb2YgX2luZGV4IHRvIDIgZGlnaXRzLlxuICAgKiAtIF9pbmRleDowMzogQSBsZWZ0LXBhZGRlZCB2ZXJzaW9uIG9mIF9pbmRleCB0byAzIGRpZ2l0cy5cbiAgICogLSBfdHlwZTogRm9yIGFycmF5IG9mIG9uZS1vZiBmaWVsZHMsIHRoZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBmaWVsZC5cbiAgICovXG4gIHByZXZpZXc/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLy8gTk9URShzdGV2ZW5sZSk6IHRoZSBhcnJheSBmaWVsZCBzaG91bGQgb25seSBhY2NlcHQgb2JqZWN0IHZhbHVlcyB0byBrZWVwXG4gIC8vIHRoZSBzY2hlbWFzIGZ1dHVyZS1mcmllbmRseS4gRm9yIGV4YW1wbGUsIGlmIHdlIHdlcmUgdG8gYWNjZXB0IHByaW1hdGl2ZXNcbiAgLy8gKGUuZy4gQXJyYXk8c3RyaW5nPikgYW5kIHRoZSBkZXZlbG9wZXIgZGVjaWRlcyBpbiB0aGUgZnV0dXJlIHRoYXQgdGhleVxuICAvLyBuZWVkIHRvIGFkZCBleHRyYSBmaWVsZHMgdG8gdGhhdCBhcnJheSB0eXBlLCB0aGV5IHdvdWxkIGhhdmUgdG8gY3JlYXRlIGFcbiAgLy8gbmV3IGZpZWxkLCBjcmVhdGUgYSBuZXcgc2NoZW1hIGZpZWxkLCBhbmQgdGhlbiBwZXJmb3JtIGEgZGIgbWlncmF0aW9uIHRvXG4gIC8vIHVwZGF0ZSBmcm9tIHRoZSBvbGQgZmllbGQgdHlwZSB0byB0aGUgbmV3IGZpZWxkIHR5cGUuIEJ1dCBpZiB3ZSBlbmZvcmNlXG4gIC8vIG9iamVjdHMgaGVyZSwgYSBkZXZlbG9wZXIgc2hvdWxkIHRlY2huaWNhbGx5IGJlIGFibGUgdG8gYWRkIGZpZWxkcyB0byB0aGVcbiAgLy8gbmVzdGVkIGZpZWxkIGRlZmluaXRpb24gd2l0aG91dCBicmVha2luZyBhbnkgZXhpc3RpbmcgZGIgZW50cmllcy5cbiAgb2Y6IE9iamVjdExpa2VGaWVsZDtcbiAgLyoqXG4gICAqIExhYmVsIHRvIHVzZSBmb3IgdGhlIFwiYWRkIGl0ZW1cIiBidXR0b24uIERlZmF1bHRzIHRvIGBBZGRgLlxuICAgKi9cbiAgYnV0dG9uTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXkoZmllbGQ6IE9taXQ8QXJyYXlGaWVsZCwgJ3R5cGUnPik6IEFycmF5RmllbGQge1xuICByZXR1cm4gey4uLmZpZWxkLCB0eXBlOiAnYXJyYXknfTtcbn1cblxuZXhwb3J0IHR5cGUgT25lT2ZGaWVsZCA9IENvbW1vbkZpZWxkUHJvcHMgJiB7XG4gIHR5cGU6ICdvbmVvZic7XG4gIHR5cGVzOiBTY2hlbWFbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVPZihmaWVsZDogT21pdDxPbmVPZkZpZWxkLCAndHlwZSc+KTogT25lT2ZGaWVsZCB7XG4gIHJldHVybiB7Li4uZmllbGQsIHR5cGU6ICdvbmVvZid9O1xufVxuXG5leHBvcnQgdHlwZSBGaWVsZCA9XG4gIHwgU3RyaW5nRmllbGRcbiAgfCBOdW1iZXJGaWVsZFxuICB8IERhdGVGaWVsZFxuICB8IERhdGVUaW1lRmllbGRcbiAgfCBCb29sZWFuRmllbGRcbiAgfCBTZWxlY3RGaWVsZFxuICB8IE11bHRpU2VsZWN0RmllbGRcbiAgfCBJbWFnZUZpZWxkXG4gIHwgRmlsZUZpZWxkXG4gIHwgT2JqZWN0RmllbGRcbiAgfCBBcnJheUZpZWxkXG4gIHwgT25lT2ZGaWVsZDtcblxuLyoqXG4gKiBTaW1pbGFyIHRvIHtAbGluayBGaWVsZH0gYnV0IHdpdGggYSByZXF1aXJlZCBgaWRgLlxuICogVE9ETyhzdGV2ZW5sZSk6IGZpeCB0aGlzLlxuICovXG5leHBvcnQgdHlwZSBGaWVsZFdpdGhJZCA9IEZpZWxkO1xuXG5leHBvcnQgdHlwZSBPYmplY3RMaWtlRmllbGQgPSBJbWFnZUZpZWxkIHwgRmlsZUZpZWxkIHwgT2JqZWN0RmllbGQgfCBPbmVPZkZpZWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGZpZWxkczogRmllbGRXaXRoSWRbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVNjaGVtYShzY2hlbWE6IFNjaGVtYSk6IFNjaGVtYSB7XG4gIHJldHVybiBzY2hlbWE7XG59XG5cbi8qKiBEZWZpbmVzIHRoZSBzY2hlbWEgZm9yIGEgY29sbGVjdGlvbiBvciByZXVzYWJsZSBjb21wb25lbnQuICovXG5leHBvcnQgY29uc3QgZGVmaW5lID0gZGVmaW5lU2NoZW1hO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uID0gU2NoZW1hICYge1xuICAvKiogVVJMIHBhdGggd2hlcmUgdGhlIGNvbGxlY3Rpb24gc2VydmVzIGZyb20uICovXG4gIHVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIFVSTCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbmRlciBhIHByZXZpZXcgcGFnZS4gVXNlZCBieSB0aGUgc2lkZS1ieS1zaWRlXG4gICAqIGVkaXRvciB0byByZW5kZXIgaW5zdGFudCBwcmV2aWV3cy4gSWYgYmxhbmssIGRlZmF1bHRzIHRvIHRoZSBgdXJsYCBjb25maWcuXG4gICAqL1xuICBwcmV2aWV3VXJsPzogc3RyaW5nO1xuICAvKiogUGFnZSBjb21wb25lbnQgdG8gcmVuZGVyIHRoZSBjb2xsZWN0aW9uIGZvciBpbnN0YW50IHByZXZpZXdzICovXG4gIENvbXBvbmVudD86IEZ1bmN0aW9uYWxDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBmaWVsZHMgdG8gdXNlIGZvciBkb2N1bWVudCBwcmV2aWV3LiBEZWZhdWx0cyB0byBcInRpdGxlXCIgYW5kXG4gICAqIFwiaW1hZ2VcIi4gVXNlIGRvdCBub3RhdGlvbiBmb3IgbmVzdGVkIGZpZWxkcywgZS5nLiBcIm1ldGEudGl0bGVcIi5cbiAgICovXG4gIHByZXZpZXc/OiB7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgaW1hZ2U/OiBzdHJpbmc7XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29sbGVjdGlvbihjb2xsZWN0aW9uOiBDb2xsZWN0aW9uKTogQ29sbGVjdGlvbiB7XG4gIHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgY29sbGVjdGlvbiA9IGRlZmluZUNvbGxlY3Rpb247XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBQUEsT0FBTyxZQUFZO0FBR25CO0FBQUEsRUFDRTtBQUFBLEVB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QyxHQUFHLE9BQU8sTUFBTSxPQUFNO0FBQ2hDO0FBT08sU0FBUyxPQUFPLE9BQStDO0FBQ3BFLFNBQU8sRUFBQyxHQUFHLE9BQU8sTUFBTSxTQUFRO0FBQ2xDO0FBbUNPLFNBQVMsTUFBTSxPQUE2QztBQUNqRSxTQUFPLEVBQUMsR0FBRyxPQUFPLE1BQU0sUUFBTztBQUNqQztBQU9PLFNBQVMsTUFBTSxPQUE2QztBQUNqRSxTQUFPLEVBQUMsR0FBRyxPQUFPLE1BQU0sUUFBTztBQUNqQztBQThCTyxTQUFTLGFBQWEsUUFBd0I7QUFDbkQsU0FBTztBQUNUO0FBR08sSUFBTSxTQUFTO0FBc0JmLFNBQVMsaUJBQWlCRyxhQUFvQztBQUNuRSxTQUFPQTtBQUNUO0FBRU8sSUFBTSxhQUFhOyIsCiAgIm5hbWVzIjogWyJjb2xsZWN0aW9uIiwgInBsdWdpbiIsICJzdHJpbmciLCAiRmllbGRWYWx1ZSIsICJnZXRGaXJlc3RvcmUiLCAiZ2V0RmlyZXN0b3JlIiwgImNvbGxlY3Rpb24iLCAiRmllbGRWYWx1ZSIsICJjb2xsZWN0aW9uIl0KfQo=
|
package/dist/project.d.ts
CHANGED
|
@@ -68,6 +68,11 @@ type FileField = CommonFieldProps & {
|
|
|
68
68
|
type: 'file';
|
|
69
69
|
/** List of supported exts, e.g. `['.mp4']`. */
|
|
70
70
|
exts?: string[];
|
|
71
|
+
/**
|
|
72
|
+
* Whether to preserve the final serving filename when a user uploads a file.
|
|
73
|
+
* By default, the filename is hashed for obfuscation purposes.
|
|
74
|
+
*/
|
|
75
|
+
preserveFilename?: boolean;
|
|
71
76
|
};
|
|
72
77
|
declare function file(field: Omit<FileField, 'type'>): FileField;
|
|
73
78
|
type ObjectField = CommonFieldProps & {
|
package/dist/ui/ui.css
CHANGED
package/dist/ui/ui.js
CHANGED
|
@@ -41420,7 +41420,7 @@ ${this.customData.serverResponse}`;
|
|
|
41420
41420
|
// package.json
|
|
41421
41421
|
var package_default = {
|
|
41422
41422
|
name: "@blinkk/root-cms",
|
|
41423
|
-
version: "1.0.0-rc.
|
|
41423
|
+
version: "1.0.0-rc.7",
|
|
41424
41424
|
author: "s@blinkk.com",
|
|
41425
41425
|
license: "MIT",
|
|
41426
41426
|
engines: {
|
|
@@ -41524,7 +41524,7 @@ ${this.customData.serverResponse}`;
|
|
|
41524
41524
|
vitest: "^0.34.6"
|
|
41525
41525
|
},
|
|
41526
41526
|
peerDependencies: {
|
|
41527
|
-
"@blinkk/root": "1.0.0-rc.
|
|
41527
|
+
"@blinkk/root": "1.0.0-rc.7",
|
|
41528
41528
|
"firebase-admin": ">=11",
|
|
41529
41529
|
"firebase-functions": ">=4",
|
|
41530
41530
|
preact: ">=10",
|
|
@@ -45303,11 +45303,12 @@ ${content}</tr>
|
|
|
45303
45303
|
const hashHex = hashArray.map((b6) => b6.toString(16).padStart(2, "0")).join("");
|
|
45304
45304
|
return hashHex;
|
|
45305
45305
|
}
|
|
45306
|
-
async function uploadFileToGCS(file) {
|
|
45306
|
+
async function uploadFileToGCS(file, options2) {
|
|
45307
45307
|
const projectId = window.__ROOT_CTX.rootConfig.projectId;
|
|
45308
45308
|
const hashHex = await sha12(file);
|
|
45309
45309
|
const ext = normalizeExt(file.name.split(".").at(-1) || "");
|
|
45310
|
-
const
|
|
45310
|
+
const filename = options2?.preserveFilename ? `${hashHex}/${file.name}` : `${hashHex}.${ext}`;
|
|
45311
|
+
const filePath = `${projectId}/uploads/${filename}`;
|
|
45311
45312
|
const gcsRef = ref(window.firebase.storage, filePath);
|
|
45312
45313
|
await uploadBytes(gcsRef, file);
|
|
45313
45314
|
console.log(`uploaded ${filePath}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blinkk/root-cms",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.7",
|
|
4
4
|
"author": "s@blinkk.com",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {
|
|
@@ -88,10 +88,10 @@
|
|
|
88
88
|
"typescript": "5.2.2",
|
|
89
89
|
"vite": "4.4.11",
|
|
90
90
|
"vitest": "^0.34.6",
|
|
91
|
-
"@blinkk/root": "1.0.0-rc.
|
|
91
|
+
"@blinkk/root": "1.0.0-rc.7"
|
|
92
92
|
},
|
|
93
93
|
"peerDependencies": {
|
|
94
|
-
"@blinkk/root": "1.0.0-rc.
|
|
94
|
+
"@blinkk/root": "1.0.0-rc.7",
|
|
95
95
|
"firebase-admin": ">=11",
|
|
96
96
|
"firebase-functions": ">=4",
|
|
97
97
|
"preact": ">=10",
|