@ngrdt/menu 0.0.35 → 0.0.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngrdt-menu.mjs +4 -6
- package/fesm2022/ngrdt-menu.mjs.map +1 -1
- package/index.d.ts +1 -2
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngrdt-menu.mjs","sources":["../tmp-esm2022/lib/models.js","../tmp-esm2022/lib/private-models.js","../tmp-esm2022/lib/utils.js","../tmp-esm2022/lib/menu-overlay/rdt-menu-overlay.component.js","../tmp-esm2022/lib/menu-base/rdt-menu-base.component.js","../tmp-esm2022/lib/menu-bar/rdt-menu-bar.component.js","../tmp-esm2022/lib/menu/rdt-menu.component.js","../tmp-esm2022/lib/rdt-menu.module.js","../tmp-esm2022/ngrdt-menu.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport var RdtMenuShortcutMode;\n(function (RdtMenuShortcutMode) {\n RdtMenuShortcutMode[\"FOCUS_ITEM\"] = \"focus-item\";\n RdtMenuShortcutMode[\"OPEN_SUBMENU\"] = \"open-submenu\";\n})(RdtMenuShortcutMode || (RdtMenuShortcutMode = {}));\nexport const RDT_MENU_MARGIN_TOP_PROPERTY_NAME = '--rdt-menu-margin-top';\nexport const RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME = '--rdt-menu-margin-bottom';\nexport const RDT_MENU_MARGIN_LEFT_PROPERTY_NAME = '--rdt-menu-margin-left';\nexport const RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME = '--rdt-menu-margin-right';\nexport const DEFAULT_MENU_HORIZONTAL_DIR = 'left';\nexport const DEFAULT_MENU_VERTICAL_DIR = 'down';\nexport const RDT_MENU_HORIZONTAL_DIR_PROVIDER = new InjectionToken('RDT_MENU_HORIZONTAL_DIR');\nexport const RDT_MENU_VERTICAL_DIR_PROVIDER = new InjectionToken('RDT_MENU_VERTICAL_DIR');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTRCL0MsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3QixnREFBeUIsQ0FBQTtJQUN6QixvREFBNkIsQ0FBQTtBQUMvQixDQUFDLEVBSFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUc5QjtBQUVELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLDBCQUEwQixDQUFDO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLHdCQUF3QixDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHLHlCQUF5QixDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQzNDLElBQUksY0FBYyxDQUF5Qix5QkFBeUIsQ0FBQyxDQUFDO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUN6QyxJQUFJLGNBQWMsQ0FBdUIsdUJBQXVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJkdFJvdXRlIH0gZnJvbSAnQG5ncmR0L3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdE1lbnVJdGVtQmFzZSB9IGZyb20gJy4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgUmR0VmVydGljYWxEaXJlY3Rpb24sXHJcbiAgV2luZG93T3BlblRhcmdldFR5cGUsXHJcbn0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmR0TWVudUl0ZW1XaXRoUm91dGUgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2Uge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgcm91dGVyTGluaz86IFJkdFJvdXRlO1xyXG4gIGV4dGVybmFsTGluaz86IG5ldmVyO1xyXG4gIHRhcmdldD86IG5ldmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtV2l0aExpbmsgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2Uge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rOiBzdHJpbmc7XHJcbiAgcm91dGVyTGluaz86IG5ldmVyO1xyXG4gIHRhcmdldD86IFdpbmRvd09wZW5UYXJnZXRUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuIGV4dGVuZHMgUmR0TWVudUl0ZW1CYXNlIHtcclxuICBpdGVtczogUmR0TWVudUl0ZW1bXTtcclxuICByb3V0ZXJMaW5rPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgdGFyZ2V0PzogV2luZG93T3BlblRhcmdldFR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJkdE1lbnVJdGVtID1cclxuICB8IFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuXHJcbiAgfCBSZHRNZW51SXRlbVdpdGhSb3V0ZVxyXG4gIHwgUmR0TWVudUl0ZW1XaXRoTGluaztcclxuXHJcbmV4cG9ydCBlbnVtIFJkdE1lbnVTaG9ydGN1dE1vZGUge1xyXG4gIEZPQ1VTX0lURU0gPSAnZm9jdXMtaXRlbScsXHJcbiAgT1BFTl9TVUJNRU5VID0gJ29wZW4tc3VibWVudScsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBSRFRfTUVOVV9NQVJHSU5fVE9QX1BST1BFUlRZX05BTUUgPSAnLS1yZHQtbWVudS1tYXJnaW4tdG9wJztcclxuZXhwb3J0IGNvbnN0IFJEVF9NRU5VX01BUkdJTl9CT1RUT01fUFJPUEVSVFlfTkFNRSA9ICctLXJkdC1tZW51LW1hcmdpbi1ib3R0b20nO1xyXG5leHBvcnQgY29uc3QgUkRUX01FTlVfTUFSR0lOX0xFRlRfUFJPUEVSVFlfTkFNRSA9ICctLXJkdC1tZW51LW1hcmdpbi1sZWZ0JztcclxuZXhwb3J0IGNvbnN0IFJEVF9NRU5VX01BUkdJTl9SSUdIVF9QUk9QRVJUWV9OQU1FID0gJy0tcmR0LW1lbnUtbWFyZ2luLXJpZ2h0JztcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVIgPSAnbGVmdCc7XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSID0gJ2Rvd24nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFJEVF9NRU5VX0hPUklaT05UQUxfRElSX1BST1ZJREVSID1cclxuICBuZXcgSW5qZWN0aW9uVG9rZW48UmR0SG9yaXpvbnRhbERpcmVjdGlvbj4oJ1JEVF9NRU5VX0hPUklaT05UQUxfRElSJyk7XHJcbmV4cG9ydCBjb25zdCBSRFRfTUVOVV9WRVJUSUNBTF9ESVJfUFJPVklERVIgPVxyXG4gIG5ldyBJbmplY3Rpb25Ub2tlbjxSZHRWZXJ0aWNhbERpcmVjdGlvbj4oJ1JEVF9NRU5VX1ZFUlRJQ0FMX0RJUicpO1xyXG4iXX0=","import { RdtStringUtils } from '@ngrdt/utils';\nexport function parseMenuItems(items, injector, prefix = '') {\n return items\n .map((item) => {\n let newPrefix;\n if (item.dataTestId) {\n newPrefix = item.dataTestId;\n }\n else if (prefix) {\n newPrefix = RdtStringUtils.getDataTestId(item.label, prefix);\n }\n else {\n newPrefix = RdtStringUtils.getDataTestId(item.label);\n }\n const newDataTestId = RdtStringUtils.getDataTestId(newPrefix, null, 'menu-item');\n const res = {\n label: item.label,\n icon: item.icon,\n shortcut: item.shortcut,\n command: item.command,\n visible: item.visible,\n queryParams: item.queryParams,\n requiredParent: item.requiredParent,\n dataTestId: newDataTestId,\n };\n if (item.items) {\n const childrenRes = res;\n const parsedChildren = parseMenuItems(item.items, injector, newPrefix);\n if (parsedChildren.length > 0) {\n childrenRes.items = parsedChildren;\n }\n return childrenRes;\n }\n else if (item.routerLink) {\n const linkRes = res;\n linkRes.target = item.target ?? '_self';\n if (item.routerLink) {\n linkRes.routerLink = [item.routerLink.createAbsoluteUrl()];\n if (!res.visible && item.routerLink.hasCanBeEnteredGuard) {\n const canBeEntered = item.routerLink.canBeEntered.bind(item.routerLink);\n linkRes.visible = () => canBeEntered(injector);\n }\n }\n return linkRes;\n }\n else {\n const linkRes = res;\n if (item.externalLink) {\n if (item.queryParams) {\n linkRes.externalLink = RdtStringUtils.appendQueryParams(item.externalLink, item.queryParams);\n }\n else {\n linkRes.externalLink = item.externalLink;\n }\n }\n linkRes.target = item.target ?? '_blank';\n return linkRes;\n }\n })\n .filter((item) => !item.visible || item.visible())\n .filter((item) => item.externalLink ||\n item['routerLink'] ||\n item.command ||\n (item['items']?.length ?? 0) > 0);\n}\nexport var RdtMenuExpandSource;\n(function (RdtMenuExpandSource) {\n RdtMenuExpandSource[RdtMenuExpandSource[\"Click\"] = 0] = \"Click\";\n RdtMenuExpandSource[RdtMenuExpandSource[\"Hover\"] = 1] = \"Hover\";\n RdtMenuExpandSource[RdtMenuExpandSource[\"Shortcut\"] = 2] = \"Shortcut\";\n RdtMenuExpandSource[RdtMenuExpandSource[\"Focus\"] = 3] = \"Focus\";\n})(RdtMenuExpandSource || (RdtMenuExpandSource = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS1tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL3ByaXZhdGUtbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxjQUFjLEVBQXdCLE1BQU0sY0FBYyxDQUFDO0FBbURwRSxNQUFNLFVBQVUsY0FBYyxDQUM1QixLQUFvQixFQUNwQixRQUFrQixFQUNsQixNQUFNLEdBQUcsRUFBRTtJQUVYLE9BQU8sS0FBSztTQUNULEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1osSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzlCLENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLFNBQVMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0QsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQ2hELFNBQVMsRUFDVCxJQUFJLEVBQ0osV0FBVyxDQUNaLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBMEI7WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxXQUFXLEdBQUcsR0FBb0MsQ0FBQztZQUN6RCxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkUsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLEdBQWlDLENBQUM7WUFDbEQsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQztZQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQ3pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEQsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztvQkFDRixPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sT0FBTyxHQUFHLEdBQWdDLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNyQixPQUFPLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDckQsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUM7WUFDekMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNqRCxNQUFNLENBQ0wsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLElBQUksQ0FBQyxZQUFZO1FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU87UUFDWixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNuQyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sQ0FBTixJQUFZLG1CQUtYO0FBTEQsV0FBWSxtQkFBbUI7SUFDN0IsK0RBQUssQ0FBQTtJQUNMLCtEQUFLLENBQUE7SUFDTCxxRUFBUSxDQUFBO0lBQ1IsK0RBQUssQ0FBQTtBQUNQLENBQUMsRUFMVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICdAbmdyZHQvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U2hvcnRjdXQgfSBmcm9tICdAbmdyZHQvc2hvcnRjdXRzJztcclxuaW1wb3J0IHsgUmR0U3RyaW5nVXRpbHMsIFdpbmRvd09wZW5UYXJnZXRUeXBlIH0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuL21vZGVscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtQmFzZTxUSWNvbiA9IHN0cmluZz4ge1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaWNvbj86IFRJY29uO1xyXG4gIHNob3J0Y3V0PzogUmR0U2hvcnRjdXQ7XHJcbiAgY29tbWFuZD86ICgpID0+IHZvaWQ7XHJcbiAgdmlzaWJsZT86ICgpID0+IGJvb2xlYW47XHJcbiAgcXVlcnlQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG4gIHJlcXVpcmVkUGFyZW50PzogUmR0Um91dGU7XHJcbiAgZGF0YVRlc3RJZD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRSZHRNZW51SXRlbUJhc2U8VEljb24gPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2U8VEljb24+IHtcclxuICBkYXRhVGVzdElkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW48VEljb24gPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBQYXJzZWRSZHRNZW51SXRlbUJhc2U8VEljb24+IHtcclxuICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXTtcclxuICByb3V0ZXJMaW5rPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgaWNvbj86IG5ldmVyO1xyXG4gIHRhcmdldD86IG5ldmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFJkdE1lbnVJdGVtV2l0aFJvdXRlPFRJY29uID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgUGFyc2VkUmR0TWVudUl0ZW1CYXNlPFRJY29uPiB7XHJcbiAgaXRlbXM/OiBuZXZlcjtcclxuICByb3V0ZXJMaW5rPzogc3RyaW5nW107XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgaWNvbj86IFRJY29uO1xyXG4gIHRhcmdldDogV2luZG93T3BlblRhcmdldFR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmR0TWVudUl0ZW1XaXRoTGluazxUSWNvbiA9IHN0cmluZz5cclxuICBleHRlbmRzIFBhcnNlZFJkdE1lbnVJdGVtQmFzZTxUSWNvbj4ge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgcm91dGVyTGluaz86IG5ldmVyO1xyXG4gIGV4dGVybmFsTGluaz86IHN0cmluZztcclxuICBpY29uPzogVEljb247XHJcbiAgdGFyZ2V0OiBXaW5kb3dPcGVuVGFyZ2V0VHlwZTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUGFyc2VkUmR0TWVudUl0ZW0gPVxyXG4gIHwgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGVcclxuICB8IFBhcnNlZFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuXHJcbiAgfCBQYXJzZWRSZHRNZW51SXRlbVdpdGhMaW5rO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWVudUl0ZW1zKFxyXG4gIGl0ZW1zOiBSZHRNZW51SXRlbVtdLFxyXG4gIGluamVjdG9yOiBJbmplY3RvcixcclxuICBwcmVmaXggPSAnJ1xyXG4pOiBQYXJzZWRSZHRNZW51SXRlbVtdIHtcclxuICByZXR1cm4gaXRlbXNcclxuICAgIC5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgbGV0IG5ld1ByZWZpeDogc3RyaW5nO1xyXG4gICAgICBpZiAoaXRlbS5kYXRhVGVzdElkKSB7XHJcbiAgICAgICAgbmV3UHJlZml4ID0gaXRlbS5kYXRhVGVzdElkO1xyXG4gICAgICB9IGVsc2UgaWYgKHByZWZpeCkge1xyXG4gICAgICAgIG5ld1ByZWZpeCA9IFJkdFN0cmluZ1V0aWxzLmdldERhdGFUZXN0SWQoaXRlbS5sYWJlbCwgcHJlZml4KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdQcmVmaXggPSBSZHRTdHJpbmdVdGlscy5nZXREYXRhVGVzdElkKGl0ZW0ubGFiZWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0RhdGFUZXN0SWQgPSBSZHRTdHJpbmdVdGlscy5nZXREYXRhVGVzdElkKFxyXG4gICAgICAgIG5ld1ByZWZpeCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgICdtZW51LWl0ZW0nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHJlczogUGFyc2VkUmR0TWVudUl0ZW1CYXNlID0ge1xyXG4gICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgIGljb246IGl0ZW0uaWNvbixcclxuICAgICAgICBzaG9ydGN1dDogaXRlbS5zaG9ydGN1dCxcclxuICAgICAgICBjb21tYW5kOiBpdGVtLmNvbW1hbmQsXHJcbiAgICAgICAgdmlzaWJsZTogaXRlbS52aXNpYmxlLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgIHJlcXVpcmVkUGFyZW50OiBpdGVtLnJlcXVpcmVkUGFyZW50LFxyXG4gICAgICAgIGRhdGFUZXN0SWQ6IG5ld0RhdGFUZXN0SWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5SZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW47XHJcbiAgICAgICAgY29uc3QgcGFyc2VkQ2hpbGRyZW4gPSBwYXJzZU1lbnVJdGVtcyhpdGVtLml0ZW1zLCBpbmplY3RvciwgbmV3UHJlZml4KTtcclxuICAgICAgICBpZiAocGFyc2VkQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY2hpbGRyZW5SZXMuaXRlbXMgPSBwYXJzZWRDaGlsZHJlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuUmVzO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICAgIGNvbnN0IGxpbmtSZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGU7XHJcbiAgICAgICAgbGlua1Jlcy50YXJnZXQgPSBpdGVtLnRhcmdldCA/PyAnX3NlbGYnO1xyXG4gICAgICAgIGlmIChpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgICAgIGxpbmtSZXMucm91dGVyTGluayA9IFtpdGVtLnJvdXRlckxpbmsuY3JlYXRlQWJzb2x1dGVVcmwoKV07XHJcbiAgICAgICAgICBpZiAoIXJlcy52aXNpYmxlICYmIGl0ZW0ucm91dGVyTGluay5oYXNDYW5CZUVudGVyZWRHdWFyZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYW5CZUVudGVyZWQgPSBpdGVtLnJvdXRlckxpbmsuY2FuQmVFbnRlcmVkLmJpbmQoXHJcbiAgICAgICAgICAgICAgaXRlbS5yb3V0ZXJMaW5rXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxpbmtSZXMudmlzaWJsZSA9ICgpID0+IGNhbkJlRW50ZXJlZChpbmplY3Rvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaW5rUmVzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxpbmtSZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoTGluaztcclxuICAgICAgICBpZiAoaXRlbS5leHRlcm5hbExpbmspIHtcclxuICAgICAgICAgIGlmIChpdGVtLnF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGxpbmtSZXMuZXh0ZXJuYWxMaW5rID0gUmR0U3RyaW5nVXRpbHMuYXBwZW5kUXVlcnlQYXJhbXMoXHJcbiAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmssXHJcbiAgICAgICAgICAgICAgaXRlbS5xdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGlua1Jlcy5leHRlcm5hbExpbmsgPSBpdGVtLmV4dGVybmFsTGluaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGlua1Jlcy50YXJnZXQgPSBpdGVtLnRhcmdldCA/PyAnX2JsYW5rJztcclxuICAgICAgICByZXR1cm4gbGlua1JlcztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLnZpc2libGUgfHwgaXRlbS52aXNpYmxlKCkpXHJcbiAgICAuZmlsdGVyKFxyXG4gICAgICAoaXRlbSkgPT5cclxuICAgICAgICBpdGVtLmV4dGVybmFsTGluayB8fFxyXG4gICAgICAgIGl0ZW1bJ3JvdXRlckxpbmsnXSB8fFxyXG4gICAgICAgIGl0ZW0uY29tbWFuZCB8fFxyXG4gICAgICAgIChpdGVtWydpdGVtcyddPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSZHRNZW51RXhwYW5kU291cmNlIHtcclxuICBDbGljayxcclxuICBIb3ZlcixcclxuICBTaG9ydGN1dCxcclxuICBGb2N1cyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZHRNZW51RXhwYW5kZWRDaGlsZCB7XHJcbiAgaXRlbTogUGFyc2VkUmR0TWVudUl0ZW07XHJcbiAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlO1xyXG59XHJcbiJdfQ==","export const INVISIBLE_CLASS = 'invisible';\nexport const FOCUS_VISIBLE = 'focus-visible';\nfunction getChildRoutesMapRec(item, map) {\n let childRoutes;\n if (menuItemHasChildren(item)) {\n childRoutes = item.items.map((child) => getChildRoutesMapRec(child, map));\n }\n else {\n childRoutes = [];\n }\n let res;\n if (menuItemHasRoute(item) && item.routerLink) {\n res = [item.routerLink].concat(...childRoutes);\n }\n else {\n res = [].concat(...childRoutes);\n }\n map.set(item, res);\n return res;\n}\nexport function getChildRoutesMap(items) {\n const map = new Map();\n items.forEach((item) => getChildRoutesMapRec(item, map));\n return map;\n}\nexport function findNextItemWithPrefix(items, itemIndex, prefix) {\n const len = items.length;\n prefix = prefix.toLocaleLowerCase();\n for (let i = (itemIndex + 1) % len; i !== itemIndex; i = (i + 1) % len) {\n const label = items[i].label.toLocaleLowerCase();\n if (label.startsWith(prefix)) {\n return i;\n }\n }\n return null;\n}\nexport function menuItemHasChildren(item) {\n return 'items' in item;\n}\nexport function menuItemHasRoute(item) {\n return 'routerLink' in item;\n}\nfunction getMenuItemsShortcutsRec(item, currentPath, res) {\n const path = [...currentPath, item];\n if (item.shortcut) {\n res.push({\n path: path,\n shortcut: item.shortcut,\n });\n }\n if (menuItemHasChildren(item)) {\n item.items.forEach((child) => getMenuItemsShortcutsRec(child, path, res));\n }\n}\nexport function getMenuItemsShortcuts(items) {\n const res = [];\n const initialPath = [];\n items.forEach((item) => getMenuItemsShortcutsRec(item, initialPath, res));\n return res;\n}\nexport function areHorDirsEqual(a, b) {\n if (!a) {\n return !b;\n }\n if (!b) {\n return !a;\n }\n return a.dir === b.dir && a.left === b.left;\n}\nexport function areVertDirsEqual(a, b) {\n if (!a) {\n return !b;\n }\n if (!b) {\n return !a;\n }\n return a.dir === b.dir && a.top === b.top;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQWdDN0MsU0FBUyxvQkFBb0IsQ0FDM0IsSUFBdUIsRUFDdkIsR0FBdUM7SUFFdkMsSUFBSSxXQUF5QixDQUFDO0lBRTlCLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7U0FBTSxDQUFDO1FBQ04sV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxHQUFlLENBQUM7SUFFcEIsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxDQUFDO1FBQ04sR0FBRyxHQUFJLEVBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUEwQjtJQUMxRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQUVyRCxLQUFL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QUFDLEVBQUUsQ0FBQztRQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZHRTaG9ydGN1dCB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQge1xyXG4gIE51bGxhYmxlLFxyXG4gIFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgUmR0VmVydGljYWxEaXJlY3Rpb24sXHJcbn0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHtcclxuICBQYXJzZWRSZHRNZW51SXRlbSxcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbixcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhSb3V0ZSxcclxufSBmcm9tICcuL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjb25zdCBJTlZJU0lCTEVfQ0xBU1MgPSAnaW52aXNpYmxlJztcclxuZXhwb3J0IGNvbnN0IEZPQ1VTX1ZJU0lCTEUgPSAnZm9jdXMtdmlzaWJsZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNpemUge1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmVydE9mZnNldCB7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgYm90dG9tOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSG9yT2Zmc2V0IHtcclxuICBsZWZ0OiBudW1iZXI7XHJcbiAgcmlnaHQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWZXJ0RGlyV2l0aE9mZnNldCB7XHJcbiAgZGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvbjtcclxuICB0b3A6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIb3JEaXJXaXRoT2Zmc2V0IHtcclxuICBkaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb247XHJcbiAgbGVmdDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFJkdE1lbnVJdGVtV2l0aFNob3J0Y3V0IHtcclxuICBwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdO1xyXG4gIHNob3J0Y3V0OiBSZHRTaG9ydGN1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2hpbGRSb3V0ZXNNYXBSZWMoXHJcbiAgaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgbWFwOiBNYXA8UGFyc2VkUmR0TWVudUl0ZW0sIHN0cmluZ1tdW10+XHJcbik6IHN0cmluZ1tdW10ge1xyXG4gIGxldCBjaGlsZFJvdXRlczogc3RyaW5nW11bXVtdO1xyXG5cclxuICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSkge1xyXG4gICAgY2hpbGRSb3V0ZXMgPSBpdGVtLml0ZW1zLm1hcCgoY2hpbGQpID0+IGdldENoaWxkUm91dGVzTWFwUmVjKGNoaWxkLCBtYXApKTtcclxuICB9IGVsc2Uge1xyXG4gICAgY2hpbGRSb3V0ZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIGxldCByZXM6IHN0cmluZ1tdW107XHJcblxyXG4gIGlmIChtZW51SXRlbUhhc1JvdXRlKGl0ZW0pICYmIGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgcmVzID0gW2l0ZW0ucm91dGVyTGlua10uY29uY2F0KC4uLmNoaWxkUm91dGVzKTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmVzID0gKFtdIGFzIHN0cmluZ1tdW10pLmNvbmNhdCguLi5jaGlsZFJvdXRlcyk7XHJcbiAgfVxyXG4gIG1hcC5zZXQoaXRlbSwgcmVzKTtcclxuICByZXR1cm4gcmVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRSb3V0ZXNNYXAoaXRlbXM6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICBjb25zdCBtYXAgPSBuZXcgTWFwPFBhcnNlZFJkdE1lbnVJdGVtLCBzdHJpbmdbXVtdPigpO1xyXG5cclxuICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBnZXRDaGlsZFJvdXRlc01hcFJlYyhpdGVtLCBtYXApKTtcclxuICByZXR1cm4gbWFwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZE5leHRJdGVtV2l0aFByZWZpeChcclxuICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXSxcclxuICBpdGVtSW5kZXg6IG51bWJlcixcclxuICBwcmVmaXg6IHN0cmluZ1xyXG4pIHtcclxuICBjb25zdCBsZW4gPSBpdGVtcy5sZW5ndGg7XHJcbiAgcHJlZml4ID0gcHJlZml4LnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcbiAgZm9yIChsZXQgaSA9IChpdGVtSW5kZXggKyAxKSAlIGxlbjsgaSAhPT0gaXRlbUluZGV4OyBpID0gKGkgKyAxKSAlIGxlbikge1xyXG4gICAgY29uc3QgbGFiZWwgPSBpdGVtc1tpXS5sYWJlbC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4gICAgICByZXR1cm4gaTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW51SXRlbUhhc0NoaWxkcmVuKFxyXG4gIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtXHJcbik6IGl0ZW0gaXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW4ge1xyXG4gIHJldHVybiAnaXRlbXMnIGluIGl0ZW07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW51SXRlbUhhc1JvdXRlKFxyXG4gIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtXHJcbik6IGl0ZW0gaXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGUge1xyXG4gIHJldHVybiAncm91dGVyTGluaycgaW4gaXRlbTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWVudUl0ZW1zU2hvcnRjdXRzUmVjKFxyXG4gIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtLFxyXG4gIGN1cnJlbnRQYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdLFxyXG4gIHJlczogUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXRbXVxyXG4pIHtcclxuICBjb25zdCBwYXRoID0gWy4uLmN1cnJlbnRQYXRoLCBpdGVtXTtcclxuICBpZiAoaXRlbS5zaG9ydGN1dCkge1xyXG4gICAgcmVzLnB1c2goe1xyXG4gICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICBzaG9ydGN1dDogaXRlbS5zaG9ydGN1dCxcclxuICAgIH0pO1xyXG4gIH1cclxuICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSkge1xyXG4gICAgaXRlbS5pdGVtcy5mb3JFYWNoKChjaGlsZCkgPT4gZ2V0TWVudUl0ZW1zU2hvcnRjdXRzUmVjKGNoaWxkLCBwYXRoLCByZXMpKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbXNTaG9ydGN1dHMoaXRlbXM6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICBjb25zdCByZXM6IFBhcnNlZFJkdE1lbnVJdGVtV2l0aFNob3J0Y3V0W10gPSBbXTtcclxuICBjb25zdCBpbml0aWFsUGF0aDogUGFyc2VkUmR0TWVudUl0ZW1bXSA9IFtdO1xyXG4gIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGdldE1lbnVJdGVtc1Nob3J0Y3V0c1JlYyhpdGVtLCBpbml0aWFsUGF0aCwgcmVzKSk7XHJcbiAgcmV0dXJuIHJlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFyZUhvckRpcnNFcXVhbChcclxuICBhOiBOdWxsYWJsZTxIb3JEaXJXaXRoT2Zmc2V0PixcclxuICBiOiBOdWxsYWJsZTxIb3JEaXJXaXRoT2Zmc2V0PlxyXG4pIHtcclxuICBpZiAoIWEpIHtcclxuICAgIHJldHVybiAhYjtcclxuICB9XHJcbiAgaWYgKCFiKSB7XHJcbiAgICByZXR1cm4gIWE7XHJcbiAgfVxyXG4gIHJldHVybiBhLmRpciA9PT0gYi5kaXIgJiYgYS5sZWZ0ID09PSBiLmxlZnQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcmVWZXJ0RGlyc0VxdWFsKFxyXG4gIGE6IE51bGxhYmxlPFZlcnREaXJXaXRoT2Zmc2V0PixcclxuICBiOiBOdWxsYWJsZTxWZXJ0RGlyV2l0aE9mZnNldD5cclxuKSB7XHJcbiAgaWYgKCFhKSB7XHJcbiAgICByZXR1cm4gIWI7XHJcbiAgfVxyXG4gIGlmICghYikge1xyXG4gICAgcmV0dXJuICFhO1xyXG4gIH1cclxuICByZXR1cm4gYS5kaXIgPT09IGIuZGlyICYmIGEudG9wID09PSBiLnRvcDtcclxufVxyXG4iXX0=","import { DOCUMENT } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, HostListener, QueryList, Renderer2, ViewChild, ViewChildren, afterNextRender, afterRenderEffect, computed, effect, inject, input, linkedSignal, signal, untracked, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { RdtShortcut, RdtShortcutService, } from '@ngrdt/shortcuts';\nimport { KB_CODE, RdtObjectUtils, RdtStringUtils, } from '@ngrdt/utils';\nimport { delay, first, map, of } from 'rxjs';\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\nimport { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, } from '../models';\nimport { RdtMenuExpandSource, } from '../private-models';\nimport { FOCUS_VISIBLE, areHorDirsEqual, areVertDirsEqual, findNextItemWithPrefix, menuItemHasChildren, menuItemHasRoute, } from '../utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@ngrdt/router\";\nimport * as i4 from \"@ngrdt/shortcuts\";\n// TODO: Split positioning and shortcut/focus management in separate classes\nexport class RdtMenuOverlayComponent {\n elRef = inject((ElementRef));\n destroyRef = inject(DestroyRef);\n renderer = inject(Renderer2);\n topLevelMenu = inject(RdtMenuBaseComponent);\n parentMenu = inject(RdtMenuOverlayComponent, {\n optional: true,\n skipSelf: true,\n });\n cd = inject(ChangeDetectorRef);\n router = inject(Router);\n document = inject(DOCUMENT);\n shortcutService = inject(RdtShortcutService);\n children;\n focusableElements;\n menuItemContainer;\n item = input.required();\n level = input.required();\n preferredHorizontalDir = input(DEFAULT_MENU_HORIZONTAL_DIR);\n preferredVerticalDir = input(DEFAULT_MENU_VERTICAL_DIR);\n expandedInput = input(false, { alias: 'expanded' });\n expanded = linkedSignal(() => this.expandedInput());\n autofocusItemInput = input(null, {\n alias: 'autofocusItem',\n });\n autofocusItem = linkedSignal(() => this.autofocusItemInput());\n // Element used to relatively position menu,\n // typically parent element.\n // If not specified, parent element is used.\n anchorElementInput = input(null, {\n alias: 'anchorElement',\n });\n anchorElement = computed(() => this.anchorElementInput() ?? this.elRef.nativeElement.parentElement);\n zIndex = computed(() => this.level() + 10);\n isRootLevel = computed(() => this.level() === 0);\n // Bounding box of this excluding any extra offset.\n _box;\n get box() {\n return this._box;\n }\n // Bounding box of parent element.\n _anchorBox;\n _containerPadding = { top: 0, bottom: 0 };\n // Currently applied vertical and horizontal directions.\n verticalDir = signal(null, {\n equal: areVertDirsEqual,\n });\n horizontalDir = signal(null, {\n equal: areHorDirsEqual,\n });\n expandedChild = signal(null);\n autofocusSubmenuItem = signal(null);\n keyActions = {\n [KB_CODE.ARROW.UP]: (index) => this.focusPrevItem(index),\n [KB_CODE.ARROW.DOWN]: (index) => this.focusNextItem(index),\n [KB_CODE.ARROW.RIGHT]: (index) => this.openSubmenu(index, 'first', RdtMenuExpandSource.Shortcut),\n [KB_CODE.ARROW.LEFT]: () => this.closeSelf(),\n [KB_CODE.HOME]: () => this.focusItem(0),\n [KB_CODE.END]: () => this.focusItem(untracked(this.item).items.length - 1),\n [KB_CODE.ESCAPE]: () => this.closeSelf(),\n [KB_CODE.ENTER]: (index) => this.invokeItemClickByIndex(index),\n [KB_CODE.SPACEBAR]: (index) => this.invokeItemClickByIndex(index),\n };\n get selfExpandSrc() {\n if (this.expanded()) {\n if (this.parentMenu) {\n return this.parentMenu.expandedChild()?.src;\n }\n else {\n return this.topLevelMenu.expandedChild()?.src;\n }\n }\n return undefined;\n }\n recalcEffect = effect(() => {\n this.recalculatePosition(this.preferredHorizontalDir(), this.preferredVerticalDir());\n });\n expandedEffect = effect(() => {\n if (!this.expanded()) {\n this.expandedChild.set(null);\n }\n });\n expandedFocusEffect = afterRenderEffect(() => {\n const rootItem = untracked(this.item);\n this.expandedInput();\n const expanded = untracked(this.expanded);\n const autofocusItem = untracked(this.autofocusItem);\n if (expanded) {\n switch (autofocusItem) {\n case null:\n this.focusItem(0, false);\n break;\n case 'first':\n this.focusItem(0, true);\n break;\n case 'last':\n this.focusItem(rootItem.items.length - 1, true);\n }\n }\n });\n constructor() {\n afterNextRender(() => {\n this.measureContainerPadding();\n this.recalculatePosition(this.preferredHorizontalDir(), this.preferredVerticalDir());\n this.listenTabKeyPress();\n });\n }\n getMinOffsetLeft() {\n return this.topLevelMenu.bodyMargin.left;\n }\n getMaxOffsetLeft() {\n return (this.topLevelMenu.clientSize.width -\n this._box.width -\n this.topLevelMenu.bodyMargin.right);\n }\n getMinOffsetTop() {\n return this.topLevelMenu.bodyMargin.top;\n }\n getMaxOffsetTop() {\n return (this.topLevelMenu.clientSize.height -\n this._box.height -\n this.topLevelMenu.bodyMargin.bottom);\n }\n recalculatePosition(preferredHorizontalDir, preferredVerticalDir) {\n const isRoot = untracked(this.isRootLevel);\n const horizontalDir = untracked(this.horizontalDir);\n const verticalDir = untracked(this.verticalDir);\n this.measureBoundingRect();\n if (!this._box || !this._anchorBox || !this.topLevelMenu.clientSize) {\n return;\n }\n const newHorDir = this.getRealHorizontalDir(preferredHorizontalDir);\n const newVertDir = this.getRealVerticalDir(preferredVerticalDir);\n // Horizontal direction\n if (newHorDir.dir === 'right') {\n newHorDir.left += this._anchorBox.left;\n if (!isRoot) {\n newHorDir.left += this._anchorBox.width;\n }\n }\n else if (newHorDir.dir === 'left') {\n newHorDir.left += this._anchorBox.left - this._box.width;\n if (isRoot) {\n newHorDir.left += this._anchorBox.width;\n }\n }\n // Restrictions from left menu and right menu\n newHorDir.left = Math.min(Math.max(this.getMinOffsetLeft(), newHorDir.left), this.getMaxOffsetLeft());\n // Vertical direction\n if (newVertDir.dir === 'down') {\n newVertDir.top = this._anchorBox.top;\n if (isRoot) {\n newVertDir.top += this._anchorBox.height;\n }\n else {\n newVertDir.top -= this._containerPadding.top;\n }\n }\n else if (newVertDir.dir === 'up') {\n newVertDir.top = this._anchorBox.top - this._box.height;\n if (!isRoot) {\n newVertDir.top += this._anchorBox.height + this._containerPadding.top;\n }\n }\n // Restrictions from header and footer\n newVertDir.top = Math.min(Math.max(this.getMinOffsetTop(), newVertDir.top), this.getMaxOffsetTop());\n if (!areHorDirsEqual(horizontalDir, newHorDir) ||\n !areVertDirsEqual(verticalDir, newVertDir)) {\n this.horizontalDir.set(newHorDir);\n this.verticalDir.set(newVertDir);\n this.setClasses();\n this.measureBoundingRect();\n }\n this.recalculateChildren();\n }\n recalculateChildren() {\n const horizontalDir = untracked(this.horizontalDir);\n const verticalDir = untracked(this.verticalDir);\n if (this.children && horizontalDir && verticalDir) {\n this.children.forEach((child) => child.recalculatePosition(horizontalDir.dir, verticalDir.dir));\n }\n }\n onItemPointerEnter(item) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.topLevelMenu.openOnHover);\n if (openOnHover && expandedChild?.src !== RdtMenuExpandSource.Click) {\n this.autofocusSubmenuItem.set(null);\n if (menuItemHasChildren(item)) {\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Hover });\n this.expanded.set(true);\n }\n else {\n //console.log('expanded child', this.expandedChild);\n this.expandedChild.set(null);\n }\n }\n }\n onItemClick(item) {\n const expandedChild = untracked(this.expandedChild);\n const hasChildren = menuItemHasChildren(item);\n const openOnHover = this.topLevelMenu.openOnHover();\n if ((hasChildren && expandedChild?.item !== item) ||\n (openOnHover && expandedChild?.src === RdtMenuExpandSource.Hover)) {\n this.autofocusSubmenuItem.set(null);\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Click });\n }\n else {\n this.expandedChild.set(null);\n }\n // Could also listen to router events, but might be triggered by\n // child router navigation.\n if (!hasChildren) {\n this.topLevelMenu.closeSubmenus();\n }\n if (typeof item.command === 'function') {\n item.command();\n }\n }\n invokeItemClick(item) {\n if (menuItemHasRoute(item) && item.routerLink) {\n this.router.navigate(item.routerLink);\n }\n this.onItemClick(item);\n this.autofocusSubmenuItem.set('first');\n }\n getChildRoutes(item) {\n return this.topLevelMenu.getChildRoutes(item);\n }\n closeSubmenus(focusExpanded = false) {\n const expandedChild = this.expandedChild();\n if (focusExpanded && expandedChild) {\n this.focusItem(expandedChild.item);\n }\n this.expandedChild.set(null);\n this.cd.markForCheck();\n }\n focusItemRecursively(path) {\n const children = [...path];\n const thisItem = children.shift();\n this.autofocusSubmenuItem.set(null);\n this.autofocusItem.set(null);\n if (children.length > 0) {\n this.expandAndGetChild(thisItem, RdtMenuExpandSource.Focus)\n .pipe(delay(1))\n .subscribe((overlay) => {\n overlay.focusItemRecursively(children);\n });\n }\n else {\n // First focus the correct item because submenu might have focus on it.\n // Removing focused element from DOM results in window:focusout event\n // and that closes all menus\n this.focusItem(thisItem);\n // Now close submenus and therefore remove them from DOM\n this.closeSubmenus();\n // Wait until they are removed and focus the correct item again\n setTimeout(() => this.focusItem(thisItem), 1);\n }\n }\n expandAndGetChild(item, src) {\n const rootItem = untracked(this.item);\n if (rootItem.items.indexOf(item) < 0) {\n throw new Error('Attempting to expand item that is not child item of this.item');\n }\n this.expandedChild.set({ item, src });\n this.cd.markForCheck();\n const child = this.children.find((child) => untracked(child.item) === item);\n if (child) {\n return of(child);\n }\n else {\n return this.children.changes.pipe(map(() => this.children.find((child) => untracked(child.item) === item)), first(RdtObjectUtils.notNullGuard));\n }\n }\n onKeyDown(itemIndex, event) {\n const rootItem = untracked(this.item);\n const hasAction = event.code in this.keyActions;\n const isLetter = RdtStringUtils.isAlphabetCharacter(event.key) ||\n RdtStringUtils.isNumericCharacter(event.key);\n if (hasAction || isLetter) {\n event.preventDefault();\n }\n if (hasAction) {\n event.stopPropagation();\n }\n if (hasAction) {\n this.keyActions[event.code](itemIndex);\n }\n else if (isLetter) {\n const next = findNextItemWithPrefix(rootItem.items, itemIndex, event.key);\n if (next !== null) {\n this.focusItem(next);\n }\n }\n }\n onTabKeyPress(event) {\n // Do not prevent default to correctly switch to previous element\n event.originalEvent.stopPropagation();\n // Wait for document.activeElement to switch to new element\n setTimeout(() => {\n if (!this.elRef.nativeElement.contains(this.document.activeElement)) {\n this.closeSelf(false);\n }\n }, 1);\n }\n invokeItemClickByIndex(itemIndex) {\n const rootItem = untracked(this.item);\n const item = rootItem.items[itemIndex];\n if (!item) {\n return;\n }\n this.invokeItemClick(item);\n }\n focusItem(item, visibleFocus = true) {\n let itemIndex;\n if (typeof item === 'number') {\n itemIndex = item;\n }\n else {\n itemIndex = this.item().items.indexOf(item);\n }\n if (itemIndex >= 0 && itemIndex < this.focusableElements.length) {\n this.blurAllFocusable();\n this.focusFocusable(itemIndex, visibleFocus);\n }\n }\n blurAllFocusable() {\n this.focusableElements.forEach((el) => this.renderer.removeClass(el.nativeElement, FOCUS_VISIBLE));\n }\n focusFocusable(itemIndex, visibleFocus) {\n const elRef = this.focusableElements.get(itemIndex);\n if (elRef) {\n if (visibleFocus) {\n this.renderer.addClass(elRef.nativeElement, FOCUS_VISIBLE);\n }\n elRef.nativeElement.focus();\n }\n }\n focusNextItem(itemIndex) {\n const rootItem = untracked(this.item);\n const next = (itemIndex + 1) % rootItem.items.length;\n this.focusItem(next);\n }\n focusPrevItem(itemIndex) {\n const rootItem = untracked(this.item);\n const prev = (itemIndex - 1 + rootItem.items.length) % rootItem.items.length;\n this.focusItem(prev);\n }\n openSubmenu(itemIndex, visibleFocus, src) {\n const rootItem = untracked(this.item);\n if (itemIndex < rootItem.items.length &&\n menuItemHasChildren(rootItem.items[itemIndex])) {\n this.expandedChild.set({ item: rootItem.items[itemIndex], src });\n this.autofocusSubmenuItem.set(visibleFocus);\n }\n }\n closeSelf(focusExpanded = true) {\n if (this.parentMenu) {\n this.parentMenu.closeSubmenus(focusExpanded);\n }\n else {\n this.topLevelMenu.closeSubmenus(focusExpanded);\n }\n }\n checkActiveElement(event) {\n const closeOnFocusOut = untracked(this.topLevelMenu.closeOnFocusOut);\n if (closeOnFocusOut && !this.topLevelMenu.openOnHover) {\n const thisEl = this.elRef.nativeElement;\n const target = event.relatedTarget;\n if (!(target instanceof HTMLElement) || !thisEl.contains(target)) {\n this.expandedChild.set(null);\n }\n }\n }\n // Calculates direction of this menu and offset in case\n // menu won't fit in left nor right of parent menu.\n getRealHorizontalDir(preferredHorizontalDir) {\n const isRoot = untracked(this.isRootLevel);\n let left;\n let right;\n // This menu is directly under menubar\n if (isRoot) {\n left = this._anchorBox.right - this._box.width;\n right =\n this.topLevelMenu.clientSize.width -\n (this._anchorBox.left + this._box.width);\n }\n else {\n // Menu is nested\n right =\n this.topLevelMenu.clientSize.width -\n (this._anchorBox.right + this._box.width);\n left = this._anchorBox.left - this._box.width;\n }\n left -= this.topLevelMenu.bodyMargin.left;\n right -= this.topLevelMenu.bodyMargin.right;\n if (preferredHorizontalDir === 'right') {\n // We use preferred if possible.\n if (right >= 0) {\n return { dir: 'right', left: 0 };\n // Then the other one.\n }\n else if (left >= 0) {\n return { dir: 'left', left: 0 };\n // Edge case if neither direction can be used (ultra narrow screen).\n // Choose direction that covers least of parent menu.\n }\n else {\n return this.getNarrowScreenHorizontalDir(left, right);\n }\n }\n else {\n if (left >= 0) {\n return { dir: 'left', left: 0 };\n }\n else if (right >= 0) {\n return { dir: 'right', left: 0 };\n }\n else {\n return this.getNarrowScreenHorizontalDir(left, right);\n }\n }\n }\n // Finds out where to put menu in case screen is too narrow for two menus\n // to fit next to each other. Minimizes area of parent menu covered by this.\n getNarrowScreenHorizontalDir(left, right) {\n const screenStart = this.topLevelMenu.bodyMargin.left;\n const screenEnd = this.topLevelMenu.clientSize.width - this.topLevelMenu.bodyMargin.right;\n const screenCenter = (screenStart - screenEnd) / 2;\n const leftStart = Math.max(this._anchorBox.left, screenStart);\n const leftEnd = Math.min(this._anchorBox.left + this._anchorBox.width, screenCenter);\n const rightStart = Math.max(screenCenter, leftEnd);\n const rightEnd = Math.min(this._anchorBox.left + this._anchorBox.width, screenEnd);\n if (leftEnd - leftStart > rightEnd - rightStart) {\n return { dir: 'right', left: right };\n }\n else {\n return { dir: 'left', left: -left };\n }\n }\n getRealVerticalDir(preferredVerticalDir) {\n const isRoot = untracked(this.isRootLevel);\n let bottom;\n let top;\n if (isRoot) {\n bottom =\n this.topLevelMenu.clientSize.height +\n this._anchorBox.bottom -\n this._box.height;\n top = this._anchorBox.top - this._box.height;\n }\n else {\n bottom =\n this.topLevelMenu.clientSize.height -\n this._anchorBox.top -\n this._box.height;\n top = this._anchorBox.bottom - this._box.height;\n }\n top -= this.topLevelMenu.bodyMargin.top;\n bottom -= this.topLevelMenu.bodyMargin.bottom;\n if (preferredVerticalDir === 'down') {\n if (bottom >= 0) {\n return { dir: 'down', top: 0 };\n }\n else if (top >= 0) {\n return { dir: 'up', top: 0 };\n }\n else {\n return { dir: preferredVerticalDir, top: 0 };\n }\n }\n else {\n if (top >= 0) {\n return { dir: 'up', top: 0 };\n }\n else if (bottom >= 0) {\n return { dir: 'down', top: 0 };\n }\n else {\n return { dir: preferredVerticalDir, top: 0 };\n }\n }\n }\n // Measures bounding rect of this and offset container\n // Should always be called after parent menu has already been measured.\n measureBoundingRect() {\n this._box = this.elRef.nativeElement.getBoundingClientRect();\n const anchor = this.anchorElement();\n this._anchorBox = anchor.getBoundingClientRect();\n }\n measureContainerPadding() {\n const computedStyles = getComputedStyle(this.menuItemContainer.nativeElement);\n const paddingTop = parseFloat(computedStyles.paddingTop);\n const paddingBottom = parseFloat(computedStyles.paddingBottom);\n this._containerPadding = { top: paddingTop, bottom: paddingBottom };\n }\n setClasses() {\n const isRoot = this.isRootLevel();\n const vertical = this.verticalDir();\n const horizontal = this.horizontalDir();\n if (vertical) {\n if (vertical.dir === 'up') {\n this.setClass('rdt-overlay-up');\n this.removeClass('rdt-overlay-down');\n }\n else {\n this.removeClass('rdt-overlay-up');\n this.setClass('rdt-overlay-down');\n }\n this.setOffset('top', vertical.top);\n }\n if (horizontal) {\n if (horizontal.dir === 'left') {\n this.setClass('rdt-overlay-left');\n this.removeClass('rdt-overlay-right');\n }\n else {\n this.removeClass('rdt-overlay-left');\n this.setClass('rdt-overlay-right');\n }\n this.setOffset('left', horizontal.left);\n }\n if (isRoot) {\n this.setClass('rdt-menu-root');\n this.removeClass('rdt-menu-sub');\n }\n else {\n this.removeClass('rdt-menu-root');\n this.setClass('rdt-menu-sub');\n }\n }\n setClass(className) {\n this.renderer.addClass(this.elRef.nativeElement, className);\n }\n removeClass(className) {\n this.renderer.removeClass(this.elRef.nativeElement, className);\n }\n setOffset(direction, value) {\n this.renderer.setStyle(this.elRef.nativeElement, direction, `${value}px`);\n }\n listenTabKeyPress() {\n const shiftTab = RdtShortcut.createUnsafe('shift', 'tab');\n const tab = RdtShortcut.createUnsafe('tab');\n this.shortcutService\n .listen([tab, shiftTab], {\n element: this.elRef.nativeElement,\n preventDefault: false,\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => this.onTabKeyPress(event));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.0\", type: RdtMenuOverlayComponent, isStandalone: false, selector: \"rdt-menu-overlay\", inputs: { item: { classPropertyName: \"item\", publicName: \"item\", isSignal: true, isRequired: true, transformFunction: null }, level: { classPropertyName: \"level\", publicName: \"level\", isSignal: true, isRequired: true, transformFunction: null }, preferredHorizontalDir: { classPropertyName: \"preferredHorizontalDir\", publicName: \"preferredHorizontalDir\", isSignal: true, isRequired: false, transformFunction: null }, preferredVerticalDir: { classPropertyName: \"preferredVerticalDir\", publicName: \"preferredVerticalDir\", isSignal: true, isRequired: false, transformFunction: null }, expandedInput: { classPropertyName: \"expandedInput\", publicName: \"expanded\", isSignal: true, isRequired: false, transformFunction: null }, autofocusItemInput: { classPropertyName: \"autofocusItemInput\", publicName: \"autofocusItem\", isSignal: true, isRequired: false, transformFunction: null }, anchorElementInput: { classPropertyName: \"anchorElementInput\", publicName: \"anchorElement\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"tabindex\": \"-1\", \"role\": \"menu\" }, listeners: { \"window:focusout\": \"checkActiveElement($event)\" }, properties: { \"class.expanded\": \"expanded()\", \"style.z-index\": \"zIndex()\" } }, viewQueries: [{ propertyName: \"menuItemContainer\", first: true, predicate: [\"menuItemContainer\"], descendants: true }, { propertyName: \"children\", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: \"focusableElements\", predicate: [\"focusableItem\"], descendants: true }], ngImport: i0, template: \"<ul class=\\\"menu-item-container\\\" role=\\\"presentation\\\" #menuItemContainer>\\r\\n @for(item of item().items; track item; let i = $index) {\\r\\n <li\\r\\n role=\\\"presentation\\\"\\r\\n class=\\\"menu-item\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n rdtAnyRouteActive=\\\"menu-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if (item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"chevron_right\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n -->\\r\\n @if (item.items) {\\r\\n <span class=\\\"menu-item-icon rdt-menu-icon-right\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if (item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [queryParams]=\\\"item.queryParams\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n }\\r\\n\\r\\n <!-- Child menus exist only if this menu is expanded. -->\\r\\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\\r\\n @if (item.items && expanded()) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem()\\\"\\r\\n [preferredHorizontalDir]=\\\"horizontalDir()?.dir!\\\"\\r\\n [preferredVerticalDir]=\\\"verticalDir()?.dir!\\\"\\r\\n [level]=\\\"level() + 1\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px))}:host.expanded{visibility:visible}ul.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-background);margin-top:0;margin-bottom:0;margin-block-start:0;margin-block-end:0}.menu-item-content{cursor:pointer;display:flex;align-items:center;width:100%;padding:var(--rdt-menu-item-padding);background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color);font-size:var(--rdt-menu-item-font-size);font-weight:var(--rdt-menu-item-font-weight);border:var(--rdt-menu-item-border);outline:var(--rdt-menu-item-outline)}.menu-item{display:flex;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-route-active-background);--rdt-menu-item-text-color: var(--rdt-menu-item-route-active-text-color);--rdt-menu-item-border: var(--rdt-menu-item-route-active-border);--rdt-menu-item-outline: var(--rdt-menu-item-route-active-outline)}.menu-item .menu-item-content:hover{--rdt-menu-item-background: var(--rdt-menu-item-hover-background);--rdt-menu-item-text-color: var(--rdt-menu-item-hover-text-color);--rdt-menu-item-border: var(--rdt-menu-item-hover-border);--rdt-menu-item-outline: var(--rdt-menu-item-hover-outline)}.menu-item [aria-expanded=true].menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-expanded-background);--rdt-menu-item-text-color: var(--rdt-menu-item-expanded-text-color);--rdt-menu-item-border: var(--rdt-menu-item-expanded-border);--rdt-menu-item-outline: var(--rdt-menu-item-expanded-outline)}.menu-item .menu-item-content.focus-visible:focus,.menu-item .menu-item-content:focus-visible{--rdt-menu-item-background: var(--rdt-menu-item-focus-background);--rdt-menu-item-text-color: var(--rdt-menu-item-focus-text-color);--rdt-menu-item-border: var(--rdt-menu-item-focus-border);--rdt-menu-item-outline: var(--rdt-menu-item-focus-outline)}.menu-item-icon.rdt-menu-icon-right{width:0;height:0;border-top:var(--rdt-menu-default-icon-size) solid transparent;border-bottom:var(--rdt-menu-default-icon-size) solid transparent;border-left:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-item-text-color)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i2.RouterLink, selector: \"[routerLink]\", inputs: [\"target\", \"queryParams\", \"fragment\", \"queryParamsHandling\", \"state\", \"info\", \"relativeTo\", \"preserveFragment\", \"skipLocationChange\", \"replaceUrl\", \"routerLink\"] }, { kind: \"directive\", type: i3.RdtAnyRouteActiveDirective, selector: \"[rdtAnyRouteActive]\", inputs: [\"rdtAnyRouteActive\", \"watchedRoutes\", \"anyRouteActiveOptions\", \"ariaCurrentWhenActive\"] }, { kind: \"directive\", type: i4.RdtKeyListenerDirective, selector: \"[rdtKeyListener]\", outputs: [\"rdtKeyListener\"] }, { kind: \"component\", type: RdtMenuOverlayComponent, selector: \"rdt-menu-overlay\", inputs: [\"item\", \"level\", \"preferredHorizontalDir\", \"preferredVerticalDir\", \"expanded\", \"autofocusItem\", \"anchorElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuOverlayComponent, decorators: [{\n type: Component,\n args: [{ selector: 'rdt-menu-overlay', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, host: {\n '[class.expanded]': 'expanded()',\n '[style.z-index]': 'zIndex()',\n tabindex: '-1',\n role: 'menu',\n }, template: \"<ul class=\\\"menu-item-container\\\" role=\\\"presentation\\\" #menuItemContainer>\\r\\n @for(item of item().items; track item; let i = $index) {\\r\\n <li\\r\\n role=\\\"presentation\\\"\\r\\n class=\\\"menu-item\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n rdtAnyRouteActive=\\\"menu-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if (item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"chevron_right\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n -->\\r\\n @if (item.items) {\\r\\n <span class=\\\"menu-item-icon rdt-menu-icon-right\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if (item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [queryParams]=\\\"item.queryParams\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n }\\r\\n\\r\\n <!-- Child menus exist only if this menu is expanded. -->\\r\\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\\r\\n @if (item.items && expanded()) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem()\\\"\\r\\n [preferredHorizontalDir]=\\\"horizontalDir()?.dir!\\\"\\r\\n [preferredVerticalDir]=\\\"verticalDir()?.dir!\\\"\\r\\n [level]=\\\"level() + 1\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px))}:host.expanded{visibility:visible}ul.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-background);margin-top:0;margin-bottom:0;margin-block-start:0;margin-block-end:0}.menu-item-content{cursor:pointer;display:flex;align-items:center;width:100%;padding:var(--rdt-menu-item-padding);background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color);font-size:var(--rdt-menu-item-font-size);font-weight:var(--rdt-menu-item-font-weight);border:var(--rdt-menu-item-border);outline:var(--rdt-menu-item-outline)}.menu-item{display:flex;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-route-active-background);--rdt-menu-item-text-color: var(--rdt-menu-item-route-active-text-color);--rdt-menu-item-border: var(--rdt-menu-item-route-active-border);--rdt-menu-item-outline: var(--rdt-menu-item-route-active-outline)}.menu-item .menu-item-content:hover{--rdt-menu-item-background: var(--rdt-menu-item-hover-background);--rdt-menu-item-text-color: var(--rdt-menu-item-hover-text-color);--rdt-menu-item-border: var(--rdt-menu-item-hover-border);--rdt-menu-item-outline: var(--rdt-menu-item-hover-outline)}.menu-item [aria-expanded=true].menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-expanded-background);--rdt-menu-item-text-color: var(--rdt-menu-item-expanded-text-color);--rdt-menu-item-border: var(--rdt-menu-item-expanded-border);--rdt-menu-item-outline: var(--rdt-menu-item-expanded-outline)}.menu-item .menu-item-content.focus-visible:focus,.menu-item .menu-item-content:focus-visible{--rdt-menu-item-background: var(--rdt-menu-item-focus-background);--rdt-menu-item-text-color: var(--rdt-menu-item-focus-text-color);--rdt-menu-item-border: var(--rdt-menu-item-focus-border);--rdt-menu-item-outline: var(--rdt-menu-item-focus-outline)}.menu-item-icon.rdt-menu-icon-right{width:0;height:0;border-top:var(--rdt-menu-default-icon-size) solid transparent;border-bottom:var(--rdt-menu-default-icon-size) solid transparent;border-left:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-item-text-color)}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { children: [{\n type: ViewChildren,\n args: [RdtMenuOverlayComponent]\n }], focusableElements: [{\n type: ViewChildren,\n args: ['focusableItem']\n }], menuItemContainer: [{\n type: ViewChild,\n args: ['menuItemContainer']\n }], checkActiveElement: [{\n type: HostListener,\n args: ['window:focusout', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBRVgsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLE9BQU8sRUFHUCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIs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QUR4QixZQUFZO3VCQUFDLGVBQWU7Z0JBSXJCLGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBNmJ0QixrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIGFmdGVyTmV4dFJlbmRlcixcclxuICBhZnRlclJlbmRlckVmZmVjdCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIGxpbmtlZFNpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgUmR0U2hvcnRjdXQsXHJcbiAgUmR0U2hvcnRjdXRFdmVudCxcclxuICBSZHRTaG9ydGN1dFNlcnZpY2UsXHJcbn0gZnJvbSAnQG5ncmR0L3Nob3J0Y3V0cyc7XHJcbmltcG9ydCB7XHJcbiAgS0JfQ09ERSxcclxuICBOdWxsYWJsZSxcclxuICBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gIFJkdE9iamVjdFV0aWxzLFxyXG4gIFJkdFN0cmluZ1V0aWxzLFxyXG4gIFJkdFZlcnRpY2FsRGlyZWN0aW9uLFxyXG59IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IGRlbGF5LCBmaXJzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZHRNZW51QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSLFxyXG4gIERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVIsXHJcbn0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBQYXJzZWRSZHRNZW51SXRlbSxcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbixcclxuICBSZHRNZW51RXhwYW5kU291cmNlLFxyXG59IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBGT0NVU19WSVNJQkxFLFxyXG4gIEhvckRpcldpdGhPZmZzZXQsXHJcbiAgVmVydERpcldpdGhPZmZzZXQsXHJcbiAgYXJlSG9yRGlyc0VxdWFsLFxyXG4gIGFyZVZlcnREaXJzRXF1YWwsXHJcbiAgZmluZE5leHRJdGVtV2l0aFByZWZpeCxcclxuICBtZW51SXRlbUhhc0NoaWxkcmVuLFxyXG4gIG1lbnVJdGVtSGFzUm91dGUsXHJcbn0gZnJvbSAnLi4vdXRpbHMnO1xyXG5cclxuLy8gVE9ETzogU3BsaXQgcG9zaXRpb25pbmcgYW5kIHNob3J0Y3V0L2ZvY3VzIG1hbmFnZW1lbnQgaW4gc2VwYXJhdGUgY2xhc3Nlc1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JkdC1tZW51LW92ZXJsYXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tjbGFzcy5leHBhbmRlZF0nOiAnZXhwYW5kZWQoKScsXHJcbiAgICAnW3N0eWxlLnotaW5kZXhdJzogJ3pJbmRleCgpJyxcclxuICAgIHRhYmluZGV4OiAnLTEnLFxyXG4gICAgcm9sZTogJ21lbnUnLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51T3ZlcmxheUNvbXBvbmVudCB7XHJcbiAgcmVhZG9ubHkgZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcclxuICByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0b3BMZXZlbE1lbnUgPSBpbmplY3QoUmR0TWVudUJhc2VDb21wb25lbnQpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50TWVudSA9IGluamVjdChSZHRNZW51T3ZlcmxheUNvbXBvbmVudCwge1xyXG4gICAgb3B0aW9uYWw6IHRydWUsXHJcbiAgICBza2lwU2VsZjogdHJ1ZSxcclxuICB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvcnRjdXRTZXJ2aWNlID0gaW5qZWN0KFJkdFNob3J0Y3V0U2VydmljZSk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oUmR0TWVudU92ZXJsYXlDb21wb25lbnQpXHJcbiAgcmVhZG9ubHkgY2hpbGRyZW4hOiBRdWVyeUxpc3Q8UmR0TWVudU92ZXJsYXlDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb2N1c2FibGVJdGVtJylcclxuICBwcml2YXRlIGZvY3VzYWJsZUVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTExJRWxlbWVudD4+O1xyXG5cclxuICBAVmlld0NoaWxkKCdtZW51SXRlbUNvbnRhaW5lcicpXHJcbiAgcHJpdmF0ZSBtZW51SXRlbUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTFVMaXN0RWxlbWVudD47XHJcblxyXG4gIHJlYWRvbmx5IGl0ZW0gPSBpbnB1dC5yZXF1aXJlZDxQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbj4oKTtcclxuICByZWFkb25seSBsZXZlbCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuICByZWFkb25seSBwcmVmZXJyZWRIb3Jpem9udGFsRGlyID0gaW5wdXQ8UmR0SG9yaXpvbnRhbERpcmVjdGlvbj4oXHJcbiAgICBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVJcclxuICApO1xyXG4gIHJlYWRvbmx5IHByZWZlcnJlZFZlcnRpY2FsRGlyID0gaW5wdXQ8UmR0VmVydGljYWxEaXJlY3Rpb24+KFxyXG4gICAgREVGQVVMVF9NRU5VX1ZFUlRJQ0FMX0RJUlxyXG4gICk7XHJcblxyXG4gIHJlYWRvbmx5IGV4cGFuZGVkSW5wdXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSwgeyBhbGlhczogJ2V4cGFuZGVkJyB9KTtcclxuICByZWFkb25seSBleHBhbmRlZCA9IGxpbmtlZFNpZ25hbCgoKSA9PiB0aGlzLmV4cGFuZGVkSW5wdXQoKSk7XHJcblxyXG4gIHJlYWRvbmx5IGF1dG9mb2N1c0l0ZW1JbnB1dCA9IGlucHV0PCdmaXJzdCcgfCAnbGFzdCcgfCBudWxsPihudWxsLCB7XHJcbiAgICBhbGlhczogJ2F1dG9mb2N1c0l0ZW0nLFxyXG4gIH0pO1xyXG4gIHJlYWRvbmx5IGF1dG9mb2N1c0l0ZW0gPSBsaW5rZWRTaWduYWwoKCkgPT4gdGhpcy5hdXRvZm9jdXNJdGVtSW5wdXQoKSk7XHJcblxyXG4gIC8vIEVsZW1lbnQgdXNlZCB0byByZWxhdGl2ZWx5IHBvc2l0aW9uIG1lbnUsXHJcbiAgLy8gdHlwaWNhbGx5IHBhcmVudCBlbGVtZW50LlxyXG4gIC8vIElmIG5vdCBzcGVjaWZpZWQsIHBhcmVudCBlbGVtZW50IGlzIHVzZWQuXHJcbiAgcmVhZG9ubHkgYW5jaG9yRWxlbWVudElucHV0ID0gaW5wdXQ8TnVsbGFibGU8SFRNTEVsZW1lbnQ+PihudWxsLCB7XHJcbiAgICBhbGlhczogJ2FuY2hvckVsZW1lbnQnLFxyXG4gIH0pO1xyXG4gIHJlYWRvbmx5IGFuY2hvckVsZW1lbnQgPSBjb21wdXRlZChcclxuICAgICgpID0+IHRoaXMuYW5jaG9yRWxlbWVudElucHV0KCkgPz8gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQhXHJcbiAgKTtcclxuXHJcbiAgcmVhZG9ubHkgekluZGV4ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sZXZlbCgpICsgMTApO1xyXG4gIHJlYWRvbmx5IGlzUm9vdExldmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sZXZlbCgpID09PSAwKTtcclxuXHJcbiAgLy8gQm91bmRpbmcgYm94IG9mIHRoaXMgZXhjbHVkaW5nIGFueSBleHRyYSBvZmZzZXQuXHJcbiAgcHJpdmF0ZSBfYm94ITogRE9NUmVjdDtcclxuICBnZXQgYm94KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JveDtcclxuICB9XHJcblxyXG4gIC8vIEJvdW5kaW5nIGJveCBvZiBwYXJlbnQgZWxlbWVudC5cclxuICBwcml2YXRlIF9hbmNob3JCb3ghOiBET01SZWN0O1xyXG4gIHByaXZhdGUgX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogMCwgYm90dG9tOiAwIH07XHJcblxyXG4gIC8vIEN1cnJlbnRseSBhcHBsaWVkIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIGRpcmVjdGlvbnMuXHJcbiAgcHJvdGVjdGVkIHZlcnRpY2FsRGlyID0gc2lnbmFsPFZlcnREaXJXaXRoT2Zmc2V0IHwgbnVsbD4obnVsbCwge1xyXG4gICAgZXF1YWw6IGFyZVZlcnREaXJzRXF1YWwsXHJcbiAgfSk7XHJcbiAgcHJvdGVjdGVkIGhvcml6b250YWxEaXIgPSBzaWduYWw8SG9yRGlyV2l0aE9mZnNldCB8IG51bGw+KG51bGwsIHtcclxuICAgIGVxdWFsOiBhcmVIb3JEaXJzRXF1YWwsXHJcbiAgfSk7XHJcblxyXG4gIHByb3RlY3RlZCBleHBhbmRlZENoaWxkID0gc2lnbmFsPHtcclxuICAgIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtO1xyXG4gICAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlO1xyXG4gIH0gfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBzaWduYWw8J2ZpcnN0JyB8ICdsYXN0JyB8IG51bGw+KG51bGwpO1xyXG5cclxuICByZWFkb25seSBrZXlBY3Rpb25zID0ge1xyXG4gICAgW0tCX0NPREUuQVJST1cuVVBdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c1ByZXZJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLkRPV05dOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c05leHRJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlJJR0hUXTogKGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgIHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdmaXJzdCcsIFJkdE1lbnVFeHBhbmRTb3VyY2UuU2hvcnRjdXQpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuTEVGVF06ICgpID0+IHRoaXMuY2xvc2VTZWxmKCksXHJcbiAgICBbS0JfQ09ERS5IT01FXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0oMCksXHJcbiAgICBbS0JfQ09ERS5FTkRdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSh1bnRyYWNrZWQodGhpcy5pdGVtKS5pdGVtcy5sZW5ndGggLSAxKSxcclxuICAgIFtLQl9DT0RFLkVTQ0FQRV06ICgpID0+IHRoaXMuY2xvc2VTZWxmKCksXHJcbiAgICBbS0JfQ09ERS5FTlRFUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuU1BBQ0VCQVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICB9O1xyXG4gIGdldCBzZWxmRXhwYW5kU3JjKCkge1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kZWQoKSkge1xyXG4gICAgICBpZiAodGhpcy5wYXJlbnRNZW51KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50TWVudS5leHBhbmRlZENoaWxkKCk/LnNyYztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuZXhwYW5kZWRDaGlsZCgpPy5zcmM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSByZWNhbGNFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICB0aGlzLnByZWZlcnJlZEhvcml6b250YWxEaXIoKSxcclxuICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpcigpXHJcbiAgICApO1xyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBleHBhbmRlZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMuZXhwYW5kZWQoKSkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBleHBhbmRlZEZvY3VzRWZmZWN0ID0gYWZ0ZXJSZW5kZXJFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW0gPSB1bnRyYWNrZWQodGhpcy5pdGVtKTtcclxuICAgIHRoaXMuZXhwYW5kZWRJbnB1dCgpO1xyXG4gICAgY29uc3QgZXhwYW5kZWQgPSB1bnRyYWNrZWQodGhpcy5leHBhbmRlZCk7XHJcbiAgICBjb25zdCBhdXRvZm9jdXNJdGVtID0gdW50cmFja2VkKHRoaXMuYXV0b2ZvY3VzSXRlbSk7XHJcbiAgICBpZiAoZXhwYW5kZWQpIHtcclxuICAgICAgc3dpdGNoIChhdXRvZm9jdXNJdGVtKSB7XHJcbiAgICAgICAgY2FzZSBudWxsOlxyXG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oMCwgZmFsc2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZmlyc3QnOlxyXG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oMCwgdHJ1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdsYXN0JzpcclxuICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKHJvb3RJdGVtLml0ZW1zLmxlbmd0aCAtIDEsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcclxuICAgICAgdGhpcy5tZWFzdXJlQ29udGFpbmVyUGFkZGluZygpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyKCksXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpcigpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMubGlzdGVuVGFiS2V5UHJlc3MoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW5PZmZzZXRMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ubGVmdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWF4T2Zmc2V0TGVmdCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICB0aGlzLl9ib3gud2lkdGggLVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW5PZmZzZXRUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi50b3A7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1heE9mZnNldFRvcCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0IC1cclxuICAgICAgdGhpcy5fYm94LmhlaWdodCAtXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4uYm90dG9tXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApIHtcclxuICAgIGNvbnN0IGlzUm9vdCA9IHVudHJhY2tlZCh0aGlzLmlzUm9vdExldmVsKTtcclxuICAgIGNvbnN0IGhvcml6b250YWxEaXIgPSB1bnRyYWNrZWQodGhpcy5ob3Jpem9udGFsRGlyKTtcclxuICAgIGNvbnN0IHZlcnRpY2FsRGlyID0gdW50cmFja2VkKHRoaXMudmVydGljYWxEaXIpO1xyXG4gICAgdGhpcy5tZWFzdXJlQm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9ib3ggfHwgIXRoaXMuX2FuY2hvckJveCB8fCAhdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3SG9yRGlyID0gdGhpcy5nZXRSZWFsSG9yaXpvbnRhbERpcihwcmVmZXJyZWRIb3Jpem9udGFsRGlyKTtcclxuICAgIGNvbnN0IG5ld1ZlcnREaXIgPSB0aGlzLmdldFJlYWxWZXJ0aWNhbERpcihwcmVmZXJyZWRWZXJ0aWNhbERpcik7XHJcblxyXG4gICAgLy8gSG9yaXpvbnRhbCBkaXJlY3Rpb25cclxuICAgIGlmIChuZXdIb3JEaXIuZGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC5sZWZ0O1xyXG4gICAgICBpZiAoIWlzUm9vdCkge1xyXG4gICAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChuZXdIb3JEaXIuZGlyID09PSAnbGVmdCcpIHtcclxuICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcblxyXG4gICAgICBpZiAoaXNSb290KSB7XHJcbiAgICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzdHJpY3Rpb25zIGZyb20gbGVmdCBtZW51IGFuZCByaWdodCBtZW51XHJcbiAgICBuZXdIb3JEaXIubGVmdCA9IE1hdGgubWluKFxyXG4gICAgICBNYXRoLm1heCh0aGlzLmdldE1pbk9mZnNldExlZnQoKSwgbmV3SG9yRGlyLmxlZnQpLFxyXG4gICAgICB0aGlzLmdldE1heE9mZnNldExlZnQoKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBWZXJ0aWNhbCBkaXJlY3Rpb25cclxuICAgIGlmIChuZXdWZXJ0RGlyLmRpciA9PT0gJ2Rvd24nKSB7XHJcbiAgICAgIG5ld1ZlcnREaXIudG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcDtcclxuICAgICAgaWYgKGlzUm9vdCkge1xyXG4gICAgICAgIG5ld1ZlcnREaXIudG9wICs9IHRoaXMuX2FuY2hvckJveC5oZWlnaHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3VmVydERpci50b3AgLT0gdGhpcy5fY29udGFpbmVyUGFkZGluZy50b3A7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAobmV3VmVydERpci5kaXIgPT09ICd1cCcpIHtcclxuICAgICAgbmV3VmVydERpci50b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgICAgaWYgKCFpc1Jvb3QpIHtcclxuICAgICAgICBuZXdWZXJ0RGlyLnRvcCArPSB0aGlzLl9hbmNob3JCb3guaGVpZ2h0ICsgdGhpcy5fY29udGFpbmVyUGFkZGluZy50b3A7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXN0cmljdGlvbnMgZnJvbSBoZWFkZXIgYW5kIGZvb3RlclxyXG4gICAgbmV3VmVydERpci50b3AgPSBNYXRoLm1pbihcclxuICAgICAgTWF0aC5tYXgodGhpcy5nZXRNaW5PZmZzZXRUb3AoKSwgbmV3VmVydERpci50b3ApLFxyXG4gICAgICB0aGlzLmdldE1heE9mZnNldFRvcCgpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIWFyZUhvckRpcnNFcXVhbChob3Jpem9udGFsRGlyLCBuZXdIb3JEaXIpIHx8XHJcbiAgICAgICFhcmVWZXJ0RGlyc0VxdWFsKHZlcnRpY2FsRGlyLCBuZXdWZXJ0RGlyKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaG9yaXpvbnRhbERpci5zZXQobmV3SG9yRGlyKTtcclxuICAgICAgdGhpcy52ZXJ0aWNhbERpci5zZXQobmV3VmVydERpcik7XHJcbiAgICAgIHRoaXMuc2V0Q2xhc3NlcygpO1xyXG4gICAgICB0aGlzLm1lYXN1cmVCb3VuZGluZ1JlY3QoKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gIH1cclxuXHJcbiAgcmVjYWxjdWxhdGVDaGlsZHJlbigpIHtcclxuICAgIGNvbnN0IGhvcml6b250YWxEaXIgPSB1bnRyYWNrZWQodGhpcy5ob3Jpem9udGFsRGlyKTtcclxuICAgIGNvbnN0IHZlcnRpY2FsRGlyID0gdW50cmFja2VkKHRoaXMudmVydGljYWxEaXIpO1xyXG4gICAgaWYgKHRoaXMuY2hpbGRyZW4gJiYgaG9yaXpvbnRhbERpciAmJiB2ZXJ0aWNhbERpcikge1xyXG4gICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PlxyXG4gICAgICAgIGNoaWxkLnJlY2FsY3VsYXRlUG9zaXRpb24oaG9yaXpvbnRhbERpci5kaXIsIHZlcnRpY2FsRGlyLmRpcilcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbVBvaW50ZXJFbnRlcihpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgY29uc3QgZXhwYW5kZWRDaGlsZCA9IHVudHJhY2tlZCh0aGlzLmV4cGFuZGVkQ2hpbGQpO1xyXG4gICAgY29uc3Qgb3Blbk9uSG92ZXIgPSB1bnRyYWNrZWQodGhpcy50b3BMZXZlbE1lbnUub3Blbk9uSG92ZXIpO1xyXG4gICAgaWYgKG9wZW5PbkhvdmVyICYmIGV4cGFuZGVkQ2hpbGQ/LnNyYyAhPT0gUmR0TWVudUV4cGFuZFNvdXJjZS5DbGljaykge1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtLnNldChudWxsKTtcclxuICAgICAgaWYgKG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSkpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KHsgaXRlbSwgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlLkhvdmVyIH0pO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWQuc2V0KHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2V4cGFuZGVkIGNoaWxkJywgdGhpcy5leHBhbmRlZENoaWxkKTtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgY29uc3QgZXhwYW5kZWRDaGlsZCA9IHVudHJhY2tlZCh0aGlzLmV4cGFuZGVkQ2hpbGQpO1xyXG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSBtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pO1xyXG4gICAgY29uc3Qgb3Blbk9uSG92ZXIgPSB0aGlzLnRvcExldmVsTWVudS5vcGVuT25Ib3ZlcigpO1xyXG4gICAgaWYgKFxyXG4gICAgICAoaGFzQ2hpbGRyZW4gJiYgZXhwYW5kZWRDaGlsZD8uaXRlbSAhPT0gaXRlbSkgfHxcclxuICAgICAgKG9wZW5PbkhvdmVyICYmIGV4cGFuZGVkQ2hpbGQ/LnNyYyA9PT0gUmR0TWVudUV4cGFuZFNvdXJjZS5Ib3ZlcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtLnNldChudWxsKTtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldCh7IGl0ZW0sIHNyYzogUmR0TWVudUV4cGFuZFNvdXJjZS5DbGljayB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICB9XHJcbiAgICAvLyBDb3VsZCBhbHNvIGxpc3RlbiB0byByb3V0ZXIgZXZlbnRzLCBidXQgbWlnaHQgYmUgdHJpZ2dlcmVkIGJ5XHJcbiAgICAvLyBjaGlsZCByb3V0ZXIgbmF2aWdhdGlvbi5cclxuICAgIGlmICghaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xvc2VTdWJtZW51cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpdGVtLmNvbW1hbmQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgaXRlbS5jb21tYW5kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZva2VJdGVtQ2xpY2soaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGlmIChtZW51SXRlbUhhc1JvdXRlKGl0ZW0pICYmIGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShpdGVtLnJvdXRlckxpbmspO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkl0ZW1DbGljayhpdGVtKTtcclxuICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0uc2V0KCdmaXJzdCcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGRSb3V0ZXMoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIHJldHVybiB0aGlzLnRvcExldmVsTWVudS5nZXRDaGlsZFJvdXRlcyhpdGVtKTtcclxuICB9XHJcblxyXG4gIGNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdGhpcy5leHBhbmRlZENoaWxkKCk7XHJcbiAgICBpZiAoZm9jdXNFeHBhbmRlZCAmJiBleHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGV4cGFuZGVkQ2hpbGQuaXRlbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGZvY3VzSXRlbVJlY3Vyc2l2ZWx5KHBhdGg6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gWy4uLnBhdGhdO1xyXG4gICAgY29uc3QgdGhpc0l0ZW0gPSBjaGlsZHJlbi5zaGlmdCgpITtcclxuXHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtLnNldChudWxsKTtcclxuICAgIHRoaXMuYXV0b2ZvY3VzSXRlbS5zZXQobnVsbCk7XHJcblxyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5leHBhbmRBbmRHZXRDaGlsZCh0aGlzSXRlbSwgUmR0TWVudUV4cGFuZFNvdXJjZS5Gb2N1cylcclxuICAgICAgICAucGlwZShkZWxheSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChvdmVybGF5KSA9PiB7XHJcbiAgICAgICAgICBvdmVybGF5LmZvY3VzSXRlbVJlY3Vyc2l2ZWx5KGNoaWxkcmVuKTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZpcnN0IGZvY3VzIHRoZSBjb3JyZWN0IGl0ZW0gYmVjYXVzZSBzdWJtZW51IG1pZ2h0IGhhdmUgZm9jdXMgb24gaXQuXHJcbiAgICAgIC8vIFJlbW92aW5nIGZvY3VzZWQgZWxlbWVudCBmcm9tIERPTSByZXN1bHRzIGluIHdpbmRvdzpmb2N1c291dCBldmVudFxyXG4gICAgICAvLyBhbmQgdGhhdCBjbG9zZXMgYWxsIG1lbnVzXHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKTtcclxuICAgICAgLy8gTm93IGNsb3NlIHN1Ym1lbnVzIGFuZCB0aGVyZWZvcmUgcmVtb3ZlIHRoZW0gZnJvbSBET01cclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICAgIC8vIFdhaXQgdW50aWwgdGhleSBhcmUgcmVtb3ZlZCBhbmQgZm9jdXMgdGhlIGNvcnJlY3QgaXRlbSBhZ2FpblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKSwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZEFuZEdldENoaWxkKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtLCBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2UpIHtcclxuICAgIGNvbnN0IHJvb3RJdGVtID0gdW50cmFja2VkKHRoaXMuaXRlbSk7XHJcbiAgICBpZiAocm9vdEl0ZW0uaXRlbXMuaW5kZXhPZihpdGVtKSA8IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdBdHRlbXB0aW5nIHRvIGV4cGFuZCBpdGVtIHRoYXQgaXMgbm90IGNoaWxkIGl0ZW0gb2YgdGhpcy5pdGVtJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRlZENoaWxkLnNldCh7IGl0ZW0sIHNyYyB9KTtcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiB1bnRyYWNrZWQoY2hpbGQuaXRlbSkgPT09IGl0ZW0pO1xyXG4gICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgIHJldHVybiBvZihjaGlsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgbWFwKCgpID0+XHJcbiAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiB1bnRyYWNrZWQoY2hpbGQuaXRlbSkgPT09IGl0ZW0pXHJcbiAgICAgICAgKSxcclxuICAgICAgICBmaXJzdChSZHRPYmplY3RVdGlscy5ub3ROdWxsR3VhcmQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGl0ZW1JbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW0gPSB1bnRyYWNrZWQodGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IGhhc0FjdGlvbiA9IGV2ZW50LmNvZGUgaW4gdGhpcy5rZXlBY3Rpb25zO1xyXG4gICAgY29uc3QgaXNMZXR0ZXIgPVxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc0FscGhhYmV0Q2hhcmFjdGVyKGV2ZW50LmtleSkgfHxcclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNOdW1lcmljQ2hhcmFjdGVyKGV2ZW50LmtleSk7XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbiB8fCBpc0xldHRlcikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGhhc0FjdGlvbikge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMua2V5QWN0aW9uc1tldmVudC5jb2RlXShpdGVtSW5kZXgpO1xyXG4gICAgfSBlbHNlIGlmIChpc0xldHRlcikge1xyXG4gICAgICBjb25zdCBuZXh0ID0gZmluZE5leHRJdGVtV2l0aFByZWZpeChyb290SXRlbS5pdGVtcywgaXRlbUluZGV4LCBldmVudC5rZXkpO1xyXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uVGFiS2V5UHJlc3MoZXZlbnQ6IFJkdFNob3J0Y3V0RXZlbnQpIHtcclxuICAgIC8vIERvIG5vdCBwcmV2ZW50IGRlZmF1bHQgdG8gY29ycmVjdGx5IHN3aXRjaCB0byBwcmV2aW91cyBlbGVtZW50XHJcbiAgICBldmVudC5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy8gV2FpdCBmb3IgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB0byBzd2l0Y2ggdG8gbmV3IGVsZW1lbnRcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVNlbGYoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52b2tlSXRlbUNsaWNrQnlJbmRleChpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW0gPSB1bnRyYWNrZWQodGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IGl0ZW0gPSByb290SXRlbS5pdGVtc1tpdGVtSW5kZXhdO1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaW52b2tlSXRlbUNsaWNrKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0l0ZW0oaXRlbTogbnVtYmVyIHwgUGFyc2VkUmR0TWVudUl0ZW0sIHZpc2libGVGb2N1cyA9IHRydWUpIHtcclxuICAgIGxldCBpdGVtSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtSW5kZXggPSB0aGlzLml0ZW0oKS5pdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmJsdXJBbGxGb2N1c2FibGUoKTtcclxuICAgICAgdGhpcy5mb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXgsIHZpc2libGVGb2N1cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJsdXJBbGxGb2N1c2FibGUoKSB7XHJcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsKSA9PlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlciwgdmlzaWJsZUZvY3VzOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBlbFJlZiA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZ2V0KGl0ZW1JbmRleCk7XHJcbiAgICBpZiAoZWxSZWYpIHtcclxuICAgICAgaWYgKHZpc2libGVGb2N1cykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxSZWYubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c05leHRJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCByb290SXRlbSA9IHVudHJhY2tlZCh0aGlzLml0ZW0pO1xyXG4gICAgY29uc3QgbmV4dCA9IChpdGVtSW5kZXggKyAxKSAlIHJvb3RJdGVtLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c1ByZXZJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCByb290SXRlbSA9IHVudHJhY2tlZCh0aGlzLml0ZW0pO1xyXG4gICAgY29uc3QgcHJldiA9XHJcbiAgICAgIChpdGVtSW5kZXggLSAxICsgcm9vdEl0ZW0uaXRlbXMubGVuZ3RoKSAlIHJvb3RJdGVtLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKHByZXYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuU3VibWVudShcclxuICAgIGl0ZW1JbmRleDogbnVtYmVyLFxyXG4gICAgdmlzaWJsZUZvY3VzOiAnZmlyc3QnIHwgJ2xhc3QnLFxyXG4gICAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlXHJcbiAgKSB7XHJcbiAgICBjb25zdCByb290SXRlbSA9IHVudHJhY2tlZCh0aGlzLml0ZW0pO1xyXG4gICAgaWYgKFxyXG4gICAgICBpdGVtSW5kZXggPCByb290SXRlbS5pdGVtcy5sZW5ndGggJiZcclxuICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbihyb290SXRlbS5pdGVtc1tpdGVtSW5kZXhdKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQoeyBpdGVtOiByb290SXRlbS5pdGVtc1tpdGVtSW5kZXhdLCBzcmMgfSk7XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0uc2V0KHZpc2libGVGb2N1cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVNlbGYoZm9jdXNFeHBhbmRlZCA9IHRydWUpIHtcclxuICAgIGlmICh0aGlzLnBhcmVudE1lbnUpIHtcclxuICAgICAgdGhpcy5wYXJlbnRNZW51LmNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmZvY3Vzb3V0JywgWyckZXZlbnQnXSlcclxuICBwcml2YXRlIGNoZWNrQWN0aXZlRWxlbWVudChldmVudDogRm9jdXNFdmVudCkge1xyXG4gICAgY29uc3QgY2xvc2VPbkZvY3VzT3V0ID0gdW50cmFja2VkKHRoaXMudG9wTGV2ZWxNZW51LmNsb3NlT25Gb2N1c091dCk7XHJcbiAgICBpZiAoY2xvc2VPbkZvY3VzT3V0ICYmICF0aGlzLnRvcExldmVsTWVudS5vcGVuT25Ib3Zlcikge1xyXG4gICAgICBjb25zdCB0aGlzRWwgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XHJcbiAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fCAhdGhpc0VsLmNvbnRhaW5zKHRhcmdldCkpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDYWxjdWxhdGVzIGRpcmVjdGlvbiBvZiB0aGlzIG1lbnUgYW5kIG9mZnNldCBpbiBjYXNlXHJcbiAgLy8gbWVudSB3b24ndCBmaXQgaW4gbGVmdCBub3IgcmlnaHQgb2YgcGFyZW50IG1lbnUuXHJcbiAgcHJpdmF0ZSBnZXRSZWFsSG9yaXpvbnRhbERpcihcclxuICAgIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb25cclxuICApOiBIb3JEaXJXaXRoT2Zmc2V0IHtcclxuICAgIGNvbnN0IGlzUm9vdCA9IHVudHJhY2tlZCh0aGlzLmlzUm9vdExldmVsKTtcclxuICAgIGxldCBsZWZ0OiBudW1iZXI7XHJcbiAgICBsZXQgcmlnaHQ6IG51bWJlcjtcclxuICAgIC8vIFRoaXMgbWVudSBpcyBkaXJlY3RseSB1bmRlciBtZW51YmFyXHJcbiAgICBpZiAoaXNSb290KSB7XHJcbiAgICAgIGxlZnQgPSB0aGlzLl9hbmNob3JCb3gucmlnaHQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICAgIHJpZ2h0ID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgICAodGhpcy5fYW5jaG9yQm94LmxlZnQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTWVudSBpcyBuZXN0ZWRcclxuICAgICAgcmlnaHQgPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICAgICh0aGlzLl9hbmNob3JCb3gucmlnaHQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgICBsZWZ0ID0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgbGVmdCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICByaWdodCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0O1xyXG5cclxuICAgIGlmIChwcmVmZXJyZWRIb3Jpem9udGFsRGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIC8vIFdlIHVzZSBwcmVmZXJyZWQgaWYgcG9zc2libGUuXHJcbiAgICAgIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gVGhlbiB0aGUgb3RoZXIgb25lLlxyXG4gICAgICB9IGVsc2UgaWYgKGxlZnQgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gRWRnZSBjYXNlIGlmIG5laXRoZXIgZGlyZWN0aW9uIGNhbiBiZSB1c2VkICh1bHRyYSBuYXJyb3cgc2NyZWVuKS5cclxuICAgICAgICAvLyBDaG9vc2UgZGlyZWN0aW9uIHRoYXQgY292ZXJzIGxlYXN0IG9mIHBhcmVudCBtZW51LlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE5hcnJvd1NjcmVlbkhvcml6b250YWxEaXIobGVmdCwgcmlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobGVmdCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFycm93U2NyZWVuSG9yaXpvbnRhbERpcihsZWZ0LCByaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZpbmRzIG91dCB3aGVyZSB0byBwdXQgbWVudSBpbiBjYXNlIHNjcmVlbiBpcyB0b28gbmFycm93IGZvciB0d28gbWVudXNcclxuICAvLyB0byBmaXQgbmV4dCB0byBlYWNoIG90aGVyLiBNaW5pbWl6ZXMgYXJlYSBvZiBwYXJlbnQgbWVudSBjb3ZlcmVkIGJ5IHRoaXMuXHJcbiAgcHJpdmF0ZSBnZXROYXJyb3dTY3JlZW5Ib3Jpem9udGFsRGlyKFxyXG4gICAgbGVmdDogbnVtYmVyLFxyXG4gICAgcmlnaHQ6IG51bWJlclxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgY29uc3Qgc2NyZWVuU3RhcnQgPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICBjb25zdCBzY3JlZW5FbmQgPVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodDtcclxuICAgIGNvbnN0IHNjcmVlbkNlbnRlciA9IChzY3JlZW5TdGFydCAtIHNjcmVlbkVuZCkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGxlZnRTdGFydCA9IE1hdGgubWF4KHRoaXMuX2FuY2hvckJveC5sZWZ0LCBzY3JlZW5TdGFydCk7XHJcbiAgICBjb25zdCBsZWZ0RW5kID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMuX2FuY2hvckJveC5sZWZ0ICsgdGhpcy5fYW5jaG9yQm94LndpZHRoLFxyXG4gICAgICBzY3JlZW5DZW50ZXJcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmlnaHRTdGFydCA9IE1hdGgubWF4KHNjcmVlbkNlbnRlciwgbGVmdEVuZCk7XHJcbiAgICBjb25zdCByaWdodEVuZCA9IE1hdGgubWluKFxyXG4gICAgICB0aGlzLl9hbmNob3JCb3gubGVmdCArIHRoaXMuX2FuY2hvckJveC53aWR0aCxcclxuICAgICAgc2NyZWVuRW5kXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChsZWZ0RW5kIC0gbGVmdFN0YXJ0ID4gcmlnaHRFbmQgLSByaWdodFN0YXJ0KSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ3JpZ2h0JywgbGVmdDogcmlnaHQgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAtbGVmdCB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWFsVmVydGljYWxEaXIoXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApOiBWZXJ0RGlyV2l0aE9mZnNldCB7XHJcbiAgICBjb25zdCBpc1Jvb3QgPSB1bnRyYWNrZWQodGhpcy5pc1Jvb3RMZXZlbCk7XHJcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XHJcbiAgICBsZXQgdG9wOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKGlzUm9vdCkge1xyXG4gICAgICBib3R0b20gPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0ICtcclxuICAgICAgICB0aGlzLl9hbmNob3JCb3guYm90dG9tIC1cclxuICAgICAgICB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICB0b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJvdHRvbSA9XHJcbiAgICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS5oZWlnaHQgLVxyXG4gICAgICAgIHRoaXMuX2FuY2hvckJveC50b3AgLVxyXG4gICAgICAgIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICAgIHRvcCA9IHRoaXMuX2FuY2hvckJveC5ib3R0b20gLSB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHRvcCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnRvcDtcclxuICAgIGJvdHRvbSAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmJvdHRvbTtcclxuXHJcbiAgICBpZiAocHJlZmVycmVkVmVydGljYWxEaXIgPT09ICdkb3duJykge1xyXG4gICAgICBpZiAoYm90dG9tID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdkb3duJywgdG9wOiAwIH07XHJcbiAgICAgIH0gZWxzZSBpZiAodG9wID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICd1cCcsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogcHJlZmVycmVkVmVydGljYWxEaXIsIHRvcDogMCB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodG9wID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICd1cCcsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKGJvdHRvbSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnZG93bicsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogcHJlZmVycmVkVmVydGljYWxEaXIsIHRvcDogMCB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNZWFzdXJlcyBib3VuZGluZyByZWN0IG9mIHRoaXMgYW5kIG9mZnNldCBjb250YWluZXJcclxuICAvLyBTaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBhZnRlciBwYXJlbnQgbWVudSBoYXMgYWxyZWFkeSBiZWVuIG1lYXN1cmVkLlxyXG4gIHByaXZhdGUgbWVhc3VyZUJvdW5kaW5nUmVjdCgpIHtcclxuICAgIHRoaXMuX2JveCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuYW5jaG9yRWxlbWVudCgpO1xyXG4gICAgdGhpcy5fYW5jaG9yQm94ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZWFzdXJlQ29udGFpbmVyUGFkZGluZygpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShcclxuICAgICAgdGhpcy5tZW51SXRlbUNvbnRhaW5lci5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZXMucGFkZGluZ1RvcCk7XHJcbiAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5wYWRkaW5nQm90dG9tKTtcclxuICAgIHRoaXMuX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogcGFkZGluZ1RvcCwgYm90dG9tOiBwYWRkaW5nQm90dG9tIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENsYXNzZXMoKSB7XHJcbiAgICBjb25zdCBpc1Jvb3QgPSB0aGlzLmlzUm9vdExldmVsKCk7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbCA9IHRoaXMudmVydGljYWxEaXIoKTtcclxuICAgIGNvbnN0IGhvcml6b250YWwgPSB0aGlzLmhvcml6b250YWxEaXIoKTtcclxuICAgIGlmICh2ZXJ0aWNhbCkge1xyXG4gICAgICBpZiAodmVydGljYWwuZGlyID09PSAndXAnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktdXAnKTtcclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtb3ZlcmxheS1kb3duJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktdXAnKTtcclxuICAgICAgICB0aGlzLnNldENsYXNzKCdyZHQtb3ZlcmxheS1kb3duJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRPZmZzZXQoJ3RvcCcsIHZlcnRpY2FsLnRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhvcml6b250YWwpIHtcclxuICAgICAgaWYgKGhvcml6b250YWwuZGlyID09PSAnbGVmdCcpIHtcclxuICAgICAgICB0aGlzLnNldENsYXNzKCdyZHQtb3ZlcmxheS1sZWZ0Jyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktcmlnaHQnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtb3ZlcmxheS1sZWZ0Jyk7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktcmlnaHQnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldE9mZnNldCgnbGVmdCcsIGhvcml6b250YWwubGVmdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzUm9vdCkge1xyXG4gICAgICB0aGlzLnNldENsYXNzKCdyZHQtbWVudS1yb290Jyk7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1tZW51LXN1YicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW1lbnUtcm9vdCcpO1xyXG4gICAgICB0aGlzLnNldENsYXNzKCdyZHQtbWVudS1zdWInKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVDbGFzcyhjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE9mZnNldChkaXJlY3Rpb246ICd0b3AnIHwgJ2xlZnQnLCB2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgZGlyZWN0aW9uLCBgJHt2YWx1ZX1weGApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5UYWJLZXlQcmVzcygpIHtcclxuICAgIGNvbnN0IHNoaWZ0VGFiID0gUmR0U2hvcnRjdXQuY3JlYXRlVW5zYWZlKCdzaGlmdCcsICd0YWInKTtcclxuICAgIGNvbnN0IHRhYiA9IFJkdFNob3J0Y3V0LmNyZWF0ZVVuc2FmZSgndGFiJyk7XHJcbiAgICB0aGlzLnNob3J0Y3V0U2VydmljZVxyXG4gICAgICAubGlzdGVuKFt0YWIsIHNoaWZ0VGFiXSwge1xyXG4gICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5vblRhYktleVByZXNzKGV2ZW50KSk7XHJcbiAgfVxyXG59XHJcbiIsIjx1bCBjbGFzcz1cIm1lbnUtaXRlbS1jb250YWluZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgI21lbnVJdGVtQ29udGFpbmVyPlxyXG4gIEBmb3IoaXRlbSBvZiBpdGVtKCkuaXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XHJcbiAgPGxpXHJcbiAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgIChyZHRLZXlMaXN0ZW5lcik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXHJcbiAgICAocG9pbnRlcmVudGVyKT1cIm9uSXRlbVBvaW50ZXJFbnRlcihpdGVtKVwiXHJcbiAgICByZHRBbnlSb3V0ZUFjdGl2ZT1cIm1lbnUtaXRlbS1yb3V0ZS1hY3RpdmVcIlxyXG4gICAgW3dhdGNoZWRSb3V0ZXNdPVwiZ2V0Q2hpbGRSb3V0ZXMoaXRlbSlcIlxyXG4gICAgI2FuY2hvckVsXHJcbiAgPlxyXG4gICAgQGlmKCFpdGVtLnJvdXRlckxpbmsgJiYgIWl0ZW0uZXh0ZXJuYWxMaW5rKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIml0ZW0uaXRlbXMgPyAnbWVudScgOiBudWxsXCJcclxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkKCk/Lml0ZW1cIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgQGlmIChpdGVtLnNob3J0Y3V0KSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWl0ZW0tc2hvcnRjdXRcIj5cclxuICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaXRlbXNcIlxyXG4gICAgICAgICAgICBuYW1lPVwiY2hldnJvbl9yaWdodFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAtLT5cclxuICAgICAgICBAaWYgKGl0ZW0uaXRlbXMpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaXRlbS1pY29uIHJkdC1tZW51LWljb24tcmlnaHRcIj48L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlua0JvZHkgbGV0LWl0ZW0+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0tcmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgIEBpZihpdGVtLnNob3J0Y3V0KSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWl0ZW0tc2hvcnRjdXRcIj5cclxuICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgQGlmIChpdGVtLnJvdXRlckxpbmspIHtcclxuICAgIDxhXHJcbiAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxyXG4gICAgICBbcXVlcnlQYXJhbXNdPVwiaXRlbS5xdWVyeVBhcmFtc1wiXHJcbiAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAvPlxyXG4gICAgPC9hPlxyXG4gICAgfSBAaWYgKGl0ZW0uZXh0ZXJuYWxMaW5rKSB7XHJcbiAgICA8YVxyXG4gICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICBjbGFzcz1cIm1lbnUtaXRlbS1jb250ZW50XCJcclxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgW2hyZWZdPVwiaXRlbS5leHRlcm5hbExpbmtcIlxyXG4gICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcclxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgLz5cclxuICAgIDwvYT5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIENoaWxkIG1lbnVzIGV4aXN0IG9ubHkgaWYgdGhpcyBtZW51IGlzIGV4cGFuZGVkLiAtLT5cclxuICAgIDwhLS0gT25seSBvbmUgaW52aXNpYmxlIGxldmVsIGlzIGFsd2F5cyBhdHRhY2hlZCB0byBET00sIHRoZSByZXN0IGRvZXMgbm90IGV4aXN0LiAtLT5cclxuICAgIEBpZiAoaXRlbS5pdGVtcyAmJiBleHBhbmRlZCgpKSB7XHJcbiAgICA8cmR0LW1lbnUtb3ZlcmxheVxyXG4gICAgICBbaXRlbV09XCIkYW55KGl0ZW0pXCJcclxuICAgICAgW2V4cGFuZGVkXT1cIml0ZW0gPT09IGV4cGFuZGVkQ2hpbGQoKT8uaXRlbVwiXHJcbiAgICAgIFthdXRvZm9jdXNJdGVtXT1cImF1dG9mb2N1c1N1Ym1lbnVJdGVtKClcIlxyXG4gICAgICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJob3Jpem9udGFsRGlyKCk/LmRpciFcIlxyXG4gICAgICBbcHJlZmVycmVkVmVydGljYWxEaXJdPVwidmVydGljYWxEaXIoKT8uZGlyIVwiXHJcbiAgICAgIFtsZXZlbF09XCJsZXZlbCgpICsgMVwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgICB9XHJcbiAgPC9saT5cclxuICB9XHJcbjwvdWw+XHJcbiJdfQ==","import { DOCUMENT } from '@angular/common';\nimport { afterNextRender, booleanAttribute, ChangeDetectorRef, computed, DestroyRef, Directive, effect, ElementRef, EnvironmentInjector, inject, input, numberAttribute, QueryList, Renderer2, signal, untracked, ViewChildren, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal, } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { RdtRouterService } from '@ngrdt/router';\nimport { RdtShortcutService } from '@ngrdt/shortcuts';\nimport { KB_CODE, RdtStringUtils, } from '@ngrdt/utils';\nimport { animationFrameScheduler, fromEvent, map, switchMap, throttleTime, withLatestFrom, } from 'rxjs';\nimport { RdtMenuOverlayComponent } from '../menu-overlay/rdt-menu-overlay.component';\nimport { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME, RDT_MENU_MARGIN_LEFT_PROPERTY_NAME, RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME, RDT_MENU_MARGIN_TOP_PROPERTY_NAME, RdtMenuShortcutMode, } from '../models';\nimport { RdtMenuExpandSource, } from '../private-models';\nimport { findNextItemWithPrefix, FOCUS_VISIBLE, getChildRoutesMap, getMenuItemsShortcuts, menuItemHasChildren, menuItemHasRoute, } from '../utils';\nimport * as i0 from \"@angular/core\";\nexport class RdtMenuBaseComponent {\n preferredVerticalDir = input(DEFAULT_MENU_VERTICAL_DIR);\n preferredHorizontalDir = input(DEFAULT_MENU_HORIZONTAL_DIR);\n // Mode only matters if item has shortcut and only children, no command nor routerLink\n // FOCUS_ITEM will put focus on item with shortcut\n // OPEN_SUBMENU will open its submenu and put focus on the first item in it\n // If item has command or routerLink, it will always be activated and everything closed\n shortcutMode = input(RdtMenuShortcutMode.OPEN_SUBMENU);\n closeOnFocusOut = input(false, { transform: booleanAttribute });\n openOnHover = input(false, { transform: booleanAttribute });\n hitboxMargin = input(10, { transform: numberAttribute });\n cd = inject(ChangeDetectorRef);\n destroyRef = inject(DestroyRef);\n rdtRouter = inject(RdtRouterService);\n elRef = inject(ElementRef);\n document = inject(DOCUMENT);\n renderer = inject(Renderer2);\n router = inject(Router);\n shortcutService = inject(RdtShortcutService);\n injector = inject(EnvironmentInjector);\n children;\n focusableElements;\n expandedChild = signal(null);\n autofocusSubmenuItem = null;\n filteredItems = computed(() => {\n this.navigationEnd();\n const items = this.allParsedItems();\n const current = this.rdtRouter.parseAbsoluteUrl();\n if (!current) {\n return items;\n }\n else {\n return this.filterRec(items, current);\n }\n });\n get clientSize() {\n return this._clientSize;\n }\n _clientSize;\n get bodyMargin() {\n return this._bodyMargin;\n }\n _bodyMargin;\n get buttonContainerRect() {\n return this._buttonContainerRect;\n }\n _buttonContainerRect;\n childRoutesMap = computed(() => getChildRoutesMap(this.filteredItems()));\n keyActions = {\n [KB_CODE.ARROW.LEFT]: (index) => this.focusPrevItem(index),\n [KB_CODE.ARROW.RIGHT]: (index) => this.focusNextItem(index),\n [KB_CODE.ARROW.DOWN]: (index) => this.openSubmenu(index, 'first', RdtMenuExpandSource.Shortcut),\n [KB_CODE.ARROW.UP]: (index) => this.openSubmenu(index, 'last', RdtMenuExpandSource.Shortcut),\n [KB_CODE.HOME]: () => this.focusItem(0),\n [KB_CODE.END]: () => this.focusItem(untracked(this.filteredItems).length - 1),\n [KB_CODE.ENTER]: (index) => this.invokeItemClickByIndex(index),\n [KB_CODE.SPACEBAR]: (index) => this.invokeItemClickByIndex(index),\n };\n navigationEnd = toSignal(this.rdtRouter.navigationEnd$);\n // Returns all routes asociated with item or its subitems.\n getChildRoutes(item) {\n return this.childRoutesMap().get(item) ?? [];\n }\n constructor() {\n this.listenShortcuts();\n afterNextRender(() => {\n this.listenWindowResize();\n this.measure();\n this.recalculateChildren();\n });\n }\n recalcChildrenEffect = effect(() => {\n this.recalculateChildren();\n });\n recalculateChildren() {\n if (this.children) {\n this.children.forEach((child) => {\n child.recalculatePosition(this.preferredHorizontalDir(), this.preferredVerticalDir());\n });\n }\n }\n closeSubmenus(focusExpanded = false) {\n const expandedChild = untracked(this.expandedChild);\n if (focusExpanded && expandedChild) {\n this.focusItem(expandedChild.item);\n }\n this.expandedChild.set(null);\n this.cd.markForCheck();\n }\n onItemClick(item) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.openOnHover);\n if ((menuItemHasChildren(item) && expandedChild?.item !== item) ||\n (openOnHover && expandedChild?.src === RdtMenuExpandSource.Hover)) {\n this.autofocusSubmenuItem = null;\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Click });\n }\n else {\n this.expandedChild.set(null);\n }\n if (typeof item.command === 'function') {\n item.command();\n }\n }\n onItemPointerEnter(item) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.openOnHover);\n if (openOnHover) {\n if (menuItemHasChildren(item) &&\n expandedChild?.src !== RdtMenuExpandSource.Click) {\n this.autofocusSubmenuItem = null;\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Hover });\n }\n else {\n this.expandedChild.set(null);\n }\n }\n }\n onKeyDown(itemIndex, event) {\n const hasAction = event.code in this.keyActions;\n const isLetter = RdtStringUtils.isAlphabetCharacter(event.key) ||\n RdtStringUtils.isNumericCharacter(event.key);\n if (hasAction || isLetter) {\n event.preventDefault();\n }\n if (hasAction) {\n event.stopPropagation();\n }\n if (hasAction) {\n this.keyActions[event.code](itemIndex);\n }\n else if (isLetter) {\n const filteredItems = untracked(this.filteredItems);\n const next = findNextItemWithPrefix(filteredItems, itemIndex, event.key);\n if (next !== null) {\n this.focusItem(next);\n }\n }\n }\n invokeItemClick(item) {\n if (menuItemHasRoute(item) && item.routerLink) {\n this.router.navigate(item.routerLink);\n }\n this.onItemClick(item);\n this.autofocusSubmenuItem = 'first';\n }\n filterRec(items, current) {\n let currentParent = current.route;\n const currentParams = current.params;\n const filtered = items.filter((item) => {\n if (!item.requiredParent) {\n return true;\n }\n const required = item.requiredParent;\n while (currentParent.absolutePath !== required.absolutePath) {\n currentParent = currentParent.parent;\n if (!currentParent) {\n return false;\n }\n }\n let requiredParent = required;\n do {\n const path = requiredParent.absolutePath;\n if (path in currentParams) {\n for (const key in requiredParent.staticParams) {\n if (currentParams[path][key] !== requiredParent.staticParams[key]) {\n return false;\n }\n }\n }\n requiredParent = requiredParent.parent;\n } while (requiredParent);\n return true;\n });\n return filtered.map((item) => {\n if (item.items) {\n return {\n ...item,\n items: this.filterRec(item.items, current),\n };\n }\n else {\n return item;\n }\n });\n }\n invokeItemClickByIndex(itemIndex) {\n const filteredItems = untracked(this.filteredItems);\n const item = filteredItems[itemIndex];\n if (!item) {\n return;\n }\n this.invokeItemClick(item);\n }\n openSubmenu(itemIndex, visibleFocus, src) {\n const filteredItems = untracked(this.filteredItems);\n if (itemIndex < filteredItems.length &&\n menuItemHasChildren(filteredItems[itemIndex])) {\n const item = filteredItems[itemIndex];\n this.autofocusSubmenuItem = visibleFocus;\n this.expandedChild.set({ item, src });\n }\n }\n focusItem(item) {\n const filteredItems = untracked(this.filteredItems);\n let itemIndex;\n if (typeof item === 'number') {\n itemIndex = item;\n }\n else {\n itemIndex = filteredItems.indexOf(item);\n }\n if (itemIndex >= 0 && itemIndex < this.focusableElements.length) {\n this.blurAllFocusable();\n this.focusFocusable(itemIndex);\n }\n }\n focusNextItem(itemIndex) {\n const filteredItems = untracked(this.filteredItems);\n const next = (itemIndex + 1) % filteredItems.length;\n this.focusItem(next);\n }\n focusPrevItem(itemIndex) {\n const filteredItems = untracked(this.filteredItems);\n const prev = (itemIndex - 1 + filteredItems.length) % filteredItems.length;\n this.focusItem(prev);\n }\n blurAllFocusable() {\n this.focusableElements.forEach((el) => this.renderer.removeClass(el.nativeElement, FOCUS_VISIBLE));\n }\n focusFocusable(itemIndex) {\n const elRef = this.focusableElements.get(itemIndex);\n if (elRef) {\n this.renderer.addClass(elRef.nativeElement, FOCUS_VISIBLE);\n elRef.nativeElement.focus();\n }\n }\n onPointerMove(event) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.openOnHover);\n if (openOnHover && expandedChild) {\n const hitboxes = this.getHitboxes();\n const isInside = hitboxes.some((hitbox) => this.isPointerInsideHitbox(hitbox.rect, event));\n for (let i = hitboxes.length - 1; i >= 0; i--) {\n const hitbox = hitboxes[i];\n if (!hitbox.fixed && !isInside) {\n hitbox.close();\n break;\n }\n }\n }\n }\n // Closes menu if user navigates outside it using Tab.\n checkActiveElement(event) {\n const closeOnFocusOut = untracked(this.closeOnFocusOut);\n if (closeOnFocusOut && !this.openOnHover) {\n const thisEl = this.elRef.nativeElement;\n const target = event.relatedTarget;\n if (!(target instanceof HTMLElement) || !thisEl.contains(target)) {\n this.expandedChild.set(null);\n }\n }\n }\n onDocumentClick(event) {\n const target = event.target;\n const elRef = this.elRef.nativeElement;\n if (!elRef.contains(target)) {\n this.closeSubmenus();\n }\n }\n measure() {\n this.measureButtonContainer();\n this.measureClientSize();\n this.readMargin();\n }\n readMargin() {\n const computedStyle = getComputedStyle(this.elRef.nativeElement);\n const topVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_TOP_PROPERTY_NAME);\n const bottomVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME);\n const leftVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_LEFT_PROPERTY_NAME);\n const rightVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME);\n this._bodyMargin = {\n top: parseInt(topVal) || 0,\n bottom: parseInt(bottomVal) || 0,\n left: parseInt(leftVal) || 0,\n right: parseInt(rightVal) || 0,\n };\n }\n measureClientSize() {\n this._clientSize = {\n width: this.document.body.clientWidth,\n height: this.document.body.clientHeight,\n };\n }\n measureButtonContainer() {\n const el = this.buttonContainer;\n if (el) {\n this._buttonContainerRect = el.getBoundingClientRect();\n }\n else {\n this._buttonContainerRect = undefined;\n }\n }\n listenWindowResize() {\n fromEvent(window, 'resize')\n .pipe(throttleTime(0, animationFrameScheduler, { trailing: true }), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.measure();\n this.recalculateChildren();\n });\n }\n listenShortcuts() {\n const filteredItems$ = toObservable(this.filteredItems);\n const itemsWithShortcuts$ = filteredItems$.pipe(map(getMenuItemsShortcuts));\n const shortcuts$ = itemsWithShortcuts$.pipe(map((items) => items.map((it) => it.shortcut)));\n const map$ = itemsWithShortcuts$.pipe(map((items) => this.getShortcutMap(items)));\n shortcuts$\n .pipe(switchMap((shortcuts) => this.shortcutService.listen(shortcuts)), withLatestFrom(map$), takeUntilDestroyed(this.destroyRef))\n .subscribe(([evt, map]) => this.onShortcut(evt.shortcut, map));\n }\n getShortcutMap(itemsWithShortcuts) {\n const shortcutMap = {};\n itemsWithShortcuts.forEach((item) => {\n shortcutMap[item.shortcut.hotkeysValue] = item.path;\n });\n return shortcutMap;\n }\n onShortcut(shortcut, map) {\n const path = map[shortcut.hotkeysValue];\n if (!path) {\n console.warn(`Menu shortcut ${shortcut.hotkeysValue} was detected, but there is no path associated with it.`, map);\n }\n const last = path[path.length - 1];\n const hasRoute = menuItemHasRoute(last);\n const hasCommand = typeof last.command === 'function';\n if (hasRoute || hasCommand) {\n this.closeSubmenus(false);\n if (hasCommand) {\n last.command();\n }\n if (hasRoute) {\n this.router.navigate(last.routerLink);\n }\n }\n else {\n this.activateItemRecursively(path, RdtMenuExpandSource.Shortcut);\n }\n }\n activateItemRecursively(path, src) {\n const shortcutMode = untracked(this.shortcutMode);\n const children = [...path];\n if (shortcutMode === RdtMenuShortcutMode.OPEN_SUBMENU) {\n const last = children[children.length - 1];\n if (menuItemHasChildren(last) && last.items[0]) {\n children.push(last.items[0]);\n }\n }\n const thisItem = children.shift();\n if (children.length > 0) {\n this.expandedChild.set({ item: thisItem, src });\n const overlay = this.children.find((child) => untracked(child.item) === thisItem);\n overlay.focusItemRecursively(children);\n }\n else {\n this.expandedChild.set(null);\n this.focusItem(thisItem);\n }\n }\n isPointerInsideHitbox(hitbox, event) {\n const rect = hitbox;\n const x = event.clientX;\n const y = event.clientY;\n const margin = untracked(this.hitboxMargin);\n return (x >= rect.left - margin &&\n x <= rect.right + margin &&\n y >= rect.top - margin &&\n y <= rect.bottom + margin);\n }\n getHitboxes() {\n const boxes = this.getOpenMenuBoundingBoxes();\n const buttonContainerRect = this.buttonContainerRect;\n if (buttonContainerRect) {\n boxes.push({ rect: buttonContainerRect, fixed: true, close: () => { } });\n }\n return boxes;\n }\n getOpenMenuBoundingBoxes() {\n const boxes = [];\n this.children.forEach((overlay) => {\n this.getOpenMenuBoundingBoxesRec(overlay, boxes);\n });\n return boxes;\n }\n getOpenMenuBoundingBoxesRec(overlay, boxes) {\n if (overlay.expanded()) {\n let someByClick = false;\n overlay.children.forEach((child) => (someByClick ||= this.getOpenMenuBoundingBoxesRec(child, boxes)));\n const fixed = someByClick || overlay.selfExpandSrc === RdtMenuExpandSource.Click;\n boxes.push({\n rect: overlay.box,\n fixed: fixed,\n close: () => overlay.closeSelf(false),\n });\n return fixed;\n }\n return false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.0\", type: RdtMenuBaseComponent, isStandalone: true, inputs: { preferredVerticalDir: { classPropertyName: \"preferredVerticalDir\", publicName: \"preferredVerticalDir\", isSignal: true, isRequired: false, transformFunction: null }, preferredHorizontalDir: { classPropertyName: \"preferredHorizontalDir\", publicName: \"preferredHorizontalDir\", isSignal: true, isRequired: false, transformFunction: null }, shortcutMode: { classPropertyName: \"shortcutMode\", publicName: \"shortcutMode\", isSignal: true, isRequired: false, transformFunction: null }, closeOnFocusOut: { classPropertyName: \"closeOnFocusOut\", publicName: \"closeOnFocusOut\", isSignal: true, isRequired: false, transformFunction: null }, openOnHover: { classPropertyName: \"openOnHover\", publicName: \"openOnHover\", isSignal: true, isRequired: false, transformFunction: null }, hitboxMargin: { classPropertyName: \"hitboxMargin\", publicName: \"hitboxMargin\", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { \"window:pointermove\": \"onPointerMove($event)\", \"document:click\": \"onDocumentClick($event)\", \"window:focusout\": \"checkActiveElement($event)\" }, classAttribute: \"rdt-menu-base\" }, viewQueries: [{ propertyName: \"children\", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: \"focusableElements\", predicate: [\"focusableItem\"], descendants: true }], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuBaseComponent, decorators: [{\n type: Directive,\n args: [{\n host: {\n class: 'rdt-menu-base',\n '(window:pointermove)': 'onPointerMove($event)',\n '(document:click)': 'onDocumentClick($event)',\n '(window:focusout)': 'checkActiveElement($event)',\n },\n }]\n }], ctorParameters: () => [], propDecorators: { children: [{\n type: ViewChildren,\n args: [RdtMenuOverlayComponent]\n }], focusableElements: [{\n type: ViewChildren,\n args: ['focusableItem']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxTQUFTLEVBRVQsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osUUFBUSxHQUNULE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBWSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsT0FBTyxFQUVQLGNBQWMsR0FFZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxHQUFHLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QixvQ0FBb0MsRUFDcEMsa0NBQWtDLEVBQ2xDLG1DQUFtQyxFQUNuQyxpQ0FB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QixvQkFBb0I7a0JBUnpDLFNBQVM7bUJBQUM7b0JBQ1QsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxlQUFlO3dCQUN0QixzQkFBc0IsRUFBRSx1QkFBdUI7d0JBQy9DLGtCQUFrQixFQUFFLHlCQUF5Qjt3QkFDN0MsbUJBQW1CLEVBQUUsNEJBQTRCO3FCQUNsRDtpQkFDRjt3REE4QlcsUUFBUTtzQkFEakIsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSTNCLGlCQUFpQjtzQkFEMUIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIGFmdGVyTmV4dFJlbmRlcixcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIGNvbXB1dGVkLFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIG51bWJlckF0dHJpYnV0ZSxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICB0YWtlVW50aWxEZXN0cm95ZWQsXHJcbiAgdG9PYnNlcnZhYmxlLFxyXG4gIHRvU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0Um91dGUsIFJkdFJvdXRlclNlcnZpY2UgfSBmcm9tICdAbmdyZHQvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U2hvcnRjdXQsIFJkdFNob3J0Y3V0U2VydmljZSB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQge1xyXG4gIEtCX0NPREUsXHJcbiAgUmR0SG9yaXpvbnRhbERpcmVjdGlvbixcclxuICBSZHRTdHJpbmdVdGlscyxcclxuICBSZHRWZXJ0aWNhbERpcmVjdGlvbixcclxufSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLFxyXG4gIGZyb21FdmVudCxcclxuICBtYXAsXHJcbiAgc3dpdGNoTWFwLFxyXG4gIHRocm90dGxlVGltZSxcclxuICB3aXRoTGF0ZXN0RnJvbSxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0TWVudU92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuLi9tZW51LW92ZXJsYXkvcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUixcclxuICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9CT1RUT01fUFJPUEVSVFlfTkFNRSxcclxuICBSRFRfTUVOVV9NQVJHSU5fTEVGVF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9SSUdIVF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9UT1BfUFJPUEVSVFlfTkFNRSxcclxuICBSZHRNZW51U2hvcnRjdXRNb2RlLFxyXG59IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgUmR0TWVudUV4cGFuZGVkQ2hpbGQsXHJcbiAgUmR0TWVudUV4cGFuZFNvdXJjZSxcclxufSBmcm9tICcuLi9wcml2YXRlLW1vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgZmluZE5leHRJdGVtV2l0aFByZWZpeCxcclxuICBGT0NVU19WSVNJQkxFLFxyXG4gIGdldENoaWxkUm91dGVzTWFwLFxyXG4gIGdldE1lbnVJdGVtc1Nob3J0Y3V0cyxcclxuICBtZW51SXRlbUhhc0NoaWxkcmVuLFxyXG4gIG1lbnVJdGVtSGFzUm91dGUsXHJcbiAgUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXQsXHJcbiAgU2l6ZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBob3N0OiB7XHJcbiAgICBjbGFzczogJ3JkdC1tZW51LWJhc2UnLFxyXG4gICAgJyh3aW5kb3c6cG9pbnRlcm1vdmUpJzogJ29uUG9pbnRlck1vdmUoJGV2ZW50KScsXHJcbiAgICAnKGRvY3VtZW50OmNsaWNrKSc6ICdvbkRvY3VtZW50Q2xpY2soJGV2ZW50KScsXHJcbiAgICAnKHdpbmRvdzpmb2N1c291dCknOiAnY2hlY2tBY3RpdmVFbGVtZW50KCRldmVudCknLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZHRNZW51QmFzZUNvbXBvbmVudCB7XHJcbiAgcmVhZG9ubHkgcHJlZmVycmVkVmVydGljYWxEaXIgPSBpbnB1dDxSZHRWZXJ0aWNhbERpcmVjdGlvbj4oXHJcbiAgICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSXHJcbiAgKTtcclxuICByZWFkb25seSBwcmVmZXJyZWRIb3Jpem9udGFsRGlyID0gaW5wdXQ8UmR0SG9yaXpvbnRhbERpcmVjdGlvbj4oXHJcbiAgICBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVJcclxuICApO1xyXG4gIC8vIE1vZGUgb25seSBtYXR0ZXJzIGlmIGl0ZW0gaGFzIHNob3J0Y3V0IGFuZCBvbmx5IGNoaWxkcmVuLCBubyBjb21tYW5kIG5vciByb3V0ZXJMaW5rXHJcbiAgLy8gRk9DVVNfSVRFTSB3aWxsIHB1dCBmb2N1cyBvbiBpdGVtIHdpdGggc2hvcnRjdXRcclxuICAvLyBPUEVOX1NVQk1FTlUgd2lsbCBvcGVuIGl0cyBzdWJtZW51IGFuZCBwdXQgZm9jdXMgb24gdGhlIGZpcnN0IGl0ZW0gaW4gaXRcclxuICAvLyBJZiBpdGVtIGhhcyBjb21tYW5kIG9yIHJvdXRlckxpbmssIGl0IHdpbGwgYWx3YXlzIGJlIGFjdGl2YXRlZCBhbmQgZXZlcnl0aGluZyBjbG9zZWRcclxuICByZWFkb25seSBzaG9ydGN1dE1vZGUgPSBpbnB1dDwnZm9jdXMtaXRlbScgfCAnb3Blbi1zdWJtZW51Jz4oXHJcbiAgICBSZHRNZW51U2hvcnRjdXRNb2RlLk9QRU5fU1VCTUVOVVxyXG4gICk7XHJcbiAgcmVhZG9ubHkgY2xvc2VPbkZvY3VzT3V0ID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xyXG4gIHJlYWRvbmx5IG9wZW5PbkhvdmVyID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xyXG4gIHJlYWRvbmx5IGhpdGJveE1hcmdpbiA9IGlucHV0KDEwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xyXG5cclxuICByZWFkb25seSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmR0Um91dGVyID0gaW5qZWN0KFJkdFJvdXRlclNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBlbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3J0Y3V0U2VydmljZSA9IGluamVjdChSZHRTaG9ydGN1dFNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBpbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihSZHRNZW51T3ZlcmxheUNvbXBvbmVudClcclxuICBwcm90ZWN0ZWQgY2hpbGRyZW4hOiBRdWVyeUxpc3Q8UmR0TWVudU92ZXJsYXlDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb2N1c2FibGVJdGVtJylcclxuICBwcm90ZWN0ZWQgZm9jdXNhYmxlRWxlbWVudHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xyXG5cclxuICBhYnN0cmFjdCBnZXQgYnV0dG9uQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG5cclxuICByZWFkb25seSBleHBhbmRlZENoaWxkID0gc2lnbmFsPFJkdE1lbnVFeHBhbmRlZENoaWxkIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHByb3RlY3RlZCBhdXRvZm9jdXNTdWJtZW51SXRlbTogJ2ZpcnN0JyB8ICdsYXN0JyB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5kKCk7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuYWxsUGFyc2VkSXRlbXMoKTtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnJkdFJvdXRlci5wYXJzZUFic29sdXRlVXJsKCk7XHJcbiAgICBpZiAoIWN1cnJlbnQpIHtcclxuICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyUmVjKGl0ZW1zLCBjdXJyZW50KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgZ2V0IGNsaWVudFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50U2l6ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2xpZW50U2l6ZSE6IFNpemU7XHJcblxyXG4gIGdldCBib2R5TWFyZ2luKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JvZHlNYXJnaW47XHJcbiAgfVxyXG4gIHByaXZhdGUgX2JvZHlNYXJnaW4hOiB7XHJcbiAgICB0b3A6IG51bWJlcjtcclxuICAgIGJvdHRvbTogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgcmlnaHQ6IG51bWJlcjtcclxuICB9O1xyXG5cclxuICBnZXQgYnV0dG9uQ29udGFpbmVyUmVjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXR0b25Db250YWluZXJSZWN0O1xyXG4gIH1cclxuICBwcml2YXRlIF9idXR0b25Db250YWluZXJSZWN0PzogRE9NUmVjdDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGFsbFBhcnNlZEl0ZW1zOiBTaWduYWw8UGFyc2VkUmR0TWVudUl0ZW1bXT47XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoaWxkUm91dGVzTWFwID0gY29tcHV0ZWQoKCkgPT5cclxuICAgIGdldENoaWxkUm91dGVzTWFwKHRoaXMuZmlsdGVyZWRJdGVtcygpKVxyXG4gICk7XHJcblxyXG4gIHJlYWRvbmx5IGtleUFjdGlvbnMgPSB7XHJcbiAgICBbS0JfQ09ERS5BUlJPVy5MRUZUXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNQcmV2SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5SSUdIVF06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmZvY3VzTmV4dEl0ZW0oaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuRE9XTl06IChpbmRleDogbnVtYmVyKSA9PlxyXG4gICAgICB0aGlzLm9wZW5TdWJtZW51KGluZGV4LCAnZmlyc3QnLCBSZHRNZW51RXhwYW5kU291cmNlLlNob3J0Y3V0KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlVQXTogKGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgIHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdsYXN0JywgUmR0TWVudUV4cGFuZFNvdXJjZS5TaG9ydGN1dCksXHJcbiAgICBbS0JfQ09ERS5IT01FXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0oMCksXHJcbiAgICBbS0JfQ09ERS5FTkRdOiAoKSA9PlxyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKS5sZW5ndGggLSAxKSxcclxuICAgIFtLQl9DT0RFLkVOVEVSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgICBbS0JfQ09ERS5TUEFDRUJBUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmF2aWdhdGlvbkVuZCA9IHRvU2lnbmFsKHRoaXMucmR0Um91dGVyLm5hdmlnYXRpb25FbmQkKTtcclxuXHJcbiAgLy8gUmV0dXJucyBhbGwgcm91dGVzIGFzb2NpYXRlZCB3aXRoIGl0ZW0gb3IgaXRzIHN1Yml0ZW1zLlxyXG4gIGdldENoaWxkUm91dGVzKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZFJvdXRlc01hcCgpLmdldChpdGVtKSA/PyBbXTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5saXN0ZW5TaG9ydGN1dHMoKTtcclxuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdGVuV2luZG93UmVzaXplKCk7XHJcbiAgICAgIHRoaXMubWVhc3VyZSgpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWNhbGNDaGlsZHJlbkVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICB9KTtcclxuXHJcbiAgcmVjYWxjdWxhdGVDaGlsZHJlbigpIHtcclxuICAgIGlmICh0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICBjaGlsZC5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyKCksXHJcbiAgICAgICAgICB0aGlzLnByZWZlcnJlZFZlcnRpY2FsRGlyKClcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdW50cmFja2VkKHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICBpZiAoZm9jdXNFeHBhbmRlZCAmJiBleHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGV4cGFuZGVkQ2hpbGQuaXRlbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgY29uc3QgZXhwYW5kZWRDaGlsZCA9IHVudHJhY2tlZCh0aGlzLmV4cGFuZGVkQ2hpbGQpO1xyXG4gICAgY29uc3Qgb3Blbk9uSG92ZXIgPSB1bnRyYWNrZWQodGhpcy5vcGVuT25Ib3Zlcik7XHJcbiAgICBpZiAoXHJcbiAgICAgIChtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pICYmIGV4cGFuZGVkQ2hpbGQ/Lml0ZW0gIT09IGl0ZW0pIHx8XHJcbiAgICAgIChvcGVuT25Ib3ZlciAmJiBleHBhbmRlZENoaWxkPy5zcmMgPT09IFJkdE1lbnVFeHBhbmRTb3VyY2UuSG92ZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQoeyBpdGVtLCBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2UuQ2xpY2sgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpdGVtLmNvbW1hbmQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgaXRlbS5jb21tYW5kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25JdGVtUG9pbnRlckVudGVyKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdW50cmFja2VkKHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICBjb25zdCBvcGVuT25Ib3ZlciA9IHVudHJhY2tlZCh0aGlzLm9wZW5PbkhvdmVyKTtcclxuICAgIGlmIChvcGVuT25Ib3Zlcikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSAmJlxyXG4gICAgICAgIGV4cGFuZGVkQ2hpbGQ/LnNyYyAhPT0gUmR0TWVudUV4cGFuZFNvdXJjZS5DbGlja1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KHsgaXRlbSwgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlLkhvdmVyIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbktleURvd24oaXRlbUluZGV4OiBudW1iZXIsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBoYXNBY3Rpb24gPSBldmVudC5jb2RlIGluIHRoaXMua2V5QWN0aW9ucztcclxuICAgIGNvbnN0IGlzTGV0dGVyID1cclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNBbHBoYWJldENoYXJhY3RlcihldmVudC5rZXkpIHx8XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzTnVtZXJpY0NoYXJhY3RlcihldmVudC5rZXkpO1xyXG5cclxuICAgIGlmIChoYXNBY3Rpb24gfHwgaXNMZXR0ZXIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgdGhpcy5rZXlBY3Rpb25zW2V2ZW50LmNvZGVdKGl0ZW1JbmRleCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzTGV0dGVyKSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKTtcclxuICAgICAgY29uc3QgbmV4dCA9IGZpbmROZXh0SXRlbVdpdGhQcmVmaXgoZmlsdGVyZWRJdGVtcywgaXRlbUluZGV4LCBldmVudC5rZXkpO1xyXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW52b2tlSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAobWVudUl0ZW1IYXNSb3V0ZShpdGVtKSAmJiBpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoaXRlbS5yb3V0ZXJMaW5rKTtcclxuICAgIH1cclxuICAgIHRoaXMub25JdGVtQ2xpY2soaXRlbSk7XHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gJ2ZpcnN0JztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmaWx0ZXJSZWMoXHJcbiAgICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXSxcclxuICAgIGN1cnJlbnQ6IHsgcm91dGU6IFJkdFJvdXRlOyBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfVxyXG4gICk6IFBhcnNlZFJkdE1lbnVJdGVtW10ge1xyXG4gICAgbGV0IGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50LnJvdXRlO1xyXG4gICAgY29uc3QgY3VycmVudFBhcmFtcyA9IGN1cnJlbnQucGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmICghaXRlbS5yZXF1aXJlZFBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gaXRlbS5yZXF1aXJlZFBhcmVudDtcclxuICAgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnQuYWJzb2x1dGVQYXRoICE9PSByZXF1aXJlZC5hYnNvbHV0ZVBhdGgpIHtcclxuICAgICAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC5wYXJlbnQhO1xyXG4gICAgICAgIGlmICghY3VycmVudFBhcmVudCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgcmVxdWlyZWRQYXJlbnQ6IFJkdFJvdXRlIHwgbnVsbCA9IHJlcXVpcmVkO1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmVkUGFyZW50LmFic29sdXRlUGF0aDtcclxuICAgICAgICBpZiAocGF0aCBpbiBjdXJyZW50UGFyYW1zKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByZXF1aXJlZFBhcmVudC5zdGF0aWNQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJhbXNbcGF0aF1ba2V5XSAhPT0gcmVxdWlyZWRQYXJlbnQuc3RhdGljUGFyYW1zW2tleV0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVxdWlyZWRQYXJlbnQgPSByZXF1aXJlZFBhcmVudC5wYXJlbnQ7XHJcbiAgICAgIH0gd2hpbGUgKHJlcXVpcmVkUGFyZW50KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZmlsdGVyZWQubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICBpdGVtczogdGhpcy5maWx0ZXJSZWMoaXRlbS5pdGVtcywgY3VycmVudCksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW52b2tlSXRlbUNsaWNrQnlJbmRleChpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHVudHJhY2tlZCh0aGlzLmZpbHRlcmVkSXRlbXMpO1xyXG4gICAgY29uc3QgaXRlbSA9IGZpbHRlcmVkSXRlbXNbaXRlbUluZGV4XTtcclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmludm9rZUl0ZW1DbGljayhpdGVtKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvcGVuU3VibWVudShcclxuICAgIGl0ZW1JbmRleDogbnVtYmVyLFxyXG4gICAgdmlzaWJsZUZvY3VzOiAnZmlyc3QnIHwgJ2xhc3QnLFxyXG4gICAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdW50cmFja2VkKHRoaXMuZmlsdGVyZWRJdGVtcyk7XHJcbiAgICBpZiAoXHJcbiAgICAgIGl0ZW1JbmRleCA8IGZpbHRlcmVkSXRlbXMubGVuZ3RoICYmXHJcbiAgICAgIG1lbnVJdGVtSGFzQ2hpbGRyZW4oZmlsdGVyZWRJdGVtc1tpdGVtSW5kZXhdKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBmaWx0ZXJlZEl0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSB2aXNpYmxlRm9jdXM7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQoeyBpdGVtLCBzcmMgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNJdGVtKGl0ZW06IG51bWJlciB8IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdW50cmFja2VkKHRoaXMuZmlsdGVyZWRJdGVtcyk7XHJcbiAgICBsZXQgaXRlbUluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xyXG4gICAgICBpdGVtSW5kZXggPSBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbUluZGV4ID0gZmlsdGVyZWRJdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmJsdXJBbGxGb2N1c2FibGUoKTtcclxuICAgICAgdGhpcy5mb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZvY3VzTmV4dEl0ZW0oaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKTtcclxuICAgIGNvbnN0IG5leHQgPSAoaXRlbUluZGV4ICsgMSkgJSBmaWx0ZXJlZEl0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZvY3VzUHJldkl0ZW0oaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKTtcclxuICAgIGNvbnN0IHByZXYgPSAoaXRlbUluZGV4IC0gMSArIGZpbHRlcmVkSXRlbXMubGVuZ3RoKSAlIGZpbHRlcmVkSXRlbXMubGVuZ3RoO1xyXG4gICAgdGhpcy5mb2N1c0l0ZW0ocHJldik7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYmx1ckFsbEZvY3VzYWJsZSgpIHtcclxuICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNGb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGVsUmVmID0gdGhpcy5mb2N1c2FibGVFbGVtZW50cy5nZXQoaXRlbUluZGV4KTtcclxuICAgIGlmIChlbFJlZikge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpO1xyXG4gICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25Qb2ludGVyTW92ZShldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdW50cmFja2VkKHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICBjb25zdCBvcGVuT25Ib3ZlciA9IHVudHJhY2tlZCh0aGlzLm9wZW5PbkhvdmVyKTtcclxuICAgIGlmIChvcGVuT25Ib3ZlciAmJiBleHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIGNvbnN0IGhpdGJveGVzID0gdGhpcy5nZXRIaXRib3hlcygpO1xyXG4gICAgICBjb25zdCBpc0luc2lkZSA9IGhpdGJveGVzLnNvbWUoKGhpdGJveCkgPT5cclxuICAgICAgICB0aGlzLmlzUG9pbnRlckluc2lkZUhpdGJveChoaXRib3gucmVjdCwgZXZlbnQpXHJcbiAgICAgICk7XHJcbiAgICAgIGZvciAobGV0IGkgPSBoaXRib3hlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGNvbnN0IGhpdGJveCA9IGhpdGJveGVzW2ldO1xyXG4gICAgICAgIGlmICghaGl0Ym94LmZpeGVkICYmICFpc0luc2lkZSkge1xyXG4gICAgICAgICAgaGl0Ym94LmNsb3NlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENsb3NlcyBtZW51IGlmIHVzZXIgbmF2aWdhdGVzIG91dHNpZGUgaXQgdXNpbmcgVGFiLlxyXG4gIHByb3RlY3RlZCBjaGVja0FjdGl2ZUVsZW1lbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgIGNvbnN0IGNsb3NlT25Gb2N1c091dCA9IHVudHJhY2tlZCh0aGlzLmNsb3NlT25Gb2N1c091dCk7XHJcbiAgICBpZiAoY2xvc2VPbkZvY3VzT3V0ICYmICF0aGlzLm9wZW5PbkhvdmVyKSB7XHJcbiAgICAgIGNvbnN0IHRoaXNFbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8ICF0aGlzRWwuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgZWxSZWYgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoIWVsUmVmLmNvbnRhaW5zKHRhcmdldCkpIHtcclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWVhc3VyZSgpIHtcclxuICAgIHRoaXMubWVhc3VyZUJ1dHRvbkNvbnRhaW5lcigpO1xyXG4gICAgdGhpcy5tZWFzdXJlQ2xpZW50U2l6ZSgpO1xyXG4gICAgdGhpcy5yZWFkTWFyZ2luKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVhZE1hcmdpbigpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCB0b3BWYWwgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXHJcbiAgICAgIFJEVF9NRU5VX01BUkdJTl9UT1BfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGJvdHRvbVZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX0JPVFRPTV9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgY29uc3QgbGVmdFZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX0xFRlRfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJpZ2h0VmFsID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxyXG4gICAgICBSRFRfTUVOVV9NQVJHSU5fUklHSFRfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIHRoaXMuX2JvZHlNYXJnaW4gPSB7XHJcbiAgICAgIHRvcDogcGFyc2VJbnQodG9wVmFsKSB8fCAwLFxyXG4gICAgICBib3R0b206IHBhcnNlSW50KGJvdHRvbVZhbCkgfHwgMCxcclxuICAgICAgbGVmdDogcGFyc2VJbnQobGVmdFZhbCkgfHwgMCxcclxuICAgICAgcmlnaHQ6IHBhcnNlSW50KHJpZ2h0VmFsKSB8fCAwLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtZWFzdXJlQ2xpZW50U2l6ZSgpIHtcclxuICAgIHRoaXMuX2NsaWVudFNpemUgPSB7XHJcbiAgICAgIHdpZHRoOiB0aGlzLmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWVhc3VyZUJ1dHRvbkNvbnRhaW5lcigpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5idXR0b25Db250YWluZXI7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgdGhpcy5fYnV0dG9uQ29udGFpbmVyUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYnV0dG9uQ29udGFpbmVyUmVjdCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBsaXN0ZW5XaW5kb3dSZXNpemUoKSB7XHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGhyb3R0bGVUaW1lKDAsIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCB7IHRyYWlsaW5nOiB0cnVlIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlKCk7XHJcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblNob3J0Y3V0cygpIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMkID0gdG9PYnNlcnZhYmxlKHRoaXMuZmlsdGVyZWRJdGVtcyk7XHJcbiAgICBjb25zdCBpdGVtc1dpdGhTaG9ydGN1dHMkID0gZmlsdGVyZWRJdGVtcyQucGlwZShtYXAoZ2V0TWVudUl0ZW1zU2hvcnRjdXRzKSk7XHJcbiAgICBjb25zdCBzaG9ydGN1dHMkID0gaXRlbXNXaXRoU2hvcnRjdXRzJC5waXBlKFxyXG4gICAgICBtYXAoKGl0ZW1zKSA9PiBpdGVtcy5tYXAoKGl0KSA9PiBpdC5zaG9ydGN1dCkpXHJcbiAgICApO1xyXG4gICAgY29uc3QgbWFwJCA9IGl0ZW1zV2l0aFNob3J0Y3V0cyQucGlwZShcclxuICAgICAgbWFwKChpdGVtcykgPT4gdGhpcy5nZXRTaG9ydGN1dE1hcChpdGVtcykpXHJcbiAgICApO1xyXG5cclxuICAgIHNob3J0Y3V0cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChzaG9ydGN1dHMpID0+IHRoaXMuc2hvcnRjdXRTZXJ2aWNlLmxpc3RlbihzaG9ydGN1dHMpKSxcclxuICAgICAgICB3aXRoTGF0ZXN0RnJvbShtYXAkKSxcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKFtldnQsIG1hcF0pID0+IHRoaXMub25TaG9ydGN1dChldnQuc2hvcnRjdXQsIG1hcCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldFNob3J0Y3V0TWFwKFxyXG4gICAgaXRlbXNXaXRoU2hvcnRjdXRzOiBQYXJzZWRSZHRNZW51SXRlbVdpdGhTaG9ydGN1dFtdXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzaG9ydGN1dE1hcDogUmVjb3JkPHN0cmluZywgUGFyc2VkUmR0TWVudUl0ZW1bXT4gPSB7fTtcclxuICAgIGl0ZW1zV2l0aFNob3J0Y3V0cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIHNob3J0Y3V0TWFwW2l0ZW0uc2hvcnRjdXQuaG90a2V5c1ZhbHVlXSA9IGl0ZW0ucGF0aDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNob3J0Y3V0TWFwO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uU2hvcnRjdXQoXHJcbiAgICBzaG9ydGN1dDogUmR0U2hvcnRjdXQsXHJcbiAgICBtYXA6IFJlY29yZDxzdHJpbmcsIFBhcnNlZFJkdE1lbnVJdGVtW10+XHJcbiAgKSB7XHJcbiAgICBjb25zdCBwYXRoID0gbWFwW3Nob3J0Y3V0LmhvdGtleXNWYWx1ZV07XHJcbiAgICBpZiAoIXBhdGgpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBNZW51IHNob3J0Y3V0ICR7c2hvcnRjdXQuaG90a2V5c1ZhbHVlfSB3YXMgZGV0ZWN0ZWQsIGJ1dCB0aGVyZSBpcyBubyBwYXRoIGFzc29jaWF0ZWQgd2l0aCBpdC5gLFxyXG4gICAgICAgIG1hcFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGFzdCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcclxuICAgIGNvbnN0IGhhc1JvdXRlID0gbWVudUl0ZW1IYXNSb3V0ZShsYXN0KTtcclxuICAgIGNvbnN0IGhhc0NvbW1hbmQgPSB0eXBlb2YgbGFzdC5jb21tYW5kID09PSAnZnVuY3Rpb24nO1xyXG4gICAgaWYgKGhhc1JvdXRlIHx8IGhhc0NvbW1hbmQpIHtcclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKGZhbHNlKTtcclxuICAgICAgaWYgKGhhc0NvbW1hbmQpIHtcclxuICAgICAgICBsYXN0LmNvbW1hbmQhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhhc1JvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUobGFzdC5yb3V0ZXJMaW5rISk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVJdGVtUmVjdXJzaXZlbHkocGF0aCwgUmR0TWVudUV4cGFuZFNvdXJjZS5TaG9ydGN1dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWN0aXZhdGVJdGVtUmVjdXJzaXZlbHkoXHJcbiAgICBwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdLFxyXG4gICAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzaG9ydGN1dE1vZGUgPSB1bnRyYWNrZWQodGhpcy5zaG9ydGN1dE1vZGUpO1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBbLi4ucGF0aF07XHJcblxyXG4gICAgaWYgKHNob3J0Y3V0TW9kZSA9PT0gUmR0TWVudVNob3J0Y3V0TW9kZS5PUEVOX1NVQk1FTlUpIHtcclxuICAgICAgY29uc3QgbGFzdCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdO1xyXG4gICAgICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihsYXN0KSAmJiBsYXN0Lml0ZW1zWzBdKSB7XHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChsYXN0Lml0ZW1zWzBdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRoaXNJdGVtID0gY2hpbGRyZW4uc2hpZnQoKSE7XHJcblxyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldCh7IGl0ZW06IHRoaXNJdGVtLCBzcmMgfSk7XHJcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLmNoaWxkcmVuLmZpbmQoXHJcbiAgICAgICAgKGNoaWxkKSA9PiB1bnRyYWNrZWQoY2hpbGQuaXRlbSkgPT09IHRoaXNJdGVtXHJcbiAgICAgICk7XHJcbiAgICAgIG92ZXJsYXkhLmZvY3VzSXRlbVJlY3Vyc2l2ZWx5KGNoaWxkcmVuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzUG9pbnRlckluc2lkZUhpdGJveChoaXRib3g6IERPTVJlY3QsIGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGNvbnN0IHJlY3QgPSBoaXRib3g7XHJcbiAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WDtcclxuICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgY29uc3QgbWFyZ2luID0gdW50cmFja2VkKHRoaXMuaGl0Ym94TWFyZ2luKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB4ID49IHJlY3QubGVmdCAtIG1hcmdpbiAmJlxyXG4gICAgICB4IDw9IHJlY3QucmlnaHQgKyBtYXJnaW4gJiZcclxuICAgICAgeSA+PSByZWN0LnRvcCAtIG1hcmdpbiAmJlxyXG4gICAgICB5IDw9IHJlY3QuYm90dG9tICsgbWFyZ2luXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGl0Ym94ZXMoKTogeyByZWN0OiBET01SZWN0OyBmaXhlZDogYm9vbGVhbjsgY2xvc2U6ICgpID0+IHZvaWQgfVtdIHtcclxuICAgIGNvbnN0IGJveGVzID0gdGhpcy5nZXRPcGVuTWVudUJvdW5kaW5nQm94ZXMoKTtcclxuICAgIGNvbnN0IGJ1dHRvbkNvbnRhaW5lclJlY3QgPSB0aGlzLmJ1dHRvbkNvbnRhaW5lclJlY3Q7XHJcbiAgICBpZiAoYnV0dG9uQ29udGFpbmVyUmVjdCkge1xyXG4gICAgICBib3hlcy5wdXNoKHsgcmVjdDogYnV0dG9uQ29udGFpbmVyUmVjdCwgZml4ZWQ6IHRydWUsIGNsb3NlOiAoKSA9PiB7fSB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBib3hlcztcclxuICB9XHJcblxyXG4gIGdldE9wZW5NZW51Qm91bmRpbmdCb3hlcygpIHtcclxuICAgIGNvbnN0IGJveGVzOiB7IHJlY3Q6IERPTVJlY3Q7IGZpeGVkOiBib29sZWFuOyBjbG9zZTogKCkgPT4gdm9pZCB9W10gPSBbXTtcclxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgob3ZlcmxheSkgPT4ge1xyXG4gICAgICB0aGlzLmdldE9wZW5NZW51Qm91bmRpbmdCb3hlc1JlYyhvdmVybGF5LCBib3hlcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBib3hlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0T3Blbk1lbnVCb3VuZGluZ0JveGVzUmVjKFxyXG4gICAgb3ZlcmxheTogUmR0TWVudU92ZXJsYXlDb21wb25lbnQsXHJcbiAgICBib3hlczogeyByZWN0OiBET01SZWN0OyBmaXhlZDogYm9vbGVhbjsgY2xvc2U6ICgpID0+IHZvaWQgfVtdXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBpZiAob3ZlcmxheS5leHBhbmRlZCgpKSB7XHJcbiAgICAgIGxldCBzb21lQnlDbGljayA9IGZhbHNlO1xyXG4gICAgICBvdmVybGF5LmNoaWxkcmVuLmZvckVhY2goXHJcbiAgICAgICAgKGNoaWxkKSA9PlxyXG4gICAgICAgICAgKHNvbWVCeUNsaWNrIHx8PSB0aGlzLmdldE9wZW5NZW51Qm91bmRpbmdCb3hlc1JlYyhjaGlsZCwgYm94ZXMpKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBmaXhlZCA9XHJcbiAgICAgICAgc29tZUJ5Q2xpY2sgfHwgb3ZlcmxheS5zZWxmRXhwYW5kU3JjID09PSBSZHRNZW51RXhwYW5kU291cmNlLkNsaWNrO1xyXG4gICAgICBib3hlcy5wdXNoKHtcclxuICAgICAgICByZWN0OiBvdmVybGF5LmJveCxcclxuICAgICAgICBmaXhlZDogZml4ZWQsXHJcbiAgICAgICAgY2xvc2U6ICgpID0+IG92ZXJsYXkuY2xvc2VTZWxmKGZhbHNlKSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBmaXhlZDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19","import { ChangeDetectionStrategy, Component, computed, ElementRef, input, numberAttribute, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\nimport { parseMenuItems } from '../private-models';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@ngrdt/router\";\nimport * as i4 from \"@ngrdt/shortcuts\";\nimport * as i5 from \"../menu-overlay/rdt-menu-overlay.component\";\nexport class RdtMenuBarComponent extends RdtMenuBaseComponent {\n buttonContainerRef;\n get buttonContainer() {\n return this.buttonContainerRef?.nativeElement;\n }\n items = input.required();\n allParsedItems = computed(() => parseMenuItems(this.items(), this.injector));\n headerHeight = input(0, { transform: numberAttribute });\n footerHeight = input(0, { transform: numberAttribute });\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuBarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.0\", type: RdtMenuBarComponent, isStandalone: false, selector: \"rdt-menu-bar\", inputs: { items: { classPropertyName: \"items\", publicName: \"items\", isSignal: true, isRequired: true, transformFunction: null }, headerHeight: { classPropertyName: \"headerHeight\", publicName: \"headerHeight\", isSignal: true, isRequired: false, transformFunction: null }, footerHeight: { classPropertyName: \"footerHeight\", publicName: \"footerHeight\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"role\": \"menubar\" } }, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuBarComponent,\n },\n ], viewQueries: [{ propertyName: \"buttonContainerRef\", first: true, predicate: [\"buttonContainer\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"<ul class=\\\"menu-bar-item-container\\\" role=\\\"presentation\\\" #buttonContainer>\\r\\n @for(item of filteredItems(); track item; let i = $index) {\\r\\n <li\\r\\n class=\\\"menu-bar-item\\\"\\r\\n role=\\\"presentation\\\"\\r\\n rdtAnyRouteActive=\\\"menu-bar-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"expand_more\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n -->\\r\\n @if(item.items) {\\r\\n <span class=\\\"menu-bar-item-icon rdt-menu-icon-down\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!--\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if(item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [target]=\\\"item.target!\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if(item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.items) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);font-weight:var(--rdt-menu-bar-item-font-weight);font-size:var(--rdt-menu-bar-item-font-size, inherit);outline:var(--rdt-menu-bar-item-outline)}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i2.RouterLink, selector: \"[routerLink]\", inputs: [\"target\", \"queryParams\", \"fragment\", \"queryParamsHandling\", \"state\", \"info\", \"relativeTo\", \"preserveFragment\", \"skipLocationChange\", \"replaceUrl\", \"routerLink\"] }, { kind: \"directive\", type: i3.RdtAnyRouteActiveDirective, selector: \"[rdtAnyRouteActive]\", inputs: [\"rdtAnyRouteActive\", \"watchedRoutes\", \"anyRouteActiveOptions\", \"ariaCurrentWhenActive\"] }, { kind: \"directive\", type: i4.RdtKeyListenerDirective, selector: \"[rdtKeyListener]\", outputs: [\"rdtKeyListener\"] }, { kind: \"component\", type: i5.RdtMenuOverlayComponent, selector: \"rdt-menu-overlay\", inputs: [\"item\", \"level\", \"preferredHorizontalDir\", \"preferredVerticalDir\", \"expanded\", \"autofocusItem\", \"anchorElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuBarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'rdt-menu-bar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuBarComponent,\n },\n ], standalone: false, host: {\n role: 'menubar',\n }, template: \"<ul class=\\\"menu-bar-item-container\\\" role=\\\"presentation\\\" #buttonContainer>\\r\\n @for(item of filteredItems(); track item; let i = $index) {\\r\\n <li\\r\\n class=\\\"menu-bar-item\\\"\\r\\n role=\\\"presentation\\\"\\r\\n rdtAnyRouteActive=\\\"menu-bar-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"expand_more\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n -->\\r\\n @if(item.items) {\\r\\n <span class=\\\"menu-bar-item-icon rdt-menu-icon-down\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!--\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if(item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [target]=\\\"item.target!\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if(item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.items) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);font-weight:var(--rdt-menu-bar-item-font-weight);font-size:var(--rdt-menu-bar-item-font-size, inherit);outline:var(--rdt-menu-bar-item-outline)}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\\n\"] }]\n }], propDecorators: { buttonContainerRef: [{\n type: ViewChild,\n args: ['buttonContainer', { static: true }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsS0FBSyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7OztBQW1CbkQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjtJQUUzRCxrQkFBa0IsQ0FBMkI7SUFFN0MsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0lBRVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWlCLENBQUM7SUFDeEMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDdEMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQzVDLENBQUM7SUFFTyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7dUdBZHRELG1CQUFtQjsyRkFBbkIsbUJBQW1CLHNnQkFYbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDO1NBQ0Ysc0xDekJILGs1R0FrSEE7OzJGRG5GYSxtQkFBbUI7a0JBakIvQixTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLHFCQUFxQjt5QkFDakM7cUJBQ0YsY0FDVyxLQUFLLFFBQ1g7d0JBQ0osSUFBSSxFQUFFLFNBQVM7cUJBQ2hCOzhCQUlELGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIGlucHV0LFxyXG4gIG51bWJlckF0dHJpYnV0ZSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBwYXJzZU1lbnVJdGVtcyB9IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmR0LW1lbnUtYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBSZHRNZW51QmFzZUNvbXBvbmVudCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFJkdE1lbnVCYXJDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgaG9zdDoge1xyXG4gICAgcm9sZTogJ21lbnViYXInLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51QmFyQ29tcG9uZW50IGV4dGVuZHMgUmR0TWVudUJhc2VDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbkNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYnV0dG9uQ29udGFpbmVyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIGdldCBidXR0b25Db250YWluZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25Db250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBpdGVtcyA9IGlucHV0LnJlcXVpcmVkPFJkdE1lbnVJdGVtW10+KCk7XHJcbiAgcmVhZG9ubHkgYWxsUGFyc2VkSXRlbXMgPSBjb21wdXRlZCgoKSA9PlxyXG4gICAgcGFyc2VNZW51SXRlbXModGhpcy5pdGVtcygpLCB0aGlzLmluamVjdG9yKVxyXG4gICk7XHJcblxyXG4gIHJlYWRvbmx5IGhlYWRlckhlaWdodCA9IGlucHV0KDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XHJcbiAgcmVhZG9ubHkgZm9vdGVySGVpZ2h0ID0gaW5wdXQoMCwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcclxufVxyXG4iLCI8dWwgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRhaW5lclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiAjYnV0dG9uQ29udGFpbmVyPlxyXG4gIEBmb3IoaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zKCk7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XHJcbiAgPGxpXHJcbiAgICBjbGFzcz1cIm1lbnUtYmFyLWl0ZW1cIlxyXG4gICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICByZHRBbnlSb3V0ZUFjdGl2ZT1cIm1lbnUtYmFyLWl0ZW0tcm91dGUtYWN0aXZlXCJcclxuICAgIFt3YXRjaGVkUm91dGVzXT1cImdldENoaWxkUm91dGVzKGl0ZW0pXCJcclxuICAgIChyZHRLZXlMaXN0ZW5lcik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXHJcbiAgICAjYW5jaG9yRWxcclxuICA+XHJcbiAgICBAaWYoIWl0ZW0ucm91dGVyTGluayAmJiAhaXRlbS5leHRlcm5hbExpbmspIHtcclxuICAgIDxidXR0b25cclxuICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICAocG9pbnRlcmVudGVyKT1cIm9uSXRlbVBvaW50ZXJFbnRlcihpdGVtKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5pdGVtcyA/ICdtZW51JyA6IG51bGxcIlxyXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0gPT09IGV4cGFuZGVkQ2hpbGQoKT8uaXRlbVwiXHJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgPlxyXG4gICAgICB7eyBpdGVtLmxhYmVsIH19XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1iYXItaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgQGlmKGl0ZW0uc2hvcnRjdXQpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaXRlbS1zaG9ydGN1dFwiPlxyXG4gICAgICAgICAge3sgaXRlbS5zaG9ydGN1dC5sYWJlbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPCEtLSBUT0RPXHJcbiAgICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zXCJcclxuICAgICAgICAgICAgbmFtZT1cImV4cGFuZF9tb3JlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWljb25cIlxyXG4gICAgICAgICAgICBpbnZlcnRlZFxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1pY29uXCJcclxuICAgICAgICAgICAgaW52ZXJ0ZWRcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgLS0+XHJcbiAgICAgICAgQGlmKGl0ZW0uaXRlbXMpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0taWNvbiByZHQtbWVudS1pY29uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlua0JvZHkgbGV0LWl0ZW0+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWJhci1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICBAaWYoaXRlbS5zaG9ydGN1dCkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8IS0tXHJcbiAgICAgICAgPHJkdC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWljb25cIlxyXG4gICAgICAgICAgaW52ZXJ0ZWRcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgQGlmKGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgPGFcclxuICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxyXG4gICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0IVwiXHJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQm9keTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2E+XHJcbiAgICB9IEBpZihpdGVtLmV4dGVybmFsTGluaykge1xyXG4gICAgPGFcclxuICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICBbaHJlZl09XCJpdGVtLmV4dGVybmFsTGlua1wiXHJcbiAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAvPlxyXG4gICAgPC9hPlxyXG4gICAgfSBAaWYgKGl0ZW0uaXRlbXMpIHtcclxuICAgIDxyZHQtbWVudS1vdmVybGF5XHJcbiAgICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxyXG4gICAgICBbZXhwYW5kZWRdPVwiaXRlbSA9PT0gZXhwYW5kZWRDaGlsZCgpPy5pdGVtXCJcclxuICAgICAgW2F1dG9mb2N1c0l0ZW1dPVwiYXV0b2ZvY3VzU3VibWVudUl0ZW1cIlxyXG4gICAgICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJwcmVmZXJyZWRIb3Jpem9udGFsRGlyKClcIlxyXG4gICAgICBbcHJlZmVycmVkVmVydGljYWxEaXJdPVwicHJlZmVycmVkVmVydGljYWxEaXIoKVwiXHJcbiAgICAgIFtsZXZlbF09XCIwXCJcclxuICAgICAgW2FuY2hvckVsZW1lbnRdPVwiYW5jaG9yRWxcIlxyXG4gICAgLz5cclxuICAgIH1cclxuICA8L2xpPlxyXG4gIH1cclxuPC91bD5cclxuIl19","import { afterNextRender, ChangeDetectionStrategy, Component, computed, effect, inject, input, QueryList, ViewEncapsulation, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { RDT_BUTTON_BASE_PROVIDER } from '@ngrdt/button';\nimport { switchMap } from 'rxjs';\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\nimport { parseMenuItems } from '../private-models';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../menu-overlay/rdt-menu-overlay.component\";\nexport class RdtMenuComponent extends RdtMenuBaseComponent {\n buttonClass = inject(RDT_BUTTON_BASE_PROVIDER);\n trigger = input.required();\n dataTestId = input('');\n items = input.required();\n allParsedItems = computed(() => {\n const items = this.items();\n const wrapper = {\n label: '',\n icon: '',\n items: items,\n };\n return parseMenuItems([wrapper], this.injector);\n });\n focusableElements = new QueryList();\n get buttonContainer() {\n return this.anchorElement() ?? undefined;\n }\n get parsedItem() {\n return this.filteredItems()[0];\n }\n get anchorElement() {\n return this.trigger().anchorElement;\n }\n constructor() {\n super();\n afterNextRender(() => {\n this.listenPointerOver();\n this.updateFocusableElements();\n });\n this.subscribeClicks();\n }\n triggerTabIndexEffect = effect(() => {\n const trigger = this.trigger();\n trigger.tabIndex.set(0);\n });\n triggerDataTestIdEffect = effect(() => {\n const trigger = this.trigger();\n const dataTestId = this.dataTestId();\n trigger.dataTestId.set(dataTestId);\n });\n triggerAriaEffect = effect(() => {\n const trigger = this.trigger();\n const expandedChild = this.expandedChild();\n trigger.aria.set({\n role: 'menuitem',\n 'aria-haspopup': 'true',\n 'aria-expanded': expandedChild?.item === this.parsedItem,\n });\n });\n subscribeClicks() {\n toObservable(this.trigger)\n .pipe(switchMap((trigger) => trigger.click$), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.toggle());\n }\n toggle() {\n this.onItemClick(this.parsedItem);\n }\n listenPointerOver() {\n const target = this.anchorElement();\n const listener = this.renderer.listen(target, 'pointerover', (event) => {\n this.onItemPointerEnter(this.parsedItem);\n this.cd.markForCheck();\n });\n this.destroyRef.onDestroy(() => listener());\n }\n updateFocusableElements() {\n const anchor = this.anchorElement();\n if (anchor) {\n this.focusableElements.reset([{ nativeElement: anchor }]);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.0\", type: RdtMenuComponent, isStandalone: false, selector: \"rdt-menu\", inputs: { trigger: { classPropertyName: \"trigger\", publicName: \"trigger\", isSignal: true, isRequired: true, transformFunction: null }, dataTestId: { classPropertyName: \"dataTestId\", publicName: \"dataTestId\", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: \"items\", publicName: \"items\", isSignal: true, isRequired: true, transformFunction: null } }, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuComponent,\n },\n ], usesInheritance: true, ngImport: i0, template: \"@if (parsedItem) {\\r\\n<rdt-menu-overlay\\r\\n [anchorElement]=\\\"anchorElement()\\\"\\r\\n [item]=\\\"$any(parsedItem)\\\"\\r\\n [expanded]=\\\"expandedChild()?.item === parsedItem\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n/>\\r\\n}\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu{display:block;position:relative}\\n\"], dependencies: [{ kind: \"component\", type: i1.RdtMenuOverlayComponent, selector: \"rdt-menu-overlay\", inputs: [\"item\", \"level\", \"preferredHorizontalDir\", \"preferredVerticalDir\", \"expanded\", \"autofocusItem\", \"anchorElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuComponent, decorators: [{\n type: Component,\n args: [{ selector: 'rdt-menu', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuComponent,\n },\n ], standalone: false, template: \"@if (parsedItem) {\\r\\n<rdt-menu-overlay\\r\\n [anchorElement]=\\\"anchorElement()\\\"\\r\\n [item]=\\\"$any(parsedItem)\\\"\\r\\n [expanded]=\\\"expandedChild()?.item === parsedItem\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n/>\\r\\n}\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu{display:block;position:relative}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9tZW51L3JkdC1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS9yZHQtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQWdCbkQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLG9CQUFvQjtJQUNyQyxXQUFXLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFekQsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQW9CLENBQUM7SUFDN0MsVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBaUIsQ0FBQztJQUNyQixjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQWdCO1lBQzNC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Q0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7dUdBeEZVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLCtiQVJoQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLFdBQVcsRUFBRSxnQkFBZ0I7YUFDOUI7U0FDRixpREM5QkgsOFdBV0E7OzJGRHNCYSxnQkFBZ0I7a0JBZDVCLFNBQVM7K0JBQ0UsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxvQkFBb0I7NEJBQzdCLFdBQVcsa0JBQWtCO3lCQUM5QjtxQkFDRixjQUNXLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGFmdGVyTmV4dFJlbmRlcixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgZWZmZWN0LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IFJEVF9CVVRUT05fQkFTRV9QUk9WSURFUiwgUmR0QnV0dG9uQmFzZUludCB9IGZyb20gJ0BuZ3JkdC9idXR0b24nO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0TWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9tZW51LWJhc2UvcmR0LW1lbnUtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZHRNZW51SXRlbSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IHBhcnNlTWVudUl0ZW1zIH0gZnJvbSAnLi4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyZHQtbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JkdC1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmR0LW1lbnUuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IFJkdE1lbnVCYXNlQ29tcG9uZW50LFxyXG4gICAgICB1c2VFeGlzdGluZzogUmR0TWVudUNvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVDb21wb25lbnQgZXh0ZW5kcyBSZHRNZW51QmFzZUNvbXBvbmVudCB7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJ1dHRvbkNsYXNzID0gaW5qZWN0KFJEVF9CVVRUT05fQkFTRV9QUk9WSURFUik7XHJcblxyXG4gIHJlYWRvbmx5IHRyaWdnZXIgPSBpbnB1dC5yZXF1aXJlZDxSZHRCdXR0b25CYXNlSW50PigpO1xyXG4gIHJlYWRvbmx5IGRhdGFUZXN0SWQgPSBpbnB1dCgnJyk7XHJcbiAgcmVhZG9ubHkgaXRlbXMgPSBpbnB1dC5yZXF1aXJlZDxSZHRNZW51SXRlbVtdPigpO1xyXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZWFkb25seSBhbGxQYXJzZWRJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcygpO1xyXG4gICAgY29uc3Qgd3JhcHBlcjogUmR0TWVudUl0ZW0gPSB7XHJcbiAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgaWNvbjogJycsXHJcbiAgICAgIGl0ZW1zOiBpdGVtcyxcclxuICAgIH07XHJcbiAgICByZXR1cm4gcGFyc2VNZW51SXRlbXMoW3dyYXBwZXJdLCB0aGlzLmluamVjdG9yKTtcclxuICB9KTtcclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IGZvY3VzYWJsZUVsZW1lbnRzID0gbmV3IFF1ZXJ5TGlzdDxcclxuICAgIEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XHJcbiAgPigpO1xyXG5cclxuICBvdmVycmlkZSBnZXQgYnV0dG9uQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmFuY2hvckVsZW1lbnQoKSA/PyB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFyc2VkSXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSXRlbXMoKVswXTtcclxuICB9XHJcblxyXG4gIGdldCBhbmNob3JFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlcigpLmFuY2hvckVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RlblBvaW50ZXJPdmVyKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlRm9jdXNhYmxlRWxlbWVudHMoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVDbGlja3MoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgdHJpZ2dlclRhYkluZGV4RWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXIoKTtcclxuICAgIHRyaWdnZXIudGFiSW5kZXguc2V0KDApO1xyXG4gIH0pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdHJpZ2dlckRhdGFUZXN0SWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgdHJpZ2dlciA9IHRoaXMudHJpZ2dlcigpO1xyXG4gICAgY29uc3QgZGF0YVRlc3RJZCA9IHRoaXMuZGF0YVRlc3RJZCgpO1xyXG4gICAgdHJpZ2dlci5kYXRhVGVzdElkLnNldChkYXRhVGVzdElkKTtcclxuICB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHRyaWdnZXJBcmlhRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXIoKTtcclxuICAgIGNvbnN0IGV4cGFuZGVkQ2hpbGQgPSB0aGlzLmV4cGFuZGVkQ2hpbGQoKTtcclxuICAgIHRyaWdnZXIuYXJpYS5zZXQoe1xyXG4gICAgICByb2xlOiAnbWVudWl0ZW0nLFxyXG4gICAgICAnYXJpYS1oYXNwb3B1cCc6ICd0cnVlJyxcclxuICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBleHBhbmRlZENoaWxkPy5pdGVtID09PSB0aGlzLnBhcnNlZEl0ZW0sXHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVDbGlja3MoKSB7XHJcbiAgICB0b09ic2VydmFibGUodGhpcy50cmlnZ2VyKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKHRyaWdnZXIpID0+IHRyaWdnZXIuY2xpY2skKSxcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGUoKSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGUoKSB7XHJcbiAgICB0aGlzLm9uSXRlbUNsaWNrKHRoaXMucGFyc2VkSXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlblBvaW50ZXJPdmVyKCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5hbmNob3JFbGVtZW50KCk7XHJcbiAgICBjb25zdCBsaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRhcmdldCwgJ3BvaW50ZXJvdmVyJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub25JdGVtUG9pbnRlckVudGVyKHRoaXMucGFyc2VkSXRlbSk7XHJcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IGxpc3RlbmVyKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb2N1c2FibGVFbGVtZW50cygpIHtcclxuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuYW5jaG9yRWxlbWVudCgpO1xyXG4gICAgaWYgKGFuY2hvcikge1xyXG4gICAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLnJlc2V0KFt7IG5hdGl2ZUVsZW1lbnQ6IGFuY2hvciB9XSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAocGFyc2VkSXRlbSkge1xyXG48cmR0LW1lbnUtb3ZlcmxheVxyXG4gIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsZW1lbnQoKVwiXHJcbiAgW2l0ZW1dPVwiJGFueShwYXJzZWRJdGVtKVwiXHJcbiAgW2V4cGFuZGVkXT1cImV4cGFuZGVkQ2hpbGQoKT8uaXRlbSA9PT0gcGFyc2VkSXRlbVwiXHJcbiAgW2F1dG9mb2N1c0l0ZW1dPVwiYXV0b2ZvY3VzU3VibWVudUl0ZW1cIlxyXG4gIFtwcmVmZXJyZWRIb3Jpem9udGFsRGlyXT1cInByZWZlcnJlZEhvcml6b250YWxEaXIoKVwiXHJcbiAgW3ByZWZlcnJlZFZlcnRpY2FsRGlyXT1cInByZWZlcnJlZFZlcnRpY2FsRGlyKClcIlxyXG4gIFtsZXZlbF09XCIwXCJcclxuLz5cclxufVxyXG4iXX0=","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RdtButtonOutletDirective } from '@ngrdt/button';\nimport { RdtAnyRouteActiveDirective } from '@ngrdt/router';\nimport { RdtKeyListenerDirective } from '@ngrdt/shortcuts';\nimport { RdtMenuBarComponent } from './menu-bar/rdt-menu-bar.component';\nimport { RdtMenuOverlayComponent } from './menu-overlay/rdt-menu-overlay.component';\nimport { RdtMenuComponent } from './menu/rdt-menu.component';\nimport * as i0 from \"@angular/core\";\nexport class RdtMenuModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuModule, declarations: [RdtMenuOverlayComponent,\n RdtMenuComponent,\n RdtMenuBarComponent], imports: [CommonModule,\n RouterModule,\n RdtAnyRouteActiveDirective,\n RdtKeyListenerDirective,\n RdtButtonOutletDirective], exports: [RdtMenuComponent, RdtMenuBarComponent] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuModule, imports: [CommonModule,\n RouterModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n RouterModule,\n RdtAnyRouteActiveDirective,\n RdtKeyListenerDirective,\n RdtButtonOutletDirective,\n ],\n declarations: [\n RdtMenuOverlayComponent,\n RdtMenuComponent,\n RdtMenuBarComponent,\n ],\n exports: [RdtMenuComponent, RdtMenuBarComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9yZHQtbWVudS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBaUI3RCxNQUFNLE9BQU8sYUFBYTt1R0FBYixhQUFhO3dHQUFiLGFBQWEsaUJBTnRCLHVCQUF1QjtZQUN2QixnQkFBZ0I7WUFDaEIsbUJBQW1CLGFBVG5CLFlBQVk7WUFDWixZQUFZO1lBQ1osMEJBQTBCO1lBQzFCLHVCQUF1QjtZQUN2Qix3QkFBd0IsYUFPaEIsZ0JBQWdCLEVBQUUsbUJBQW1CO3dHQUVwQyxhQUFhLFlBYnRCLFlBQVk7WUFDWixZQUFZOzsyRkFZSCxhQUFhO2tCQWZ6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLHdCQUF3QjtxQkFDekI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7cUJBQ3BCO29CQUNELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO2lCQUNqRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdEJ1dHRvbk91dGxldERpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9idXR0b24nO1xyXG5pbXBvcnQgeyBSZHRBbnlSb3V0ZUFjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQgeyBSZHRNZW51QmFyQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWJhci9yZHQtbWVudS1iYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudU92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJkdE1lbnVDb21wb25lbnQgfSBmcm9tICcuL21lbnUvcmR0LW1lbnUuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLFxyXG4gICAgUmR0QW55Um91dGVBY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSxcclxuICAgIFJkdEJ1dHRvbk91dGxldERpcmVjdGl2ZSxcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUmR0TWVudU92ZXJsYXlDb21wb25lbnQsXHJcbiAgICBSZHRNZW51Q29tcG9uZW50LFxyXG4gICAgUmR0TWVudUJhckNvbXBvbmVudCxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtSZHRNZW51Q29tcG9uZW50LCBSZHRNZW51QmFyQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVNb2R1bGUge31cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyZHQtbWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9uZ3JkdC1tZW51LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i5.RdtMenuOverlayComponent","i1.RdtMenuOverlayComponent"],"mappings":";;;;;;;;;;;;;;;AACU,IAAC;AACX,CAAC,UAAU,mBAAmB,EAAE;AAChC,IAAI,mBAAmB,CAAC,YAAY,CAAC,GAAG,YAAY;AACpD,IAAI,mBAAmB,CAAC,cAAc,CAAC,GAAG,cAAc;AACxD,CAAC,EAAE,mBAAmB,KAAK,mBAAmB,GAAG,EAAE,CAAC,CAAC;AACzC,MAAC,iCAAiC,GAAG;AACrC,MAAC,oCAAoC,GAAG;AACxC,MAAC,kCAAkC,GAAG;AACtC,MAAC,mCAAmC,GAAG;AACvC,MAAC,2BAA2B,GAAG;AAC/B,MAAC,yBAAyB,GAAG;AAC7B,MAAC,gCAAgC,GAAG,IAAI,cAAc,CAAC,yBAAyB;AAChF,MAAC,8BAA8B,GAAG,IAAI,cAAc,CAAC,uBAAuB;;ACZjF,SAAS,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,EAAE,EAAE;AAC7D,IAAI,OAAO;AACX,SAAS,GAAG,CAAC,CAAC,IAAI,KAAK;AACvB,QAAQ,IAAI,SAAS;AACrB,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,SAAS,GAAG,IAAI,CAAC,UAAU;AACvC;AACA,aAAa,IAAI,MAAM,EAAE;AACzB,YAAY,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;AACxE;AACA,aAAa;AACb,YAAY,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAChE;AACA,QAAQ,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC;AACxF,QAAQ,MAAM,GAAG,GAAG;AACpB,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;AAC7B,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACnC,YAAY,OAAO,EAAE,IAAI,CAAC,OAAO;AACjC,YAAY,OAAO,EAAE,IAAI,CAAC,OAAO;AACjC,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;AACzC,YAAY,cAAc,EAAE,IAAI,CAAC,cAAc;AAC/C,YAAY,UAAU,EAAE,aAAa;AACrC,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;AACxB,YAAY,MAAM,WAAW,GAAG,GAAG;AACnC,YAAY,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC;AAClF,YAAY,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,gBAAgB,WAAW,CAAC,KAAK,GAAG,cAAc;AAClD;AACA,YAAY,OAAO,WAAW;AAC9B;AACA,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE;AAClC,YAAY,MAAM,OAAO,GAAG,GAAG;AAC/B,YAAY,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO;AACnD,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,gBAAgB,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;AAC1E,gBAAgB,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE;AAC1E,oBAAoB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3F,oBAAoB,OAAO,CAAC,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC;AAClE;AACA;AACA,YAAY,OAAO,OAAO;AAC1B;AACA,aAAa;AACb,YAAY,MAAM,OAAO,GAAG,GAAG;AAC/B,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;AACnC,gBAAgB,IAAI,IAAI,CAAC,WAAW,EAAE;AACtC,oBAAoB,OAAO,CAAC,YAAY,GAAG,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC;AAChH;AACA,qBAAqB;AACrB,oBAAoB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AAC5D;AACA;AACA,YAAY,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ;AACpD,YAAY,OAAO,OAAO;AAC1B;AACA,KAAK;AACL,SAAS,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;AACzD,SAAS,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY;AAC3C,QAAQ,IAAI,CAAC,YAAY,CAAC;AAC1B,QAAQ,IAAI,CAAC,OAAO;AACpB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC;AACO,IAAI,mBAAmB;AAC9B,CAAC,UAAU,mBAAmB,EAAE;AAChC,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AACnE,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AACnE,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU;AACzE,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AACnE,CAAC,EAAE,mBAAmB,KAAK,mBAAmB,GAAG,EAAE,CAAC,CAAC;;ACvE9C,MAAM,eAAe,GAAG,WAAW;AACnC,MAAM,aAAa,GAAG,eAAe;AAC5C,SAAS,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE;AACzC,IAAI,IAAI,WAAW;AACnB,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;AACnC,QAAQ,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjF;AACA,SAAS;AACT,QAAQ,WAAW,GAAG,EAAE;AACxB;AACA,IAAI,IAAI,GAAG;AACX,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AACnD,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;AACtD;AACA,SAAS;AACT,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;AACvC;AACA,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;AACtB,IAAI,OAAO,GAAG;AACd;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACzC,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE;AACzB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5D,IAAI,OAAO,GAAG;AACd;AACO,SAAS,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;AACjE,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM;AAC5B,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE;AACvC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE;AAC5E,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE;AACxD,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACtC,YAAY,OAAO,CAAC;AACpB;AACA;AACA,IAAI,OAAO,IAAI;AACf;AACO,SAAS,mBAAmB,CAAC,IAAI,EAAE;AAC1C,IAAI,OAAO,OAAO,IAAI,IAAI;AAC1B;AACO,SAAS,gBAAgB,CAAC,IAAI,EAAE;AACvC,IAAI,OAAO,YAAY,IAAI,IAAI;AAC/B;AACA,SAAS,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;AAC1D,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC;AACvC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,QAAQ,GAAG,CAAC,IAAI,CAAC;AACjB,YAAY,IAAI,EAAE,IAAI;AACtB,YAAY,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACnC,SAAS,CAAC;AACV;AACA,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACjF;AACA;AACO,SAAS,qBAAqB,CAAC,KAAK,EAAE;AAC7C,IAAI,MAAM,GAAG,GAAG,EAAE;AAClB,IAAI,MAAM,WAAW,GAAG,EAAE;AAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;AAC7E,IAAI,OAAO,GAAG;AACd;AACO,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;AACtC,IAAI,IAAI,CAAC,CAAC,EAAE;AACZ,QAAQ,OAAO,CAAC,CAAC;AACjB;AACA,IAAI,IAAI,CAAC,CAAC,EAAE;AACZ,QAAQ,OAAO,CAAC,CAAC;AACjB;AACA,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;AAC/C;AACO,SAAS,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE;AACvC,IAAI,IAAI,CAAC,CAAC,EAAE;AACZ,QAAQ,OAAO,CAAC,CAAC;AACjB;AACA,IAAI,IAAI,CAAC,CAAC,EAAE;AACZ,QAAQ,OAAO,CAAC,CAAC;AACjB;AACA,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG;AAC7C;;AC7DA;AACO,MAAM,uBAAuB,CAAC;AACrC,IAAI,KAAK,GAAG,MAAM,EAAE,UAAU,EAAE;AAChC,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACnC,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAChC,IAAI,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC/C,IAAI,UAAU,GAAG,MAAM,CAAC,uBAAuB,EAAE;AACjD,QAAQ,QAAQ,EAAE,IAAI;AACtB,QAAQ,QAAQ,EAAE,IAAI;AACtB,KAAK,CAAC;AACN,IAAI,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC/B,IAAI,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAChD,IAAI,QAAQ;AACZ,IAAI,iBAAiB;AACrB,IAAI,iBAAiB;AACrB,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC3B,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5B,IAAI,sBAAsB,GAAG,KAAK,CAAC,2BAA2B,CAAC;AAC/D,IAAI,oBAAoB,GAAG,KAAK,CAAC,yBAAyB,CAAC;AAC3D,IAAI,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACvD,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AACvD,IAAI,kBAAkB,GAAG,KAAK,CAAC,IAAI,EAAE;AACrC,QAAQ,KAAK,EAAE,eAAe;AAC9B,KAAK,CAAC;AACN,IAAI,aAAa,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACjE;AACA;AACA;AACA,IAAI,kBAAkB,GAAG,KAAK,CAAC,IAAI,EAAE;AACrC,QAAQ,KAAK,EAAE,eAAe;AAC9B,KAAK,CAAC;AACN,IAAI,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC;AACvG,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9C,IAAI,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACpD;AACA,IAAI,IAAI;AACR,IAAI,IAAI,GAAG,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,IAAI;AACxB;AACA;AACA,IAAI,UAAU;AACd,IAAI,iBAAiB,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AAC7C;AACA,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE;AAC/B,QAAQ,KAAK,EAAE,gBAAgB;AAC/B,KAAK,CAAC;AACN,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE;AACjC,QAAQ,KAAK,EAAE,eAAe;AAC9B,KAAK,CAAC;AACN,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC;AAChC,IAAI,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC;AACvC,IAAI,UAAU,GAAG;AACjB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAChE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAClE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC,QAAQ,CAAC;AACxG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AACpD,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/C,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAClF,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AAChD,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACtE,QAAQ,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACzE,KAAK;AACL,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC7B,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,gBAAgB,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG;AAC3D;AACA,iBAAiB;AACjB,gBAAgB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,GAAG;AAC7D;AACA;AACA,QAAQ,OAAO,SAAS;AACxB;AACA,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM;AAChC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5F,KAAK,CAAC;AACN,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM;AAClC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC9B,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC;AACA,KAAK,CAAC;AACN,IAAI,mBAAmB,GAAG,iBAAiB,CAAC,MAAM;AAClD,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjD,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,aAAa;AACjC,gBAAgB,KAAK,IAAI;AACzB,oBAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;AAC5C,oBAAoB;AACpB,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;AAC3C,oBAAoB;AACpB,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC;AACnE;AACA;AACA,KAAK,CAAC;AACN,IAAI,WAAW,GAAG;AAClB,QAAQ,eAAe,CAAC,MAAM;AAC9B,YAAY,IAAI,CAAC,uBAAuB,EAAE;AAC1C,YAAY,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChG,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC,SAAS,CAAC;AACV;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI;AAChD;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,QAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK;AAClD,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;AAC3B,YAAY,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK;AAC9C;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG;AAC/C;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,QAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AACnD,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM;AAC5B,YAAY,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AAC/C;AACA,IAAI,mBAAmB,CAAC,sBAAsB,EAAE,oBAAoB,EAAE;AACtE,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AAClD,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAC7E,YAAY;AACZ;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC;AAC3E,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC;AACxE;AACA,QAAQ,IAAI,SAAS,CAAC,GAAG,KAAK,OAAO,EAAE;AACvC,YAAY,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI;AAClD,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB,gBAAgB,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK;AACvD;AACA;AACA,aAAa,IAAI,SAAS,CAAC,GAAG,KAAK,MAAM,EAAE;AAC3C,YAAY,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;AACpE,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK;AACvD;AACA;AACA;AACA,QAAQ,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC7G;AACA,QAAQ,IAAI,UAAU,CAAC,GAAG,KAAK,MAAM,EAAE;AACvC,YAAY,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG;AAChD,YAAY,IAAI,MAAM,EAAE;AACxB,gBAAgB,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM;AACxD;AACA,iBAAiB;AACjB,gBAAgB,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG;AAC5D;AACA;AACA,aAAa,IAAI,UAAU,CAAC,GAAG,KAAK,IAAI,EAAE;AAC1C,YAAY,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AACnE,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB,gBAAgB,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG;AACrF;AACA;AACA;AACA,QAAQ,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3G,QAAQ,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,SAAS,CAAC;AACtD,YAAY,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE;AACxD,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7C,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5C,YAAY,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC;AACA,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,aAAa,IAAI,WAAW,EAAE;AAC3D,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;AAC3G;AACA;AACA,IAAI,kBAAkB,CAAC,IAAI,EAAE;AAC7B,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AACpE,QAAQ,IAAI,WAAW,IAAI,aAAa,EAAE,GAAG,KAAK,mBAAmB,CAAC,KAAK,EAAE;AAC7E,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/C,YAAY,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;AAC3C,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAChF,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC;AACA,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C;AACA;AACA;AACA,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC;AACrD,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC3D,QAAQ,IAAI,CAAC,WAAW,IAAI,aAAa,EAAE,IAAI,KAAK,IAAI;AACxD,aAAa,WAAW,IAAI,aAAa,EAAE,GAAG,KAAK,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC/E,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/C,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAC5E;AACA,aAAa;AACb,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAY,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AAC7C;AACA,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;AAChD,YAAY,IAAI,CAAC,OAAO,EAAE;AAC1B;AACA;AACA,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AACvD,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACjD;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9B,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9C;AACA,IAAI,cAAc,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC;AACrD;AACA,IAAI,aAAa,CAAC,aAAa,GAAG,KAAK,EAAE;AACzC,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAClD,QAAQ,IAAI,aAAa,IAAI,aAAa,EAAE;AAC5C,YAAY,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;AAC9C;AACA,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;AAC9B;AACA,IAAI,oBAAoB,CAAC,IAAI,EAAE;AAC/B,QAAQ,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC;AAClC,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE;AACzC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3C,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,YAAY,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,KAAK;AACtE,iBAAiB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,iBAAiB,SAAS,CAAC,CAAC,OAAO,KAAK;AACxC,gBAAgB,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACtD,aAAa,CAAC;AACd;AACA,aAAa;AACb;AACA;AACA;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACpC;AACA,YAAY,IAAI,CAAC,aAAa,EAAE;AAChC;AACA,YAAY,UAAU,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzD;AACA;AACA,IAAI,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE;AACjC,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC9C,YAAY,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC;AAC5F;AACA,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC7C,QAAQ,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;AAC9B,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AACnF,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,OAAO,EAAE,CAAC,KAAK,CAAC;AAC5B;AACA,aAAa;AACb,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAC3J;AACA;AACA,IAAI,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE;AAChC,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAQ,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU;AACvD,QAAQ,MAAM,QAAQ,GAAG,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;AACtE,YAAY,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;AACxD,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE;AACnC,YAAY,KAAK,CAAC,cAAc,EAAE;AAClC;AACA,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,KAAK,CAAC,eAAe,EAAE;AACnC;AACA,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAClD;AACA,aAAa,IAAI,QAAQ,EAAE;AAC3B,YAAY,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;AACrF,YAAY,IAAI,IAAI,KAAK,IAAI,EAAE;AAC/B,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpC;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB;AACA,QAAQ,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE;AAC7C;AACA,QAAQ,UAAU,CAAC,MAAM;AACzB,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACjF,gBAAgB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrC;AACA,SAAS,EAAE,CAAC,CAAC;AACb;AACA,IAAI,sBAAsB,CAAC,SAAS,EAAE;AACtC,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;AAC9C,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,YAAY;AACZ;AACA,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAClC;AACA,IAAI,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE;AACzC,QAAQ,IAAI,SAAS;AACrB,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACtC,YAAY,SAAS,GAAG,IAAI;AAC5B;AACA,aAAa;AACb,YAAY,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACvD;AACA,QAAQ,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACzE,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAY,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC;AACxD;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAC1G;AACA,IAAI,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE;AAC5C,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3D,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,IAAI,YAAY,EAAE;AAC9B,gBAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC;AAC1E;AACA,YAAY,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AACvC;AACA;AACA,IAAI,aAAa,CAAC,SAAS,EAAE;AAC7B,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAQ,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM;AAC5D,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC5B;AACA,IAAI,aAAa,CAAC,SAAS,EAAE;AAC7B,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAQ,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM;AACpF,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC5B;AACA,IAAI,WAAW,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE;AAC9C,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAQ,IAAI,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM;AAC7C,YAAY,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE;AAC5D,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;AAC5E,YAAY,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC;AACvD;AACA;AACA,IAAI,SAAS,CAAC,aAAa,GAAG,IAAI,EAAE;AACpC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC;AACxD;AACA,aAAa;AACb,YAAY,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC;AAC1D;AACA;AACA,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;AAC5E,QAAQ,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/D,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;AACnD,YAAY,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa;AAC9C,YAAY,IAAI,EAAE,MAAM,YAAY,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9E,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,sBAAsB,EAAE;AACjD,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AAClD,QAAQ,IAAI,IAAI;AAChB,QAAQ,IAAI,KAAK;AACjB;AACA,QAAQ,IAAI,MAAM,EAAE;AACpB,YAAY,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;AAC1D,YAAY,KAAK;AACjB,gBAAgB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK;AAClD,qBAAqB,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5D;AACA,aAAa;AACb;AACA,YAAY,KAAK;AACjB,gBAAgB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK;AAClD,qBAAqB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7D,YAAY,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;AACzD;AACA,QAAQ,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI;AACjD,QAAQ,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK;AACnD,QAAQ,IAAI,sBAAsB,KAAK,OAAO,EAAE;AAChD;AACA,YAAY,IAAI,KAAK,IAAI,CAAC,EAAE;AAC5B,gBAAgB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;AAChD;AACA;AACA,iBAAiB,IAAI,IAAI,IAAI,CAAC,EAAE;AAChC,gBAAgB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;AAC/C;AACA;AACA;AACA,iBAAiB;AACjB,gBAAgB,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC;AACrE;AACA;AACA,aAAa;AACb,YAAY,IAAI,IAAI,IAAI,CAAC,EAAE;AAC3B,gBAAgB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;AAC/C;AACA,iBAAiB,IAAI,KAAK,IAAI,CAAC,EAAE;AACjC,gBAAgB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;AAChD;AACA,iBAAiB;AACjB,gBAAgB,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC;AACrE;AACA;AACA;AACA;AACA;AACA,IAAI,4BAA4B,CAAC,IAAI,EAAE,KAAK,EAAE;AAC9C,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI;AAC7D,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK;AACjG,QAAQ,MAAM,YAAY,GAAG,CAAC,WAAW,GAAG,SAAS,IAAI,CAAC;AAC1D,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC;AACrE,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC;AAC5F,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC;AAC1D,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;AAC1F,QAAQ,IAAI,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,EAAE;AACzD,YAAY,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;AAChD;AACA,aAAa;AACb,YAAY,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAC/C;AACA;AACA,IAAI,kBAAkB,CAAC,oBAAoB,EAAE;AAC7C,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AAClD,QAAQ,IAAI,MAAM;AAClB,QAAQ,IAAI,GAAG;AACf,QAAQ,IAAI,MAAM,EAAE;AACpB,YAAY,MAAM;AAClB,gBAAgB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AACnD,oBAAoB,IAAI,CAAC,UAAU,CAAC,MAAM;AAC1C,oBAAoB,IAAI,CAAC,IAAI,CAAC,MAAM;AACpC,YAAY,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AACxD;AACA,aAAa;AACb,YAAY,MAAM;AAClB,gBAAgB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AACnD,oBAAoB,IAAI,CAAC,UAAU,CAAC,GAAG;AACvC,oBAAoB,IAAI,CAAC,IAAI,CAAC,MAAM;AACpC,YAAY,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AAC3D;AACA,QAAQ,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG;AAC/C,QAAQ,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AACrD,QAAQ,IAAI,oBAAoB,KAAK,MAAM,EAAE;AAC7C,YAAY,IAAI,MAAM,IAAI,CAAC,EAAE;AAC7B,gBAAgB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;AAC9C;AACA,iBAAiB,IAAI,GAAG,IAAI,CAAC,EAAE;AAC/B,gBAAgB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;AAC5C;AACA,iBAAiB;AACjB,gBAAgB,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,EAAE;AAC5D;AACA;AACA,aAAa;AACb,YAAY,IAAI,GAAG,IAAI,CAAC,EAAE;AAC1B,gBAAgB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;AAC5C;AACA,iBAAiB,IAAI,MAAM,IAAI,CAAC,EAAE;AAClC,gBAAgB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;AAC9C;AACA,iBAAiB;AACjB,gBAAgB,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,EAAE;AAC5D;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACpE,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AAC3C,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE;AACxD;AACA,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AACrF,QAAQ,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC;AAChE,QAAQ,MAAM,aAAa,GAAG,UAAU,CAAC,cAAc,CAAC,aAAa,CAAC;AACtE,QAAQ,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE;AAC3E;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AACzC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAC3C,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AAC/C,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,IAAI,QAAQ,CAAC,GAAG,KAAK,IAAI,EAAE;AACvC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AAC/C,gBAAgB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;AACpD;AACA,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;AAClD,gBAAgB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AACjD;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;AAC/C;AACA,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,IAAI,UAAU,CAAC,GAAG,KAAK,MAAM,EAAE;AAC3C,gBAAgB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AACjD,gBAAgB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC;AACrD;AACA,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;AACpD,gBAAgB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AAClD;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;AACnD;AACA,QAAQ,IAAI,MAAM,EAAE;AACpB,YAAY,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC1C,YAAY,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AAC5C;AACA,aAAa;AACb,YAAY,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;AAC7C,YAAY,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AACzC;AACA;AACA,IAAI,QAAQ,CAAC,SAAS,EAAE;AACxB,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC;AACnE;AACA,IAAI,WAAW,CAAC,SAAS,EAAE;AAC3B,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC;AACtE;AACA,IAAI,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE;AAChC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACjF;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;AACjE,QAAQ,MAAM,GAAG,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC;AACnD,QAAQ,IAAI,CAAC;AACb,aAAa,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;AACrC,YAAY,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;AAC7C,YAAY,cAAc,EAAE,KAAK;AACjC,SAAS;AACT,aAAa,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACrD,aAAa,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5D;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AACjL,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,sBAAsB,EAAE,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,oBAAoB,EAAE,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,UAAU,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,uBAAuB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,+gHAA+gH,EAAE,MAAM,EAAE,CAAC,2+EAA2+E,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,0BAA0B,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC;AAC1pR;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE;AAC7H,wBAAwB,kBAAkB,EAAE,YAAY;AACxD,wBAAwB,iBAAiB,EAAE,UAAU;AACrD,wBAAwB,QAAQ,EAAE,IAAI;AACtC,wBAAwB,IAAI,EAAE,MAAM;AACpC,qBAAqB,EAAE,QAAQ,EAAE,+gHAA+gH,EAAE,MAAM,EAAE,CAAC,2+EAA2+E,CAAC,EAAE;AACziM,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC;AACnE,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,uBAAuB;AAC9C,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,eAAe;AACtC,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,mBAAmB;AAC1C,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;AACpD,aAAa,CAAC,EAAE,EAAE,CAAC;;AClkBZ,MAAM,oBAAoB,CAAC;AAClC,IAAI,oBAAoB,GAAG,KAAK,CAAC,yBAAyB,CAAC;AAC3D,IAAI,sBAAsB,GAAG,KAAK,CAAC,2BAA2B,CAAC;AAC/D;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,KAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAC1D,IAAI,eAAe,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACnE,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAC/D,IAAI,YAAY,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AAC5D,IAAI,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACnC,IAAI,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAI,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC9B,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC/B,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAChC,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,IAAI,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAChD,IAAI,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC1C,IAAI,QAAQ;AACZ,IAAI,iBAAiB;AACrB,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC;AAChC,IAAI,oBAAoB,GAAG,IAAI;AAC/B,IAAI,aAAa,GAAG,QAAQ,CAAC,MAAM;AACnC,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AAC3C,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;AACzD,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,OAAO,KAAK;AACxB;AACA,aAAa;AACb,YAAY,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;AACjD;AACA,KAAK,CAAC;AACN,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,WAAW;AAC/B;AACA,IAAI,WAAW;AACf,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,WAAW;AAC/B;AACA,IAAI,WAAW;AACf,IAAI,IAAI,mBAAmB,GAAG;AAC9B,QAAQ,OAAO,IAAI,CAAC,oBAAoB;AACxC;AACA,IAAI,oBAAoB;AACxB,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAC5E,IAAI,UAAU,GAAG;AACjB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAClE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACnE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC,QAAQ,CAAC;AACvG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC;AACpG,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/C,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACrF,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACtE,QAAQ,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACzE,KAAK;AACL,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AAC3D;AACA,IAAI,cAAc,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACpD;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,QAAQ,eAAe,CAAC,MAAM;AAC9B,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,YAAY,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC,SAAS,CAAC;AACV;AACA,IAAI,oBAAoB,GAAG,MAAM,CAAC,MAAM;AACxC,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,KAAK,CAAC;AACN,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC7C,gBAAgB,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACrG,aAAa,CAAC;AACd;AACA;AACA,IAAI,aAAa,CAAC,aAAa,GAAG,KAAK,EAAE;AACzC,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,IAAI,aAAa,IAAI,aAAa,EAAE;AAC5C,YAAY,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;AAC9C;AACA,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;AAC9B;AACA,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE,IAAI,KAAK,IAAI;AACtE,aAAa,WAAW,IAAI,aAAa,EAAE,GAAG,KAAK,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC/E,YAAY,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAC5C,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAC5E;AACA,aAAa;AACb,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC;AACA,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;AAChD,YAAY,IAAI,CAAC,OAAO,EAAE;AAC1B;AACA;AACA,IAAI,kBAAkB,CAAC,IAAI,EAAE;AAC7B,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,IAAI,mBAAmB,CAAC,IAAI,CAAC;AACzC,gBAAgB,aAAa,EAAE,GAAG,KAAK,mBAAmB,CAAC,KAAK,EAAE;AAClE,gBAAgB,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChD,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAChF;AACA,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C;AACA;AACA;AACA,IAAI,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE;AAChC,QAAQ,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU;AACvD,QAAQ,MAAM,QAAQ,GAAG,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;AACtE,YAAY,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;AACxD,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE;AACnC,YAAY,KAAK,CAAC,cAAc,EAAE;AAClC;AACA,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,KAAK,CAAC,eAAe,EAAE;AACnC;AACA,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAClD;AACA,aAAa,IAAI,QAAQ,EAAE;AAC3B,YAAY,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC/D,YAAY,MAAM,IAAI,GAAG,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;AACpF,YAAY,IAAI,IAAI,KAAK,IAAI,EAAE;AAC/B,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpC;AACA;AACA;AACA,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AACvD,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACjD;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9B,QAAQ,IAAI,CAAC,oBAAoB,GAAG,OAAO;AAC3C;AACA,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;AAC9B,QAAQ,IAAI,aAAa,GAAG,OAAO,CAAC,KAAK;AACzC,QAAQ,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM;AAC5C,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;AAChD,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtC,gBAAgB,OAAO,IAAI;AAC3B;AACA,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc;AAChD,YAAY,OAAO,aAAa,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,EAAE;AACzE,gBAAgB,aAAa,GAAG,aAAa,CAAC,MAAM;AACpD,gBAAgB,IAAI,CAAC,aAAa,EAAE;AACpC,oBAAoB,OAAO,KAAK;AAChC;AACA;AACA,YAAY,IAAI,cAAc,GAAG,QAAQ;AACzC,YAAY,GAAG;AACf,gBAAgB,MAAM,IAAI,GAAG,cAAc,CAAC,YAAY;AACxD,gBAAgB,IAAI,IAAI,IAAI,aAAa,EAAE;AAC3C,oBAAoB,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE;AACnE,wBAAwB,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AAC3F,4BAA4B,OAAO,KAAK;AACxC;AACA;AACA;AACA,gBAAgB,cAAc,GAAG,cAAc,CAAC,MAAM;AACtD,aAAa,QAAQ,cAAc;AACnC,YAAY,OAAO,IAAI;AACvB,SAAS,CAAC;AACV,QAAQ,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AACtC,YAAY,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAgB,OAAO;AACvB,oBAAoB,GAAG,IAAI;AAC3B,oBAAoB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;AAC9D,iBAAiB;AACjB;AACA,iBAAiB;AACjB,gBAAgB,OAAO,IAAI;AAC3B;AACA,SAAS,CAAC;AACV;AACA,IAAI,sBAAsB,CAAC,SAAS,EAAE;AACtC,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC;AAC7C,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,YAAY;AACZ;AACA,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAClC;AACA,IAAI,WAAW,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE;AAC9C,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,IAAI,SAAS,GAAG,aAAa,CAAC,MAAM;AAC5C,YAAY,mBAAmB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE;AAC3D,YAAY,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC;AACjD,YAAY,IAAI,CAAC,oBAAoB,GAAG,YAAY;AACpD,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACjD;AACA;AACA,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,IAAI,SAAS;AACrB,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACtC,YAAY,SAAS,GAAG,IAAI;AAC5B;AACA,aAAa;AACb,YAAY,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;AACnD;AACA,QAAQ,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACzE,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAY,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AAC1C;AACA;AACA,IAAI,aAAa,CAAC,SAAS,EAAE;AAC7B,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM;AAC3D,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC5B;AACA,IAAI,aAAa,CAAC,SAAS,EAAE;AAC7B,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM;AAClF,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC5B;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAC1G;AACA,IAAI,cAAc,CAAC,SAAS,EAAE;AAC9B,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3D,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC;AACtE,YAAY,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AACvC;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3D,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,QAAQ,IAAI,WAAW,IAAI,aAAa,EAAE;AAC1C,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/C,YAAY,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtG,YAAY,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3D,gBAAgB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC1C,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE;AAChD,oBAAoB,MAAM,CAAC,KAAK,EAAE;AAClC,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;AAC/D,QAAQ,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAClD,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;AACnD,YAAY,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa;AAC9C,YAAY,IAAI,EAAE,MAAM,YAAY,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9E,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C;AACA;AACA;AACA,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AACnC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;AAC9C,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACrC,YAAY,IAAI,CAAC,aAAa,EAAE;AAChC;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AACxE,QAAQ,MAAM,MAAM,GAAG,aAAa,CAAC,gBAAgB,CAAC,iCAAiC,CAAC;AACxF,QAAQ,MAAM,SAAS,GAAG,aAAa,CAAC,gBAAgB,CAAC,oCAAoC,CAAC;AAC9F,QAAQ,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,kCAAkC,CAAC;AAC1F,QAAQ,MAAM,QAAQ,GAAG,aAAa,CAAC,gBAAgB,CAAC,mCAAmC,CAAC;AAC5F,QAAQ,IAAI,CAAC,WAAW,GAAG;AAC3B,YAAY,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AACtC,YAAY,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;AAC5C,YAAY,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,YAAY,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC1C,SAAS;AACT;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,WAAW,GAAG;AAC3B,YAAY,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW;AACjD,YAAY,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY;AACnD,SAAS;AACT;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;AACvC,QAAQ,IAAI,EAAE,EAAE;AAChB,YAAY,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,qBAAqB,EAAE;AAClE;AACA,aAAa;AACb,YAAY,IAAI,CAAC,oBAAoB,GAAG,SAAS;AACjD;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,SAAS,CAAC,MAAM,EAAE,QAAQ;AAClC,aAAa,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACnH,aAAa,SAAS,CAAC,MAAM;AAC7B,YAAY,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC,SAAS,CAAC;AACV;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAC/D,QAAQ,MAAM,mBAAmB,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACnF,QAAQ,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnG,QAAQ,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AACzF,QAAQ;AACR,aAAa,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7I,aAAa,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC1E;AACA,IAAI,cAAc,CAAC,kBAAkB,EAAE;AACvC,QAAQ,MAAM,WAAW,GAAG,EAAE;AAC9B,QAAQ,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC7C,YAAY,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,IAAI;AAC/D,SAAS,CAAC;AACV,QAAQ,OAAO,WAAW;AAC1B;AACA,IAAI,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE;AAC9B,QAAQ,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC/C,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,YAAY,CAAC,uDAAuD,CAAC,EAAE,GAAG,CAAC;AAC9H;AACA,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1C,QAAQ,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAC/C,QAAQ,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU;AAC7D,QAAQ,IAAI,QAAQ,IAAI,UAAU,EAAE;AACpC,YAAY,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACrC,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,IAAI,CAAC,OAAO,EAAE;AAC9B;AACA,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACrD;AACA;AACA,aAAa;AACb,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC;AAC5E;AACA;AACA,IAAI,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE;AACvC,QAAQ,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AACzD,QAAQ,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC;AAClC,QAAQ,IAAI,YAAY,KAAK,mBAAmB,CAAC,YAAY,EAAE;AAC/D,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACtD,YAAY,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAC5D,gBAAgB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5C;AACA;AACA,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE;AACzC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC3D,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;AAC7F,YAAY,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAClD;AACA,aAAa;AACb,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACpC;AACA;AACA,IAAI,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE;AACzC,QAAQ,MAAM,IAAI,GAAG,MAAM;AAC3B,QAAQ,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO;AAC/B,QAAQ,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO;AAC/B,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AACnD,QAAQ,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM;AACvC,YAAY,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM;AACpC,YAAY,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM;AAClC,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;AACrC;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,EAAE;AACrD,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;AAC5D,QAAQ,IAAI,mBAAmB,EAAE;AACjC,YAAY,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC;AACpF;AACA,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,MAAM,KAAK,GAAG,EAAE;AACxB,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;AAC3C,YAAY,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC;AAC5D,SAAS,CAAC;AACV,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,2BAA2B,CAAC,OAAO,EAAE,KAAK,EAAE;AAChD,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE;AAChC,YAAY,IAAI,WAAW,GAAG,KAAK;AACnC,YAAY,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,MAAM,WAAW,KAAK,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACjH,YAAY,MAAM,KAAK,GAAG,WAAW,IAAI,OAAO,CAAC,aAAa,KAAK,mBAAmB,CAAC,KAAK;AAC5F,YAAY,KAAK,CAAC,IAAI,CAAC;AACvB,gBAAgB,IAAI,EAAE,OAAO,CAAC,GAAG;AACjC,gBAAgB,KAAK,EAAE,KAAK;AAC5B,gBAAgB,KAAK,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;AACrD,aAAa,CAAC;AACd,YAAY,OAAO,KAAK;AACxB;AACA,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AAC9K,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAAE,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,UAAU,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,sBAAsB,EAAE,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,uBAAuB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC76C;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,IAAI,EAAE;AAC1B,wBAAwB,KAAK,EAAE,eAAe;AAC9C,wBAAwB,sBAAsB,EAAE,uBAAuB;AACvE,wBAAwB,kBAAkB,EAAE,yBAAyB;AACrE,wBAAwB,mBAAmB,EAAE,4BAA4B;AACzE,qBAAqB;AACrB,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC;AACnE,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,uBAAuB;AAC9C,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,eAAe;AACtC,aAAa,CAAC,EAAE,EAAE,CAAC;;AC9aZ,MAAM,mBAAmB,SAAS,oBAAoB,CAAC;AAC9D,IAAI,kBAAkB;AACtB,IAAI,IAAI,eAAe,GAAG;AAC1B,QAAQ,OAAO,IAAI,CAAC,kBAAkB,EAAE,aAAa;AACrD;AACA,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5B,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChF,IAAI,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AAC3D,IAAI,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AAC3D,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AAC/K,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE;AACpnB,YAAY;AACZ,gBAAgB,OAAO,EAAE,oBAAoB;AAC7C,gBAAgB,WAAW,EAAE,mBAAmB;AAChD,aAAa;AACb,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,k5GAAk5G,EAAE,MAAM,EAAE,CAAC,2yGAA2yG,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,0BAA0B,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEA,uBAA0B,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AACt5P;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE;AAClJ,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,oBAAoB;AACzD,4BAA4B,WAAW,EAAE,mBAAmB;AAC5D,yBAAyB;AACzB,qBAAqB,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE;AAChD,wBAAwB,IAAI,EAAE,SAAS;AACvC,qBAAqB,EAAE,QAAQ,EAAE,k5GAAk5G,EAAE,MAAM,EAAE,CAAC,2yGAA2yG,CAAC,EAAE;AAC5uN,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,kBAAkB,EAAE,CAAC;AACnD,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AAC1D,aAAa,CAAC,EAAE,EAAE,CAAC;;AC/BZ,MAAM,gBAAgB,SAAS,oBAAoB,CAAC;AAC3D,IAAI,WAAW,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAClD,IAAI,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC9B,IAAI,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC;AAC1B,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5B,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM;AACpC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAClC,QAAQ,MAAM,OAAO,GAAG;AACxB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,EAAE;AACpB,YAAY,KAAK,EAAE,KAAK;AACxB,SAAS;AACT,QAAQ,OAAO,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;AACvD,KAAK,CAAC;AACN,IAAI,iBAAiB,GAAG,IAAI,SAAS,EAAE;AACvC,IAAI,IAAI,eAAe,GAAG;AAC1B,QAAQ,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS;AAChD;AACA,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACtC;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa;AAC3C;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,EAAE;AACf,QAAQ,eAAe,CAAC,MAAM;AAC9B,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC,YAAY,IAAI,CAAC,uBAAuB,EAAE;AAC1C,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B;AACA,IAAI,qBAAqB,GAAG,MAAM,CAAC,MAAM;AACzC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AACtC,QAAQ,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,KAAK,CAAC;AACN,IAAI,uBAAuB,GAAG,MAAM,CAAC,MAAM;AAC3C,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AACtC,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAC5C,QAAQ,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1C,KAAK,CAAC;AACN,IAAI,iBAAiB,GAAG,MAAM,CAAC,MAAM;AACrC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AACtC,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAClD,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACzB,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,eAAe,EAAE,MAAM;AACnC,YAAY,eAAe,EAAE,aAAa,EAAE,IAAI,KAAK,IAAI,CAAC,UAAU;AACpE,SAAS,CAAC;AACV,KAAK,CAAC;AACN,IAAI,eAAe,GAAG;AACtB,QAAQ,YAAY,CAAC,IAAI,CAAC,OAAO;AACjC,aAAa,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7F,aAAa,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3C;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AAC3C,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,KAAK,KAAK;AAChF,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,YAAY,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;AAClC,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,QAAQ,EAAE,CAAC;AACnD;AACA,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AAC3C,QAAQ,IAAI,MAAM,EAAE;AACpB,YAAY,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;AACrE;AACA;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AAC1K,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE;AAC1iB,YAAY;AACZ,gBAAgB,OAAO,EAAE,oBAAoB;AAC7C,gBAAgB,WAAW,EAAE,gBAAgB;AAC7C,aAAa;AACb,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,8WAA8W,EAAE,MAAM,EAAE,CAAC,40BAA40B,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEC,uBAA0B,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AACnkD;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;AAC1H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE;AAC9I,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,oBAAoB;AACzD,4BAA4B,WAAW,EAAE,gBAAgB;AACzD,yBAAyB;AACzB,qBAAqB,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,8WAA8W,EAAE,MAAM,EAAE,CAAC,40BAA40B,CAAC,EAAE;AAC5vC,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;;ACtFhC,MAAM,aAAa,CAAC;AAC3B,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AACtK,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,uBAAuB;AAC7J,YAAY,gBAAgB;AAC5B,YAAY,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY;AACxD,YAAY,YAAY;AACxB,YAAY,0BAA0B;AACtC,YAAY,uBAAuB;AACnC,YAAY,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,EAAE,CAAC;AAC1F,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,YAAY;AAC7I,YAAY,YAAY,CAAC,EAAE,CAAC;AAC5B;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACvH,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,YAAY;AACpC,wBAAwB,YAAY;AACpC,wBAAwB,0BAA0B;AAClD,wBAAwB,uBAAuB;AAC/C,wBAAwB,wBAAwB;AAChD,qBAAqB;AACrB,oBAAoB,YAAY,EAAE;AAClC,wBAAwB,uBAAuB;AAC/C,wBAAwB,gBAAgB;AACxC,wBAAwB,mBAAmB;AAC3C,qBAAqB;AACrB,oBAAoB,OAAO,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;AACpE,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACvCb;AACA;AACA;;;;"}
|
|
1
|
+
{"version":3,"file":"ngrdt-menu.mjs","sources":["../tmp-esm2022/lib/models.js","../tmp-esm2022/lib/private-models.js","../tmp-esm2022/lib/utils.js","../tmp-esm2022/lib/menu-overlay/rdt-menu-overlay.component.js","../tmp-esm2022/lib/menu-base/rdt-menu-base.component.js","../tmp-esm2022/lib/menu-bar/rdt-menu-bar.component.js","../tmp-esm2022/lib/menu/rdt-menu.component.js","../tmp-esm2022/lib/rdt-menu.module.js","../tmp-esm2022/ngrdt-menu.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport var RdtMenuShortcutMode;\n(function (RdtMenuShortcutMode) {\n RdtMenuShortcutMode[\"FOCUS_ITEM\"] = \"focus-item\";\n RdtMenuShortcutMode[\"OPEN_SUBMENU\"] = \"open-submenu\";\n})(RdtMenuShortcutMode || (RdtMenuShortcutMode = {}));\nexport const RDT_MENU_MARGIN_TOP_PROPERTY_NAME = '--rdt-menu-margin-top';\nexport const RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME = '--rdt-menu-margin-bottom';\nexport const RDT_MENU_MARGIN_LEFT_PROPERTY_NAME = '--rdt-menu-margin-left';\nexport const RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME = '--rdt-menu-margin-right';\nexport const DEFAULT_MENU_HORIZONTAL_DIR = 'left';\nexport const DEFAULT_MENU_VERTICAL_DIR = 'down';\nexport const RDT_MENU_HORIZONTAL_DIR_PROVIDER = new InjectionToken('RDT_MENU_HORIZONTAL_DIR');\nexport const RDT_MENU_VERTICAL_DIR_PROVIDER = new InjectionToken('RDT_MENU_VERTICAL_DIR');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTRCL0MsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3QixnREFBeUIsQ0FBQTtJQUN6QixvREFBNkIsQ0FBQTtBQUMvQixDQUFDLEVBSFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUc5QjtBQUVELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLDBCQUEwQixDQUFDO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLHdCQUF3QixDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHLHlCQUF5QixDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQzNDLElBQUksY0FBYyxDQUF5Qix5QkFBeUIsQ0FBQyxDQUFDO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUN6QyxJQUFJLGNBQWMsQ0FBdUIsdUJBQXVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJkdFJvdXRlIH0gZnJvbSAnQG5ncmR0L3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdE1lbnVJdGVtQmFzZSB9IGZyb20gJy4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgUmR0VmVydGljYWxEaXJlY3Rpb24sXHJcbiAgV2luZG93T3BlblRhcmdldFR5cGUsXHJcbn0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmR0TWVudUl0ZW1XaXRoUm91dGUgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2Uge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgcm91dGVyTGluaz86IFJkdFJvdXRlO1xyXG4gIGV4dGVybmFsTGluaz86IG5ldmVyO1xyXG4gIHRhcmdldD86IG5ldmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtV2l0aExpbmsgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2Uge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rOiBzdHJpbmc7XHJcbiAgcm91dGVyTGluaz86IG5ldmVyO1xyXG4gIHRhcmdldD86IFdpbmRvd09wZW5UYXJnZXRUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuIGV4dGVuZHMgUmR0TWVudUl0ZW1CYXNlIHtcclxuICBpdGVtczogUmR0TWVudUl0ZW1bXTtcclxuICByb3V0ZXJMaW5rPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgdGFyZ2V0PzogV2luZG93T3BlblRhcmdldFR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJkdE1lbnVJdGVtID1cclxuICB8IFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuXHJcbiAgfCBSZHRNZW51SXRlbVdpdGhSb3V0ZVxyXG4gIHwgUmR0TWVudUl0ZW1XaXRoTGluaztcclxuXHJcbmV4cG9ydCBlbnVtIFJkdE1lbnVTaG9ydGN1dE1vZGUge1xyXG4gIEZPQ1VTX0lURU0gPSAnZm9jdXMtaXRlbScsXHJcbiAgT1BFTl9TVUJNRU5VID0gJ29wZW4tc3VibWVudScsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBSRFRfTUVOVV9NQVJHSU5fVE9QX1BST1BFUlRZX05BTUUgPSAnLS1yZHQtbWVudS1tYXJnaW4tdG9wJztcclxuZXhwb3J0IGNvbnN0IFJEVF9NRU5VX01BUkdJTl9CT1RUT01fUFJPUEVSVFlfTkFNRSA9ICctLXJkdC1tZW51LW1hcmdpbi1ib3R0b20nO1xyXG5leHBvcnQgY29uc3QgUkRUX01FTlVfTUFSR0lOX0xFRlRfUFJPUEVSVFlfTkFNRSA9ICctLXJkdC1tZW51LW1hcmdpbi1sZWZ0JztcclxuZXhwb3J0IGNvbnN0IFJEVF9NRU5VX01BUkdJTl9SSUdIVF9QUk9QRVJUWV9OQU1FID0gJy0tcmR0LW1lbnUtbWFyZ2luLXJpZ2h0JztcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVIgPSAnbGVmdCc7XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSID0gJ2Rvd24nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFJEVF9NRU5VX0hPUklaT05UQUxfRElSX1BST1ZJREVSID1cclxuICBuZXcgSW5qZWN0aW9uVG9rZW48UmR0SG9yaXpvbnRhbERpcmVjdGlvbj4oJ1JEVF9NRU5VX0hPUklaT05UQUxfRElSJyk7XHJcbmV4cG9ydCBjb25zdCBSRFRfTUVOVV9WRVJUSUNBTF9ESVJfUFJPVklERVIgPVxyXG4gIG5ldyBJbmplY3Rpb25Ub2tlbjxSZHRWZXJ0aWNhbERpcmVjdGlvbj4oJ1JEVF9NRU5VX1ZFUlRJQ0FMX0RJUicpO1xyXG4iXX0=","import { RdtStringUtils } from '@ngrdt/utils';\nexport function parseMenuItems(items, injector, prefix = '') {\n return items\n .map((item) => {\n let newPrefix;\n if (item.dataTestId) {\n newPrefix = item.dataTestId;\n }\n else if (prefix) {\n newPrefix = RdtStringUtils.getDataTestId(item.label, prefix);\n }\n else {\n newPrefix = RdtStringUtils.getDataTestId(item.label);\n }\n const newDataTestId = RdtStringUtils.getDataTestId(newPrefix, null, 'menu-item');\n const res = {\n label: item.label,\n icon: item.icon,\n shortcut: item.shortcut,\n command: item.command,\n visible: item.visible,\n queryParams: item.queryParams,\n requiredParent: item.requiredParent,\n dataTestId: newDataTestId,\n };\n if (item.items) {\n const childrenRes = res;\n const parsedChildren = parseMenuItems(item.items, injector, newPrefix);\n if (parsedChildren.length > 0) {\n childrenRes.items = parsedChildren;\n }\n return childrenRes;\n }\n else if (item.routerLink) {\n const linkRes = res;\n linkRes.target = item.target ?? '_self';\n if (item.routerLink) {\n linkRes.routerLink = [item.routerLink.createAbsoluteUrl()];\n if (!res.visible && item.routerLink.hasCanBeEnteredGuard) {\n const canBeEntered = item.routerLink.canBeEntered.bind(item.routerLink);\n linkRes.visible = () => canBeEntered(injector);\n }\n }\n return linkRes;\n }\n else {\n const linkRes = res;\n if (item.externalLink) {\n if (item.queryParams) {\n linkRes.externalLink = RdtStringUtils.appendQueryParams(item.externalLink, item.queryParams);\n }\n else {\n linkRes.externalLink = item.externalLink;\n }\n }\n linkRes.target = item.target ?? '_blank';\n return linkRes;\n }\n })\n .filter((item) => !item.visible || item.visible())\n .filter((item) => item.externalLink ||\n item['routerLink'] ||\n item.command ||\n (item['items']?.length ?? 0) > 0);\n}\nexport var RdtMenuExpandSource;\n(function (RdtMenuExpandSource) {\n RdtMenuExpandSource[RdtMenuExpandSource[\"Click\"] = 0] = \"Click\";\n RdtMenuExpandSource[RdtMenuExpandSource[\"Hover\"] = 1] = \"Hover\";\n RdtMenuExpandSource[RdtMenuExpandSource[\"Shortcut\"] = 2] = \"Shortcut\";\n RdtMenuExpandSource[RdtMenuExpandSource[\"Focus\"] = 3] = \"Focus\";\n})(RdtMenuExpandSource || (RdtMenuExpandSource = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS1tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL3ByaXZhdGUtbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxjQUFjLEVBQXdCLE1BQU0sY0FBYyxDQUFDO0FBbURwRSxNQUFNLFVBQVUsY0FBYyxDQUM1QixLQUFvQixFQUNwQixRQUFrQixFQUNsQixNQUFNLEdBQUcsRUFBRTtJQUVYLE9BQU8sS0FBSztTQUNULEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1osSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzlCLENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLFNBQVMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0QsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQ2hELFNBQVMsRUFDVCxJQUFJLEVBQ0osV0FBVyxDQUNaLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBMEI7WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxXQUFXLEdBQUcsR0FBb0MsQ0FBQztZQUN6RCxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkUsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLEdBQWlDLENBQUM7WUFDbEQsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQztZQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQ3pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEQsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztvQkFDRixPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sT0FBTyxHQUFHLEdBQWdDLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNyQixPQUFPLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDckQsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUM7WUFDekMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNqRCxNQUFNLENBQ0wsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLElBQUksQ0FBQyxZQUFZO1FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU87UUFDWixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNuQyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sQ0FBTixJQUFZLG1CQUtYO0FBTEQsV0FBWSxtQkFBbUI7SUFDN0IsK0RBQUssQ0FBQTtJQUNMLCtEQUFLLENBQUE7SUFDTCxxRUFBUSxDQUFBO0lBQ1IsK0RBQUssQ0FBQTtBQUNQLENBQUMsRUFMVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICdAbmdyZHQvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U2hvcnRjdXQgfSBmcm9tICdAbmdyZHQvc2hvcnRjdXRzJztcclxuaW1wb3J0IHsgUmR0U3RyaW5nVXRpbHMsIFdpbmRvd09wZW5UYXJnZXRUeXBlIH0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuL21vZGVscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtQmFzZTxUSWNvbiA9IHN0cmluZz4ge1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaWNvbj86IFRJY29uO1xyXG4gIHNob3J0Y3V0PzogUmR0U2hvcnRjdXQ7XHJcbiAgY29tbWFuZD86ICgpID0+IHZvaWQ7XHJcbiAgdmlzaWJsZT86ICgpID0+IGJvb2xlYW47XHJcbiAgcXVlcnlQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG4gIHJlcXVpcmVkUGFyZW50PzogUmR0Um91dGU7XHJcbiAgZGF0YVRlc3RJZD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRSZHRNZW51SXRlbUJhc2U8VEljb24gPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2U8VEljb24+IHtcclxuICBkYXRhVGVzdElkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW48VEljb24gPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBQYXJzZWRSZHRNZW51SXRlbUJhc2U8VEljb24+IHtcclxuICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXTtcclxuICByb3V0ZXJMaW5rPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgaWNvbj86IG5ldmVyO1xyXG4gIHRhcmdldD86IG5ldmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFJkdE1lbnVJdGVtV2l0aFJvdXRlPFRJY29uID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgUGFyc2VkUmR0TWVudUl0ZW1CYXNlPFRJY29uPiB7XHJcbiAgaXRlbXM/OiBuZXZlcjtcclxuICByb3V0ZXJMaW5rPzogc3RyaW5nW107XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgaWNvbj86IFRJY29uO1xyXG4gIHRhcmdldDogV2luZG93T3BlblRhcmdldFR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmR0TWVudUl0ZW1XaXRoTGluazxUSWNvbiA9IHN0cmluZz5cclxuICBleHRlbmRzIFBhcnNlZFJkdE1lbnVJdGVtQmFzZTxUSWNvbj4ge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgcm91dGVyTGluaz86IG5ldmVyO1xyXG4gIGV4dGVybmFsTGluaz86IHN0cmluZztcclxuICBpY29uPzogVEljb247XHJcbiAgdGFyZ2V0OiBXaW5kb3dPcGVuVGFyZ2V0VHlwZTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUGFyc2VkUmR0TWVudUl0ZW0gPVxyXG4gIHwgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGVcclxuICB8IFBhcnNlZFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuXHJcbiAgfCBQYXJzZWRSZHRNZW51SXRlbVdpdGhMaW5rO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWVudUl0ZW1zKFxyXG4gIGl0ZW1zOiBSZHRNZW51SXRlbVtdLFxyXG4gIGluamVjdG9yOiBJbmplY3RvcixcclxuICBwcmVmaXggPSAnJ1xyXG4pOiBQYXJzZWRSZHRNZW51SXRlbVtdIHtcclxuICByZXR1cm4gaXRlbXNcclxuICAgIC5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgbGV0IG5ld1ByZWZpeDogc3RyaW5nO1xyXG4gICAgICBpZiAoaXRlbS5kYXRhVGVzdElkKSB7XHJcbiAgICAgICAgbmV3UHJlZml4ID0gaXRlbS5kYXRhVGVzdElkO1xyXG4gICAgICB9IGVsc2UgaWYgKHByZWZpeCkge1xyXG4gICAgICAgIG5ld1ByZWZpeCA9IFJkdFN0cmluZ1V0aWxzLmdldERhdGFUZXN0SWQoaXRlbS5sYWJlbCwgcHJlZml4KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdQcmVmaXggPSBSZHRTdHJpbmdVdGlscy5nZXREYXRhVGVzdElkKGl0ZW0ubGFiZWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0RhdGFUZXN0SWQgPSBSZHRTdHJpbmdVdGlscy5nZXREYXRhVGVzdElkKFxyXG4gICAgICAgIG5ld1ByZWZpeCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgICdtZW51LWl0ZW0nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHJlczogUGFyc2VkUmR0TWVudUl0ZW1CYXNlID0ge1xyXG4gICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgIGljb246IGl0ZW0uaWNvbixcclxuICAgICAgICBzaG9ydGN1dDogaXRlbS5zaG9ydGN1dCxcclxuICAgICAgICBjb21tYW5kOiBpdGVtLmNvbW1hbmQsXHJcbiAgICAgICAgdmlzaWJsZTogaXRlbS52aXNpYmxlLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgIHJlcXVpcmVkUGFyZW50OiBpdGVtLnJlcXVpcmVkUGFyZW50LFxyXG4gICAgICAgIGRhdGFUZXN0SWQ6IG5ld0RhdGFUZXN0SWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5SZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW47XHJcbiAgICAgICAgY29uc3QgcGFyc2VkQ2hpbGRyZW4gPSBwYXJzZU1lbnVJdGVtcyhpdGVtLml0ZW1zLCBpbmplY3RvciwgbmV3UHJlZml4KTtcclxuICAgICAgICBpZiAocGFyc2VkQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY2hpbGRyZW5SZXMuaXRlbXMgPSBwYXJzZWRDaGlsZHJlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuUmVzO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICAgIGNvbnN0IGxpbmtSZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGU7XHJcbiAgICAgICAgbGlua1Jlcy50YXJnZXQgPSBpdGVtLnRhcmdldCA/PyAnX3NlbGYnO1xyXG4gICAgICAgIGlmIChpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgICAgIGxpbmtSZXMucm91dGVyTGluayA9IFtpdGVtLnJvdXRlckxpbmsuY3JlYXRlQWJzb2x1dGVVcmwoKV07XHJcbiAgICAgICAgICBpZiAoIXJlcy52aXNpYmxlICYmIGl0ZW0ucm91dGVyTGluay5oYXNDYW5CZUVudGVyZWRHdWFyZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYW5CZUVudGVyZWQgPSBpdGVtLnJvdXRlckxpbmsuY2FuQmVFbnRlcmVkLmJpbmQoXHJcbiAgICAgICAgICAgICAgaXRlbS5yb3V0ZXJMaW5rXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxpbmtSZXMudmlzaWJsZSA9ICgpID0+IGNhbkJlRW50ZXJlZChpbmplY3Rvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaW5rUmVzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxpbmtSZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoTGluaztcclxuICAgICAgICBpZiAoaXRlbS5leHRlcm5hbExpbmspIHtcclxuICAgICAgICAgIGlmIChpdGVtLnF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGxpbmtSZXMuZXh0ZXJuYWxMaW5rID0gUmR0U3RyaW5nVXRpbHMuYXBwZW5kUXVlcnlQYXJhbXMoXHJcbiAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmssXHJcbiAgICAgICAgICAgICAgaXRlbS5xdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGlua1Jlcy5leHRlcm5hbExpbmsgPSBpdGVtLmV4dGVybmFsTGluaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGlua1Jlcy50YXJnZXQgPSBpdGVtLnRhcmdldCA/PyAnX2JsYW5rJztcclxuICAgICAgICByZXR1cm4gbGlua1JlcztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLnZpc2libGUgfHwgaXRlbS52aXNpYmxlKCkpXHJcbiAgICAuZmlsdGVyKFxyXG4gICAgICAoaXRlbSkgPT5cclxuICAgICAgICBpdGVtLmV4dGVybmFsTGluayB8fFxyXG4gICAgICAgIGl0ZW1bJ3JvdXRlckxpbmsnXSB8fFxyXG4gICAgICAgIGl0ZW0uY29tbWFuZCB8fFxyXG4gICAgICAgIChpdGVtWydpdGVtcyddPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSZHRNZW51RXhwYW5kU291cmNlIHtcclxuICBDbGljayxcclxuICBIb3ZlcixcclxuICBTaG9ydGN1dCxcclxuICBGb2N1cyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZHRNZW51RXhwYW5kZWRDaGlsZCB7XHJcbiAgaXRlbTogUGFyc2VkUmR0TWVudUl0ZW07XHJcbiAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlO1xyXG59XHJcbiJdfQ==","export const INVISIBLE_CLASS = 'invisible';\nexport const FOCUS_VISIBLE = 'focus-visible';\nfunction getChildRoutesMapRec(item, map) {\n let childRoutes;\n if (menuItemHasChildren(item)) {\n childRoutes = item.items.map((child) => getChildRoutesMapRec(child, map));\n }\n else {\n childRoutes = [];\n }\n let res;\n if (menuItemHasRoute(item) && item.routerLink) {\n res = [item.routerLink].concat(...childRoutes);\n }\n else {\n res = [].concat(...childRoutes);\n }\n map.set(item, res);\n return res;\n}\nexport function getChildRoutesMap(items) {\n const map = new Map();\n items.forEach((item) => getChildRoutesMapRec(item, map));\n return map;\n}\nexport function findNextItemWithPrefix(items, itemIndex, prefix) {\n const len = items.length;\n prefix = prefix.toLocaleLowerCase();\n for (let i = (itemIndex + 1) % len; i !== itemIndex; i = (i + 1) % len) {\n const label = items[i].label.toLocaleLowerCase();\n if (label.startsWith(prefix)) {\n return i;\n }\n }\n return null;\n}\nexport function menuItemHasChildren(item) {\n return 'items' in item;\n}\nexport function menuItemHasRoute(item) {\n return 'routerLink' in item;\n}\nfunction getMenuItemsShortcutsRec(item, currentPath, res) {\n const path = [...currentPath, item];\n if (item.shortcut) {\n res.push({\n path: path,\n shortcut: item.shortcut,\n });\n }\n if (menuItemHasChildren(item)) {\n item.items.forEach((child) => getMenuItemsShortcutsRec(child, path, res));\n }\n}\nexport function getMenuItemsShortcuts(items) {\n const res = [];\n const initialPath = [];\n items.forEach((item) => getMenuItemsShortcutsRec(item, initialPath, res));\n return res;\n}\nexport function areHorDirsEqual(a, b) {\n if (!a) {\n return !b;\n }\n if (!b) {\n return !a;\n }\n return a.dir === b.dir && a.left === b.left;\n}\nexport function areVertDirsEqual(a, b) {\n if (!a) {\n return !b;\n }\n if (!b) {\n return !a;\n }\n return a.dir === b.dir && a.top === b.top;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQWdDN0MsU0FBUyxvQkFBb0IsQ0FDM0IsSUFBdUIsRUFDdkIsR0FBdUM7SUFFdkMsSUFBSSxXQUF5QixDQUFDO0lBRTlCLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7U0FBTSxDQUFDO1FBQ04sV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxHQUFlLENBQUM7SUFFcEIsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxDQUFDO1FBQ04sR0FBRyxHQUFJLEVBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUEwQjtJQUMxRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQUVyRCxLQUFL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QUFDLEVBQUUsQ0FBQztRQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZHRTaG9ydGN1dCB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQge1xyXG4gIE51bGxhYmxlLFxyXG4gIFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgUmR0VmVydGljYWxEaXJlY3Rpb24sXHJcbn0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHtcclxuICBQYXJzZWRSZHRNZW51SXRlbSxcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbixcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhSb3V0ZSxcclxufSBmcm9tICcuL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjb25zdCBJTlZJU0lCTEVfQ0xBU1MgPSAnaW52aXNpYmxlJztcclxuZXhwb3J0IGNvbnN0IEZPQ1VTX1ZJU0lCTEUgPSAnZm9jdXMtdmlzaWJsZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNpemUge1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmVydE9mZnNldCB7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgYm90dG9tOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSG9yT2Zmc2V0IHtcclxuICBsZWZ0OiBudW1iZXI7XHJcbiAgcmlnaHQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWZXJ0RGlyV2l0aE9mZnNldCB7XHJcbiAgZGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvbjtcclxuICB0b3A6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIb3JEaXJXaXRoT2Zmc2V0IHtcclxuICBkaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb247XHJcbiAgbGVmdDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFJkdE1lbnVJdGVtV2l0aFNob3J0Y3V0IHtcclxuICBwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdO1xyXG4gIHNob3J0Y3V0OiBSZHRTaG9ydGN1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2hpbGRSb3V0ZXNNYXBSZWMoXHJcbiAgaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgbWFwOiBNYXA8UGFyc2VkUmR0TWVudUl0ZW0sIHN0cmluZ1tdW10+XHJcbik6IHN0cmluZ1tdW10ge1xyXG4gIGxldCBjaGlsZFJvdXRlczogc3RyaW5nW11bXVtdO1xyXG5cclxuICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSkge1xyXG4gICAgY2hpbGRSb3V0ZXMgPSBpdGVtLml0ZW1zLm1hcCgoY2hpbGQpID0+IGdldENoaWxkUm91dGVzTWFwUmVjKGNoaWxkLCBtYXApKTtcclxuICB9IGVsc2Uge1xyXG4gICAgY2hpbGRSb3V0ZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIGxldCByZXM6IHN0cmluZ1tdW107XHJcblxyXG4gIGlmIChtZW51SXRlbUhhc1JvdXRlKGl0ZW0pICYmIGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgcmVzID0gW2l0ZW0ucm91dGVyTGlua10uY29uY2F0KC4uLmNoaWxkUm91dGVzKTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmVzID0gKFtdIGFzIHN0cmluZ1tdW10pLmNvbmNhdCguLi5jaGlsZFJvdXRlcyk7XHJcbiAgfVxyXG4gIG1hcC5zZXQoaXRlbSwgcmVzKTtcclxuICByZXR1cm4gcmVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRSb3V0ZXNNYXAoaXRlbXM6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICBjb25zdCBtYXAgPSBuZXcgTWFwPFBhcnNlZFJkdE1lbnVJdGVtLCBzdHJpbmdbXVtdPigpO1xyXG5cclxuICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBnZXRDaGlsZFJvdXRlc01hcFJlYyhpdGVtLCBtYXApKTtcclxuICByZXR1cm4gbWFwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZE5leHRJdGVtV2l0aFByZWZpeChcclxuICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXSxcclxuICBpdGVtSW5kZXg6IG51bWJlcixcclxuICBwcmVmaXg6IHN0cmluZ1xyXG4pIHtcclxuICBjb25zdCBsZW4gPSBpdGVtcy5sZW5ndGg7XHJcbiAgcHJlZml4ID0gcHJlZml4LnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcbiAgZm9yIChsZXQgaSA9IChpdGVtSW5kZXggKyAxKSAlIGxlbjsgaSAhPT0gaXRlbUluZGV4OyBpID0gKGkgKyAxKSAlIGxlbikge1xyXG4gICAgY29uc3QgbGFiZWwgPSBpdGVtc1tpXS5sYWJlbC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4gICAgICByZXR1cm4gaTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW51SXRlbUhhc0NoaWxkcmVuKFxyXG4gIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtXHJcbik6IGl0ZW0gaXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW4ge1xyXG4gIHJldHVybiAnaXRlbXMnIGluIGl0ZW07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW51SXRlbUhhc1JvdXRlKFxyXG4gIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtXHJcbik6IGl0ZW0gaXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGUge1xyXG4gIHJldHVybiAncm91dGVyTGluaycgaW4gaXRlbTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWVudUl0ZW1zU2hvcnRjdXRzUmVjKFxyXG4gIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtLFxyXG4gIGN1cnJlbnRQYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdLFxyXG4gIHJlczogUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXRbXVxyXG4pIHtcclxuICBjb25zdCBwYXRoID0gWy4uLmN1cnJlbnRQYXRoLCBpdGVtXTtcclxuICBpZiAoaXRlbS5zaG9ydGN1dCkge1xyXG4gICAgcmVzLnB1c2goe1xyXG4gICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICBzaG9ydGN1dDogaXRlbS5zaG9ydGN1dCxcclxuICAgIH0pO1xyXG4gIH1cclxuICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSkge1xyXG4gICAgaXRlbS5pdGVtcy5mb3JFYWNoKChjaGlsZCkgPT4gZ2V0TWVudUl0ZW1zU2hvcnRjdXRzUmVjKGNoaWxkLCBwYXRoLCByZXMpKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbXNTaG9ydGN1dHMoaXRlbXM6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICBjb25zdCByZXM6IFBhcnNlZFJkdE1lbnVJdGVtV2l0aFNob3J0Y3V0W10gPSBbXTtcclxuICBjb25zdCBpbml0aWFsUGF0aDogUGFyc2VkUmR0TWVudUl0ZW1bXSA9IFtdO1xyXG4gIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGdldE1lbnVJdGVtc1Nob3J0Y3V0c1JlYyhpdGVtLCBpbml0aWFsUGF0aCwgcmVzKSk7XHJcbiAgcmV0dXJuIHJlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFyZUhvckRpcnNFcXVhbChcclxuICBhOiBOdWxsYWJsZTxIb3JEaXJXaXRoT2Zmc2V0PixcclxuICBiOiBOdWxsYWJsZTxIb3JEaXJXaXRoT2Zmc2V0PlxyXG4pIHtcclxuICBpZiAoIWEpIHtcclxuICAgIHJldHVybiAhYjtcclxuICB9XHJcbiAgaWYgKCFiKSB7XHJcbiAgICByZXR1cm4gIWE7XHJcbiAgfVxyXG4gIHJldHVybiBhLmRpciA9PT0gYi5kaXIgJiYgYS5sZWZ0ID09PSBiLmxlZnQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcmVWZXJ0RGlyc0VxdWFsKFxyXG4gIGE6IE51bGxhYmxlPFZlcnREaXJXaXRoT2Zmc2V0PixcclxuICBiOiBOdWxsYWJsZTxWZXJ0RGlyV2l0aE9mZnNldD5cclxuKSB7XHJcbiAgaWYgKCFhKSB7XHJcbiAgICByZXR1cm4gIWI7XHJcbiAgfVxyXG4gIGlmICghYikge1xyXG4gICAgcmV0dXJuICFhO1xyXG4gIH1cclxuICByZXR1cm4gYS5kaXIgPT09IGIuZGlyICYmIGEudG9wID09PSBiLnRvcDtcclxufVxyXG4iXX0=","import { DOCUMENT } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, HostListener, QueryList, Renderer2, ViewChild, ViewChildren, afterNextRender, afterRenderEffect, computed, effect, inject, input, linkedSignal, signal, untracked, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { RdtShortcut, RdtShortcutService, } from '@ngrdt/shortcuts';\nimport { KB_CODE, RdtObjectUtils, RdtStringUtils, } from '@ngrdt/utils';\nimport { delay, first, map, of } from 'rxjs';\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\nimport { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, } from '../models';\nimport { RdtMenuExpandSource, } from '../private-models';\nimport { FOCUS_VISIBLE, areHorDirsEqual, areVertDirsEqual, findNextItemWithPrefix, menuItemHasChildren, menuItemHasRoute, } from '../utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@ngrdt/router\";\nimport * as i4 from \"@ngrdt/shortcuts\";\n// TODO: Split positioning and shortcut/focus management in separate classes\nexport class RdtMenuOverlayComponent {\n elRef = inject((ElementRef));\n destroyRef = inject(DestroyRef);\n renderer = inject(Renderer2);\n topLevelMenu = inject(RdtMenuBaseComponent);\n parentMenu = inject(RdtMenuOverlayComponent, {\n optional: true,\n skipSelf: true,\n });\n cd = inject(ChangeDetectorRef);\n router = inject(Router);\n document = inject(DOCUMENT);\n shortcutService = inject(RdtShortcutService);\n children;\n focusableElements;\n menuItemContainer;\n item = input.required();\n level = input.required();\n preferredHorizontalDir = input(DEFAULT_MENU_HORIZONTAL_DIR);\n preferredVerticalDir = input(DEFAULT_MENU_VERTICAL_DIR);\n expandedInput = input(false, { alias: 'expanded' });\n expanded = linkedSignal(() => this.expandedInput());\n autofocusItemInput = input(null, {\n alias: 'autofocusItem',\n });\n autofocusItem = linkedSignal(() => this.autofocusItemInput());\n // Element used to relatively position menu,\n // typically parent element.\n // If not specified, parent element is used.\n anchorElementInput = input(null, {\n alias: 'anchorElement',\n });\n anchorElement = computed(() => this.anchorElementInput() ?? this.elRef.nativeElement.parentElement);\n zIndex = computed(() => this.level() + 10);\n isRootLevel = computed(() => this.level() === 0);\n // Bounding box of this excluding any extra offset.\n _box;\n get box() {\n return this._box;\n }\n // Bounding box of parent element.\n _anchorBox;\n _containerPadding = { top: 0, bottom: 0 };\n // Currently applied vertical and horizontal directions.\n verticalDir = signal(null, {\n equal: areVertDirsEqual,\n });\n horizontalDir = signal(null, {\n equal: areHorDirsEqual,\n });\n expandedChild = signal(null);\n autofocusSubmenuItem = signal(null);\n keyActions = {\n [KB_CODE.ARROW.UP]: (index) => this.focusPrevItem(index),\n [KB_CODE.ARROW.DOWN]: (index) => this.focusNextItem(index),\n [KB_CODE.ARROW.RIGHT]: (index) => this.openSubmenu(index, 'first', RdtMenuExpandSource.Shortcut),\n [KB_CODE.ARROW.LEFT]: () => this.closeSelf(),\n [KB_CODE.HOME]: () => this.focusItem(0),\n [KB_CODE.END]: () => this.focusItem(untracked(this.item).items.length - 1),\n [KB_CODE.ESCAPE]: () => this.closeSelf(),\n [KB_CODE.ENTER]: (index) => this.invokeItemClickByIndex(index),\n [KB_CODE.SPACEBAR]: (index) => this.invokeItemClickByIndex(index),\n };\n get selfExpandSrc() {\n if (this.expanded()) {\n if (this.parentMenu) {\n return this.parentMenu.expandedChild()?.src;\n }\n else {\n return this.topLevelMenu.expandedChild()?.src;\n }\n }\n return undefined;\n }\n recalcEffect = effect(() => {\n this.recalculatePosition(this.preferredHorizontalDir(), this.preferredVerticalDir());\n });\n expandedEffect = effect(() => {\n if (!this.expanded()) {\n this.expandedChild.set(null);\n }\n });\n expandedFocusEffect = afterRenderEffect(() => {\n const rootItem = untracked(this.item);\n this.expandedInput();\n const expanded = untracked(this.expanded);\n const autofocusItem = untracked(this.autofocusItem);\n if (expanded) {\n switch (autofocusItem) {\n case null:\n this.focusItem(0, false);\n break;\n case 'first':\n this.focusItem(0, true);\n break;\n case 'last':\n this.focusItem(rootItem.items.length - 1, true);\n }\n }\n });\n constructor() {\n afterNextRender(() => {\n this.measureContainerPadding();\n this.recalculatePosition(this.preferredHorizontalDir(), this.preferredVerticalDir());\n this.listenTabKeyPress();\n });\n }\n getMinOffsetLeft() {\n return this.topLevelMenu.bodyMargin.left;\n }\n getMaxOffsetLeft() {\n return (this.topLevelMenu.clientSize.width -\n this._box.width -\n this.topLevelMenu.bodyMargin.right);\n }\n getMinOffsetTop() {\n return this.topLevelMenu.bodyMargin.top;\n }\n getMaxOffsetTop() {\n return (this.topLevelMenu.clientSize.height -\n this._box.height -\n this.topLevelMenu.bodyMargin.bottom);\n }\n recalculatePosition(preferredHorizontalDir, preferredVerticalDir) {\n const isRoot = untracked(this.isRootLevel);\n const horizontalDir = untracked(this.horizontalDir);\n const verticalDir = untracked(this.verticalDir);\n this.measureBoundingRect();\n if (!this._box || !this._anchorBox || !this.topLevelMenu.clientSize) {\n return;\n }\n const newHorDir = this.getRealHorizontalDir(preferredHorizontalDir);\n const newVertDir = this.getRealVerticalDir(preferredVerticalDir);\n // Horizontal direction\n if (newHorDir.dir === 'right') {\n newHorDir.left += this._anchorBox.left;\n if (!isRoot) {\n newHorDir.left += this._anchorBox.width;\n }\n }\n else if (newHorDir.dir === 'left') {\n newHorDir.left += this._anchorBox.left - this._box.width;\n if (isRoot) {\n newHorDir.left += this._anchorBox.width;\n }\n }\n // Restrictions from left menu and right menu\n newHorDir.left = Math.min(Math.max(this.getMinOffsetLeft(), newHorDir.left), this.getMaxOffsetLeft());\n // Vertical direction\n if (newVertDir.dir === 'down') {\n newVertDir.top = this._anchorBox.top;\n if (isRoot) {\n newVertDir.top += this._anchorBox.height;\n }\n else {\n newVertDir.top -= this._containerPadding.top;\n }\n }\n else if (newVertDir.dir === 'up') {\n newVertDir.top = this._anchorBox.top - this._box.height;\n if (!isRoot) {\n newVertDir.top += this._anchorBox.height + this._containerPadding.top;\n }\n }\n // Restrictions from header and footer\n newVertDir.top = Math.min(Math.max(this.getMinOffsetTop(), newVertDir.top), this.getMaxOffsetTop());\n if (!areHorDirsEqual(horizontalDir, newHorDir) ||\n !areVertDirsEqual(verticalDir, newVertDir)) {\n this.horizontalDir.set(newHorDir);\n this.verticalDir.set(newVertDir);\n this.setClasses();\n this.measureBoundingRect();\n }\n this.recalculateChildren();\n }\n recalculateChildren() {\n const horizontalDir = untracked(this.horizontalDir);\n const verticalDir = untracked(this.verticalDir);\n if (this.children && horizontalDir && verticalDir) {\n this.children.forEach((child) => child.recalculatePosition(horizontalDir.dir, verticalDir.dir));\n }\n }\n onItemPointerEnter(item) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.topLevelMenu.openOnHover);\n if (openOnHover && expandedChild?.src !== RdtMenuExpandSource.Click) {\n this.autofocusSubmenuItem.set(null);\n if (menuItemHasChildren(item)) {\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Hover });\n this.expanded.set(true);\n }\n else {\n //console.log('expanded child', this.expandedChild);\n this.expandedChild.set(null);\n }\n }\n }\n onItemClick(item) {\n const expandedChild = untracked(this.expandedChild);\n const hasChildren = menuItemHasChildren(item);\n const openOnHover = this.topLevelMenu.openOnHover();\n if ((hasChildren && expandedChild?.item !== item) ||\n (openOnHover && expandedChild?.src === RdtMenuExpandSource.Hover)) {\n this.autofocusSubmenuItem.set(null);\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Click });\n }\n else {\n this.expandedChild.set(null);\n }\n // Could also listen to router events, but might be triggered by\n // child router navigation.\n if (!hasChildren) {\n this.topLevelMenu.closeSubmenus();\n }\n if (typeof item.command === 'function') {\n item.command();\n }\n }\n invokeItemClick(item) {\n if (menuItemHasRoute(item) && item.routerLink) {\n this.router.navigate(item.routerLink);\n }\n this.onItemClick(item);\n this.autofocusSubmenuItem.set('first');\n }\n getChildRoutes(item) {\n return this.topLevelMenu.getChildRoutes(item);\n }\n closeSubmenus(focusExpanded = false) {\n const expandedChild = this.expandedChild();\n if (focusExpanded && expandedChild) {\n this.focusItem(expandedChild.item);\n }\n this.expandedChild.set(null);\n this.cd.markForCheck();\n }\n focusItemRecursively(path) {\n const children = [...path];\n const thisItem = children.shift();\n this.autofocusSubmenuItem.set(null);\n this.autofocusItem.set(null);\n if (children.length > 0) {\n this.expandAndGetChild(thisItem, RdtMenuExpandSource.Focus)\n .pipe(delay(1))\n .subscribe((overlay) => {\n overlay.focusItemRecursively(children);\n });\n }\n else {\n // First focus the correct item because submenu might have focus on it.\n // Removing focused element from DOM results in window:focusout event\n // and that closes all menus\n this.focusItem(thisItem);\n // Now close submenus and therefore remove them from DOM\n this.closeSubmenus();\n // Wait until they are removed and focus the correct item again\n setTimeout(() => this.focusItem(thisItem), 1);\n }\n }\n expandAndGetChild(item, src) {\n const rootItem = untracked(this.item);\n if (rootItem.items.indexOf(item) < 0) {\n throw new Error('Attempting to expand item that is not child item of this.item');\n }\n this.expandedChild.set({ item, src });\n this.cd.markForCheck();\n const child = this.children.find((child) => untracked(child.item) === item);\n if (child) {\n return of(child);\n }\n else {\n return this.children.changes.pipe(map(() => this.children.find((child) => untracked(child.item) === item)), first(RdtObjectUtils.notNullGuard));\n }\n }\n onKeyDown(itemIndex, event) {\n const rootItem = untracked(this.item);\n const hasAction = event.code in this.keyActions;\n const isLetter = RdtStringUtils.isAlphabetCharacter(event.key) ||\n RdtStringUtils.isNumericCharacter(event.key);\n if (hasAction || isLetter) {\n event.preventDefault();\n }\n if (hasAction) {\n event.stopPropagation();\n }\n if (hasAction) {\n this.keyActions[event.code](itemIndex);\n }\n else if (isLetter) {\n const next = findNextItemWithPrefix(rootItem.items, itemIndex, event.key);\n if (next !== null) {\n this.focusItem(next);\n }\n }\n }\n onTabKeyPress(event) {\n // Do not prevent default to correctly switch to previous element\n event.originalEvent.stopPropagation();\n // Wait for document.activeElement to switch to new element\n setTimeout(() => {\n if (!this.elRef.nativeElement.contains(this.document.activeElement)) {\n this.closeSelf(false);\n }\n }, 1);\n }\n invokeItemClickByIndex(itemIndex) {\n const rootItem = untracked(this.item);\n const item = rootItem.items[itemIndex];\n if (!item) {\n return;\n }\n this.invokeItemClick(item);\n }\n focusItem(item, visibleFocus = true) {\n let itemIndex;\n if (typeof item === 'number') {\n itemIndex = item;\n }\n else {\n itemIndex = this.item().items.indexOf(item);\n }\n if (itemIndex >= 0 && itemIndex < this.focusableElements.length) {\n this.blurAllFocusable();\n this.focusFocusable(itemIndex, visibleFocus);\n }\n }\n blurAllFocusable() {\n this.focusableElements.forEach((el) => this.renderer.removeClass(el.nativeElement, FOCUS_VISIBLE));\n }\n focusFocusable(itemIndex, visibleFocus) {\n const elRef = this.focusableElements.get(itemIndex);\n if (elRef) {\n if (visibleFocus) {\n this.renderer.addClass(elRef.nativeElement, FOCUS_VISIBLE);\n }\n elRef.nativeElement.focus();\n }\n }\n focusNextItem(itemIndex) {\n const rootItem = untracked(this.item);\n const next = (itemIndex + 1) % rootItem.items.length;\n this.focusItem(next);\n }\n focusPrevItem(itemIndex) {\n const rootItem = untracked(this.item);\n const prev = (itemIndex - 1 + rootItem.items.length) % rootItem.items.length;\n this.focusItem(prev);\n }\n openSubmenu(itemIndex, visibleFocus, src) {\n const rootItem = untracked(this.item);\n if (itemIndex < rootItem.items.length &&\n menuItemHasChildren(rootItem.items[itemIndex])) {\n this.expandedChild.set({ item: rootItem.items[itemIndex], src });\n this.autofocusSubmenuItem.set(visibleFocus);\n }\n }\n closeSelf(focusExpanded = true) {\n if (this.parentMenu) {\n this.parentMenu.closeSubmenus(focusExpanded);\n }\n else {\n this.topLevelMenu.closeSubmenus(focusExpanded);\n }\n }\n checkActiveElement(event) {\n const closeOnFocusOut = untracked(this.topLevelMenu.closeOnFocusOut);\n if (closeOnFocusOut && !this.topLevelMenu.openOnHover) {\n const thisEl = this.elRef.nativeElement;\n const target = event.relatedTarget;\n if (!(target instanceof HTMLElement) || !thisEl.contains(target)) {\n this.expandedChild.set(null);\n }\n }\n }\n // Calculates direction of this menu and offset in case\n // menu won't fit in left nor right of parent menu.\n getRealHorizontalDir(preferredHorizontalDir) {\n const isRoot = untracked(this.isRootLevel);\n let left;\n let right;\n // This menu is directly under menubar\n if (isRoot) {\n left = this._anchorBox.right - this._box.width;\n right =\n this.topLevelMenu.clientSize.width -\n (this._anchorBox.left + this._box.width);\n }\n else {\n // Menu is nested\n right =\n this.topLevelMenu.clientSize.width -\n (this._anchorBox.right + this._box.width);\n left = this._anchorBox.left - this._box.width;\n }\n left -= this.topLevelMenu.bodyMargin.left;\n right -= this.topLevelMenu.bodyMargin.right;\n if (preferredHorizontalDir === 'right') {\n // We use preferred if possible.\n if (right >= 0) {\n return { dir: 'right', left: 0 };\n // Then the other one.\n }\n else if (left >= 0) {\n return { dir: 'left', left: 0 };\n // Edge case if neither direction can be used (ultra narrow screen).\n // Choose direction that covers least of parent menu.\n }\n else {\n return this.getNarrowScreenHorizontalDir(left, right);\n }\n }\n else {\n if (left >= 0) {\n return { dir: 'left', left: 0 };\n }\n else if (right >= 0) {\n return { dir: 'right', left: 0 };\n }\n else {\n return this.getNarrowScreenHorizontalDir(left, right);\n }\n }\n }\n // Finds out where to put menu in case screen is too narrow for two menus\n // to fit next to each other. Minimizes area of parent menu covered by this.\n getNarrowScreenHorizontalDir(left, right) {\n const screenStart = this.topLevelMenu.bodyMargin.left;\n const screenEnd = this.topLevelMenu.clientSize.width - this.topLevelMenu.bodyMargin.right;\n const screenCenter = (screenStart - screenEnd) / 2;\n const leftStart = Math.max(this._anchorBox.left, screenStart);\n const leftEnd = Math.min(this._anchorBox.left + this._anchorBox.width, screenCenter);\n const rightStart = Math.max(screenCenter, leftEnd);\n const rightEnd = Math.min(this._anchorBox.left + this._anchorBox.width, screenEnd);\n if (leftEnd - leftStart > rightEnd - rightStart) {\n return { dir: 'right', left: right };\n }\n else {\n return { dir: 'left', left: -left };\n }\n }\n getRealVerticalDir(preferredVerticalDir) {\n const isRoot = untracked(this.isRootLevel);\n let bottom;\n let top;\n if (isRoot) {\n bottom =\n this.topLevelMenu.clientSize.height +\n this._anchorBox.bottom -\n this._box.height;\n top = this._anchorBox.top - this._box.height;\n }\n else {\n bottom =\n this.topLevelMenu.clientSize.height -\n this._anchorBox.top -\n this._box.height;\n top = this._anchorBox.bottom - this._box.height;\n }\n top -= this.topLevelMenu.bodyMargin.top;\n bottom -= this.topLevelMenu.bodyMargin.bottom;\n if (preferredVerticalDir === 'down') {\n if (bottom >= 0) {\n return { dir: 'down', top: 0 };\n }\n else if (top >= 0) {\n return { dir: 'up', top: 0 };\n }\n else {\n return { dir: preferredVerticalDir, top: 0 };\n }\n }\n else {\n if (top >= 0) {\n return { dir: 'up', top: 0 };\n }\n else if (bottom >= 0) {\n return { dir: 'down', top: 0 };\n }\n else {\n return { dir: preferredVerticalDir, top: 0 };\n }\n }\n }\n // Measures bounding rect of this and offset container\n // Should always be called after parent menu has already been measured.\n measureBoundingRect() {\n this._box = this.elRef.nativeElement.getBoundingClientRect();\n const anchor = this.anchorElement();\n this._anchorBox = anchor.getBoundingClientRect();\n }\n measureContainerPadding() {\n const computedStyles = getComputedStyle(this.menuItemContainer.nativeElement);\n const paddingTop = parseFloat(computedStyles.paddingTop);\n const paddingBottom = parseFloat(computedStyles.paddingBottom);\n this._containerPadding = { top: paddingTop, bottom: paddingBottom };\n }\n setClasses() {\n const isRoot = this.isRootLevel();\n const vertical = this.verticalDir();\n const horizontal = this.horizontalDir();\n if (vertical) {\n if (vertical.dir === 'up') {\n this.setClass('rdt-overlay-up');\n this.removeClass('rdt-overlay-down');\n }\n else {\n this.removeClass('rdt-overlay-up');\n this.setClass('rdt-overlay-down');\n }\n this.setOffset('top', vertical.top);\n }\n if (horizontal) {\n if (horizontal.dir === 'left') {\n this.setClass('rdt-overlay-left');\n this.removeClass('rdt-overlay-right');\n }\n else {\n this.removeClass('rdt-overlay-left');\n this.setClass('rdt-overlay-right');\n }\n this.setOffset('left', horizontal.left);\n }\n if (isRoot) {\n this.setClass('rdt-menu-root');\n this.removeClass('rdt-menu-sub');\n }\n else {\n this.removeClass('rdt-menu-root');\n this.setClass('rdt-menu-sub');\n }\n }\n setClass(className) {\n this.renderer.addClass(this.elRef.nativeElement, className);\n }\n removeClass(className) {\n this.renderer.removeClass(this.elRef.nativeElement, className);\n }\n setOffset(direction, value) {\n this.renderer.setStyle(this.elRef.nativeElement, direction, `${value}px`);\n }\n listenTabKeyPress() {\n const shiftTab = RdtShortcut.createUnsafe('shift', 'tab');\n const tab = RdtShortcut.createUnsafe('tab');\n this.shortcutService\n .listen([tab, shiftTab], {\n element: this.elRef.nativeElement,\n preventDefault: false,\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => this.onTabKeyPress(event));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.0\", type: RdtMenuOverlayComponent, isStandalone: false, selector: \"rdt-menu-overlay\", inputs: { item: { classPropertyName: \"item\", publicName: \"item\", isSignal: true, isRequired: true, transformFunction: null }, level: { classPropertyName: \"level\", publicName: \"level\", isSignal: true, isRequired: true, transformFunction: null }, preferredHorizontalDir: { classPropertyName: \"preferredHorizontalDir\", publicName: \"preferredHorizontalDir\", isSignal: true, isRequired: false, transformFunction: null }, preferredVerticalDir: { classPropertyName: \"preferredVerticalDir\", publicName: \"preferredVerticalDir\", isSignal: true, isRequired: false, transformFunction: null }, expandedInput: { classPropertyName: \"expandedInput\", publicName: \"expanded\", isSignal: true, isRequired: false, transformFunction: null }, autofocusItemInput: { classPropertyName: \"autofocusItemInput\", publicName: \"autofocusItem\", isSignal: true, isRequired: false, transformFunction: null }, anchorElementInput: { classPropertyName: \"anchorElementInput\", publicName: \"anchorElement\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"tabindex\": \"-1\", \"role\": \"menu\" }, listeners: { \"window:focusout\": \"checkActiveElement($event)\" }, properties: { \"class.expanded\": \"expanded()\", \"style.z-index\": \"zIndex()\" } }, viewQueries: [{ propertyName: \"menuItemContainer\", first: true, predicate: [\"menuItemContainer\"], descendants: true }, { propertyName: \"children\", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: \"focusableElements\", predicate: [\"focusableItem\"], descendants: true }], ngImport: i0, template: \"<ul class=\\\"menu-item-container\\\" role=\\\"presentation\\\" #menuItemContainer>\\r\\n @for(item of item().items; track item; let i = $index) {\\r\\n <li\\r\\n role=\\\"presentation\\\"\\r\\n class=\\\"menu-item\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n rdtAnyRouteActive=\\\"menu-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if (item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"chevron_right\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n -->\\r\\n @if (item.items) {\\r\\n <span class=\\\"menu-item-icon rdt-menu-icon-right\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if (item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [queryParams]=\\\"item.queryParams\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n }\\r\\n\\r\\n <!-- Child menus exist only if this menu is expanded. -->\\r\\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\\r\\n @if (item.items && expanded()) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem()\\\"\\r\\n [preferredHorizontalDir]=\\\"horizontalDir()?.dir!\\\"\\r\\n [preferredVerticalDir]=\\\"verticalDir()?.dir!\\\"\\r\\n [level]=\\\"level() + 1\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px))}:host.expanded{visibility:visible}ul.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-background);margin-top:0;margin-bottom:0;margin-block-start:0;margin-block-end:0}.menu-item-content{cursor:pointer;display:flex;align-items:center;width:100%;padding:var(--rdt-menu-item-padding);background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color);font-size:var(--rdt-menu-item-font-size);font-weight:var(--rdt-menu-item-font-weight);border:var(--rdt-menu-item-border);outline:var(--rdt-menu-item-outline)}.menu-item{display:flex;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-route-active-background);--rdt-menu-item-text-color: var(--rdt-menu-item-route-active-text-color);--rdt-menu-item-border: var(--rdt-menu-item-route-active-border);--rdt-menu-item-outline: var(--rdt-menu-item-route-active-outline)}.menu-item .menu-item-content:hover{--rdt-menu-item-background: var(--rdt-menu-item-hover-background);--rdt-menu-item-text-color: var(--rdt-menu-item-hover-text-color);--rdt-menu-item-border: var(--rdt-menu-item-hover-border);--rdt-menu-item-outline: var(--rdt-menu-item-hover-outline)}.menu-item [aria-expanded=true].menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-expanded-background);--rdt-menu-item-text-color: var(--rdt-menu-item-expanded-text-color);--rdt-menu-item-border: var(--rdt-menu-item-expanded-border);--rdt-menu-item-outline: var(--rdt-menu-item-expanded-outline)}.menu-item .menu-item-content.focus-visible:focus,.menu-item .menu-item-content:focus-visible{--rdt-menu-item-background: var(--rdt-menu-item-focus-background);--rdt-menu-item-text-color: var(--rdt-menu-item-focus-text-color);--rdt-menu-item-border: var(--rdt-menu-item-focus-border);--rdt-menu-item-outline: var(--rdt-menu-item-focus-outline)}.menu-item-icon.rdt-menu-icon-right{width:0;height:0;border-top:var(--rdt-menu-default-icon-size) solid transparent;border-bottom:var(--rdt-menu-default-icon-size) solid transparent;border-left:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-item-text-color)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i2.RouterLink, selector: \"[routerLink]\", inputs: [\"target\", \"queryParams\", \"fragment\", \"queryParamsHandling\", \"state\", \"info\", \"relativeTo\", \"preserveFragment\", \"skipLocationChange\", \"replaceUrl\", \"routerLink\"] }, { kind: \"directive\", type: i3.RdtAnyRouteActiveDirective, selector: \"[rdtAnyRouteActive]\", inputs: [\"rdtAnyRouteActive\", \"watchedRoutes\", \"anyRouteActiveOptions\", \"ariaCurrentWhenActive\"] }, { kind: \"directive\", type: i4.RdtKeyListenerDirective, selector: \"[rdtKeyListener]\", outputs: [\"rdtKeyListener\"] }, { kind: \"component\", type: RdtMenuOverlayComponent, selector: \"rdt-menu-overlay\", inputs: [\"item\", \"level\", \"preferredHorizontalDir\", \"preferredVerticalDir\", \"expanded\", \"autofocusItem\", \"anchorElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuOverlayComponent, decorators: [{\n type: Component,\n args: [{ selector: 'rdt-menu-overlay', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, host: {\n '[class.expanded]': 'expanded()',\n '[style.z-index]': 'zIndex()',\n tabindex: '-1',\n role: 'menu',\n }, template: \"<ul class=\\\"menu-item-container\\\" role=\\\"presentation\\\" #menuItemContainer>\\r\\n @for(item of item().items; track item; let i = $index) {\\r\\n <li\\r\\n role=\\\"presentation\\\"\\r\\n class=\\\"menu-item\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n rdtAnyRouteActive=\\\"menu-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if (item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"chevron_right\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n -->\\r\\n @if (item.items) {\\r\\n <span class=\\\"menu-item-icon rdt-menu-icon-right\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if (item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [queryParams]=\\\"item.queryParams\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n }\\r\\n\\r\\n <!-- Child menus exist only if this menu is expanded. -->\\r\\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\\r\\n @if (item.items && expanded()) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem()\\\"\\r\\n [preferredHorizontalDir]=\\\"horizontalDir()?.dir!\\\"\\r\\n [preferredVerticalDir]=\\\"verticalDir()?.dir!\\\"\\r\\n [level]=\\\"level() + 1\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px))}:host.expanded{visibility:visible}ul.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-background);margin-top:0;margin-bottom:0;margin-block-start:0;margin-block-end:0}.menu-item-content{cursor:pointer;display:flex;align-items:center;width:100%;padding:var(--rdt-menu-item-padding);background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color);font-size:var(--rdt-menu-item-font-size);font-weight:var(--rdt-menu-item-font-weight);border:var(--rdt-menu-item-border);outline:var(--rdt-menu-item-outline)}.menu-item{display:flex;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-route-active-background);--rdt-menu-item-text-color: var(--rdt-menu-item-route-active-text-color);--rdt-menu-item-border: var(--rdt-menu-item-route-active-border);--rdt-menu-item-outline: var(--rdt-menu-item-route-active-outline)}.menu-item .menu-item-content:hover{--rdt-menu-item-background: var(--rdt-menu-item-hover-background);--rdt-menu-item-text-color: var(--rdt-menu-item-hover-text-color);--rdt-menu-item-border: var(--rdt-menu-item-hover-border);--rdt-menu-item-outline: var(--rdt-menu-item-hover-outline)}.menu-item [aria-expanded=true].menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-expanded-background);--rdt-menu-item-text-color: var(--rdt-menu-item-expanded-text-color);--rdt-menu-item-border: var(--rdt-menu-item-expanded-border);--rdt-menu-item-outline: var(--rdt-menu-item-expanded-outline)}.menu-item .menu-item-content.focus-visible:focus,.menu-item .menu-item-content:focus-visible{--rdt-menu-item-background: var(--rdt-menu-item-focus-background);--rdt-menu-item-text-color: var(--rdt-menu-item-focus-text-color);--rdt-menu-item-border: var(--rdt-menu-item-focus-border);--rdt-menu-item-outline: var(--rdt-menu-item-focus-outline)}.menu-item-icon.rdt-menu-icon-right{width:0;height:0;border-top:var(--rdt-menu-default-icon-size) solid transparent;border-bottom:var(--rdt-menu-default-icon-size) solid transparent;border-left:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-item-text-color)}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { children: [{\n type: ViewChildren,\n args: [RdtMenuOverlayComponent]\n }], focusableElements: [{\n type: ViewChildren,\n args: ['focusableItem']\n }], menuItemContainer: [{\n type: ViewChild,\n args: ['menuItemContainer']\n }], checkActiveElement: [{\n type: HostListener,\n args: ['window:focusout', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBRVgsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLE9BQU8sRUFHUCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIs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QUR4QixZQUFZO3VCQUFDLGVBQWU7Z0JBSXJCLGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBNmJ0QixrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIGFmdGVyTmV4dFJlbmRlcixcclxuICBhZnRlclJlbmRlckVmZmVjdCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIGxpbmtlZFNpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgUmR0U2hvcnRjdXQsXHJcbiAgUmR0U2hvcnRjdXRFdmVudCxcclxuICBSZHRTaG9ydGN1dFNlcnZpY2UsXHJcbn0gZnJvbSAnQG5ncmR0L3Nob3J0Y3V0cyc7XHJcbmltcG9ydCB7XHJcbiAgS0JfQ09ERSxcclxuICBOdWxsYWJsZSxcclxuICBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gIFJkdE9iamVjdFV0aWxzLFxyXG4gIFJkdFN0cmluZ1V0aWxzLFxyXG4gIFJkdFZlcnRpY2FsRGlyZWN0aW9uLFxyXG59IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IGRlbGF5LCBmaXJzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZHRNZW51QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSLFxyXG4gIERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVIsXHJcbn0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBQYXJzZWRSZHRNZW51SXRlbSxcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbixcclxuICBSZHRNZW51RXhwYW5kU291cmNlLFxyXG59IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBGT0NVU19WSVNJQkxFLFxyXG4gIEhvckRpcldpdGhPZmZzZXQsXHJcbiAgVmVydERpcldpdGhPZmZzZXQsXHJcbiAgYXJlSG9yRGlyc0VxdWFsLFxyXG4gIGFyZVZlcnREaXJzRXF1YWwsXHJcbiAgZmluZE5leHRJdGVtV2l0aFByZWZpeCxcclxuICBtZW51SXRlbUhhc0NoaWxkcmVuLFxyXG4gIG1lbnVJdGVtSGFzUm91dGUsXHJcbn0gZnJvbSAnLi4vdXRpbHMnO1xyXG5cclxuLy8gVE9ETzogU3BsaXQgcG9zaXRpb25pbmcgYW5kIHNob3J0Y3V0L2ZvY3VzIG1hbmFnZW1lbnQgaW4gc2VwYXJhdGUgY2xhc3Nlc1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JkdC1tZW51LW92ZXJsYXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tjbGFzcy5leHBhbmRlZF0nOiAnZXhwYW5kZWQoKScsXHJcbiAgICAnW3N0eWxlLnotaW5kZXhdJzogJ3pJbmRleCgpJyxcclxuICAgIHRhYmluZGV4OiAnLTEnLFxyXG4gICAgcm9sZTogJ21lbnUnLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51T3ZlcmxheUNvbXBvbmVudCB7XHJcbiAgcmVhZG9ubHkgZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcclxuICByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0b3BMZXZlbE1lbnUgPSBpbmplY3QoUmR0TWVudUJhc2VDb21wb25lbnQpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50TWVudSA9IGluamVjdChSZHRNZW51T3ZlcmxheUNvbXBvbmVudCwge1xyXG4gICAgb3B0aW9uYWw6IHRydWUsXHJcbiAgICBza2lwU2VsZjogdHJ1ZSxcclxuICB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvcnRjdXRTZXJ2aWNlID0gaW5qZWN0KFJkdFNob3J0Y3V0U2VydmljZSk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oUmR0TWVudU92ZXJsYXlDb21wb25lbnQpXHJcbiAgcmVhZG9ubHkgY2hpbGRyZW4hOiBRdWVyeUxpc3Q8UmR0TWVudU92ZXJsYXlDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb2N1c2FibGVJdGVtJylcclxuICBwcml2YXRlIGZvY3VzYWJsZUVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTExJRWxlbWVudD4+O1xyXG5cclxuICBAVmlld0NoaWxkKCdtZW51SXRlbUNvbnRhaW5lcicpXHJcbiAgcHJpdmF0ZSBtZW51SXRlbUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTFVMaXN0RWxlbWVudD47XHJcblxyXG4gIHJlYWRvbmx5IGl0ZW0gPSBpbnB1dC5yZXF1aXJlZDxQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbj4oKTtcclxuICByZWFkb25seSBsZXZlbCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuICByZWFkb25seSBwcmVmZXJyZWRIb3Jpem9udGFsRGlyID0gaW5wdXQ8UmR0SG9yaXpvbnRhbERpcmVjdGlvbj4oXHJcbiAgICBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVJcclxuICApO1xyXG4gIHJlYWRvbmx5IHByZWZlcnJlZFZlcnRpY2FsRGlyID0gaW5wdXQ8UmR0VmVydGljYWxEaXJlY3Rpb24+KFxyXG4gICAgREVGQVVMVF9NRU5VX1ZFUlRJQ0FMX0RJUlxyXG4gICk7XHJcblxyXG4gIHJlYWRvbmx5IGV4cGFuZGVkSW5wdXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSwgeyBhbGlhczogJ2V4cGFuZGVkJyB9KTtcclxuICByZWFkb25seSBleHBhbmRlZCA9IGxpbmtlZFNpZ25hbCgoKSA9PiB0aGlzLmV4cGFuZGVkSW5wdXQoKSk7XHJcblxyXG4gIHJlYWRvbmx5IGF1dG9mb2N1c0l0ZW1JbnB1dCA9IGlucHV0PCdmaXJzdCcgfCAnbGFzdCcgfCBudWxsPihudWxsLCB7XHJcbiAgICBhbGlhczogJ2F1dG9mb2N1c0l0ZW0nLFxyXG4gIH0pO1xyXG4gIHJlYWRvbmx5IGF1dG9mb2N1c0l0ZW0gPSBsaW5rZWRTaWduYWwoKCkgPT4gdGhpcy5hdXRvZm9jdXNJdGVtSW5wdXQoKSk7XHJcblxyXG4gIC8vIEVsZW1lbnQgdXNlZCB0byByZWxhdGl2ZWx5IHBvc2l0aW9uIG1lbnUsXHJcbiAgLy8gdHlwaWNhbGx5IHBhcmVudCBlbGVtZW50LlxyXG4gIC8vIElmIG5vdCBzcGVjaWZpZWQsIHBhcmVudCBlbGVtZW50IGlzIHVzZWQuXHJcbiAgcmVhZG9ubHkgYW5jaG9yRWxlbWVudElucHV0ID0gaW5wdXQ8TnVsbGFibGU8SFRNTEVsZW1lbnQ+PihudWxsLCB7XHJcbiAgICBhbGlhczogJ2FuY2hvckVsZW1lbnQnLFxyXG4gIH0pO1xyXG4gIHJlYWRvbmx5IGFuY2hvckVsZW1lbnQgPSBjb21wdXRlZChcclxuICAgICgpID0+IHRoaXMuYW5jaG9yRWxlbWVudElucHV0KCkgPz8gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQhXHJcbiAgKTtcclxuXHJcbiAgcmVhZG9ubHkgekluZGV4ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sZXZlbCgpICsgMTApO1xyXG4gIHJlYWRvbmx5IGlzUm9vdExldmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sZXZlbCgpID09PSAwKTtcclxuXHJcbiAgLy8gQm91bmRpbmcgYm94IG9mIHRoaXMgZXhjbHVkaW5nIGFueSBleHRyYSBvZmZzZXQuXHJcbiAgcHJpdmF0ZSBfYm94ITogRE9NUmVjdDtcclxuICBnZXQgYm94KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JveDtcclxuICB9XHJcblxyXG4gIC8vIEJvdW5kaW5nIGJveCBvZiBwYXJlbnQgZWxlbWVudC5cclxuICBwcml2YXRlIF9hbmNob3JCb3ghOiBET01SZWN0O1xyXG4gIHByaXZhdGUgX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogMCwgYm90dG9tOiAwIH07XHJcblxyXG4gIC8vIEN1cnJlbnRseSBhcHBsaWVkIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIGRpcmVjdGlvbnMuXHJcbiAgcHJvdGVjdGVkIHZlcnRpY2FsRGlyID0gc2lnbmFsPFZlcnREaXJXaXRoT2Zmc2V0IHwgbnVsbD4obnVsbCwge1xyXG4gICAgZXF1YWw6IGFyZVZlcnREaXJzRXF1YWwsXHJcbiAgfSk7XHJcbiAgcHJvdGVjdGVkIGhvcml6b250YWxEaXIgPSBzaWduYWw8SG9yRGlyV2l0aE9mZnNldCB8IG51bGw+KG51bGwsIHtcclxuICAgIGVxdWFsOiBhcmVIb3JEaXJzRXF1YWwsXHJcbiAgfSk7XHJcblxyXG4gIHByb3RlY3RlZCBleHBhbmRlZENoaWxkID0gc2lnbmFsPHtcclxuICAgIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtO1xyXG4gICAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlO1xyXG4gIH0gfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBzaWduYWw8J2ZpcnN0JyB8ICdsYXN0JyB8IG51bGw+KG51bGwpO1xyXG5cclxuICByZWFkb25seSBrZXlBY3Rpb25zID0ge1xyXG4gICAgW0tCX0NPREUuQVJST1cuVVBdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c1ByZXZJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLkRPV05dOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c05leHRJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlJJR0hUXTogKGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgIHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdmaXJzdCcsIFJkdE1lbnVFeHBhbmRTb3VyY2UuU2hvcnRjdXQpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuTEVGVF06ICgpID0+IHRoaXMuY2xvc2VTZWxmKCksXHJcbiAgICBbS0JfQ09ERS5IT01FXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0oMCksXHJcbiAgICBbS0JfQ09ERS5FTkRdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSh1bnRyYWNrZWQodGhpcy5pdGVtKS5pdGVtcy5sZW5ndGggLSAxKSxcclxuICAgIFtLQl9DT0RFLkVTQ0FQRV06ICgpID0+IHRoaXMuY2xvc2VTZWxmKCksXHJcbiAgICBbS0JfQ09ERS5FTlRFUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuU1BBQ0VCQVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICB9O1xyXG4gIGdldCBzZWxmRXhwYW5kU3JjKCkge1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kZWQoKSkge1xyXG4gICAgICBpZiAodGhpcy5wYXJlbnRNZW51KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50TWVudS5leHBhbmRlZENoaWxkKCk/LnNyYztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuZXhwYW5kZWRDaGlsZCgpPy5zcmM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSByZWNhbGNFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICB0aGlzLnByZWZlcnJlZEhvcml6b250YWxEaXIoKSxcclxuICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpcigpXHJcbiAgICApO1xyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBleHBhbmRlZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMuZXhwYW5kZWQoKSkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBleHBhbmRlZEZvY3VzRWZmZWN0ID0gYWZ0ZXJSZW5kZXJFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW0gPSB1bnRyYWNrZWQodGhpcy5pdGVtKTtcclxuICAgIHRoaXMuZXhwYW5kZWRJbnB1dCgpO1xyXG4gICAgY29uc3QgZXhwYW5kZWQgPSB1bnRyYWNrZWQodGhpcy5leHBhbmRlZCk7XHJcbiAgICBjb25zdCBhdXRvZm9jdXNJdGVtID0gdW50cmFja2VkKHRoaXMuYXV0b2ZvY3VzSXRlbSk7XHJcbiAgICBpZiAoZXhwYW5kZWQpIHtcclxuICAgICAgc3dpdGNoIChhdXRvZm9jdXNJdGVtKSB7XHJcbiAgICAgICAgY2FzZSBudWxsOlxyXG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oMCwgZmFsc2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZmlyc3QnOlxyXG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oMCwgdHJ1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdsYXN0JzpcclxuICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKHJvb3RJdGVtLml0ZW1zLmxlbmd0aCAtIDEsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcclxuICAgICAgdGhpcy5tZWFzdXJlQ29udGFpbmVyUGFkZGluZygpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyKCksXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpcigpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMubGlzdGVuVGFiS2V5UHJlc3MoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW5PZmZzZXRMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ubGVmdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWF4T2Zmc2V0TGVmdCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICB0aGlzLl9ib3gud2lkdGggLVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW5PZmZzZXRUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi50b3A7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1heE9mZnNldFRvcCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0IC1cclxuICAgICAgdGhpcy5fYm94LmhlaWdodCAtXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4uYm90dG9tXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApIHtcclxuICAgIGNvbnN0IGlzUm9vdCA9IHVudHJhY2tlZCh0aGlzLmlzUm9vdExldmVsKTtcclxuICAgIGNvbnN0IGhvcml6b250YWxEaXIgPSB1bnRyYWNrZWQodGhpcy5ob3Jpem9udGFsRGlyKTtcclxuICAgIGNvbnN0IHZlcnRpY2FsRGlyID0gdW50cmFja2VkKHRoaXMudmVydGljYWxEaXIpO1xyXG4gICAgdGhpcy5tZWFzdXJlQm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9ib3ggfHwgIXRoaXMuX2FuY2hvckJveCB8fCAhdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3SG9yRGlyID0gdGhpcy5nZXRSZWFsSG9yaXpvbnRhbERpcihwcmVmZXJyZWRIb3Jpem9udGFsRGlyKTtcclxuICAgIGNvbnN0IG5ld1ZlcnREaXIgPSB0aGlzLmdldFJlYWxWZXJ0aWNhbERpcihwcmVmZXJyZWRWZXJ0aWNhbERpcik7XHJcblxyXG4gICAgLy8gSG9yaXpvbnRhbCBkaXJlY3Rpb25cclxuICAgIGlmIChuZXdIb3JEaXIuZGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC5sZWZ0O1xyXG4gICAgICBpZiAoIWlzUm9vdCkge1xyXG4gICAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChuZXdIb3JEaXIuZGlyID09PSAnbGVmdCcpIHtcclxuICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcblxyXG4gICAgICBpZiAoaXNSb290KSB7XHJcbiAgICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzdHJpY3Rpb25zIGZyb20gbGVmdCBtZW51IGFuZCByaWdodCBtZW51XHJcbiAgICBuZXdIb3JEaXIubGVmdCA9IE1hdGgubWluKFxyXG4gICAgICBNYXRoLm1heCh0aGlzLmdldE1pbk9mZnNldExlZnQoKSwgbmV3SG9yRGlyLmxlZnQpLFxyXG4gICAgICB0aGlzLmdldE1heE9mZnNldExlZnQoKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBWZXJ0aWNhbCBkaXJlY3Rpb25cclxuICAgIGlmIChuZXdWZXJ0RGlyLmRpciA9PT0gJ2Rvd24nKSB7XHJcbiAgICAgIG5ld1ZlcnREaXIudG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcDtcclxuICAgICAgaWYgKGlzUm9vdCkge1xyXG4gICAgICAgIG5ld1ZlcnREaXIudG9wICs9IHRoaXMuX2FuY2hvckJveC5oZWlnaHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3VmVydERpci50b3AgLT0gdGhpcy5fY29udGFpbmVyUGFkZGluZy50b3A7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAobmV3VmVydERpci5kaXIgPT09ICd1cCcpIHtcclxuICAgICAgbmV3VmVydERpci50b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgICAgaWYgKCFpc1Jvb3QpIHtcclxuICAgICAgICBuZXdWZXJ0RGlyLnRvcCArPSB0aGlzLl9hbmNob3JCb3guaGVpZ2h0ICsgdGhpcy5fY29udGFpbmVyUGFkZGluZy50b3A7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXN0cmljdGlvbnMgZnJvbSBoZWFkZXIgYW5kIGZvb3RlclxyXG4gICAgbmV3VmVydERpci50b3AgPSBNYXRoLm1pbihcclxuICAgICAgTWF0aC5tYXgodGhpcy5nZXRNaW5PZmZzZXRUb3AoKSwgbmV3VmVydERpci50b3ApLFxyXG4gICAgICB0aGlzLmdldE1heE9mZnNldFRvcCgpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIWFyZUhvckRpcnNFcXVhbChob3Jpem9udGFsRGlyLCBuZXdIb3JEaXIpIHx8XHJcbiAgICAgICFhcmVWZXJ0RGlyc0VxdWFsKHZlcnRpY2FsRGlyLCBuZXdWZXJ0RGlyKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaG9yaXpvbnRhbERpci5zZXQobmV3SG9yRGlyKTtcclxuICAgICAgdGhpcy52ZXJ0aWNhbERpci5zZXQobmV3VmVydERpcik7XHJcbiAgICAgIHRoaXMuc2V0Q2xhc3NlcygpO1xyXG4gICAgICB0aGlzLm1lYXN1cmVCb3VuZGluZ1JlY3QoKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gIH1cclxuXHJcbiAgcmVjYWxjdWxhdGVDaGlsZHJlbigpIHtcclxuICAgIGNvbnN0IGhvcml6b250YWxEaXIgPSB1bnRyYWNrZWQodGhpcy5ob3Jpem9udGFsRGlyKTtcclxuICAgIGNvbnN0IHZlcnRpY2FsRGlyID0gdW50cmFja2VkKHRoaXMudmVydGljYWxEaXIpO1xyXG4gICAgaWYgKHRoaXMuY2hpbGRyZW4gJiYgaG9yaXpvbnRhbERpciAmJiB2ZXJ0aWNhbERpcikge1xyXG4gICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PlxyXG4gICAgICAgIGNoaWxkLnJlY2FsY3VsYXRlUG9zaXRpb24oaG9yaXpvbnRhbERpci5kaXIsIHZlcnRpY2FsRGlyLmRpcilcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbVBvaW50ZXJFbnRlcihpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgY29uc3QgZXhwYW5kZWRDaGlsZCA9IHVudHJhY2tlZCh0aGlzLmV4cGFuZGVkQ2hpbGQpO1xyXG4gICAgY29uc3Qgb3Blbk9uSG92ZXIgPSB1bnRyYWNrZWQodGhpcy50b3BMZXZlbE1lbnUub3Blbk9uSG92ZXIpO1xyXG4gICAgaWYgKG9wZW5PbkhvdmVyICYmIGV4cGFuZGVkQ2hpbGQ/LnNyYyAhPT0gUmR0TWVudUV4cGFuZFNvdXJjZS5DbGljaykge1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtLnNldChudWxsKTtcclxuICAgICAgaWYgKG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSkpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KHsgaXRlbSwgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlLkhvdmVyIH0pO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWQuc2V0KHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2V4cGFuZGVkIGNoaWxkJywgdGhpcy5leHBhbmRlZENoaWxkKTtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgY29uc3QgZXhwYW5kZWRDaGlsZCA9IHVudHJhY2tlZCh0aGlzLmV4cGFuZGVkQ2hpbGQpO1xyXG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSBtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pO1xyXG4gICAgY29uc3Qgb3Blbk9uSG92ZXIgPSB0aGlzLnRvcExldmVsTWVudS5vcGVuT25Ib3ZlcigpO1xyXG4gICAgaWYgKFxyXG4gICAgICAoaGFzQ2hpbGRyZW4gJiYgZXhwYW5kZWRDaGlsZD8uaXRlbSAhPT0gaXRlbSkgfHxcclxuICAgICAgKG9wZW5PbkhvdmVyICYmIGV4cGFuZGVkQ2hpbGQ/LnNyYyA9PT0gUmR0TWVudUV4cGFuZFNvdXJjZS5Ib3ZlcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtLnNldChudWxsKTtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldCh7IGl0ZW0sIHNyYzogUmR0TWVudUV4cGFuZFNvdXJjZS5DbGljayB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICB9XHJcbiAgICAvLyBDb3VsZCBhbHNvIGxpc3RlbiB0byByb3V0ZXIgZXZlbnRzLCBidXQgbWlnaHQgYmUgdHJpZ2dlcmVkIGJ5XHJcbiAgICAvLyBjaGlsZCByb3V0ZXIgbmF2aWdhdGlvbi5cclxuICAgIGlmICghaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xvc2VTdWJtZW51cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpdGVtLmNvbW1hbmQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgaXRlbS5jb21tYW5kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZva2VJdGVtQ2xpY2soaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGlmIChtZW51SXRlbUhhc1JvdXRlKGl0ZW0pICYmIGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShpdGVtLnJvdXRlckxpbmspO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkl0ZW1DbGljayhpdGVtKTtcclxuICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0uc2V0KCdmaXJzdCcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGRSb3V0ZXMoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIHJldHVybiB0aGlzLnRvcExldmVsTWVudS5nZXRDaGlsZFJvdXRlcyhpdGVtKTtcclxuICB9XHJcblxyXG4gIGNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdGhpcy5leHBhbmRlZENoaWxkKCk7XHJcbiAgICBpZiAoZm9jdXNFeHBhbmRlZCAmJiBleHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGV4cGFuZGVkQ2hpbGQuaXRlbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGZvY3VzSXRlbVJlY3Vyc2l2ZWx5KHBhdGg6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gWy4uLnBhdGhdO1xyXG4gICAgY29uc3QgdGhpc0l0ZW0gPSBjaGlsZHJlbi5zaGlmdCgpITtcclxuXHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtLnNldChudWxsKTtcclxuICAgIHRoaXMuYXV0b2ZvY3VzSXRlbS5zZXQobnVsbCk7XHJcblxyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5leHBhbmRBbmRHZXRDaGlsZCh0aGlzSXRlbSwgUmR0TWVudUV4cGFuZFNvdXJjZS5Gb2N1cylcclxuICAgICAgICAucGlwZShkZWxheSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChvdmVybGF5KSA9PiB7XHJcbiAgICAgICAgICBvdmVybGF5LmZvY3VzSXRlbVJlY3Vyc2l2ZWx5KGNoaWxkcmVuKTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZpcnN0IGZvY3VzIHRoZSBjb3JyZWN0IGl0ZW0gYmVjYXVzZSBzdWJtZW51IG1pZ2h0IGhhdmUgZm9jdXMgb24gaXQuXHJcbiAgICAgIC8vIFJlbW92aW5nIGZvY3VzZWQgZWxlbWVudCBmcm9tIERPTSByZXN1bHRzIGluIHdpbmRvdzpmb2N1c291dCBldmVudFxyXG4gICAgICAvLyBhbmQgdGhhdCBjbG9zZXMgYWxsIG1lbnVzXHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKTtcclxuICAgICAgLy8gTm93IGNsb3NlIHN1Ym1lbnVzIGFuZCB0aGVyZWZvcmUgcmVtb3ZlIHRoZW0gZnJvbSBET01cclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICAgIC8vIFdhaXQgdW50aWwgdGhleSBhcmUgcmVtb3ZlZCBhbmQgZm9jdXMgdGhlIGNvcnJlY3QgaXRlbSBhZ2FpblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKSwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZEFuZEdldENoaWxkKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtLCBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2UpIHtcclxuICAgIGNvbnN0IHJvb3RJdGVtID0gdW50cmFja2VkKHRoaXMuaXRlbSk7XHJcbiAgICBpZiAocm9vdEl0ZW0uaXRlbXMuaW5kZXhPZihpdGVtKSA8IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdBdHRlbXB0aW5nIHRvIGV4cGFuZCBpdGVtIHRoYXQgaXMgbm90IGNoaWxkIGl0ZW0gb2YgdGhpcy5pdGVtJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRlZENoaWxkLnNldCh7IGl0ZW0sIHNyYyB9KTtcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiB1bnRyYWNrZWQoY2hpbGQuaXRlbSkgPT09IGl0ZW0pO1xyXG4gICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgIHJldHVybiBvZihjaGlsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgbWFwKCgpID0+XHJcbiAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiB1bnRyYWNrZWQoY2hpbGQuaXRlbSkgPT09IGl0ZW0pXHJcbiAgICAgICAgKSxcclxuICAgICAgICBmaXJzdChSZHRPYmplY3RVdGlscy5ub3ROdWxsR3VhcmQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGl0ZW1JbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW0gPSB1bnRyYWNrZWQodGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IGhhc0FjdGlvbiA9IGV2ZW50LmNvZGUgaW4gdGhpcy5rZXlBY3Rpb25zO1xyXG4gICAgY29uc3QgaXNMZXR0ZXIgPVxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc0FscGhhYmV0Q2hhcmFjdGVyKGV2ZW50LmtleSkgfHxcclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNOdW1lcmljQ2hhcmFjdGVyKGV2ZW50LmtleSk7XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbiB8fCBpc0xldHRlcikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGhhc0FjdGlvbikge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMua2V5QWN0aW9uc1tldmVudC5jb2RlXShpdGVtSW5kZXgpO1xyXG4gICAgfSBlbHNlIGlmIChpc0xldHRlcikge1xyXG4gICAgICBjb25zdCBuZXh0ID0gZmluZE5leHRJdGVtV2l0aFByZWZpeChyb290SXRlbS5pdGVtcywgaXRlbUluZGV4LCBldmVudC5rZXkpO1xyXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uVGFiS2V5UHJlc3MoZXZlbnQ6IFJkdFNob3J0Y3V0RXZlbnQpIHtcclxuICAgIC8vIERvIG5vdCBwcmV2ZW50IGRlZmF1bHQgdG8gY29ycmVjdGx5IHN3aXRjaCB0byBwcmV2aW91cyBlbGVtZW50XHJcbiAgICBldmVudC5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy8gV2FpdCBmb3IgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB0byBzd2l0Y2ggdG8gbmV3IGVsZW1lbnRcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVNlbGYoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52b2tlSXRlbUNsaWNrQnlJbmRleChpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW0gPSB1bnRyYWNrZWQodGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IGl0ZW0gPSByb290SXRlbS5pdGVtc1tpdGVtSW5kZXhdO1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaW52b2tlSXRlbUNsaWNrKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0l0ZW0oaXRlbTogbnVtYmVyIHwgUGFyc2VkUmR0TWVudUl0ZW0sIHZpc2libGVGb2N1cyA9IHRydWUpIHtcclxuICAgIGxldCBpdGVtSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtSW5kZXggPSB0aGlzLml0ZW0oKS5pdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmJsdXJBbGxGb2N1c2FibGUoKTtcclxuICAgICAgdGhpcy5mb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXgsIHZpc2libGVGb2N1cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJsdXJBbGxGb2N1c2FibGUoKSB7XHJcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsKSA9PlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlciwgdmlzaWJsZUZvY3VzOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBlbFJlZiA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZ2V0KGl0ZW1JbmRleCk7XHJcbiAgICBpZiAoZWxSZWYpIHtcclxuICAgICAgaWYgKHZpc2libGVGb2N1cykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxSZWYubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c05leHRJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCByb290SXRlbSA9IHVudHJhY2tlZCh0aGlzLml0ZW0pO1xyXG4gICAgY29uc3QgbmV4dCA9IChpdGVtSW5kZXggKyAxKSAlIHJvb3RJdGVtLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c1ByZXZJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCByb290SXRlbSA9IHVudHJhY2tlZCh0aGlzLml0ZW0pO1xyXG4gICAgY29uc3QgcHJldiA9XHJcbiAgICAgIChpdGVtSW5kZXggLSAxICsgcm9vdEl0ZW0uaXRlbXMubGVuZ3RoKSAlIHJvb3RJdGVtLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKHByZXYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuU3VibWVudShcclxuICAgIGl0ZW1JbmRleDogbnVtYmVyLFxyXG4gICAgdmlzaWJsZUZvY3VzOiAnZmlyc3QnIHwgJ2xhc3QnLFxyXG4gICAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlXHJcbiAgKSB7XHJcbiAgICBjb25zdCByb290SXRlbSA9IHVudHJhY2tlZCh0aGlzLml0ZW0pO1xyXG4gICAgaWYgKFxyXG4gICAgICBpdGVtSW5kZXggPCByb290SXRlbS5pdGVtcy5sZW5ndGggJiZcclxuICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbihyb290SXRlbS5pdGVtc1tpdGVtSW5kZXhdKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQoeyBpdGVtOiByb290SXRlbS5pdGVtc1tpdGVtSW5kZXhdLCBzcmMgfSk7XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0uc2V0KHZpc2libGVGb2N1cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVNlbGYoZm9jdXNFeHBhbmRlZCA9IHRydWUpIHtcclxuICAgIGlmICh0aGlzLnBhcmVudE1lbnUpIHtcclxuICAgICAgdGhpcy5wYXJlbnRNZW51LmNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmZvY3Vzb3V0JywgWyckZXZlbnQnXSlcclxuICBwcml2YXRlIGNoZWNrQWN0aXZlRWxlbWVudChldmVudDogRm9jdXNFdmVudCkge1xyXG4gICAgY29uc3QgY2xvc2VPbkZvY3VzT3V0ID0gdW50cmFja2VkKHRoaXMudG9wTGV2ZWxNZW51LmNsb3NlT25Gb2N1c091dCk7XHJcbiAgICBpZiAoY2xvc2VPbkZvY3VzT3V0ICYmICF0aGlzLnRvcExldmVsTWVudS5vcGVuT25Ib3Zlcikge1xyXG4gICAgICBjb25zdCB0aGlzRWwgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XHJcbiAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fCAhdGhpc0VsLmNvbnRhaW5zKHRhcmdldCkpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDYWxjdWxhdGVzIGRpcmVjdGlvbiBvZiB0aGlzIG1lbnUgYW5kIG9mZnNldCBpbiBjYXNlXHJcbiAgLy8gbWVudSB3b24ndCBmaXQgaW4gbGVmdCBub3IgcmlnaHQgb2YgcGFyZW50IG1lbnUuXHJcbiAgcHJpdmF0ZSBnZXRSZWFsSG9yaXpvbnRhbERpcihcclxuICAgIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb25cclxuICApOiBIb3JEaXJXaXRoT2Zmc2V0IHtcclxuICAgIGNvbnN0IGlzUm9vdCA9IHVudHJhY2tlZCh0aGlzLmlzUm9vdExldmVsKTtcclxuICAgIGxldCBsZWZ0OiBudW1iZXI7XHJcbiAgICBsZXQgcmlnaHQ6IG51bWJlcjtcclxuICAgIC8vIFRoaXMgbWVudSBpcyBkaXJlY3RseSB1bmRlciBtZW51YmFyXHJcbiAgICBpZiAoaXNSb290KSB7XHJcbiAgICAgIGxlZnQgPSB0aGlzLl9hbmNob3JCb3gucmlnaHQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICAgIHJpZ2h0ID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgICAodGhpcy5fYW5jaG9yQm94LmxlZnQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTWVudSBpcyBuZXN0ZWRcclxuICAgICAgcmlnaHQgPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICAgICh0aGlzLl9hbmNob3JCb3gucmlnaHQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgICBsZWZ0ID0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgbGVmdCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICByaWdodCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0O1xyXG5cclxuICAgIGlmIChwcmVmZXJyZWRIb3Jpem9udGFsRGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIC8vIFdlIHVzZSBwcmVmZXJyZWQgaWYgcG9zc2libGUuXHJcbiAgICAgIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gVGhlbiB0aGUgb3RoZXIgb25lLlxyXG4gICAgICB9IGVsc2UgaWYgKGxlZnQgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gRWRnZSBjYXNlIGlmIG5laXRoZXIgZGlyZWN0aW9uIGNhbiBiZSB1c2VkICh1bHRyYSBuYXJyb3cgc2NyZWVuKS5cclxuICAgICAgICAvLyBDaG9vc2UgZGlyZWN0aW9uIHRoYXQgY292ZXJzIGxlYXN0IG9mIHBhcmVudCBtZW51LlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE5hcnJvd1NjcmVlbkhvcml6b250YWxEaXIobGVmdCwgcmlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobGVmdCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFycm93U2NyZWVuSG9yaXpvbnRhbERpcihsZWZ0LCByaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZpbmRzIG91dCB3aGVyZSB0byBwdXQgbWVudSBpbiBjYXNlIHNjcmVlbiBpcyB0b28gbmFycm93IGZvciB0d28gbWVudXNcclxuICAvLyB0byBmaXQgbmV4dCB0byBlYWNoIG90aGVyLiBNaW5pbWl6ZXMgYXJlYSBvZiBwYXJlbnQgbWVudSBjb3ZlcmVkIGJ5IHRoaXMuXHJcbiAgcHJpdmF0ZSBnZXROYXJyb3dTY3JlZW5Ib3Jpem9udGFsRGlyKFxyXG4gICAgbGVmdDogbnVtYmVyLFxyXG4gICAgcmlnaHQ6IG51bWJlclxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgY29uc3Qgc2NyZWVuU3RhcnQgPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICBjb25zdCBzY3JlZW5FbmQgPVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodDtcclxuICAgIGNvbnN0IHNjcmVlbkNlbnRlciA9IChzY3JlZW5TdGFydCAtIHNjcmVlbkVuZCkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGxlZnRTdGFydCA9IE1hdGgubWF4KHRoaXMuX2FuY2hvckJveC5sZWZ0LCBzY3JlZW5TdGFydCk7XHJcbiAgICBjb25zdCBsZWZ0RW5kID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMuX2FuY2hvckJveC5sZWZ0ICsgdGhpcy5fYW5jaG9yQm94LndpZHRoLFxyXG4gICAgICBzY3JlZW5DZW50ZXJcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmlnaHRTdGFydCA9IE1hdGgubWF4KHNjcmVlbkNlbnRlciwgbGVmdEVuZCk7XHJcbiAgICBjb25zdCByaWdodEVuZCA9IE1hdGgubWluKFxyXG4gICAgICB0aGlzLl9hbmNob3JCb3gubGVmdCArIHRoaXMuX2FuY2hvckJveC53aWR0aCxcclxuICAgICAgc2NyZWVuRW5kXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChsZWZ0RW5kIC0gbGVmdFN0YXJ0ID4gcmlnaHRFbmQgLSByaWdodFN0YXJ0KSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ3JpZ2h0JywgbGVmdDogcmlnaHQgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAtbGVmdCB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWFsVmVydGljYWxEaXIoXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApOiBWZXJ0RGlyV2l0aE9mZnNldCB7XHJcbiAgICBjb25zdCBpc1Jvb3QgPSB1bnRyYWNrZWQodGhpcy5pc1Jvb3RMZXZlbCk7XHJcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XHJcbiAgICBsZXQgdG9wOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKGlzUm9vdCkge1xyXG4gICAgICBib3R0b20gPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0ICtcclxuICAgICAgICB0aGlzLl9hbmNob3JCb3guYm90dG9tIC1cclxuICAgICAgICB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICB0b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJvdHRvbSA9XHJcbiAgICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS5oZWlnaHQgLVxyXG4gICAgICAgIHRoaXMuX2FuY2hvckJveC50b3AgLVxyXG4gICAgICAgIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICAgIHRvcCA9IHRoaXMuX2FuY2hvckJveC5ib3R0b20gLSB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHRvcCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnRvcDtcclxuICAgIGJvdHRvbSAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmJvdHRvbTtcclxuXHJcbiAgICBpZiAocHJlZmVycmVkVmVydGljYWxEaXIgPT09ICdkb3duJykge1xyXG4gICAgICBpZiAoYm90dG9tID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdkb3duJywgdG9wOiAwIH07XHJcbiAgICAgIH0gZWxzZSBpZiAodG9wID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICd1cCcsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogcHJlZmVycmVkVmVydGljYWxEaXIsIHRvcDogMCB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodG9wID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICd1cCcsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKGJvdHRvbSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnZG93bicsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogcHJlZmVycmVkVmVydGljYWxEaXIsIHRvcDogMCB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNZWFzdXJlcyBib3VuZGluZyByZWN0IG9mIHRoaXMgYW5kIG9mZnNldCBjb250YWluZXJcclxuICAvLyBTaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBhZnRlciBwYXJlbnQgbWVudSBoYXMgYWxyZWFkeSBiZWVuIG1lYXN1cmVkLlxyXG4gIHByaXZhdGUgbWVhc3VyZUJvdW5kaW5nUmVjdCgpIHtcclxuICAgIHRoaXMuX2JveCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuYW5jaG9yRWxlbWVudCgpO1xyXG4gICAgdGhpcy5fYW5jaG9yQm94ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZWFzdXJlQ29udGFpbmVyUGFkZGluZygpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShcclxuICAgICAgdGhpcy5tZW51SXRlbUNvbnRhaW5lci5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZXMucGFkZGluZ1RvcCk7XHJcbiAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5wYWRkaW5nQm90dG9tKTtcclxuICAgIHRoaXMuX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogcGFkZGluZ1RvcCwgYm90dG9tOiBwYWRkaW5nQm90dG9tIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENsYXNzZXMoKSB7XHJcbiAgICBjb25zdCBpc1Jvb3QgPSB0aGlzLmlzUm9vdExldmVsKCk7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbCA9IHRoaXMudmVydGljYWxEaXIoKTtcclxuICAgIGNvbnN0IGhvcml6b250YWwgPSB0aGlzLmhvcml6b250YWxEaXIoKTtcclxuICAgIGlmICh2ZXJ0aWNhbCkge1xyXG4gICAgICBpZiAodmVydGljYWwuZGlyID09PSAndXAnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktdXAnKTtcclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtb3ZlcmxheS1kb3duJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktdXAnKTtcclxuICAgICAgICB0aGlzLnNldENsYXNzKCdyZHQtb3ZlcmxheS1kb3duJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRPZmZzZXQoJ3RvcCcsIHZlcnRpY2FsLnRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhvcml6b250YWwpIHtcclxuICAgICAgaWYgKGhvcml6b250YWwuZGlyID09PSAnbGVmdCcpIHtcclxuICAgICAgICB0aGlzLnNldENsYXNzKCdyZHQtb3ZlcmxheS1sZWZ0Jyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktcmlnaHQnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtb3ZlcmxheS1sZWZ0Jyk7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktcmlnaHQnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldE9mZnNldCgnbGVmdCcsIGhvcml6b250YWwubGVmdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzUm9vdCkge1xyXG4gICAgICB0aGlzLnNldENsYXNzKCdyZHQtbWVudS1yb290Jyk7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1tZW51LXN1YicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW1lbnUtcm9vdCcpO1xyXG4gICAgICB0aGlzLnNldENsYXNzKCdyZHQtbWVudS1zdWInKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVDbGFzcyhjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE9mZnNldChkaXJlY3Rpb246ICd0b3AnIHwgJ2xlZnQnLCB2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgZGlyZWN0aW9uLCBgJHt2YWx1ZX1weGApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5UYWJLZXlQcmVzcygpIHtcclxuICAgIGNvbnN0IHNoaWZ0VGFiID0gUmR0U2hvcnRjdXQuY3JlYXRlVW5zYWZlKCdzaGlmdCcsICd0YWInKTtcclxuICAgIGNvbnN0IHRhYiA9IFJkdFNob3J0Y3V0LmNyZWF0ZVVuc2FmZSgndGFiJyk7XHJcbiAgICB0aGlzLnNob3J0Y3V0U2VydmljZVxyXG4gICAgICAubGlzdGVuKFt0YWIsIHNoaWZ0VGFiXSwge1xyXG4gICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5vblRhYktleVByZXNzKGV2ZW50KSk7XHJcbiAgfVxyXG59XHJcbiIsIjx1bCBjbGFzcz1cIm1lbnUtaXRlbS1jb250YWluZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgI21lbnVJdGVtQ29udGFpbmVyPlxyXG4gIEBmb3IoaXRlbSBvZiBpdGVtKCkuaXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XHJcbiAgPGxpXHJcbiAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgIChyZHRLZXlMaXN0ZW5lcik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXHJcbiAgICAocG9pbnRlcmVudGVyKT1cIm9uSXRlbVBvaW50ZXJFbnRlcihpdGVtKVwiXHJcbiAgICByZHRBbnlSb3V0ZUFjdGl2ZT1cIm1lbnUtaXRlbS1yb3V0ZS1hY3RpdmVcIlxyXG4gICAgW3dhdGNoZWRSb3V0ZXNdPVwiZ2V0Q2hpbGRSb3V0ZXMoaXRlbSlcIlxyXG4gICAgI2FuY2hvckVsXHJcbiAgPlxyXG4gICAgQGlmKCFpdGVtLnJvdXRlckxpbmsgJiYgIWl0ZW0uZXh0ZXJuYWxMaW5rKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIml0ZW0uaXRlbXMgPyAnbWVudScgOiBudWxsXCJcclxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkKCk/Lml0ZW1cIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgQGlmIChpdGVtLnNob3J0Y3V0KSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWl0ZW0tc2hvcnRjdXRcIj5cclxuICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaXRlbXNcIlxyXG4gICAgICAgICAgICBuYW1lPVwiY2hldnJvbl9yaWdodFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAtLT5cclxuICAgICAgICBAaWYgKGl0ZW0uaXRlbXMpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaXRlbS1pY29uIHJkdC1tZW51LWljb24tcmlnaHRcIj48L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlua0JvZHkgbGV0LWl0ZW0+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0tcmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgIEBpZihpdGVtLnNob3J0Y3V0KSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWl0ZW0tc2hvcnRjdXRcIj5cclxuICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgQGlmIChpdGVtLnJvdXRlckxpbmspIHtcclxuICAgIDxhXHJcbiAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxyXG4gICAgICBbcXVlcnlQYXJhbXNdPVwiaXRlbS5xdWVyeVBhcmFtc1wiXHJcbiAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAvPlxyXG4gICAgPC9hPlxyXG4gICAgfSBAaWYgKGl0ZW0uZXh0ZXJuYWxMaW5rKSB7XHJcbiAgICA8YVxyXG4gICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICBjbGFzcz1cIm1lbnUtaXRlbS1jb250ZW50XCJcclxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgW2hyZWZdPVwiaXRlbS5leHRlcm5hbExpbmtcIlxyXG4gICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcclxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgLz5cclxuICAgIDwvYT5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIENoaWxkIG1lbnVzIGV4aXN0IG9ubHkgaWYgdGhpcyBtZW51IGlzIGV4cGFuZGVkLiAtLT5cclxuICAgIDwhLS0gT25seSBvbmUgaW52aXNpYmxlIGxldmVsIGlzIGFsd2F5cyBhdHRhY2hlZCB0byBET00sIHRoZSByZXN0IGRvZXMgbm90IGV4aXN0LiAtLT5cclxuICAgIEBpZiAoaXRlbS5pdGVtcyAmJiBleHBhbmRlZCgpKSB7XHJcbiAgICA8cmR0LW1lbnUtb3ZlcmxheVxyXG4gICAgICBbaXRlbV09XCIkYW55KGl0ZW0pXCJcclxuICAgICAgW2V4cGFuZGVkXT1cIml0ZW0gPT09IGV4cGFuZGVkQ2hpbGQoKT8uaXRlbVwiXHJcbiAgICAgIFthdXRvZm9jdXNJdGVtXT1cImF1dG9mb2N1c1N1Ym1lbnVJdGVtKClcIlxyXG4gICAgICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJob3Jpem9udGFsRGlyKCk/LmRpciFcIlxyXG4gICAgICBbcHJlZmVycmVkVmVydGljYWxEaXJdPVwidmVydGljYWxEaXIoKT8uZGlyIVwiXHJcbiAgICAgIFtsZXZlbF09XCJsZXZlbCgpICsgMVwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgICB9XHJcbiAgPC9saT5cclxuICB9XHJcbjwvdWw+XHJcbiJdfQ==","import { DOCUMENT } from '@angular/common';\nimport { afterNextRender, booleanAttribute, ChangeDetectorRef, computed, DestroyRef, Directive, effect, ElementRef, EnvironmentInjector, inject, input, numberAttribute, QueryList, Renderer2, signal, untracked, ViewChildren, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal, } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { RdtRouterService } from '@ngrdt/router';\nimport { RdtShortcutService } from '@ngrdt/shortcuts';\nimport { KB_CODE, RdtStringUtils, } from '@ngrdt/utils';\nimport { animationFrameScheduler, fromEvent, map, switchMap, throttleTime, withLatestFrom, } from 'rxjs';\nimport { RdtMenuOverlayComponent } from '../menu-overlay/rdt-menu-overlay.component';\nimport { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME, RDT_MENU_MARGIN_LEFT_PROPERTY_NAME, RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME, RDT_MENU_MARGIN_TOP_PROPERTY_NAME, RdtMenuShortcutMode, } from '../models';\nimport { RdtMenuExpandSource, } from '../private-models';\nimport { findNextItemWithPrefix, FOCUS_VISIBLE, getChildRoutesMap, getMenuItemsShortcuts, menuItemHasChildren, menuItemHasRoute, } from '../utils';\nimport * as i0 from \"@angular/core\";\nexport class RdtMenuBaseComponent {\n preferredVerticalDir = input(DEFAULT_MENU_VERTICAL_DIR);\n preferredHorizontalDir = input(DEFAULT_MENU_HORIZONTAL_DIR);\n // Mode only matters if item has shortcut and only children, no command nor routerLink\n // FOCUS_ITEM will put focus on item with shortcut\n // OPEN_SUBMENU will open its submenu and put focus on the first item in it\n // If item has command or routerLink, it will always be activated and everything closed\n shortcutMode = input(RdtMenuShortcutMode.OPEN_SUBMENU);\n closeOnFocusOut = input(false, { transform: booleanAttribute });\n openOnHover = input(false, { transform: booleanAttribute });\n hitboxMargin = input(10, { transform: numberAttribute });\n cd = inject(ChangeDetectorRef);\n destroyRef = inject(DestroyRef);\n rdtRouter = inject(RdtRouterService);\n elRef = inject(ElementRef);\n document = inject(DOCUMENT);\n renderer = inject(Renderer2);\n router = inject(Router);\n shortcutService = inject(RdtShortcutService);\n injector = inject(EnvironmentInjector);\n children;\n focusableElements;\n expandedChild = signal(null);\n autofocusSubmenuItem = null;\n filteredItems = computed(() => {\n this.navigationEnd();\n const items = this.allParsedItems();\n const current = this.rdtRouter.parseAbsoluteUrl();\n if (!current) {\n return items;\n }\n else {\n return this.filterRec(items, current);\n }\n });\n get clientSize() {\n return this._clientSize;\n }\n _clientSize;\n get bodyMargin() {\n return this._bodyMargin;\n }\n _bodyMargin;\n get buttonContainerRect() {\n return this._buttonContainerRect;\n }\n _buttonContainerRect;\n childRoutesMap = computed(() => getChildRoutesMap(this.filteredItems()));\n keyActions = {\n [KB_CODE.ARROW.LEFT]: (index) => this.focusPrevItem(index),\n [KB_CODE.ARROW.RIGHT]: (index) => this.focusNextItem(index),\n [KB_CODE.ARROW.DOWN]: (index) => this.openSubmenu(index, 'first', RdtMenuExpandSource.Shortcut),\n [KB_CODE.ARROW.UP]: (index) => this.openSubmenu(index, 'last', RdtMenuExpandSource.Shortcut),\n [KB_CODE.HOME]: () => this.focusItem(0),\n [KB_CODE.END]: () => this.focusItem(untracked(this.filteredItems).length - 1),\n [KB_CODE.ENTER]: (index) => this.invokeItemClickByIndex(index),\n [KB_CODE.SPACEBAR]: (index) => this.invokeItemClickByIndex(index),\n };\n navigationEnd = toSignal(this.rdtRouter.navigationEnd$);\n // Returns all routes asociated with item or its subitems.\n getChildRoutes(item) {\n return this.childRoutesMap().get(item) ?? [];\n }\n constructor() {\n this.listenShortcuts();\n afterNextRender(() => {\n this.listenWindowResize();\n this.measure();\n this.recalculateChildren();\n });\n }\n recalcChildrenEffect = effect(() => {\n this.recalculateChildren();\n });\n recalculateChildren() {\n if (this.children) {\n this.children.forEach((child) => {\n child.recalculatePosition(this.preferredHorizontalDir(), this.preferredVerticalDir());\n });\n }\n }\n closeSubmenus(focusExpanded = false) {\n const expandedChild = untracked(this.expandedChild);\n if (focusExpanded && expandedChild) {\n this.focusItem(expandedChild.item);\n }\n this.expandedChild.set(null);\n this.cd.markForCheck();\n }\n onItemClick(item) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.openOnHover);\n if ((menuItemHasChildren(item) && expandedChild?.item !== item) ||\n (openOnHover && expandedChild?.src === RdtMenuExpandSource.Hover)) {\n this.autofocusSubmenuItem = null;\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Click });\n }\n else {\n this.expandedChild.set(null);\n }\n if (typeof item.command === 'function') {\n item.command();\n }\n }\n onItemPointerEnter(item) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.openOnHover);\n if (openOnHover) {\n if (menuItemHasChildren(item) &&\n expandedChild?.src !== RdtMenuExpandSource.Click) {\n this.autofocusSubmenuItem = null;\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Hover });\n }\n else {\n this.expandedChild.set(null);\n }\n }\n }\n onKeyDown(itemIndex, event) {\n const hasAction = event.code in this.keyActions;\n const isLetter = RdtStringUtils.isAlphabetCharacter(event.key) ||\n RdtStringUtils.isNumericCharacter(event.key);\n if (hasAction || isLetter) {\n event.preventDefault();\n }\n if (hasAction) {\n event.stopPropagation();\n }\n if (hasAction) {\n this.keyActions[event.code](itemIndex);\n }\n else if (isLetter) {\n const filteredItems = untracked(this.filteredItems);\n const next = findNextItemWithPrefix(filteredItems, itemIndex, event.key);\n if (next !== null) {\n this.focusItem(next);\n }\n }\n }\n invokeItemClick(item) {\n if (menuItemHasRoute(item) && item.routerLink) {\n this.router.navigate(item.routerLink);\n }\n this.onItemClick(item);\n this.autofocusSubmenuItem = 'first';\n }\n filterRec(items, current) {\n let currentParent = current.route;\n const currentParams = current.params;\n const filtered = items.filter((item) => {\n if (!item.requiredParent) {\n return true;\n }\n const required = item.requiredParent;\n while (currentParent.absolutePath !== required.absolutePath) {\n currentParent = currentParent.parent;\n if (!currentParent) {\n return false;\n }\n }\n let requiredParent = required;\n do {\n const path = requiredParent.absolutePath;\n if (path in currentParams) {\n for (const key in requiredParent.staticParams) {\n if (currentParams[path][key] !== requiredParent.staticParams[key]) {\n return false;\n }\n }\n }\n requiredParent = requiredParent.parent;\n } while (requiredParent);\n return true;\n });\n return filtered.map((item) => {\n if (item.items) {\n return {\n ...item,\n items: this.filterRec(item.items, current),\n };\n }\n else {\n return item;\n }\n });\n }\n invokeItemClickByIndex(itemIndex) {\n const filteredItems = untracked(this.filteredItems);\n const item = filteredItems[itemIndex];\n if (!item) {\n return;\n }\n this.invokeItemClick(item);\n }\n openSubmenu(itemIndex, visibleFocus, src) {\n const filteredItems = untracked(this.filteredItems);\n if (itemIndex < filteredItems.length &&\n menuItemHasChildren(filteredItems[itemIndex])) {\n const item = filteredItems[itemIndex];\n this.autofocusSubmenuItem = visibleFocus;\n this.expandedChild.set({ item, src });\n }\n }\n focusItem(item) {\n const filteredItems = untracked(this.filteredItems);\n let itemIndex;\n if (typeof item === 'number') {\n itemIndex = item;\n }\n else {\n itemIndex = filteredItems.indexOf(item);\n }\n if (itemIndex >= 0 && itemIndex < this.focusableElements.length) {\n this.blurAllFocusable();\n this.focusFocusable(itemIndex);\n }\n }\n focusNextItem(itemIndex) {\n const filteredItems = untracked(this.filteredItems);\n const next = (itemIndex + 1) % filteredItems.length;\n this.focusItem(next);\n }\n focusPrevItem(itemIndex) {\n const filteredItems = untracked(this.filteredItems);\n const prev = (itemIndex - 1 + filteredItems.length) % filteredItems.length;\n this.focusItem(prev);\n }\n blurAllFocusable() {\n this.focusableElements.forEach((el) => this.renderer.removeClass(el.nativeElement, FOCUS_VISIBLE));\n }\n focusFocusable(itemIndex) {\n const elRef = this.focusableElements.get(itemIndex);\n if (elRef) {\n this.renderer.addClass(elRef.nativeElement, FOCUS_VISIBLE);\n elRef.nativeElement.focus();\n }\n }\n onPointerMove(event) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.openOnHover);\n if (openOnHover && expandedChild) {\n const hitboxes = this.getHitboxes();\n const isInside = hitboxes.some((hitbox) => this.isPointerInsideHitbox(hitbox.rect, event));\n for (let i = hitboxes.length - 1; i >= 0; i--) {\n const hitbox = hitboxes[i];\n if (!hitbox.fixed && !isInside) {\n hitbox.close();\n break;\n }\n }\n }\n }\n // Closes menu if user navigates outside it using Tab.\n checkActiveElement(event) {\n const closeOnFocusOut = untracked(this.closeOnFocusOut);\n if (closeOnFocusOut && !this.openOnHover) {\n const thisEl = this.elRef.nativeElement;\n const target = event.relatedTarget;\n if (!(target instanceof HTMLElement) || !thisEl.contains(target)) {\n this.expandedChild.set(null);\n }\n }\n }\n onDocumentClick(event) {\n const target = event.target;\n const elRef = this.elRef.nativeElement;\n if (!elRef.contains(target)) {\n this.closeSubmenus();\n }\n }\n measure() {\n this.measureButtonContainer();\n this.measureClientSize();\n this.readMargin();\n }\n readMargin() {\n const computedStyle = getComputedStyle(this.elRef.nativeElement);\n const topVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_TOP_PROPERTY_NAME);\n const bottomVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME);\n const leftVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_LEFT_PROPERTY_NAME);\n const rightVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME);\n this._bodyMargin = {\n top: parseInt(topVal) || 0,\n bottom: parseInt(bottomVal) || 0,\n left: parseInt(leftVal) || 0,\n right: parseInt(rightVal) || 0,\n };\n }\n measureClientSize() {\n this._clientSize = {\n width: this.document.body.clientWidth,\n height: this.document.body.clientHeight,\n };\n }\n measureButtonContainer() {\n const el = this.buttonContainer;\n if (el) {\n this._buttonContainerRect = el.getBoundingClientRect();\n }\n else {\n this._buttonContainerRect = undefined;\n }\n }\n listenWindowResize() {\n fromEvent(window, 'resize')\n .pipe(throttleTime(0, animationFrameScheduler, { trailing: true }), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.measure();\n this.recalculateChildren();\n });\n }\n listenShortcuts() {\n const filteredItems$ = toObservable(this.filteredItems);\n const itemsWithShortcuts$ = filteredItems$.pipe(map(getMenuItemsShortcuts));\n const shortcuts$ = itemsWithShortcuts$.pipe(map((items) => items.map((it) => it.shortcut)));\n const map$ = itemsWithShortcuts$.pipe(map((items) => this.getShortcutMap(items)));\n shortcuts$\n .pipe(switchMap((shortcuts) => this.shortcutService.listen(shortcuts)), withLatestFrom(map$), takeUntilDestroyed(this.destroyRef))\n .subscribe(([evt, map]) => this.onShortcut(evt.shortcut, map));\n }\n getShortcutMap(itemsWithShortcuts) {\n const shortcutMap = {};\n itemsWithShortcuts.forEach((item) => {\n shortcutMap[item.shortcut.hotkeysValue] = item.path;\n });\n return shortcutMap;\n }\n onShortcut(shortcut, map) {\n const path = map[shortcut.hotkeysValue];\n if (!path) {\n console.warn(`Menu shortcut ${shortcut.hotkeysValue} was detected, but there is no path associated with it.`, map);\n }\n const last = path[path.length - 1];\n const hasRoute = menuItemHasRoute(last);\n const hasCommand = typeof last.command === 'function';\n if (hasRoute || hasCommand) {\n this.closeSubmenus(false);\n if (hasCommand) {\n last.command();\n }\n if (hasRoute) {\n this.router.navigate(last.routerLink);\n }\n }\n else {\n this.activateItemRecursively(path, RdtMenuExpandSource.Shortcut);\n }\n }\n activateItemRecursively(path, src) {\n const shortcutMode = untracked(this.shortcutMode);\n const children = [...path];\n if (shortcutMode === RdtMenuShortcutMode.OPEN_SUBMENU) {\n const last = children[children.length - 1];\n if (menuItemHasChildren(last) && last.items[0]) {\n children.push(last.items[0]);\n }\n }\n const thisItem = children.shift();\n if (children.length > 0) {\n this.expandedChild.set({ item: thisItem, src });\n const overlay = this.children.find((child) => untracked(child.item) === thisItem);\n overlay.focusItemRecursively(children);\n }\n else {\n this.expandedChild.set(null);\n this.focusItem(thisItem);\n }\n }\n isPointerInsideHitbox(hitbox, event) {\n const rect = hitbox;\n const x = event.clientX;\n const y = event.clientY;\n const margin = untracked(this.hitboxMargin);\n return (x >= rect.left - margin &&\n x <= rect.right + margin &&\n y >= rect.top - margin &&\n y <= rect.bottom + margin);\n }\n getHitboxes() {\n const boxes = this.getOpenMenuBoundingBoxes();\n const buttonContainerRect = this.buttonContainerRect;\n if (buttonContainerRect) {\n boxes.push({ rect: buttonContainerRect, fixed: true, close: () => { } });\n }\n return boxes;\n }\n getOpenMenuBoundingBoxes() {\n const boxes = [];\n this.children.forEach((overlay) => {\n this.getOpenMenuBoundingBoxesRec(overlay, boxes);\n });\n return boxes;\n }\n getOpenMenuBoundingBoxesRec(overlay, boxes) {\n if (overlay.expanded()) {\n let someByClick = false;\n overlay.children.forEach((child) => (someByClick ||= this.getOpenMenuBoundingBoxesRec(child, boxes)));\n const fixed = someByClick || overlay.selfExpandSrc === RdtMenuExpandSource.Click;\n boxes.push({\n rect: overlay.box,\n fixed: fixed,\n close: () => overlay.closeSelf(false),\n });\n return fixed;\n }\n return false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.0\", type: RdtMenuBaseComponent, isStandalone: true, inputs: { preferredVerticalDir: { classPropertyName: \"preferredVerticalDir\", publicName: \"preferredVerticalDir\", isSignal: true, isRequired: false, transformFunction: null }, preferredHorizontalDir: { classPropertyName: \"preferredHorizontalDir\", publicName: \"preferredHorizontalDir\", isSignal: true, isRequired: false, transformFunction: null }, shortcutMode: { classPropertyName: \"shortcutMode\", publicName: \"shortcutMode\", isSignal: true, isRequired: false, transformFunction: null }, closeOnFocusOut: { classPropertyName: \"closeOnFocusOut\", publicName: \"closeOnFocusOut\", isSignal: true, isRequired: false, transformFunction: null }, openOnHover: { classPropertyName: \"openOnHover\", publicName: \"openOnHover\", isSignal: true, isRequired: false, transformFunction: null }, hitboxMargin: { classPropertyName: \"hitboxMargin\", publicName: \"hitboxMargin\", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { \"window:pointermove\": \"onPointerMove($event)\", \"document:click\": \"onDocumentClick($event)\", \"window:focusout\": \"checkActiveElement($event)\" }, classAttribute: \"rdt-menu-base\" }, viewQueries: [{ propertyName: \"children\", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: \"focusableElements\", predicate: [\"focusableItem\"], descendants: true }], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuBaseComponent, decorators: [{\n type: Directive,\n args: [{\n host: {\n class: 'rdt-menu-base',\n '(window:pointermove)': 'onPointerMove($event)',\n '(document:click)': 'onDocumentClick($event)',\n '(window:focusout)': 'checkActiveElement($event)',\n },\n }]\n }], ctorParameters: () => [], propDecorators: { children: [{\n type: ViewChildren,\n args: [RdtMenuOverlayComponent]\n }], focusableElements: [{\n type: ViewChildren,\n args: ['focusableItem']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxTQUFTLEVBRVQsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osUUFBUSxHQUNULE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBWSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsT0FBTyxFQUVQLGNBQWMsR0FFZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxHQUFHLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QixvQ0FBb0MsRUFDcEMsa0NBQWtDLEVBQ2xDLG1DQUFtQyxFQUNuQyxpQ0FB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QixvQkFBb0I7a0JBUnpDLFNBQVM7bUJBQUM7b0JBQ1QsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxlQUFlO3dCQUN0QixzQkFBc0IsRUFBRSx1QkFBdUI7d0JBQy9DLGtCQUFrQixFQUFFLHlCQUF5Qjt3QkFDN0MsbUJBQW1CLEVBQUUsNEJBQTRCO3FCQUNsRDtpQkFDRjt3REE4QlcsUUFBUTtzQkFEakIsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSTNCLGlCQUFpQjtzQkFEMUIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIGFmdGVyTmV4dFJlbmRlcixcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIGNvbXB1dGVkLFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIG51bWJlckF0dHJpYnV0ZSxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICB0YWtlVW50aWxEZXN0cm95ZWQsXHJcbiAgdG9PYnNlcnZhYmxlLFxyXG4gIHRvU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0Um91dGUsIFJkdFJvdXRlclNlcnZpY2UgfSBmcm9tICdAbmdyZHQvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U2hvcnRjdXQsIFJkdFNob3J0Y3V0U2VydmljZSB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQge1xyXG4gIEtCX0NPREUsXHJcbiAgUmR0SG9yaXpvbnRhbERpcmVjdGlvbixcclxuICBSZHRTdHJpbmdVdGlscyxcclxuICBSZHRWZXJ0aWNhbERpcmVjdGlvbixcclxufSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLFxyXG4gIGZyb21FdmVudCxcclxuICBtYXAsXHJcbiAgc3dpdGNoTWFwLFxyXG4gIHRocm90dGxlVGltZSxcclxuICB3aXRoTGF0ZXN0RnJvbSxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0TWVudU92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuLi9tZW51LW92ZXJsYXkvcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUixcclxuICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9CT1RUT01fUFJPUEVSVFlfTkFNRSxcclxuICBSRFRfTUVOVV9NQVJHSU5fTEVGVF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9SSUdIVF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9UT1BfUFJPUEVSVFlfTkFNRSxcclxuICBSZHRNZW51U2hvcnRjdXRNb2RlLFxyXG59IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgUmR0TWVudUV4cGFuZGVkQ2hpbGQsXHJcbiAgUmR0TWVudUV4cGFuZFNvdXJjZSxcclxufSBmcm9tICcuLi9wcml2YXRlLW1vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgZmluZE5leHRJdGVtV2l0aFByZWZpeCxcclxuICBGT0NVU19WSVNJQkxFLFxyXG4gIGdldENoaWxkUm91dGVzTWFwLFxyXG4gIGdldE1lbnVJdGVtc1Nob3J0Y3V0cyxcclxuICBtZW51SXRlbUhhc0NoaWxkcmVuLFxyXG4gIG1lbnVJdGVtSGFzUm91dGUsXHJcbiAgUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXQsXHJcbiAgU2l6ZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBob3N0OiB7XHJcbiAgICBjbGFzczogJ3JkdC1tZW51LWJhc2UnLFxyXG4gICAgJyh3aW5kb3c6cG9pbnRlcm1vdmUpJzogJ29uUG9pbnRlck1vdmUoJGV2ZW50KScsXHJcbiAgICAnKGRvY3VtZW50OmNsaWNrKSc6ICdvbkRvY3VtZW50Q2xpY2soJGV2ZW50KScsXHJcbiAgICAnKHdpbmRvdzpmb2N1c291dCknOiAnY2hlY2tBY3RpdmVFbGVtZW50KCRldmVudCknLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZHRNZW51QmFzZUNvbXBvbmVudCB7XHJcbiAgcmVhZG9ubHkgcHJlZmVycmVkVmVydGljYWxEaXIgPSBpbnB1dDxSZHRWZXJ0aWNhbERpcmVjdGlvbj4oXHJcbiAgICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSXHJcbiAgKTtcclxuICByZWFkb25seSBwcmVmZXJyZWRIb3Jpem9udGFsRGlyID0gaW5wdXQ8UmR0SG9yaXpvbnRhbERpcmVjdGlvbj4oXHJcbiAgICBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVJcclxuICApO1xyXG4gIC8vIE1vZGUgb25seSBtYXR0ZXJzIGlmIGl0ZW0gaGFzIHNob3J0Y3V0IGFuZCBvbmx5IGNoaWxkcmVuLCBubyBjb21tYW5kIG5vciByb3V0ZXJMaW5rXHJcbiAgLy8gRk9DVVNfSVRFTSB3aWxsIHB1dCBmb2N1cyBvbiBpdGVtIHdpdGggc2hvcnRjdXRcclxuICAvLyBPUEVOX1NVQk1FTlUgd2lsbCBvcGVuIGl0cyBzdWJtZW51IGFuZCBwdXQgZm9jdXMgb24gdGhlIGZpcnN0IGl0ZW0gaW4gaXRcclxuICAvLyBJZiBpdGVtIGhhcyBjb21tYW5kIG9yIHJvdXRlckxpbmssIGl0IHdpbGwgYWx3YXlzIGJlIGFjdGl2YXRlZCBhbmQgZXZlcnl0aGluZyBjbG9zZWRcclxuICByZWFkb25seSBzaG9ydGN1dE1vZGUgPSBpbnB1dDwnZm9jdXMtaXRlbScgfCAnb3Blbi1zdWJtZW51Jz4oXHJcbiAgICBSZHRNZW51U2hvcnRjdXRNb2RlLk9QRU5fU1VCTUVOVVxyXG4gICk7XHJcbiAgcmVhZG9ubHkgY2xvc2VPbkZvY3VzT3V0ID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xyXG4gIHJlYWRvbmx5IG9wZW5PbkhvdmVyID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xyXG4gIHJlYWRvbmx5IGhpdGJveE1hcmdpbiA9IGlucHV0KDEwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xyXG5cclxuICByZWFkb25seSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmR0Um91dGVyID0gaW5qZWN0KFJkdFJvdXRlclNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBlbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3J0Y3V0U2VydmljZSA9IGluamVjdChSZHRTaG9ydGN1dFNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBpbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihSZHRNZW51T3ZlcmxheUNvbXBvbmVudClcclxuICBwcm90ZWN0ZWQgY2hpbGRyZW4hOiBRdWVyeUxpc3Q8UmR0TWVudU92ZXJsYXlDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb2N1c2FibGVJdGVtJylcclxuICBwcm90ZWN0ZWQgZm9jdXNhYmxlRWxlbWVudHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xyXG5cclxuICBhYnN0cmFjdCBnZXQgYnV0dG9uQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG5cclxuICByZWFkb25seSBleHBhbmRlZENoaWxkID0gc2lnbmFsPFJkdE1lbnVFeHBhbmRlZENoaWxkIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHByb3RlY3RlZCBhdXRvZm9jdXNTdWJtZW51SXRlbTogJ2ZpcnN0JyB8ICdsYXN0JyB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5kKCk7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuYWxsUGFyc2VkSXRlbXMoKTtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnJkdFJvdXRlci5wYXJzZUFic29sdXRlVXJsKCk7XHJcbiAgICBpZiAoIWN1cnJlbnQpIHtcclxuICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyUmVjKGl0ZW1zLCBjdXJyZW50KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgZ2V0IGNsaWVudFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50U2l6ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2xpZW50U2l6ZSE6IFNpemU7XHJcblxyXG4gIGdldCBib2R5TWFyZ2luKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JvZHlNYXJnaW47XHJcbiAgfVxyXG4gIHByaXZhdGUgX2JvZHlNYXJnaW4hOiB7XHJcbiAgICB0b3A6IG51bWJlcjtcclxuICAgIGJvdHRvbTogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgcmlnaHQ6IG51bWJlcjtcclxuICB9O1xyXG5cclxuICBnZXQgYnV0dG9uQ29udGFpbmVyUmVjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXR0b25Db250YWluZXJSZWN0O1xyXG4gIH1cclxuICBwcml2YXRlIF9idXR0b25Db250YWluZXJSZWN0PzogRE9NUmVjdDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGFsbFBhcnNlZEl0ZW1zOiBTaWduYWw8UGFyc2VkUmR0TWVudUl0ZW1bXT47XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoaWxkUm91dGVzTWFwID0gY29tcHV0ZWQoKCkgPT5cclxuICAgIGdldENoaWxkUm91dGVzTWFwKHRoaXMuZmlsdGVyZWRJdGVtcygpKVxyXG4gICk7XHJcblxyXG4gIHJlYWRvbmx5IGtleUFjdGlvbnMgPSB7XHJcbiAgICBbS0JfQ09ERS5BUlJPVy5MRUZUXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNQcmV2SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5SSUdIVF06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmZvY3VzTmV4dEl0ZW0oaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuRE9XTl06IChpbmRleDogbnVtYmVyKSA9PlxyXG4gICAgICB0aGlzLm9wZW5TdWJtZW51KGluZGV4LCAnZmlyc3QnLCBSZHRNZW51RXhwYW5kU291cmNlLlNob3J0Y3V0KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlVQXTogKGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgIHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdsYXN0JywgUmR0TWVudUV4cGFuZFNvdXJjZS5TaG9ydGN1dCksXHJcbiAgICBbS0JfQ09ERS5IT01FXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0oMCksXHJcbiAgICBbS0JfQ09ERS5FTkRdOiAoKSA9PlxyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKS5sZW5ndGggLSAxKSxcclxuICAgIFtLQl9DT0RFLkVOVEVSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgICBbS0JfQ09ERS5TUEFDRUJBUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmF2aWdhdGlvbkVuZCA9IHRvU2lnbmFsKHRoaXMucmR0Um91dGVyLm5hdmlnYXRpb25FbmQkKTtcclxuXHJcbiAgLy8gUmV0dXJucyBhbGwgcm91dGVzIGFzb2NpYXRlZCB3aXRoIGl0ZW0gb3IgaXRzIHN1Yml0ZW1zLlxyXG4gIGdldENoaWxkUm91dGVzKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZFJvdXRlc01hcCgpLmdldChpdGVtKSA/PyBbXTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5saXN0ZW5TaG9ydGN1dHMoKTtcclxuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdGVuV2luZG93UmVzaXplKCk7XHJcbiAgICAgIHRoaXMubWVhc3VyZSgpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWNhbGNDaGlsZHJlbkVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICB9KTtcclxuXHJcbiAgcmVjYWxjdWxhdGVDaGlsZHJlbigpIHtcclxuICAgIGlmICh0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICBjaGlsZC5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyKCksXHJcbiAgICAgICAgICB0aGlzLnByZWZlcnJlZFZlcnRpY2FsRGlyKClcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdW50cmFja2VkKHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICBpZiAoZm9jdXNFeHBhbmRlZCAmJiBleHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGV4cGFuZGVkQ2hpbGQuaXRlbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgY29uc3QgZXhwYW5kZWRDaGlsZCA9IHVudHJhY2tlZCh0aGlzLmV4cGFuZGVkQ2hpbGQpO1xyXG4gICAgY29uc3Qgb3Blbk9uSG92ZXIgPSB1bnRyYWNrZWQodGhpcy5vcGVuT25Ib3Zlcik7XHJcbiAgICBpZiAoXHJcbiAgICAgIChtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pICYmIGV4cGFuZGVkQ2hpbGQ/Lml0ZW0gIT09IGl0ZW0pIHx8XHJcbiAgICAgIChvcGVuT25Ib3ZlciAmJiBleHBhbmRlZENoaWxkPy5zcmMgPT09IFJkdE1lbnVFeHBhbmRTb3VyY2UuSG92ZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQoeyBpdGVtLCBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2UuQ2xpY2sgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpdGVtLmNvbW1hbmQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgaXRlbS5jb21tYW5kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25JdGVtUG9pbnRlckVudGVyKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdW50cmFja2VkKHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICBjb25zdCBvcGVuT25Ib3ZlciA9IHVudHJhY2tlZCh0aGlzLm9wZW5PbkhvdmVyKTtcclxuICAgIGlmIChvcGVuT25Ib3Zlcikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSAmJlxyXG4gICAgICAgIGV4cGFuZGVkQ2hpbGQ/LnNyYyAhPT0gUmR0TWVudUV4cGFuZFNvdXJjZS5DbGlja1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KHsgaXRlbSwgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlLkhvdmVyIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbktleURvd24oaXRlbUluZGV4OiBudW1iZXIsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBoYXNBY3Rpb24gPSBldmVudC5jb2RlIGluIHRoaXMua2V5QWN0aW9ucztcclxuICAgIGNvbnN0IGlzTGV0dGVyID1cclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNBbHBoYWJldENoYXJhY3RlcihldmVudC5rZXkpIHx8XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzTnVtZXJpY0NoYXJhY3RlcihldmVudC5rZXkpO1xyXG5cclxuICAgIGlmIChoYXNBY3Rpb24gfHwgaXNMZXR0ZXIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgdGhpcy5rZXlBY3Rpb25zW2V2ZW50LmNvZGVdKGl0ZW1JbmRleCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzTGV0dGVyKSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKTtcclxuICAgICAgY29uc3QgbmV4dCA9IGZpbmROZXh0SXRlbVdpdGhQcmVmaXgoZmlsdGVyZWRJdGVtcywgaXRlbUluZGV4LCBldmVudC5rZXkpO1xyXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW52b2tlSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAobWVudUl0ZW1IYXNSb3V0ZShpdGVtKSAmJiBpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoaXRlbS5yb3V0ZXJMaW5rKTtcclxuICAgIH1cclxuICAgIHRoaXMub25JdGVtQ2xpY2soaXRlbSk7XHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gJ2ZpcnN0JztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmaWx0ZXJSZWMoXHJcbiAgICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXSxcclxuICAgIGN1cnJlbnQ6IHsgcm91dGU6IFJkdFJvdXRlOyBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfVxyXG4gICk6IFBhcnNlZFJkdE1lbnVJdGVtW10ge1xyXG4gICAgbGV0IGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50LnJvdXRlO1xyXG4gICAgY29uc3QgY3VycmVudFBhcmFtcyA9IGN1cnJlbnQucGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmICghaXRlbS5yZXF1aXJlZFBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gaXRlbS5yZXF1aXJlZFBhcmVudDtcclxuICAgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnQuYWJzb2x1dGVQYXRoICE9PSByZXF1aXJlZC5hYnNvbHV0ZVBhdGgpIHtcclxuICAgICAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC5wYXJlbnQhO1xyXG4gICAgICAgIGlmICghY3VycmVudFBhcmVudCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgcmVxdWlyZWRQYXJlbnQ6IFJkdFJvdXRlIHwgbnVsbCA9IHJlcXVpcmVkO1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmVkUGFyZW50LmFic29sdXRlUGF0aDtcclxuICAgICAgICBpZiAocGF0aCBpbiBjdXJyZW50UGFyYW1zKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByZXF1aXJlZFBhcmVudC5zdGF0aWNQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJhbXNbcGF0aF1ba2V5XSAhPT0gcmVxdWlyZWRQYXJlbnQuc3RhdGljUGFyYW1zW2tleV0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVxdWlyZWRQYXJlbnQgPSByZXF1aXJlZFBhcmVudC5wYXJlbnQ7XHJcbiAgICAgIH0gd2hpbGUgKHJlcXVpcmVkUGFyZW50KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZmlsdGVyZWQubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICBpdGVtczogdGhpcy5maWx0ZXJSZWMoaXRlbS5pdGVtcywgY3VycmVudCksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW52b2tlSXRlbUNsaWNrQnlJbmRleChpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHVudHJhY2tlZCh0aGlzLmZpbHRlcmVkSXRlbXMpO1xyXG4gICAgY29uc3QgaXRlbSA9IGZpbHRlcmVkSXRlbXNbaXRlbUluZGV4XTtcclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmludm9rZUl0ZW1DbGljayhpdGVtKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvcGVuU3VibWVudShcclxuICAgIGl0ZW1JbmRleDogbnVtYmVyLFxyXG4gICAgdmlzaWJsZUZvY3VzOiAnZmlyc3QnIHwgJ2xhc3QnLFxyXG4gICAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdW50cmFja2VkKHRoaXMuZmlsdGVyZWRJdGVtcyk7XHJcbiAgICBpZiAoXHJcbiAgICAgIGl0ZW1JbmRleCA8IGZpbHRlcmVkSXRlbXMubGVuZ3RoICYmXHJcbiAgICAgIG1lbnVJdGVtSGFzQ2hpbGRyZW4oZmlsdGVyZWRJdGVtc1tpdGVtSW5kZXhdKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBmaWx0ZXJlZEl0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSB2aXNpYmxlRm9jdXM7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQoeyBpdGVtLCBzcmMgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNJdGVtKGl0ZW06IG51bWJlciB8IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdW50cmFja2VkKHRoaXMuZmlsdGVyZWRJdGVtcyk7XHJcbiAgICBsZXQgaXRlbUluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xyXG4gICAgICBpdGVtSW5kZXggPSBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbUluZGV4ID0gZmlsdGVyZWRJdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmJsdXJBbGxGb2N1c2FibGUoKTtcclxuICAgICAgdGhpcy5mb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZvY3VzTmV4dEl0ZW0oaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKTtcclxuICAgIGNvbnN0IG5leHQgPSAoaXRlbUluZGV4ICsgMSkgJSBmaWx0ZXJlZEl0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZvY3VzUHJldkl0ZW0oaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKTtcclxuICAgIGNvbnN0IHByZXYgPSAoaXRlbUluZGV4IC0gMSArIGZpbHRlcmVkSXRlbXMubGVuZ3RoKSAlIGZpbHRlcmVkSXRlbXMubGVuZ3RoO1xyXG4gICAgdGhpcy5mb2N1c0l0ZW0ocHJldik7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYmx1ckFsbEZvY3VzYWJsZSgpIHtcclxuICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNGb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGVsUmVmID0gdGhpcy5mb2N1c2FibGVFbGVtZW50cy5nZXQoaXRlbUluZGV4KTtcclxuICAgIGlmIChlbFJlZikge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpO1xyXG4gICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25Qb2ludGVyTW92ZShldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdW50cmFja2VkKHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICBjb25zdCBvcGVuT25Ib3ZlciA9IHVudHJhY2tlZCh0aGlzLm9wZW5PbkhvdmVyKTtcclxuICAgIGlmIChvcGVuT25Ib3ZlciAmJiBleHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIGNvbnN0IGhpdGJveGVzID0gdGhpcy5nZXRIaXRib3hlcygpO1xyXG4gICAgICBjb25zdCBpc0luc2lkZSA9IGhpdGJveGVzLnNvbWUoKGhpdGJveCkgPT5cclxuICAgICAgICB0aGlzLmlzUG9pbnRlckluc2lkZUhpdGJveChoaXRib3gucmVjdCwgZXZlbnQpXHJcbiAgICAgICk7XHJcbiAgICAgIGZvciAobGV0IGkgPSBoaXRib3hlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGNvbnN0IGhpdGJveCA9IGhpdGJveGVzW2ldO1xyXG4gICAgICAgIGlmICghaGl0Ym94LmZpeGVkICYmICFpc0luc2lkZSkge1xyXG4gICAgICAgICAgaGl0Ym94LmNsb3NlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENsb3NlcyBtZW51IGlmIHVzZXIgbmF2aWdhdGVzIG91dHNpZGUgaXQgdXNpbmcgVGFiLlxyXG4gIHByb3RlY3RlZCBjaGVja0FjdGl2ZUVsZW1lbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgIGNvbnN0IGNsb3NlT25Gb2N1c091dCA9IHVudHJhY2tlZCh0aGlzLmNsb3NlT25Gb2N1c091dCk7XHJcbiAgICBpZiAoY2xvc2VPbkZvY3VzT3V0ICYmICF0aGlzLm9wZW5PbkhvdmVyKSB7XHJcbiAgICAgIGNvbnN0IHRoaXNFbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8ICF0aGlzRWwuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgZWxSZWYgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoIWVsUmVmLmNvbnRhaW5zKHRhcmdldCkpIHtcclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWVhc3VyZSgpIHtcclxuICAgIHRoaXMubWVhc3VyZUJ1dHRvbkNvbnRhaW5lcigpO1xyXG4gICAgdGhpcy5tZWFzdXJlQ2xpZW50U2l6ZSgpO1xyXG4gICAgdGhpcy5yZWFkTWFyZ2luKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVhZE1hcmdpbigpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCB0b3BWYWwgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXHJcbiAgICAgIFJEVF9NRU5VX01BUkdJTl9UT1BfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGJvdHRvbVZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX0JPVFRPTV9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgY29uc3QgbGVmdFZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX0xFRlRfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJpZ2h0VmFsID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxyXG4gICAgICBSRFRfTUVOVV9NQVJHSU5fUklHSFRfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIHRoaXMuX2JvZHlNYXJnaW4gPSB7XHJcbiAgICAgIHRvcDogcGFyc2VJbnQodG9wVmFsKSB8fCAwLFxyXG4gICAgICBib3R0b206IHBhcnNlSW50KGJvdHRvbVZhbCkgfHwgMCxcclxuICAgICAgbGVmdDogcGFyc2VJbnQobGVmdFZhbCkgfHwgMCxcclxuICAgICAgcmlnaHQ6IHBhcnNlSW50KHJpZ2h0VmFsKSB8fCAwLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtZWFzdXJlQ2xpZW50U2l6ZSgpIHtcclxuICAgIHRoaXMuX2NsaWVudFNpemUgPSB7XHJcbiAgICAgIHdpZHRoOiB0aGlzLmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWVhc3VyZUJ1dHRvbkNvbnRhaW5lcigpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5idXR0b25Db250YWluZXI7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgdGhpcy5fYnV0dG9uQ29udGFpbmVyUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYnV0dG9uQ29udGFpbmVyUmVjdCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBsaXN0ZW5XaW5kb3dSZXNpemUoKSB7XHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGhyb3R0bGVUaW1lKDAsIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCB7IHRyYWlsaW5nOiB0cnVlIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlKCk7XHJcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblNob3J0Y3V0cygpIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMkID0gdG9PYnNlcnZhYmxlKHRoaXMuZmlsdGVyZWRJdGVtcyk7XHJcbiAgICBjb25zdCBpdGVtc1dpdGhTaG9ydGN1dHMkID0gZmlsdGVyZWRJdGVtcyQucGlwZShtYXAoZ2V0TWVudUl0ZW1zU2hvcnRjdXRzKSk7XHJcbiAgICBjb25zdCBzaG9ydGN1dHMkID0gaXRlbXNXaXRoU2hvcnRjdXRzJC5waXBlKFxyXG4gICAgICBtYXAoKGl0ZW1zKSA9PiBpdGVtcy5tYXAoKGl0KSA9PiBpdC5zaG9ydGN1dCkpXHJcbiAgICApO1xyXG4gICAgY29uc3QgbWFwJCA9IGl0ZW1zV2l0aFNob3J0Y3V0cyQucGlwZShcclxuICAgICAgbWFwKChpdGVtcykgPT4gdGhpcy5nZXRTaG9ydGN1dE1hcChpdGVtcykpXHJcbiAgICApO1xyXG5cclxuICAgIHNob3J0Y3V0cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChzaG9ydGN1dHMpID0+IHRoaXMuc2hvcnRjdXRTZXJ2aWNlLmxpc3RlbihzaG9ydGN1dHMpKSxcclxuICAgICAgICB3aXRoTGF0ZXN0RnJvbShtYXAkKSxcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKFtldnQsIG1hcF0pID0+IHRoaXMub25TaG9ydGN1dChldnQuc2hvcnRjdXQsIG1hcCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldFNob3J0Y3V0TWFwKFxyXG4gICAgaXRlbXNXaXRoU2hvcnRjdXRzOiBQYXJzZWRSZHRNZW51SXRlbVdpdGhTaG9ydGN1dFtdXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzaG9ydGN1dE1hcDogUmVjb3JkPHN0cmluZywgUGFyc2VkUmR0TWVudUl0ZW1bXT4gPSB7fTtcclxuICAgIGl0ZW1zV2l0aFNob3J0Y3V0cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIHNob3J0Y3V0TWFwW2l0ZW0uc2hvcnRjdXQuaG90a2V5c1ZhbHVlXSA9IGl0ZW0ucGF0aDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNob3J0Y3V0TWFwO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uU2hvcnRjdXQoXHJcbiAgICBzaG9ydGN1dDogUmR0U2hvcnRjdXQsXHJcbiAgICBtYXA6IFJlY29yZDxzdHJpbmcsIFBhcnNlZFJkdE1lbnVJdGVtW10+XHJcbiAgKSB7XHJcbiAgICBjb25zdCBwYXRoID0gbWFwW3Nob3J0Y3V0LmhvdGtleXNWYWx1ZV07XHJcbiAgICBpZiAoIXBhdGgpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBNZW51IHNob3J0Y3V0ICR7c2hvcnRjdXQuaG90a2V5c1ZhbHVlfSB3YXMgZGV0ZWN0ZWQsIGJ1dCB0aGVyZSBpcyBubyBwYXRoIGFzc29jaWF0ZWQgd2l0aCBpdC5gLFxyXG4gICAgICAgIG1hcFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGFzdCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcclxuICAgIGNvbnN0IGhhc1JvdXRlID0gbWVudUl0ZW1IYXNSb3V0ZShsYXN0KTtcclxuICAgIGNvbnN0IGhhc0NvbW1hbmQgPSB0eXBlb2YgbGFzdC5jb21tYW5kID09PSAnZnVuY3Rpb24nO1xyXG4gICAgaWYgKGhhc1JvdXRlIHx8IGhhc0NvbW1hbmQpIHtcclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKGZhbHNlKTtcclxuICAgICAgaWYgKGhhc0NvbW1hbmQpIHtcclxuICAgICAgICBsYXN0LmNvbW1hbmQhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhhc1JvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUobGFzdC5yb3V0ZXJMaW5rISk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVJdGVtUmVjdXJzaXZlbHkocGF0aCwgUmR0TWVudUV4cGFuZFNvdXJjZS5TaG9ydGN1dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWN0aXZhdGVJdGVtUmVjdXJzaXZlbHkoXHJcbiAgICBwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdLFxyXG4gICAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzaG9ydGN1dE1vZGUgPSB1bnRyYWNrZWQodGhpcy5zaG9ydGN1dE1vZGUpO1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBbLi4ucGF0aF07XHJcblxyXG4gICAgaWYgKHNob3J0Y3V0TW9kZSA9PT0gUmR0TWVudVNob3J0Y3V0TW9kZS5PUEVOX1NVQk1FTlUpIHtcclxuICAgICAgY29uc3QgbGFzdCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdO1xyXG4gICAgICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihsYXN0KSAmJiBsYXN0Lml0ZW1zWzBdKSB7XHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChsYXN0Lml0ZW1zWzBdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRoaXNJdGVtID0gY2hpbGRyZW4uc2hpZnQoKSE7XHJcblxyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldCh7IGl0ZW06IHRoaXNJdGVtLCBzcmMgfSk7XHJcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLmNoaWxkcmVuLmZpbmQoXHJcbiAgICAgICAgKGNoaWxkKSA9PiB1bnRyYWNrZWQoY2hpbGQuaXRlbSkgPT09IHRoaXNJdGVtXHJcbiAgICAgICk7XHJcbiAgICAgIG92ZXJsYXkhLmZvY3VzSXRlbVJlY3Vyc2l2ZWx5KGNoaWxkcmVuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzUG9pbnRlckluc2lkZUhpdGJveChoaXRib3g6IERPTVJlY3QsIGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGNvbnN0IHJlY3QgPSBoaXRib3g7XHJcbiAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WDtcclxuICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgY29uc3QgbWFyZ2luID0gdW50cmFja2VkKHRoaXMuaGl0Ym94TWFyZ2luKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB4ID49IHJlY3QubGVmdCAtIG1hcmdpbiAmJlxyXG4gICAgICB4IDw9IHJlY3QucmlnaHQgKyBtYXJnaW4gJiZcclxuICAgICAgeSA+PSByZWN0LnRvcCAtIG1hcmdpbiAmJlxyXG4gICAgICB5IDw9IHJlY3QuYm90dG9tICsgbWFyZ2luXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGl0Ym94ZXMoKTogeyByZWN0OiBET01SZWN0OyBmaXhlZDogYm9vbGVhbjsgY2xvc2U6ICgpID0+IHZvaWQgfVtdIHtcclxuICAgIGNvbnN0IGJveGVzID0gdGhpcy5nZXRPcGVuTWVudUJvdW5kaW5nQm94ZXMoKTtcclxuICAgIGNvbnN0IGJ1dHRvbkNvbnRhaW5lclJlY3QgPSB0aGlzLmJ1dHRvbkNvbnRhaW5lclJlY3Q7XHJcbiAgICBpZiAoYnV0dG9uQ29udGFpbmVyUmVjdCkge1xyXG4gICAgICBib3hlcy5wdXNoKHsgcmVjdDogYnV0dG9uQ29udGFpbmVyUmVjdCwgZml4ZWQ6IHRydWUsIGNsb3NlOiAoKSA9PiB7fSB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBib3hlcztcclxuICB9XHJcblxyXG4gIGdldE9wZW5NZW51Qm91bmRpbmdCb3hlcygpIHtcclxuICAgIGNvbnN0IGJveGVzOiB7IHJlY3Q6IERPTVJlY3Q7IGZpeGVkOiBib29sZWFuOyBjbG9zZTogKCkgPT4gdm9pZCB9W10gPSBbXTtcclxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgob3ZlcmxheSkgPT4ge1xyXG4gICAgICB0aGlzLmdldE9wZW5NZW51Qm91bmRpbmdCb3hlc1JlYyhvdmVybGF5LCBib3hlcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBib3hlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0T3Blbk1lbnVCb3VuZGluZ0JveGVzUmVjKFxyXG4gICAgb3ZlcmxheTogUmR0TWVudU92ZXJsYXlDb21wb25lbnQsXHJcbiAgICBib3hlczogeyByZWN0OiBET01SZWN0OyBmaXhlZDogYm9vbGVhbjsgY2xvc2U6ICgpID0+IHZvaWQgfVtdXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBpZiAob3ZlcmxheS5leHBhbmRlZCgpKSB7XHJcbiAgICAgIGxldCBzb21lQnlDbGljayA9IGZhbHNlO1xyXG4gICAgICBvdmVybGF5LmNoaWxkcmVuLmZvckVhY2goXHJcbiAgICAgICAgKGNoaWxkKSA9PlxyXG4gICAgICAgICAgKHNvbWVCeUNsaWNrIHx8PSB0aGlzLmdldE9wZW5NZW51Qm91bmRpbmdCb3hlc1JlYyhjaGlsZCwgYm94ZXMpKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBmaXhlZCA9XHJcbiAgICAgICAgc29tZUJ5Q2xpY2sgfHwgb3ZlcmxheS5zZWxmRXhwYW5kU3JjID09PSBSZHRNZW51RXhwYW5kU291cmNlLkNsaWNrO1xyXG4gICAgICBib3hlcy5wdXNoKHtcclxuICAgICAgICByZWN0OiBvdmVybGF5LmJveCxcclxuICAgICAgICBmaXhlZDogZml4ZWQsXHJcbiAgICAgICAgY2xvc2U6ICgpID0+IG92ZXJsYXkuY2xvc2VTZWxmKGZhbHNlKSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBmaXhlZDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19","import { ChangeDetectionStrategy, Component, computed, ElementRef, input, numberAttribute, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\nimport { parseMenuItems } from '../private-models';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@ngrdt/router\";\nimport * as i4 from \"@ngrdt/shortcuts\";\nimport * as i5 from \"../menu-overlay/rdt-menu-overlay.component\";\nexport class RdtMenuBarComponent extends RdtMenuBaseComponent {\n buttonContainerRef;\n get buttonContainer() {\n return this.buttonContainerRef?.nativeElement;\n }\n items = input.required();\n allParsedItems = computed(() => parseMenuItems(this.items(), this.injector));\n headerHeight = input(0, { transform: numberAttribute });\n footerHeight = input(0, { transform: numberAttribute });\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuBarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.0\", type: RdtMenuBarComponent, isStandalone: false, selector: \"rdt-menu-bar\", inputs: { items: { classPropertyName: \"items\", publicName: \"items\", isSignal: true, isRequired: true, transformFunction: null }, headerHeight: { classPropertyName: \"headerHeight\", publicName: \"headerHeight\", isSignal: true, isRequired: false, transformFunction: null }, footerHeight: { classPropertyName: \"footerHeight\", publicName: \"footerHeight\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"role\": \"menubar\" } }, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuBarComponent,\n },\n ], viewQueries: [{ propertyName: \"buttonContainerRef\", first: true, predicate: [\"buttonContainer\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"<ul class=\\\"menu-bar-item-container\\\" role=\\\"presentation\\\" #buttonContainer>\\r\\n @for(item of filteredItems(); track item; let i = $index) {\\r\\n <li\\r\\n class=\\\"menu-bar-item\\\"\\r\\n role=\\\"presentation\\\"\\r\\n rdtAnyRouteActive=\\\"menu-bar-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"expand_more\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n -->\\r\\n @if(item.items) {\\r\\n <span class=\\\"menu-bar-item-icon rdt-menu-icon-down\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!--\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if(item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [target]=\\\"item.target!\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if(item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.items) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);font-weight:var(--rdt-menu-bar-item-font-weight);font-size:var(--rdt-menu-bar-item-font-size, inherit);outline:var(--rdt-menu-bar-item-outline)}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i2.RouterLink, selector: \"[routerLink]\", inputs: [\"target\", \"queryParams\", \"fragment\", \"queryParamsHandling\", \"state\", \"info\", \"relativeTo\", \"preserveFragment\", \"skipLocationChange\", \"replaceUrl\", \"routerLink\"] }, { kind: \"directive\", type: i3.RdtAnyRouteActiveDirective, selector: \"[rdtAnyRouteActive]\", inputs: [\"rdtAnyRouteActive\", \"watchedRoutes\", \"anyRouteActiveOptions\", \"ariaCurrentWhenActive\"] }, { kind: \"directive\", type: i4.RdtKeyListenerDirective, selector: \"[rdtKeyListener]\", outputs: [\"rdtKeyListener\"] }, { kind: \"component\", type: i5.RdtMenuOverlayComponent, selector: \"rdt-menu-overlay\", inputs: [\"item\", \"level\", \"preferredHorizontalDir\", \"preferredVerticalDir\", \"expanded\", \"autofocusItem\", \"anchorElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuBarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'rdt-menu-bar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuBarComponent,\n },\n ], standalone: false, host: {\n role: 'menubar',\n }, template: \"<ul class=\\\"menu-bar-item-container\\\" role=\\\"presentation\\\" #buttonContainer>\\r\\n @for(item of filteredItems(); track item; let i = $index) {\\r\\n <li\\r\\n class=\\\"menu-bar-item\\\"\\r\\n role=\\\"presentation\\\"\\r\\n rdtAnyRouteActive=\\\"menu-bar-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"expand_more\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n -->\\r\\n @if(item.items) {\\r\\n <span class=\\\"menu-bar-item-icon rdt-menu-icon-down\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!--\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if(item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [target]=\\\"item.target!\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if(item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.items) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);font-weight:var(--rdt-menu-bar-item-font-weight);font-size:var(--rdt-menu-bar-item-font-size, inherit);outline:var(--rdt-menu-bar-item-outline)}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\\n\"] }]\n }], propDecorators: { buttonContainerRef: [{\n type: ViewChild,\n args: ['buttonContainer', { static: true }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsS0FBSyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7OztBQW1CbkQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjtJQUUzRCxrQkFBa0IsQ0FBMkI7SUFFN0MsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0lBRVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWlCLENBQUM7SUFDeEMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDdEMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQzVDLENBQUM7SUFFTyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7dUdBZHRELG1CQUFtQjsyRkFBbkIsbUJBQW1CLHNnQkFYbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDO1NBQ0Ysc0xDekJILGs1R0FrSEE7OzJGRG5GYSxtQkFBbUI7a0JBakIvQixTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLHFCQUFxQjt5QkFDakM7cUJBQ0YsY0FDVyxLQUFLLFFBQ1g7d0JBQ0osSUFBSSxFQUFFLFNBQVM7cUJBQ2hCOzhCQUlELGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIGlucHV0LFxyXG4gIG51bWJlckF0dHJpYnV0ZSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBwYXJzZU1lbnVJdGVtcyB9IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmR0LW1lbnUtYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBSZHRNZW51QmFzZUNvbXBvbmVudCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFJkdE1lbnVCYXJDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgaG9zdDoge1xyXG4gICAgcm9sZTogJ21lbnViYXInLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51QmFyQ29tcG9uZW50IGV4dGVuZHMgUmR0TWVudUJhc2VDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbkNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYnV0dG9uQ29udGFpbmVyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIGdldCBidXR0b25Db250YWluZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25Db250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBpdGVtcyA9IGlucHV0LnJlcXVpcmVkPFJkdE1lbnVJdGVtW10+KCk7XHJcbiAgcmVhZG9ubHkgYWxsUGFyc2VkSXRlbXMgPSBjb21wdXRlZCgoKSA9PlxyXG4gICAgcGFyc2VNZW51SXRlbXModGhpcy5pdGVtcygpLCB0aGlzLmluamVjdG9yKVxyXG4gICk7XHJcblxyXG4gIHJlYWRvbmx5IGhlYWRlckhlaWdodCA9IGlucHV0KDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XHJcbiAgcmVhZG9ubHkgZm9vdGVySGVpZ2h0ID0gaW5wdXQoMCwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcclxufVxyXG4iLCI8dWwgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRhaW5lclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiAjYnV0dG9uQ29udGFpbmVyPlxyXG4gIEBmb3IoaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zKCk7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XHJcbiAgPGxpXHJcbiAgICBjbGFzcz1cIm1lbnUtYmFyLWl0ZW1cIlxyXG4gICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICByZHRBbnlSb3V0ZUFjdGl2ZT1cIm1lbnUtYmFyLWl0ZW0tcm91dGUtYWN0aXZlXCJcclxuICAgIFt3YXRjaGVkUm91dGVzXT1cImdldENoaWxkUm91dGVzKGl0ZW0pXCJcclxuICAgIChyZHRLZXlMaXN0ZW5lcik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXHJcbiAgICAjYW5jaG9yRWxcclxuICA+XHJcbiAgICBAaWYoIWl0ZW0ucm91dGVyTGluayAmJiAhaXRlbS5leHRlcm5hbExpbmspIHtcclxuICAgIDxidXR0b25cclxuICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICAocG9pbnRlcmVudGVyKT1cIm9uSXRlbVBvaW50ZXJFbnRlcihpdGVtKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5pdGVtcyA/ICdtZW51JyA6IG51bGxcIlxyXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0gPT09IGV4cGFuZGVkQ2hpbGQoKT8uaXRlbVwiXHJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgPlxyXG4gICAgICB7eyBpdGVtLmxhYmVsIH19XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1iYXItaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgQGlmKGl0ZW0uc2hvcnRjdXQpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaXRlbS1zaG9ydGN1dFwiPlxyXG4gICAgICAgICAge3sgaXRlbS5zaG9ydGN1dC5sYWJlbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPCEtLSBUT0RPXHJcbiAgICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zXCJcclxuICAgICAgICAgICAgbmFtZT1cImV4cGFuZF9tb3JlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWljb25cIlxyXG4gICAgICAgICAgICBpbnZlcnRlZFxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1pY29uXCJcclxuICAgICAgICAgICAgaW52ZXJ0ZWRcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgLS0+XHJcbiAgICAgICAgQGlmKGl0ZW0uaXRlbXMpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0taWNvbiByZHQtbWVudS1pY29uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlua0JvZHkgbGV0LWl0ZW0+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWJhci1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICBAaWYoaXRlbS5zaG9ydGN1dCkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8IS0tXHJcbiAgICAgICAgPHJkdC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWljb25cIlxyXG4gICAgICAgICAgaW52ZXJ0ZWRcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgQGlmKGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgPGFcclxuICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxyXG4gICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0IVwiXHJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQm9keTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2E+XHJcbiAgICB9IEBpZihpdGVtLmV4dGVybmFsTGluaykge1xyXG4gICAgPGFcclxuICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICBbaHJlZl09XCJpdGVtLmV4dGVybmFsTGlua1wiXHJcbiAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAvPlxyXG4gICAgPC9hPlxyXG4gICAgfSBAaWYgKGl0ZW0uaXRlbXMpIHtcclxuICAgIDxyZHQtbWVudS1vdmVybGF5XHJcbiAgICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxyXG4gICAgICBbZXhwYW5kZWRdPVwiaXRlbSA9PT0gZXhwYW5kZWRDaGlsZCgpPy5pdGVtXCJcclxuICAgICAgW2F1dG9mb2N1c0l0ZW1dPVwiYXV0b2ZvY3VzU3VibWVudUl0ZW1cIlxyXG4gICAgICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJwcmVmZXJyZWRIb3Jpem9udGFsRGlyKClcIlxyXG4gICAgICBbcHJlZmVycmVkVmVydGljYWxEaXJdPVwicHJlZmVycmVkVmVydGljYWxEaXIoKVwiXHJcbiAgICAgIFtsZXZlbF09XCIwXCJcclxuICAgICAgW2FuY2hvckVsZW1lbnRdPVwiYW5jaG9yRWxcIlxyXG4gICAgLz5cclxuICAgIH1cclxuICA8L2xpPlxyXG4gIH1cclxuPC91bD5cclxuIl19","import { afterNextRender, ChangeDetectionStrategy, Component, computed, effect, inject, input, QueryList, ViewEncapsulation, } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed, toObservable, } from '@angular/core/rxjs-interop';\nimport { RDT_BUTTON_BASE_PROVIDER } from '@ngrdt/button';\nimport { switchMap } from 'rxjs';\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\nimport { parseMenuItems } from '../private-models';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../menu-overlay/rdt-menu-overlay.component\";\nexport class RdtMenuComponent extends RdtMenuBaseComponent {\n buttonClass = inject(RDT_BUTTON_BASE_PROVIDER);\n trigger = input.required();\n dataTestId = input('');\n items = input.required();\n allParsedItems = computed(() => {\n const items = this.items();\n const wrapper = {\n label: '',\n icon: '',\n items: items,\n };\n return parseMenuItems([wrapper], this.injector);\n });\n focusableElements = new QueryList();\n get buttonContainer() {\n return this.anchorElement() ?? undefined;\n }\n get parsedItem() {\n return this.filteredItems()[0];\n }\n get anchorElement() {\n return this.trigger().anchorElement;\n }\n constructor() {\n super();\n afterNextRender(() => {\n this.listenPointerOver();\n this.updateFocusableElements();\n });\n this.subscribeClicks();\n }\n triggerTabIndexEffect = effect(() => {\n const trigger = this.trigger();\n trigger.tabIndex.set(0);\n });\n triggerDataTestIdEffect = effect(() => {\n const trigger = this.trigger();\n const dataTestId = this.dataTestId();\n trigger.dataTestId.set(dataTestId);\n });\n triggerAriaEffect = effect(() => {\n const trigger = this.trigger();\n const expandedChild = this.expandedChild();\n trigger.aria.set({\n role: 'menuitem',\n 'aria-haspopup': 'true',\n 'aria-expanded': expandedChild?.item === this.parsedItem,\n });\n });\n subscribeClicks() {\n toObservable(this.trigger)\n .pipe(switchMap((trigger) => outputToObservable(trigger.click)), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.toggle());\n }\n toggle() {\n this.onItemClick(this.parsedItem);\n }\n listenPointerOver() {\n const target = this.anchorElement();\n const listener = this.renderer.listen(target, 'pointerover', (event) => {\n this.onItemPointerEnter(this.parsedItem);\n this.cd.markForCheck();\n });\n this.destroyRef.onDestroy(() => listener());\n }\n updateFocusableElements() {\n const anchor = this.anchorElement();\n if (anchor) {\n this.focusableElements.reset([{ nativeElement: anchor }]);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.0\", type: RdtMenuComponent, isStandalone: false, selector: \"rdt-menu\", inputs: { trigger: { classPropertyName: \"trigger\", publicName: \"trigger\", isSignal: true, isRequired: true, transformFunction: null }, dataTestId: { classPropertyName: \"dataTestId\", publicName: \"dataTestId\", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: \"items\", publicName: \"items\", isSignal: true, isRequired: true, transformFunction: null } }, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuComponent,\n },\n ], usesInheritance: true, ngImport: i0, template: \"@if (parsedItem) {\\r\\n<rdt-menu-overlay\\r\\n [anchorElement]=\\\"anchorElement()\\\"\\r\\n [item]=\\\"$any(parsedItem)\\\"\\r\\n [expanded]=\\\"expandedChild()?.item === parsedItem\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n/>\\r\\n}\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu{display:block;position:relative}\\n\"], dependencies: [{ kind: \"component\", type: i1.RdtMenuOverlayComponent, selector: \"rdt-menu-overlay\", inputs: [\"item\", \"level\", \"preferredHorizontalDir\", \"preferredVerticalDir\", \"expanded\", \"autofocusItem\", \"anchorElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuComponent, decorators: [{\n type: Component,\n args: [{ selector: 'rdt-menu', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuComponent,\n },\n ], standalone: false, template: \"@if (parsedItem) {\\r\\n<rdt-menu-overlay\\r\\n [anchorElement]=\\\"anchorElement()\\\"\\r\\n [item]=\\\"$any(parsedItem)\\\"\\r\\n [expanded]=\\\"expandedChild()?.item === parsedItem\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n/>\\r\\n}\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu{display:block;position:relative}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9tZW51L3JkdC1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS9yZHQtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsWUFBWSxHQUNiLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLHdCQUF3QixFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBZ0JuRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsb0JBQW9CO0lBQ3JDLFdBQVcsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUV6RCxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBb0IsQ0FBQztJQUM3QyxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFpQixDQUFDO0lBQ3JCLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixNQUFNLE9B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WUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO3VHQXhGVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQiwrYkFSaEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixXQUFXLEVBQUUsZ0JBQWdCO2FBQzlCO1NBQ0YsaURDbENILDhXQVdBOzsyRkQwQmEsZ0JBQWdCO2tCQWQ1QixTQUFTOytCQUNFLFVBQVUsbUJBR0gsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLGtCQUFrQjt5QkFDOUI7cUJBQ0YsY0FDVyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBhZnRlck5leHRSZW5kZXIsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIGluamVjdCxcclxuICBpbnB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgb3V0cHV0VG9PYnNlcnZhYmxlLFxyXG4gIHRha2VVbnRpbERlc3Ryb3llZCxcclxuICB0b09ic2VydmFibGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBSRFRfQlVUVE9OX0JBU0VfUFJPVklERVIsIFJkdEJ1dHRvbkJhc2VJbnQgfSBmcm9tICdAbmdyZHQvYnV0dG9uJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBwYXJzZU1lbnVJdGVtcyB9IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmR0LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3JkdC1tZW51LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBSZHRNZW51QmFzZUNvbXBvbmVudCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFJkdE1lbnVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51Q29tcG9uZW50IGV4dGVuZHMgUmR0TWVudUJhc2VDb21wb25lbnQge1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBidXR0b25DbGFzcyA9IGluamVjdChSRFRfQlVUVE9OX0JBU0VfUFJPVklERVIpO1xyXG5cclxuICByZWFkb25seSB0cmlnZ2VyID0gaW5wdXQucmVxdWlyZWQ8UmR0QnV0dG9uQmFzZUludD4oKTtcclxuICByZWFkb25seSBkYXRhVGVzdElkID0gaW5wdXQoJycpO1xyXG4gIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQucmVxdWlyZWQ8UmR0TWVudUl0ZW1bXT4oKTtcclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgYWxsUGFyc2VkSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMoKTtcclxuICAgIGNvbnN0IHdyYXBwZXI6IFJkdE1lbnVJdGVtID0ge1xyXG4gICAgICBsYWJlbDogJycsXHJcbiAgICAgIGljb246ICcnLFxyXG4gICAgICBpdGVtczogaXRlbXMsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHBhcnNlTWVudUl0ZW1zKFt3cmFwcGVyXSwgdGhpcy5pbmplY3Rvcik7XHJcbiAgfSk7XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZWFkb25seSBmb2N1c2FibGVFbGVtZW50cyA9IG5ldyBRdWVyeUxpc3Q8XHJcbiAgICBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxyXG4gID4oKTtcclxuXHJcbiAgb3ZlcnJpZGUgZ2V0IGJ1dHRvbkNvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5hbmNob3JFbGVtZW50KCkgPz8gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhcnNlZEl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZEl0ZW1zKClbMF07XHJcbiAgfVxyXG5cclxuICBnZXQgYW5jaG9yRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRyaWdnZXIoKS5hbmNob3JFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcclxuICAgICAgdGhpcy5saXN0ZW5Qb2ludGVyT3ZlcigpO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvY3VzYWJsZUVsZW1lbnRzKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3Vic2NyaWJlQ2xpY2tzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHRyaWdnZXJUYWJJbmRleEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy50cmlnZ2VyKCk7XHJcbiAgICB0cmlnZ2VyLnRhYkluZGV4LnNldCgwKTtcclxuICB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHRyaWdnZXJEYXRhVGVzdElkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXIoKTtcclxuICAgIGNvbnN0IGRhdGFUZXN0SWQgPSB0aGlzLmRhdGFUZXN0SWQoKTtcclxuICAgIHRyaWdnZXIuZGF0YVRlc3RJZC5zZXQoZGF0YVRlc3RJZCk7XHJcbiAgfSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0cmlnZ2VyQXJpYUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy50cmlnZ2VyKCk7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdGhpcy5leHBhbmRlZENoaWxkKCk7XHJcbiAgICB0cmlnZ2VyLmFyaWEuc2V0KHtcclxuICAgICAgcm9sZTogJ21lbnVpdGVtJyxcclxuICAgICAgJ2FyaWEtaGFzcG9wdXAnOiAndHJ1ZScsXHJcbiAgICAgICdhcmlhLWV4cGFuZGVkJzogZXhwYW5kZWRDaGlsZD8uaXRlbSA9PT0gdGhpcy5wYXJzZWRJdGVtLFxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlQ2xpY2tzKCkge1xyXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMudHJpZ2dlcilcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCh0cmlnZ2VyKSA9PiBvdXRwdXRUb09ic2VydmFibGUodHJpZ2dlci5jbGljaykpLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnRvZ2dsZSgpKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZSgpIHtcclxuICAgIHRoaXMub25JdGVtQ2xpY2sodGhpcy5wYXJzZWRJdGVtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuUG9pbnRlck92ZXIoKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmFuY2hvckVsZW1lbnQoKTtcclxuICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGFyZ2V0LCAncG9pbnRlcm92ZXInLCAoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5vbkl0ZW1Qb2ludGVyRW50ZXIodGhpcy5wYXJzZWRJdGVtKTtcclxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gbGlzdGVuZXIoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvY3VzYWJsZUVsZW1lbnRzKCkge1xyXG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5hbmNob3JFbGVtZW50KCk7XHJcbiAgICBpZiAoYW5jaG9yKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMucmVzZXQoW3sgbmF0aXZlRWxlbWVudDogYW5jaG9yIH1dKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiQGlmIChwYXJzZWRJdGVtKSB7XHJcbjxyZHQtbWVudS1vdmVybGF5XHJcbiAgW2FuY2hvckVsZW1lbnRdPVwiYW5jaG9yRWxlbWVudCgpXCJcclxuICBbaXRlbV09XCIkYW55KHBhcnNlZEl0ZW0pXCJcclxuICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRDaGlsZCgpPy5pdGVtID09PSBwYXJzZWRJdGVtXCJcclxuICBbYXV0b2ZvY3VzSXRlbV09XCJhdXRvZm9jdXNTdWJtZW51SXRlbVwiXHJcbiAgW3ByZWZlcnJlZEhvcml6b250YWxEaXJdPVwicHJlZmVycmVkSG9yaXpvbnRhbERpcigpXCJcclxuICBbcHJlZmVycmVkVmVydGljYWxEaXJdPVwicHJlZmVycmVkVmVydGljYWxEaXIoKVwiXHJcbiAgW2xldmVsXT1cIjBcIlxyXG4vPlxyXG59XHJcbiJdfQ==","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RdtAnyRouteActiveDirective } from '@ngrdt/router';\nimport { RdtKeyListenerDirective } from '@ngrdt/shortcuts';\nimport { RdtMenuBarComponent } from './menu-bar/rdt-menu-bar.component';\nimport { RdtMenuOverlayComponent } from './menu-overlay/rdt-menu-overlay.component';\nimport { RdtMenuComponent } from './menu/rdt-menu.component';\nimport * as i0 from \"@angular/core\";\nexport class RdtMenuModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuModule, declarations: [RdtMenuOverlayComponent,\n RdtMenuComponent,\n RdtMenuBarComponent], imports: [CommonModule,\n RouterModule,\n RdtAnyRouteActiveDirective,\n RdtKeyListenerDirective], exports: [RdtMenuComponent, RdtMenuBarComponent] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuModule, imports: [CommonModule,\n RouterModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtMenuModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n RouterModule,\n RdtAnyRouteActiveDirective,\n RdtKeyListenerDirective,\n ],\n declarations: [\n RdtMenuOverlayComponent,\n RdtMenuComponent,\n RdtMenuBarComponent,\n ],\n exports: [RdtMenuComponent, RdtMenuBarComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9yZHQtbWVudS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFnQjdELE1BQU0sT0FBTyxhQUFhO3VHQUFiLGFBQWE7d0dBQWIsYUFBYSxpQkFOdEIsdUJBQXVCO1lBQ3ZCLGdCQUFnQjtZQUNoQixtQkFBbUIsYUFSbkIsWUFBWTtZQUNaLFlBQVk7WUFDWiwwQkFBMEI7WUFDMUIsdUJBQXVCLGFBT2YsZ0JBQWdCLEVBQUUsbUJBQW1CO3dHQUVwQyxhQUFhLFlBWnRCLFlBQVk7WUFDWixZQUFZOzsyRkFXSCxhQUFhO2tCQWR6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osMEJBQTBCO3dCQUMxQix1QkFBdUI7cUJBQ3hCO29CQUNELFlBQVksRUFBRTt3QkFDWix1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQztpQkFDakQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRBbnlSb3V0ZUFjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQgeyBSZHRNZW51QmFyQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWJhci9yZHQtbWVudS1iYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudU92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJkdE1lbnVDb21wb25lbnQgfSBmcm9tICcuL21lbnUvcmR0LW1lbnUuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLFxyXG4gICAgUmR0QW55Um91dGVBY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSxcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUmR0TWVudU92ZXJsYXlDb21wb25lbnQsXHJcbiAgICBSZHRNZW51Q29tcG9uZW50LFxyXG4gICAgUmR0TWVudUJhckNvbXBvbmVudCxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtSZHRNZW51Q29tcG9uZW50LCBSZHRNZW51QmFyQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVNb2R1bGUge31cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyZHQtbWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9uZ3JkdC1tZW51LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i5.RdtMenuOverlayComponent","i1.RdtMenuOverlayComponent"],"mappings":"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"}
|