@wavemaker/app-ng-runtime 12.0.0-next.1417146 → 12.0.0-next.1417152
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.
- app-ng-runtime/components/chart/bundles/index.umd.js +1 -1
- app-ng-runtime/components/chart/esm2022/chart.utils.mjs +2 -2
- app-ng-runtime/components/chart/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -0
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +4 -0
- app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +4 -1
- app-ng-runtime/components/input/epoch/esm2022/date/date.props.mjs +2 -1
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +4 -0
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/bundles/index.umd.js +11 -8
- app-ng-runtime/core/esm2022/services/custom-icons-loader.service.mjs +9 -10
- app-ng-runtime/core/esm2022/utils/utils.mjs +4 -1
- app-ng-runtime/core/fesm2022/index.mjs +11 -8
- app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/utils/utils.d.ts +1 -0
- app-ng-runtime/mobile/runtime/bundles/index.umd.js +1 -1
- app-ng-runtime/mobile/runtime/esm2022/services/http-interceptor.service.mjs +3 -3
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs +2 -2
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/dynamic/app/app.module.d.ts +0 -2
- app-ng-runtime/runtime/dynamic/app/xsrfconfig.module.d.ts +9 -0
- app-ng-runtime/runtime/dynamic/bundles/index.umd.js +47 -13
- app-ng-runtime/runtime/dynamic/esm2022/app/app.module.mjs +6 -15
- app-ng-runtime/runtime/dynamic/esm2022/app/xsrfconfig.module.mjs +49 -0
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +51 -15
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/security/bundles/index.umd.js +5 -0
- app-ng-runtime/security/esm2022/security.service.mjs +6 -1
- app-ng-runtime/security/fesm2022/index.mjs +5 -0
- app-ng-runtime/security/fesm2022/index.mjs.map +1 -1
|
@@ -1453,6 +1453,9 @@ export const findViewParent = (lView) => {
|
|
|
1453
1453
|
return findViewParent(parentlView);
|
|
1454
1454
|
}*/
|
|
1455
1455
|
};
|
|
1456
|
+
export const getFontConfig = () => {
|
|
1457
|
+
return _WM_APP_PROPERTIES.fontConfig ? _WM_APP_PROPERTIES.fontConfig : {};
|
|
1458
|
+
};
|
|
1456
1459
|
/*export const getParent = (parent: any) => {
|
|
1457
1460
|
if(parent.hasOwnProperty("isDynamicComponent") || parent.hasOwnProperty("isPageComponent")) {
|
|
1458
1461
|
return parent
|
|
@@ -1461,4 +1464,4 @@ export const findViewParent = (lView) => {
|
|
|
1461
1464
|
}
|
|
1462
1465
|
|
|
1463
1466
|
}*/
|
|
1464
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFDM0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUM5QixRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFDN0IsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQUUsUUFBUSxFQUNsQixXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksUUFBUSxFQUNoRSxLQUFLLEVBQ0wsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUNyQyxNQUFNLFdBQVcsQ0FBQztBQVluQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUM3QyxNQUFNLEtBQUssR0FBRztJQUNWLFVBQVUsRUFBRSxRQUFRO0lBQ3BC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QUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkc7QUFDUCxDQUFDLENBQUE7QUFFRDs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtnZXRXbVByb2plY3RQcm9wZXJ0aWVzfSBmcm9tICcuL3dtLXByb2plY3QtcHJvcGVydGllcyc7XG5cbmltcG9ydCB7JGFwcERpZ2VzdCwgJHdhdGNofSBmcm9tICcuL3dhdGNoZXInO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vZW51bXMvZW51bXMnO1xuaW1wb3J0IHtEYXRhU291cmNlfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3NldEF0dHJ9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7JHBhcnNlRXZlbnR9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuaW1wb3J0IHtcbiAgICBhdHRlbXB0LFxuICAgIGNhbWVsQ2FzZSwgY2xvbmVEZWVwLCBldmVyeSxcbiAgICBmaWx0ZXIsIGZvckVhY2gsIGdldCwgaWRlbnRpdHksXG4gICAgaW5jbHVkZXMsIGluZGV4T2YsIGludGVyc2VjdGlvbiwgaXNBcnJheSwgaXNEYXRlLFxuICAgIGlzRXF1YWwsIGlzRXF1YWxXaXRoLCBpc0Vycm9yLFxuICAgIGlzRnVuY3Rpb24sXG4gICAgaXNOdWxsLFxuICAgIGlzTnVtYmVyLCBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCwga2V5cywgbWFwLCBub29wIGFzIF9ub29wLCBvbWl0LCByZXBsYWNlIGFzIF9yZXBsYWNlLFxuICAgIHNwbGl0LFxuICAgIHN0YXJ0c1dpdGgsIHRvTG93ZXIsIHRvVXBwZXIsIHRyaW1cbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0IFgySlM7XG5kZWNsYXJlIGNvbnN0ICQ7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcbmRlY2xhcmUgY29uc3QgZG9jdW1lbnQ7XG5kZWNsYXJlIGNvbnN0IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkw7XG5kZWNsYXJlIGNvbnN0IFdNX0NVU1RPTV9GT1JNQVRURVJTO1xuZGVjbGFyZSBjb25zdCBNU0NTU01hdHJpeDtcbmRlY2xhcmUgY29uc3QgX1dNX0FQUF9QUk9QRVJUSUVTO1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuXG5jb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbmNvbnN0IFJFR0VYID0ge1xuICAgIFNOQUtFX0NBU0U6IC9bQS1aXS9nLFxuICAgIEFORFJPSUQ6IC9BbmRyb2lkL2ksXG4gICAgSVBIT05FOiAvaVBob25lL2ksXG4gICAgSVBPRDogL2lQb2QvaSxcbiAgICBJUEFEOiAvaVBhZC9pLFxuICAgIE1BQzogL01hYy9pLFxuICAgIEFORFJPSURfVEFCTEVUOiAvYW5kcm9pZHxhbmRyb2lkIDMuMHx4b29tfHNjaC1pODAwfHBsYXlib29rfHRhYmxldHxraW5kbGUvaSxcbiAgICBNT0JJTEU6IC9Nb2JpbGUvaSxcbiAgICBXSU5ET1dTOiAvV2luZG93cyBQaG9uZS9pLFxuICAgIFNVUFBPUlRFRF9JTUFHRV9GT1JNQVQ6IC9cXC4oYm1wfGdpZnxqcGV8anBnfGpwZWd8dGlmfHRpZmZ8cGJtfHBuZ3xpY28pJC9pLFxuICAgIFNVUFBPUlRFRF9GSUxFX0ZPUk1BVDogL1xcLih0eHR8anN8Y3NzfGh0bWx8c2NyaXB0fHByb3BlcnRpZXN8anNvbnxqYXZhfHhtbHxzbWR8eG1pfHNxbHxsb2d8d3NkbHx2bXxmdGx8anJ4bWx8eW1sfHlhbWx8bWR8bGVzc3xqc3ApJC9pLFxuICAgIFNVUFBPUlRFRF9BVURJT19GT1JNQVQ6IC9cXC4obXAzfG9nZ3x3ZWJtfHdtYXwzZ3B8d2F2fG00YSkkL2ksXG4gICAgU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVDogL1xcLihtcDR8b2dnfHdlYm18d212fG1wZWd8bXBnfGF2aXxtb3YpJC9pLFxuICAgIFBBR0VfUkVTT1VSQ0VfUEFUSDogL15cXC9wYWdlc1xcLy4qXFwuKGpzfGNzc3xodG1sfGpzb24pJC8sXG4gICAgTUlOX1BBR0VfUkVTT1VSQ0VfUEFUSDogLy4qKHBhZ2UubWluLmh0bWwpJC8sXG4gICAgVkFMSURfRU1BSUw6IC9eW2EtekEtWl1bXFx3LitdK0BbYS16QS1aX10rP1xcLlthLXpBLVouXXsxLDR9W2EtekEtWl0kLyxcbiAgICBWQUxJRF9XRUJfVVJMOiAvXihodHRwW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTk9Oj9cXC9cXC5cXC1dKyhcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSk/LyxcbiAgICBWQUxJRF9XRUJTT0NLRVRfVVJMOiAvXih3c1tzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05PTo/XFwvXFwuXFwtXSsoXFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pPy8sXG4gICAgVkFMSURfUkVMQVRJVkVfVVJMOiAvXig/IXd3d1xcLnwoPzpodHRwfGZ0cClzPzpcXC9cXC98W0EtWmEtel06XFxcXHxcXC9cXC8pLiovLFxuICAgIFJFUExBQ0VfUEFUVEVSTjogL1xcJFxceyhbXlxcfV0rKVxcfS9nLFxuICAgIFpJUF9GSUxFOiAvXFwuemlwJC9pLFxuICAgIEVYRV9GSUxFOiAvXFwuZXhlJC9pLFxuICAgIE5PX1FVT1RFU19BTExPV0VEOiAvXlteJ3xcIl0qJC8sXG4gICAgTk9fRE9VQkxFX1FVT1RFU19BTExPV0VEOiAvXlteXCJdKiQvLFxuICAgIFZBTElEX0hUTUw6IC88W2Etel1bXFxzXFxTXSo+L2ksXG4gICAgVkFMSURfUEFTU1dPUkQ6IC9eWzAtOWEtekEtWi1fLkAmKiEjJCVdKyQvLFxuICAgIFNQRUNJQUxfQ0hBUkFDVEVSUzogL1teQS1aMC05YS16X10rL2ksXG4gICAgQVBQX1NFUlZFUl9VUkxfRk9STUFUOiAvXihodHRwW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTlcXC5cXC1dKyhbOl0/WzAtOV17Miw1fXxcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSlcXC8rW14/IyY9XSskLyxcbiAgICBKU09OX0RBVEVfRk9STUFUOiAvXFxkezR9LVswLTFdXFxkLVswLTNdXFxkKFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZC5cXGR7MSwzfVokKT8vLFxuICAgIERBVEFfVVJMOiAvXlxccypkYXRhOihbYS16XStcXC9bYS16MC05LSsuXSsoO1thLXotXSs9W2EtejAtOS1dKyk/KT8oO2Jhc2U2NCk/LChbYS16MC05ISQmJywoKSorOz1cXC0uX346QFxcLz8lXFxzXSopXFxzKiQvaSxcbiAgICBJU09fREFURV9GT1JNQVQ6IC8oXFxkezR9LVxcZHsyfS1cXGR7Mn0pVChcXGR7Mn06XFxkezJ9OlxcZHsyfSkoXFwuXFxkKyk/KFsrLV1cXGR7Mn06P1xcZHsyfXxaKSQvXG59LFxuICAgIGNvbXBhcmVCeVNlcGFyYXRvciA9ICc6JztcblxuY29uc3QgTlVNQkVSX1RZUEVTID0gWydpbnQnLCBEYXRhVHlwZS5JTlRFR0VSLCBEYXRhVHlwZS5GTE9BVCwgRGF0YVR5cGUuRE9VQkxFLCBEYXRhVHlwZS5MT05HLCBEYXRhVHlwZS5TSE9SVCwgRGF0YVR5cGUuQllURSwgRGF0YVR5cGUuQklHX0lOVEVHRVIsIERhdGFUeXBlLkJJR19ERUNJTUFMXTtcbmNvbnN0IG5vdzogRGF0ZSA9IG5ldyBEYXRlKCk7XG5jb25zdCBDVVJSRU5UX0RBVEUgPSAnQ1VSUkVOVF9EQVRFJztcblxuZXhwb3J0IGNvbnN0IGVudW0gRVZFTlRfTElGRSB7IE9OQ0UsIFdJTkRPVyB9XG5cbmV4cG9ydCBjb25zdCBpc0RlZmluZWQgPSB2ID0+ICd1bmRlZmluZWQnICE9PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gdiA9PiBudWxsICE9PSB2ICYmICdvYmplY3QnID09PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IHRvQm9vbGVhbiA9ICh2YWwsIGlkZW50aXR5PykgPT4gKCh2YWwgJiYgdmFsICE9PSAnZmFsc2UnKSA/IHRydWUgOiAoaWRlbnRpdHkgPyB2YWwgPT09IGlkZW50aXR5IDogZmFsc2UpKTtcblxuZnVuY3Rpb24gaXNJRTExKCkge1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignVHJpZGVudC8nKSA+IC0xO1xufVxuXG5leHBvcnQgY29uc3QgaXNJRSA9ICgpID0+IHtcbiAgICByZXR1cm4gaXNJRTExKCkgfHwgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignTVNJRScpID4gLTE7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBpc0FuZHJvaWQgPSAoKSA9PiBSRUdFWC5BTkRST0lELnRlc3QodXNlckFnZW50KTtcblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZFRhYmxldCA9ICgpID0+IFJFR0VYLkFORFJPSURfVEFCTEVULnRlc3QodXNlckFnZW50KSAmJiAhKCgvVGFibGV0IFBDIDIuMC9pKS50ZXN0KHVzZXJBZ2VudCkpO1xuXG5leHBvcnQgY29uc3QgaXNJcGhvbmUgPSAoKSA9PiBSRUdFWC5JUEhPTkUudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBvZCA9ICgpID0+IFJFR0VYLklQT0QudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBhZCA9ICgpID0+IHtcbiAgICByZXR1cm4gUkVHRVguSVBBRC50ZXN0KHVzZXJBZ2VudCkgfHwgKHdpbmRvdy5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDIgJiYgUkVHRVguTUFDLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW9zID0gKCkgPT4gaXNJcGhvbmUoKSB8fCBpc0lwb2QoKSB8fCBpc0lwYWQoKTtcblxuZXhwb3J0IGNvbnN0IGlzU2FmYXJpID0gKCkgPT4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdTYWZhcmknKSAhPT0gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA9PT0gLTE7XG5cblxuZXhwb3J0IGNvbnN0IGlzTGFyZ2VUYWJsZXRMYW5kc2NhcGUgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gbGFuZFNjYXBlV2lkdGggfHwgJzEzNjZweCc7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGFuZFNjYXBlSGVpZ2h0IHx8ICcxMDI0cHgnO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtaW4tZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtYXgtZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtaW4td2lkdGg6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC13aWR0aDogXCIrd2lkdGgrXCIpXCIpLm1hdGNoZXM7XG59XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0UG9ydHJhaXQgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4gIHtcbiAgICBjb25zdCBoZWlnaHQgPSBsYW5kU2NhcGVXaWR0aCB8fCAnMTM2NnB4JztcbiAgICBjb25zdCB3aWR0aCA9IGxhbmRTY2FwZUhlaWdodCB8fCAnMTAyNHB4JztcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWluLXdpZHRoOiBcIit3aWR0aCtcIikgYW5kIChtYXgtd2lkdGg6IFwiK3dpZHRoK1wiKVwiKS5tYXRjaGVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAoKSA9PiBpc0FuZHJvaWQoKSB8fCBpc0lvcygpIHx8IGlzQW5kcm9pZFRhYmxldCgpIHx8ICQoJyN3bS1tb2JpbGUtZGlzcGxheTp2aXNpYmxlJykubGVuZ3RoID4gMDtcblxuZXhwb3J0IGNvbnN0IGlzVGFibGV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlJykud2lkZ2V0O1xuICAgIHJldHVybiBzY29wZSAmJiBzY29wZS52aWV3UGFyZW50LlZpZXdwb3J0LmlzVGFibGV0VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZUFwcCA9ICgpID0+IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5wbGF0Zm9ybVR5cGUgPT09ICdNT0JJTEUnICYmIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS50eXBlID09PSAnQVBQTElDQVRJT04nO1xuXG5leHBvcnQgY29uc3QgZ2V0QW5kcm9pZFZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkubWF0Y2goL2FuZHJvaWRcXHMoWzAtOVxcLl0qKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNLaXRrYXREZXZpY2UgPSAoKSA9PiBpc0FuZHJvaWQoKSAmJiBwYXJzZUludChnZXRBbmRyb2lkVmVyc2lvbigpLCAxMCkgPT09IDQ7XG5cbi8qKlxuICogdGhpcyBtZXRob2QgZW5jb2RlcyB0aGUgdXJsIGFuZCByZXR1cm5zIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jb2RlVXJsID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gZW5jb2RlIHRoZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwuc3Vic3RyaW5nKDAsIGluZGV4KSkgKyB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gZW5jb2RlIHVybCBwYXJhbXMsIG5vdCBlbmNvZGVkIHRocm91Z2ggZW5jb2RlVVJJXG4gICAgICAgIHVybCA9IGVuY29kZVVybFBhcmFtcyh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBwYXJhbXMgYW5kIGlzIHByaXZhdGUgdG8gdGhlIGNsYXNzIG9ubHlcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybFBhcmFtcyA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHF1ZXJ5UGFyYW1zLCBlbmNvZGVkUGFyYW1zID0gJycsIHF1ZXJ5UGFyYW1zU3RyaW5nLCBpbmRleDtcbiAgICBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgcXVlcnlQYXJhbXNTdHJpbmcgPSB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gRW5jb2RpbmcgdGhlIHF1ZXJ5IHBhcmFtcyBpZiBleGlzdFxuICAgICAgICBpZiAocXVlcnlQYXJhbXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXNTdHJpbmcuc3BsaXQoJyYnKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlY29kZWRQYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBpbmNsdWRlcyhwYXJhbSwgJz0nKSA/IHBhcmFtLmluZGV4T2YoJz0nKSA6IChwYXJhbSAmJiBwYXJhbS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBwYXJhbS5zdWJzdHIoMCwgaSksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBwYXJhbS5zdWJzdHIoaSArIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSA9IGZvciBwYXJhbSBuYW1lIG9ubHkgd2hlbiB0aGUgcGFyYW0gdmFsdWUgZXhpc3RzIGluIHRoZSBnaXZlbiBwYXJhbSBvciBlbXB0eSB2YWx1ZSBpcyBhc3NpZ25lZFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbVZhbHVlIHx8IGluY2x1ZGVzKHBhcmFtLCAnPScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkUGFyYW1WYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgKz0gcGFyYW1OYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZWRQYXJhbVZhbHVlKSArICcmJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkUGFyYW1zICs9IHBhcmFtTmFtZSArICcmJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgPSBlbmNvZGVkUGFyYW1zLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHF1ZXJ5UGFyYW1zU3RyaW5nLCBlbmNvZGVkUGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLyogY2FwaXRhbGl6ZSB0aGUgZmlyc3QtbGV0dGVyIG9mIHRoZSBzdHJpbmcgcGFzc2VkICovXG5leHBvcnQgY29uc3QgaW5pdENhcHMgPSBuYW1lID0+IHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKDEpO1xufTtcblxuLyogY29udmVydCBjYW1lbENhc2Ugc3RyaW5nIHRvIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNwYWNlU2VwYXJhdGUgPSBuYW1lID0+IHtcbiAgICBpZiAobmFtZSA9PT0gbmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKFJFR0VYLlNOQUtFX0NBU0UsIGZ1bmN0aW9uIChsZXR0ZXIsIHBvcykge1xuICAgICAgICByZXR1cm4gKHBvcyA/ICcgJyA6ICcnKSArIGxldHRlcjtcbiAgICB9KTtcbn07XG5cbi8qUmVwbGFjZSB0aGUgY2hhcmFjdGVyIGF0IGEgcGFydGljdWxhciBpbmRleCovXG5leHBvcnQgY29uc3QgcmVwbGFjZUF0ID0gKHN0cmluZywgaW5kZXgsIGNoYXJhY3RlcikgPT4gc3RyaW5nLnN1YnN0cigwLCBpbmRleCkgKyBjaGFyYWN0ZXIgKyBzdHJpbmcuc3Vic3RyKGluZGV4ICsgY2hhcmFjdGVyLmxlbmd0aCk7XG5cbi8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuZXhwb3J0IGNvbnN0IHBlcmlvZFNlcGFyYXRlID0gbmFtZSA9PiB7XG4gICAgbGV0IGRvdEluZGV4O1xuICAgIGRvdEluZGV4ID0gbmFtZS5pbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBuYW1lID0gcmVwbGFjZUF0KG5hbWUsIGRvdEluZGV4ICsgMSwgbmFtZS5jaGFyQXQoZG90SW5kZXggKyAxKS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgbmFtZSA9IHJlcGxhY2VBdChuYW1lLCBkb3RJbmRleCwgJyAnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldHRpZnlMYWJlbCA9IGxhYmVsID0+IHtcbiAgICBsYWJlbCA9IGNhbWVsQ2FzZShsYWJlbCk7XG4gICAgLypjYXBpdGFsaXplIHRoZSBpbml0aWFsIExldHRlciovXG4gICAgbGFiZWwgPSBpbml0Q2FwcyhsYWJlbCk7XG4gICAgLypDb252ZXJ0IGNhbWVsIGNhc2Ugd29yZHMgdG8gc2VwYXJhdGVkIHdvcmRzKi9cbiAgICBsYWJlbCA9IHNwYWNlU2VwYXJhdGUobGFiZWwpO1xuICAgIC8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuICAgIGxhYmVsID0gcGVyaW9kU2VwYXJhdGUobGFiZWwpO1xuICAgIHJldHVybiBsYWJlbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZUh5cGhlbmF0ZSA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcgJyk7XG59O1xuXG4vKkFjY2VwdHMgYW4gYXJyYXkgb3IgYSBzdHJpbmcgc2VwYXJhdGVkIHdpdGggc3ltYm9sIGFuZCByZXR1cm5zIHByZXR0aWZpZWQgcmVzdWx0Ki9cbmV4cG9ydCBjb25zdCBwcmV0dGlmeUxhYmVscyA9IChuYW1lcywgc2VwYXJhdG9yID0gJywnKSA9PiB7XG4gICAgbGV0IG1vZGlmaWVkTmFtZXMsIG5hbWVzQXJyYXkgPSBbXTtcblxuICAgIGlmICghaXNBcnJheShuYW1lcykpIHtcbiAgICAgICAgbmFtZXNBcnJheSA9IHNwbGl0KG5hbWVzLCBzZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIG1vZGlmaWVkTmFtZXMgPSBtYXAobmFtZXNBcnJheSwgcHJldHRpZnlMYWJlbCk7XG4gICAgaWYgKGlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIHJldHVybiBtb2RpZmllZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWROYW1lcy5qb2luKHNlcGFyYXRvcik7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGluc2VjdXJlIGNvbnRlbnQgcmVxdWVzdCBpcyBiZWluZyBtYWRlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luc2VjdXJlQ29udGVudFJlcXVlc3QgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblxuICAgIGNvbnN0IHBhcnNlcjogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgcGFyc2VyLmhyZWYgPSB1cmw7XG5cbiAgICAvLyBmb3IgcmVsYXRpdmUgdXJscyBJRSByZXR1cm5zIHRoZSBwcm90b2NvbCBhcyBlbXB0eSBzdHJpbmdcbiAgICBpZiAocGFyc2VyLnByb3RvY29sID09PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlucHV0dGVkIHNvdXJjZSBpcyBhIGJhc2U2NCB1cmwsIGRvIG5vdCB0aHJvdyBpbnNlY3VyZSBjb250ZW50IGVycm9yXG4gICAgaWYgKFJFR0VYLkRBVEFfVVJMLnRlc3QodXJsKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgobG9jYXRpb24uaHJlZiwgJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5wcm90b2NvbCAhPT0gJ2h0dHBzOicgJiYgcGFyc2VyLnByb3RvY29sICE9PSAnd3NzOic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBjaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nU3RhcnRzV2l0aCA9IChzdHI6IHN0cmluZywgc3RhcnRzV2l0aDogc3RyaW5nLCBpZ25vcmVDYXNlPyk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdFeCA9IG5ldyBSZWdFeHAoJ14nICsgc3RhcnRzV2l0aCwgaWdub3JlQ2FzZSA/ICdpJyA6ICcnKTtcblxuICAgIHJldHVybiByZWdFeC50ZXN0KHN0cik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkRXhwclZhbHVlID0gKG9iamVjdCwgZXhwcmVzc2lvbikgPT4ge1xuICAgIGxldCB2YWw7XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gd2l0aCB0aGUgc2NvcGUgYW5kIG9iamVjdC5cbiAgICAgKiAkZXZhbCBpcyB1c2VkLCBhcyBleHByZXNzaW9uIGNhbiBiZSBpbiBmb3JtYXQgb2YgZmllbGQxICsgJyAnICsgZmllbGQyXG4gICAgICogJGV2YWwgY2FuIGZhaWwsIGlmIGV4cHJlc3Npb24gaXMgbm90IGluIGNvcnJlY3QgZm9ybWF0LCBzbyBhdHRlbXB0IHRoZSBldmFsIGZ1bmN0aW9uXG4gICAgICovXG4gICAgdmFsID0gYXR0ZW1wdChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgYXJnc0V4cHIgPSBPYmplY3Qua2V5cyhvYmplY3QpLm1hcCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYHZhciAke2ZpZWxkTmFtZX0gPSBkYXRhWycke2ZpZWxkTmFtZX0nXTtgO1xuICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnN0IGYgPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCBgJHthcmdzRXhwcn0gcmV0dXJuICAke2V4cHJlc3Npb259YCk7XG4gICAgICAgIHJldHVybiBmKG9iamVjdCk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogJGV2YWwgZmFpbHMgaWYgZmllbGQgZXhwcmVzc2lvbiBoYXMgc3BhY2VzLiBFeDogJ2ZpZWxkIG5hbWUnIG9yICdmaWVsZEBuYW1lJ1xuICAgICAqIEFzIGEgZmFsbGJhY2ssIGdldCB2YWx1ZSBkaXJlY3RseSBmcm9tIG9iamVjdCBvciBzY29wZVxuICAgICAqL1xuICAgIGlmIChpc0Vycm9yKHZhbCkpIHtcbiAgICAgICAgdmFsID0gZ2V0KG9iamVjdCwgZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKiBmdW5jdGlvbnMgZm9yIHJlc291cmNlIFRhYiovXG5leHBvcnQgY29uc3QgaXNJbWFnZUZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9JTUFHRV9GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXVkaW9GaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfQVVESU9fRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZpZGVvRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFdlYlVSTCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoUkVHRVguVkFMSURfV0VCX1VSTCkudGVzdCh1cmwpO1xufTtcblxuLypUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVybCB0byB0aGUgcmVzb3VyY2UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHVybCovXG5leHBvcnQgY29uc3QgZ2V0UmVzb3VyY2VVUkwgPSAodXJsU3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSkge1xuICAgICAgICAvKlRPRE86IFVzZSBEb21TYW5pdGl6ZXIqL1xuICAgICAgICAvLyByZXR1cm4gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmxTdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypmdW5jdGlvbiB0byBjaGVjayBpZiBmbiBpcyBhIGZ1bmN0aW9uIGFuZCB0aGVuIGV4ZWN1dGUqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJGbihmbiwgLi4uYXJnbW50cykge1xuICAgIC8qIFVzZSBvZiBzbGljZSBvbiBhcmd1bWVudHMgd2lsbCBtYWtlIHRoaXMgZnVuY3Rpb24gbm90IG9wdGltaXphYmxlXG4gICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMzItbGVha2luZy1hcmd1bWVudHNcbiAgICAqICovXG5cbiAgICBsZXQgc3RhcnQgPSAxO1xuICAgIGNvbnN0IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gc3RhcnQpO1xuICAgIGZvciAoc3RhcnQ7IHN0YXJ0IDwgbGVuOyBzdGFydCsrKSB7XG4gICAgICAgIGFyZ3Nbc3RhcnQgLSAxXSA9IGFyZ3VtZW50c1tzdGFydF07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGZvcm1hdHRlZCBkYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWREYXRlID0gKGRhdGVQaXBlLCBkYXRlT2JqLCBmb3JtYXQsIHRpbWVab25lPywgaXNUaW1lU3RhbXBUeXBlPywgaXNJbnRlcnZhbERhdGVUaW1lPywgY29tcEluc3RhbmNlPyk6IGFueSA9PiB7XG4gICAgaWYgKCFkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikudmFsdWVPZigpO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQgPT09ICdVVEMnKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlT2JqKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aW1lWm9uZSAmJiB0aW1lWm9uZSAhPT0gbW9tZW50LmRlZmF1bHRab25lPy5uYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vbWVudEZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlQWxsKCd5JywgJ1knKS5yZXBsYWNlQWxsKCdkJywgJ0QnKS5yZXBsYWNlKCdhJywgJ0EnKTtcbiAgICAgICAgaWYgKGlzSW50ZXJ2YWxEYXRlVGltZSApIHsgLy8gZGF0ZXMgd2hpY2ggYXJlIG9mIHR5cGUgdGltZSB3aWRnZXQgKHZhbHVlIGlzIGhoOm1tOnNzKSBidXQgcmV0dXJuZWQgYXMgZGF0ZSBzdHJpbmcgZnJvbSB0aW1lIGNvbXBcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGltZVN0YW1wVHlwZSA9PT0gJ2RhdGV0aW1lc3RhbXAnKSB7XG4gICAgICAgICAgICBkYXRlT2JqID0gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRpbWVab25lLCBkYXRlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVPYmosIGZvcm1hdCwgdGltZVpvbmUsIGNvbXBJbnN0YW5jZSk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGRhdGUgaGFzIHRpbWV6b25lIGluZm9ybWF0aW9uIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgaGFzT2Zmc2V0U3RyID0gKGRhdGVTdHIpID0+IHtcbiAgICBpZiAodHlwZW9mIGRhdGVTdHIgIT09ICdzdHJpbmcnKSByZXR1cm47XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRhdGVTdHIubWF0Y2goUkVHRVguSVNPX0RBVEVfRk9STUFUKTtcbiAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzRdKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBtZXRob2QgdG8gZ2V0IHRoZSBkYXRlIG9iamVjdCBmcm9tIHRoZSBpbnB1dCByZWNlaXZlZFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0ZU9iaiA9ICh2YWx1ZSwgb3B0aW9ucz8sIHRpbWV6b25lPyk6IERhdGUgPT4ge1xuICAgIC8vIEhhbmRsaW5nIGxvY2FsaXphdGlvblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGF0dGVybiAmJiBvcHRpb25zLnBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIC8vIEZpeCBmb3IgV01TLTE5NjAxLCBpbnZhbGlkIGRhdGUgaXMgcmV0dXJuZWQgb24gZGF0ZSBzZWxlY3Rpb24uXG4gICAgICAgIGNvbnN0IGlzTmF0aXZlUGlja2VyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNOYXRpdmVQaWNrZXInKSkgPyBnZXQob3B0aW9ucywgJ2lzTmF0aXZlUGlja2VyJykgOiBpc01vYmlsZSgpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gIGlzTmF0aXZlUGlja2VyID8gJ1lZWVkvTU0vREQgSEg6bW06c3MnIDogbW9tZW50UGF0dGVybihvcHRpb25zLnBhdHRlcm4pO1xuICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSwgcGF0dGVybikudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSBkYXRlIG9iamVjdCwgbm8gbmVlZCB0byBjb3ZlcnQgaXQqL1xuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIHRpbWVzdGFtcCBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXIqL1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAoIW1vbWVudCh2YWx1ZSkuaXNWYWxpZCgpIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBkYXRlT2JqID0gbmV3IERhdGUodmFsdWUpO1xuICAgIC8qKlxuICAgICAqIGlmIGRhdGUgdmFsdWUgaXMgc3RyaW5nIFwiMjAtMDUtMjAxOVwiIHRoZW4gbmV3IERhdGUodmFsdWUpIHJldHVybiAyME1heTIwMTkgd2l0aCBjdXJyZW50IHRpbWUgaW4gSW5kaWEsXG4gICAgICogd2hlcmVhcyB0aGlzIHdpbGwgcmV0dXJuIDE5TWF5MjAxOSB3aXRoIHRpbWUgbGFnZ2luZyBmb3IgZmV3IGhvdXJzLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpdCByZXR1cm5zIFVUQyB0aW1lIGkuZS4gQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUgKFVUQykuXG4gICAgICogVG8gY3JlYXRlIGRhdGUgaW4gbG9jYWwgdGltZSB1c2UgbW9tZW50XG4gICAgICovXG4gICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKlxuICAgICAgICAgKiBJZiBzZWxlY3RlZCBsb2NhbGUgaXMgQXJhYmljLCBtb21lbnQodmFsdWUpLmZvcm1hdCgpIGlzIGdpdmluZyBkYXRlIGluIEFyYWJpYyBsYW5ndWFnZVxuICAgICAgICAgKiAoRXg6IElmIGRhdGUgdmFsdWUgaXMgXCIxOTkwLTExLTIzXCIgYW5kIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkgaXMgXCLZodmp2anZoC3ZodmhLdmi2aNU2aDZoDrZoNmgOtmg2aAr2aDZpTrZo9mgXCIpXG4gICAgICAgICAqIGFuZCBuZXcgRGF0ZShtb21lbnQodmFsdWUpLmZvcm1hdCgpKSBpcyBnaXZpbmcgSW52YWxpZCBEYXRlLiBTbyBmcnN0IGNvbnZlcnRpbmcgaXQgdG8gdGltZXN0YW1wIHZhbHVlLlxuICAgICAgICAqL1xuXG4gICAgICAgIGRhdGVPYmogPSAhdGltZXpvbmUgPyBuZXcgRGF0ZShtb21lbnQobW9tZW50KHZhbHVlKS5mb3JtYXQoKSkudmFsdWVPZigpKSA6IGdldE1vbWVudExvY2FsZU9iamVjdCh0aW1lem9uZSwgdmFsdWUpOztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IENVUlJFTlRfREFURSB8fCBpc05hTihkYXRlT2JqLmdldERheSgpKSkge1xuICAgICAgICByZXR1cm4gbm93O1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZU9iajtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50ID0gKF9lbGVtZW50OiBFbGVtZW50LCBleGNsdWRlRWxlbWVudDogRWxlbWVudCwgbmF0aXZlRWxlbWVudDogRWxlbWVudCwgZXZlbnRUeXBlLCBpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0LCBzdWNjZXNzQ0IsIGxpZmU6IEVWRU5UX0xJRkUsIGlzQ2FwdHVyZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudDogRWxlbWVudCA9IF9lbGVtZW50O1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV4Y2x1ZGVFbGVtZW50ICYmIChleGNsdWRlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8IGV4Y2x1ZGVFbGVtZW50ID09PSBldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpZmUgPT09IEVWRU5UX0xJRkUuT05DRSkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBzdWNjZXNzQ0IoKTtcbiAgICB9O1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgY29uc3QgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICB9O1xuICAgIHJldHVybiByZW1vdmVFdmVudExpc3RlbmVyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVlcCBjbG9uZWQgcmVwbGljYSBvZiB0aGUgcGFzc2VkIG9iamVjdC9hcnJheVxuICogQHBhcmFtIG9iamVjdCBvYmplY3QvYXJyYXkgdG8gY2xvbmVcbiAqIEByZXR1cm5zIGEgY2xvbmUgb2YgdGhlIHBhc3NlZCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENsb25lZE9iamVjdCA9IChvYmplY3QpID0+IHtcbiAgICByZXR1cm4gY2xvbmVEZWVwKG9iamVjdCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZXMgPSAoZm9ybU5hbWUsIGZpZWxkTmFtZSwgaXNMaXN0KSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBnZXQoZG9jdW1lbnQuZm9ybXMsIFtmb3JtTmFtZSwgZmllbGROYW1lLCAnZmlsZXMnXSk7XG4gICAgcmV0dXJuIGlzTGlzdCA/IG1hcChmaWxlcywgaWRlbnRpdHkpIDogZmlsZXMgJiYgZmlsZXNbMF07XG59O1xuXG4vKkZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciovXG5mdW5jdGlvbiByYW5kb20oKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBndWlkIGJhc2VkIG9uIHJhbmRvbSBudW1iZXJzLiovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVHVUlkID0gKCkgPT4ge1xuICAgIHJldHVybiByYW5kb20oKSArICctJyArIHJhbmRvbSgpICsgJy0nICsgcmFuZG9tKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGlmIGdpdmVuIGFjY2VzcyByb2xlIGlzIGluIGN1cnJlbnQgbG9nZ2VkaW4gdXNlciBhY2Nlc3Mgcm9sZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWNjZXNzUm9sZXMgPSAocm9sZUV4cCwgbG9nZ2VkSW5Vc2VyKSA9PiB7XG4gICAgbGV0IHJvbGVzO1xuXG4gICAgaWYgKHJvbGVFeHAgJiYgbG9nZ2VkSW5Vc2VyKSB7XG5cbiAgICAgICAgcm9sZXMgPSByb2xlRXhwICYmIHJvbGVFeHAuc3BsaXQoJywnKS5tYXAoRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsIFN0cmluZy5wcm90b3R5cGUudHJpbSk7XG5cbiAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbihyb2xlcywgbG9nZ2VkSW5Vc2VyLnVzZXJSb2xlcykubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbGlkSlNPTiA9IChjb250ZW50KSA9PiB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEludFZhbHVlID0gcGFyc2VJbnQoY29udGVudCwgMTApO1xuICAgICAgICAvKm9idGFpbmluZyBqc29uIGZyb20gZWRpdG9yIGNvbnRlbnQgc3RyaW5nKi9cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpIHx8ICFpc05hTihwYXJzZWRJbnRWYWx1ZSkgPyBjb250ZW50IDogSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qdGVybWluYXRpbmcgZXhlY3V0aW9uIGlmIG5ldyB2YXJpYWJsZSBvYmplY3QgaXMgbm90IHZhbGlkIGpzb24uKi9cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgeG1sVG9Kc29uID0gKHhtbFN0cmluZykgPT4ge1xuICAgIGNvbnN0IHgyanNPYmogPSBuZXcgWDJKUyh7ICdlbXB0eU5vZGVGb3JtJzogJ2NvbnRlbnQnLCAnYXR0cmlidXRlUHJlZml4JzogJycsICdlbmFibGVUb1N0cmluZ0Z1bmMnOiBmYWxzZSB9KTtcbiAgICBsZXQganNvbiA9IHgyanNPYmoueG1sMmpzKHhtbFN0cmluZyk7XG4gICAgaWYgKGpzb24pIHtcbiAgICAgICAganNvbiA9IGdldChqc29uLCBPYmplY3Qua2V5cyhqc29uKVswXSk7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xufTtcblxuLypcbiAqIFV0aWwgbWV0aG9kIHRvIGZpbmQgdGhlIHZhbHVlIG9mIGEga2V5IGluIHRoZSBvYmplY3RcbiAqIGlmIGtleSBub3QgZm91bmQgYW5kIGNyZWF0ZSBpcyB0cnVlLCBhbiBvYmplY3QgaXMgY3JlYXRlZCBhZ2FpbnN0IHRoYXQgbm9kZVxuICogRXhhbXBsZXM6XG4gKiB2YXIgYSA9IHtcbiAqICBiOiB7XG4gKiAgICAgIGMgOiB7XG4gKiAgICAgICAgICBkOiAndGVzdCdcbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnYi5jLmQnKSAtLT4gJ3Rlc3QnXG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2IuYycpIC0tPiB7ZDogJ3Rlc3QnfVxuICogVXRpbHMuZmluZFZhbHVlKGEsICdlJykgLS0+IHVuZGVmaW5lZFxuICogVXRpbHMuZmluZFZhbHVlKGEsICdlJywgdHJ1ZSkgLS0+IHt9IGFuZCBhIHdpbGwgYmVjb21lOlxuICoge1xuICogICBiOiB7XG4gKiAgICAgIGMgOiB7XG4gKiAgICAgICAgICBkOiAndGVzdCdcbiAqICAgICAgfVxuICogIH0sXG4gKiAgZToge1xuICogIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRWYWx1ZU9mID0gKG9iaiwga2V5LCBjcmVhdGU/KSA9PiB7XG5cbiAgICBpZiAoIW9iaiB8fCAha2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZSkge1xuICAgICAgICByZXR1cm4gZ2V0KG9iaiwga2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IGtleS5zcGxpdCgnLicpLFxuICAgICAgICBrZXlzID0gW107XG5cbiAgICBsZXQgc2tpcFByb2Nlc3Npbmc7XG5cbiAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICAgIGlmICghcGFydHMubGVuZ3RoKSB7IC8vIGlmIHRoZSBwYXJ0IG9mIGEga2V5IGlzIG5vdCB2YWxpZCwgc2tpcCB0aGUgcHJvY2Vzc2luZy5cbiAgICAgICAgICAgIHNraXBQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YlBhcnRzID0gcGFydC5tYXRjaCgvXFx3Ky9nKTtcbiAgICAgICAgbGV0IHN1YlBhcnQ7XG5cbiAgICAgICAgd2hpbGUgKHN1YlBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3ViUGFydCA9IHN1YlBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBrZXlzLnB1c2goeyAna2V5Jzogc3ViUGFydCwgJ3ZhbHVlJzogc3ViUGFydHMubGVuZ3RoID8gW10gOiB7fSB9KTsgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY3JlYXRlIGFuIGFycmF5IG9yIGFuIG9iamVjdFxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2tpcFByb2Nlc3NpbmcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBrZXlzLmZvckVhY2goKF9rZXkpID0+IHtcbiAgICAgICAgbGV0IHRlbXBPYmogPSBvYmpbX2tleS5rZXldO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHRlbXBPYmopKSB7XG4gICAgICAgICAgICB0ZW1wT2JqID0gZ2V0VmFsaWRKU09OKHRlbXBPYmopO1xuICAgICAgICAgICAgaWYgKCF0ZW1wT2JqKSB7XG4gICAgICAgICAgICAgICAgdGVtcE9iaiA9IF9rZXkudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb2JqW19rZXkua2V5XSA9IHRlbXBPYmo7XG4gICAgICAgIG9iaiA9IHRlbXBPYmo7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxuLypcbiogZXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGxhc3QgYml0IGZyb20gZnVsbCB0eXBlUmVmIG9mIGEgZmllbGRcbiogZS5nLiByZXR1cm5zICdTdHJpbmcnIGZvciB0eXBlUmVmID0gJ2phdmEubGFuZy5TdHJpbmcnXG4qIEBwYXJhbXM6IHt0eXBlUmVmfSB0eXBlIHJlZmVyZW5jZVxuKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0VHlwZSA9ICh0eXBlUmVmOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGxldCB0eXBlO1xuICAgIGlmICghdHlwZVJlZikge1xuICAgICAgICByZXR1cm4gRGF0YVR5cGUuU1RSSU5HO1xuICAgIH1cbiAgICB0eXBlID0gdHlwZVJlZiAmJiB0eXBlUmVmLnN1YnN0cmluZyh0eXBlUmVmLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB0eXBlID0gdHlwZSAmJiB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdHlwZSA9IHR5cGUgPT09IERhdGFUeXBlLkxPQ0FMREFURVRJTUUgPyBEYXRhVHlwZS5EQVRFVElNRSA6IHR5cGU7XG4gICAgcmV0dXJuIHR5cGU7XG59O1xuXG4vKiByZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGRhdGEgdHlwZSBtYXRjaGVzIG51bWJlciB0eXBlICovXG5leHBvcnQgY29uc3QgaXNOdW1iZXJUeXBlID0gKHR5cGU6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoTlVNQkVSX1RZUEVTLmluZGV4T2YoZXh0cmFjdFR5cGUodHlwZSkudG9Mb3dlckNhc2UoKSkgIT09IC0xKTtcbn07XG5cbi8qIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHByb3ZpZGVkIG9iamVjdCBpcyBlbXB0eSovXG5leHBvcnQgY29uc3QgaXNFbXB0eU9iamVjdCA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChpc09iamVjdChvYmopICYmICFpc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBGdW5jdGlvbiBleHBlY3RzIGFuIGVsZW1lbnQgb24gd2hpY2ggdGhlIHNjcm9sbGluZyBzaG91bGQgYmUgYXBwbGllZCwgRGVwZW5kaW5nIG9uIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgc2Nyb2xsYmFyIHdpbGwgYmUgYWRqdXN0ZWRcbmV4cG9ydCBjb25zdCBzY3JvbGxUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICBjb25zdCBmb3JtUG9zaXRpb24gPSAkZWxlbWVudC5vZmZzZXQoKS50b3A7XG4gICAgY29uc3QgJHNjcm9sbFBhcmVudCA9ICRlbGVtZW50LmNsb3Nlc3QoJ1t3bXNtb290aHNjcm9sbD1cInRydWVcIl0nKTtcbiAgICBpZiAoaXNNb2JpbGVBcHAoKSAmJiAkc2Nyb2xsUGFyZW50Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBpU2Nyb2xsID0gZ2V0KCRzY3JvbGxQYXJlbnRbMF0sICdpc2Nyb2xsJyk7XG4gICAgICAgIGxldCB0byA9IC0oZm9ybVBvc2l0aW9uIC0gaVNjcm9sbC55KTtcbiAgICAgICAgdG8gPSAoaVNjcm9sbC5tYXhTY3JvbGxZID4gdG8pID8gaVNjcm9sbC5tYXhTY3JvbGxZIDogdG87XG4gICAgICAgIGlTY3JvbGwuc2Nyb2xsVG8oMCwgdG8pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoe1xuICAgICAgICAgICAgdG9wOiBmb3JtUG9zaXRpb24sXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLy8gRnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBpbiB2aWV3cG9ydCBvciBub3RcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRJblZpZXdwb3J0ID0gKGVsZW1lbnQpID0+IHtcbiAgICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgcmVjdC50b3AgPj0gMCAmJlxuICAgICAgICByZWN0LmxlZnQgPj0gMCAmJlxuICAgICAgICByZWN0LmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICYmXG4gICAgICAgIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aClcbiAgICApO1xufVxuXG4vKkZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBvYmplY3QgaXMgYSBwYWdlYWJsZSBvYmplY3Qgb3Igbm90LiovXG5leHBvcnQgY29uc3QgaXNQYWdlYWJsZSA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHBhZ2VhYmxlID0ge1xuICAgICAgICAnY29udGVudCc6IFtdLFxuICAgICAgICAnZmlyc3QnOiB0cnVlLFxuICAgICAgICAnbGFzdCc6IHRydWUsXG4gICAgICAgICdudW1iZXInOiAwLFxuICAgICAgICAnbnVtYmVyT2ZFbGVtZW50cyc6IDEwLFxuICAgICAgICAnc2l6ZSc6IDIwLFxuICAgICAgICAnc29ydCc6IG51bGwsXG4gICAgICAgICd0b3RhbEVsZW1lbnRzJzogMTAsXG4gICAgICAgICd0b3RhbFBhZ2VzJzogMVxuICAgIH07XG4gICAgLy8gcGFnaW5hdGVkIG9iamVjdCBtYXkgb3IgbWF5IG5vdCBjb250YWluICdlbXB0eScgcHJvcGVydHkuIEluIGVpdGhlciBjYXNlLCBQYWdlYWJsZSBzaG91bGQgcmV0dXJuIGFzIHRydWUuXG4gICAgY29uc3QgcGFnaW5hdGVkT2JqID0gb21pdChvYmosICdlbXB0eScpO1xuICAgIHJldHVybiAoaXNFcXVhbChrZXlzKHBhZ2VhYmxlKSwga2V5cyhwYWdpbmF0ZWRPYmopLnNvcnQoKSkpO1xufTtcblxuLypcbiAqIFV0aWwgbWV0aG9kIHRvIHJlcGxhY2UgcGF0dGVybnMgaW4gc3RyaW5nIHdpdGggb2JqZWN0IGtleXMgb3IgYXJyYXkgdmFsdWVzXG4gKiBFeGFtcGxlczpcbiAqIFV0aWxzLnJlcGxhY2UoJ0hlbGxvLCAke2ZpcnN0fSAke2xhc3R9ICEnLCB7Zmlyc3Q6ICd3YXZlbWFrZXInLCBsYXN0OiAnbmcnfSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqIFV0aWxzLnJlcGxhY2UoJ0hlbGxvLCAkezB9ICR7MX0gIScsIFsnd2F2ZW1ha2VyJywnbmcnXSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqIEV4YW1wbGVzIGlmIHBhcnNlRXJyb3IgaXMgdHJ1ZTpcbiAqIFV0aWxzLnJlcGxhY2UoJ0hlbGxvLCB7MH0gezF9ICEnLCBbJ3dhdmVtYWtlcicsJ25nJ10pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKi9cbmV4cG9ydCBjb25zdCByZXBsYWNlID0gKHRlbXBsYXRlLCBtYXAsIHBhcnNlRXJyb3I/OiBib29sZWFuKSA9PiB7XG4gICAgbGV0IHJlZ0V4ID0gUkVHRVguUkVQTEFDRV9QQVRURVJOO1xuICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocGFyc2VFcnJvcikge1xuICAgICAgICByZWdFeCA9IC9cXHsoW15cXH1dKylcXH0vZztcbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShyZWdFeCwgZnVuY3Rpb24gKG1hdGNoLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGdldChtYXAsIGtleSk7XG4gICAgfSk7XG59O1xuXG4vKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIGRhdGUgdGltZSB0eXBlKi9cbmV4cG9ydCBjb25zdCBpc0RhdGVUaW1lVHlwZSA9IHR5cGUgPT4ge1xuICAgIGlmIChpbmNsdWRlcyh0eXBlLCAnLicpKSB7XG4gICAgICAgIHR5cGUgPSB0b0xvd2VyKGV4dHJhY3RUeXBlKHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGluY2x1ZGVzKFtEYXRhVHlwZS5EQVRFLCBEYXRhVHlwZS5USU1FLCBEYXRhVHlwZS5USU1FU1RBTVAsIERhdGFUeXBlLkRBVEVUSU1FLCBEYXRhVHlwZS5MT0NBTERBVEVUSU1FXSwgdHlwZSk7XG59O1xuXG5jb25zdCBtb21lbnRQYXR0ZXJuID0gKHBhdHRlcm4pID0+IHtcbiAgICBpZiAoaW5jbHVkZXMocGF0dGVybiwgJ0UnKSkge1xuICAgICAgICBwYXR0ZXJuID0gX3JlcGxhY2UocGF0dGVybiwgL0VbLF0/L2csICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIF9yZXBsYWNlKHBhdHRlcm4sIC95KmQqL2csICh2YWwpID0+IHZhbC50b1VwcGVyQ2FzZSgpKTtcbn07XG5cbi8qICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZGF0ZSBvYmplY3QuIElmIHZhbCBpcyB1bmRlZmluZWQgaXQgcmV0dXJucyBpbnZhbGlkIGRhdGUgKi9cbmV4cG9ydCBjb25zdCBnZXRWYWxpZERhdGVPYmplY3QgPSAodmFsLCBvcHRpb25zPykgPT4ge1xuICAgY29uc3QgZGVmYXVsdE1lcmlkaWFuID0gWydBTScsICdQTSddO1xuICAgY29uc3QgbW9tZW50TWVyaWRpYW4gPSBtb21lbnQoKS5fbG9jYWxlLm1lcmlkaWVtKCk7XG4gICAgLy8gVXBkYXRpbmcgbG9jYWxpemVkIG1lcmlkaWFucyB3aXRoIGRlZmF1bHQgbWVyaWRpYW5zIHdoZW4gbW9tZW50IG1lcmlkaWFuIGlzIG5vdCBkZWZpbmVkXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5tZXJpZGlhbnMgJiYgaW5jbHVkZXMoZGVmYXVsdE1lcmlkaWFuLCBtb21lbnRNZXJpZGlhbikpIHtcbiAgICAgICAgZm9yRWFjaChvcHRpb25zLm1lcmlkaWFucywgKG1lcmlkaWFuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluY2x1ZGVzKHZhbCwgbWVyaWRpYW4pKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UobWVyaWRpYW4sIGRlZmF1bHRNZXJpZGlhbltpbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaXNOYXRpdmVQaWNrZXIgPSAob3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KCdpc05hdGl2ZVBpY2tlcicpKSA/IGdldChvcHRpb25zLCAnaXNOYXRpdmVQaWNrZXInKSA6IGlzTW9iaWxlKCk7XG4gICAgY29uc3QgcGF0dGVybiA9IGlzTmF0aXZlUGlja2VyID8gKGdldChvcHRpb25zLCAncGF0dGVybicpIHx8ICdZWVlZL01NL0REIEhIOm1tOnNzJykgOiAobW9tZW50UGF0dGVybihnZXQob3B0aW9ucywgJ3BhdHRlcm4nKSkgfHwgJycpO1xuICAgIC8vIEhhbmRsaW5nIGxvY2FsaXphdGlvblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGF0dGVybiAmJiBvcHRpb25zLnBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIGlmICghaXNOYU4oKG5ldyBEYXRlKHZhbCkpLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdmFsIGlzIGEgdmFsaWQgZGF0ZSBvciBub3RcbiAgICAgICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIGlPUywgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBmb3JtYXQgdG8gY29uc2lkZXIgZXZlbiB0aGUgc2Vjb25kcy5cbiAgICAgICAgICAgICAgICB2YWwgPSBtb21lbnQodmFsKS5mb3JtYXQoJ1lZWVkvTU0vREQgSEg6bW06c3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbCA9IG1vbWVudChuZXcgRGF0ZSh2YWwpLCBwYXR0ZXJuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudCh2YWwsIHBhdHRlcm4pO1xuICAgICAgICB9XG4gICAgICAgIHZhbCA9IHZhbC50b0RhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAobW9tZW50KHZhbCwgcGF0dGVybikuaXNWYWxpZCgpKSB7XG4gICAgICAgIC8vIGRhdGUgd2l0aCArNSBob3VycyBpcyByZXR1cm5lZCBpbiBzYWZhcmkgYnJvd3NlciB3aGljaCBpcyBub3QgYSB2YWxpZCBkYXRlLlxuICAgICAgICAvLyBIZW5jZSBjb252ZXJ0aW5nIHRoZSBkYXRlIHRvIHRoZSBzdXBwb3J0ZWQgZm9ybWF0IFwiWVlZWS9NTS9ERCBISDptbTpzc1wiIGluIElPU1xuICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KG1vbWVudCh2YWwpLnZhbHVlT2YoKSkuZm9ybWF0KCdZWVlZL01NL0REIEhIOm1tOnNzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSB0aW1lc3RhbXAgc3RyaW5nLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyKi9cbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgdmFsID0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLyppZiB0aGUgdmFsdWUgaXMgaW4gSEg6bW06c3MgZm9ybWF0LCBpdCByZXR1cm5zIGEgd3JvbmcgZGF0ZS4gU28gYXBwZW5kIHRoZSBkYXRlIHRvIHRoZSBnaXZlbiB2YWx1ZSB0byBnZXQgZGF0ZSovXG4gICAgICAgIGlmICghKG5ldyBEYXRlKHZhbCkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KChtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSArICcgJyArIHZhbCksICdZWVlZLU1NLUREIEhIOm1tOnNzIEEnKTtcblxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShtb21lbnQodmFsKS52YWx1ZU9mKCkpO1xufTtcblxuLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBqYXZhc2NyaXB0IGRhdGUgb2JqZWN0Ki9cbmV4cG9ydCBjb25zdCBnZXROYXRpdmVEYXRlT2JqZWN0ID0gKHZhbCwgb3B0aW9ucz8pID0+IHtcbiAgICB2YWwgPSBnZXRWYWxpZERhdGVPYmplY3QodmFsLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsKTtcbn07XG5cblxuLyoqXG4gKiBwcmVwYXJlIGEgYmxvYiBvYmplY3QgYmFzZWQgb24gdGhlIGNvbnRlbnQgYW5kIGNvbnRlbnQgdHlwZSBwcm92aWRlZFxuICogaWYgY29udGVudCBpcyBibG9iIGl0c2VsZiwgc2ltcGx5IHJldHVybnMgaXQgYmFja1xuICogQHBhcmFtIHZhbFxuICogQHBhcmFtIHZhbENvbnRlbnRUeXBlXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJsb2IgPSAodmFsLCB2YWxDb250ZW50VHlwZT8pID0+IHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBjb25zdCBqc29uVmFsID0gZ2V0VmFsaWRKU09OKHZhbCk7XG4gICAgaWYgKGpzb25WYWwgJiYganNvblZhbCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoanNvblZhbCldLCB7IHR5cGU6IHZhbENvbnRlbnRUeXBlIHx8ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbdmFsXSwgeyB0eXBlOiB2YWxDb250ZW50VHlwZSB8fCAndGV4dC9wbGFpbicgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGJ5IGNvbXBhcmluZyB0d28gb2JqZWN0cyBiYXNlZCBvbiB0aGUgZmllbGRzXG4gKiBAcGFyYW0gb2JqMSBvYmplY3RcbiAqIEBwYXJhbSBvYmoyIG9iamVjdFxuICogQHBhcmFtIGNvbXBhcmVCeSBzdHJpbmcgZmllbGQgdmFsdWVzIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIG9iamVjdCBlcXVhbGl0eSByZXR1cm5zIHRydWUgYmFzZWQgb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VxdWFsV2l0aEZpZWxkcyA9IChvYmoxLCBvYmoyLCBjb21wYXJlQnkpID0+IHtcbiAgICAvLyBjb21wYXJlQnkgY2FuIGJlICdpZCcgb3IgJ2lkMSwgaWQyJyBvciAnaWQxLCBpZDI6aWQzJ1xuICAgIC8vIFNwbGl0IHRoZSBjb21wYXJlYnkgY29tbWEgc2VwYXJhdGVkIHZhbHVlc1xuICAgIGxldCBfY29tcGFyZUJ5ID0gaXNBcnJheShjb21wYXJlQnkpID8gY29tcGFyZUJ5IDogc3BsaXQoY29tcGFyZUJ5LCAnLCcpO1xuXG4gICAgX2NvbXBhcmVCeSA9IG1hcChfY29tcGFyZUJ5LCB0cmltKTtcblxuICAgIHJldHVybiBpc0VxdWFsV2l0aChvYmoxLCBvYmoyLCBmdW5jdGlvbiAobzEsIG8yKSB7XG4gICAgICAgIHJldHVybiBldmVyeShfY29tcGFyZUJ5LCBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGxldCBjYjEsIGNiMiwgX2NiO1xuXG4gICAgICAgICAgICAvLyBJZiBjb21wYXJlYnkgY29udGFpbnMgOiAsIGNvbXBhcmUgdGhlIHZhbHVlcyBieSB0aGUga2V5cyBvbiBlaXRoZXIgc2lkZSBvZiA6XG4gICAgICAgICAgICBpZiAoaW5kZXhPZihjYiwgY29tcGFyZUJ5U2VwYXJhdG9yKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjYjEgPSBjYjIgPSB0cmltKGNiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX2NiID0gc3BsaXQoY2IsIGNvbXBhcmVCeVNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgY2IxID0gdHJpbShfY2JbMF0pO1xuICAgICAgICAgICAgICAgIGNiMiA9IHRyaW0oX2NiWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGdldChvMSwgY2IxKSA9PT0gZ2V0KG8yLCBjYjIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGdldE5vZGUgPSBzZWxlY3RvciA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuLy8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IGlzU3R5bGVTaGVldExvYWRlZCA9IGhyZWYgPT4gISFnZXROb2RlKGBsaW5rW2hyZWY9XCIke2hyZWZ9XCJdYCk7XG5cbi8vIGZ1bmN0aW9uIHRvIHJlbW92ZSBzdHlsZXNoZWV0IGlmIHRoZSBzdHlsZXNoZWV0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCByZW1vdmVTdHlsZVNoZWV0ID0gaHJlZiA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGdldE5vZGUoYGxpbmtbaHJlZj1cIiR7aHJlZn1cIl1gKTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgIH1cbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGxvYWQgYSBzdHlsZXNoZWV0XG5leHBvcnQgY29uc3QgbG9hZFN0eWxlU2hlZXQgPSAodXJsLCBhdHRyKSA9PiB7XG4gICAgaWYgKGlzU3R5bGVTaGVldExvYWRlZCh1cmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgLy8gVG8gYWRkIGF0dHJpYnV0ZXMgdG8gbGluayB0YWdcbiAgICBpZiAoYXR0ciAmJiBhdHRyLm5hbWUpIHtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdzdHlsZXNoZWV0Jyk7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIHJldHVybiBsaW5rO1xufTtcblxuLy8gZnVuY3Rpb24gdG8gbG9hZCBzdHlsZXNoZWV0c1xuZXhwb3J0IGNvbnN0IGxvYWRTdHlsZVNoZWV0cyA9ICh1cmxzID0gW10pID0+IHtcbiAgICAvLyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IGFuIGFycmF5LCBjb252ZXJ0IGl0IHRvIGFuIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVybHMpKSB7XG4gICAgICAgIHVybHMgPSBbdXJsc107XG4gICAgfVxuICAgIHVybHMuZm9yRWFjaChsb2FkU3R5bGVTaGVldCk7XG59O1xuXG4vLyBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc2NyaXB0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCBpc1NjcmlwdExvYWRlZCA9IHNyYyA9PiAhIWdldE5vZGUoYHNjcmlwdFtzcmM9XCIke3NyY31cIl0sIHNjcmlwdFtkYXRhLXNyYz1cIiR7c3JjfVwiXWApO1xuXG5leHBvcnQgY29uc3QgZ2V0TW9tZW50TG9jYWxlT2JqZWN0ID0gKHRpbWVab25lLCBkYXRlT2JqPykgPT4ge1xuICAgIGlmIChkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShtb21lbnQoZGF0ZU9iaikudHoodGltZVpvbmUpLmZvcm1hdCgpKS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdGltZVpvbmV9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKG1vbWVudCgpLnR6KHRpbWVab25lKS5mb3JtYXQoKSkudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxvYWRTY3JpcHQgPSBhc3luYyAodXJsLCBsb2FkVmlhU2NyaXB0VGFnLCBjYWNoZWFibGUgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IF91cmwgPSB1cmwudHJpbSgpO1xuICAgIGlmICghX3VybC5sZW5ndGggfHwgaXNTY3JpcHRMb2FkZWQoX3VybCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGlmIChsb2FkVmlhU2NyaXB0VGFnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgICAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IF91cmw7XG4gICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkgeyAgLy9JRVxuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHsgIC8vT3RoZXIgYnJvd3NlcnNcbiAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY3JpcHQub25lcnJvciA9IChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYoY2FjaGVhYmxlKSB7XG4gICAgICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgICAgICAgZGF0YVR5cGU6ICdzY3JpcHQnLFxuICAgICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgICB1cmw6IHVybFxuICAgICAgICB9KS5kb25lKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxuICAgICAgICAgICAgLmZhaWwocmVhc29uID0+IHJlYXNvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICQuZ2V0U2NyaXB0KHVybClcbiAgICAgICAgICAgIC5kb25lKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxuICAgICAgICAgICAgLmZhaWwocmVhc29uID0+IHJlYXNvbik7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxvYWRTY3JpcHRzID0gYXN5bmMgKHVybHMgPSBbXSwgbG9hZFZpYVNjcmlwdFRhZyA9IHRydWUpID0+IHtcbiAgICBmb3IgKGNvbnN0IHVybCBvZiB1cmxzKSB7XG4gICAgICAgIGF3YWl0IGxvYWRTY3JpcHQodXJsLCBsb2FkVmlhU2NyaXB0VGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufTtcblxuZXhwb3J0IGxldCBfV01fQVBQX1BST0pFQ1Q6IGFueSA9IHt9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2V0cyBzZXNzaW9uIHN0b3JhZ2UgaXRlbSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJRFxuICogQHBhcmFtIGtleSBzdHJpbmdcbiAqIEBwYXJhbSB2YWx1ZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlc3Npb25TdG9yYWdlSXRlbSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgbGV0IGl0ZW06IGFueSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0ge307XG4gICAgfVxuICAgIGl0ZW1ba2V5XSA9IHZhbHVlO1xuXG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkLCBKU09OLnN0cmluZ2lmeShpdGVtKSk7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBzZXNzaW9uIHN0b3JhZ2UgaXRlbSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJRFxuICogQHBhcmFtIGtleSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlc3Npb25TdG9yYWdlSXRlbSA9IGtleSA9PiB7XG4gICAgLy8gc2FuaXR5IGNoZWNrIGZvciB0aGlzIHRvIHdvcmsgd2l0aCBuZy1jb2RlZ2VuXG4gICAgbGV0IGl0ZW0gPSB3aW5kb3cgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgbm9vcCA9ICguLi5hcmdzKSA9PiB7IH07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYmxvYiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBwYXRoXG4gKiBAcGFyYW0gZmlsZXBhdGhcbiAqIEByZXR1cm5zIHByb21pc2UgaGF2aW5nIGJsb2Igb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9CbG9iID0gKGZpbGVwYXRoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIFJlYWQgdGhlIGZpbGUgZW50cnkgZnJvbSB0aGUgZmlsZSBVUkxcbiAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChmaWxlcGF0aCwgZnVuY3Rpb24gKGZpbGVFbnRyeSkge1xuICAgICAgICAgICAgZmlsZUVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBmaWxlIGhhcyB0aGUgY29yZG92YSBmaWxlIHN0cnVjdHVyZS4gVG8gc3VibWl0IHRvIHRoZSBiYWNrZW5kLCBjb252ZXJ0IHRoaXMgZmlsZSB0byBqYXZhc2NyaXB0IGZpbGVcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZ0Jsb2IgPSBuZXcgQmxvYihbcmVhZGVyLnJlc3VsdF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogZmlsZS50eXBlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgJ2Jsb2InOiBpbWdCbG9iLCAnZmlsZXBhdGgnOiBmaWxlcGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0NvcmRvdmEgPSAoKSA9PiB7XG4gICAgcmV0dXJuICEhd2luZG93Wydjb3Jkb3ZhJ107XG59O1xuXG5leHBvcnQgY29uc3QgQXBwQ29uc3RhbnRzID0ge1xuICAgIElOVF9NQVhfVkFMVUU6IDIxNDc0ODM2NDdcbn07XG5cbmV4cG9ydCBjb25zdCBvcGVuTGluayA9IChsaW5rOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nID0gJ19zZWxmJykgPT4ge1xuICAgIGlmIChoYXNDb3Jkb3ZhKCkgJiYgc3RhcnRzV2l0aChsaW5rLCAnIycpKSB7XG4gICAgICAgIGxvY2F0aW9uLmhhc2ggPSBsaW5rO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKGxpbmssIHRhcmdldCk7XG4gICAgfVxufTtcblxuLyogdXRpbCBmdW5jdGlvbiB0byBsb2FkIHRoZSBjb250ZW50IGZyb20gYSB1cmwgKi9cbmV4cG9ydCBjb25zdCBmZXRjaENvbnRlbnQgPSAoZGF0YVR5cGUsIHVybDogc3RyaW5nLCBpblN5bmM6IGJvb2xlYW4gPSBmYWxzZSwgc3VjY2Vzcz8sIGVycm9yPyk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuICQuYWpheCh7IHR5cGU6ICdnZXQnLCBkYXRhVHlwZTogZGF0YVR5cGUsIHVybDogdXJsLCBhc3luYzogIWluU3luYyB9KVxuICAgICAgICAuZG9uZShyZXNwb25zZSA9PiBzdWNjZXNzICYmIHN1Y2Nlc3MocmVzcG9uc2UpKVxuICAgICAgICAuZmFpbChyZWFzb24gPT4gZXJyb3IgJiYgZXJyb3IocmVhc29uKSk7XG59O1xuXG4vKipcbiAqIElmIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBwcm9taXNlLCB0aGVuIG9iamVjdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0LlxuICogQHBhcmFtIHtQcm9taXNlPFQ+IHwgVH0gYVxuICogQHJldHVybnMge1Byb21pc2U8VD59XG4gKi9cbmV4cG9ydCBjb25zdCB0b1Byb21pc2UgPSA8VD4oYTogVCB8IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhIGFzIFQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpbnZva2VzIHRoZSBnaXZlbiB0aGUgZnVuY3Rpb24gKGZuKSB1bnRpbCB0aGUgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzIG9yIHRoZSBtYXhpbXVtIG51bWJlclxuICogb2YgcmV0cmllcyBpcyByZWFjaGVkIG9yIG9uQmVmb3JlUmV0cnkgcmV0dXJucyBmYWxzZS5cbiAqXG4gKiBAcGFyYW0gZm4gLSBhIGZ1bmN0aW9uIHRoYXQgaXMgbmVlZHMgdG8gYmUgaW52b2tlZC4gVGhlIGZ1bmN0aW9uIGNhbiBhbHNvIHJldHVybiBhIHByb21pc2UgYXMgd2VsbC5cbiAqIEBwYXJhbSBpbnRlcnZhbCAtIG1pbmltdW0gdGltZSBnYXAgYmV0d2VlbiBzdWNjZXNzaXZlIHJldHJpZXMuIFRoaXMgYXJndW1lbnQgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMC5cbiAqIEBwYXJhbSBtYXhSZXRyaWVzIC0gbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcy4gVGhpcyBhcmd1bWVudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuIEZvciBhbGwgb3RoZXIgdmFsdWVzLFxuICogbWF4UmV0cmllcyBpcyBpbmZpbml0eS5cbiAqIEBwYXJhbSBvbkJlZm9yZVJldHJ5IC0gYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgcmUtaW52b2tpbmcgYWdhaW4uIFRoaXMgZnVuY3Rpb24gY2FuXG4gKiByZXR1cm4gZmFsc2Ugb3IgYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgdG8gZmFsc2UgdG8gc3RvcCBmdXJ0aGVyIHJldHJ5IGF0dGVtcHRzLlxuICogQHJldHVybnMgeyp9IGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZm4gaXMgc3VjY2VzcyAob3IpIG1heGltdW0gcmV0cnkgYXR0ZW1wdHMgcmVhY2hlZFxuICogKG9yKSBvbkJlZm9yZVJldHJ5IHJldHVybmVkIGZhbHNlLlxuICovXG5leHBvcnQgY29uc3QgcmV0cnlJZkZhaWxzID0gKGZuOiAoKSA9PiBhbnksIGludGVydmFsOiBudW1iZXIsIG1heFJldHJpZXM6IG51bWJlciwgb25CZWZvcmVSZXRyeSA9ICgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpID0+IHtcbiAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgY29uc3QgdHJ5Rm4gPSAoKSA9PiB7XG4gICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbWF4UmV0cmllcyA9IChpc051bWJlcihtYXhSZXRyaWVzKSAmJiBtYXhSZXRyaWVzID4gMCA/IG1heFJldHJpZXMgOiAwKTtcbiAgICBpbnRlcnZhbCA9IChpc051bWJlcihpbnRlcnZhbCkgJiYgaW50ZXJ2YWwgPiAwID8gaW50ZXJ2YWwgOiAwKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZXJyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvUHJvbWlzZTxib29sZWFuPihvbkJlZm9yZVJldHJ5KCkpLnRoZW4oZnVuY3Rpb24gKHJldHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeSAhPT0gZmFsc2UgJiYgKCFtYXhSZXRyaWVzIHx8IHJldHJ5Q291bnQgPD0gbWF4UmV0cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvUHJvbWlzZSh0cnlGbigpKS50aGVuKHJlc29sdmUsIGVycm9yRm4pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVyckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgKCkgPT4gcmVqZWN0KGVyckFyZ3MpKTtcbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgdG9Qcm9taXNlKHRyeUZuKCkpLnRoZW4ocmVzb2x2ZSwgZXJyb3JGbik7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIFByb21pc2Ugb2YgYSBkZWZlciBjcmVhdGVkIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGhhcyBhYm9ydCBmdW5jdGlvbiB0aGF0IHdpbGwgcmVqZWN0IHRoZSBkZWZlciB3aGVuIGNhbGxlZC5cbiAqIEByZXR1cm5zIHsqfSBhbmd1bGFyIGRlZmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QWJvcnRhYmxlRGVmZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgX2RlZmVyOiBhbnkgPSB7XG4gICAgICAgIHByb21pc2U6IG51bGwsXG4gICAgICAgIHJlamVjdDogbnVsbCxcbiAgICAgICAgcmVzb2x2ZTogbnVsbCxcbiAgICAgICAgb25BYm9ydDogKCkgPT4geyB9LFxuICAgICAgICBpc0Fib3J0ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBfZGVmZXIucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgX2RlZmVyLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICBfZGVmZXIucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIF9kZWZlci5wcm9taXNlLmFib3J0ID0gKCkgPT4ge1xuICAgICAgICB0cmlnZ2VyRm4oX2RlZmVyLm9uQWJvcnQpO1xuICAgICAgICBfZGVmZXIucmVqZWN0KCdhYm9ydGVkJyk7XG4gICAgICAgIF9kZWZlci5pc0Fib3J0ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgcmV0dXJuIF9kZWZlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDU1NSdWxlID0gKHJ1bGVTZWxlY3Rvcjogc3RyaW5nLCBydWxlczogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc3R5bGVzaGVldCA9IGRvY3VtZW50LnN0eWxlU2hlZXRzWzBdO1xuICAgIHN0eWxlc2hlZXQuaW5zZXJ0UnVsZShgJHtydWxlU2VsZWN0b3J9IHsgJHtydWxlc30gfWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9IChsaW5rKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgLy8gSWYgdXJsIHBhcmFtcyBhcmUgcHJlc2VudCwgY29uc3RydWN0IHBhcmFtcyBvYmplY3QgYW5kIHBhc3MgaXQgdG8gc2VhcmNoXG4gICAgY29uc3QgaW5kZXggPSBsaW5rLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gc3BsaXQobGluay5zdWJzdHJpbmcoaW5kZXggKyAxLCBsaW5rLmxlbmd0aCksICcmJyk7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGFyYW1BcnJheSA9IHNwbGl0KHBhcmFtLCAnPScpO1xuICAgICAgICAgICAgcGFyYW1zW3BhcmFtQXJyYXlbMF1dID0gcGFyYW1BcnJheVsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um91dGVOYW1lRnJvbUxpbmsgPSAobGluaykgPT4ge1xuICAgIGxpbmsgPSBsaW5rLnJlcGxhY2UoJyMvJywgJy8nKTtcbiAgICBjb25zdCBpbmRleCA9IGxpbmsuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGluayA9IGxpbmsuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbms7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBcHBsZVByb2R1Y3QgPSAvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbmV4cG9ydCBjb25zdCBkZWZlciA9ICgpID0+IHtcbiAgICBjb25zdCBkID0ge1xuICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICByZXNvbHZlOiBub29wLFxuICAgICAgICByZWplY3Q6IG5vb3BcbiAgICB9O1xuICAgIGQucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZC5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZC5yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgcmV0dXJuIGQ7XG59O1xuXG4vKlxuICogSW52b2tlcyB0aGUgZ2l2ZW4gbGlzdCBvZiBmdW5jdGlvbnMgc2VxdWVudGlhbGx5IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gSWYgYSBmdW5jdGlvbiByZXR1cm5zIGEgcHJvbWlzZSxcbiAqIHRoZW4gbmV4dCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25seSBpZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWN1dGVQcm9taXNlQ2hhaW4gPSAoZm5zLCBhcmdzLCBkPywgaT8pID0+IHtcbiAgICBkID0gZCB8fCBkZWZlcigpO1xuICAgIGkgPSBpIHx8IDA7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgZm5zID0gZmlsdGVyKGZucywgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gIShpc1VuZGVmaW5lZChmbikgfHwgaXNOdWxsKGZuKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZm5zICYmIGkgPCBmbnMubGVuZ3RoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0b1Byb21pc2UoZm5zW2ldLmFwcGx5KHVuZGVmaW5lZCwgYXJncykpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gZXhlY3V0ZVByb21pc2VDaGFpbihmbnMsIGFyZ3MsIGQsIGkgKyAxKSwgZC5yZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGQucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZC5wcm9taXNlO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGRhdGEgc291cmNlcyBhbmQgd2lsbCBjaGVjayBpZiBib3RoIGFyZSBzYW1lIGJ5IGNvbXBhcmluZyB0aGUgdW5pcXVlIGlkIGFuZFxuICogY29udGV4dCBpbiB3aGljaCBkYXRhc291cmNlcyBhcmUgcHJlc2VudFxuICogQHJldHVybnMgeyp9IGJvb2xlYW4gdHJ1ZS8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGF0YVNvdXJjZUVxdWFsID0gKGQxLCBkMikgPT4ge1xuICAgIHJldHVybiBkMS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9VTklRVUVfSURFTlRJRklFUikgPT09IGQyLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1VOSVFVRV9JREVOVElGSUVSKSAmJlxuICAgICAgICBpc0VxdWFsKGQxLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUiksIGQyLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUikpO1xufTtcblxuLyoqXG4gKiBjaGVja3MgaWYgdGhlIHBhc3NlZCBkYXRhc291cmNlIGNvbnRleHQgbWF0Y2hlcyB3aXRoIHBhc3NlZCBjb250ZXh0XG4gKiBAcGFyYW0gZHMsIGRhdGFzb3VyY2UgaGF2aW5nIGEgY29udGV4dFxuICogQHBhcmFtIGN0eCwgY29udGV4dCB0byBjb21wYXJlIHdpdGhcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEYXRhU291cmNlQ3R4ID0gKGRzLCBjdHgpID0+IHtcbiAgICByZXR1cm4gZHMuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSA9PT0gY3R4O1xufTtcblxuLyoqXG4gKiBUaGlzIHRyYXZlcnNlcyB0aGUgZmlsdGVyZXhwcmVzc2lvbnMgb2JqZWN0IHJlY3Vyc2l2ZWx5IGFuZCBwcm9jZXNzIHRoZSBiaW5kIHN0cmluZyBpZiBhbnkgaW4gdGhlIG9iamVjdFxuICogQHBhcmFtIHZhcmlhYmxlIHZhcmlhYmxlIG9iamVjdFxuICogQHBhcmFtIG5hbWUgbmFtZSBvZiB0aGUgdmFyaWFibGVcbiAqIEBwYXJhbSBjb250ZXh0IHNjb3BlIG9mIHRoZSB2YXJpYWJsZVxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0ZpbHRlckV4cEJpbmROb2RlID0gKGNvbnRleHQsIGZpbHRlckV4cHJlc3Npb25zLCB2YXJpYWJsZT8pID0+IHtcbiAgICBjb25zdCBkZXN0cm95Rm4gPSBjb250ZXh0LnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyID8gY29udGV4dC5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lci5iaW5kKGNvbnRleHQpIDogX25vb3A7XG4gICAgY29uc3QgZmlsdGVyJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBiaW5kRmlsRXhwT2JqID0gKG9iaiwgdGFyZ2V0Tm9kZUtleSkgPT4ge1xuICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XG4gICAgICAgICAgIGlmICgobmV3VmFsID09PSBvbGRWYWwgJiYgaXNVbmRlZmluZWQobmV3VmFsKSkgfHwgKGlzVW5kZWZpbmVkKG5ld1ZhbCkgJiYgIWlzVW5kZWZpbmVkKG9sZFZhbCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBjbG9uaW5nIGZvciBibG9iIGNvbHVtblxuICAgICAgICAgICBpZiAoIWluY2x1ZGVzKFsnYmxvYicsICdmaWxlJ10sIG9iai50eXBlKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGdldENsb25lZE9iamVjdChuZXdWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eTogd2hlcmUgd2UgYXJlIGFsbG93aW5nIHRoZSB1c2VyIHRvIGJpbmQgY29tcGxldGUgb2JqZWN0XG4gICAgICAgICAgICBpZiAob2JqLnRhcmdldCA9PT0gJ2RhdGFCaW5kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgZXhpc3RpbmcgZGF0YWJpbmRpbmcgZWxlbWVudFxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnJ1bGVzID0gW107XG4gICAgICAgICAgICAgICAgLy8gbm93IGFkZCBhbGwgdGhlIHJldHVybmVkIHZhbHVlc1xuICAgICAgICAgICAgICAgIGZvckVhY2gobmV3VmFsLCBmdW5jdGlvbiAodmFsdWUsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQnOiB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnOiBvYmoubWF0Y2hNb2RlIHx8ICdzdGFydGlnbm9yZWNhc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHZhbHVlIHRvIHRoZSByb290IG5vZGVcbiAgICAgICAgICAgICAgICBvYmpbdGFyZ2V0Tm9kZUtleV0gPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXIkLm5leHQoeyBmaWx0ZXJFeHByZXNzaW9ucywgbmV3VmFsIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgob2JqW3RhcmdldE5vZGVLZXldLCAnYmluZDonKSkge1xuICAgICAgICAgICAgLy8gW1RvZG8tQ1NQXTogbmVlZHMgYSBjaGVjaywgd2hlcmUgaXMgdGhpcyB1c2VkXG4gICAgICAgICAgICBkZXN0cm95Rm4oXG4gICAgICAgICAgICAgICAgJHdhdGNoKG9ialt0YXJnZXROb2RlS2V5XS5yZXBsYWNlKCdiaW5kOicsICcnKSwgY29udGV4dCwge30sIHZhcmlhYmxlID8gdmFyaWFibGUuaW52b2tlT25GaWx0ZXJ0RXhwcmVzc2lvbkNoYW5nZS5iaW5kKHZhcmlhYmxlLCBvYmosIHRhcmdldE5vZGVLZXkpIDogbGlzdGVuZXIsIHVuZGVmaW5lZCwgZmFsc2UsIHthcnJheVR5cGU6IGluY2x1ZGVzKFsnaW4nLCAnbm90aW4nXSwgb2JqLm1hdGNoTW9kZSl9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMgPT4ge1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMucnVsZXMpIHtcbiAgICAgICAgICAgIGZvckVhY2goZXhwcmVzc2lvbnMucnVsZXMsIChmaWxFeHBPYmosIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMoZmlsRXhwT2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLm1hdGNoTW9kZSA9PT0gJ2JldHdlZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kRmlsRXhwT2JqKGZpbEV4cE9iaiwgJ3NlY29uZHZhbHVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYmluZEZpbEV4cE9iaihmaWxFeHBPYmosICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zKGZpbHRlckV4cHJlc3Npb25zKTtcblxuICAgIHJldHVybiBmaWx0ZXIkO1xufTtcblxuLy8gVGhpcyBtZXRob2Qgd2lsbCBzZXQgdGhlIGdpdmVuIHByb3RvIG9uIHRoZSB0YXJnZXRcbmV4cG9ydCBjb25zdCBleHRlbmRQcm90byA9ICh0YXJnZXQsIHByb3RvKSA9PiB7XG4gICAgbGV0IF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICAgIF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pO1xuICAgICAgICAvLyByZXR1cm4gaWYgdGhlIHByb3RvdHlwZSBvZiBjcmVhdGVkIGNvbXBvbmVudCBhbmQgcHJvdG90eXBlIG9mIGNvbnRleHQgYXJlIHNhbWVcbiAgICAgICAgaWYgKHByb3RvID09PSBfcHJvdG8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3Byb3RvLCBwcm90byk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRXh0cmFTbGFzaGVzID0gZnVuY3Rpb24gKHVybCkge1xuICAgIGNvbnN0IGJhc2U2NHJlZ2V4ID0gL15kYXRhOmltYWdlXFwvKFthLXpdezIsfSk7YmFzZTY0LC87XG4gICAgaWYgKGlzU3RyaW5nKHVybCkpIHtcbiAgICAgICAgLypcbiAgICAgICAgKiBzdXBwb3J0IGZvciBtb2JpbGUgYXBwcyBoYXZpbmcgbG9jYWwgZmlsZSBwYXRoIHVybCBzdGFydGluZyB3aXRoIGZpbGU6Ly8vIGFuZFxuICAgICAgICAqIHN1cHBvcnQgZm9yIGJhc2U2NCBmb3JtYXRcbiAgICAgICAgKiAqL1xuICAgICAgICBpZiAoc3RhcnRzV2l0aCh1cmwsICdmaWxlOi8vLycpIHx8IGJhc2U2NHJlZ2V4LnRlc3QodXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFteOl1cXC8pKFxcLykrJywgJ2cnKSwgJyQxJyk7XG4gICAgfVxufTtcblxuJC5jYWNoZWRTY3JpcHQgPSAoKCkgPT4ge1xuICAgIGNvbnN0IGluUHJvZ3Jlc3MgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgU2V0KCk7XG5cbiAgICBjb25zdCBpc0luUHJvZ3Jlc3MgPSB1cmwgPT4gaW5Qcm9ncmVzcy5oYXModXJsKTtcbiAgICBjb25zdCBpc1Jlc29sdmVkID0gdXJsID0+IHJlc29sdmVkLmhhcyh1cmwpO1xuICAgIGNvbnN0IG9uTG9hZCA9IHVybCA9PiB7XG4gICAgICAgIHJlc29sdmVkLmFkZCh1cmwpO1xuICAgICAgICBpblByb2dyZXNzLmdldCh1cmwpLnJlc29sdmUoKTtcbiAgICAgICAgaW5Qcm9ncmVzcy5kZWxldGUodXJsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0SW5Qcm9ncmVzcyA9IHVybCA9PiB7XG4gICAgICAgIGxldCByZXNGbjtcbiAgICAgICAgbGV0IHJlakZuO1xuICAgICAgICBjb25zdCBwcm9taXNlOiBhbnkgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHJlc0ZuID0gcmVzO1xuICAgICAgICAgICAgcmVqRm4gPSByZWo7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb21pc2UucmVzb2x2ZSA9IHJlc0ZuO1xuICAgICAgICBwcm9taXNlLnJlamVjdCA9IHJlakZuO1xuXG4gICAgICAgIGluUHJvZ3Jlc3Muc2V0KHVybCwgcHJvbWlzZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIGlmIChpc1Jlc29sdmVkKHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0luUHJvZ3Jlc3ModXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGluUHJvZ3Jlc3MuZ2V0KHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRJblByb2dyZXNzKHVybCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgdXJsXG4gICAgICAgIH07XG5cbiAgICAgICAgJC5hamF4KG9wdGlvbnMpLmRvbmUoKCkgPT4gb25Mb2FkKHVybCkpO1xuXG4gICAgICAgIHJldHVybiBpblByb2dyZXNzLmdldCh1cmwpO1xuICAgIH07XG59KSgpO1xuXG5jb25zdCBERUZBVUxUX0RJU1BMQVlfRk9STUFUUyA9IHtcbiAgICBEQVRFOiAneXl5eS1NTS1kZCcsXG4gICAgVElNRTogJ2hoOm1tIGEnLFxuICAgIFRJTUVTVEFNUDogJ3l5eXktTU0tZGQgaGg6bW06c3MgYScsXG4gICAgREFURVRJTUU6ICd5eXl5LU1NLWRkIGhoOm1tOnNzIGEnLFxufTtcbi8vIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRpc3BsYXkgZGF0ZSBmb3JtYXQgZm9yIGdpdmVuIHR5cGVcbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQgPSB0eXBlID0+IHtcbiAgICByZXR1cm4gREVGQVVMVF9ESVNQTEFZX0ZPUk1BVFNbdG9VcHBlcih0eXBlKV07XG59O1xuXG4vLyBHZW5lcmF0ZSBmb3IgYXR0cmlidXRlIG9uIGxhYmVsIGFuZCBJRCBvbiBpbnB1dCBlbGVtZW50LCBzbyB0aGF0IGxhYmVsIGVsZW1lbnRzIGFyZSBhc3NvY2lhdGVkIHRvIGZvcm0gY29udHJvbHNcbmV4cG9ydCBjb25zdCBhZGRGb3JJZEF0dHJpYnV0ZXMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBsYWJlbEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbC5jb250cm9sLWxhYmVsJyk7XG4gICAgbGV0IGlucHV0RWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgaWYgKCFpbnB1dEVsLmxlbmd0aCkge1xuICAgICAgICBpbnB1dEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpO1xuICAgIH1cbiAgICAvKmlmIHRoZXJlIGFyZSBvbmx5IG9uZSBpbnB1dCBlbCBhbmQgbGFiZWwgRWwgYWRkIGlkIGFuZCBmb3IgYXR0cmlidXRlKi9cbiAgICBpZiAobGFiZWxFbC5sZW5ndGggJiYgaW5wdXRFbC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0SWQgPSAkKGlucHV0RWxbMF0gYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1t3aWRnZXQtaWRdJykuYXR0cignd2lkZ2V0LWlkJyk7XG4gICAgICAgIGlmICh3aWRnZXRJZCkge1xuICAgICAgICAgICAgc2V0QXR0cihpbnB1dEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnaWQnLCB3aWRnZXRJZCk7XG4gICAgICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdmb3InLCB3aWRnZXRJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLypBZGRpbmcgYXJpYS1sYWJlbGxlZGJ5IHRvIHJhZGlvc2V0LCBjaGVja2JveHNldCB3aWRnZXRzKi9cbiAgICBjb25zdCB1bEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd1bCcpO1xuICAgIGlmIChsYWJlbEVsLmxlbmd0aCAmJiB1bEVsLmxlbmd0aCAmJiAodWxFbFswXS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3JhZGlvZ3JvdXAnIHx8IHVsRWxbMF0uZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICdncm91cCcpKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldElkID0gJ3dtLWdyb3VwLWxhYmVsLScgKyBnZW5lcmF0ZUdVSWQoKTtcbiAgICAgICAgc2V0QXR0cih1bEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnYXJpYS1sYWJlbGxlZGJ5Jywgd2lkZ2V0SWQpO1xuICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdpZCcsIHdpZGdldElkKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBjb250YWluZXIgcG9zaXRpb25cbiAqIEZvciBleGFtcGxlOiAxLiBXaGVuIGRhdGVwaWNrZXIgY29udHJvbCBwbGFjZWQgY2xvc2VkIHRvIHRoZSBzY3JlZW4gbGVmdCBlZGdlcywgaXQgaXMgZ29pbmcgdG8gbmVnYXRpdmUgdmFsdWVzIHdoaWNoIGlzICBjdXR0aW5nIHRoZSBjb250YWluZXIuXG4gKiBUbyBGaXggdGhlIGNvbnRhaW5lciBvdmVybGFwcGluZyBpc3N1ZSBjaGFuZ2luZyB0aGUgY29udHJhaW5lciBsZWZ0IHRyYW5zbGF0aW9uIHRvIDBcbiAqIEBwYXJhbSBjb250YWluZXJFbGVtIC0gcGlja2VyL2Ryb3Bkb3duIGNvbnRhaW5lciBlbGVtZW50KGpxdWVyeSlcbiAqIEBwYXJhbSBwYXJlbnRFbGVtIC0gd2lkZ2V0IG5hdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gcmVmIC0gc2NvcGUgb2YgcGFydGljdWxhciBsaWJyYXJ5IGRpcmVjdGl2ZVxuICogQHBhcmFtIGVsZSAtIENoaWxkIGVsZW1lbnQoanF1ZXJ5KS4gRm9yIHNvbWUgb2YgdGhlIHdpZGdldHModGltZSwgc2VhcmNoKSBjb250YWluZXJFbGVtIGRvZXNuJ3QgaGF2ZSBoZWlnaHQuIFRoZSBpbm5lciBlbGVtZW50KGRyb3Bkb3duLW1lbnUpIGhhcyBoZWlnaHQgc28gcGFzc2luZyBpdCBhcyBvcHRpb25hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFkanVzdENvbnRhaW5lclBvc2l0aW9uID0gKGNvbnRhaW5lckVsZW0sIHBhcmVudEVsZW0sIHJlZiwgZWxlPykgPT4ge1xuICAgIGNvbnN0IHpvbmVSZWYgPSByZWYuX25nWm9uZSB8fCByZWYubmdab25lO1xuICAgIHpvbmVSZWYub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcbiAgICAgICAgaWYgKGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPCAwKSB7XG4gICAgICAgICAgICAgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA9IDA7XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgIH1cbiAgICAgICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbihjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgICB9KTtcbiAgIH07XG5cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgY29udGFpbmVyIHBvc2l0aW9uXG4gKiBGb3IgZXhhbXBsZTogMS4gV2hlbiBkYXRlcGlja2VyIGNvbnRyb2wgcGxhY2VkIGNsb3NlZCB0byB0aGUgc2NyZWVuIHJpZ2h0IGVkZ2VzLCBpdCBpcyBnb2luZyB0byBvdXQgb2YgdGhlIHZpZXdwb3J0IHZhbHVlcyB3aGljaCBpcyAgY3V0dGluZyB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIGNvbnRhaW5lckVsZW0gIHBpY2tlci9kcm9wZG93biBjb250YWluZXIgZWxlbWVudChqcXVlcnkpXG4gKiBAcGFyYW0gcGFyZW50RWxlbSB3aWRnZXQgbmF0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSByZWYgIHNjb3BlIG9mIHBhcnRpY3VsYXIgbGlicmFyeSBkaXJlY3RpdmVcbiAqIEBwYXJhbSBlbGUgQ2hpbGQgZWxlbWVudChqcXVlcnkpLiBGb3Igc29tZSBvZiB0aGUgd2lkZ2V0cyh0aW1lLCBzZWFyY2gpIGNvbnRhaW5lckVsZW0gZG9lc24ndCBoYXZlIGhlaWdodC4gVGhlIGlubmVyIGVsZW1lbnQoZHJvcGRvd24tbWVudSkgaGFzIGhlaWdodCBzbyBwYXNzaW5nIGl0IGFzIG9wdGlvbmFsLlxuICovXG4gICBleHBvcnQgY29uc3QgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyA9IChjb250YWluZXJFbGVtLCBwYXJlbnRFbGVtLCByZWYsIGVsZT8pID0+IHtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsZSA/IHBhcnNlSW50KGVsZS5jc3MoJ3dpZHRoJykpIDogcGFyc2VJbnQoY29udGFpbmVyRWxlbS5jc3MoJ3dpZHRoJykpO1xuICAgICAgICBjb25zdCB2aWV3UG9ydFdpZHRoID0gJCh3aW5kb3cpLndpZHRoKCkgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgICAgY29uc3QgcGFyZW50RGltZXNpb24gPSBwYXJlbnRFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBwYXJlbnRSaWdodCA9IHBhcmVudERpbWVzaW9uLnJpZ2h0ICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAgIGxldCBuZXdMZWZ0O1xuICAgICAgICBjb25zdCB6b25lUmVmID0gcmVmLl9uZ1pvbmUgfHwgcmVmLm5nWm9uZTtcbiAgICAgICAgem9uZVJlZi5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcblxuICAgICAgICAgICAgaWYgKHZpZXdQb3J0V2lkdGggLSAocGFyZW50UmlnaHQgKyBwYXJlbnREaW1lc2lvbi53aWR0aCkgPCBjb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgICAgIG5ld0xlZnQgPSBwYXJlbnRSaWdodCAtIGNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChuZXdMZWZ0IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA9IG5ld0xlZnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbihjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgICAgICB9KTtcbiAgIH07XG5cbiAgLyoqXG4gICAqIEZvciBnaXZlbiBlbGVtZW50IHNldCB0aGUgdHJhc2xhdGlvblxuICAgKiBAcGFyYW0gY29udGFpbmVyRWxlbSB0YW5zbGF0ZWQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zIHRyYW5zbGF0ZSBtYXRyaXggcG9zaXRpb25zXG4gICAqL1xuICAgZXhwb3J0IGNvbnN0IHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbiA9IChjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlUG9zaXRpb24gPSAndHJhbnNsYXRlM2QoJyArIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgKyAncHgsICcgKyBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQyICsgJ3B4LCAwcHgpJztcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5Nb3pUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5tc1RyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLk9UcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgIH07XG5cbiAgIC8qKlxuICAgICpcbiAgICAqIEBwYXJhbSBjb250YWluZXJFbGVtIGVsZW1ldCBmb3IgdGhlIFdlYktpdENTU01hdHJpeFxuICAgICovXG4gICAgZXhwb3J0IGNvbnN0IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXggPSAoY29udGFpbmVyRWxlbSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIFdlYktpdENTU01hdHJpeCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTVNDU1NNYXRyaXgod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyRWxlbVswXSkudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFdlYktpdENTU01hdHJpeCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXJFbGVtWzBdKS53ZWJraXRUcmFuc2Zvcm0pO1xuICAgIH1cblxuLy8gY2xvc2UgYWxsIHRoZSBwb3BvdmVycy5cbmV4cG9ydCBjb25zdCBjbG9zZVBvcG92ZXIgPSAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudC5jbG9zZXN0KCcuYXBwLXBvcG92ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFwcC1wb3BvdmVyLXdyYXBwZXInKTtcbiAgICAgICAgZm9yRWFjaChwb3BvdmVyRWxlbWVudHMsIChlbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGUud2lkZ2V0LmlzT3Blbikge1xuICAgICAgICAgICAgICAgIGVsZS53aWRnZXQuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGluIHRoZSBhcHBcbiAqIFRoaXMgaXMgZXhwb3NlZCBmb3IgdGhlIGVuZCB1c2VyIGRldmVsb3BlciBvZiBXTSBhcHBcbiAqIFRoaXMgaXMgdGhlIGFsdGVybmF0aXZlIGZvciAkcnMuJHNhZmVBcHBseSgpIGluIEFuZ3VsYXJKU1xuICogU2VlICRhcHBEaWdlc3QgaW4gdXRpbHMgZm9yIG1vcmUgaW5mb1xuICovXG5leHBvcnQgY29uc3QgZGV0ZWN0Q2hhbmdlcyA9ICRhcHBEaWdlc3Q7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciB0aGUgYWN0aW9uL2xpbmsgb2YgbWVudS9uYXYgaXRlbVxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogQHBhcmFtIGl0ZW0gLSBpdGVtIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgdHJpZ2dlckl0ZW1BY3Rpb24gPSAoc2NvcGUsIGl0ZW0pID0+IHtcbiAgICBsZXQgaXRlbUxpbmsgPSBpdGVtLmxpbms7XG4gICAgY29uc3QgaXRlbUFjdGlvbiA9IGl0ZW0uYWN0aW9uO1xuICAgIGNvbnN0IGxpbmtUYXJnZXQgPSBpdGVtLnRhcmdldDtcbiAgICBpZiAoaXRlbUFjdGlvbikge1xuICAgICAgICBpZiAoIXNjb3BlLml0ZW1BY3Rpb25Gbikge1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBUaGlzIHdpbGwgbm90IHdvcmsgYXMgZnVuY3Rpb24gd2lsbCBiZSBkeW5hbWljXG4gICAgICAgICAgICBzY29wZS5pdGVtQWN0aW9uRm4gPSAkcGFyc2VFdmVudChpdGVtQWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLml0ZW1BY3Rpb25GbihzY29wZS51c2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHQsIE9iamVjdC5jcmVhdGUoaXRlbSkpO1xuICAgIH1cbiAgICBpZiAoaXRlbUxpbmspIHtcbiAgICAgICAgaWYgKGl0ZW1MaW5rLnN0YXJ0c1dpdGgoJyMvJykgJiYgKCFsaW5rVGFyZ2V0IHx8IGxpbmtUYXJnZXQgPT09ICdfc2VsZicpKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGdldFVybFBhcmFtcyhpdGVtTGluayk7XG4gICAgICAgICAgICBpdGVtTGluayA9IGdldFJvdXRlTmFtZUZyb21MaW5rKGl0ZW1MaW5rKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9IGdldChzY29wZSwgJ3JvdXRlJykgfHwgZ2V0KHNjb3BlLCAnbWVudVJlZi5yb3V0ZScpO1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFtpdGVtTGlua10sIHsgcXVlcnlQYXJhbXMgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcGVuTGluayhpdGVtTGluaywgbGlua1RhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIGdldCBkYXRzb3VyY2UgZnJvbSB0aGUgZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHIgLSBleHByZXNzaW9uIG9mIHRoZSBkYXRhc2V0XG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBFeGFtcGxlMTogZXhwciAtIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldC5kZXRhaWxzWyRpXS5hZGRyZXNzZXNcIiB0aGVuIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gZGF0YXNvdXJjZSBhcyBWYXJpYWJsZXMuc3RhdGljVmFyMVxuICogRXhhbXBsZTI6IGV4cHIgLSBcIldpZGdldHMubGlzdDEuY3VycmVudEl0ZW0uYWRkcmVzc2VzXCIgYW5kIGxpc3QxIGlzIGJvdW5kIHRvIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldC5kZXRhaWxzXCIgdGhlbiB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGRhdGFzb3VyY2UgYXMgVmFyaWFibGVzLnN0YXRpY1ZhcjFcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFzb3VyY2VGcm9tRXhwciA9IChleHByLCBzY29wZSkgPT4ge1xuICAgIGNvbnN0IGlzQm91bmRUb1ZhcmlhYmxlID0gc3RhcnRzV2l0aChleHByLCAnVmFyaWFibGVzLicpO1xuICAgIGNvbnN0IGlzQm91bmRUb1dpZGdldCA9IHN0YXJ0c1dpdGgoZXhwciwgJ1dpZGdldHMuJyk7XG4gICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgaWYgKGlzQm91bmRUb1ZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiBnZXQoc2NvcGUudmlld1BhcmVudC5WYXJpYWJsZXMsIHBhcnRzWzFdKTtcbiAgICB9XG4gICAgaWYgKGlzQm91bmRUb1dpZGdldCkge1xuICAgICAgICBjb25zdCB3aWRnZXRTY29wZSA9IGdldChzY29wZS52aWV3UGFyZW50LldpZGdldHMsIHBhcnRzWzFdKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA9IHdpZGdldFNjb3BlLiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKTtcbiAgICAgICAgbGV0IHdpZGdldEJvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgd2lkZ2V0Qm91bmRFeHByZXNzaW9uID0gKCF3aWRnZXRTY29wZS5kYXRhc291cmNlICYmIHdpZGdldERhdGFzZXRCb3VuZEV4cHIpID8gd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA6IHdpZGdldFNjb3BlLmJpbmRkYXRhc2V0O1xuICAgICAgICByZXR1cm4gZ2V0RGF0YXNvdXJjZUZyb21FeHByKHdpZGdldEJvdW5kRXhwcmVzc2lvbiwgd2lkZ2V0U2NvcGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gZ2V0IGRhdGFzZXQgYm91bmQgZXhwcmVzc2lvbiBmcm9tIGxpc3QgY3VycmVudGl0ZW0gZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHIgLSBib3VuZCBkYXRhc2V0IGV4cHJlc3Npb25cbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEV4YW1wbGUxOiBleHByIC0gXCJXaWRnZXRzLmxpc3QxLmN1cnJlbnRJdGVtLmRldGFpbHNcIiBhbmQgbGlzdDEgaXMgYm91bmQgdG8gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0XCIgdGhlbiBpdCByZXR1cm5zIGV4cHJlc3Npb24gYXMgXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0WyRpXS5kZXRhaWxzXCJcbiAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RDdXJyZW50SXRlbUV4cHIgPSAoZXhwciwgc2NvcGUpID0+IHtcbiAgICBjb25zdCBjdXJyZW50SXRlbVJlZ0V4ID0gL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nO1xuICAgIGlmIChjdXJyZW50SXRlbVJlZ0V4LnRlc3QoZXhwcikpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHdpZGdldFNjb3BlID0gZ2V0KHNjb3BlLnZpZXdQYXJlbnQuV2lkZ2V0cywgcGFydHNbMV0pO1xuICAgICAgICBjb25zdCB3aWRnZXREYXRhc2V0Qm91bmRFeHByID0gd2lkZ2V0U2NvcGUuJGF0dHJzLmdldCgnZGF0YXNldGJvdW5kZXhwcicpO1xuICAgICAgICBpZiAoIXdpZGdldFNjb3BlLmRhdGFzb3VyY2UgJiYgd2lkZ2V0RGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldERhdGFzZXRCb3VuZEV4cHJ9WyRpXWApO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RDdXJyZW50SXRlbUV4cHIoZXhwciwgc2NvcGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldFNjb3BlLmJpbmRkYXRhc2V0fVskaV1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbn07XG5cbi8vIHRoaXMgd2lsbCBhZGQgdGhlIGh0bWwgdGFnIHRvIHRoZSB3aWRnZXQgdG8gc2NvcGUgdGhlIGNzcyB0byB0aGUgcGFnZS5cbmV4cG9ydCBjb25zdCBmaW5kUm9vdENvbnRhaW5lciA9ICgkZWwpID0+IHtcbiAgICBsZXQgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXByZWZhYicpO1xuICAgIGlmICghcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXBhcnRpYWwnKTtcbiAgICB9XG4gICAgaWYoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1zcGEtcGFnZScpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiByb290Lmxlbmd0aCAmJiByb290LnBhcmVudCgpWzBdLnRhZ05hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgVkFMSURBVE9SID0ge1xuICAgIFJFUVVJUkVEOiAncmVxdWlyZWQnLFxuICAgIE1BWENIQVJTOiAnbWF4Y2hhcnMnLFxuICAgIE1JTlZBTFVFOiAnbWludmFsdWUnLFxuICAgIE1BWFZBTFVFOiAnbWF4dmFsdWUnLFxuICAgIFJFR0VYUDogJ3JlZ2V4cCcsXG4gICAgTUlOREFURTogJ21pbmRhdGUnLFxuICAgIE1BWERBVEU6ICdtYXhkYXRlJyxcbiAgICBNSU5USU1FOiAnbWludGltZScsXG4gICAgTUFYVElNRTogJ21heHRpbWUnLFxuICAgIEVYQ0xVREVEQVRFUzogJ2V4Y2x1ZGVkYXRlcycsXG4gICAgRVhDTFVERURBWVM6ICdleGNsdWRlZGF5cydcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1GaWxlVVJJID0gKHVybCkgPT4ge1xuICAgIGlmIChpc1N0cmluZyh1cmwpICYmIGhhc0NvcmRvdmEoKSAmJiB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoJ2ZpbGU6Ly8nLCAnL19hcHBfZmlsZV8nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FuZHJvaWQoKSAmJiBsb2NhdGlvbi5ocmVmLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoY29yZG92YS5maWxlLmFwcGxpY2F0aW9uRGlyZWN0b3J5ICsgJ3d3dycsICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgnZmlsZTovLycsICcvX2FwcF9maWxlXycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kU2NyaXB0VG9IZWFkID0gKGNhbGxiYWNrKSA9PntcblxuICAgIGNvbnN0IHNjcmlwdGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdGVsZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgIGNhbGxiYWNrKFdNX0NVU1RPTV9GT1JNQVRURVJTKTtcbiAgICB9O1xuICAgIHNjcmlwdGVsZS5vbmVycm9yID0gZXJyID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSBmaWxlICcgKyBzY3JpcHRlbGUuc3JjICsgJ1xcbicgKyBlcnIpO1xuICAgIH07XG4gICAgc2NyaXB0ZWxlLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICBzY3JpcHRlbGUuc3JjID0gJy4vZXh0ZW5zaW9ucy9mb3JtYXR0ZXJzLmpzJztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdGVsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwU2V0dGluZyA9IChrZXksIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICAgIHJldHVybiAoX1dNX0FQUF9QUk9QRVJUSUVTLmV4dHJhX3NldHRpbmdzICYmIGdldChfV01fQVBQX1BST1BFUlRJRVMuZXh0cmFfc2V0dGluZ3MsIGtleSkpIHx8IGRlZmF1bHRWYWx1ZTtcbn07XG5cbi8qIHRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgaXRlbWNsYXNzIGRlcGVuZGluZyBvbiBpdGVtc3BlcnJvdy5cbiAgICogaWYgaXRlbXNwZXJyb3cgaXMgMiBmb3IgbGFyZ2UgZGV2aWNlLCB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLXhzLTEgY29sLXNtLTEgY29sLWxnLTInXG4gICAqIGlmIGl0ZW1zcGVycm93IGlzICdsZy0zJyB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLWxnLTMnXG4qL1xuZXhwb3J0IGNvbnN0IHNldExpc3RDbGFzcyA9IChzY29wZSkgPT4ge1xuICAgIGxldCB0ZW1wID0gJyc7XG4gICAgaWYgKHNjb3BlLml0ZW1zcGVycm93KSB7XG4gICAgICAgIGlmIChpc05hTihwYXJzZUludChzY29wZS5pdGVtc3BlcnJvdywgMTApKSkge1xuICAgICAgICAgICAgLy8gaGFuZGxpbmcgaXRlbXNwZXJyb3cgY29udGFpbmluZyBzdHJpbmcgb2YgY2xhc3Nlc1xuICAgICAgICAgICAgc3BsaXQoc2NvcGUuaXRlbXNwZXJyb3csICcgJykuZm9yRWFjaCgoY2xzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gc3BsaXQoY2xzLCAnLScpO1xuICAgICAgICAgICAgICAgIGNscyA9IGAke2tleXNbMF19LSR7KDEyIC8gcGFyc2VJbnQoa2V5c1sxXSwgMTApKX1gO1xuICAgICAgICAgICAgICAgIHRlbXAgKz0gYCBjb2wtJHtjbHN9YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9IHRlbXAudHJpbSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxpbmcgaXRlbXNwZXJyb3cgaGF2aW5nIGludGVnZXIgdmFsdWUuXG4gICAgICAgICAgICBzY29wZS5pdGVtc1BlclJvd0NsYXNzID0gYGNvbC14cy0keygxMiAvIHBhcnNlSW50KHNjb3BlLml0ZW1zcGVycm93LCAxMCkpfWA7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyBJZiBpdGVtc3BlcnJvdyBpcyBub3Qgc3BlY2lmaWVkIG1ha2UgaXQgZnVsbCB3aWR0aFxuICAgICAgICBzY29wZS5pdGVtc1BlclJvd0NsYXNzID0gJ2NvbC14cy0xMic7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRQYXJlbnQgPSAobFZpZXc6IGFueSwgdmlld1BhcmVudEFwcD86IGFueSkgPT4ge1xuICAgIGxldCBwYXJlbnQgPSBmaW5kVmlld1BhcmVudChsVmlldyk7XG4gICAgcmV0dXJuIHBhcmVudCA/IHBhcmVudCA6IHZpZXdQYXJlbnRBcHA7XG59XG5cbmV4cG9ydCBjb25zdCBmaW5kVmlld1BhcmVudCA9IChsVmlldzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGxWaWV3WzE1XSA/IGxWaWV3WzE1XVs4XSA6IGxWaWV3WzE1XTtcbiAgICAvKmlmKGxWaWV3WzNdID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsVmlld1s4XTtcbiAgICB9XG4gICAgbGV0IHBhcmVudGxWaWV3ID0gbFZpZXdbM107XG4gICAgaWYodHlwZW9mIGxWaWV3WzFdID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgIH1cbiAgICBsZXQgY29tcG9uZW50VHlwZSA9IGxWaWV3WzFdW1widHlwZVwiXTtcbiAgICBpZihjb21wb25lbnRUeXBlID09PSAwIHx8IGNvbXBvbmVudFR5cGUgPT09IDEpIHtcbiAgICAgICAgbGV0IHAgPSBsVmlld1s4XTtcbiAgICAgICAgLy8gdHMtaWdub3JlXG4gICAgICAgIGlmKHAuaGFzT3duUHJvcGVydHkoXCJpc0RpYWxvZ0NvbXBvbmVudFwiKSB8fCBwLmhhc093blByb3BlcnR5KFwiaXNDb250YWluZXJEaXJlY3RpdmVcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5kVmlld1BhcmVudChwYXJlbnRsVmlldyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaW5kVmlld1BhcmVudChwYXJlbnRsVmlldyk7XG4gICAgfSovXG59XG5cbi8qZXhwb3J0IGNvbnN0IGdldFBhcmVudCA9IChwYXJlbnQ6IGFueSkgPT4ge1xuICAgIGlmKHBhcmVudC5oYXNPd25Qcm9wZXJ0eShcImlzRHluYW1pY0NvbXBvbmVudFwiKSB8fCBwYXJlbnQuaGFzT3duUHJvcGVydHkoXCJpc1BhZ2VDb21wb25lbnRcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudFxuICAgIH0gZWxzZXtcbiAgICAgICAgcmV0dXJuIHBhcmVudC52aWV3UGFyZW50ID8gZ2V0UGFyZW50KHBhcmVudC52aWV3UGFyZW50KSA6IHBhcmVudDtcbiAgICB9XG5cbn0qL1xuIl19
|
|
1467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFDM0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUM5QixRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFDN0IsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQUUsUUFBUSxFQUNsQixXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksUUFBUSxFQUNoRSxLQUFLLEVBQ0wsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUNyQyxNQUFNLFdBQVcsQ0FBQztBQVluQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUM3QyxNQUFNLEtBQUssR0FBRztJQUNWLFVBQVUsRUFBRSxRQUFRO0lBQ3BC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QUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkc7QUFDUCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQzlCLE9BQU8sa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUM3RSxDQUFDLENBQUE7QUFFRDs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtnZXRXbVByb2plY3RQcm9wZXJ0aWVzfSBmcm9tICcuL3dtLXByb2plY3QtcHJvcGVydGllcyc7XG5cbmltcG9ydCB7JGFwcERpZ2VzdCwgJHdhdGNofSBmcm9tICcuL3dhdGNoZXInO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vZW51bXMvZW51bXMnO1xuaW1wb3J0IHtEYXRhU291cmNlfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3NldEF0dHJ9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7JHBhcnNlRXZlbnR9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuaW1wb3J0IHtcbiAgICBhdHRlbXB0LFxuICAgIGNhbWVsQ2FzZSwgY2xvbmVEZWVwLCBldmVyeSxcbiAgICBmaWx0ZXIsIGZvckVhY2gsIGdldCwgaWRlbnRpdHksXG4gICAgaW5jbHVkZXMsIGluZGV4T2YsIGludGVyc2VjdGlvbiwgaXNBcnJheSwgaXNEYXRlLFxuICAgIGlzRXF1YWwsIGlzRXF1YWxXaXRoLCBpc0Vycm9yLFxuICAgIGlzRnVuY3Rpb24sXG4gICAgaXNOdWxsLFxuICAgIGlzTnVtYmVyLCBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCwga2V5cywgbWFwLCBub29wIGFzIF9ub29wLCBvbWl0LCByZXBsYWNlIGFzIF9yZXBsYWNlLFxuICAgIHNwbGl0LFxuICAgIHN0YXJ0c1dpdGgsIHRvTG93ZXIsIHRvVXBwZXIsIHRyaW1cbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0IFgySlM7XG5kZWNsYXJlIGNvbnN0ICQ7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcbmRlY2xhcmUgY29uc3QgZG9jdW1lbnQ7XG5kZWNsYXJlIGNvbnN0IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkw7XG5kZWNsYXJlIGNvbnN0IFdNX0NVU1RPTV9GT1JNQVRURVJTO1xuZGVjbGFyZSBjb25zdCBNU0NTU01hdHJpeDtcbmRlY2xhcmUgY29uc3QgX1dNX0FQUF9QUk9QRVJUSUVTO1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuXG5jb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbmNvbnN0IFJFR0VYID0ge1xuICAgIFNOQUtFX0NBU0U6IC9bQS1aXS9nLFxuICAgIEFORFJPSUQ6IC9BbmRyb2lkL2ksXG4gICAgSVBIT05FOiAvaVBob25lL2ksXG4gICAgSVBPRDogL2lQb2QvaSxcbiAgICBJUEFEOiAvaVBhZC9pLFxuICAgIE1BQzogL01hYy9pLFxuICAgIEFORFJPSURfVEFCTEVUOiAvYW5kcm9pZHxhbmRyb2lkIDMuMHx4b29tfHNjaC1pODAwfHBsYXlib29rfHRhYmxldHxraW5kbGUvaSxcbiAgICBNT0JJTEU6IC9Nb2JpbGUvaSxcbiAgICBXSU5ET1dTOiAvV2luZG93cyBQaG9uZS9pLFxuICAgIFNVUFBPUlRFRF9JTUFHRV9GT1JNQVQ6IC9cXC4oYm1wfGdpZnxqcGV8anBnfGpwZWd8dGlmfHRpZmZ8cGJtfHBuZ3xpY28pJC9pLFxuICAgIFNVUFBPUlRFRF9GSUxFX0ZPUk1BVDogL1xcLih0eHR8anN8Y3NzfGh0bWx8c2NyaXB0fHByb3BlcnRpZXN8anNvbnxqYXZhfHhtbHxzbWR8eG1pfHNxbHxsb2d8d3NkbHx2bXxmdGx8anJ4bWx8eW1sfHlhbWx8bWR8bGVzc3xqc3ApJC9pLFxuICAgIFNVUFBPUlRFRF9BVURJT19GT1JNQVQ6IC9cXC4obXAzfG9nZ3x3ZWJtfHdtYXwzZ3B8d2F2fG00YSkkL2ksXG4gICAgU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVDogL1xcLihtcDR8b2dnfHdlYm18d212fG1wZWd8bXBnfGF2aXxtb3YpJC9pLFxuICAgIFBBR0VfUkVTT1VSQ0VfUEFUSDogL15cXC9wYWdlc1xcLy4qXFwuKGpzfGNzc3xodG1sfGpzb24pJC8sXG4gICAgTUlOX1BBR0VfUkVTT1VSQ0VfUEFUSDogLy4qKHBhZ2UubWluLmh0bWwpJC8sXG4gICAgVkFMSURfRU1BSUw6IC9eW2EtekEtWl1bXFx3LitdK0BbYS16QS1aX10rP1xcLlthLXpBLVouXXsxLDR9W2EtekEtWl0kLyxcbiAgICBWQUxJRF9XRUJfVVJMOiAvXihodHRwW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTk9Oj9cXC9cXC5cXC1dKyhcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSk/LyxcbiAgICBWQUxJRF9XRUJTT0NLRVRfVVJMOiAvXih3c1tzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05PTo/XFwvXFwuXFwtXSsoXFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pPy8sXG4gICAgVkFMSURfUkVMQVRJVkVfVVJMOiAvXig/IXd3d1xcLnwoPzpodHRwfGZ0cClzPzpcXC9cXC98W0EtWmEtel06XFxcXHxcXC9cXC8pLiovLFxuICAgIFJFUExBQ0VfUEFUVEVSTjogL1xcJFxceyhbXlxcfV0rKVxcfS9nLFxuICAgIFpJUF9GSUxFOiAvXFwuemlwJC9pLFxuICAgIEVYRV9GSUxFOiAvXFwuZXhlJC9pLFxuICAgIE5PX1FVT1RFU19BTExPV0VEOiAvXlteJ3xcIl0qJC8sXG4gICAgTk9fRE9VQkxFX1FVT1RFU19BTExPV0VEOiAvXlteXCJdKiQvLFxuICAgIFZBTElEX0hUTUw6IC88W2Etel1bXFxzXFxTXSo+L2ksXG4gICAgVkFMSURfUEFTU1dPUkQ6IC9eWzAtOWEtekEtWi1fLkAmKiEjJCVdKyQvLFxuICAgIFNQRUNJQUxfQ0hBUkFDVEVSUzogL1teQS1aMC05YS16X10rL2ksXG4gICAgQVBQX1NFUlZFUl9VUkxfRk9STUFUOiAvXihodHRwW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTlcXC5cXC1dKyhbOl0/WzAtOV17Miw1fXxcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSlcXC8rW14/IyY9XSskLyxcbiAgICBKU09OX0RBVEVfRk9STUFUOiAvXFxkezR9LVswLTFdXFxkLVswLTNdXFxkKFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZC5cXGR7MSwzfVokKT8vLFxuICAgIERBVEFfVVJMOiAvXlxccypkYXRhOihbYS16XStcXC9bYS16MC05LSsuXSsoO1thLXotXSs9W2EtejAtOS1dKyk/KT8oO2Jhc2U2NCk/LChbYS16MC05ISQmJywoKSorOz1cXC0uX346QFxcLz8lXFxzXSopXFxzKiQvaSxcbiAgICBJU09fREFURV9GT1JNQVQ6IC8oXFxkezR9LVxcZHsyfS1cXGR7Mn0pVChcXGR7Mn06XFxkezJ9OlxcZHsyfSkoXFwuXFxkKyk/KFsrLV1cXGR7Mn06P1xcZHsyfXxaKSQvXG59LFxuICAgIGNvbXBhcmVCeVNlcGFyYXRvciA9ICc6JztcblxuY29uc3QgTlVNQkVSX1RZUEVTID0gWydpbnQnLCBEYXRhVHlwZS5JTlRFR0VSLCBEYXRhVHlwZS5GTE9BVCwgRGF0YVR5cGUuRE9VQkxFLCBEYXRhVHlwZS5MT05HLCBEYXRhVHlwZS5TSE9SVCwgRGF0YVR5cGUuQllURSwgRGF0YVR5cGUuQklHX0lOVEVHRVIsIERhdGFUeXBlLkJJR19ERUNJTUFMXTtcbmNvbnN0IG5vdzogRGF0ZSA9IG5ldyBEYXRlKCk7XG5jb25zdCBDVVJSRU5UX0RBVEUgPSAnQ1VSUkVOVF9EQVRFJztcblxuZXhwb3J0IGNvbnN0IGVudW0gRVZFTlRfTElGRSB7IE9OQ0UsIFdJTkRPVyB9XG5cbmV4cG9ydCBjb25zdCBpc0RlZmluZWQgPSB2ID0+ICd1bmRlZmluZWQnICE9PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gdiA9PiBudWxsICE9PSB2ICYmICdvYmplY3QnID09PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IHRvQm9vbGVhbiA9ICh2YWwsIGlkZW50aXR5PykgPT4gKCh2YWwgJiYgdmFsICE9PSAnZmFsc2UnKSA/IHRydWUgOiAoaWRlbnRpdHkgPyB2YWwgPT09IGlkZW50aXR5IDogZmFsc2UpKTtcblxuZnVuY3Rpb24gaXNJRTExKCkge1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignVHJpZGVudC8nKSA+IC0xO1xufVxuXG5leHBvcnQgY29uc3QgaXNJRSA9ICgpID0+IHtcbiAgICByZXR1cm4gaXNJRTExKCkgfHwgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignTVNJRScpID4gLTE7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBpc0FuZHJvaWQgPSAoKSA9PiBSRUdFWC5BTkRST0lELnRlc3QodXNlckFnZW50KTtcblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZFRhYmxldCA9ICgpID0+IFJFR0VYLkFORFJPSURfVEFCTEVULnRlc3QodXNlckFnZW50KSAmJiAhKCgvVGFibGV0IFBDIDIuMC9pKS50ZXN0KHVzZXJBZ2VudCkpO1xuXG5leHBvcnQgY29uc3QgaXNJcGhvbmUgPSAoKSA9PiBSRUdFWC5JUEhPTkUudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBvZCA9ICgpID0+IFJFR0VYLklQT0QudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBhZCA9ICgpID0+IHtcbiAgICByZXR1cm4gUkVHRVguSVBBRC50ZXN0KHVzZXJBZ2VudCkgfHwgKHdpbmRvdy5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDIgJiYgUkVHRVguTUFDLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW9zID0gKCkgPT4gaXNJcGhvbmUoKSB8fCBpc0lwb2QoKSB8fCBpc0lwYWQoKTtcblxuZXhwb3J0IGNvbnN0IGlzU2FmYXJpID0gKCkgPT4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdTYWZhcmknKSAhPT0gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA9PT0gLTE7XG5cblxuZXhwb3J0IGNvbnN0IGlzTGFyZ2VUYWJsZXRMYW5kc2NhcGUgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gbGFuZFNjYXBlV2lkdGggfHwgJzEzNjZweCc7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGFuZFNjYXBlSGVpZ2h0IHx8ICcxMDI0cHgnO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtaW4tZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtYXgtZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtaW4td2lkdGg6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC13aWR0aDogXCIrd2lkdGgrXCIpXCIpLm1hdGNoZXM7XG59XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0UG9ydHJhaXQgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4gIHtcbiAgICBjb25zdCBoZWlnaHQgPSBsYW5kU2NhcGVXaWR0aCB8fCAnMTM2NnB4JztcbiAgICBjb25zdCB3aWR0aCA9IGxhbmRTY2FwZUhlaWdodCB8fCAnMTAyNHB4JztcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWluLXdpZHRoOiBcIit3aWR0aCtcIikgYW5kIChtYXgtd2lkdGg6IFwiK3dpZHRoK1wiKVwiKS5tYXRjaGVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAoKSA9PiBpc0FuZHJvaWQoKSB8fCBpc0lvcygpIHx8IGlzQW5kcm9pZFRhYmxldCgpIHx8ICQoJyN3bS1tb2JpbGUtZGlzcGxheTp2aXNpYmxlJykubGVuZ3RoID4gMDtcblxuZXhwb3J0IGNvbnN0IGlzVGFibGV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlJykud2lkZ2V0O1xuICAgIHJldHVybiBzY29wZSAmJiBzY29wZS52aWV3UGFyZW50LlZpZXdwb3J0LmlzVGFibGV0VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZUFwcCA9ICgpID0+IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5wbGF0Zm9ybVR5cGUgPT09ICdNT0JJTEUnICYmIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS50eXBlID09PSAnQVBQTElDQVRJT04nO1xuXG5leHBvcnQgY29uc3QgZ2V0QW5kcm9pZFZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkubWF0Y2goL2FuZHJvaWRcXHMoWzAtOVxcLl0qKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNLaXRrYXREZXZpY2UgPSAoKSA9PiBpc0FuZHJvaWQoKSAmJiBwYXJzZUludChnZXRBbmRyb2lkVmVyc2lvbigpLCAxMCkgPT09IDQ7XG5cbi8qKlxuICogdGhpcyBtZXRob2QgZW5jb2RlcyB0aGUgdXJsIGFuZCByZXR1cm5zIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jb2RlVXJsID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gZW5jb2RlIHRoZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwuc3Vic3RyaW5nKDAsIGluZGV4KSkgKyB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gZW5jb2RlIHVybCBwYXJhbXMsIG5vdCBlbmNvZGVkIHRocm91Z2ggZW5jb2RlVVJJXG4gICAgICAgIHVybCA9IGVuY29kZVVybFBhcmFtcyh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBwYXJhbXMgYW5kIGlzIHByaXZhdGUgdG8gdGhlIGNsYXNzIG9ubHlcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybFBhcmFtcyA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHF1ZXJ5UGFyYW1zLCBlbmNvZGVkUGFyYW1zID0gJycsIHF1ZXJ5UGFyYW1zU3RyaW5nLCBpbmRleDtcbiAgICBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgcXVlcnlQYXJhbXNTdHJpbmcgPSB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gRW5jb2RpbmcgdGhlIHF1ZXJ5IHBhcmFtcyBpZiBleGlzdFxuICAgICAgICBpZiAocXVlcnlQYXJhbXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXNTdHJpbmcuc3BsaXQoJyYnKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlY29kZWRQYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBpbmNsdWRlcyhwYXJhbSwgJz0nKSA/IHBhcmFtLmluZGV4T2YoJz0nKSA6IChwYXJhbSAmJiBwYXJhbS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBwYXJhbS5zdWJzdHIoMCwgaSksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBwYXJhbS5zdWJzdHIoaSArIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSA9IGZvciBwYXJhbSBuYW1lIG9ubHkgd2hlbiB0aGUgcGFyYW0gdmFsdWUgZXhpc3RzIGluIHRoZSBnaXZlbiBwYXJhbSBvciBlbXB0eSB2YWx1ZSBpcyBhc3NpZ25lZFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbVZhbHVlIHx8IGluY2x1ZGVzKHBhcmFtLCAnPScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkUGFyYW1WYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgKz0gcGFyYW1OYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZWRQYXJhbVZhbHVlKSArICcmJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkUGFyYW1zICs9IHBhcmFtTmFtZSArICcmJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgPSBlbmNvZGVkUGFyYW1zLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHF1ZXJ5UGFyYW1zU3RyaW5nLCBlbmNvZGVkUGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLyogY2FwaXRhbGl6ZSB0aGUgZmlyc3QtbGV0dGVyIG9mIHRoZSBzdHJpbmcgcGFzc2VkICovXG5leHBvcnQgY29uc3QgaW5pdENhcHMgPSBuYW1lID0+IHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKDEpO1xufTtcblxuLyogY29udmVydCBjYW1lbENhc2Ugc3RyaW5nIHRvIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNwYWNlU2VwYXJhdGUgPSBuYW1lID0+IHtcbiAgICBpZiAobmFtZSA9PT0gbmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKFJFR0VYLlNOQUtFX0NBU0UsIGZ1bmN0aW9uIChsZXR0ZXIsIHBvcykge1xuICAgICAgICByZXR1cm4gKHBvcyA/ICcgJyA6ICcnKSArIGxldHRlcjtcbiAgICB9KTtcbn07XG5cbi8qUmVwbGFjZSB0aGUgY2hhcmFjdGVyIGF0IGEgcGFydGljdWxhciBpbmRleCovXG5leHBvcnQgY29uc3QgcmVwbGFjZUF0ID0gKHN0cmluZywgaW5kZXgsIGNoYXJhY3RlcikgPT4gc3RyaW5nLnN1YnN0cigwLCBpbmRleCkgKyBjaGFyYWN0ZXIgKyBzdHJpbmcuc3Vic3RyKGluZGV4ICsgY2hhcmFjdGVyLmxlbmd0aCk7XG5cbi8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuZXhwb3J0IGNvbnN0IHBlcmlvZFNlcGFyYXRlID0gbmFtZSA9PiB7XG4gICAgbGV0IGRvdEluZGV4O1xuICAgIGRvdEluZGV4ID0gbmFtZS5pbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBuYW1lID0gcmVwbGFjZUF0KG5hbWUsIGRvdEluZGV4ICsgMSwgbmFtZS5jaGFyQXQoZG90SW5kZXggKyAxKS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgbmFtZSA9IHJlcGxhY2VBdChuYW1lLCBkb3RJbmRleCwgJyAnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldHRpZnlMYWJlbCA9IGxhYmVsID0+IHtcbiAgICBsYWJlbCA9IGNhbWVsQ2FzZShsYWJlbCk7XG4gICAgLypjYXBpdGFsaXplIHRoZSBpbml0aWFsIExldHRlciovXG4gICAgbGFiZWwgPSBpbml0Q2FwcyhsYWJlbCk7XG4gICAgLypDb252ZXJ0IGNhbWVsIGNhc2Ugd29yZHMgdG8gc2VwYXJhdGVkIHdvcmRzKi9cbiAgICBsYWJlbCA9IHNwYWNlU2VwYXJhdGUobGFiZWwpO1xuICAgIC8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuICAgIGxhYmVsID0gcGVyaW9kU2VwYXJhdGUobGFiZWwpO1xuICAgIHJldHVybiBsYWJlbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZUh5cGhlbmF0ZSA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcgJyk7XG59O1xuXG4vKkFjY2VwdHMgYW4gYXJyYXkgb3IgYSBzdHJpbmcgc2VwYXJhdGVkIHdpdGggc3ltYm9sIGFuZCByZXR1cm5zIHByZXR0aWZpZWQgcmVzdWx0Ki9cbmV4cG9ydCBjb25zdCBwcmV0dGlmeUxhYmVscyA9IChuYW1lcywgc2VwYXJhdG9yID0gJywnKSA9PiB7XG4gICAgbGV0IG1vZGlmaWVkTmFtZXMsIG5hbWVzQXJyYXkgPSBbXTtcblxuICAgIGlmICghaXNBcnJheShuYW1lcykpIHtcbiAgICAgICAgbmFtZXNBcnJheSA9IHNwbGl0KG5hbWVzLCBzZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIG1vZGlmaWVkTmFtZXMgPSBtYXAobmFtZXNBcnJheSwgcHJldHRpZnlMYWJlbCk7XG4gICAgaWYgKGlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIHJldHVybiBtb2RpZmllZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWROYW1lcy5qb2luKHNlcGFyYXRvcik7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGluc2VjdXJlIGNvbnRlbnQgcmVxdWVzdCBpcyBiZWluZyBtYWRlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luc2VjdXJlQ29udGVudFJlcXVlc3QgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblxuICAgIGNvbnN0IHBhcnNlcjogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgcGFyc2VyLmhyZWYgPSB1cmw7XG5cbiAgICAvLyBmb3IgcmVsYXRpdmUgdXJscyBJRSByZXR1cm5zIHRoZSBwcm90b2NvbCBhcyBlbXB0eSBzdHJpbmdcbiAgICBpZiAocGFyc2VyLnByb3RvY29sID09PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlucHV0dGVkIHNvdXJjZSBpcyBhIGJhc2U2NCB1cmwsIGRvIG5vdCB0aHJvdyBpbnNlY3VyZSBjb250ZW50IGVycm9yXG4gICAgaWYgKFJFR0VYLkRBVEFfVVJMLnRlc3QodXJsKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgobG9jYXRpb24uaHJlZiwgJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5wcm90b2NvbCAhPT0gJ2h0dHBzOicgJiYgcGFyc2VyLnByb3RvY29sICE9PSAnd3NzOic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBjaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nU3RhcnRzV2l0aCA9IChzdHI6IHN0cmluZywgc3RhcnRzV2l0aDogc3RyaW5nLCBpZ25vcmVDYXNlPyk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdFeCA9IG5ldyBSZWdFeHAoJ14nICsgc3RhcnRzV2l0aCwgaWdub3JlQ2FzZSA/ICdpJyA6ICcnKTtcblxuICAgIHJldHVybiByZWdFeC50ZXN0KHN0cik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkRXhwclZhbHVlID0gKG9iamVjdCwgZXhwcmVzc2lvbikgPT4ge1xuICAgIGxldCB2YWw7XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gd2l0aCB0aGUgc2NvcGUgYW5kIG9iamVjdC5cbiAgICAgKiAkZXZhbCBpcyB1c2VkLCBhcyBleHByZXNzaW9uIGNhbiBiZSBpbiBmb3JtYXQgb2YgZmllbGQxICsgJyAnICsgZmllbGQyXG4gICAgICogJGV2YWwgY2FuIGZhaWwsIGlmIGV4cHJlc3Npb24gaXMgbm90IGluIGNvcnJlY3QgZm9ybWF0LCBzbyBhdHRlbXB0IHRoZSBldmFsIGZ1bmN0aW9uXG4gICAgICovXG4gICAgdmFsID0gYXR0ZW1wdChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgYXJnc0V4cHIgPSBPYmplY3Qua2V5cyhvYmplY3QpLm1hcCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYHZhciAke2ZpZWxkTmFtZX0gPSBkYXRhWycke2ZpZWxkTmFtZX0nXTtgO1xuICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnN0IGYgPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCBgJHthcmdzRXhwcn0gcmV0dXJuICAke2V4cHJlc3Npb259YCk7XG4gICAgICAgIHJldHVybiBmKG9iamVjdCk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogJGV2YWwgZmFpbHMgaWYgZmllbGQgZXhwcmVzc2lvbiBoYXMgc3BhY2VzLiBFeDogJ2ZpZWxkIG5hbWUnIG9yICdmaWVsZEBuYW1lJ1xuICAgICAqIEFzIGEgZmFsbGJhY2ssIGdldCB2YWx1ZSBkaXJlY3RseSBmcm9tIG9iamVjdCBvciBzY29wZVxuICAgICAqL1xuICAgIGlmIChpc0Vycm9yKHZhbCkpIHtcbiAgICAgICAgdmFsID0gZ2V0KG9iamVjdCwgZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKiBmdW5jdGlvbnMgZm9yIHJlc291cmNlIFRhYiovXG5leHBvcnQgY29uc3QgaXNJbWFnZUZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9JTUFHRV9GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXVkaW9GaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfQVVESU9fRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZpZGVvRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFdlYlVSTCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoUkVHRVguVkFMSURfV0VCX1VSTCkudGVzdCh1cmwpO1xufTtcblxuLypUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVybCB0byB0aGUgcmVzb3VyY2UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHVybCovXG5leHBvcnQgY29uc3QgZ2V0UmVzb3VyY2VVUkwgPSAodXJsU3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSkge1xuICAgICAgICAvKlRPRE86IFVzZSBEb21TYW5pdGl6ZXIqL1xuICAgICAgICAvLyByZXR1cm4gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmxTdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypmdW5jdGlvbiB0byBjaGVjayBpZiBmbiBpcyBhIGZ1bmN0aW9uIGFuZCB0aGVuIGV4ZWN1dGUqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJGbihmbiwgLi4uYXJnbW50cykge1xuICAgIC8qIFVzZSBvZiBzbGljZSBvbiBhcmd1bWVudHMgd2lsbCBtYWtlIHRoaXMgZnVuY3Rpb24gbm90IG9wdGltaXphYmxlXG4gICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMzItbGVha2luZy1hcmd1bWVudHNcbiAgICAqICovXG5cbiAgICBsZXQgc3RhcnQgPSAxO1xuICAgIGNvbnN0IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gc3RhcnQpO1xuICAgIGZvciAoc3RhcnQ7IHN0YXJ0IDwgbGVuOyBzdGFydCsrKSB7XG4gICAgICAgIGFyZ3Nbc3RhcnQgLSAxXSA9IGFyZ3VtZW50c1tzdGFydF07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGZvcm1hdHRlZCBkYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWREYXRlID0gKGRhdGVQaXBlLCBkYXRlT2JqLCBmb3JtYXQsIHRpbWVab25lPywgaXNUaW1lU3RhbXBUeXBlPywgaXNJbnRlcnZhbERhdGVUaW1lPywgY29tcEluc3RhbmNlPyk6IGFueSA9PiB7XG4gICAgaWYgKCFkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikudmFsdWVPZigpO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQgPT09ICdVVEMnKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlT2JqKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aW1lWm9uZSAmJiB0aW1lWm9uZSAhPT0gbW9tZW50LmRlZmF1bHRab25lPy5uYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vbWVudEZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlQWxsKCd5JywgJ1knKS5yZXBsYWNlQWxsKCdkJywgJ0QnKS5yZXBsYWNlKCdhJywgJ0EnKTtcbiAgICAgICAgaWYgKGlzSW50ZXJ2YWxEYXRlVGltZSApIHsgLy8gZGF0ZXMgd2hpY2ggYXJlIG9mIHR5cGUgdGltZSB3aWRnZXQgKHZhbHVlIGlzIGhoOm1tOnNzKSBidXQgcmV0dXJuZWQgYXMgZGF0ZSBzdHJpbmcgZnJvbSB0aW1lIGNvbXBcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGltZVN0YW1wVHlwZSA9PT0gJ2RhdGV0aW1lc3RhbXAnKSB7XG4gICAgICAgICAgICBkYXRlT2JqID0gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRpbWVab25lLCBkYXRlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVPYmosIGZvcm1hdCwgdGltZVpvbmUsIGNvbXBJbnN0YW5jZSk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGRhdGUgaGFzIHRpbWV6b25lIGluZm9ybWF0aW9uIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgaGFzT2Zmc2V0U3RyID0gKGRhdGVTdHIpID0+IHtcbiAgICBpZiAodHlwZW9mIGRhdGVTdHIgIT09ICdzdHJpbmcnKSByZXR1cm47XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRhdGVTdHIubWF0Y2goUkVHRVguSVNPX0RBVEVfRk9STUFUKTtcbiAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzRdKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBtZXRob2QgdG8gZ2V0IHRoZSBkYXRlIG9iamVjdCBmcm9tIHRoZSBpbnB1dCByZWNlaXZlZFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0ZU9iaiA9ICh2YWx1ZSwgb3B0aW9ucz8sIHRpbWV6b25lPyk6IERhdGUgPT4ge1xuICAgIC8vIEhhbmRsaW5nIGxvY2FsaXphdGlvblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGF0dGVybiAmJiBvcHRpb25zLnBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIC8vIEZpeCBmb3IgV01TLTE5NjAxLCBpbnZhbGlkIGRhdGUgaXMgcmV0dXJuZWQgb24gZGF0ZSBzZWxlY3Rpb24uXG4gICAgICAgIGNvbnN0IGlzTmF0aXZlUGlja2VyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNOYXRpdmVQaWNrZXInKSkgPyBnZXQob3B0aW9ucywgJ2lzTmF0aXZlUGlja2VyJykgOiBpc01vYmlsZSgpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gIGlzTmF0aXZlUGlja2VyID8gJ1lZWVkvTU0vREQgSEg6bW06c3MnIDogbW9tZW50UGF0dGVybihvcHRpb25zLnBhdHRlcm4pO1xuICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSwgcGF0dGVybikudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSBkYXRlIG9iamVjdCwgbm8gbmVlZCB0byBjb3ZlcnQgaXQqL1xuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIHRpbWVzdGFtcCBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXIqL1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAoIW1vbWVudCh2YWx1ZSkuaXNWYWxpZCgpIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBkYXRlT2JqID0gbmV3IERhdGUodmFsdWUpO1xuICAgIC8qKlxuICAgICAqIGlmIGRhdGUgdmFsdWUgaXMgc3RyaW5nIFwiMjAtMDUtMjAxOVwiIHRoZW4gbmV3IERhdGUodmFsdWUpIHJldHVybiAyME1heTIwMTkgd2l0aCBjdXJyZW50IHRpbWUgaW4gSW5kaWEsXG4gICAgICogd2hlcmVhcyB0aGlzIHdpbGwgcmV0dXJuIDE5TWF5MjAxOSB3aXRoIHRpbWUgbGFnZ2luZyBmb3IgZmV3IGhvdXJzLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpdCByZXR1cm5zIFVUQyB0aW1lIGkuZS4gQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUgKFVUQykuXG4gICAgICogVG8gY3JlYXRlIGRhdGUgaW4gbG9jYWwgdGltZSB1c2UgbW9tZW50XG4gICAgICovXG4gICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKlxuICAgICAgICAgKiBJZiBzZWxlY3RlZCBsb2NhbGUgaXMgQXJhYmljLCBtb21lbnQodmFsdWUpLmZvcm1hdCgpIGlzIGdpdmluZyBkYXRlIGluIEFyYWJpYyBsYW5ndWFnZVxuICAgICAgICAgKiAoRXg6IElmIGRhdGUgdmFsdWUgaXMgXCIxOTkwLTExLTIzXCIgYW5kIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkgaXMgXCLZodmp2anZoC3ZodmhLdmi2aNU2aDZoDrZoNmgOtmg2aAr2aDZpTrZo9mgXCIpXG4gICAgICAgICAqIGFuZCBuZXcgRGF0ZShtb21lbnQodmFsdWUpLmZvcm1hdCgpKSBpcyBnaXZpbmcgSW52YWxpZCBEYXRlLiBTbyBmcnN0IGNvbnZlcnRpbmcgaXQgdG8gdGltZXN0YW1wIHZhbHVlLlxuICAgICAgICAqL1xuXG4gICAgICAgIGRhdGVPYmogPSAhdGltZXpvbmUgPyBuZXcgRGF0ZShtb21lbnQobW9tZW50KHZhbHVlKS5mb3JtYXQoKSkudmFsdWVPZigpKSA6IGdldE1vbWVudExvY2FsZU9iamVjdCh0aW1lem9uZSwgdmFsdWUpOztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IENVUlJFTlRfREFURSB8fCBpc05hTihkYXRlT2JqLmdldERheSgpKSkge1xuICAgICAgICByZXR1cm4gbm93O1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZU9iajtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50ID0gKF9lbGVtZW50OiBFbGVtZW50LCBleGNsdWRlRWxlbWVudDogRWxlbWVudCwgbmF0aXZlRWxlbWVudDogRWxlbWVudCwgZXZlbnRUeXBlLCBpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0LCBzdWNjZXNzQ0IsIGxpZmU6IEVWRU5UX0xJRkUsIGlzQ2FwdHVyZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudDogRWxlbWVudCA9IF9lbGVtZW50O1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV4Y2x1ZGVFbGVtZW50ICYmIChleGNsdWRlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8IGV4Y2x1ZGVFbGVtZW50ID09PSBldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpZmUgPT09IEVWRU5UX0xJRkUuT05DRSkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBzdWNjZXNzQ0IoKTtcbiAgICB9O1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgY29uc3QgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICB9O1xuICAgIHJldHVybiByZW1vdmVFdmVudExpc3RlbmVyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVlcCBjbG9uZWQgcmVwbGljYSBvZiB0aGUgcGFzc2VkIG9iamVjdC9hcnJheVxuICogQHBhcmFtIG9iamVjdCBvYmplY3QvYXJyYXkgdG8gY2xvbmVcbiAqIEByZXR1cm5zIGEgY2xvbmUgb2YgdGhlIHBhc3NlZCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENsb25lZE9iamVjdCA9IChvYmplY3QpID0+IHtcbiAgICByZXR1cm4gY2xvbmVEZWVwKG9iamVjdCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZXMgPSAoZm9ybU5hbWUsIGZpZWxkTmFtZSwgaXNMaXN0KSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBnZXQoZG9jdW1lbnQuZm9ybXMsIFtmb3JtTmFtZSwgZmllbGROYW1lLCAnZmlsZXMnXSk7XG4gICAgcmV0dXJuIGlzTGlzdCA/IG1hcChmaWxlcywgaWRlbnRpdHkpIDogZmlsZXMgJiYgZmlsZXNbMF07XG59O1xuXG4vKkZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciovXG5mdW5jdGlvbiByYW5kb20oKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBndWlkIGJhc2VkIG9uIHJhbmRvbSBudW1iZXJzLiovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVHVUlkID0gKCkgPT4ge1xuICAgIHJldHVybiByYW5kb20oKSArICctJyArIHJhbmRvbSgpICsgJy0nICsgcmFuZG9tKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGlmIGdpdmVuIGFjY2VzcyByb2xlIGlzIGluIGN1cnJlbnQgbG9nZ2VkaW4gdXNlciBhY2Nlc3Mgcm9sZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWNjZXNzUm9sZXMgPSAocm9sZUV4cCwgbG9nZ2VkSW5Vc2VyKSA9PiB7XG4gICAgbGV0IHJvbGVzO1xuXG4gICAgaWYgKHJvbGVFeHAgJiYgbG9nZ2VkSW5Vc2VyKSB7XG5cbiAgICAgICAgcm9sZXMgPSByb2xlRXhwICYmIHJvbGVFeHAuc3BsaXQoJywnKS5tYXAoRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsIFN0cmluZy5wcm90b3R5cGUudHJpbSk7XG5cbiAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbihyb2xlcywgbG9nZ2VkSW5Vc2VyLnVzZXJSb2xlcykubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbGlkSlNPTiA9IChjb250ZW50KSA9PiB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEludFZhbHVlID0gcGFyc2VJbnQoY29udGVudCwgMTApO1xuICAgICAgICAvKm9idGFpbmluZyBqc29uIGZyb20gZWRpdG9yIGNvbnRlbnQgc3RyaW5nKi9cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpIHx8ICFpc05hTihwYXJzZWRJbnRWYWx1ZSkgPyBjb250ZW50IDogSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qdGVybWluYXRpbmcgZXhlY3V0aW9uIGlmIG5ldyB2YXJpYWJsZSBvYmplY3QgaXMgbm90IHZhbGlkIGpzb24uKi9cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgeG1sVG9Kc29uID0gKHhtbFN0cmluZykgPT4ge1xuICAgIGNvbnN0IHgyanNPYmogPSBuZXcgWDJKUyh7ICdlbXB0eU5vZGVGb3JtJzogJ2NvbnRlbnQnLCAnYXR0cmlidXRlUHJlZml4JzogJycsICdlbmFibGVUb1N0cmluZ0Z1bmMnOiBmYWxzZSB9KTtcbiAgICBsZXQganNvbiA9IHgyanNPYmoueG1sMmpzKHhtbFN0cmluZyk7XG4gICAgaWYgKGpzb24pIHtcbiAgICAgICAganNvbiA9IGdldChqc29uLCBPYmplY3Qua2V5cyhqc29uKVswXSk7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xufTtcblxuLypcbiAqIFV0aWwgbWV0aG9kIHRvIGZpbmQgdGhlIHZhbHVlIG9mIGEga2V5IGluIHRoZSBvYmplY3RcbiAqIGlmIGtleSBub3QgZm91bmQgYW5kIGNyZWF0ZSBpcyB0cnVlLCBhbiBvYmplY3QgaXMgY3JlYXRlZCBhZ2FpbnN0IHRoYXQgbm9kZVxuICogRXhhbXBsZXM6XG4gKiB2YXIgYSA9IHtcbiAqICBiOiB7XG4gKiAgICAgIGMgOiB7XG4gKiAgICAgICAgICBkOiAndGVzdCdcbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnYi5jLmQnKSAtLT4gJ3Rlc3QnXG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2IuYycpIC0tPiB7ZDogJ3Rlc3QnfVxuICogVXRpbHMuZmluZFZhbHVlKGEsICdlJykgLS0+IHVuZGVmaW5lZFxuICogVXRpbHMuZmluZFZhbHVlKGEsICdlJywgdHJ1ZSkgLS0+IHt9IGFuZCBhIHdpbGwgYmVjb21lOlxuICoge1xuICogICBiOiB7XG4gKiAgICAgIGMgOiB7XG4gKiAgICAgICAgICBkOiAndGVzdCdcbiAqICAgICAgfVxuICogIH0sXG4gKiAgZToge1xuICogIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRWYWx1ZU9mID0gKG9iaiwga2V5LCBjcmVhdGU/KSA9PiB7XG5cbiAgICBpZiAoIW9iaiB8fCAha2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZSkge1xuICAgICAgICByZXR1cm4gZ2V0KG9iaiwga2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IGtleS5zcGxpdCgnLicpLFxuICAgICAgICBrZXlzID0gW107XG5cbiAgICBsZXQgc2tpcFByb2Nlc3Npbmc7XG5cbiAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICAgIGlmICghcGFydHMubGVuZ3RoKSB7IC8vIGlmIHRoZSBwYXJ0IG9mIGEga2V5IGlzIG5vdCB2YWxpZCwgc2tpcCB0aGUgcHJvY2Vzc2luZy5cbiAgICAgICAgICAgIHNraXBQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YlBhcnRzID0gcGFydC5tYXRjaCgvXFx3Ky9nKTtcbiAgICAgICAgbGV0IHN1YlBhcnQ7XG5cbiAgICAgICAgd2hpbGUgKHN1YlBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3ViUGFydCA9IHN1YlBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBrZXlzLnB1c2goeyAna2V5Jzogc3ViUGFydCwgJ3ZhbHVlJzogc3ViUGFydHMubGVuZ3RoID8gW10gOiB7fSB9KTsgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY3JlYXRlIGFuIGFycmF5IG9yIGFuIG9iamVjdFxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2tpcFByb2Nlc3NpbmcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBrZXlzLmZvckVhY2goKF9rZXkpID0+IHtcbiAgICAgICAgbGV0IHRlbXBPYmogPSBvYmpbX2tleS5rZXldO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHRlbXBPYmopKSB7XG4gICAgICAgICAgICB0ZW1wT2JqID0gZ2V0VmFsaWRKU09OKHRlbXBPYmopO1xuICAgICAgICAgICAgaWYgKCF0ZW1wT2JqKSB7XG4gICAgICAgICAgICAgICAgdGVtcE9iaiA9IF9rZXkudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb2JqW19rZXkua2V5XSA9IHRlbXBPYmo7XG4gICAgICAgIG9iaiA9IHRlbXBPYmo7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxuLypcbiogZXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGxhc3QgYml0IGZyb20gZnVsbCB0eXBlUmVmIG9mIGEgZmllbGRcbiogZS5nLiByZXR1cm5zICdTdHJpbmcnIGZvciB0eXBlUmVmID0gJ2phdmEubGFuZy5TdHJpbmcnXG4qIEBwYXJhbXM6IHt0eXBlUmVmfSB0eXBlIHJlZmVyZW5jZVxuKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0VHlwZSA9ICh0eXBlUmVmOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGxldCB0eXBlO1xuICAgIGlmICghdHlwZVJlZikge1xuICAgICAgICByZXR1cm4gRGF0YVR5cGUuU1RSSU5HO1xuICAgIH1cbiAgICB0eXBlID0gdHlwZVJlZiAmJiB0eXBlUmVmLnN1YnN0cmluZyh0eXBlUmVmLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB0eXBlID0gdHlwZSAmJiB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdHlwZSA9IHR5cGUgPT09IERhdGFUeXBlLkxPQ0FMREFURVRJTUUgPyBEYXRhVHlwZS5EQVRFVElNRSA6IHR5cGU7XG4gICAgcmV0dXJuIHR5cGU7XG59O1xuXG4vKiByZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGRhdGEgdHlwZSBtYXRjaGVzIG51bWJlciB0eXBlICovXG5leHBvcnQgY29uc3QgaXNOdW1iZXJUeXBlID0gKHR5cGU6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoTlVNQkVSX1RZUEVTLmluZGV4T2YoZXh0cmFjdFR5cGUodHlwZSkudG9Mb3dlckNhc2UoKSkgIT09IC0xKTtcbn07XG5cbi8qIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHByb3ZpZGVkIG9iamVjdCBpcyBlbXB0eSovXG5leHBvcnQgY29uc3QgaXNFbXB0eU9iamVjdCA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChpc09iamVjdChvYmopICYmICFpc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBGdW5jdGlvbiBleHBlY3RzIGFuIGVsZW1lbnQgb24gd2hpY2ggdGhlIHNjcm9sbGluZyBzaG91bGQgYmUgYXBwbGllZCwgRGVwZW5kaW5nIG9uIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgc2Nyb2xsYmFyIHdpbGwgYmUgYWRqdXN0ZWRcbmV4cG9ydCBjb25zdCBzY3JvbGxUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICBjb25zdCBmb3JtUG9zaXRpb24gPSAkZWxlbWVudC5vZmZzZXQoKS50b3A7XG4gICAgY29uc3QgJHNjcm9sbFBhcmVudCA9ICRlbGVtZW50LmNsb3Nlc3QoJ1t3bXNtb290aHNjcm9sbD1cInRydWVcIl0nKTtcbiAgICBpZiAoaXNNb2JpbGVBcHAoKSAmJiAkc2Nyb2xsUGFyZW50Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBpU2Nyb2xsID0gZ2V0KCRzY3JvbGxQYXJlbnRbMF0sICdpc2Nyb2xsJyk7XG4gICAgICAgIGxldCB0byA9IC0oZm9ybVBvc2l0aW9uIC0gaVNjcm9sbC55KTtcbiAgICAgICAgdG8gPSAoaVNjcm9sbC5tYXhTY3JvbGxZID4gdG8pID8gaVNjcm9sbC5tYXhTY3JvbGxZIDogdG87XG4gICAgICAgIGlTY3JvbGwuc2Nyb2xsVG8oMCwgdG8pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoe1xuICAgICAgICAgICAgdG9wOiBmb3JtUG9zaXRpb24sXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLy8gRnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBpbiB2aWV3cG9ydCBvciBub3RcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRJblZpZXdwb3J0ID0gKGVsZW1lbnQpID0+IHtcbiAgICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgcmVjdC50b3AgPj0gMCAmJlxuICAgICAgICByZWN0LmxlZnQgPj0gMCAmJlxuICAgICAgICByZWN0LmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICYmXG4gICAgICAgIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aClcbiAgICApO1xufVxuXG4vKkZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBvYmplY3QgaXMgYSBwYWdlYWJsZSBvYmplY3Qgb3Igbm90LiovXG5leHBvcnQgY29uc3QgaXNQYWdlYWJsZSA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHBhZ2VhYmxlID0ge1xuICAgICAgICAnY29udGVudCc6IFtdLFxuICAgICAgICAnZmlyc3QnOiB0cnVlLFxuICAgICAgICAnbGFzdCc6IHRydWUsXG4gICAgICAgICdudW1iZXInOiAwLFxuICAgICAgICAnbnVtYmVyT2ZFbGVtZW50cyc6IDEwLFxuICAgICAgICAnc2l6ZSc6IDIwLFxuICAgICAgICAnc29ydCc6IG51bGwsXG4gICAgICAgICd0b3RhbEVsZW1lbnRzJzogMTAsXG4gICAgICAgICd0b3RhbFBhZ2VzJzogMVxuICAgIH07XG4gICAgLy8gcGFnaW5hdGVkIG9iamVjdCBtYXkgb3IgbWF5IG5vdCBjb250YWluICdlbXB0eScgcHJvcGVydHkuIEluIGVpdGhlciBjYXNlLCBQYWdlYWJsZSBzaG91bGQgcmV0dXJuIGFzIHRydWUuXG4gICAgY29uc3QgcGFnaW5hdGVkT2JqID0gb21pdChvYmosICdlbXB0eScpO1xuICAgIHJldHVybiAoaXNFcXVhbChrZXlzKHBhZ2VhYmxlKSwga2V5cyhwYWdpbmF0ZWRPYmopLnNvcnQoKSkpO1xufTtcblxuLypcbiAqIFV0aWwgbWV0aG9kIHRvIHJlcGxhY2UgcGF0dGVybnMgaW4gc3RyaW5nIHdpdGggb2JqZWN0IGtleXMgb3IgYXJyYXkgdmFsdWVzXG4gKiBFeGFtcGxlczpcbiAqIFV0aWxzLnJlcGxhY2UoJ0hlbGxvLCAke2ZpcnN0fSAke2xhc3R9ICEnLCB7Zmlyc3Q6ICd3YXZlbWFrZXInLCBsYXN0OiAnbmcnfSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqIFV0aWxzLnJlcGxhY2UoJ0hlbGxvLCAkezB9ICR7MX0gIScsIFsnd2F2ZW1ha2VyJywnbmcnXSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqIEV4YW1wbGVzIGlmIHBhcnNlRXJyb3IgaXMgdHJ1ZTpcbiAqIFV0aWxzLnJlcGxhY2UoJ0hlbGxvLCB7MH0gezF9ICEnLCBbJ3dhdmVtYWtlcicsJ25nJ10pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKi9cbmV4cG9ydCBjb25zdCByZXBsYWNlID0gKHRlbXBsYXRlLCBtYXAsIHBhcnNlRXJyb3I/OiBib29sZWFuKSA9PiB7XG4gICAgbGV0IHJlZ0V4ID0gUkVHRVguUkVQTEFDRV9QQVRURVJOO1xuICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocGFyc2VFcnJvcikge1xuICAgICAgICByZWdFeCA9IC9cXHsoW15cXH1dKylcXH0vZztcbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShyZWdFeCwgZnVuY3Rpb24gKG1hdGNoLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGdldChtYXAsIGtleSk7XG4gICAgfSk7XG59O1xuXG4vKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIGRhdGUgdGltZSB0eXBlKi9cbmV4cG9ydCBjb25zdCBpc0RhdGVUaW1lVHlwZSA9IHR5cGUgPT4ge1xuICAgIGlmIChpbmNsdWRlcyh0eXBlLCAnLicpKSB7XG4gICAgICAgIHR5cGUgPSB0b0xvd2VyKGV4dHJhY3RUeXBlKHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGluY2x1ZGVzKFtEYXRhVHlwZS5EQVRFLCBEYXRhVHlwZS5USU1FLCBEYXRhVHlwZS5USU1FU1RBTVAsIERhdGFUeXBlLkRBVEVUSU1FLCBEYXRhVHlwZS5MT0NBTERBVEVUSU1FXSwgdHlwZSk7XG59O1xuXG5jb25zdCBtb21lbnRQYXR0ZXJuID0gKHBhdHRlcm4pID0+IHtcbiAgICBpZiAoaW5jbHVkZXMocGF0dGVybiwgJ0UnKSkge1xuICAgICAgICBwYXR0ZXJuID0gX3JlcGxhY2UocGF0dGVybiwgL0VbLF0/L2csICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIF9yZXBsYWNlKHBhdHRlcm4sIC95KmQqL2csICh2YWwpID0+IHZhbC50b1VwcGVyQ2FzZSgpKTtcbn07XG5cbi8qICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZGF0ZSBvYmplY3QuIElmIHZhbCBpcyB1bmRlZmluZWQgaXQgcmV0dXJucyBpbnZhbGlkIGRhdGUgKi9cbmV4cG9ydCBjb25zdCBnZXRWYWxpZERhdGVPYmplY3QgPSAodmFsLCBvcHRpb25zPykgPT4ge1xuICAgY29uc3QgZGVmYXVsdE1lcmlkaWFuID0gWydBTScsICdQTSddO1xuICAgY29uc3QgbW9tZW50TWVyaWRpYW4gPSBtb21lbnQoKS5fbG9jYWxlLm1lcmlkaWVtKCk7XG4gICAgLy8gVXBkYXRpbmcgbG9jYWxpemVkIG1lcmlkaWFucyB3aXRoIGRlZmF1bHQgbWVyaWRpYW5zIHdoZW4gbW9tZW50IG1lcmlkaWFuIGlzIG5vdCBkZWZpbmVkXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5tZXJpZGlhbnMgJiYgaW5jbHVkZXMoZGVmYXVsdE1lcmlkaWFuLCBtb21lbnRNZXJpZGlhbikpIHtcbiAgICAgICAgZm9yRWFjaChvcHRpb25zLm1lcmlkaWFucywgKG1lcmlkaWFuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluY2x1ZGVzKHZhbCwgbWVyaWRpYW4pKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UobWVyaWRpYW4sIGRlZmF1bHRNZXJpZGlhbltpbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaXNOYXRpdmVQaWNrZXIgPSAob3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KCdpc05hdGl2ZVBpY2tlcicpKSA/IGdldChvcHRpb25zLCAnaXNOYXRpdmVQaWNrZXInKSA6IGlzTW9iaWxlKCk7XG4gICAgY29uc3QgcGF0dGVybiA9IGlzTmF0aXZlUGlja2VyID8gKGdldChvcHRpb25zLCAncGF0dGVybicpIHx8ICdZWVlZL01NL0REIEhIOm1tOnNzJykgOiAobW9tZW50UGF0dGVybihnZXQob3B0aW9ucywgJ3BhdHRlcm4nKSkgfHwgJycpO1xuICAgIC8vIEhhbmRsaW5nIGxvY2FsaXphdGlvblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGF0dGVybiAmJiBvcHRpb25zLnBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIGlmICghaXNOYU4oKG5ldyBEYXRlKHZhbCkpLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdmFsIGlzIGEgdmFsaWQgZGF0ZSBvciBub3RcbiAgICAgICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIGlPUywgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBmb3JtYXQgdG8gY29uc2lkZXIgZXZlbiB0aGUgc2Vjb25kcy5cbiAgICAgICAgICAgICAgICB2YWwgPSBtb21lbnQodmFsKS5mb3JtYXQoJ1lZWVkvTU0vREQgSEg6bW06c3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbCA9IG1vbWVudChuZXcgRGF0ZSh2YWwpLCBwYXR0ZXJuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudCh2YWwsIHBhdHRlcm4pO1xuICAgICAgICB9XG4gICAgICAgIHZhbCA9IHZhbC50b0RhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAobW9tZW50KHZhbCwgcGF0dGVybikuaXNWYWxpZCgpKSB7XG4gICAgICAgIC8vIGRhdGUgd2l0aCArNSBob3VycyBpcyByZXR1cm5lZCBpbiBzYWZhcmkgYnJvd3NlciB3aGljaCBpcyBub3QgYSB2YWxpZCBkYXRlLlxuICAgICAgICAvLyBIZW5jZSBjb252ZXJ0aW5nIHRoZSBkYXRlIHRvIHRoZSBzdXBwb3J0ZWQgZm9ybWF0IFwiWVlZWS9NTS9ERCBISDptbTpzc1wiIGluIElPU1xuICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KG1vbWVudCh2YWwpLnZhbHVlT2YoKSkuZm9ybWF0KCdZWVlZL01NL0REIEhIOm1tOnNzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSB0aW1lc3RhbXAgc3RyaW5nLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyKi9cbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgdmFsID0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLyppZiB0aGUgdmFsdWUgaXMgaW4gSEg6bW06c3MgZm9ybWF0LCBpdCByZXR1cm5zIGEgd3JvbmcgZGF0ZS4gU28gYXBwZW5kIHRoZSBkYXRlIHRvIHRoZSBnaXZlbiB2YWx1ZSB0byBnZXQgZGF0ZSovXG4gICAgICAgIGlmICghKG5ldyBEYXRlKHZhbCkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KChtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSArICcgJyArIHZhbCksICdZWVlZLU1NLUREIEhIOm1tOnNzIEEnKTtcblxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShtb21lbnQodmFsKS52YWx1ZU9mKCkpO1xufTtcblxuLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBqYXZhc2NyaXB0IGRhdGUgb2JqZWN0Ki9cbmV4cG9ydCBjb25zdCBnZXROYXRpdmVEYXRlT2JqZWN0ID0gKHZhbCwgb3B0aW9ucz8pID0+IHtcbiAgICB2YWwgPSBnZXRWYWxpZERhdGVPYmplY3QodmFsLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsKTtcbn07XG5cblxuLyoqXG4gKiBwcmVwYXJlIGEgYmxvYiBvYmplY3QgYmFzZWQgb24gdGhlIGNvbnRlbnQgYW5kIGNvbnRlbnQgdHlwZSBwcm92aWRlZFxuICogaWYgY29udGVudCBpcyBibG9iIGl0c2VsZiwgc2ltcGx5IHJldHVybnMgaXQgYmFja1xuICogQHBhcmFtIHZhbFxuICogQHBhcmFtIHZhbENvbnRlbnRUeXBlXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJsb2IgPSAodmFsLCB2YWxDb250ZW50VHlwZT8pID0+IHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBjb25zdCBqc29uVmFsID0gZ2V0VmFsaWRKU09OKHZhbCk7XG4gICAgaWYgKGpzb25WYWwgJiYganNvblZhbCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoanNvblZhbCldLCB7IHR5cGU6IHZhbENvbnRlbnRUeXBlIHx8ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbdmFsXSwgeyB0eXBlOiB2YWxDb250ZW50VHlwZSB8fCAndGV4dC9wbGFpbicgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGJ5IGNvbXBhcmluZyB0d28gb2JqZWN0cyBiYXNlZCBvbiB0aGUgZmllbGRzXG4gKiBAcGFyYW0gb2JqMSBvYmplY3RcbiAqIEBwYXJhbSBvYmoyIG9iamVjdFxuICogQHBhcmFtIGNvbXBhcmVCeSBzdHJpbmcgZmllbGQgdmFsdWVzIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIG9iamVjdCBlcXVhbGl0eSByZXR1cm5zIHRydWUgYmFzZWQgb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VxdWFsV2l0aEZpZWxkcyA9IChvYmoxLCBvYmoyLCBjb21wYXJlQnkpID0+IHtcbiAgICAvLyBjb21wYXJlQnkgY2FuIGJlICdpZCcgb3IgJ2lkMSwgaWQyJyBvciAnaWQxLCBpZDI6aWQzJ1xuICAgIC8vIFNwbGl0IHRoZSBjb21wYXJlYnkgY29tbWEgc2VwYXJhdGVkIHZhbHVlc1xuICAgIGxldCBfY29tcGFyZUJ5ID0gaXNBcnJheShjb21wYXJlQnkpID8gY29tcGFyZUJ5IDogc3BsaXQoY29tcGFyZUJ5LCAnLCcpO1xuXG4gICAgX2NvbXBhcmVCeSA9IG1hcChfY29tcGFyZUJ5LCB0cmltKTtcblxuICAgIHJldHVybiBpc0VxdWFsV2l0aChvYmoxLCBvYmoyLCBmdW5jdGlvbiAobzEsIG8yKSB7XG4gICAgICAgIHJldHVybiBldmVyeShfY29tcGFyZUJ5LCBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGxldCBjYjEsIGNiMiwgX2NiO1xuXG4gICAgICAgICAgICAvLyBJZiBjb21wYXJlYnkgY29udGFpbnMgOiAsIGNvbXBhcmUgdGhlIHZhbHVlcyBieSB0aGUga2V5cyBvbiBlaXRoZXIgc2lkZSBvZiA6XG4gICAgICAgICAgICBpZiAoaW5kZXhPZihjYiwgY29tcGFyZUJ5U2VwYXJhdG9yKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjYjEgPSBjYjIgPSB0cmltKGNiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX2NiID0gc3BsaXQoY2IsIGNvbXBhcmVCeVNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgY2IxID0gdHJpbShfY2JbMF0pO1xuICAgICAgICAgICAgICAgIGNiMiA9IHRyaW0oX2NiWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGdldChvMSwgY2IxKSA9PT0gZ2V0KG8yLCBjYjIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGdldE5vZGUgPSBzZWxlY3RvciA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuLy8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IGlzU3R5bGVTaGVldExvYWRlZCA9IGhyZWYgPT4gISFnZXROb2RlKGBsaW5rW2hyZWY9XCIke2hyZWZ9XCJdYCk7XG5cbi8vIGZ1bmN0aW9uIHRvIHJlbW92ZSBzdHlsZXNoZWV0IGlmIHRoZSBzdHlsZXNoZWV0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCByZW1vdmVTdHlsZVNoZWV0ID0gaHJlZiA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGdldE5vZGUoYGxpbmtbaHJlZj1cIiR7aHJlZn1cIl1gKTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgIH1cbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGxvYWQgYSBzdHlsZXNoZWV0XG5leHBvcnQgY29uc3QgbG9hZFN0eWxlU2hlZXQgPSAodXJsLCBhdHRyKSA9PiB7XG4gICAgaWYgKGlzU3R5bGVTaGVldExvYWRlZCh1cmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgLy8gVG8gYWRkIGF0dHJpYnV0ZXMgdG8gbGluayB0YWdcbiAgICBpZiAoYXR0ciAmJiBhdHRyLm5hbWUpIHtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdzdHlsZXNoZWV0Jyk7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIHJldHVybiBsaW5rO1xufTtcblxuLy8gZnVuY3Rpb24gdG8gbG9hZCBzdHlsZXNoZWV0c1xuZXhwb3J0IGNvbnN0IGxvYWRTdHlsZVNoZWV0cyA9ICh1cmxzID0gW10pID0+IHtcbiAgICAvLyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IGFuIGFycmF5LCBjb252ZXJ0IGl0IHRvIGFuIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVybHMpKSB7XG4gICAgICAgIHVybHMgPSBbdXJsc107XG4gICAgfVxuICAgIHVybHMuZm9yRWFjaChsb2FkU3R5bGVTaGVldCk7XG59O1xuXG4vLyBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc2NyaXB0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCBpc1NjcmlwdExvYWRlZCA9IHNyYyA9PiAhIWdldE5vZGUoYHNjcmlwdFtzcmM9XCIke3NyY31cIl0sIHNjcmlwdFtkYXRhLXNyYz1cIiR7c3JjfVwiXWApO1xuXG5leHBvcnQgY29uc3QgZ2V0TW9tZW50TG9jYWxlT2JqZWN0ID0gKHRpbWVab25lLCBkYXRlT2JqPykgPT4ge1xuICAgIGlmIChkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShtb21lbnQoZGF0ZU9iaikudHoodGltZVpvbmUpLmZvcm1hdCgpKS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdGltZVpvbmV9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKG1vbWVudCgpLnR6KHRpbWVab25lKS5mb3JtYXQoKSkudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxvYWRTY3JpcHQgPSBhc3luYyAodXJsLCBsb2FkVmlhU2NyaXB0VGFnLCBjYWNoZWFibGUgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IF91cmwgPSB1cmwudHJpbSgpO1xuICAgIGlmICghX3VybC5sZW5ndGggfHwgaXNTY3JpcHRMb2FkZWQoX3VybCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGlmIChsb2FkVmlhU2NyaXB0VGFnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgICAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IF91cmw7XG4gICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkgeyAgLy9JRVxuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHsgIC8vT3RoZXIgYnJvd3NlcnNcbiAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY3JpcHQub25lcnJvciA9IChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYoY2FjaGVhYmxlKSB7XG4gICAgICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgICAgICAgZGF0YVR5cGU6ICdzY3JpcHQnLFxuICAgICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgICB1cmw6IHVybFxuICAgICAgICB9KS5kb25lKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxuICAgICAgICAgICAgLmZhaWwocmVhc29uID0+IHJlYXNvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICQuZ2V0U2NyaXB0KHVybClcbiAgICAgICAgICAgIC5kb25lKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxuICAgICAgICAgICAgLmZhaWwocmVhc29uID0+IHJlYXNvbik7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxvYWRTY3JpcHRzID0gYXN5bmMgKHVybHMgPSBbXSwgbG9hZFZpYVNjcmlwdFRhZyA9IHRydWUpID0+IHtcbiAgICBmb3IgKGNvbnN0IHVybCBvZiB1cmxzKSB7XG4gICAgICAgIGF3YWl0IGxvYWRTY3JpcHQodXJsLCBsb2FkVmlhU2NyaXB0VGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufTtcblxuZXhwb3J0IGxldCBfV01fQVBQX1BST0pFQ1Q6IGFueSA9IHt9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2V0cyBzZXNzaW9uIHN0b3JhZ2UgaXRlbSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJRFxuICogQHBhcmFtIGtleSBzdHJpbmdcbiAqIEBwYXJhbSB2YWx1ZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlc3Npb25TdG9yYWdlSXRlbSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgbGV0IGl0ZW06IGFueSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0ge307XG4gICAgfVxuICAgIGl0ZW1ba2V5XSA9IHZhbHVlO1xuXG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkLCBKU09OLnN0cmluZ2lmeShpdGVtKSk7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBzZXNzaW9uIHN0b3JhZ2UgaXRlbSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJRFxuICogQHBhcmFtIGtleSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlc3Npb25TdG9yYWdlSXRlbSA9IGtleSA9PiB7XG4gICAgLy8gc2FuaXR5IGNoZWNrIGZvciB0aGlzIHRvIHdvcmsgd2l0aCBuZy1jb2RlZ2VuXG4gICAgbGV0IGl0ZW0gPSB3aW5kb3cgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgbm9vcCA9ICguLi5hcmdzKSA9PiB7IH07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYmxvYiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBwYXRoXG4gKiBAcGFyYW0gZmlsZXBhdGhcbiAqIEByZXR1cm5zIHByb21pc2UgaGF2aW5nIGJsb2Igb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9CbG9iID0gKGZpbGVwYXRoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIFJlYWQgdGhlIGZpbGUgZW50cnkgZnJvbSB0aGUgZmlsZSBVUkxcbiAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChmaWxlcGF0aCwgZnVuY3Rpb24gKGZpbGVFbnRyeSkge1xuICAgICAgICAgICAgZmlsZUVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBmaWxlIGhhcyB0aGUgY29yZG92YSBmaWxlIHN0cnVjdHVyZS4gVG8gc3VibWl0IHRvIHRoZSBiYWNrZW5kLCBjb252ZXJ0IHRoaXMgZmlsZSB0byBqYXZhc2NyaXB0IGZpbGVcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZ0Jsb2IgPSBuZXcgQmxvYihbcmVhZGVyLnJlc3VsdF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogZmlsZS50eXBlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgJ2Jsb2InOiBpbWdCbG9iLCAnZmlsZXBhdGgnOiBmaWxlcGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0NvcmRvdmEgPSAoKSA9PiB7XG4gICAgcmV0dXJuICEhd2luZG93Wydjb3Jkb3ZhJ107XG59O1xuXG5leHBvcnQgY29uc3QgQXBwQ29uc3RhbnRzID0ge1xuICAgIElOVF9NQVhfVkFMVUU6IDIxNDc0ODM2NDdcbn07XG5cbmV4cG9ydCBjb25zdCBvcGVuTGluayA9IChsaW5rOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nID0gJ19zZWxmJykgPT4ge1xuICAgIGlmIChoYXNDb3Jkb3ZhKCkgJiYgc3RhcnRzV2l0aChsaW5rLCAnIycpKSB7XG4gICAgICAgIGxvY2F0aW9uLmhhc2ggPSBsaW5rO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKGxpbmssIHRhcmdldCk7XG4gICAgfVxufTtcblxuLyogdXRpbCBmdW5jdGlvbiB0byBsb2FkIHRoZSBjb250ZW50IGZyb20gYSB1cmwgKi9cbmV4cG9ydCBjb25zdCBmZXRjaENvbnRlbnQgPSAoZGF0YVR5cGUsIHVybDogc3RyaW5nLCBpblN5bmM6IGJvb2xlYW4gPSBmYWxzZSwgc3VjY2Vzcz8sIGVycm9yPyk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuICQuYWpheCh7IHR5cGU6ICdnZXQnLCBkYXRhVHlwZTogZGF0YVR5cGUsIHVybDogdXJsLCBhc3luYzogIWluU3luYyB9KVxuICAgICAgICAuZG9uZShyZXNwb25zZSA9PiBzdWNjZXNzICYmIHN1Y2Nlc3MocmVzcG9uc2UpKVxuICAgICAgICAuZmFpbChyZWFzb24gPT4gZXJyb3IgJiYgZXJyb3IocmVhc29uKSk7XG59O1xuXG4vKipcbiAqIElmIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBwcm9taXNlLCB0aGVuIG9iamVjdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0LlxuICogQHBhcmFtIHtQcm9taXNlPFQ+IHwgVH0gYVxuICogQHJldHVybnMge1Byb21pc2U8VD59XG4gKi9cbmV4cG9ydCBjb25zdCB0b1Byb21pc2UgPSA8VD4oYTogVCB8IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhIGFzIFQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpbnZva2VzIHRoZSBnaXZlbiB0aGUgZnVuY3Rpb24gKGZuKSB1bnRpbCB0aGUgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzIG9yIHRoZSBtYXhpbXVtIG51bWJlclxuICogb2YgcmV0cmllcyBpcyByZWFjaGVkIG9yIG9uQmVmb3JlUmV0cnkgcmV0dXJucyBmYWxzZS5cbiAqXG4gKiBAcGFyYW0gZm4gLSBhIGZ1bmN0aW9uIHRoYXQgaXMgbmVlZHMgdG8gYmUgaW52b2tlZC4gVGhlIGZ1bmN0aW9uIGNhbiBhbHNvIHJldHVybiBhIHByb21pc2UgYXMgd2VsbC5cbiAqIEBwYXJhbSBpbnRlcnZhbCAtIG1pbmltdW0gdGltZSBnYXAgYmV0d2VlbiBzdWNjZXNzaXZlIHJldHJpZXMuIFRoaXMgYXJndW1lbnQgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMC5cbiAqIEBwYXJhbSBtYXhSZXRyaWVzIC0gbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcy4gVGhpcyBhcmd1bWVudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuIEZvciBhbGwgb3RoZXIgdmFsdWVzLFxuICogbWF4UmV0cmllcyBpcyBpbmZpbml0eS5cbiAqIEBwYXJhbSBvbkJlZm9yZVJldHJ5IC0gYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgcmUtaW52b2tpbmcgYWdhaW4uIFRoaXMgZnVuY3Rpb24gY2FuXG4gKiByZXR1cm4gZmFsc2Ugb3IgYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgdG8gZmFsc2UgdG8gc3RvcCBmdXJ0aGVyIHJldHJ5IGF0dGVtcHRzLlxuICogQHJldHVybnMgeyp9IGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZm4gaXMgc3VjY2VzcyAob3IpIG1heGltdW0gcmV0cnkgYXR0ZW1wdHMgcmVhY2hlZFxuICogKG9yKSBvbkJlZm9yZVJldHJ5IHJldHVybmVkIGZhbHNlLlxuICovXG5leHBvcnQgY29uc3QgcmV0cnlJZkZhaWxzID0gKGZuOiAoKSA9PiBhbnksIGludGVydmFsOiBudW1iZXIsIG1heFJldHJpZXM6IG51bWJlciwgb25CZWZvcmVSZXRyeSA9ICgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpID0+IHtcbiAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgY29uc3QgdHJ5Rm4gPSAoKSA9PiB7XG4gICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbWF4UmV0cmllcyA9IChpc051bWJlcihtYXhSZXRyaWVzKSAmJiBtYXhSZXRyaWVzID4gMCA/IG1heFJldHJpZXMgOiAwKTtcbiAgICBpbnRlcnZhbCA9IChpc051bWJlcihpbnRlcnZhbCkgJiYgaW50ZXJ2YWwgPiAwID8gaW50ZXJ2YWwgOiAwKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZXJyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvUHJvbWlzZTxib29sZWFuPihvbkJlZm9yZVJldHJ5KCkpLnRoZW4oZnVuY3Rpb24gKHJldHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeSAhPT0gZmFsc2UgJiYgKCFtYXhSZXRyaWVzIHx8IHJldHJ5Q291bnQgPD0gbWF4UmV0cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvUHJvbWlzZSh0cnlGbigpKS50aGVuKHJlc29sdmUsIGVycm9yRm4pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVyckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgKCkgPT4gcmVqZWN0KGVyckFyZ3MpKTtcbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgdG9Qcm9taXNlKHRyeUZuKCkpLnRoZW4ocmVzb2x2ZSwgZXJyb3JGbik7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIFByb21pc2Ugb2YgYSBkZWZlciBjcmVhdGVkIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGhhcyBhYm9ydCBmdW5jdGlvbiB0aGF0IHdpbGwgcmVqZWN0IHRoZSBkZWZlciB3aGVuIGNhbGxlZC5cbiAqIEByZXR1cm5zIHsqfSBhbmd1bGFyIGRlZmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QWJvcnRhYmxlRGVmZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgX2RlZmVyOiBhbnkgPSB7XG4gICAgICAgIHByb21pc2U6IG51bGwsXG4gICAgICAgIHJlamVjdDogbnVsbCxcbiAgICAgICAgcmVzb2x2ZTogbnVsbCxcbiAgICAgICAgb25BYm9ydDogKCkgPT4geyB9LFxuICAgICAgICBpc0Fib3J0ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBfZGVmZXIucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgX2RlZmVyLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICBfZGVmZXIucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIF9kZWZlci5wcm9taXNlLmFib3J0ID0gKCkgPT4ge1xuICAgICAgICB0cmlnZ2VyRm4oX2RlZmVyLm9uQWJvcnQpO1xuICAgICAgICBfZGVmZXIucmVqZWN0KCdhYm9ydGVkJyk7XG4gICAgICAgIF9kZWZlci5pc0Fib3J0ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgcmV0dXJuIF9kZWZlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDU1NSdWxlID0gKHJ1bGVTZWxlY3Rvcjogc3RyaW5nLCBydWxlczogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc3R5bGVzaGVldCA9IGRvY3VtZW50LnN0eWxlU2hlZXRzWzBdO1xuICAgIHN0eWxlc2hlZXQuaW5zZXJ0UnVsZShgJHtydWxlU2VsZWN0b3J9IHsgJHtydWxlc30gfWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9IChsaW5rKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgLy8gSWYgdXJsIHBhcmFtcyBhcmUgcHJlc2VudCwgY29uc3RydWN0IHBhcmFtcyBvYmplY3QgYW5kIHBhc3MgaXQgdG8gc2VhcmNoXG4gICAgY29uc3QgaW5kZXggPSBsaW5rLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gc3BsaXQobGluay5zdWJzdHJpbmcoaW5kZXggKyAxLCBsaW5rLmxlbmd0aCksICcmJyk7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGFyYW1BcnJheSA9IHNwbGl0KHBhcmFtLCAnPScpO1xuICAgICAgICAgICAgcGFyYW1zW3BhcmFtQXJyYXlbMF1dID0gcGFyYW1BcnJheVsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um91dGVOYW1lRnJvbUxpbmsgPSAobGluaykgPT4ge1xuICAgIGxpbmsgPSBsaW5rLnJlcGxhY2UoJyMvJywgJy8nKTtcbiAgICBjb25zdCBpbmRleCA9IGxpbmsuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGluayA9IGxpbmsuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbms7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBcHBsZVByb2R1Y3QgPSAvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbmV4cG9ydCBjb25zdCBkZWZlciA9ICgpID0+IHtcbiAgICBjb25zdCBkID0ge1xuICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICByZXNvbHZlOiBub29wLFxuICAgICAgICByZWplY3Q6IG5vb3BcbiAgICB9O1xuICAgIGQucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZC5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZC5yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgcmV0dXJuIGQ7XG59O1xuXG4vKlxuICogSW52b2tlcyB0aGUgZ2l2ZW4gbGlzdCBvZiBmdW5jdGlvbnMgc2VxdWVudGlhbGx5IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gSWYgYSBmdW5jdGlvbiByZXR1cm5zIGEgcHJvbWlzZSxcbiAqIHRoZW4gbmV4dCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25seSBpZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWN1dGVQcm9taXNlQ2hhaW4gPSAoZm5zLCBhcmdzLCBkPywgaT8pID0+IHtcbiAgICBkID0gZCB8fCBkZWZlcigpO1xuICAgIGkgPSBpIHx8IDA7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgZm5zID0gZmlsdGVyKGZucywgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gIShpc1VuZGVmaW5lZChmbikgfHwgaXNOdWxsKGZuKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZm5zICYmIGkgPCBmbnMubGVuZ3RoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0b1Byb21pc2UoZm5zW2ldLmFwcGx5KHVuZGVmaW5lZCwgYXJncykpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gZXhlY3V0ZVByb21pc2VDaGFpbihmbnMsIGFyZ3MsIGQsIGkgKyAxKSwgZC5yZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGQucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZC5wcm9taXNlO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGRhdGEgc291cmNlcyBhbmQgd2lsbCBjaGVjayBpZiBib3RoIGFyZSBzYW1lIGJ5IGNvbXBhcmluZyB0aGUgdW5pcXVlIGlkIGFuZFxuICogY29udGV4dCBpbiB3aGljaCBkYXRhc291cmNlcyBhcmUgcHJlc2VudFxuICogQHJldHVybnMgeyp9IGJvb2xlYW4gdHJ1ZS8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGF0YVNvdXJjZUVxdWFsID0gKGQxLCBkMikgPT4ge1xuICAgIHJldHVybiBkMS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9VTklRVUVfSURFTlRJRklFUikgPT09IGQyLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1VOSVFVRV9JREVOVElGSUVSKSAmJlxuICAgICAgICBpc0VxdWFsKGQxLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUiksIGQyLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUikpO1xufTtcblxuLyoqXG4gKiBjaGVja3MgaWYgdGhlIHBhc3NlZCBkYXRhc291cmNlIGNvbnRleHQgbWF0Y2hlcyB3aXRoIHBhc3NlZCBjb250ZXh0XG4gKiBAcGFyYW0gZHMsIGRhdGFzb3VyY2UgaGF2aW5nIGEgY29udGV4dFxuICogQHBhcmFtIGN0eCwgY29udGV4dCB0byBjb21wYXJlIHdpdGhcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEYXRhU291cmNlQ3R4ID0gKGRzLCBjdHgpID0+IHtcbiAgICByZXR1cm4gZHMuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSA9PT0gY3R4O1xufTtcblxuLyoqXG4gKiBUaGlzIHRyYXZlcnNlcyB0aGUgZmlsdGVyZXhwcmVzc2lvbnMgb2JqZWN0IHJlY3Vyc2l2ZWx5IGFuZCBwcm9jZXNzIHRoZSBiaW5kIHN0cmluZyBpZiBhbnkgaW4gdGhlIG9iamVjdFxuICogQHBhcmFtIHZhcmlhYmxlIHZhcmlhYmxlIG9iamVjdFxuICogQHBhcmFtIG5hbWUgbmFtZSBvZiB0aGUgdmFyaWFibGVcbiAqIEBwYXJhbSBjb250ZXh0IHNjb3BlIG9mIHRoZSB2YXJpYWJsZVxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0ZpbHRlckV4cEJpbmROb2RlID0gKGNvbnRleHQsIGZpbHRlckV4cHJlc3Npb25zLCB2YXJpYWJsZT8pID0+IHtcbiAgICBjb25zdCBkZXN0cm95Rm4gPSBjb250ZXh0LnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyID8gY29udGV4dC5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lci5iaW5kKGNvbnRleHQpIDogX25vb3A7XG4gICAgY29uc3QgZmlsdGVyJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBiaW5kRmlsRXhwT2JqID0gKG9iaiwgdGFyZ2V0Tm9kZUtleSkgPT4ge1xuICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XG4gICAgICAgICAgIGlmICgobmV3VmFsID09PSBvbGRWYWwgJiYgaXNVbmRlZmluZWQobmV3VmFsKSkgfHwgKGlzVW5kZWZpbmVkKG5ld1ZhbCkgJiYgIWlzVW5kZWZpbmVkKG9sZFZhbCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBjbG9uaW5nIGZvciBibG9iIGNvbHVtblxuICAgICAgICAgICBpZiAoIWluY2x1ZGVzKFsnYmxvYicsICdmaWxlJ10sIG9iai50eXBlKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGdldENsb25lZE9iamVjdChuZXdWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eTogd2hlcmUgd2UgYXJlIGFsbG93aW5nIHRoZSB1c2VyIHRvIGJpbmQgY29tcGxldGUgb2JqZWN0XG4gICAgICAgICAgICBpZiAob2JqLnRhcmdldCA9PT0gJ2RhdGFCaW5kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgZXhpc3RpbmcgZGF0YWJpbmRpbmcgZWxlbWVudFxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnJ1bGVzID0gW107XG4gICAgICAgICAgICAgICAgLy8gbm93IGFkZCBhbGwgdGhlIHJldHVybmVkIHZhbHVlc1xuICAgICAgICAgICAgICAgIGZvckVhY2gobmV3VmFsLCBmdW5jdGlvbiAodmFsdWUsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQnOiB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnOiBvYmoubWF0Y2hNb2RlIHx8ICdzdGFydGlnbm9yZWNhc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHZhbHVlIHRvIHRoZSByb290IG5vZGVcbiAgICAgICAgICAgICAgICBvYmpbdGFyZ2V0Tm9kZUtleV0gPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXIkLm5leHQoeyBmaWx0ZXJFeHByZXNzaW9ucywgbmV3VmFsIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgob2JqW3RhcmdldE5vZGVLZXldLCAnYmluZDonKSkge1xuICAgICAgICAgICAgLy8gW1RvZG8tQ1NQXTogbmVlZHMgYSBjaGVjaywgd2hlcmUgaXMgdGhpcyB1c2VkXG4gICAgICAgICAgICBkZXN0cm95Rm4oXG4gICAgICAgICAgICAgICAgJHdhdGNoKG9ialt0YXJnZXROb2RlS2V5XS5yZXBsYWNlKCdiaW5kOicsICcnKSwgY29udGV4dCwge30sIHZhcmlhYmxlID8gdmFyaWFibGUuaW52b2tlT25GaWx0ZXJ0RXhwcmVzc2lvbkNoYW5nZS5iaW5kKHZhcmlhYmxlLCBvYmosIHRhcmdldE5vZGVLZXkpIDogbGlzdGVuZXIsIHVuZGVmaW5lZCwgZmFsc2UsIHthcnJheVR5cGU6IGluY2x1ZGVzKFsnaW4nLCAnbm90aW4nXSwgb2JqLm1hdGNoTW9kZSl9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMgPT4ge1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMucnVsZXMpIHtcbiAgICAgICAgICAgIGZvckVhY2goZXhwcmVzc2lvbnMucnVsZXMsIChmaWxFeHBPYmosIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMoZmlsRXhwT2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLm1hdGNoTW9kZSA9PT0gJ2JldHdlZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kRmlsRXhwT2JqKGZpbEV4cE9iaiwgJ3NlY29uZHZhbHVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYmluZEZpbEV4cE9iaihmaWxFeHBPYmosICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zKGZpbHRlckV4cHJlc3Npb25zKTtcblxuICAgIHJldHVybiBmaWx0ZXIkO1xufTtcblxuLy8gVGhpcyBtZXRob2Qgd2lsbCBzZXQgdGhlIGdpdmVuIHByb3RvIG9uIHRoZSB0YXJnZXRcbmV4cG9ydCBjb25zdCBleHRlbmRQcm90byA9ICh0YXJnZXQsIHByb3RvKSA9PiB7XG4gICAgbGV0IF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICAgIF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pO1xuICAgICAgICAvLyByZXR1cm4gaWYgdGhlIHByb3RvdHlwZSBvZiBjcmVhdGVkIGNvbXBvbmVudCBhbmQgcHJvdG90eXBlIG9mIGNvbnRleHQgYXJlIHNhbWVcbiAgICAgICAgaWYgKHByb3RvID09PSBfcHJvdG8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3Byb3RvLCBwcm90byk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRXh0cmFTbGFzaGVzID0gZnVuY3Rpb24gKHVybCkge1xuICAgIGNvbnN0IGJhc2U2NHJlZ2V4ID0gL15kYXRhOmltYWdlXFwvKFthLXpdezIsfSk7YmFzZTY0LC87XG4gICAgaWYgKGlzU3RyaW5nKHVybCkpIHtcbiAgICAgICAgLypcbiAgICAgICAgKiBzdXBwb3J0IGZvciBtb2JpbGUgYXBwcyBoYXZpbmcgbG9jYWwgZmlsZSBwYXRoIHVybCBzdGFydGluZyB3aXRoIGZpbGU6Ly8vIGFuZFxuICAgICAgICAqIHN1cHBvcnQgZm9yIGJhc2U2NCBmb3JtYXRcbiAgICAgICAgKiAqL1xuICAgICAgICBpZiAoc3RhcnRzV2l0aCh1cmwsICdmaWxlOi8vLycpIHx8IGJhc2U2NHJlZ2V4LnRlc3QodXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFteOl1cXC8pKFxcLykrJywgJ2cnKSwgJyQxJyk7XG4gICAgfVxufTtcblxuJC5jYWNoZWRTY3JpcHQgPSAoKCkgPT4ge1xuICAgIGNvbnN0IGluUHJvZ3Jlc3MgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgU2V0KCk7XG5cbiAgICBjb25zdCBpc0luUHJvZ3Jlc3MgPSB1cmwgPT4gaW5Qcm9ncmVzcy5oYXModXJsKTtcbiAgICBjb25zdCBpc1Jlc29sdmVkID0gdXJsID0+IHJlc29sdmVkLmhhcyh1cmwpO1xuICAgIGNvbnN0IG9uTG9hZCA9IHVybCA9PiB7XG4gICAgICAgIHJlc29sdmVkLmFkZCh1cmwpO1xuICAgICAgICBpblByb2dyZXNzLmdldCh1cmwpLnJlc29sdmUoKTtcbiAgICAgICAgaW5Qcm9ncmVzcy5kZWxldGUodXJsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0SW5Qcm9ncmVzcyA9IHVybCA9PiB7XG4gICAgICAgIGxldCByZXNGbjtcbiAgICAgICAgbGV0IHJlakZuO1xuICAgICAgICBjb25zdCBwcm9taXNlOiBhbnkgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHJlc0ZuID0gcmVzO1xuICAgICAgICAgICAgcmVqRm4gPSByZWo7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb21pc2UucmVzb2x2ZSA9IHJlc0ZuO1xuICAgICAgICBwcm9taXNlLnJlamVjdCA9IHJlakZuO1xuXG4gICAgICAgIGluUHJvZ3Jlc3Muc2V0KHVybCwgcHJvbWlzZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIGlmIChpc1Jlc29sdmVkKHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0luUHJvZ3Jlc3ModXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGluUHJvZ3Jlc3MuZ2V0KHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRJblByb2dyZXNzKHVybCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgdXJsXG4gICAgICAgIH07XG5cbiAgICAgICAgJC5hamF4KG9wdGlvbnMpLmRvbmUoKCkgPT4gb25Mb2FkKHVybCkpO1xuXG4gICAgICAgIHJldHVybiBpblByb2dyZXNzLmdldCh1cmwpO1xuICAgIH07XG59KSgpO1xuXG5jb25zdCBERUZBVUxUX0RJU1BMQVlfRk9STUFUUyA9IHtcbiAgICBEQVRFOiAneXl5eS1NTS1kZCcsXG4gICAgVElNRTogJ2hoOm1tIGEnLFxuICAgIFRJTUVTVEFNUDogJ3l5eXktTU0tZGQgaGg6bW06c3MgYScsXG4gICAgREFURVRJTUU6ICd5eXl5LU1NLWRkIGhoOm1tOnNzIGEnLFxufTtcbi8vIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRpc3BsYXkgZGF0ZSBmb3JtYXQgZm9yIGdpdmVuIHR5cGVcbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQgPSB0eXBlID0+IHtcbiAgICByZXR1cm4gREVGQVVMVF9ESVNQTEFZX0ZPUk1BVFNbdG9VcHBlcih0eXBlKV07XG59O1xuXG4vLyBHZW5lcmF0ZSBmb3IgYXR0cmlidXRlIG9uIGxhYmVsIGFuZCBJRCBvbiBpbnB1dCBlbGVtZW50LCBzbyB0aGF0IGxhYmVsIGVsZW1lbnRzIGFyZSBhc3NvY2lhdGVkIHRvIGZvcm0gY29udHJvbHNcbmV4cG9ydCBjb25zdCBhZGRGb3JJZEF0dHJpYnV0ZXMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBsYWJlbEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbC5jb250cm9sLWxhYmVsJyk7XG4gICAgbGV0IGlucHV0RWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgaWYgKCFpbnB1dEVsLmxlbmd0aCkge1xuICAgICAgICBpbnB1dEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpO1xuICAgIH1cbiAgICAvKmlmIHRoZXJlIGFyZSBvbmx5IG9uZSBpbnB1dCBlbCBhbmQgbGFiZWwgRWwgYWRkIGlkIGFuZCBmb3IgYXR0cmlidXRlKi9cbiAgICBpZiAobGFiZWxFbC5sZW5ndGggJiYgaW5wdXRFbC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0SWQgPSAkKGlucHV0RWxbMF0gYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1t3aWRnZXQtaWRdJykuYXR0cignd2lkZ2V0LWlkJyk7XG4gICAgICAgIGlmICh3aWRnZXRJZCkge1xuICAgICAgICAgICAgc2V0QXR0cihpbnB1dEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnaWQnLCB3aWRnZXRJZCk7XG4gICAgICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdmb3InLCB3aWRnZXRJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLypBZGRpbmcgYXJpYS1sYWJlbGxlZGJ5IHRvIHJhZGlvc2V0LCBjaGVja2JveHNldCB3aWRnZXRzKi9cbiAgICBjb25zdCB1bEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd1bCcpO1xuICAgIGlmIChsYWJlbEVsLmxlbmd0aCAmJiB1bEVsLmxlbmd0aCAmJiAodWxFbFswXS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3JhZGlvZ3JvdXAnIHx8IHVsRWxbMF0uZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICdncm91cCcpKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldElkID0gJ3dtLWdyb3VwLWxhYmVsLScgKyBnZW5lcmF0ZUdVSWQoKTtcbiAgICAgICAgc2V0QXR0cih1bEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnYXJpYS1sYWJlbGxlZGJ5Jywgd2lkZ2V0SWQpO1xuICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdpZCcsIHdpZGdldElkKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBjb250YWluZXIgcG9zaXRpb25cbiAqIEZvciBleGFtcGxlOiAxLiBXaGVuIGRhdGVwaWNrZXIgY29udHJvbCBwbGFjZWQgY2xvc2VkIHRvIHRoZSBzY3JlZW4gbGVmdCBlZGdlcywgaXQgaXMgZ29pbmcgdG8gbmVnYXRpdmUgdmFsdWVzIHdoaWNoIGlzICBjdXR0aW5nIHRoZSBjb250YWluZXIuXG4gKiBUbyBGaXggdGhlIGNvbnRhaW5lciBvdmVybGFwcGluZyBpc3N1ZSBjaGFuZ2luZyB0aGUgY29udHJhaW5lciBsZWZ0IHRyYW5zbGF0aW9uIHRvIDBcbiAqIEBwYXJhbSBjb250YWluZXJFbGVtIC0gcGlja2VyL2Ryb3Bkb3duIGNvbnRhaW5lciBlbGVtZW50KGpxdWVyeSlcbiAqIEBwYXJhbSBwYXJlbnRFbGVtIC0gd2lkZ2V0IG5hdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gcmVmIC0gc2NvcGUgb2YgcGFydGljdWxhciBsaWJyYXJ5IGRpcmVjdGl2ZVxuICogQHBhcmFtIGVsZSAtIENoaWxkIGVsZW1lbnQoanF1ZXJ5KS4gRm9yIHNvbWUgb2YgdGhlIHdpZGdldHModGltZSwgc2VhcmNoKSBjb250YWluZXJFbGVtIGRvZXNuJ3QgaGF2ZSBoZWlnaHQuIFRoZSBpbm5lciBlbGVtZW50KGRyb3Bkb3duLW1lbnUpIGhhcyBoZWlnaHQgc28gcGFzc2luZyBpdCBhcyBvcHRpb25hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFkanVzdENvbnRhaW5lclBvc2l0aW9uID0gKGNvbnRhaW5lckVsZW0sIHBhcmVudEVsZW0sIHJlZiwgZWxlPykgPT4ge1xuICAgIGNvbnN0IHpvbmVSZWYgPSByZWYuX25nWm9uZSB8fCByZWYubmdab25lO1xuICAgIHpvbmVSZWYub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcbiAgICAgICAgaWYgKGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPCAwKSB7XG4gICAgICAgICAgICAgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA9IDA7XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgIH1cbiAgICAgICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbihjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgICB9KTtcbiAgIH07XG5cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgY29udGFpbmVyIHBvc2l0aW9uXG4gKiBGb3IgZXhhbXBsZTogMS4gV2hlbiBkYXRlcGlja2VyIGNvbnRyb2wgcGxhY2VkIGNsb3NlZCB0byB0aGUgc2NyZWVuIHJpZ2h0IGVkZ2VzLCBpdCBpcyBnb2luZyB0byBvdXQgb2YgdGhlIHZpZXdwb3J0IHZhbHVlcyB3aGljaCBpcyAgY3V0dGluZyB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIGNvbnRhaW5lckVsZW0gIHBpY2tlci9kcm9wZG93biBjb250YWluZXIgZWxlbWVudChqcXVlcnkpXG4gKiBAcGFyYW0gcGFyZW50RWxlbSB3aWRnZXQgbmF0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSByZWYgIHNjb3BlIG9mIHBhcnRpY3VsYXIgbGlicmFyeSBkaXJlY3RpdmVcbiAqIEBwYXJhbSBlbGUgQ2hpbGQgZWxlbWVudChqcXVlcnkpLiBGb3Igc29tZSBvZiB0aGUgd2lkZ2V0cyh0aW1lLCBzZWFyY2gpIGNvbnRhaW5lckVsZW0gZG9lc24ndCBoYXZlIGhlaWdodC4gVGhlIGlubmVyIGVsZW1lbnQoZHJvcGRvd24tbWVudSkgaGFzIGhlaWdodCBzbyBwYXNzaW5nIGl0IGFzIG9wdGlvbmFsLlxuICovXG4gICBleHBvcnQgY29uc3QgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyA9IChjb250YWluZXJFbGVtLCBwYXJlbnRFbGVtLCByZWYsIGVsZT8pID0+IHtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsZSA/IHBhcnNlSW50KGVsZS5jc3MoJ3dpZHRoJykpIDogcGFyc2VJbnQoY29udGFpbmVyRWxlbS5jc3MoJ3dpZHRoJykpO1xuICAgICAgICBjb25zdCB2aWV3UG9ydFdpZHRoID0gJCh3aW5kb3cpLndpZHRoKCkgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgICAgY29uc3QgcGFyZW50RGltZXNpb24gPSBwYXJlbnRFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBwYXJlbnRSaWdodCA9IHBhcmVudERpbWVzaW9uLnJpZ2h0ICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAgIGxldCBuZXdMZWZ0O1xuICAgICAgICBjb25zdCB6b25lUmVmID0gcmVmLl9uZ1pvbmUgfHwgcmVmLm5nWm9uZTtcbiAgICAgICAgem9uZVJlZi5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcblxuICAgICAgICAgICAgaWYgKHZpZXdQb3J0V2lkdGggLSAocGFyZW50UmlnaHQgKyBwYXJlbnREaW1lc2lvbi53aWR0aCkgPCBjb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgICAgIG5ld0xlZnQgPSBwYXJlbnRSaWdodCAtIGNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChuZXdMZWZ0IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA9IG5ld0xlZnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbihjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgICAgICB9KTtcbiAgIH07XG5cbiAgLyoqXG4gICAqIEZvciBnaXZlbiBlbGVtZW50IHNldCB0aGUgdHJhc2xhdGlvblxuICAgKiBAcGFyYW0gY29udGFpbmVyRWxlbSB0YW5zbGF0ZWQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zIHRyYW5zbGF0ZSBtYXRyaXggcG9zaXRpb25zXG4gICAqL1xuICAgZXhwb3J0IGNvbnN0IHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbiA9IChjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlUG9zaXRpb24gPSAndHJhbnNsYXRlM2QoJyArIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgKyAncHgsICcgKyBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQyICsgJ3B4LCAwcHgpJztcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5Nb3pUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5tc1RyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLk9UcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgIH07XG5cbiAgIC8qKlxuICAgICpcbiAgICAqIEBwYXJhbSBjb250YWluZXJFbGVtIGVsZW1ldCBmb3IgdGhlIFdlYktpdENTU01hdHJpeFxuICAgICovXG4gICAgZXhwb3J0IGNvbnN0IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXggPSAoY29udGFpbmVyRWxlbSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIFdlYktpdENTU01hdHJpeCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTVNDU1NNYXRyaXgod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyRWxlbVswXSkudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFdlYktpdENTU01hdHJpeCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXJFbGVtWzBdKS53ZWJraXRUcmFuc2Zvcm0pO1xuICAgIH1cblxuLy8gY2xvc2UgYWxsIHRoZSBwb3BvdmVycy5cbmV4cG9ydCBjb25zdCBjbG9zZVBvcG92ZXIgPSAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudC5jbG9zZXN0KCcuYXBwLXBvcG92ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFwcC1wb3BvdmVyLXdyYXBwZXInKTtcbiAgICAgICAgZm9yRWFjaChwb3BvdmVyRWxlbWVudHMsIChlbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGUud2lkZ2V0LmlzT3Blbikge1xuICAgICAgICAgICAgICAgIGVsZS53aWRnZXQuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGluIHRoZSBhcHBcbiAqIFRoaXMgaXMgZXhwb3NlZCBmb3IgdGhlIGVuZCB1c2VyIGRldmVsb3BlciBvZiBXTSBhcHBcbiAqIFRoaXMgaXMgdGhlIGFsdGVybmF0aXZlIGZvciAkcnMuJHNhZmVBcHBseSgpIGluIEFuZ3VsYXJKU1xuICogU2VlICRhcHBEaWdlc3QgaW4gdXRpbHMgZm9yIG1vcmUgaW5mb1xuICovXG5leHBvcnQgY29uc3QgZGV0ZWN0Q2hhbmdlcyA9ICRhcHBEaWdlc3Q7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciB0aGUgYWN0aW9uL2xpbmsgb2YgbWVudS9uYXYgaXRlbVxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogQHBhcmFtIGl0ZW0gLSBpdGVtIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgdHJpZ2dlckl0ZW1BY3Rpb24gPSAoc2NvcGUsIGl0ZW0pID0+IHtcbiAgICBsZXQgaXRlbUxpbmsgPSBpdGVtLmxpbms7XG4gICAgY29uc3QgaXRlbUFjdGlvbiA9IGl0ZW0uYWN0aW9uO1xuICAgIGNvbnN0IGxpbmtUYXJnZXQgPSBpdGVtLnRhcmdldDtcbiAgICBpZiAoaXRlbUFjdGlvbikge1xuICAgICAgICBpZiAoIXNjb3BlLml0ZW1BY3Rpb25Gbikge1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBUaGlzIHdpbGwgbm90IHdvcmsgYXMgZnVuY3Rpb24gd2lsbCBiZSBkeW5hbWljXG4gICAgICAgICAgICBzY29wZS5pdGVtQWN0aW9uRm4gPSAkcGFyc2VFdmVudChpdGVtQWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLml0ZW1BY3Rpb25GbihzY29wZS51c2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHQsIE9iamVjdC5jcmVhdGUoaXRlbSkpO1xuICAgIH1cbiAgICBpZiAoaXRlbUxpbmspIHtcbiAgICAgICAgaWYgKGl0ZW1MaW5rLnN0YXJ0c1dpdGgoJyMvJykgJiYgKCFsaW5rVGFyZ2V0IHx8IGxpbmtUYXJnZXQgPT09ICdfc2VsZicpKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGdldFVybFBhcmFtcyhpdGVtTGluayk7XG4gICAgICAgICAgICBpdGVtTGluayA9IGdldFJvdXRlTmFtZUZyb21MaW5rKGl0ZW1MaW5rKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9IGdldChzY29wZSwgJ3JvdXRlJykgfHwgZ2V0KHNjb3BlLCAnbWVudVJlZi5yb3V0ZScpO1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFtpdGVtTGlua10sIHsgcXVlcnlQYXJhbXMgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcGVuTGluayhpdGVtTGluaywgbGlua1RhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIGdldCBkYXRzb3VyY2UgZnJvbSB0aGUgZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHIgLSBleHByZXNzaW9uIG9mIHRoZSBkYXRhc2V0XG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBFeGFtcGxlMTogZXhwciAtIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldC5kZXRhaWxzWyRpXS5hZGRyZXNzZXNcIiB0aGVuIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gZGF0YXNvdXJjZSBhcyBWYXJpYWJsZXMuc3RhdGljVmFyMVxuICogRXhhbXBsZTI6IGV4cHIgLSBcIldpZGdldHMubGlzdDEuY3VycmVudEl0ZW0uYWRkcmVzc2VzXCIgYW5kIGxpc3QxIGlzIGJvdW5kIHRvIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldC5kZXRhaWxzXCIgdGhlbiB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGRhdGFzb3VyY2UgYXMgVmFyaWFibGVzLnN0YXRpY1ZhcjFcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFzb3VyY2VGcm9tRXhwciA9IChleHByLCBzY29wZSkgPT4ge1xuICAgIGNvbnN0IGlzQm91bmRUb1ZhcmlhYmxlID0gc3RhcnRzV2l0aChleHByLCAnVmFyaWFibGVzLicpO1xuICAgIGNvbnN0IGlzQm91bmRUb1dpZGdldCA9IHN0YXJ0c1dpdGgoZXhwciwgJ1dpZGdldHMuJyk7XG4gICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgaWYgKGlzQm91bmRUb1ZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiBnZXQoc2NvcGUudmlld1BhcmVudC5WYXJpYWJsZXMsIHBhcnRzWzFdKTtcbiAgICB9XG4gICAgaWYgKGlzQm91bmRUb1dpZGdldCkge1xuICAgICAgICBjb25zdCB3aWRnZXRTY29wZSA9IGdldChzY29wZS52aWV3UGFyZW50LldpZGdldHMsIHBhcnRzWzFdKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA9IHdpZGdldFNjb3BlLiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKTtcbiAgICAgICAgbGV0IHdpZGdldEJvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgd2lkZ2V0Qm91bmRFeHByZXNzaW9uID0gKCF3aWRnZXRTY29wZS5kYXRhc291cmNlICYmIHdpZGdldERhdGFzZXRCb3VuZEV4cHIpID8gd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA6IHdpZGdldFNjb3BlLmJpbmRkYXRhc2V0O1xuICAgICAgICByZXR1cm4gZ2V0RGF0YXNvdXJjZUZyb21FeHByKHdpZGdldEJvdW5kRXhwcmVzc2lvbiwgd2lkZ2V0U2NvcGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gZ2V0IGRhdGFzZXQgYm91bmQgZXhwcmVzc2lvbiBmcm9tIGxpc3QgY3VycmVudGl0ZW0gZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHIgLSBib3VuZCBkYXRhc2V0IGV4cHJlc3Npb25cbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEV4YW1wbGUxOiBleHByIC0gXCJXaWRnZXRzLmxpc3QxLmN1cnJlbnRJdGVtLmRldGFpbHNcIiBhbmQgbGlzdDEgaXMgYm91bmQgdG8gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0XCIgdGhlbiBpdCByZXR1cm5zIGV4cHJlc3Npb24gYXMgXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0WyRpXS5kZXRhaWxzXCJcbiAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RDdXJyZW50SXRlbUV4cHIgPSAoZXhwciwgc2NvcGUpID0+IHtcbiAgICBjb25zdCBjdXJyZW50SXRlbVJlZ0V4ID0gL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nO1xuICAgIGlmIChjdXJyZW50SXRlbVJlZ0V4LnRlc3QoZXhwcikpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHdpZGdldFNjb3BlID0gZ2V0KHNjb3BlLnZpZXdQYXJlbnQuV2lkZ2V0cywgcGFydHNbMV0pO1xuICAgICAgICBjb25zdCB3aWRnZXREYXRhc2V0Qm91bmRFeHByID0gd2lkZ2V0U2NvcGUuJGF0dHJzLmdldCgnZGF0YXNldGJvdW5kZXhwcicpO1xuICAgICAgICBpZiAoIXdpZGdldFNjb3BlLmRhdGFzb3VyY2UgJiYgd2lkZ2V0RGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldERhdGFzZXRCb3VuZEV4cHJ9WyRpXWApO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RDdXJyZW50SXRlbUV4cHIoZXhwciwgc2NvcGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldFNjb3BlLmJpbmRkYXRhc2V0fVskaV1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbn07XG5cbi8vIHRoaXMgd2lsbCBhZGQgdGhlIGh0bWwgdGFnIHRvIHRoZSB3aWRnZXQgdG8gc2NvcGUgdGhlIGNzcyB0byB0aGUgcGFnZS5cbmV4cG9ydCBjb25zdCBmaW5kUm9vdENvbnRhaW5lciA9ICgkZWwpID0+IHtcbiAgICBsZXQgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXByZWZhYicpO1xuICAgIGlmICghcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXBhcnRpYWwnKTtcbiAgICB9XG4gICAgaWYoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1zcGEtcGFnZScpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiByb290Lmxlbmd0aCAmJiByb290LnBhcmVudCgpWzBdLnRhZ05hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgVkFMSURBVE9SID0ge1xuICAgIFJFUVVJUkVEOiAncmVxdWlyZWQnLFxuICAgIE1BWENIQVJTOiAnbWF4Y2hhcnMnLFxuICAgIE1JTlZBTFVFOiAnbWludmFsdWUnLFxuICAgIE1BWFZBTFVFOiAnbWF4dmFsdWUnLFxuICAgIFJFR0VYUDogJ3JlZ2V4cCcsXG4gICAgTUlOREFURTogJ21pbmRhdGUnLFxuICAgIE1BWERBVEU6ICdtYXhkYXRlJyxcbiAgICBNSU5USU1FOiAnbWludGltZScsXG4gICAgTUFYVElNRTogJ21heHRpbWUnLFxuICAgIEVYQ0xVREVEQVRFUzogJ2V4Y2x1ZGVkYXRlcycsXG4gICAgRVhDTFVERURBWVM6ICdleGNsdWRlZGF5cydcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1GaWxlVVJJID0gKHVybCkgPT4ge1xuICAgIGlmIChpc1N0cmluZyh1cmwpICYmIGhhc0NvcmRvdmEoKSAmJiB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoJ2ZpbGU6Ly8nLCAnL19hcHBfZmlsZV8nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FuZHJvaWQoKSAmJiBsb2NhdGlvbi5ocmVmLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoY29yZG92YS5maWxlLmFwcGxpY2F0aW9uRGlyZWN0b3J5ICsgJ3d3dycsICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgnZmlsZTovLycsICcvX2FwcF9maWxlXycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kU2NyaXB0VG9IZWFkID0gKGNhbGxiYWNrKSA9PntcblxuICAgIGNvbnN0IHNjcmlwdGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdGVsZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgIGNhbGxiYWNrKFdNX0NVU1RPTV9GT1JNQVRURVJTKTtcbiAgICB9O1xuICAgIHNjcmlwdGVsZS5vbmVycm9yID0gZXJyID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSBmaWxlICcgKyBzY3JpcHRlbGUuc3JjICsgJ1xcbicgKyBlcnIpO1xuICAgIH07XG4gICAgc2NyaXB0ZWxlLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICBzY3JpcHRlbGUuc3JjID0gJy4vZXh0ZW5zaW9ucy9mb3JtYXR0ZXJzLmpzJztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdGVsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwU2V0dGluZyA9IChrZXksIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICAgIHJldHVybiAoX1dNX0FQUF9QUk9QRVJUSUVTLmV4dHJhX3NldHRpbmdzICYmIGdldChfV01fQVBQX1BST1BFUlRJRVMuZXh0cmFfc2V0dGluZ3MsIGtleSkpIHx8IGRlZmF1bHRWYWx1ZTtcbn07XG5cbi8qIHRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgaXRlbWNsYXNzIGRlcGVuZGluZyBvbiBpdGVtc3BlcnJvdy5cbiAgICogaWYgaXRlbXNwZXJyb3cgaXMgMiBmb3IgbGFyZ2UgZGV2aWNlLCB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLXhzLTEgY29sLXNtLTEgY29sLWxnLTInXG4gICAqIGlmIGl0ZW1zcGVycm93IGlzICdsZy0zJyB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLWxnLTMnXG4qL1xuZXhwb3J0IGNvbnN0IHNldExpc3RDbGFzcyA9IChzY29wZSkgPT4ge1xuICAgIGxldCB0ZW1wID0gJyc7XG4gICAgaWYgKHNjb3BlLml0ZW1zcGVycm93KSB7XG4gICAgICAgIGlmIChpc05hTihwYXJzZUludChzY29wZS5pdGVtc3BlcnJvdywgMTApKSkge1xuICAgICAgICAgICAgLy8gaGFuZGxpbmcgaXRlbXNwZXJyb3cgY29udGFpbmluZyBzdHJpbmcgb2YgY2xhc3Nlc1xuICAgICAgICAgICAgc3BsaXQoc2NvcGUuaXRlbXNwZXJyb3csICcgJykuZm9yRWFjaCgoY2xzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gc3BsaXQoY2xzLCAnLScpO1xuICAgICAgICAgICAgICAgIGNscyA9IGAke2tleXNbMF19LSR7KDEyIC8gcGFyc2VJbnQoa2V5c1sxXSwgMTApKX1gO1xuICAgICAgICAgICAgICAgIHRlbXAgKz0gYCBjb2wtJHtjbHN9YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9IHRlbXAudHJpbSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxpbmcgaXRlbXNwZXJyb3cgaGF2aW5nIGludGVnZXIgdmFsdWUuXG4gICAgICAgICAgICBzY29wZS5pdGVtc1BlclJvd0NsYXNzID0gYGNvbC14cy0keygxMiAvIHBhcnNlSW50KHNjb3BlLml0ZW1zcGVycm93LCAxMCkpfWA7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyBJZiBpdGVtc3BlcnJvdyBpcyBub3Qgc3BlY2lmaWVkIG1ha2UgaXQgZnVsbCB3aWR0aFxuICAgICAgICBzY29wZS5pdGVtc1BlclJvd0NsYXNzID0gJ2NvbC14cy0xMic7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRQYXJlbnQgPSAobFZpZXc6IGFueSwgdmlld1BhcmVudEFwcD86IGFueSkgPT4ge1xuICAgIGxldCBwYXJlbnQgPSBmaW5kVmlld1BhcmVudChsVmlldyk7XG4gICAgcmV0dXJuIHBhcmVudCA/IHBhcmVudCA6IHZpZXdQYXJlbnRBcHA7XG59XG5cbmV4cG9ydCBjb25zdCBmaW5kVmlld1BhcmVudCA9IChsVmlldzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGxWaWV3WzE1XSA/IGxWaWV3WzE1XVs4XSA6IGxWaWV3WzE1XTtcbiAgICAvKmlmKGxWaWV3WzNdID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsVmlld1s4XTtcbiAgICB9XG4gICAgbGV0IHBhcmVudGxWaWV3ID0gbFZpZXdbM107XG4gICAgaWYodHlwZW9mIGxWaWV3WzFdID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgIH1cbiAgICBsZXQgY29tcG9uZW50VHlwZSA9IGxWaWV3WzFdW1widHlwZVwiXTtcbiAgICBpZihjb21wb25lbnRUeXBlID09PSAwIHx8IGNvbXBvbmVudFR5cGUgPT09IDEpIHtcbiAgICAgICAgbGV0IHAgPSBsVmlld1s4XTtcbiAgICAgICAgLy8gdHMtaWdub3JlXG4gICAgICAgIGlmKHAuaGFzT3duUHJvcGVydHkoXCJpc0RpYWxvZ0NvbXBvbmVudFwiKSB8fCBwLmhhc093blByb3BlcnR5KFwiaXNDb250YWluZXJEaXJlY3RpdmVcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5kVmlld1BhcmVudChwYXJlbnRsVmlldyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaW5kVmlld1BhcmVudChwYXJlbnRsVmlldyk7XG4gICAgfSovXG59XG5cbmV4cG9ydCBjb25zdCBnZXRGb250Q29uZmlnID0gKCkgPT4ge1xuICAgIHJldHVybiBfV01fQVBQX1BST1BFUlRJRVMuZm9udENvbmZpZyA/IF9XTV9BUFBfUFJPUEVSVElFUy5mb250Q29uZmlnIDoge31cbn1cblxuLypleHBvcnQgY29uc3QgZ2V0UGFyZW50ID0gKHBhcmVudDogYW55KSA9PiB7XG4gICAgaWYocGFyZW50Lmhhc093blByb3BlcnR5KFwiaXNEeW5hbWljQ29tcG9uZW50XCIpIHx8IHBhcmVudC5oYXNPd25Qcm9wZXJ0eShcImlzUGFnZUNvbXBvbmVudFwiKSkge1xuICAgICAgICByZXR1cm4gcGFyZW50XG4gICAgfSBlbHNle1xuICAgICAgICByZXR1cm4gcGFyZW50LnZpZXdQYXJlbnQgPyBnZXRQYXJlbnQocGFyZW50LnZpZXdQYXJlbnQpIDogcGFyZW50O1xuICAgIH1cblxufSovXG4iXX0=
|