sonamu 0.7.12 → 0.7.14
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/api/config.d.ts +0 -3
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +14 -4
- package/dist/bin/cli.js +2 -58
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -7
- package/dist/syncer/api-parser.d.ts.map +1 -1
- package/dist/syncer/api-parser.js +3 -2
- package/dist/syncer/syncer.d.ts +2 -1
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +17 -18
- package/dist/types/types.d.ts +1 -1
- package/dist/ui/ai-api.d.ts +1 -0
- package/dist/ui/ai-api.d.ts.map +1 -0
- package/dist/ui/ai-api.js +50 -0
- package/dist/ui/ai-client.d.ts +1 -0
- package/dist/ui/ai-client.d.ts.map +1 -0
- package/dist/ui/ai-client.js +438 -0
- package/dist/ui/api.d.ts +3 -0
- package/dist/ui/api.d.ts.map +1 -0
- package/dist/ui/api.js +680 -0
- package/dist/ui-web/assets/brand-icons-Cu_C0hZ4.svg +1008 -0
- package/dist/ui-web/assets/brand-icons-F3SPCeH1.woff +0 -0
- package/dist/ui-web/assets/brand-icons-XL9sxUpA.woff2 +0 -0
- package/dist/ui-web/assets/brand-icons-sqJ2Pg7a.eot +0 -0
- package/dist/ui-web/assets/brand-icons-ubhWoxly.ttf +0 -0
- package/dist/ui-web/assets/flags-DOLqOU7Y.png +0 -0
- package/dist/ui-web/assets/icons-BOCtAERH.woff +0 -0
- package/dist/ui-web/assets/icons-CHzK1VD9.eot +0 -0
- package/dist/ui-web/assets/icons-D29ZQHHw.ttf +0 -0
- package/dist/ui-web/assets/icons-Du6TOHnR.woff2 +0 -0
- package/dist/ui-web/assets/icons-RwhydX30.svg +1518 -0
- package/dist/ui-web/assets/index-CpaB9P6g.css +1 -0
- package/dist/ui-web/assets/index-J9MCfjCd.js +95 -0
- package/dist/ui-web/assets/outline-icons-BfdLr8tr.svg +366 -0
- package/dist/ui-web/assets/outline-icons-DD8jm0uy.ttf +0 -0
- package/dist/ui-web/assets/outline-icons-DInHoiqI.woff2 +0 -0
- package/dist/ui-web/assets/outline-icons-LX8adJ4n.eot +0 -0
- package/dist/ui-web/assets/outline-icons-aQ88nltS.woff +0 -0
- package/dist/ui-web/assets/provider-utils_false-BKJD46kk.js +1 -0
- package/dist/ui-web/assets/provider-utils_false-Bu5lmX18.js +1 -0
- package/dist/ui-web/index.html +13 -0
- package/dist/ui-web/vite.svg +1 -0
- package/dist/vector/embedding.d.ts +2 -1
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +8 -8
- package/dist/vector/index.d.ts +5 -0
- package/dist/vector/index.d.ts.map +1 -0
- package/dist/vector/index.js +6 -0
- package/package.json +13 -7
- package/src/api/config.ts +0 -3
- package/src/api/sonamu.ts +17 -4
- package/src/bin/cli.ts +1 -67
- package/src/index.ts +0 -5
- package/src/syncer/api-parser.ts +2 -1
- package/src/syncer/syncer.ts +20 -21
- package/src/ui/ai-api.ts +60 -0
- package/src/ui/ai-client.ts +499 -0
- package/src/ui/api.ts +786 -0
- package/src/vector/embedding.ts +9 -7
- package/src/vector/index.ts +4 -0
package/dist/api/config.d.ts
CHANGED
package/dist/api/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACnG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG;IAC7D,UAAU,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,GAAG,EAAE;QACH,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE;YACL,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
|
package/dist/api/config.js
CHANGED
|
@@ -26,4 +26,4 @@ export function defineConfig(config) {
|
|
|
26
26
|
return config;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvcnNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2NvcnNcIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeUZvcm1ib2R5T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9mb3JtYm9keVwiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcbmltcG9ydCB0eXBlIHsgRGVzZXJpYWxpemVGdW5jdGlvbiwgU2VyaWFsaXplRnVuY3Rpb24gfSBmcm9tIFwiQGZhc3RpZnkvcGFzc3BvcnQvZGlzdC9BdXRoZW50aWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3VyZVNlc3Npb25QbHVnaW5PcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3NlY3VyZS1zZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlTdGF0aWNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3N0YXRpY1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UsIEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QsIEZhc3RpZnlTZXJ2ZXJPcHRpb25zIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB0eXBlIHsgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB0eXBlIHsgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlciB9IGZyb20gXCIuLi9maWxlLXN0b3JhZ2UvZHJpdmVyXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93T3B0aW9ucyB9IGZyb20gXCIuLi90YXNrcy93b3JrZmxvdy1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGFibGUsIFNvbmFtdUZhc3RpZnlDb25maWcgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQXV0aENvbnRleHQsIENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmV4cG9ydCB0eXBlIERhdGFiYXNlQ29uZmlnID0gT21pdDxLbmV4LkNvbmZpZywgXCJjb25uZWN0aW9uXCI+
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvcnNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2NvcnNcIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeUZvcm1ib2R5T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9mb3JtYm9keVwiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcbmltcG9ydCB0eXBlIHsgRGVzZXJpYWxpemVGdW5jdGlvbiwgU2VyaWFsaXplRnVuY3Rpb24gfSBmcm9tIFwiQGZhc3RpZnkvcGFzc3BvcnQvZGlzdC9BdXRoZW50aWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3VyZVNlc3Npb25QbHVnaW5PcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3NlY3VyZS1zZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlTdGF0aWNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3N0YXRpY1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UsIEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QsIEZhc3RpZnlTZXJ2ZXJPcHRpb25zIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB0eXBlIHsgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB0eXBlIHsgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlciB9IGZyb20gXCIuLi9maWxlLXN0b3JhZ2UvZHJpdmVyXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93T3B0aW9ucyB9IGZyb20gXCIuLi90YXNrcy93b3JrZmxvdy1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGFibGUsIFNvbmFtdUZhc3RpZnlDb25maWcgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQXV0aENvbnRleHQsIENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmV4cG9ydCB0eXBlIERhdGFiYXNlQ29uZmlnID0gT21pdDxLbmV4LkNvbmZpZywgXCJjb25uZWN0aW9uXCI+ICYge1xuICBjb25uZWN0aW9uPzogS25leC5QZ0Nvbm5lY3Rpb25Db25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVDb25maWcgPSB7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIGFwaToge1xuICAgIGRpcjogc3RyaW5nO1xuICAgIHJvdXRlOiB7XG4gICAgICBwcmVmaXg6IHN0cmluZztcbiAgICB9O1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICB9O1xuICBzeW5jOiB7XG4gICAgdGFyZ2V0czogc3RyaW5nW107IC8vIFwid2ViXCIsIFwiYXBwXCIg65OxXG4gIH07XG5cbiAgZGF0YWJhc2U6IHtcbiAgICAvLyDrjbDsnbTthLDrsqDsnbTsiqRcbiAgICBkYXRhYmFzZT86IFwicG9zdGdyZXNxbFwiO1xuICAgIC8vIOq4sOuzuCDrjbDsnbTthLDrsqDsnbTsiqQg7J2066aEXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8vIOuqqOuToCDtmZjqsr3sl5Ag7KCB7Jqp65CgIOq4sOuzuCBLbmV4IOyYteyFmFxuICAgIGRlZmF1bHRPcHRpb25zOiBEYXRhYmFzZUNvbmZpZztcbiAgICAvLyDtmZjqsr3rs4Qg7ISk7KCVXG4gICAgZW52aXJvbm1lbnRzPzoge1xuICAgICAgZGV2ZWxvcG1lbnQ/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIGRldmVsb3BtZW50X3NsYXZlPzogRGF0YWJhc2VDb25maWc7XG4gICAgICBwcm9kdWN0aW9uPzogRGF0YWJhc2VDb25maWc7XG4gICAgICBwcm9kdWN0aW9uX3NsYXZlPzogRGF0YWJhc2VDb25maWc7XG4gICAgICByZW1vdGVfZml4dHVyZT86IERhdGFiYXNlQ29uZmlnO1xuICAgIH07XG4gIH07XG5cbiAgc2VydmVyOiBTb25hbXVTZXJ2ZXJPcHRpb25zO1xuICB0YXNrcz86IFNvbmFtdVRhc2tPcHRpb25zO1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11U2VydmVyT3B0aW9ucyA9IHtcbiAgZmFzdGlmeT86IEZhc3RpZnlTZXJ2ZXJPcHRpb25zO1xuXG4gIGxpc3Rlbj86IHtcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgaG9zdD86IHN0cmluZztcbiAgfTtcblxuICBwbHVnaW5zPzoge1xuICAgIGNvcnM/OiBib29sZWFuIHwgRmFzdGlmeUNvcnNPcHRpb25zO1xuICAgIGZvcm1ib2R5PzogYm9vbGVhbiB8IEZhc3RpZnlGb3JtYm9keU9wdGlvbnM7XG4gICAgbXVsdGlwYXJ0PzogYm9vbGVhbiB8IEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zO1xuICAgIHFzPzogYm9vbGVhbiB8IFFzUGx1Z2luT3B0aW9ucztcbiAgICBzc2U/OiBib29sZWFuIHwgU3NlUGx1Z2luT3B0aW9ucztcbiAgICBzdGF0aWM/OiBib29sZWFuIHwgRmFzdGlmeVN0YXRpY09wdGlvbnM7XG4gICAgc2Vzc2lvbj86IGJvb2xlYW4gfCBTZWN1cmVTZXNzaW9uUGx1Z2luT3B0aW9ucztcblxuICAgIGN1c3RvbT86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gdm9pZDtcbiAgfTtcblxuICBhdXRoPzpcbiAgICB8IGJvb2xlYW5cbiAgICB8IHtcbiAgICAgICAgdXNlclNlcmlhbGl6ZXI6IFNlcmlhbGl6ZUZ1bmN0aW9uPHVua25vd24sIHVua25vd24+O1xuICAgICAgICB1c2VyRGVzZXJpYWxpemVyOiBEZXNlcmlhbGl6ZUZ1bmN0aW9uPHVua25vd24sIHVua25vd24+O1xuICAgICAgfTtcblxuICBhcGlDb25maWc6IFNvbmFtdUZhc3RpZnlDb25maWc7XG5cbiAgc3RvcmFnZT86IERyaXZlcjtcblxuICBsaWZlY3ljbGU/OiB7XG4gICAgb25TdGFydD86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25TaHV0ZG93bj86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25FcnJvcj86IChlcnJvcjogRXJyb3IsIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVRhc2tPcHRpb25zID0ge1xuICAvLyB3b3JrZXLrpbwg7IKs7Jqp7ZWg7KeAIOyXrOu2gCwg6riw67O47KCB7Jy866GcIGRhZW1vbiDrqqjrk5zsl5DshJzrp4wg7IKs7Jqp65CoLlxuICBlbmFibGVXb3JrZXI/OiBib29sZWFuO1xuICB3b3JrZXJPcHRpb25zPzogV29ya2Zsb3dPcHRpb25zO1xuICBjb250ZXh0UHJvdmlkZXI6IChcbiAgICBkZWZhdWx0Q29udGV4dDogUGljazxDb250ZXh0LCBcInJlcGx5XCIgfCBcInJlcXVlc3RcIiB8IFwiaGVhZGVyc1wiIHwgXCJjcmVhdGVTU0VcIiB8IFwibmFpdGVTdG9yZVwiPiAmXG4gICAgICBBdXRoQ29udGV4dCxcbiAgKSA9PiBDb250ZXh0IHwgUHJvbWlzZTxDb250ZXh0Pjtcbn07XG5cbi8vIE5PVEUoSGF6ZSwgMjUxMjA5KTogY29uZmln7JeQ64qUIFQsIFByb21pc2U8VD4sICgpID0+IFQsICgpID0+IFByb21pc2U8VD7qsIAg66qo65GQIOyYrCDsiJgg7J6I7Ja07JW8IO2VqC5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiBFeGVjdXRhYmxlPFNvbmFtdUNvbmZpZz4pOiBQcm9taXNlPFNvbmFtdUNvbmZpZz4ge1xuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcoKSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG59XG5cbi8qKlxuICogc29uYW11LmNvbmZpZy50cyDtjIzsnbzsnYQg66Gc65Oc7ZWp64uI64ukLlxuICog7J20IOyEpOyglSDtjIzsnbzsnYAg7ZmY6rK97JeQIOuUsOudvCDri6Trpbgg6rK966Gc7JeQIOyeiOydhCDsiJgg7J6I7Iq164uI64ukLlxuICogZGlzdOulvCDruYzrk5ztlZjripQg7ZmY6rK97J20652866m0IGRpc3Qg67CU66GcIOyVhOuemOyXkCDsnojsnYQg6rKD7J206rOgKGNsaS13cmFwcGVyLnRz7JeQ7IScIOu5jOuTnCksXG4gKiDqt7jroIfsp4Ag7JWK7J2AIO2ZmOqyveydtOudvOuptCDtlITroZzsoJ3tirgg66Oo7Yq47JeQIOyeiOydhCDqsoPsnoXri4jri6QuXG4gKlxuICog7J20IO2VqOyImOuKlCDsnZjrj4TsoIHsnLzroZwg64uk66W4IOydmOyhtOyEseydmCDsgqzsmqnsnYQg7LWc64yA7ZWcIOuwsOygnO2VmOyYgOyKteuLiOuLpC5cbiAqIOydtOuKlCDsi6Ttlokg7LSI6riw7JeQIOy1nOuMgO2VnCDruaDrpbTqsowg7ISk7KCV7J2EIOydveyWtOyYrCDsiJgg7J6I64+E66GdIO2VmOq4sCDsnITtlajsnoXri4jri6QuXG4gKiDrlLDrnbzshJwg6rK966GcIGNvbmNhdOqzvCBVUkwgc2NoZW1lIOy2lOqwgOuPhCDri6jsiJztlZwg66y47J6Q7Je0IOyhsOyekeycvOuhnCDsspjrpqztlZjsmIDsirXri4jri6QuXG4gKlxuICogQHBhcmFtIHJvb3RQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZyhyb290UGF0aDogc3RyaW5nKTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgY29uZmlnUGF0aCA9XG4gICAgcHJvY2Vzcy5lbnYuSE9UID09PSBcInllc1wiIHx8IHByb2Nlc3MuZW52LlZJVEVTVCA9PT0gXCJ0cnVlXCJcbiAgICAgID8gYCR7cm9vdFBhdGh9L3NyYy9zb25hbXUuY29uZmlnLnRzYFxuICAgICAgOiBgJHtyb290UGF0aH0vZGlzdC9zb25hbXUuY29uZmlnLmpzYDtcbiAgY29uc3QgeyBkZWZhdWx0OiBjb25maWcgfSA9IGF3YWl0IGltcG9ydChgZmlsZTovLyR7Y29uZmlnUGF0aH1gKTtcbiAgY29uc3QgaW1wb3J0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnQ7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInRlc3RcIiAmJlxuICAgIGNvbnNvbGUubG9nKGBbVElNSU5HXSBsb2FkQ29uZmlnIHRvb2sgJHtpbXBvcnRUaW1lLnRvRml4ZWQoMil9bXNgKTtcbiAgcmV0dXJuIGNvbmZpZztcbn1cbiJdLCJuYW1lcyI6WyJkZWZpbmVDb25maWciLCJjb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsImxvYWRDb25maWciLCJyb290UGF0aCIsInN0YXJ0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJjb25maWdQYXRoIiwicHJvY2VzcyIsImVudiIsIkhPVCIsIlZJVEVTVCIsImRlZmF1bHQiLCJpbXBvcnRUaW1lIiwiTk9ERV9FTlYiLCJjb25zb2xlIiwibG9nIiwidG9GaXhlZCJdLCJtYXBwaW5ncyI6IkFBc0dBLHVGQUF1RjtBQUN2RixPQUFPLFNBQVNBLGFBQWFDLE1BQWdDO0lBQzNELElBQUksT0FBT0EsV0FBVyxZQUFZO1FBQ2hDLE9BQU9DLFFBQVFDLE9BQU8sQ0FBQ0Y7SUFDekI7SUFFQSxPQUFPQyxRQUFRQyxPQUFPLENBQUNGO0FBQ3pCO0FBRUE7Ozs7Ozs7Ozs7OztDQVlDLEdBQ0QsT0FBTyxlQUFlRyxXQUFXQyxRQUFnQjtJQUMvQyxNQUFNQyxRQUFRQyxZQUFZQyxHQUFHO0lBQzdCLE1BQU1DLGFBQ0pDLFFBQVFDLEdBQUcsQ0FBQ0MsR0FBRyxLQUFLLFNBQVNGLFFBQVFDLEdBQUcsQ0FBQ0UsTUFBTSxLQUFLLFNBQ2hELEdBQUdSLFNBQVMscUJBQXFCLENBQUMsR0FDbEMsR0FBR0EsU0FBUyxzQkFBc0IsQ0FBQztJQUN6QyxNQUFNLEVBQUVTLFNBQVNiLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFUSxZQUFZO0lBQy9ELE1BQU1NLGFBQWFSLFlBQVlDLEdBQUcsS0FBS0Y7SUFDdkNJLFFBQVFDLEdBQUcsQ0FBQ0ssUUFBUSxLQUFLLFVBQ3ZCQyxRQUFRQyxHQUFHLENBQUMsQ0FBQyx5QkFBeUIsRUFBRUgsV0FBV0ksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ25FLE9BQU9sQjtBQUNUIn0=
|
package/dist/api/sonamu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sonamu.d.ts","sourceRoot":"","sources":["../../src/api/sonamu.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAKpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAA0C,MAAM,UAAU,CAAC;AACrF,OAAO,KAAK,EAAe,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AACF,cAAM,WAAW;IACR,aAAa,EAAE,OAAO,CAAS;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;QAC1C,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAA2B;IAEtB,aAAa,EAAE,iBAAiB,CAAC;QACtC,aAAa,EAAE,aAAa,CAAC;KAC9B,CAAC,CAA2B;IAEtB,UAAU,IAAI,OAAO;IAqBrB,gBAAgB,IAAI,aAAa;IAQxC,OAAO,CAAC,YAAY,CAA6B;IACjD,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAExC;IACD,IAAI,WAAW,IAAI,YAAY,CAK9B;IACD,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,OAAO,CAAC,SAAS,CAA+B;IAChD,IAAI,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAEpC;IACD,IAAI,QAAQ,IAAI,cAAc,CAK7B;IAED,OAAO,CAAC,OAAO,CAAuB;IACtC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAExB;IACD,IAAI,MAAM,IAAI,MAAM,CAKnB;IAED,OAAO,CAAC,OAAO,CAA6B;IAC5C,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,EAE9B;IACD,IAAI,MAAM,IAAI,YAAY,CAKzB;IAED,OAAO,CAAC,QAAQ,CAA8B;IAC9C,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,EAEjC;IACD,IAAI,OAAO,IAAI,aAAa,GAAG,IAAI,CAElC;IAED,OAAO,CAAC,QAAQ,CAAuB;IACvC,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAE1B;IACD,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,OAAO,CAAC,UAAU,CAAgC;IAClD,IAAI,SAAS,IAAI,eAAe,CAM/B;IAGM,OAAO,EAAE,SAAS,GAAG,IAAI,CAAQ;IACxC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAa;IAE1B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAQ;IAEvC,cAAc;IAId,IAAI,CACR,QAAQ,GAAE,OAAe,EACzB,UAAU,GAAE,OAAc,EAC1B,WAAW,CAAC,EAAE,YAAY,EAC1B,UAAU,GAAE,OAAe;
|
|
1
|
+
{"version":3,"file":"sonamu.d.ts","sourceRoot":"","sources":["../../src/api/sonamu.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAKpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAA0C,MAAM,UAAU,CAAC;AACrF,OAAO,KAAK,EAAe,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AACF,cAAM,WAAW;IACR,aAAa,EAAE,OAAO,CAAS;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;QAC1C,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAA2B;IAEtB,aAAa,EAAE,iBAAiB,CAAC;QACtC,aAAa,EAAE,aAAa,CAAC;KAC9B,CAAC,CAA2B;IAEtB,UAAU,IAAI,OAAO;IAqBrB,gBAAgB,IAAI,aAAa;IAQxC,OAAO,CAAC,YAAY,CAA6B;IACjD,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAExC;IACD,IAAI,WAAW,IAAI,YAAY,CAK9B;IACD,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,OAAO,CAAC,SAAS,CAA+B;IAChD,IAAI,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAEpC;IACD,IAAI,QAAQ,IAAI,cAAc,CAK7B;IAED,OAAO,CAAC,OAAO,CAAuB;IACtC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAExB;IACD,IAAI,MAAM,IAAI,MAAM,CAKnB;IAED,OAAO,CAAC,OAAO,CAA6B;IAC5C,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,EAE9B;IACD,IAAI,MAAM,IAAI,YAAY,CAKzB;IAED,OAAO,CAAC,QAAQ,CAA8B;IAC9C,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,EAEjC;IACD,IAAI,OAAO,IAAI,aAAa,GAAG,IAAI,CAElC;IAED,OAAO,CAAC,QAAQ,CAAuB;IACvC,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAE1B;IACD,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,OAAO,CAAC,UAAU,CAAgC;IAClD,IAAI,SAAS,IAAI,eAAe,CAM/B;IAGM,OAAO,EAAE,SAAS,GAAG,IAAI,CAAQ;IACxC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAa;IAE1B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAQ;IAEvC,cAAc;IAId,IAAI,CACR,QAAQ,GAAE,OAAe,EACzB,UAAU,GAAE,OAAc,EAC1B,WAAW,CAAC,EAAE,YAAY,EAC1B,UAAU,GAAE,OAAe;IA2FvB,YAAY,CAAC,WAAW,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;IAwCvE,WAAW,CACf,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,CAAC,EAChE,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB;IAyGH,aAAa,CACX,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,mBAAmB,GAC1B,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC;IAuF/D,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA8C7B,SAAS,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;YASzB,eAAe;YAsCf,YAAY;YAkBZ,mBAAmB;YAuBnB,IAAI;YAuCJ,gBAAgB;YAsBhB,SAAS;IAcjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAO/B;AACD,eAAO,MAAM,MAAM,aAAoB,CAAC"}
|
package/dist/api/sonamu.js
CHANGED
|
@@ -173,7 +173,6 @@ class SonamuClass {
|
|
|
173
173
|
if (isLocal() && !isTest() && isHotReloadServer() && enableSync) {
|
|
174
174
|
await this.syncer.sync();
|
|
175
175
|
await this.startWatcher();
|
|
176
|
-
this.syncer.syncUI();
|
|
177
176
|
}
|
|
178
177
|
this.isInitialized = true;
|
|
179
178
|
if (!doSilent) {
|
|
@@ -251,16 +250,27 @@ class SonamuClass {
|
|
|
251
250
|
server.get(`${this.config.api.route.prefix}/healthcheck`, async (_request, _reply)=>{
|
|
252
251
|
return "ok";
|
|
253
252
|
});
|
|
253
|
+
// Sonamu UI API
|
|
254
|
+
const { sonamuUIApiPlugin } = await import("../ui/api.js");
|
|
255
|
+
server.register(sonamuUIApiPlugin);
|
|
254
256
|
// API 라우팅 (로컬HMR 상태와 구분)
|
|
255
257
|
const { isLocal } = await import("../utils/controller.js");
|
|
256
258
|
if (isLocal()) {
|
|
257
259
|
server.all("*", async (request, reply)=>{
|
|
260
|
+
// Sonamu UI
|
|
261
|
+
if (request.url.startsWith("/sonamu-ui")) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
258
264
|
const found = this.syncer.apis.find((api)=>this.config.api.route.prefix + api.path === request.url.split("?")[0] && (api.options.httpMethod ?? "GET") === request.method.toUpperCase());
|
|
259
265
|
if (found) {
|
|
260
266
|
return this.getApiHandler(found, config)(request, reply);
|
|
261
267
|
}
|
|
262
|
-
|
|
263
|
-
|
|
268
|
+
if (request.url.startsWith("/api/")) {
|
|
269
|
+
const { NotFoundException } = await import("../exceptions/so-exceptions.js");
|
|
270
|
+
throw new NotFoundException(`존재하지 않는 API 접근입니다. ${request.url}`);
|
|
271
|
+
}
|
|
272
|
+
// 일반 파일 접근시 별도의 에러 출력하지 않음
|
|
273
|
+
return;
|
|
264
274
|
});
|
|
265
275
|
} else {
|
|
266
276
|
for (const api of this.syncer.apis){
|
|
@@ -516,4 +526,4 @@ class SonamuClass {
|
|
|
516
526
|
}
|
|
517
527
|
export const Sonamu = new SonamuClass();
|
|
518
528
|
|
|
519
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvc29uYW11LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiYXN5bmNfaG9va3NcIjtcbmltcG9ydCB0eXBlIHsgRlNXYXRjaGVyIH0gZnJvbSBcImNob2tpZGFyXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlJbnN0YW5jZSwgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IEluY29taW5nTWVzc2FnZSwgU2VydmVyLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBab2RPYmplY3QgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrU1NFRmFjdG9yeSwgREIsIGlzRGFlbW9uU2VydmVyIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlciB9IGZyb20gXCIuLi9maWxlLXN0b3JhZ2UvZHJpdmVyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBTeW5jZXIgfSBmcm9tIFwiLi4vc3luY2VyL3N5bmNlclwiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd01hbmFnZXIgfSBmcm9tIFwiLi4vdGFza3Mvd29ya2Zsb3ctbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBTb25hbXVGYXN0aWZ5Q29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdUNvbmZpZywgU29uYW11U2VydmVyT3B0aW9ucywgU29uYW11VGFza09wdGlvbnMgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQXV0aENvbnRleHQsIENvbnRleHQsIFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgdHlwZSBTb25hbXVTZWNyZXRzID0ge1xuICBhbnRocm9waWNfYXBpX2tleT86IHN0cmluZztcbiAgdm95YWdlX2FwaV9rZXk/OiBzdHJpbmc7XG4gIG9wZW5haV9hcGlfa2V5Pzogc3RyaW5nO1xufTtcbmNsYXNzIFNvbmFtdUNsYXNzIHtcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGFzeW5jTG9jYWxTdG9yYWdlOiBBc3luY0xvY2FsU3RvcmFnZTx7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgfT4gPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2UoKTtcblxuICBwdWJsaWMgdXBsb2FkU3RvcmFnZTogQXN5bmNMb2NhbFN0b3JhZ2U8e1xuICAgIHVwbG9hZENvbnRleHQ6IFVwbG9hZENvbnRleHQ7XG4gIH0+ID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlKCk7XG5cbiAgcHVibGljIGdldENvbnRleHQoKTogQ29udGV4dCB7XG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmFzeW5jTG9jYWxTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKHN0b3JlPy5jb250ZXh0KSB7XG4gICAgICByZXR1cm4gc3RvcmUuY29udGV4dDtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICAvLyDthYzsiqTtjIUg7ZmY6rK97JeQ7IScIOy7qO2FjeyKpO2KuOqwgCDso7zsnoXrkJjsp4Ag7JWK7J2AIOqyveyasCDruYgg7Luo7YWN7Iqk7Yq4IOumrO2EtFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWVzdDogbnVsbCxcbiAgICAgICAgcmVwbHk6IG51bGwsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBjcmVhdGVTU0U6IChzY2hlbWE6IFpvZE9iamVjdCkgPT4gY3JlYXRlTW9ja1NTRUZhY3Rvcnkoc2NoZW1hKSxcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDthYzsiqTtjIUg7ZmY6rK97JeQ7IScIOy7qO2FjeyKpO2KuOqwgCDso7zsnoXrkJjsp4Ag7JWK7J2AIOqyveyasCDruYgg7Luo7YWN7Iqk7Yq4IOumrO2EtFxuICAgICAgICBuYWl0ZVN0b3JlOiBuZXcgTWFwPHN0cmluZywgYW55PigpLFxuICAgICAgfSBhcyB1bmtub3duIGFzIENvbnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbmFtdSBjYW5ub3QgZmluZCBjb250ZXh0XCIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRVcGxvYWRDb250ZXh0KCk6IFVwbG9hZENvbnRleHQge1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy51cGxvYWRTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKHN0b3JlPy51cGxvYWRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gc3RvcmUudXBsb2FkQ29udGV4dDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU29uYW11IGNhbm5vdCBmaW5kIHVwbG9hZCBjb250ZXh0LiBEaWQgeW91IHVzZSBAdXBsb2FkIGRlY29yYXRvcj9cIik7XG4gIH1cblxuICBwcml2YXRlIF9hcGlSb290UGF0aDogQWJzb2x1dGVQYXRoIHwgbnVsbCA9IG51bGw7XG4gIHNldCBhcGlSb290UGF0aChhcGlSb290UGF0aDogQWJzb2x1dGVQYXRoKSB7XG4gICAgdGhpcy5fYXBpUm9vdFBhdGggPSBhcGlSb290UGF0aDtcbiAgfVxuICBnZXQgYXBpUm9vdFBhdGgoKTogQWJzb2x1dGVQYXRoIHtcbiAgICBpZiAodGhpcy5fYXBpUm9vdFBhdGggPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbmFtdSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWRcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcGlSb290UGF0aDtcbiAgfVxuICBnZXQgYXBwUm9vdFBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGlSb290UGF0aC5zcGxpdChwYXRoLnNlcCkuc2xpY2UoMCwgLTEpLmpvaW4ocGF0aC5zZXApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGJDb25maWc6IFNvbmFtdURCQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIHNldCBkYkNvbmZpZyhkYkNvbmZpZzogU29uYW11REJDb25maWcpIHtcbiAgICB0aGlzLl9kYkNvbmZpZyA9IGRiQ29uZmlnO1xuICB9XG4gIGdldCBkYkNvbmZpZygpOiBTb25hbXVEQkNvbmZpZyB7XG4gICAgaWYgKHRoaXMuX2RiQ29uZmlnID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGJDb25maWc7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jZXI6IFN5bmNlciB8IG51bGwgPSBudWxsO1xuICBzZXQgc3luY2VyKHN5bmNlcjogU3luY2VyKSB7XG4gICAgdGhpcy5fc3luY2VyID0gc3luY2VyO1xuICB9XG4gIGdldCBzeW5jZXIoKTogU3luY2VyIHtcbiAgICBpZiAodGhpcy5fc3luY2VyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3luY2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlnOiBTb25hbXVDb25maWcgfCBudWxsID0gbnVsbDtcbiAgc2V0IGNvbmZpZyhjb25maWc6IFNvbmFtdUNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgfVxuICBnZXQgY29uZmlnKCk6IFNvbmFtdUNvbmZpZyB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29uYW11IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgX3NlY3JldHM6IFNvbmFtdVNlY3JldHMgfCBudWxsID0gbnVsbDtcbiAgc2V0IHNlY3JldHMoc2VjcmV0czogU29uYW11U2VjcmV0cykge1xuICAgIHRoaXMuX3NlY3JldHMgPSBzZWNyZXRzO1xuICB9XG4gIGdldCBzZWNyZXRzKCk6IFNvbmFtdVNlY3JldHMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjcmV0cztcbiAgfVxuXG4gIHByaXZhdGUgX3N0b3JhZ2U6IERyaXZlciB8IG51bGwgPSBudWxsO1xuICBzZXQgc3RvcmFnZShzdG9yYWdlOiBEcml2ZXIpIHtcbiAgICB0aGlzLl9zdG9yYWdlID0gc3RvcmFnZTtcbiAgfVxuICBnZXQgc3RvcmFnZSgpOiBEcml2ZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZTtcbiAgfVxuXG4gIHByaXZhdGUgX3dvcmtmbG93czogV29ya2Zsb3dNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gIGdldCB3b3JrZmxvd3MoKTogV29ya2Zsb3dNYW5hZ2VyIHtcbiAgICBpZiAodGhpcy5fd29ya2Zsb3dzID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JrZmxvd3M7XG4gIH1cblxuICAvLyBITVIg7LKY66asXG4gIHB1YmxpYyB3YXRjaGVyOiBGU1dhdGNoZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZW5kaW5nRmlsZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgaG1yU3RhcnRUaW1lOiBudW1iZXIgPSAwO1xuXG4gIHB1YmxpYyBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuXG4gIGFzeW5jIGluaXRGb3JUZXN0aW5nKCkge1xuICAgIGF3YWl0IHRoaXMuaW5pdCh0cnVlLCBmYWxzZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQoXG4gICAgZG9TaWxlbnQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBlbmFibGVTeW5jOiBib29sZWFuID0gdHJ1ZSxcbiAgICBhcGlSb290UGF0aD86IEFic29sdXRlUGF0aCxcbiAgICBmb3JUZXN0aW5nOiBib29sZWFuID0gZmFsc2UsXG4gICkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRvU2lsZW50KSB7XG4gICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgIGNvbnNvbGUudGltZShjaGFsay5jeWFuKGBTb25hbXUuaW5pdCR7Zm9yVGVzdGluZyA/IFwiIGZvciB0ZXN0aW5nXCIgOiBcIlwifWApKTtcbiAgICB9XG5cbiAgICAvLyBBUEkg66Oo7Yq4IO2MqOyKpFxuICAgIGNvbnN0IHsgZmluZEFwaVJvb3RQYXRoIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy91dGlsc1wiKTtcbiAgICB0aGlzLmFwaVJvb3RQYXRoID0gYXBpUm9vdFBhdGggPz8gZmluZEFwaVJvb3RQYXRoKCk7XG5cbiAgICBjb25zdCB7IGxvYWRDb25maWcgfSA9IGF3YWl0IGltcG9ydChcIi4vY29uZmlnXCIpO1xuICAgIHRoaXMuY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyh0aGlzLmFwaVJvb3RQYXRoKTtcbiAgICAvLyBzb25hbXUuY29uZmlnLnRzIOq4sOuzuOqwkiDshKTsoJVcbiAgICB0aGlzLmNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSA9IHRoaXMuY29uZmlnLmRhdGFiYXNlLmRhdGFiYXNlID8/IFwicG9zdGdyZXNxbFwiO1xuXG4gICAgLy8gQVBJIO2CpCDtmZjqsr3rs4DsiJgg66Gc65OcXG4gICAgY29uc3Qgc2VjcmV0czogU29uYW11U2VjcmV0cyA9IHt9O1xuICAgIGlmIChwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWSkge1xuICAgICAgc2VjcmV0cy5hbnRocm9waWNfYXBpX2tleSA9IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuVk9ZQUdFX0FQSV9LRVkpIHtcbiAgICAgIHNlY3JldHMudm95YWdlX2FwaV9rZXkgPSBwcm9jZXNzLmVudi5WT1lBR0VfQVBJX0tFWTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZKSB7XG4gICAgICBzZWNyZXRzLm9wZW5haV9hcGlfa2V5ID0gcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVk7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhzZWNyZXRzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlY3JldHMgPSBzZWNyZXRzO1xuICAgIH1cblxuICAgIC8vIERCIOuhnOuTnFxuICAgIGNvbnN0IHsgREIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2RhdGFiYXNlL2RiXCIpO1xuICAgIHRoaXMuZGJDb25maWcgPSBEQi5nZW5lcmF0ZURCQ29uZmlnKHRoaXMuY29uZmlnLmRhdGFiYXNlKTtcbiAgICBpZiAoIWRvU2lsZW50KSB7XG4gICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKFwiREIgQ29uZmlnIExvYWRlZCFcIikpO1xuICAgIH1cblxuICAgIC8vIEVudGl0eSDroZzrk5xcbiAgICAvLyDthYzsiqTtirjsl5DshJzrj4QgRW50aXR5IOygleuztOuKlCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8gdXBzZXJ06rCAIOygnOuMgOuhnCDsnpHrj5ntlZjroKTrqbQgZW50aXR57J2YIHVuaXF1ZSBpbmRleCDsoJXrs7TqsIAg7ZWE7JqU7ZWY6riwIOuVjOusuOyeheuLiOuLpC5cbiAgICBjb25zdCB7IEVudGl0eU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiKTtcbiAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKGRvU2lsZW50KTtcblxuICAgIC8vIO2FjOyKpO2MheyduCDqsr3smrAg7Iux7YGsIOyXhuydtCDspJHri6hcbiAgICBpZiAoZm9yVGVzdGluZykge1xuICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUYXNrIOuTseuhnVxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVdvcmtmbG93cyh0aGlzLmNvbmZpZy50YXNrcyk7XG5cbiAgICAvLyBTeW5jZXJcbiAgICBjb25zdCB7IFN5bmNlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vc3luY2VyL3N5bmNlclwiKTtcbiAgICB0aGlzLnN5bmNlciA9IG5ldyBTeW5jZXIoKTtcblxuICAgIC8vIEF1dG9sb2FkOiBNb2RlbHMgLyBUeXBlcyAvIEFQSXNcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZFR5cGVzKCk7XG4gICAgYXdhaXQgdGhpcy5zeW5jZXIuYXV0b2xvYWRNb2RlbHMoKTtcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZEFwaXMoKTtcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZFdvcmtmbG93cygpO1xuXG4gICAgY29uc3QgeyBUZW1wbGF0ZU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL3RlbXBsYXRlXCIpO1xuICAgIGF3YWl0IFRlbXBsYXRlTWFuYWdlci5hdXRvbG9hZCgpO1xuXG4gICAgY29uc3QgeyBpc0xvY2FsLCBpc1Rlc3QgfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIik7XG4gICAgaWYgKGlzTG9jYWwoKSkge1xuICAgICAgLy8g66Gc7Lus7JeQ7ISc64qUIOy9lOuTnCDsg53shLHsnYQg7JyE7ZW0IEJpb21lIOyFi+yXheydtCDtlYTsmpTtlaggKO2YhOyerCBhcGlSb290UGF0aCDsoITri6ztlZjsl6wg7Iuk7ZaJKVxuICAgICAgKGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2Zvcm1hdHRlclwiKSkuc2V0dXBCaW9tZSh0aGlzLmFwaVJvb3RQYXRoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGlzSG90UmVsb2FkU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9jb250cm9sbGVyXCIpO1xuICAgIGlmIChpc0xvY2FsKCkgJiYgIWlzVGVzdCgpICYmIGlzSG90UmVsb2FkU2VydmVyKCkgJiYgZW5hYmxlU3luYykge1xuICAgICAgYXdhaXQgdGhpcy5zeW5jZXIuc3luYygpO1xuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0V2F0Y2hlcigpO1xuXG4gICAgICB0aGlzLnN5bmNlci5zeW5jVUkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIGlmICghZG9TaWxlbnQpIHtcbiAgICAgIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0O1xuICAgICAgY29uc29sZS50aW1lRW5kKGNoYWxrLmN5YW4oXCJTb25hbXUuaW5pdFwiKSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2VydmVyKGluaXRPcHRpb25zPzogeyBlbmFibGVTeW5jPzogYm9vbGVhbjsgZG9TaWxlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0KGluaXRPcHRpb25zPy5kb1NpbGVudCwgaW5pdE9wdGlvbnM/LmVuYWJsZVN5bmMpO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmNvbmZpZy5zZXJ2ZXI7XG4gICAgY29uc3QgZmFzdGlmeSA9IChhd2FpdCBpbXBvcnQoXCJmYXN0aWZ5XCIpKS5kZWZhdWx0O1xuICAgIGNvbnN0IHNlcnZlciA9IGZhc3RpZnkob3B0aW9ucy5mYXN0aWZ5KTtcbiAgICB0aGlzLnNlcnZlciA9IHNlcnZlcjtcblxuICAgIC8vIFN0b3JhZ2Ug7ISk7KCVIOyggOyepVxuICAgIGlmIChvcHRpb25zLnN0b3JhZ2UpIHtcbiAgICAgIHRoaXMuc3RvcmFnZSA9IG9wdGlvbnMuc3RvcmFnZTtcbiAgICB9XG5cbiAgICAvLyDtlIzrn6zqt7jsnbgg65Ox66GdXG4gICAgaWYgKG9wdGlvbnMucGx1Z2lucykge1xuICAgICAgYXdhaXQgdGhpcy5yZWdpc3RlclBsdWdpbnMoc2VydmVyLCBvcHRpb25zLnBsdWdpbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmF1dGgpIHtcbiAgICAgIGlmICghb3B0aW9ucy5wbHVnaW5zPy5zZXNzaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkF1dGggcmVxdWlyZXMgc2Vzc2lvbiBwbHVnaW4uIFBsZWFzZSBhZGQgcGx1Z2lucy5zZXNzaW9uIGNvbmZpZ3VyYXRpb24uXCIpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyQXV0aChzZXJ2ZXIsIG9wdGlvbnMuYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gQVBJIOudvOyasO2MhSDshKTsoJVcbiAgICBhd2FpdCB0aGlzLndpdGhGYXN0aWZ5KHNlcnZlciwgb3B0aW9ucy5hcGlDb25maWcsIHtcbiAgICAgIGVuYWJsZVN5bmM6IGluaXRPcHRpb25zPy5lbmFibGVTeW5jLFxuICAgICAgZG9TaWxlbnQ6IGluaXRPcHRpb25zPy5kb1NpbGVudCxcbiAgICB9KTtcblxuICAgIC8vIOyEnOuyhCDsi5zsnpFcbiAgICBhd2FpdCB0aGlzLmJvb3Qoc2VydmVyLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBzZXJ2ZXI7XG4gIH1cblxuICBhc3luYyB3aXRoRmFzdGlmeShcbiAgICBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZTxTZXJ2ZXIsIEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2U+LFxuICAgIGNvbmZpZzogU29uYW11RmFzdGlmeUNvbmZpZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgZW5hYmxlU3luYz86IGJvb2xlYW47XG4gICAgICBkb1NpbGVudD86IGJvb2xlYW47XG4gICAgfSxcbiAgKSB7XG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdChvcHRpb25zPy5kb1NpbGVudCwgb3B0aW9ucz8uZW5hYmxlU3luYyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXI7XG5cbiAgICAvLyB0aW1lem9uZSDshKTsoJVcbiAgICBjb25zdCB0aW1lem9uZSA9IHRoaXMuY29uZmlnLmFwaS50aW1lem9uZTtcbiAgICBpZiAodGltZXpvbmUpIHtcbiAgICAgIC8vIO2DgOyehOyhtOyXkCDrp57qsowg7J2R64u1IOuCoOynnCDsiqTtirjrp4HsnYQg67OA7ZmY7ZW07KO87Ja07JW8IO2VqeuLiOuLpC5cbiAgICAgIC8vIOqwgOuguSB0aW1lem9uZeydtCBcIkFzaWEvU2VvdWxcIiDsnbTrqbRcbiAgICAgIC8vIFwiMjAyNS0xMS0yMVQwMDowMDowMC4wMDBaXCIg66W8IFwiMjAyNS0xMS0yMVQwOTowMDowMCswOTowMFwiIOycvOuhnCDrs4DtmZjtlbTso7zslrTslbwg7ZWp64uI64ukLlxuICAgICAgY29uc3QgeyBmb3JtYXRJblRpbWVab25lIH0gPSBhd2FpdCBpbXBvcnQoXCJkYXRlLWZucy10elwiKTtcblxuICAgICAgLy8gSVNPIDg2MDEg64Kg7KecIO2YleyLnSDsoJXqt5zsi50gKOyYiDogMjAyNC0wMS0xNVQwOTozMDowMC4wMDBaKVxuICAgICAgY29uc3QgSVNPX0RBVEVfUkVHRVggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KFxcLlxcZHszfSk/WiQvO1xuXG4gICAgICAvLyBU66W8IOuRmOufrOyLvCDsnpHsnYDrlLDsmLTtkZzqsIAg7JeG64uk66m0IFwiMjAyNS0xMS0xOTE3NjM1NDYxODkwMDAxODo1NjoyOSswOTowMFwi7JmAIOqwmeydgCDqsrDqs7zqsIAg64KY7Ji164uI64ukLlxuICAgICAgLy8g7J2064qUIGRhdGUtZm5zIO2KueyeheuLiOuLpC5cbiAgICAgIC8vIOydtOugh+qyjCDtlbTrj4Qg6rSc7LCu7Iq164uI64ukLiBcIjIwMjUtMTEtMTlUMTg6NTY6MjkrMDk6MDBcIiDrqqjslpHsnLzroZwg7J6YIOuCmOyYteuLiOuLpC5cbiAgICAgIGNvbnN0IERBVEVfRk9STUFUID0gXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NYWFhcIjtcblxuICAgICAgc2VydmVyLnNldFJlcGx5U2VyaWFsaXplcigocGF5bG9hZCkgPT4ge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgKF9rZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBJU09fREFURV9SRUdFWC50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdEluVGltZVpvbmUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKHZhbHVlKSxcbiAgICAgICAgICAgICAgdGltZXpvbmUgYXMgYCR7c3RyaW5nfS8ke3N0cmluZ31gLFxuICAgICAgICAgICAgICBEQVRFX0ZPUk1BVCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghb3B0aW9ucz8uZG9TaWxlbnQpIHtcbiAgICAgICAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBUaW1lem9uZSBzZXQgdG8gJHt0aW1lem9uZX1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g7KCE7LK0IOudvOyasO2MhSDrpqzsiqTtirhcbiAgICBzZXJ2ZXIuZ2V0KFxuICAgICAgYCR7dGhpcy5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0vcm91dGVzYCxcbiAgICAgIGFzeW5jIChfcmVxdWVzdCwgX3JlcGx5KTogUHJvbWlzZTx0eXBlb2YgdGhpcy5zeW5jZXIuYXBpcz4gPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zeW5jZXIuYXBpcztcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIEhlYWx0aGNoZWNrIEFQSVxuICAgIHNlcnZlci5nZXQoXG4gICAgICBgJHt0aGlzLmNvbmZpZy5hcGkucm91dGUucHJlZml4fS9oZWFsdGhjaGVja2AsXG4gICAgICBhc3luYyAoX3JlcXVlc3QsIF9yZXBseSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgICAgIHJldHVybiBcIm9rXCI7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBBUEkg65287Jqw7YyFICjroZzsu6xITVIg7IOB7YOc7JmAIOq1rOu2hClcbiAgICBjb25zdCB7IGlzTG9jYWwgfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIik7XG4gICAgaWYgKGlzTG9jYWwoKSkge1xuICAgICAgc2VydmVyLmFsbChcIipcIiwgYXN5bmMgKHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zeW5jZXIuYXBpcy5maW5kKFxuICAgICAgICAgIChhcGkpID0+XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5hcGkucm91dGUucHJlZml4ICsgYXBpLnBhdGggPT09IHJlcXVlc3QudXJsLnNwbGl0KFwiP1wiKVswXSAmJlxuICAgICAgICAgICAgKGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPz8gXCJHRVRcIikgPT09IHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEFwaUhhbmRsZXIoZm91bmQsIGNvbmZpZykocmVxdWVzdCwgcmVwbHkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgTm90Rm91bmRFeGNlcHRpb24gfSA9IGF3YWl0IGltcG9ydChcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiKTtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKFwi7KG07J6s7ZWY7KeAIOyViuuKlCBBUEkg7KCR6re87J6F64uI64ukLlwiKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGFwaSBvZiB0aGlzLnN5bmNlci5hcGlzKSB7XG4gICAgICAgIC8vIG1vZGVsXG4gICAgICAgIGlmICh0aGlzLnN5bmNlci5tb2RlbHNbYXBpLm1vZGVsTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7KCV7J2Y65CY7KeAIOyViuydgCDrqqjrjbjsl5Ag7KCR6re8ICR7YXBpLm1vZGVsTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJvdXRlXG4gICAgICAgIHNlcnZlci5yb3V0ZSh7XG4gICAgICAgICAgbWV0aG9kOiBhcGkub3B0aW9ucy5odHRwTWV0aG9kID8/IFwiR0VUXCIsXG4gICAgICAgICAgdXJsOiB0aGlzLmNvbmZpZy5hcGkucm91dGUucHJlZml4ICsgYXBpLnBhdGgsXG4gICAgICAgICAgaGFuZGxlcjogdGhpcy5nZXRBcGlIYW5kbGVyKGFwaSwgY29uZmlnKSxcbiAgICAgICAgfSk7IC8vIEVORCBzZXJ2ZXIucm91dGVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRBcGlIYW5kbGVyKFxuICAgIGFwaTogRXh0ZW5kZWRBcGksXG4gICAgY29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnLFxuICApOiAocmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsIHJlcGx5OiBGYXN0aWZ5UmVwbHkpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBhc3luYyAocmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsIHJlcGx5OiBGYXN0aWZ5UmVwbHkpOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICAgIChhcGkub3B0aW9ucy5ndWFyZHMgPz8gW10pLmV2ZXJ5KChndWFyZCkgPT4gY29uZmlnLmd1YXJkSGFuZGxlcihndWFyZCwgcmVxdWVzdCwgYXBpKSk7XG5cbiAgICAgIC8vIO2MjOudvOuvuO2EsCDsoJXrs7TroZwgem9kIOyKpO2CpOuniCDruYzrk5xcbiAgICAgIGNvbnN0IHsgZ2V0Wm9kT2JqZWN0RnJvbUFwaSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jb2RlLWNvbnZlcnRlcnNcIik7XG4gICAgICBjb25zdCBSZXFUeXBlID0gZ2V0Wm9kT2JqZWN0RnJvbUFwaShhcGksIHRoaXMuc3luY2VyLnR5cGVzKTtcblxuICAgICAgLy8gcmVxdWVzdCDtjIzsi7FcbiAgICAgIGNvbnN0IHdoaWNoID0gYXBpLm9wdGlvbnMuaHR0cE1ldGhvZCA9PT0gXCJHRVRcIiA/IFwicXVlcnlcIiA6IFwiYm9keVwiO1xuICAgICAgbGV0IHJlcUJvZHk6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICAgIH07XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGZhc3RpZnlDYXN0ZXIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2FzdGVyXCIpO1xuICAgICAgICByZXFCb2R5ID0gZmFzdGlmeUNhc3RlcihSZXFUeXBlKS5wYXJzZShyZXF1ZXN0W3doaWNoXSA/PyB7fSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IHsgWm9kRXJyb3IgfSA9IGF3YWl0IGltcG9ydChcInpvZFwiKTtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBab2RFcnJvcikge1xuICAgICAgICAgIGNvbnN0IHsgaHVtYW5pemVab2RFcnJvciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvem9kLWVycm9yXCIpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gaHVtYW5pemVab2RFcnJvcihlKVxuICAgICAgICAgICAgLm1hcCgoaXNzdWUpID0+IGlzc3VlLm1lc3NhZ2UpXG4gICAgICAgICAgICAuam9pbihcIiBcIik7XG4gICAgICAgICAgY29uc3QgeyBCYWRSZXF1ZXN0RXhjZXB0aW9uIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIik7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24obWVzc2FnZXMsIHtcbiAgICAgICAgICAgIHpvZEVycm9yOiBlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ29udGVudC1UeXBlXG4gICAgICByZXBseS50eXBlKGFwaS5vcHRpb25zLmNvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwiKTtcblxuICAgICAgLy8gY3JlYXRlU1NFRmFjdG9yeSDtlajsiJjsl5Ag66+466asIHJlcXVlc3TsnZggc29ja2V06rO8IHJlcGx566W8IOuwlOyduOuUqS5cbiAgICAgIGNvbnN0IHsgY3JlYXRlU1NFRmFjdG9yeSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vc3RyZWFtL3NzZVwiKTtcbiAgICAgIGNvbnN0IGNyZWF0ZVNTRSA9ICg8VCBleHRlbmRzIFpvZE9iamVjdD4oXG4gICAgICAgIF9yZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgICAgICAgX3JlcGx5OiBGYXN0aWZ5UmVwbHksXG4gICAgICAgIF9ldmVudHM6IFQsXG4gICAgICApID0+IGNyZWF0ZVNTRUZhY3RvcnkoX3JlcXVlc3Quc29ja2V0LCBfcmVwbHksIF9ldmVudHMpKS5iaW5kKG51bGwsIHJlcXVlc3QsIHJlcGx5KTtcblxuICAgICAgY29uc3QgY29udGV4dDogQ29udGV4dCA9IHtcbiAgICAgICAgLi4uKGF3YWl0IFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb25maWcuY29udGV4dFByb3ZpZGVyKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICByZXBseSxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgICBjcmVhdGVTU0UsXG4gICAgICAgICAgICAgIG5haXRlU3RvcmU6IE5haXRlLmNyZWF0ZVN0b3JlKCksXG4gICAgICAgICAgICAgIC8vIGF1dGhcbiAgICAgICAgICAgICAgdXNlcjogcmVxdWVzdC51c2VyID8/IG51bGwsXG4gICAgICAgICAgICAgIHBhc3Nwb3J0OiB7XG4gICAgICAgICAgICAgICAgbG9naW46IHJlcXVlc3QubG9naW4uYmluZChyZXF1ZXN0KSBhcyBBdXRoQ29udGV4dFtcInBhc3Nwb3J0XCJdW1wibG9naW5cIl0sXG4gICAgICAgICAgICAgICAgbG9nb3V0OiByZXF1ZXN0LmxvZ291dC5iaW5kKHJlcXVlc3QpIGFzIEF1dGhDb250ZXh0W1wicGFzc3BvcnRcIl1bXCJsb2dvdXRcIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIHJlcGx5LFxuICAgICAgICAgICksXG4gICAgICAgICkpLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLnN5bmNlci5tb2RlbHNbYXBpLm1vZGVsTmFtZV07XG4gICAgICByZXR1cm4gdGhpcy5hc3luY0xvY2FsU3RvcmFnZS5ydW4oeyBjb250ZXh0IH0sIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBBcGlQYXJhbVR5cGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL3R5cGVzL3R5cGVzXCIpO1xuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IG1vZGVs7J2AIOuqqOuNuCDsnbjsiqTthLTsiqTsnbTrr4DroZwg66mU7ISc65OcIO2YuOy2nCDqsIDriqVcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKG1vZGVsIGFzIGFueSlbYXBpLm1ldGhvZE5hbWVdLmFwcGx5KFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIGFwaS5wYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IHtcbiAgICAgICAgICAgIC8vIENvbnRleHQg7J247KCd7IWYXG4gICAgICAgICAgICBpZiAoQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXFCb2R5W3BhcmFtLm5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXBseS50eXBlKGFwaS5vcHRpb25zLmNvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwiKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2F0Y2hlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB3YXRjaFBhdGggPSBbcGF0aC5qb2luKHRoaXMuYXBpUm9vdFBhdGgsIFwic3JjXCIpXTtcblxuICAgIGNvbnN0IGNob2tpZGFyID0gKGF3YWl0IGltcG9ydChcImNob2tpZGFyXCIpKS5kZWZhdWx0O1xuICAgIHRoaXMud2F0Y2hlciA9IGNob2tpZGFyLndhdGNoKHdhdGNoUGF0aCwge1xuICAgICAgaWdub3JlZDogKHBhdGgsIHN0YXRzKSA9PlxuICAgICAgICAhIXN0YXRzPy5pc0ZpbGUoKSAmJiAhcGF0aC5lbmRzV2l0aChcIi50c1wiKSAmJiAhcGF0aC5lbmRzV2l0aChcIi5qc29uXCIpLFxuICAgICAgcGVyc2lzdGVudDogdHJ1ZSxcbiAgICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLndhdGNoZXIub24oXCJhbGxcIiwgYXN5bmMgKGV2ZW50OiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGZpbGVQYXRoIGFzIEFic29sdXRlUGF0aDtcbiAgICAgIGFzc2VydChcbiAgICAgICAgYWJzb2x1dGVQYXRoLnN0YXJ0c1dpdGgodGhpcy5hcGlSb290UGF0aCksXG4gICAgICAgIFwiRmlsZSBwYXRoIGlzIG5vdCB3aXRoaW4gdGhlIEFQSSByb290IHBhdGhcIixcbiAgICAgICk7XG5cbiAgICAgIGlmIChldmVudCAhPT0gXCJjaGFuZ2VcIiAmJiBldmVudCAhPT0gXCJhZGRcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHNvbmFtdS5jb25maWcudHMg67OA6rK9IOyLnCDsnqzsi5zsnpFcbiAgICAgICAgY29uc3QgaXNDb25maWdUcyA9IGZpbGVQYXRoID09PSBwYXRoLmpvaW4odGhpcy5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJzb25hbXUuY29uZmlnLnRzXCIpO1xuXG4gICAgICAgIGlmIChpc0NvbmZpZ1RzKSB7XG4gICAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gZmlsZVBhdGgucmVwbGFjZSh0aGlzLmFwaVJvb3RQYXRoLCBcImFwaVwiKTtcbiAgICAgICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNoYWxrLmJvbGQoYERldGVjdGVkKCR7ZXZlbnR9KTogJHtjaGFsay5ibHVlKHJlbGF0aXZlUGF0aCl9IC0gUmVzdGFydGluZy4uLmApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCBcIlNJR1VTUjJcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlQ2hhbmdlKGV2ZW50LCBhYnNvbHV0ZVBhdGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICAgQSBmdW5jdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyBpbml0IGFuZCBkZXN0cm95IHdoZW4gdXNpbmcgU29uYW11IHZpYSBzY3JpcHRzLiAgICBcbiAgKi9cbiAgYXN5bmMgcnVuU2NyaXB0KGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgYXdhaXQgdGhpcy5pbml0KHRydWUsIGZhbHNlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3RlclBsdWdpbnMoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UsIHBsdWdpbnM6IFNvbmFtdVNlcnZlck9wdGlvbnNbXCJwbHVnaW5zXCJdKSB7XG4gICAgaWYgKCFwbHVnaW5zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGx1Z2luc01vZHVsZXMgPSB7XG4gICAgICBjb3JzOiBcIkBmYXN0aWZ5L2NvcnNcIixcbiAgICAgIGZvcm1ib2R5OiBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCIsXG4gICAgICBtdWx0aXBhcnQ6IFwiQGZhc3RpZnkvbXVsdGlwYXJ0XCIsXG4gICAgICBxczogXCJmYXN0aWZ5LXFzXCIsXG4gICAgICBzc2U6IFwiZmFzdGlmeS1zc2UtdjJcIixcbiAgICAgIHN0YXRpYzogXCJAZmFzdGlmeS9zdGF0aWNcIixcbiAgICAgIHNlc3Npb246IFwiQGZhc3RpZnkvc2VjdXJlLXNlc3Npb25cIixcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgY29uc3QgcmVnaXN0ZXJQbHVnaW4gPSBhc3luYyA8SyBleHRlbmRzIGtleW9mIE5vbk51bGxhYmxlPHR5cGVvZiBwbHVnaW5zPj4oXG4gICAgICBrZXk6IEssXG4gICAgICBwbHVnaW5OYW1lOiBzdHJpbmcsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb24gPSBwbHVnaW5zW2tleV07XG4gICAgICBpZiAoIW9wdGlvbikgcmV0dXJuO1xuXG4gICAgICBpZiAob3B0aW9uID09PSB0cnVlKSB7XG4gICAgICAgIHNlcnZlci5yZWdpc3RlcigoYXdhaXQgaW1wb3J0KHBsdWdpbk5hbWUpKS5kZWZhdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlcnZlci5yZWdpc3RlcigoYXdhaXQgaW1wb3J0KHBsdWdpbk5hbWUpKS5kZWZhdWx0LCBvcHRpb24pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHBsdWdpbk5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHBsdWdpbnNNb2R1bGVzKSkge1xuICAgICAgYXdhaXQgcmVnaXN0ZXJQbHVnaW4oa2V5IGFzIGtleW9mIHR5cGVvZiBwbHVnaW5zLCBwbHVnaW5OYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocGx1Z2lucy5jdXN0b20pIHtcbiAgICAgIHBsdWdpbnMuY3VzdG9tKHNlcnZlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3RlckF1dGgoXG4gICAgc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UsXG4gICAgb3B0aW9uczogTm9uTnVsbGFibGU8U29uYW11U2VydmVyT3B0aW9uc1tcImF1dGhcIl0+LFxuICApIHtcbiAgICAvLyBhd2FpdCBpbXBvcnQoXCJmYXN0aWZ5XCIpO1xuICAgIGNvbnN0IGZhc3RpZnlQYXNzcG9ydCA9IChhd2FpdCBpbXBvcnQoXCJAZmFzdGlmeS9wYXNzcG9ydFwiKSkuZGVmYXVsdDtcbiAgICBzZXJ2ZXIucmVnaXN0ZXIoZmFzdGlmeVBhc3Nwb3J0LmluaXRpYWxpemUoKSk7XG4gICAgc2VydmVyLnJlZ2lzdGVyKGZhc3RpZnlQYXNzcG9ydC5zZWN1cmVTZXNzaW9uKCkpO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImJvb2xlYW5cIikge1xuICAgICAgZmFzdGlmeVBhc3Nwb3J0LnJlZ2lzdGVyVXNlclNlcmlhbGl6ZXIoYXN5bmMgKHVzZXIsIF9yZXF1ZXN0KSA9PiB1c2VyKTtcbiAgICAgIGZhc3RpZnlQYXNzcG9ydC5yZWdpc3RlclVzZXJEZXNlcmlhbGl6ZXIoYXN5bmMgKHNlcmlhbGl6ZWQsIF9yZXF1ZXN0KSA9PiBzZXJpYWxpemVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFzdGlmeVBhc3Nwb3J0LnJlZ2lzdGVyVXNlclNlcmlhbGl6ZXIob3B0aW9ucy51c2VyU2VyaWFsaXplcik7XG4gICAgICBmYXN0aWZ5UGFzc3BvcnQucmVnaXN0ZXJVc2VyRGVzZXJpYWxpemVyKG9wdGlvbnMudXNlckRlc2VyaWFsaXplcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplV29ya2Zsb3dzKG9wdGlvbnM6IFNvbmFtdVRhc2tPcHRpb25zIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgeyBXb3JrZmxvd01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL3Rhc2tzL3dvcmtmbG93LW1hbmFnZXJcIik7XG4gICAgLy8gTk9URTogQHNvbmFtdS1raXQvdGFza3Mg7JWI7JeQ7ISgIGtuZXggY29uZmln66W8IOyImOygle2VmOq4sCDrlYzrrLjsl5AgY29ubmVjdGlvbuydtCDslYTri4wgY29uZmlnIOynuOuhnCDrs7Trg4Xri4jri6QuXG4gICAgdGhpcy5fd29ya2Zsb3dzID0gYXdhaXQgV29ya2Zsb3dNYW5hZ2VyLmNyZWF0ZShEQi5nZXREQkNvbmZpZyhcIndcIiksIHRydWUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVuYWJsZVdvcmtlciA9IG9wdGlvbnMuZW5hYmxlV29ya2VyID8/IGlzRGFlbW9uU2VydmVyKCk7XG4gICAgY29uc3QgZGVmYXVsdFdvcmtlck9wdGlvbnMgPSB7XG4gICAgICBjb25jdXJyZW5jeTogb3MuY3B1cygpLmxlbmd0aCAtIDEsXG4gICAgICB1c2VQdWJTdWI6IHRydWUsXG4gICAgICBsaXN0ZW5EZWxheTogNTAwLFxuICAgIH07XG5cbiAgICBpZiAoZW5hYmxlV29ya2VyKSB7XG4gICAgICBhd2FpdCB0aGlzLndvcmtmbG93cy5zZXR1cFdvcmtlcih7XG4gICAgICAgIC4uLmRlZmF1bHRXb3JrZXJPcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zLndvcmtlck9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJvb3Qoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UsIG9wdGlvbnM6IFNvbmFtdVNlcnZlck9wdGlvbnMpIHtcbiAgICBjb25zdCBwb3J0ID0gb3B0aW9ucy5saXN0ZW4/LnBvcnQgPz8gMzAwMDtcbiAgICBjb25zdCBob3N0ID0gb3B0aW9ucy5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIjtcblxuICAgIHNlcnZlci5hZGRIb29rKFwib25DbG9zZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBvcHRpb25zLmxpZmVjeWNsZT8ub25TaHV0ZG93bj8uKHNlcnZlcik7XG4gICAgICBhd2FpdCB0aGlzLndvcmtmbG93cy5kZXN0cm95KCk7XG4gICAgICBhd2FpdCB0aGlzLmRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNodXRkb3duID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIHNodXRkb3duOlwiLCBlcnIpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgc2h1dGRvd24pO1xuICAgIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIHNodXRkb3duKTtcblxuICAgIGlmIChvcHRpb25zLmxpZmVjeWNsZT8ub25FcnJvcikge1xuICAgICAgc2VydmVyLnNldEVycm9ySGFuZGxlcihvcHRpb25zLmxpZmVjeWNsZT8ub25FcnJvcik7XG4gICAgfVxuXG4gICAgc2VydmVyXG4gICAgICAubGlzdGVuKHsgcG9ydCwgaG9zdCB9KVxuICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBvcHRpb25zLmxpZmVjeWNsZT8ub25TdGFydD8uKHNlcnZlcik7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHQ7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiRmFpbGVkIHRvIHN0YXJ0IHNlcnZlcjpcIiwgZXJyKSk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlRmlsZUNoYW5nZShldmVudDogc3RyaW5nLCBmaWxlUGF0aDogQWJzb2x1dGVQYXRoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7LKrIOuyiOynuCDtjIzsnbzsnbTrqbQgSE1SIOyLnOyekSDsi5zqsIQg6riw66GdXG4gICAgaWYgKHRoaXMucGVuZGluZ0ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5obXJTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdGaWxlcy5wdXNoKGZpbGVQYXRoKTtcblxuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUodGhpcy5hcGlSb290UGF0aCwgZmlsZVBhdGgpO1xuICAgIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0O1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYERldGVjdGVkKCR7ZXZlbnR9KTogJHtjaGFsay5ibHVlKHJlbGF0aXZlUGF0aCl9YCkpO1xuXG4gICAgYXdhaXQgdGhpcy5zeW5jZXIuc3luY0Zyb21XYXRjaGVyKGV2ZW50LCBmaWxlUGF0aCk7XG5cbiAgICAvLyDsspjrpqwg7JmE66OM65CcIO2MjOydvOydhCDrjIDquLAg66qp66Gd7JeQ7IScIOygnOqxsFxuICAgIHRoaXMucGVuZGluZ0ZpbGVzID0gdGhpcy5wZW5kaW5nRmlsZXMuc2xpY2UoMSk7XG5cbiAgICAvLyDrqqjrk6Ag7YyM7J28IOyymOumrOqwgCDsmYTro4zrkJjrqbQg7LWc7KKFIOuplOyLnOyngCDstpzroKVcbiAgICBpZiAodGhpcy5wZW5kaW5nRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaEhNUigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluaXNoSE1SKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3luY2VyLnJlbmV3Q2hlY2tzdW1zKCk7XG5cbiAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0b3RhbFRpbWUgPSBlbmRUaW1lIC0gdGhpcy5obXJTdGFydFRpbWU7XG4gICAgY29uc3QgW2NoYWxrLCB7IGNlbnRlclRleHQgfV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHQsXG4gICAgICBpbXBvcnQoXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIiksXG4gICAgXSk7XG4gICAgY29uc3QgbXNnID0gYEhNUiBEb25lISAke2NoYWxrLmJvbGQud2hpdGUoYCR7dG90YWxUaW1lfW1zYCl9YDtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsYWNrLmJnR3JlZW4oY2VudGVyVGV4dChtc2cpKSk7XG4gIH1cblxuICBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgQmFzZU1vZGVsIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCIpO1xuICAgIGF3YWl0IEJhc2VNb2RlbC5kZXN0cm95KCk7XG4gICAgYXdhaXQgdGhpcy5fd29ya2Zsb3dzPy5kZXN0cm95KCk7XG4gICAgYXdhaXQgdGhpcy53YXRjaGVyPy5jbG9zZSgpO1xuICAgIHRoaXMuc3RvcmFnZT8uZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnQgY29uc3QgU29uYW11ID0gbmV3IFNvbmFtdUNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiQXN5bmNMb2NhbFN0b3JhZ2UiLCJvcyIsInBhdGgiLCJjcmVhdGVNb2NrU1NFRmFjdG9yeSIsIkRCIiwiaXNEYWVtb25TZXJ2ZXIiLCJOYWl0ZSIsIlNvbmFtdUNsYXNzIiwiaXNJbml0aWFsaXplZCIsImFzeW5jTG9jYWxTdG9yYWdlIiwidXBsb2FkU3RvcmFnZSIsImdldENvbnRleHQiLCJzdG9yZSIsImdldFN0b3JlIiwiY29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInJlcXVlc3QiLCJyZXBseSIsImhlYWRlcnMiLCJjcmVhdGVTU0UiLCJzY2hlbWEiLCJuYWl0ZVN0b3JlIiwiTWFwIiwiRXJyb3IiLCJnZXRVcGxvYWRDb250ZXh0IiwidXBsb2FkQ29udGV4dCIsIl9hcGlSb290UGF0aCIsImFwaVJvb3RQYXRoIiwiYXBwUm9vdFBhdGgiLCJzcGxpdCIsInNlcCIsInNsaWNlIiwiam9pbiIsIl9kYkNvbmZpZyIsImRiQ29uZmlnIiwiX3N5bmNlciIsInN5bmNlciIsIl9jb25maWciLCJjb25maWciLCJfc2VjcmV0cyIsInNlY3JldHMiLCJfc3RvcmFnZSIsInN0b3JhZ2UiLCJfd29ya2Zsb3dzIiwid29ya2Zsb3dzIiwid2F0Y2hlciIsInBlbmRpbmdGaWxlcyIsImhtclN0YXJ0VGltZSIsInNlcnZlciIsImluaXRGb3JUZXN0aW5nIiwiaW5pdCIsInVuZGVmaW5lZCIsImRvU2lsZW50IiwiZW5hYmxlU3luYyIsImZvclRlc3RpbmciLCJjaGFsayIsImRlZmF1bHQiLCJjb25zb2xlIiwidGltZSIsImN5YW4iLCJmaW5kQXBpUm9vdFBhdGgiLCJsb2FkQ29uZmlnIiwiZGF0YWJhc2UiLCJBTlRIUk9QSUNfQVBJX0tFWSIsImFudGhyb3BpY19hcGlfa2V5IiwiVk9ZQUdFX0FQSV9LRVkiLCJ2b3lhZ2VfYXBpX2tleSIsIk9QRU5BSV9BUElfS0VZIiwib3BlbmFpX2FwaV9rZXkiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiZ2VuZXJhdGVEQkNvbmZpZyIsImxvZyIsImdyZWVuIiwiRW50aXR5TWFuYWdlciIsImF1dG9sb2FkIiwiaW5pdGlhbGl6ZVdvcmtmbG93cyIsInRhc2tzIiwiU3luY2VyIiwiYXV0b2xvYWRUeXBlcyIsImF1dG9sb2FkTW9kZWxzIiwiYXV0b2xvYWRBcGlzIiwiYXV0b2xvYWRXb3JrZmxvd3MiLCJUZW1wbGF0ZU1hbmFnZXIiLCJpc0xvY2FsIiwiaXNUZXN0Iiwic2V0dXBCaW9tZSIsImlzSG90UmVsb2FkU2VydmVyIiwic3luYyIsInN0YXJ0V2F0Y2hlciIsInN5bmNVSSIsInRpbWVFbmQiLCJjcmVhdGVTZXJ2ZXIiLCJpbml0T3B0aW9ucyIsIm9wdGlvbnMiLCJmYXN0aWZ5IiwicGx1Z2lucyIsInJlZ2lzdGVyUGx1Z2lucyIsImF1dGgiLCJzZXNzaW9uIiwicmVnaXN0ZXJBdXRoIiwid2l0aEZhc3RpZnkiLCJhcGlDb25maWciLCJib290IiwidGltZXpvbmUiLCJhcGkiLCJmb3JtYXRJblRpbWVab25lIiwiSVNPX0RBVEVfUkVHRVgiLCJEQVRFX0ZPUk1BVCIsInNldFJlcGx5U2VyaWFsaXplciIsInBheWxvYWQiLCJKU09OIiwic3RyaW5naWZ5IiwiX2tleSIsInZhbHVlIiwidGVzdCIsIkRhdGUiLCJnZXQiLCJyb3V0ZSIsInByZWZpeCIsIl9yZXF1ZXN0IiwiX3JlcGx5IiwiYXBpcyIsImFsbCIsImZvdW5kIiwiZmluZCIsInVybCIsImh0dHBNZXRob2QiLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsImdldEFwaUhhbmRsZXIiLCJOb3RGb3VuZEV4Y2VwdGlvbiIsIm1vZGVscyIsIm1vZGVsTmFtZSIsImhhbmRsZXIiLCJndWFyZHMiLCJldmVyeSIsImd1YXJkIiwiZ3VhcmRIYW5kbGVyIiwiZ2V0Wm9kT2JqZWN0RnJvbUFwaSIsIlJlcVR5cGUiLCJ0eXBlcyIsIndoaWNoIiwicmVxQm9keSIsImZhc3RpZnlDYXN0ZXIiLCJwYXJzZSIsImUiLCJab2RFcnJvciIsImh1bWFuaXplWm9kRXJyb3IiLCJtZXNzYWdlcyIsIm1hcCIsImlzc3VlIiwibWVzc2FnZSIsIkJhZFJlcXVlc3RFeGNlcHRpb24iLCJ6b2RFcnJvciIsInR5cGUiLCJjb250ZW50VHlwZSIsImNyZWF0ZVNTRUZhY3RvcnkiLCJfZXZlbnRzIiwic29ja2V0IiwiYmluZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY29udGV4dFByb3ZpZGVyIiwiY3JlYXRlU3RvcmUiLCJ1c2VyIiwicGFzc3BvcnQiLCJsb2dpbiIsImxvZ291dCIsIm1vZGVsIiwicnVuIiwiQXBpUGFyYW1UeXBlIiwicmVzdWx0IiwibWV0aG9kTmFtZSIsImFwcGx5IiwicGFyYW1ldGVycyIsInBhcmFtIiwiaXNDb250ZXh0IiwibmFtZSIsIndhdGNoUGF0aCIsImNob2tpZGFyIiwid2F0Y2giLCJpZ25vcmVkIiwic3RhdHMiLCJpc0ZpbGUiLCJlbmRzV2l0aCIsInBlcnNpc3RlbnQiLCJpZ25vcmVJbml0aWFsIiwib24iLCJldmVudCIsImZpbGVQYXRoIiwiYWJzb2x1dGVQYXRoIiwic3RhcnRzV2l0aCIsImlzQ29uZmlnVHMiLCJyZWxhdGl2ZVBhdGgiLCJyZXBsYWNlIiwiYm9sZCIsImJsdWUiLCJraWxsIiwicGlkIiwiaGFuZGxlRmlsZUNoYW5nZSIsImVycm9yIiwicnVuU2NyaXB0IiwiZm4iLCJkZXN0cm95IiwicGx1Z2luc01vZHVsZXMiLCJjb3JzIiwiZm9ybWJvZHkiLCJtdWx0aXBhcnQiLCJxcyIsInNzZSIsInN0YXRpYyIsInJlZ2lzdGVyUGx1Z2luIiwia2V5IiwicGx1Z2luTmFtZSIsIm9wdGlvbiIsInJlZ2lzdGVyIiwiZW50cmllcyIsImN1c3RvbSIsImZhc3RpZnlQYXNzcG9ydCIsImluaXRpYWxpemUiLCJzZWN1cmVTZXNzaW9uIiwicmVnaXN0ZXJVc2VyU2VyaWFsaXplciIsInJlZ2lzdGVyVXNlckRlc2VyaWFsaXplciIsInNlcmlhbGl6ZWQiLCJ1c2VyU2VyaWFsaXplciIsInVzZXJEZXNlcmlhbGl6ZXIiLCJXb3JrZmxvd01hbmFnZXIiLCJjcmVhdGUiLCJnZXREQkNvbmZpZyIsImVuYWJsZVdvcmtlciIsImRlZmF1bHRXb3JrZXJPcHRpb25zIiwiY29uY3VycmVuY3kiLCJjcHVzIiwidXNlUHViU3ViIiwibGlzdGVuRGVsYXkiLCJzZXR1cFdvcmtlciIsIndvcmtlck9wdGlvbnMiLCJwb3J0IiwibGlzdGVuIiwiaG9zdCIsImFkZEhvb2siLCJsaWZlY3ljbGUiLCJvblNodXRkb3duIiwic2h1dGRvd24iLCJjbG9zZSIsImV4aXQiLCJlcnIiLCJvbkVycm9yIiwic2V0RXJyb3JIYW5kbGVyIiwidGhlbiIsIm9uU3RhcnQiLCJjYXRjaCIsInJlZCIsIm5vdyIsInB1c2giLCJyZWxhdGl2ZSIsInN5bmNGcm9tV2F0Y2hlciIsImZpbmlzaEhNUiIsInJlbmV3Q2hlY2tzdW1zIiwiZW5kVGltZSIsInRvdGFsVGltZSIsImNlbnRlclRleHQiLCJtc2ciLCJ3aGl0ZSIsImJsYWNrIiwiYmdHcmVlbiIsIkJhc2VNb2RlbCIsIlNvbmFtdSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLFNB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
|
|
529
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvc29uYW11LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiYXN5bmNfaG9va3NcIjtcbmltcG9ydCB0eXBlIHsgRlNXYXRjaGVyIH0gZnJvbSBcImNob2tpZGFyXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlJbnN0YW5jZSwgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IEluY29taW5nTWVzc2FnZSwgU2VydmVyLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBab2RPYmplY3QgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrU1NFRmFjdG9yeSwgREIsIGlzRGFlbW9uU2VydmVyIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlciB9IGZyb20gXCIuLi9maWxlLXN0b3JhZ2UvZHJpdmVyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBTeW5jZXIgfSBmcm9tIFwiLi4vc3luY2VyL3N5bmNlclwiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd01hbmFnZXIgfSBmcm9tIFwiLi4vdGFza3Mvd29ya2Zsb3ctbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBTb25hbXVGYXN0aWZ5Q29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdUNvbmZpZywgU29uYW11U2VydmVyT3B0aW9ucywgU29uYW11VGFza09wdGlvbnMgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQXV0aENvbnRleHQsIENvbnRleHQsIFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgdHlwZSBTb25hbXVTZWNyZXRzID0ge1xuICBhbnRocm9waWNfYXBpX2tleT86IHN0cmluZztcbiAgdm95YWdlX2FwaV9rZXk/OiBzdHJpbmc7XG4gIG9wZW5haV9hcGlfa2V5Pzogc3RyaW5nO1xufTtcbmNsYXNzIFNvbmFtdUNsYXNzIHtcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGFzeW5jTG9jYWxTdG9yYWdlOiBBc3luY0xvY2FsU3RvcmFnZTx7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgfT4gPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2UoKTtcblxuICBwdWJsaWMgdXBsb2FkU3RvcmFnZTogQXN5bmNMb2NhbFN0b3JhZ2U8e1xuICAgIHVwbG9hZENvbnRleHQ6IFVwbG9hZENvbnRleHQ7XG4gIH0+ID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlKCk7XG5cbiAgcHVibGljIGdldENvbnRleHQoKTogQ29udGV4dCB7XG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmFzeW5jTG9jYWxTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKHN0b3JlPy5jb250ZXh0KSB7XG4gICAgICByZXR1cm4gc3RvcmUuY29udGV4dDtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICAvLyDthYzsiqTtjIUg7ZmY6rK97JeQ7IScIOy7qO2FjeyKpO2KuOqwgCDso7zsnoXrkJjsp4Ag7JWK7J2AIOqyveyasCDruYgg7Luo7YWN7Iqk7Yq4IOumrO2EtFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWVzdDogbnVsbCxcbiAgICAgICAgcmVwbHk6IG51bGwsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBjcmVhdGVTU0U6IChzY2hlbWE6IFpvZE9iamVjdCkgPT4gY3JlYXRlTW9ja1NTRUZhY3Rvcnkoc2NoZW1hKSxcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDthYzsiqTtjIUg7ZmY6rK97JeQ7IScIOy7qO2FjeyKpO2KuOqwgCDso7zsnoXrkJjsp4Ag7JWK7J2AIOqyveyasCDruYgg7Luo7YWN7Iqk7Yq4IOumrO2EtFxuICAgICAgICBuYWl0ZVN0b3JlOiBuZXcgTWFwPHN0cmluZywgYW55PigpLFxuICAgICAgfSBhcyB1bmtub3duIGFzIENvbnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbmFtdSBjYW5ub3QgZmluZCBjb250ZXh0XCIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRVcGxvYWRDb250ZXh0KCk6IFVwbG9hZENvbnRleHQge1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy51cGxvYWRTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKHN0b3JlPy51cGxvYWRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gc3RvcmUudXBsb2FkQ29udGV4dDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU29uYW11IGNhbm5vdCBmaW5kIHVwbG9hZCBjb250ZXh0LiBEaWQgeW91IHVzZSBAdXBsb2FkIGRlY29yYXRvcj9cIik7XG4gIH1cblxuICBwcml2YXRlIF9hcGlSb290UGF0aDogQWJzb2x1dGVQYXRoIHwgbnVsbCA9IG51bGw7XG4gIHNldCBhcGlSb290UGF0aChhcGlSb290UGF0aDogQWJzb2x1dGVQYXRoKSB7XG4gICAgdGhpcy5fYXBpUm9vdFBhdGggPSBhcGlSb290UGF0aDtcbiAgfVxuICBnZXQgYXBpUm9vdFBhdGgoKTogQWJzb2x1dGVQYXRoIHtcbiAgICBpZiAodGhpcy5fYXBpUm9vdFBhdGggPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbmFtdSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWRcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcGlSb290UGF0aDtcbiAgfVxuICBnZXQgYXBwUm9vdFBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGlSb290UGF0aC5zcGxpdChwYXRoLnNlcCkuc2xpY2UoMCwgLTEpLmpvaW4ocGF0aC5zZXApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGJDb25maWc6IFNvbmFtdURCQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIHNldCBkYkNvbmZpZyhkYkNvbmZpZzogU29uYW11REJDb25maWcpIHtcbiAgICB0aGlzLl9kYkNvbmZpZyA9IGRiQ29uZmlnO1xuICB9XG4gIGdldCBkYkNvbmZpZygpOiBTb25hbXVEQkNvbmZpZyB7XG4gICAgaWYgKHRoaXMuX2RiQ29uZmlnID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGJDb25maWc7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jZXI6IFN5bmNlciB8IG51bGwgPSBudWxsO1xuICBzZXQgc3luY2VyKHN5bmNlcjogU3luY2VyKSB7XG4gICAgdGhpcy5fc3luY2VyID0gc3luY2VyO1xuICB9XG4gIGdldCBzeW5jZXIoKTogU3luY2VyIHtcbiAgICBpZiAodGhpcy5fc3luY2VyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3luY2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlnOiBTb25hbXVDb25maWcgfCBudWxsID0gbnVsbDtcbiAgc2V0IGNvbmZpZyhjb25maWc6IFNvbmFtdUNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgfVxuICBnZXQgY29uZmlnKCk6IFNvbmFtdUNvbmZpZyB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29uYW11IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgX3NlY3JldHM6IFNvbmFtdVNlY3JldHMgfCBudWxsID0gbnVsbDtcbiAgc2V0IHNlY3JldHMoc2VjcmV0czogU29uYW11U2VjcmV0cykge1xuICAgIHRoaXMuX3NlY3JldHMgPSBzZWNyZXRzO1xuICB9XG4gIGdldCBzZWNyZXRzKCk6IFNvbmFtdVNlY3JldHMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjcmV0cztcbiAgfVxuXG4gIHByaXZhdGUgX3N0b3JhZ2U6IERyaXZlciB8IG51bGwgPSBudWxsO1xuICBzZXQgc3RvcmFnZShzdG9yYWdlOiBEcml2ZXIpIHtcbiAgICB0aGlzLl9zdG9yYWdlID0gc3RvcmFnZTtcbiAgfVxuICBnZXQgc3RvcmFnZSgpOiBEcml2ZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZTtcbiAgfVxuXG4gIHByaXZhdGUgX3dvcmtmbG93czogV29ya2Zsb3dNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gIGdldCB3b3JrZmxvd3MoKTogV29ya2Zsb3dNYW5hZ2VyIHtcbiAgICBpZiAodGhpcy5fd29ya2Zsb3dzID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JrZmxvd3M7XG4gIH1cblxuICAvLyBITVIg7LKY66asXG4gIHB1YmxpYyB3YXRjaGVyOiBGU1dhdGNoZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZW5kaW5nRmlsZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgaG1yU3RhcnRUaW1lOiBudW1iZXIgPSAwO1xuXG4gIHB1YmxpYyBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuXG4gIGFzeW5jIGluaXRGb3JUZXN0aW5nKCkge1xuICAgIGF3YWl0IHRoaXMuaW5pdCh0cnVlLCBmYWxzZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQoXG4gICAgZG9TaWxlbnQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBlbmFibGVTeW5jOiBib29sZWFuID0gdHJ1ZSxcbiAgICBhcGlSb290UGF0aD86IEFic29sdXRlUGF0aCxcbiAgICBmb3JUZXN0aW5nOiBib29sZWFuID0gZmFsc2UsXG4gICkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRvU2lsZW50KSB7XG4gICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgIGNvbnNvbGUudGltZShjaGFsay5jeWFuKGBTb25hbXUuaW5pdCR7Zm9yVGVzdGluZyA/IFwiIGZvciB0ZXN0aW5nXCIgOiBcIlwifWApKTtcbiAgICB9XG5cbiAgICAvLyBBUEkg66Oo7Yq4IO2MqOyKpFxuICAgIGNvbnN0IHsgZmluZEFwaVJvb3RQYXRoIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy91dGlsc1wiKTtcbiAgICB0aGlzLmFwaVJvb3RQYXRoID0gYXBpUm9vdFBhdGggPz8gZmluZEFwaVJvb3RQYXRoKCk7XG5cbiAgICBjb25zdCB7IGxvYWRDb25maWcgfSA9IGF3YWl0IGltcG9ydChcIi4vY29uZmlnXCIpO1xuICAgIHRoaXMuY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyh0aGlzLmFwaVJvb3RQYXRoKTtcbiAgICAvLyBzb25hbXUuY29uZmlnLnRzIOq4sOuzuOqwkiDshKTsoJVcbiAgICB0aGlzLmNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSA9IHRoaXMuY29uZmlnLmRhdGFiYXNlLmRhdGFiYXNlID8/IFwicG9zdGdyZXNxbFwiO1xuXG4gICAgLy8gQVBJIO2CpCDtmZjqsr3rs4DsiJgg66Gc65OcXG4gICAgY29uc3Qgc2VjcmV0czogU29uYW11U2VjcmV0cyA9IHt9O1xuICAgIGlmIChwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWSkge1xuICAgICAgc2VjcmV0cy5hbnRocm9waWNfYXBpX2tleSA9IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuVk9ZQUdFX0FQSV9LRVkpIHtcbiAgICAgIHNlY3JldHMudm95YWdlX2FwaV9rZXkgPSBwcm9jZXNzLmVudi5WT1lBR0VfQVBJX0tFWTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZKSB7XG4gICAgICBzZWNyZXRzLm9wZW5haV9hcGlfa2V5ID0gcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVk7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhzZWNyZXRzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlY3JldHMgPSBzZWNyZXRzO1xuICAgIH1cblxuICAgIC8vIERCIOuhnOuTnFxuICAgIGNvbnN0IHsgREIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2RhdGFiYXNlL2RiXCIpO1xuICAgIHRoaXMuZGJDb25maWcgPSBEQi5nZW5lcmF0ZURCQ29uZmlnKHRoaXMuY29uZmlnLmRhdGFiYXNlKTtcbiAgICBpZiAoIWRvU2lsZW50KSB7XG4gICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKFwiREIgQ29uZmlnIExvYWRlZCFcIikpO1xuICAgIH1cblxuICAgIC8vIEVudGl0eSDroZzrk5xcbiAgICAvLyDthYzsiqTtirjsl5DshJzrj4QgRW50aXR5IOygleuztOuKlCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8gdXBzZXJ06rCAIOygnOuMgOuhnCDsnpHrj5ntlZjroKTrqbQgZW50aXR57J2YIHVuaXF1ZSBpbmRleCDsoJXrs7TqsIAg7ZWE7JqU7ZWY6riwIOuVjOusuOyeheuLiOuLpC5cbiAgICBjb25zdCB7IEVudGl0eU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiKTtcbiAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKGRvU2lsZW50KTtcblxuICAgIC8vIO2FjOyKpO2MheyduCDqsr3smrAg7Iux7YGsIOyXhuydtCDspJHri6hcbiAgICBpZiAoZm9yVGVzdGluZykge1xuICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUYXNrIOuTseuhnVxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVdvcmtmbG93cyh0aGlzLmNvbmZpZy50YXNrcyk7XG5cbiAgICAvLyBTeW5jZXJcbiAgICBjb25zdCB7IFN5bmNlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vc3luY2VyL3N5bmNlclwiKTtcbiAgICB0aGlzLnN5bmNlciA9IG5ldyBTeW5jZXIoKTtcblxuICAgIC8vIEF1dG9sb2FkOiBNb2RlbHMgLyBUeXBlcyAvIEFQSXNcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZFR5cGVzKCk7XG4gICAgYXdhaXQgdGhpcy5zeW5jZXIuYXV0b2xvYWRNb2RlbHMoKTtcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZEFwaXMoKTtcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZFdvcmtmbG93cygpO1xuXG4gICAgY29uc3QgeyBUZW1wbGF0ZU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL3RlbXBsYXRlXCIpO1xuICAgIGF3YWl0IFRlbXBsYXRlTWFuYWdlci5hdXRvbG9hZCgpO1xuXG4gICAgY29uc3QgeyBpc0xvY2FsLCBpc1Rlc3QgfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIik7XG4gICAgaWYgKGlzTG9jYWwoKSkge1xuICAgICAgLy8g66Gc7Lus7JeQ7ISc64qUIOy9lOuTnCDsg53shLHsnYQg7JyE7ZW0IEJpb21lIOyFi+yXheydtCDtlYTsmpTtlaggKO2YhOyerCBhcGlSb290UGF0aCDsoITri6ztlZjsl6wg7Iuk7ZaJKVxuICAgICAgKGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2Zvcm1hdHRlclwiKSkuc2V0dXBCaW9tZSh0aGlzLmFwaVJvb3RQYXRoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGlzSG90UmVsb2FkU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9jb250cm9sbGVyXCIpO1xuICAgIGlmIChpc0xvY2FsKCkgJiYgIWlzVGVzdCgpICYmIGlzSG90UmVsb2FkU2VydmVyKCkgJiYgZW5hYmxlU3luYykge1xuICAgICAgYXdhaXQgdGhpcy5zeW5jZXIuc3luYygpO1xuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0V2F0Y2hlcigpO1xuICAgIH1cblxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgaWYgKCFkb1NpbGVudCkge1xuICAgICAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHQ7XG4gICAgICBjb25zb2xlLnRpbWVFbmQoY2hhbGsuY3lhbihcIlNvbmFtdS5pbml0XCIpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXJ2ZXIoaW5pdE9wdGlvbnM/OiB7IGVuYWJsZVN5bmM/OiBib29sZWFuOyBkb1NpbGVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXQoaW5pdE9wdGlvbnM/LmRvU2lsZW50LCBpbml0T3B0aW9ucz8uZW5hYmxlU3luYyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY29uZmlnLnNlcnZlcjtcbiAgICBjb25zdCBmYXN0aWZ5ID0gKGF3YWl0IGltcG9ydChcImZhc3RpZnlcIikpLmRlZmF1bHQ7XG4gICAgY29uc3Qgc2VydmVyID0gZmFzdGlmeShvcHRpb25zLmZhc3RpZnkpO1xuICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuXG4gICAgLy8gU3RvcmFnZSDshKTsoJUg7KCA7J6lXG4gICAgaWYgKG9wdGlvbnMuc3RvcmFnZSkge1xuICAgICAgdGhpcy5zdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlO1xuICAgIH1cblxuICAgIC8vIO2UjOufrOq3uOyduCDrk7HroZ1cbiAgICBpZiAob3B0aW9ucy5wbHVnaW5zKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyUGx1Z2lucyhzZXJ2ZXIsIG9wdGlvbnMucGx1Z2lucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYXV0aCkge1xuICAgICAgaWYgKCFvcHRpb25zLnBsdWdpbnM/LnNlc3Npb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXV0aCByZXF1aXJlcyBzZXNzaW9uIHBsdWdpbi4gUGxlYXNlIGFkZCBwbHVnaW5zLnNlc3Npb24gY29uZmlndXJhdGlvbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJBdXRoKHNlcnZlciwgb3B0aW9ucy5hdXRoKTtcbiAgICB9XG5cbiAgICAvLyBBUEkg65287Jqw7YyFIOyEpOyglVxuICAgIGF3YWl0IHRoaXMud2l0aEZhc3RpZnkoc2VydmVyLCBvcHRpb25zLmFwaUNvbmZpZywge1xuICAgICAgZW5hYmxlU3luYzogaW5pdE9wdGlvbnM/LmVuYWJsZVN5bmMsXG4gICAgICBkb1NpbGVudDogaW5pdE9wdGlvbnM/LmRvU2lsZW50LFxuICAgIH0pO1xuXG4gICAgLy8g7ISc67KEIOyLnOyekVxuICAgIGF3YWl0IHRoaXMuYm9vdChzZXJ2ZXIsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHNlcnZlcjtcbiAgfVxuXG4gIGFzeW5jIHdpdGhGYXN0aWZ5KFxuICAgIHNlcnZlcjogRmFzdGlmeUluc3RhbmNlPFNlcnZlciwgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZT4sXG4gICAgY29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBlbmFibGVTeW5jPzogYm9vbGVhbjtcbiAgICAgIGRvU2lsZW50PzogYm9vbGVhbjtcbiAgICB9LFxuICApIHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0KG9wdGlvbnM/LmRvU2lsZW50LCBvcHRpb25zPy5lbmFibGVTeW5jKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlcnZlciA9IHNlcnZlcjtcblxuICAgIC8vIHRpbWV6b25lIOyEpOyglVxuICAgIGNvbnN0IHRpbWV6b25lID0gdGhpcy5jb25maWcuYXBpLnRpbWV6b25lO1xuICAgIGlmICh0aW1lem9uZSkge1xuICAgICAgLy8g7YOA7J6E7KG07JeQIOunnuqyjCDsnZHri7Ug64Kg7KecIOyKpO2KuOungeydhCDrs4DtmZjtlbTso7zslrTslbwg7ZWp64uI64ukLlxuICAgICAgLy8g6rCA66C5IHRpbWV6b25l7J20IFwiQXNpYS9TZW91bFwiIOydtOuptFxuICAgICAgLy8gXCIyMDI1LTExLTIxVDAwOjAwOjAwLjAwMFpcIiDrpbwgXCIyMDI1LTExLTIxVDA5OjAwOjAwKzA5OjAwXCIg7Jy866GcIOuzgO2ZmO2VtOyjvOyWtOyVvCDtlanri4jri6QuXG4gICAgICBjb25zdCB7IGZvcm1hdEluVGltZVpvbmUgfSA9IGF3YWl0IGltcG9ydChcImRhdGUtZm5zLXR6XCIpO1xuXG4gICAgICAvLyBJU08gODYwMSDrgqDsp5wg7ZiV7IudIOygleq3nOyLnSAo7JiIOiAyMDI0LTAxLTE1VDA5OjMwOjAwLjAwMFopXG4gICAgICBjb25zdCBJU09fREFURV9SRUdFWCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oXFwuXFxkezN9KT9aJC87XG5cbiAgICAgIC8vIFTrpbwg65GY65+s7Iu8IOyekeydgOuUsOyYtO2RnOqwgCDsl4bri6TrqbQgXCIyMDI1LTExLTE5MTc2MzU0NjE4OTAwMDE4OjU2OjI5KzA5OjAwXCLsmYAg6rCZ7J2AIOqysOqzvOqwgCDrgpjsmLXri4jri6QuXG4gICAgICAvLyDsnbTripQgZGF0ZS1mbnMg7Yq57J6F64uI64ukLlxuICAgICAgLy8g7J2066CH6rKMIO2VtOuPhCDqtJzssK7sirXri4jri6QuIFwiMjAyNS0xMS0xOVQxODo1NjoyOSswOTowMFwiIOuqqOyWkeycvOuhnCDsnpgg64KY7Ji164uI64ukLlxuICAgICAgY29uc3QgREFURV9GT1JNQVQgPSBcInl5eXktTU0tZGQnVCdISDptbTpzc1hYWFwiO1xuXG4gICAgICBzZXJ2ZXIuc2V0UmVwbHlTZXJpYWxpemVyKChwYXlsb2FkKSA9PiB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwYXlsb2FkLCAoX2tleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIElTT19EQVRFX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0SW5UaW1lWm9uZShcbiAgICAgICAgICAgICAgbmV3IERhdGUodmFsdWUpLFxuICAgICAgICAgICAgICB0aW1lem9uZSBhcyBgJHtzdHJpbmd9LyR7c3RyaW5nfWAsXG4gICAgICAgICAgICAgIERBVEVfRk9STUFULFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFvcHRpb25zPy5kb1NpbGVudCkge1xuICAgICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYFRpbWV6b25lIHNldCB0byAke3RpbWV6b25lfWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDsoITssrQg65287Jqw7YyFIOumrOyKpO2KuFxuICAgIHNlcnZlci5nZXQoXG4gICAgICBgJHt0aGlzLmNvbmZpZy5hcGkucm91dGUucHJlZml4fS9yb3V0ZXNgLFxuICAgICAgYXN5bmMgKF9yZXF1ZXN0LCBfcmVwbHkpOiBQcm9taXNlPHR5cGVvZiB0aGlzLnN5bmNlci5hcGlzPiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bmNlci5hcGlzO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gSGVhbHRoY2hlY2sgQVBJXG4gICAgc2VydmVyLmdldChcbiAgICAgIGAke3RoaXMuY29uZmlnLmFwaS5yb3V0ZS5wcmVmaXh9L2hlYWx0aGNoZWNrYCxcbiAgICAgIGFzeW5jIChfcmVxdWVzdCwgX3JlcGx5KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICAgICAgcmV0dXJuIFwib2tcIjtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFNvbmFtdSBVSSBBUElcbiAgICBjb25zdCB7IHNvbmFtdVVJQXBpUGx1Z2luIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91aS9hcGlcIik7XG4gICAgc2VydmVyLnJlZ2lzdGVyKHNvbmFtdVVJQXBpUGx1Z2luKTtcblxuICAgIC8vIEFQSSDrnbzsmrDtjIUgKOuhnOy7rEhNUiDsg4Htg5zsmYAg6rWs67aEKVxuICAgIGNvbnN0IHsgaXNMb2NhbCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvY29udHJvbGxlclwiKTtcbiAgICBpZiAoaXNMb2NhbCgpKSB7XG4gICAgICBzZXJ2ZXIuYWxsKFwiKlwiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgLy8gU29uYW11IFVJXG4gICAgICAgIGlmIChyZXF1ZXN0LnVybC5zdGFydHNXaXRoKFwiL3NvbmFtdS11aVwiKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zeW5jZXIuYXBpcy5maW5kKFxuICAgICAgICAgIChhcGkpID0+XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5hcGkucm91dGUucHJlZml4ICsgYXBpLnBhdGggPT09IHJlcXVlc3QudXJsLnNwbGl0KFwiP1wiKVswXSAmJlxuICAgICAgICAgICAgKGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPz8gXCJHRVRcIikgPT09IHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEFwaUhhbmRsZXIoZm91bmQsIGNvbmZpZykocmVxdWVzdCwgcmVwbHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3QudXJsLnN0YXJ0c1dpdGgoXCIvYXBpL1wiKSkge1xuICAgICAgICAgIGNvbnN0IHsgTm90Rm91bmRFeGNlcHRpb24gfSA9IGF3YWl0IGltcG9ydChcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiKTtcbiAgICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oYOyhtOyerO2VmOyngCDslYrripQgQVBJIOygkeq3vOyeheuLiOuLpC4gJHtyZXF1ZXN0LnVybH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOydvOuwmCDtjIzsnbwg7KCR6re87IucIOuzhOuPhOydmCDsl5Drn6wg7Lac66Cl7ZWY7KeAIOyViuydjFxuICAgICAgICByZXR1cm47XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBhcGkgb2YgdGhpcy5zeW5jZXIuYXBpcykge1xuICAgICAgICAvLyBtb2RlbFxuICAgICAgICBpZiAodGhpcy5zeW5jZXIubW9kZWxzW2FwaS5tb2RlbE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOygleydmOuQmOyngCDslYrsnYAg66qo64247JeQIOygkeq3vCAke2FwaS5tb2RlbE5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByb3V0ZVxuICAgICAgICBzZXJ2ZXIucm91dGUoe1xuICAgICAgICAgIG1ldGhvZDogYXBpLm9wdGlvbnMuaHR0cE1ldGhvZCA/PyBcIkdFVFwiLFxuICAgICAgICAgIHVybDogdGhpcy5jb25maWcuYXBpLnJvdXRlLnByZWZpeCArIGFwaS5wYXRoLFxuICAgICAgICAgIGhhbmRsZXI6IHRoaXMuZ2V0QXBpSGFuZGxlcihhcGksIGNvbmZpZyksXG4gICAgICAgIH0pOyAvLyBFTkQgc2VydmVyLnJvdXRlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBpSGFuZGxlcihcbiAgICBhcGk6IEV4dGVuZGVkQXBpLFxuICAgIGNvbmZpZzogU29uYW11RmFzdGlmeUNvbmZpZyxcbiAgKTogKHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gYXN5bmMgKHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KTogUHJvbWlzZTx1bmtub3duPiA9PiB7XG4gICAgICAoYXBpLm9wdGlvbnMuZ3VhcmRzID8/IFtdKS5ldmVyeSgoZ3VhcmQpID0+IGNvbmZpZy5ndWFyZEhhbmRsZXIoZ3VhcmQsIHJlcXVlc3QsIGFwaSkpO1xuXG4gICAgICAvLyDtjIzrnbzrr7jthLAg7KCV67O066GcIHpvZCDsiqTtgqTrp4gg67mM65OcXG4gICAgICBjb25zdCB7IGdldFpvZE9iamVjdEZyb21BcGkgfSA9IGF3YWl0IGltcG9ydChcIi4vY29kZS1jb252ZXJ0ZXJzXCIpO1xuICAgICAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGkoYXBpLCB0aGlzLnN5bmNlci50eXBlcyk7XG5cbiAgICAgIC8vIHJlcXVlc3Qg7YyM7IuxXG4gICAgICBjb25zdCB3aGljaCA9IGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPT09IFwiR0VUXCIgPyBcInF1ZXJ5XCIgOiBcImJvZHlcIjtcbiAgICAgIGxldCByZXFCb2R5OiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBmYXN0aWZ5Q2FzdGVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2Nhc3RlclwiKTtcbiAgICAgICAgcmVxQm9keSA9IGZhc3RpZnlDYXN0ZXIoUmVxVHlwZSkucGFyc2UocmVxdWVzdFt3aGljaF0gPz8ge30pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCB7IFpvZEVycm9yIH0gPSBhd2FpdCBpbXBvcnQoXCJ6b2RcIik7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgWm9kRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB7IGh1bWFuaXplWm9kRXJyb3IgfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL3pvZC1lcnJvclwiKTtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IGh1bWFuaXplWm9kRXJyb3IoZSlcbiAgICAgICAgICAgIC5tYXAoKGlzc3VlKSA9PiBpc3N1ZS5tZXNzYWdlKVxuICAgICAgICAgICAgLmpvaW4oXCIgXCIpO1xuICAgICAgICAgIGNvbnN0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCIpO1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKG1lc3NhZ2VzLCB7XG4gICAgICAgICAgICB6b2RFcnJvcjogZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRlbnQtVHlwZVxuICAgICAgcmVwbHkudHlwZShhcGkub3B0aW9ucy5jb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIik7XG5cbiAgICAgIC8vIGNyZWF0ZVNTRUZhY3Rvcnkg7ZWo7IiY7JeQIOuvuOumrCByZXF1ZXN07J2YIHNvY2tldOqzvCByZXBseeulvCDrsJTsnbjrlKkuXG4gICAgICBjb25zdCB7IGNyZWF0ZVNTRUZhY3RvcnkgfSA9IGF3YWl0IGltcG9ydChcIi4uL3N0cmVhbS9zc2VcIik7XG4gICAgICBjb25zdCBjcmVhdGVTU0UgPSAoPFQgZXh0ZW5kcyBab2RPYmplY3Q+KFxuICAgICAgICBfcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsXG4gICAgICAgIF9yZXBseTogRmFzdGlmeVJlcGx5LFxuICAgICAgICBfZXZlbnRzOiBULFxuICAgICAgKSA9PiBjcmVhdGVTU0VGYWN0b3J5KF9yZXF1ZXN0LnNvY2tldCwgX3JlcGx5LCBfZXZlbnRzKSkuYmluZChudWxsLCByZXF1ZXN0LCByZXBseSk7XG5cbiAgICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gICAgICAgIC4uLihhd2FpdCBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29uZmlnLmNvbnRleHRQcm92aWRlcihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgcmVwbHksXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycyxcbiAgICAgICAgICAgICAgY3JlYXRlU1NFLFxuICAgICAgICAgICAgICBuYWl0ZVN0b3JlOiBOYWl0ZS5jcmVhdGVTdG9yZSgpLFxuICAgICAgICAgICAgICAvLyBhdXRoXG4gICAgICAgICAgICAgIHVzZXI6IHJlcXVlc3QudXNlciA/PyBudWxsLFxuICAgICAgICAgICAgICBwYXNzcG9ydDoge1xuICAgICAgICAgICAgICAgIGxvZ2luOiByZXF1ZXN0LmxvZ2luLmJpbmQocmVxdWVzdCkgYXMgQXV0aENvbnRleHRbXCJwYXNzcG9ydFwiXVtcImxvZ2luXCJdLFxuICAgICAgICAgICAgICAgIGxvZ291dDogcmVxdWVzdC5sb2dvdXQuYmluZChyZXF1ZXN0KSBhcyBBdXRoQ29udGV4dFtcInBhc3Nwb3J0XCJdW1wibG9nb3V0XCJdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICByZXBseSxcbiAgICAgICAgICApLFxuICAgICAgICApKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zeW5jZXIubW9kZWxzW2FwaS5tb2RlbE5hbWVdO1xuICAgICAgcmV0dXJuIHRoaXMuYXN5bmNMb2NhbFN0b3JhZ2UucnVuKHsgY29udGV4dCB9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgQXBpUGFyYW1UeXBlIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi90eXBlcy90eXBlc1wiKTtcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBtb2RlbOydgCDrqqjrjbgg7J247Iqk7YS07Iqk7J2066+A66GcIOuplOyEnOuTnCDtmLjstpwg6rCA64qlXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChtb2RlbCBhcyBhbnkpW2FwaS5tZXRob2ROYW1lXS5hcHBseShcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBhcGkucGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAvLyBDb250ZXh0IOyduOygneyFmFxuICAgICAgICAgICAgaWYgKEFwaVBhcmFtVHlwZS5pc0NvbnRleHQocGFyYW0udHlwZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gcmVxQm9keVtwYXJhbS5uYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgcmVwbHkudHlwZShhcGkub3B0aW9ucy5jb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIik7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBhc3luYyBzdGFydFdhdGNoZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgd2F0Y2hQYXRoID0gW3BhdGguam9pbih0aGlzLmFwaVJvb3RQYXRoLCBcInNyY1wiKV07XG5cbiAgICBjb25zdCBjaG9raWRhciA9IChhd2FpdCBpbXBvcnQoXCJjaG9raWRhclwiKSkuZGVmYXVsdDtcbiAgICB0aGlzLndhdGNoZXIgPSBjaG9raWRhci53YXRjaCh3YXRjaFBhdGgsIHtcbiAgICAgIGlnbm9yZWQ6IChwYXRoLCBzdGF0cykgPT5cbiAgICAgICAgISFzdGF0cz8uaXNGaWxlKCkgJiYgIXBhdGguZW5kc1dpdGgoXCIudHNcIikgJiYgIXBhdGguZW5kc1dpdGgoXCIuanNvblwiKSxcbiAgICAgIHBlcnNpc3RlbnQ6IHRydWUsXG4gICAgICBpZ25vcmVJbml0aWFsOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy53YXRjaGVyLm9uKFwiYWxsXCIsIGFzeW5jIChldmVudDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBmaWxlUGF0aCBhcyBBYnNvbHV0ZVBhdGg7XG4gICAgICBhc3NlcnQoXG4gICAgICAgIGFic29sdXRlUGF0aC5zdGFydHNXaXRoKHRoaXMuYXBpUm9vdFBhdGgpLFxuICAgICAgICBcIkZpbGUgcGF0aCBpcyBub3Qgd2l0aGluIHRoZSBBUEkgcm9vdCBwYXRoXCIsXG4gICAgICApO1xuXG4gICAgICBpZiAoZXZlbnQgIT09IFwiY2hhbmdlXCIgJiYgZXZlbnQgIT09IFwiYWRkXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBzb25hbXUuY29uZmlnLnRzIOuzgOqyvSDsi5wg7J6s7Iuc7J6RXG4gICAgICAgIGNvbnN0IGlzQ29uZmlnVHMgPSBmaWxlUGF0aCA9PT0gcGF0aC5qb2luKHRoaXMuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwic29uYW11LmNvbmZpZy50c1wiKTtcblxuICAgICAgICBpZiAoaXNDb25maWdUcykge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGZpbGVQYXRoLnJlcGxhY2UodGhpcy5hcGlSb290UGF0aCwgXCJhcGlcIik7XG4gICAgICAgICAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHQ7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjaGFsay5ib2xkKGBEZXRlY3RlZCgke2V2ZW50fSk6ICR7Y2hhbGsuYmx1ZShyZWxhdGl2ZVBhdGgpfSAtIFJlc3RhcnRpbmcuLi5gKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHByb2Nlc3Mua2lsbChwcm9jZXNzLnBpZCwgXCJTSUdVU1IyXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmlsZUNoYW5nZShldmVudCwgYWJzb2x1dGVQYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAgIEEgZnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgaW5pdCBhbmQgZGVzdHJveSB3aGVuIHVzaW5nIFNvbmFtdSB2aWEgc2NyaXB0cy4gICAgXG4gICovXG4gIGFzeW5jIHJ1blNjcmlwdChmbjogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIGF3YWl0IHRoaXMuaW5pdCh0cnVlLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZuKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJQbHVnaW5zKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlLCBwbHVnaW5zOiBTb25hbXVTZXJ2ZXJPcHRpb25zW1wicGx1Z2luc1wiXSkge1xuICAgIGlmICghcGx1Z2lucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBsdWdpbnNNb2R1bGVzID0ge1xuICAgICAgY29yczogXCJAZmFzdGlmeS9jb3JzXCIsXG4gICAgICBmb3JtYm9keTogXCJAZmFzdGlmeS9mb3JtYm9keVwiLFxuICAgICAgbXVsdGlwYXJ0OiBcIkBmYXN0aWZ5L211bHRpcGFydFwiLFxuICAgICAgcXM6IFwiZmFzdGlmeS1xc1wiLFxuICAgICAgc3NlOiBcImZhc3RpZnktc3NlLXYyXCIsXG4gICAgICBzdGF0aWM6IFwiQGZhc3RpZnkvc3RhdGljXCIsXG4gICAgICBzZXNzaW9uOiBcIkBmYXN0aWZ5L3NlY3VyZS1zZXNzaW9uXCIsXG4gICAgfSBhcyBjb25zdDtcblxuICAgIGNvbnN0IHJlZ2lzdGVyUGx1Z2luID0gYXN5bmMgPEsgZXh0ZW5kcyBrZXlvZiBOb25OdWxsYWJsZTx0eXBlb2YgcGx1Z2lucz4+KFxuICAgICAga2V5OiBLLFxuICAgICAgcGx1Z2luTmFtZTogc3RyaW5nLFxuICAgICkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uID0gcGx1Z2luc1trZXldO1xuICAgICAgaWYgKCFvcHRpb24pIHJldHVybjtcblxuICAgICAgaWYgKG9wdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICBzZXJ2ZXIucmVnaXN0ZXIoKGF3YWl0IGltcG9ydChwbHVnaW5OYW1lKSkuZGVmYXVsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXJ2ZXIucmVnaXN0ZXIoKGF3YWl0IGltcG9ydChwbHVnaW5OYW1lKSkuZGVmYXVsdCwgb3B0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBwbHVnaW5OYW1lXSBvZiBPYmplY3QuZW50cmllcyhwbHVnaW5zTW9kdWxlcykpIHtcbiAgICAgIGF3YWl0IHJlZ2lzdGVyUGx1Z2luKGtleSBhcyBrZXlvZiB0eXBlb2YgcGx1Z2lucywgcGx1Z2luTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBsdWdpbnMuY3VzdG9tKSB7XG4gICAgICBwbHVnaW5zLmN1c3RvbShzZXJ2ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJBdXRoKFxuICAgIHNlcnZlcjogRmFzdGlmeUluc3RhbmNlLFxuICAgIG9wdGlvbnM6IE5vbk51bGxhYmxlPFNvbmFtdVNlcnZlck9wdGlvbnNbXCJhdXRoXCJdPixcbiAgKSB7XG4gICAgLy8gYXdhaXQgaW1wb3J0KFwiZmFzdGlmeVwiKTtcbiAgICBjb25zdCBmYXN0aWZ5UGFzc3BvcnQgPSAoYXdhaXQgaW1wb3J0KFwiQGZhc3RpZnkvcGFzc3BvcnRcIikpLmRlZmF1bHQ7XG4gICAgc2VydmVyLnJlZ2lzdGVyKGZhc3RpZnlQYXNzcG9ydC5pbml0aWFsaXplKCkpO1xuICAgIHNlcnZlci5yZWdpc3RlcihmYXN0aWZ5UGFzc3BvcnQuc2VjdXJlU2Vzc2lvbigpKTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIGZhc3RpZnlQYXNzcG9ydC5yZWdpc3RlclVzZXJTZXJpYWxpemVyKGFzeW5jICh1c2VyLCBfcmVxdWVzdCkgPT4gdXNlcik7XG4gICAgICBmYXN0aWZ5UGFzc3BvcnQucmVnaXN0ZXJVc2VyRGVzZXJpYWxpemVyKGFzeW5jIChzZXJpYWxpemVkLCBfcmVxdWVzdCkgPT4gc2VyaWFsaXplZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhc3RpZnlQYXNzcG9ydC5yZWdpc3RlclVzZXJTZXJpYWxpemVyKG9wdGlvbnMudXNlclNlcmlhbGl6ZXIpO1xuICAgICAgZmFzdGlmeVBhc3Nwb3J0LnJlZ2lzdGVyVXNlckRlc2VyaWFsaXplcihvcHRpb25zLnVzZXJEZXNlcmlhbGl6ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVdvcmtmbG93cyhvcHRpb25zOiBTb25hbXVUYXNrT3B0aW9ucyB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHsgV29ya2Zsb3dNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi90YXNrcy93b3JrZmxvdy1tYW5hZ2VyXCIpO1xuICAgIC8vIE5PVEU6IEBzb25hbXUta2l0L3Rhc2tzIOyViOyXkOyEoCBrbmV4IGNvbmZpZ+ulvCDsiJjsoJXtlZjquLAg65WM66y47JeQIGNvbm5lY3Rpb27snbQg7JWE64uMIGNvbmZpZyDsp7jroZwg67O064OF64uI64ukLlxuICAgIHRoaXMuX3dvcmtmbG93cyA9IGF3YWl0IFdvcmtmbG93TWFuYWdlci5jcmVhdGUoREIuZ2V0REJDb25maWcoXCJ3XCIpLCB0cnVlKTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbmFibGVXb3JrZXIgPSBvcHRpb25zLmVuYWJsZVdvcmtlciA/PyBpc0RhZW1vblNlcnZlcigpO1xuICAgIGNvbnN0IGRlZmF1bHRXb3JrZXJPcHRpb25zID0ge1xuICAgICAgY29uY3VycmVuY3k6IG9zLmNwdXMoKS5sZW5ndGggLSAxLFxuICAgICAgdXNlUHViU3ViOiB0cnVlLFxuICAgICAgbGlzdGVuRGVsYXk6IDUwMCxcbiAgICB9O1xuXG4gICAgaWYgKGVuYWJsZVdvcmtlcikge1xuICAgICAgYXdhaXQgdGhpcy53b3JrZmxvd3Muc2V0dXBXb3JrZXIoe1xuICAgICAgICAuLi5kZWZhdWx0V29ya2VyT3B0aW9ucyxcbiAgICAgICAgLi4ub3B0aW9ucy53b3JrZXJPcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBib290KHNlcnZlcjogRmFzdGlmeUluc3RhbmNlLCBvcHRpb25zOiBTb25hbXVTZXJ2ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgcG9ydCA9IG9wdGlvbnMubGlzdGVuPy5wb3J0ID8/IDMwMDA7XG4gICAgY29uc3QgaG9zdCA9IG9wdGlvbnMubGlzdGVuPy5ob3N0ID8/IFwibG9jYWxob3N0XCI7XG5cbiAgICBzZXJ2ZXIuYWRkSG9vayhcIm9uQ2xvc2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgb3B0aW9ucy5saWZlY3ljbGU/Lm9uU2h1dGRvd24/LihzZXJ2ZXIpO1xuICAgICAgYXdhaXQgdGhpcy53b3JrZmxvd3MuZGVzdHJveSgpO1xuICAgICAgYXdhaXQgdGhpcy5kZXN0cm95KCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzaHV0ZG93biA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGR1cmluZyBzaHV0ZG93bjpcIiwgZXJyKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIHNodXRkb3duKTtcbiAgICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBzaHV0ZG93bik7XG5cbiAgICBpZiAob3B0aW9ucy5saWZlY3ljbGU/Lm9uRXJyb3IpIHtcbiAgICAgIHNlcnZlci5zZXRFcnJvckhhbmRsZXIob3B0aW9ucy5saWZlY3ljbGU/Lm9uRXJyb3IpO1xuICAgIH1cblxuICAgIHNlcnZlclxuICAgICAgLmxpc3Rlbih7IHBvcnQsIGhvc3QgfSlcbiAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5saWZlY3ljbGU/Lm9uU3RhcnQ/LihzZXJ2ZXIpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChhc3luYyAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0O1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIkZhaWxlZCB0byBzdGFydCBzZXJ2ZXI6XCIsIGVycikpO1xuICAgICAgICBhd2FpdCBzaHV0ZG93bigpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUZpbGVDaGFuZ2UoZXZlbnQ6IHN0cmluZywgZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIOyyqyDrsojsp7gg7YyM7J287J2066m0IEhNUiDsi5zsnpEg7Iuc6rCEIOq4sOuhnVxuICAgIGlmICh0aGlzLnBlbmRpbmdGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaG1yU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB9XG4gICAgdGhpcy5wZW5kaW5nRmlsZXMucHVzaChmaWxlUGF0aCk7XG5cbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHRoaXMuYXBpUm9vdFBhdGgsIGZpbGVQYXRoKTtcbiAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKGBEZXRlY3RlZCgke2V2ZW50fSk6ICR7Y2hhbGsuYmx1ZShyZWxhdGl2ZVBhdGgpfWApKTtcblxuICAgIGF3YWl0IHRoaXMuc3luY2VyLnN5bmNGcm9tV2F0Y2hlcihldmVudCwgZmlsZVBhdGgpO1xuXG4gICAgLy8g7LKY66asIOyZhOujjOuQnCDtjIzsnbzsnYQg64yA6riwIOuqqeuhneyXkOyEnCDsoJzqsbBcbiAgICB0aGlzLnBlbmRpbmdGaWxlcyA9IHRoaXMucGVuZGluZ0ZpbGVzLnNsaWNlKDEpO1xuXG4gICAgLy8g66qo65OgIO2MjOydvCDsspjrpqzqsIAg7JmE66OM65CY66m0IOy1nOyihSDrqZTsi5zsp4Ag7Lac66ClXG4gICAgaWYgKHRoaXMucGVuZGluZ0ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hITVIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmlzaEhNUigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5yZW5ld0NoZWNrc3VtcygpO1xuXG4gICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdG90YWxUaW1lID0gZW5kVGltZSAtIHRoaXMuaG1yU3RhcnRUaW1lO1xuICAgIGNvbnN0IFtjaGFsaywgeyBjZW50ZXJUZXh0IH1dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0LFxuICAgICAgaW1wb3J0KFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCIpLFxuICAgIF0pO1xuICAgIGNvbnN0IG1zZyA9IGBITVIgRG9uZSEgJHtjaGFsay5ib2xkLndoaXRlKGAke3RvdGFsVGltZX1tc2ApfWA7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5ibGFjay5iZ0dyZWVuKGNlbnRlclRleHQobXNnKSkpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IEJhc2VNb2RlbCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiKTtcbiAgICBhd2FpdCBCYXNlTW9kZWwuZGVzdHJveSgpO1xuICAgIGF3YWl0IHRoaXMuX3dvcmtmbG93cz8uZGVzdHJveSgpO1xuICAgIGF3YWl0IHRoaXMud2F0Y2hlcj8uY2xvc2UoKTtcbiAgICB0aGlzLnN0b3JhZ2U/LmRlc3Ryb3koKTtcbiAgfVxufVxuZXhwb3J0IGNvbnN0IFNvbmFtdSA9IG5ldyBTb25hbXVDbGFzcygpO1xuIl0sIm5hbWVzIjpbImFzc2VydCIsIkFzeW5jTG9jYWxTdG9yYWdlIiwib3MiLCJwYXRoIiwiY3JlYXRlTW9ja1NTRUZhY3RvcnkiLCJEQiIsImlzRGFlbW9uU2VydmVyIiwiTmFpdGUiLCJTb25hbXVDbGFzcyIsImlzSW5pdGlhbGl6ZWQiLCJhc3luY0xvY2FsU3RvcmFnZSIsInVwbG9hZFN0b3JhZ2UiLCJnZXRDb250ZXh0Iiwic3RvcmUiLCJnZXRTdG9yZSIsImNvbnRleHQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJyZXF1ZXN0IiwicmVwbHkiLCJoZWFkZXJzIiwiY3JlYXRlU1NFIiwic2NoZW1hIiwibmFpdGVTdG9yZSIsIk1hcCIsIkVycm9yIiwiZ2V0VXBsb2FkQ29udGV4dCIsInVwbG9hZENvbnRleHQiLCJfYXBpUm9vdFBhdGgiLCJhcGlSb290UGF0aCIsImFwcFJvb3RQYXRoIiwic3BsaXQiLCJzZXAiLCJzbGljZSIsImpvaW4iLCJfZGJDb25maWciLCJkYkNvbmZpZyIsIl9zeW5jZXIiLCJzeW5jZXIiLCJfY29uZmlnIiwiY29uZmlnIiwiX3NlY3JldHMiLCJzZWNyZXRzIiwiX3N0b3JhZ2UiLCJzdG9yYWdlIiwiX3dvcmtmbG93cyIsIndvcmtmbG93cyIsIndhdGNoZXIiLCJwZW5kaW5nRmlsZXMiLCJobXJTdGFydFRpbWUiLCJzZXJ2ZXIiLCJpbml0Rm9yVGVzdGluZyIsImluaXQiLCJ1bmRlZmluZWQiLCJkb1NpbGVudCIsImVuYWJsZVN5bmMiLCJmb3JUZXN0aW5nIiwiY2hhbGsiLCJkZWZhdWx0IiwiY29uc29sZSIsInRpbWUiLCJjeWFuIiwiZmluZEFwaVJvb3RQYXRoIiwibG9hZENvbmZpZyIsImRhdGFiYXNlIiwiQU5USFJPUElDX0FQSV9LRVkiLCJhbnRocm9waWNfYXBpX2tleSIsIlZPWUFHRV9BUElfS0VZIiwidm95YWdlX2FwaV9rZXkiLCJPUEVOQUlfQVBJX0tFWSIsIm9wZW5haV9hcGlfa2V5IiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImdlbmVyYXRlREJDb25maWciLCJsb2ciLCJncmVlbiIsIkVudGl0eU1hbmFnZXIiLCJhdXRvbG9hZCIsImluaXRpYWxpemVXb3JrZmxvd3MiLCJ0YXNrcyIsIlN5bmNlciIsImF1dG9sb2FkVHlwZXMiLCJhdXRvbG9hZE1vZGVscyIsImF1dG9sb2FkQXBpcyIsImF1dG9sb2FkV29ya2Zsb3dzIiwiVGVtcGxhdGVNYW5hZ2VyIiwiaXNMb2NhbCIsImlzVGVzdCIsInNldHVwQmlvbWUiLCJpc0hvdFJlbG9hZFNlcnZlciIsInN5bmMiLCJzdGFydFdhdGNoZXIiLCJ0aW1lRW5kIiwiY3JlYXRlU2VydmVyIiwiaW5pdE9wdGlvbnMiLCJvcHRpb25zIiwiZmFzdGlmeSIsInBsdWdpbnMiLCJyZWdpc3RlclBsdWdpbnMiLCJhdXRoIiwic2Vzc2lvbiIsInJlZ2lzdGVyQXV0aCIsIndpdGhGYXN0aWZ5IiwiYXBpQ29uZmlnIiwiYm9vdCIsInRpbWV6b25lIiwiYXBpIiwiZm9ybWF0SW5UaW1lWm9uZSIsIklTT19EQVRFX1JFR0VYIiwiREFURV9GT1JNQVQiLCJzZXRSZXBseVNlcmlhbGl6ZXIiLCJwYXlsb2FkIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9rZXkiLCJ2YWx1ZSIsInRlc3QiLCJEYXRlIiwiZ2V0Iiwicm91dGUiLCJwcmVmaXgiLCJfcmVxdWVzdCIsIl9yZXBseSIsImFwaXMiLCJzb25hbXVVSUFwaVBsdWdpbiIsInJlZ2lzdGVyIiwiYWxsIiwidXJsIiwic3RhcnRzV2l0aCIsImZvdW5kIiwiZmluZCIsImh0dHBNZXRob2QiLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsImdldEFwaUhhbmRsZXIiLCJOb3RGb3VuZEV4Y2VwdGlvbiIsIm1vZGVscyIsIm1vZGVsTmFtZSIsImhhbmRsZXIiLCJndWFyZHMiLCJldmVyeSIsImd1YXJkIiwiZ3VhcmRIYW5kbGVyIiwiZ2V0Wm9kT2JqZWN0RnJvbUFwaSIsIlJlcVR5cGUiLCJ0eXBlcyIsIndoaWNoIiwicmVxQm9keSIsImZhc3RpZnlDYXN0ZXIiLCJwYXJzZSIsImUiLCJab2RFcnJvciIsImh1bWFuaXplWm9kRXJyb3IiLCJtZXNzYWdlcyIsIm1hcCIsImlzc3VlIiwibWVzc2FnZSIsIkJhZFJlcXVlc3RFeGNlcHRpb24iLCJ6b2RFcnJvciIsInR5cGUiLCJjb250ZW50VHlwZSIsImNyZWF0ZVNTRUZhY3RvcnkiLCJfZXZlbnRzIiwic29ja2V0IiwiYmluZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY29udGV4dFByb3ZpZGVyIiwiY3JlYXRlU3RvcmUiLCJ1c2VyIiwicGFzc3BvcnQiLCJsb2dpbiIsImxvZ291dCIsIm1vZGVsIiwicnVuIiwiQXBpUGFyYW1UeXBlIiwicmVzdWx0IiwibWV0aG9kTmFtZSIsImFwcGx5IiwicGFyYW1ldGVycyIsInBhcmFtIiwiaXNDb250ZXh0IiwibmFtZSIsIndhdGNoUGF0aCIsImNob2tpZGFyIiwid2F0Y2giLCJpZ25vcmVkIiwic3RhdHMiLCJpc0ZpbGUiLCJlbmRzV2l0aCIsInBlcnNpc3RlbnQiLCJpZ25vcmVJbml0aWFsIiwib24iLCJldmVudCIsImZpbGVQYXRoIiwiYWJzb2x1dGVQYXRoIiwiaXNDb25maWdUcyIsInJlbGF0aXZlUGF0aCIsInJlcGxhY2UiLCJib2xkIiwiYmx1ZSIsImtpbGwiLCJwaWQiLCJoYW5kbGVGaWxlQ2hhbmdlIiwiZXJyb3IiLCJydW5TY3JpcHQiLCJmbiIsImRlc3Ryb3kiLCJwbHVnaW5zTW9kdWxlcyIsImNvcnMiLCJmb3JtYm9keSIsIm11bHRpcGFydCIsInFzIiwic3NlIiwic3RhdGljIiwicmVnaXN0ZXJQbHVnaW4iLCJrZXkiLCJwbHVnaW5OYW1lIiwib3B0aW9uIiwiZW50cmllcyIsImN1c3RvbSIsImZhc3RpZnlQYXNzcG9ydCIsImluaXRpYWxpemUiLCJzZWN1cmVTZXNzaW9uIiwicmVnaXN0ZXJVc2VyU2VyaWFsaXplciIsInJlZ2lzdGVyVXNlckRlc2VyaWFsaXplciIsInNlcmlhbGl6ZWQiLCJ1c2VyU2VyaWFsaXplciIsInVzZXJEZXNlcmlhbGl6ZXIiLCJXb3JrZmxvd01hbmFnZXIiLCJjcmVhdGUiLCJnZXREQkNvbmZpZyIsImVuYWJsZVdvcmtlciIsImRlZmF1bHRXb3JrZXJPcHRpb25zIiwiY29uY3VycmVuY3kiLCJjcHVzIiwidXNlUHViU3ViIiwibGlzdGVuRGVsYXkiLCJzZXR1cFdvcmtlciIsIndvcmtlck9wdGlvbnMiLCJwb3J0IiwibGlzdGVuIiwiaG9zdCIsImFkZEhvb2siLCJsaWZlY3ljbGUiLCJvblNodXRkb3duIiwic2h1dGRvd24iLCJjbG9zZSIsImV4aXQiLCJlcnIiLCJvbkVycm9yIiwic2V0RXJyb3JIYW5kbGVyIiwidGhlbiIsIm9uU3RhcnQiLCJjYXRjaCIsInJlZCIsIm5vdyIsInB1c2giLCJyZWxhdGl2ZSIsInN5bmNGcm9tV2F0Y2hlciIsImZpbmlzaEhNUiIsInJlbmV3Q2hlY2tzdW1zIiwiZW5kVGltZSIsInRvdGFsVGltZSIsImNlbnRlclRleHQiLCJtc2ciLCJ3aGl0ZSIsImJsYWNrIiwiYmdHcmVlbiIsIkJhc2VNb2RlbCIsIlNvbmFtdSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLFNBQVNDLGlCQUFpQixRQUFRLGNBQWM7QUFJaEQsT0FBT0MsUUFBUSxLQUFLO0FBQ3BCLE9BQU9DLFVBQVUsT0FBTztBQUV4QixTQUFTQyxvQkFBb0IsRUFBRUMsRUFBRSxFQUFFQyxjQUFjLFFBQVEsY0FBSztBQUc5RCxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBY3ZDLE1BQU1DO0lBQ0dDLGdCQUF5QixNQUFNO0lBQy9CQyxvQkFFRixJQUFJVCxvQkFBb0I7SUFFdEJVLGdCQUVGLElBQUlWLG9CQUFvQjtJQUV0QlcsYUFBc0I7UUFDM0IsTUFBTUMsUUFBUSxJQUFJLENBQUNILGlCQUFpQixDQUFDSSxRQUFRO1FBQzdDLElBQUlELE9BQU9FLFNBQVM7WUFDbEIsT0FBT0YsTUFBTUUsT0FBTztRQUN0QjtRQUVBLElBQUlDLFFBQVFDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLFFBQVE7WUFDbkMsc0NBQXNDO1lBQ3RDLE9BQU87Z0JBQ0xDLFNBQVM7Z0JBQ1RDLE9BQU87Z0JBQ1BDLFNBQVMsQ0FBQztnQkFDVkMsV0FBVyxDQUFDQyxTQUFzQm5CLHFCQUFxQm1CO2dCQUN2RCxrRkFBa0Y7Z0JBQ2xGQyxZQUFZLElB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
|