{"remainingRequest":"/data/node_modules/babel-loader/lib/index.js!/data/node_modules/ts-loader/index.js!/data/node_modules/tslint-loader/index.js??ref--4-0!/data/src/dao/AlarmDAO.ts","dependencies":[{"path":"/data/src/dao/AlarmDAO.ts","mtime":1553611371628},{"path":"/data/node_modules/typescript-logging/dist/commonjs/typescript-logging.d.ts","mtime":1553611387808},{"path":"/data/node_modules/typescript-logging/dist/commonjs/control/LogGroupControl.d.ts","mtime":1553611387932},{"path":"/data/node_modules/typescript-logging/dist/commonjs/control/CategoryServiceControl.d.ts","mtime":1553611387932},{"path":"/data/node_modules/typescript-logging/dist/commonjs/extension/MessagesToExtensionJSON.d.ts","mtime":1553611387932},{"path":"/data/node_modules/typescript-logging/dist/commonjs/extension/MessagesFromExtensionJSON.d.ts","mtime":1553611387932},{"path":"/data/node_modules/typescript-logging/dist/commonjs/extension/ExtensionMessageJSON.d.ts","mtime":1553611387932},{"path":"/data/node_modules/typescript-logging/dist/commonjs/extension/ExtensionHelper.d.ts","mtime":1553611387932},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/category/AbstractCategoryLogger.d.ts","mtime":1553611388000},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/LoggerOptions.d.ts","mtime":1553611387932},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/category/CategoryLogger.d.ts","mtime":1553611388000},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/category/CategoryService.d.ts","mtime":1553611388000},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/category/CategoryConsoleLoggerImpl.d.ts","mtime":1553611388000},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/category/CategoryDelegateLoggerImpl.d.ts","mtime":1553611388000},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/category/CategoryMessageBufferImpl.d.ts","mtime":1553611388000},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/standard/Logger.d.ts","mtime":1553611388000},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/standard/LoggerFactory.d.ts","mtime":1553611388004},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/standard/LoggerFactoryService.d.ts","mtime":1553611388004},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/standard/LoggerFactoryRuntimeSettings.d.ts","mtime":1553611388004},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/standard/AbstractLogger.d.ts","mtime":1553611388000},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/standard/ConsoleLoggerImpl.d.ts","mtime":1553611388000},{"path":"/data/node_modules/typescript-logging/dist/commonjs/log/standard/MessageBufferLoggerImpl.d.ts","mtime":1553611388004},{"path":"/data/node_modules/typescript-logging/dist/commonjs/utils/DataStructures.d.ts","mtime":1553611387936},{"path":"/data/node_modules/typescript-logging/dist/commonjs/utils/JSONHelper.d.ts","mtime":1553611387936},{"path":"/data/node_modules/typescript-logging/dist/commonjs/utils/MessageUtils.d.ts","mtime":1553611387936},{"path":"/data/node_modules/moment/moment.d.ts","mtime":1553611386704},{"path":"/data/node_modules/axios/index.d.ts","mtime":1553611386356},{"path":"/data/typings/index.d.ts","mtime":1553611371628},{"path":"/data/node_modules/@types/fs-extra/index.d.ts","mtime":1553611386380},{"path":"/data/node_modules/@types/node/index.d.ts","mtime":1553611386380},{"path":"/data/node_modules/@types/node/inspector.d.ts","mtime":1553611386380},{"path":"/data/node_modules/@types/glob/index.d.ts","mtime":1553611386380},{"path":"/data/node_modules/@types/minimatch/index.d.ts","mtime":1553611386380},{"path":"/data/node_modules/@types/glob/node_modules/@types/minimatch/index.d.ts","mtime":1553611386368},{"path":"/data/node_modules/@types/handlebars/index.d.ts","mtime":1553611386368},{"path":"/data/node_modules/@types/highlight.js/index.d.ts","mtime":1553611386368},{"path":"/data/node_modules/@types/jest/index.d.ts","mtime":1553611386368},{"path":"/data/node_modules/@types/jquery/index.d.ts","mtime":1553611386368},{"path":"/data/node_modules/@types/lodash/index.d.ts","mtime":1553611386320},{"path":"/data/node_modules/@types/lodash/common/common.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/array.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/collection.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/date.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/function.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/lang.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/math.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/number.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/object.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/seq.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/string.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/lodash/common/util.d.ts","mtime":1553611386984},{"path":"/data/node_modules/@types/marked/index.d.ts","mtime":1553611386368},{"path":"/data/node_modules/@types/shelljs/index.d.ts","mtime":1553611386380},{"path":"/data/node_modules/@types/urijs/index.d.ts","mtime":1553611386380},{"path":"/data/node_modules/typescript/lib/lib.es2015.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es2015.core.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es2015.collection.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es2015.generator.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es2015.promise.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es2015.iterable.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es2015.symbol.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es2015.proxy.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es2015.reflect.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","mtime":1553611387384},{"path":"/data/node_modules/typescript/lib/lib.es5.d.ts","mtime":1553611387388},{"path":"/data/node_modules/typescript/lib/lib.dom.d.ts","mtime":1553611387384},{"path":"/data/src/dao/AbstractDAO.ts","mtime":1553611371628},{"path":"/data/src/dao/EventDAO.ts","mtime":1553611371628},{"path":"/data/src/api/Filter.ts","mtime":1553611371624},{"path":"/data/src/api/IHasHTTP.ts","mtime":1553611371624},{"path":"/data/src/internal/IHash.ts","mtime":1553611371628},{"path":"/data/src/api/IOnmsHTTP.ts","mtime":1553611371624},{"path":"/data/src/api/OnmsError.ts","mtime":1553611371624},{"path":"/data/src/api/OnmsHTTPOptions.ts","mtime":1553611371624},{"path":"/data/src/api/OnmsResult.ts","mtime":1553611371624},{"path":"/data/src/api/SearchProperty.ts","mtime":1553611371628},{"path":"/data/src/model/OnmsAlarm.ts","mtime":1553611371628},{"path":"/data/src/model/OnmsAlarmSummary.ts","mtime":1553611371628},{"path":"/data/src/model/OnmsAlarmType.ts","mtime":1553611371628},{"path":"/data/src/model/OnmsParm.ts","mtime":1553611371628},{"path":"/data/src/model/OnmsServiceType.ts","mtime":1553611371628},{"path":"/data/src/model/OnmsSeverity.ts","mtime":1553611371628},{"path":"/data/src/model/OnmsTroubleTicketState.ts","mtime":1553611371628},{"path":"/data/src/model/OnmsMemo.ts","mtime":1553611371628},{"path":"/data/src/api/Log.ts","mtime":1553611371624},{"path":"/data/node_modules/typescript-logging/dist/commonjs/typescript-logging.d.ts","mtime":1553611387808},{"path":"/data/.babelrc","mtime":1553611371556},{"path":"/data/node_modules/cache-loader/dist/cjs.js","mtime":1553611387012},{"path":"/data/node_modules/babel-loader/lib/index.js","mtime":1553611386992},{"path":"/data/node_modules/ts-loader/index.js","mtime":1553611386824},{"path":"/data/node_modules/tslint-loader/index.js","mtime":1553611386824}],"contextDependencies":[],"result":["\"use strict\";\n\nvar _regenerator = require(\"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) {\n            try {\n                step(generator.next(value));\n            } catch (e) {\n                reject(e);\n            }\n        }\n        function rejected(value) {\n            try {\n                step(generator[\"throw\"](value));\n            } catch (e) {\n                reject(e);\n            }\n        }\n        function step(result) {\n            result.done ? resolve(result.value) : new P(function (resolve) {\n                resolve(result.value);\n            }).then(fulfilled, rejected);\n        }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar AbstractDAO_1 = require(\"./AbstractDAO\");\nvar EventDAO_1 = require(\"./EventDAO\");\nvar OnmsError_1 = require(\"../api/OnmsError\");\nvar OnmsHTTPOptions_1 = require(\"../api/OnmsHTTPOptions\");\nvar OnmsAlarm_1 = require(\"../model/OnmsAlarm\");\nvar OnmsAlarmType_1 = require(\"../model/OnmsAlarmType\");\nvar OnmsParm_1 = require(\"../model/OnmsParm\");\nvar OnmsServiceType_1 = require(\"../model/OnmsServiceType\");\nvar OnmsSeverity_1 = require(\"../model/OnmsSeverity\");\nvar OnmsTroubleTicketState_1 = require(\"../model/OnmsTroubleTicketState\");\nvar OnmsMemo_1 = require(\"../model/OnmsMemo\");\nvar Log_1 = require(\"../api/Log\");\nvar typescript_logging_1 = require(\"typescript-logging\");\n/** @hidden */\nvar cat = new typescript_logging_1.Category('alarms', Log_1.catDao);\n/**\n * Data access for [[OnmsAlarm]] objects.\n * @module AlarmDAO\n */\n\nvar AlarmDAO = function (_AbstractDAO_1$Abstra) {\n    _inherits(AlarmDAO, _AbstractDAO_1$Abstra);\n\n    function AlarmDAO(impl) {\n        _classCallCheck(this, AlarmDAO);\n\n        var _this = _possibleConstructorReturn(this, (AlarmDAO.__proto__ || Object.getPrototypeOf(AlarmDAO)).call(this, impl));\n\n        _this.eventDao = new EventDAO_1.EventDAO(impl);\n        return _this;\n    }\n    /**\n     * Fetch an alarm.\n     *\n     * @version ReST v1+\n     * @param {number} id - The alarm's ID.\n     * @return An [[OnmsAlarm]].\n     */\n\n\n    _createClass(AlarmDAO, [{\n        key: \"get\",\n        value: function get(id) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n                var _this2 = this;\n\n                return _regenerator2.default.wrap(function _callee$(_context) {\n                    while (1) {\n                        switch (_context.prev = _context.next) {\n                            case 0:\n                                return _context.abrupt(\"return\", this.getOptions().then(function (opts) {\n                                    return _this2.http.get(_this2.pathToAlarmsEndpoint() + '/' + id, opts).then(function (result) {\n                                        return _this2.fromData(result.data);\n                                    });\n                                }));\n\n                            case 1:\n                            case \"end\":\n                                return _context.stop();\n                        }\n                    }\n                }, _callee, this);\n            }));\n        }\n        /**\n         * Find matching alarms.\n         *\n         * @version ReST v1+\n         * @param {Filter} filter - The filter to use when querying.\n         * @return An array of [[OnmsAlarm]] objects.\n         */\n\n    }, {\n        key: \"find\",\n        value: function find(filter) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee2() {\n                var _this3 = this;\n\n                return _regenerator2.default.wrap(function _callee2$(_context2) {\n                    while (1) {\n                        switch (_context2.prev = _context2.next) {\n                            case 0:\n                                return _context2.abrupt(\"return\", this.getOptions(filter).then(function (opts) {\n                                    return _this3.http.get(_this3.pathToAlarmsEndpoint(), opts).then(function (result) {\n                                        var data = _this3.getData(result);\n                                        if (!Array.isArray(data)) {\n                                            if (!data) {\n                                                return [];\n                                            }\n                                            throw new OnmsError_1.OnmsError('Expected an array of alarms but got \"' + (typeof data === \"undefined\" ? \"undefined\" : _typeof(data)) + '\" instead.');\n                                        }\n                                        return data.map(function (alarmData) {\n                                            return _this3.fromData(alarmData);\n                                        });\n                                    });\n                                }));\n\n                            case 1:\n                            case \"end\":\n                                return _context2.stop();\n                        }\n                    }\n                }, _callee2, this);\n            }));\n        }\n        /**\n         * Extracts the data from an HTTP Request result.\n         *\n         * @param result the HTTP Request result.\n         * @returns An array of [[OnmsAlarm]] objects.\n         */\n\n    }, {\n        key: \"getData\",\n        value: function getData(result) {\n            var data = result.data;\n            if (data !== null && this.getCount(data) > 0 && data.alarm) {\n                data = data.alarm;\n            } else {\n                data = [];\n            }\n            if (!Array.isArray(data)) {\n                if (data.id) {\n                    data = [data];\n                } else {\n                    throw new OnmsError_1.OnmsError('Expected an array of alarms but got \"' + (typeof data === \"undefined\" ? \"undefined\" : _typeof(data)) + '\" instead.');\n                }\n            }\n            return data;\n        }\n        /**\n         * Acknowledge an alarm.\n         *\n         * @version ReST v1+\n         * @param {number|OnmsAlarm} id - The [[OnmsAlarm]] or alarm ID.\n         * @param {string=} user - The user to ack the alarm as.\n         *                  (Only administrators have the right to do this.)\n         */\n\n    }, {\n        key: \"acknowledge\",\n        value: function acknowledge(alarm, user) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee3() {\n                var alarmId, parameters;\n                return _regenerator2.default.wrap(function _callee3$(_context3) {\n                    while (1) {\n                        switch (_context3.prev = _context3.next) {\n                            case 0:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                parameters = {};\n\n                                parameters.ack = 'true';\n                                if (user !== undefined) {\n                                    parameters.ackUser = user;\n                                }\n                                return _context3.abrupt(\"return\", this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters));\n\n                            case 5:\n                            case \"end\":\n                                return _context3.stop();\n                        }\n                    }\n                }, _callee3, this);\n            }));\n        }\n        /**\n         * Un-acknowledge an alarm.\n         *\n         * @version ReST v1+\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         */\n\n    }, {\n        key: \"unacknowledge\",\n        value: function unacknowledge(alarm, user) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee4() {\n                var alarmId, parameters;\n                return _regenerator2.default.wrap(function _callee4$(_context4) {\n                    while (1) {\n                        switch (_context4.prev = _context4.next) {\n                            case 0:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                parameters = {};\n\n                                parameters.ack = 'false';\n                                if (user !== undefined) {\n                                    parameters.ackUser = user;\n                                }\n                                return _context4.abrupt(\"return\", this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters));\n\n                            case 5:\n                            case \"end\":\n                                return _context4.stop();\n                        }\n                    }\n                }, _callee4, this);\n            }));\n        }\n        /**\n         * Escalate an alarm.\n         *\n         * @version ReST v1+\n         * @param {number|OnsmAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         */\n\n    }, {\n        key: \"escalate\",\n        value: function escalate(alarm) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee5() {\n                var alarmId, parameters;\n                return _regenerator2.default.wrap(function _callee5$(_context5) {\n                    while (1) {\n                        switch (_context5.prev = _context5.next) {\n                            case 0:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                parameters = {};\n\n                                parameters.escalate = 'true';\n                                return _context5.abrupt(\"return\", this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters));\n\n                            case 4:\n                            case \"end\":\n                                return _context5.stop();\n                        }\n                    }\n                }, _callee5, this);\n            }));\n        }\n        /**\n         * Clear an alarm.\n         *\n         * @version ReST v1+\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         */\n\n    }, {\n        key: \"clear\",\n        value: function clear(alarm) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee6() {\n                var alarmId, parameters;\n                return _regenerator2.default.wrap(function _callee6$(_context6) {\n                    while (1) {\n                        switch (_context6.prev = _context6.next) {\n                            case 0:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                parameters = {};\n\n                                parameters.clear = 'true';\n                                return _context6.abrupt(\"return\", this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters));\n\n                            case 4:\n                            case \"end\":\n                                return _context6.stop();\n                        }\n                    }\n                }, _callee6, this);\n            }));\n        }\n        /**\n         * Associate a ticket ID with the alarm.\n         *\n         * @version ReST v1+\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         * @param {string} ticketId - The ticket ID.\n         */\n\n    }, {\n        key: \"setTTicketId\",\n        value: function setTTicketId(alarm, ticketId) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee7() {\n                var alarmId, parameters;\n                return _regenerator2.default.wrap(function _callee7$(_context7) {\n                    while (1) {\n                        switch (_context7.prev = _context7.next) {\n                            case 0:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                parameters = {};\n\n                                parameters.ticketId = ticketId;\n                                return _context7.abrupt(\"return\", this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters));\n\n                            case 4:\n                            case \"end\":\n                                return _context7.stop();\n                        }\n                    }\n                }, _callee7, this);\n            }));\n        }\n        /**\n         * Update the state of the ticket associated with the alarm.\n         *\n         * @version ReST v1+\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         * @param {string} state - The ticket state.\n         */\n\n    }, {\n        key: \"setTTicketState\",\n        value: function setTTicketState(alarm, state) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee8() {\n                var alarmId, parameters;\n                return _regenerator2.default.wrap(function _callee8$(_context8) {\n                    while (1) {\n                        switch (_context8.prev = _context8.next) {\n                            case 0:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                parameters = {};\n\n                                parameters.ticketState = state.label;\n                                return _context8.abrupt(\"return\", this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters));\n\n                            case 4:\n                            case \"end\":\n                                return _context8.stop();\n                        }\n                    }\n                }, _callee8, this);\n            }));\n        }\n        /**\n         * Create a trouble ticket for the specified alarm.\n         *\n         * @version ReST v2\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         */\n\n    }, {\n        key: \"createTicket\",\n        value: function createTicket(alarm) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee9() {\n                var _this4 = this;\n\n                var alarmId, options;\n                return _regenerator2.default.wrap(function _callee9$(_context9) {\n                    while (1) {\n                        switch (_context9.prev = _context9.next) {\n                            case 0:\n                                if (!(this.getApiVersion() === 1)) {\n                                    _context9.next = 2;\n                                    break;\n                                }\n\n                                throw new OnmsError_1.OnmsError('Create/Update/Close ticket is only available in OpenNMS ' + 'versions that support the ReSTv2 API.');\n\n                            case 2:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                options = new OnmsHTTPOptions_1.OnmsHTTPOptions();\n\n                                options.headers.accept = 'text/plain';\n                                return _context9.abrupt(\"return\", this.http.post(this.pathToAlarmsEndpoint() + '/' + alarmId + '/ticket/create', options).then(function () {\n                                    Log_1.log.debug('Ticket creation pending.', cat);\n                                }).catch(function (err) {\n                                    if (err.code === 501) {\n                                        Log_1.log.warn('Trouble ticketing is not enabled on ' + _this4.http.server.toString());\n                                    }\n                                    throw err;\n                                }));\n\n                            case 6:\n                            case \"end\":\n                                return _context9.stop();\n                        }\n                    }\n                }, _callee9, this);\n            }));\n        }\n        /**\n         * Notify OpenNMS it should fetch updated ticket state for an alarm from the remote ticketing system.\n         *\n         * @version ReST v2\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         */\n\n    }, {\n        key: \"triggerTicketUpdate\",\n        value: function triggerTicketUpdate(alarm) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee10() {\n                var _this5 = this;\n\n                var alarmId, options;\n                return _regenerator2.default.wrap(function _callee10$(_context10) {\n                    while (1) {\n                        switch (_context10.prev = _context10.next) {\n                            case 0:\n                                if (!(this.getApiVersion() === 1)) {\n                                    _context10.next = 2;\n                                    break;\n                                }\n\n                                throw new OnmsError_1.OnmsError('Create/Update/Close ticket is only available in OpenNMS ' + 'versions that support the ReSTv2 API.');\n\n                            case 2:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                options = new OnmsHTTPOptions_1.OnmsHTTPOptions();\n\n                                options.headers.accept = 'text/plain';\n                                return _context10.abrupt(\"return\", this.http.post(this.pathToAlarmsEndpoint() + '/' + alarmId + '/ticket/update', options).then(function () {\n                                    Log_1.log.debug('Ticket update pending.', cat);\n                                }).catch(function (err) {\n                                    if (err.code === 501) {\n                                        Log_1.log.warn('Trouble ticketing is not enabled on ' + _this5.http.server.toString());\n                                    }\n                                    throw err;\n                                }));\n\n                            case 6:\n                            case \"end\":\n                                return _context10.stop();\n                        }\n                    }\n                }, _callee10, this);\n            }));\n        }\n        /**\n         * Close the ticket associated with the given alarm.\n         *\n         * @version ReST v2\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         */\n\n    }, {\n        key: \"closeTicket\",\n        value: function closeTicket(alarm) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee11() {\n                var _this6 = this;\n\n                var alarmId, options;\n                return _regenerator2.default.wrap(function _callee11$(_context11) {\n                    while (1) {\n                        switch (_context11.prev = _context11.next) {\n                            case 0:\n                                if (!(this.getApiVersion() === 1)) {\n                                    _context11.next = 2;\n                                    break;\n                                }\n\n                                throw new OnmsError_1.OnmsError('Create/Update/Close ticket is only available in OpenNMS ' + 'versions that support the ReSTv2 API.');\n\n                            case 2:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                options = new OnmsHTTPOptions_1.OnmsHTTPOptions();\n\n                                options.headers.accept = 'text/plain';\n                                return _context11.abrupt(\"return\", this.http.post(this.pathToAlarmsEndpoint() + '/' + alarmId + '/ticket/close', options).then(function () {\n                                    Log_1.log.debug('Ticket close pending.', cat);\n                                }).catch(function (err) {\n                                    if (err.code === 501) {\n                                        Log_1.log.warn('Trouble ticketing is not enabled on ' + _this6.http.server.toString());\n                                    }\n                                    throw err;\n                                }));\n\n                            case 6:\n                            case \"end\":\n                                return _context11.stop();\n                        }\n                    }\n                }, _callee11, this);\n            }));\n        }\n        /**\n         * Create or update the sticky memo associated with the alarm.\n         *\n         * @version ReST v2\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         * @param {string} body - The memo body\n         * @param {string=} user - The user to update the memo as.\n         *                  (Only administrators have the right to do this.)\n         */\n\n    }, {\n        key: \"saveStickyMemo\",\n        value: function saveStickyMemo(alarm, body, user) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee12() {\n                return _regenerator2.default.wrap(function _callee12$(_context12) {\n                    while (1) {\n                        switch (_context12.prev = _context12.next) {\n                            case 0:\n                                return _context12.abrupt(\"return\", this.saveMemo('memo', alarm, body, user));\n\n                            case 1:\n                            case \"end\":\n                                return _context12.stop();\n                        }\n                    }\n                }, _callee12, this);\n            }));\n        }\n        /**\n         * Create or update the journal memo associated with the alarm.\n         *\n         * @version ReST v2\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         * @param {string} body - The memo body\n         * @param {string=} user - The user to update the memo as.\n         *                  (Only administrators have the right to do this.)\n         */\n\n    }, {\n        key: \"saveJournalMemo\",\n        value: function saveJournalMemo(alarm, body, user) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee13() {\n                return _regenerator2.default.wrap(function _callee13$(_context13) {\n                    while (1) {\n                        switch (_context13.prev = _context13.next) {\n                            case 0:\n                                return _context13.abrupt(\"return\", this.saveMemo('journal', alarm, body, user));\n\n                            case 1:\n                            case \"end\":\n                                return _context13.stop();\n                        }\n                    }\n                }, _callee13, this);\n            }));\n        }\n        /**\n         * Delete the sticky memo ticket associated with the given alarm.\n         *\n         * @version ReST v2\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         */\n\n    }, {\n        key: \"deleteStickyMemo\",\n        value: function deleteStickyMemo(alarm) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee14() {\n                return _regenerator2.default.wrap(function _callee14$(_context14) {\n                    while (1) {\n                        switch (_context14.prev = _context14.next) {\n                            case 0:\n                                return _context14.abrupt(\"return\", this.deleteMemo('memo', alarm));\n\n                            case 1:\n                            case \"end\":\n                                return _context14.stop();\n                        }\n                    }\n                }, _callee14, this);\n            }));\n        }\n        /**\n         * Delete the journal memo ticket associated with the given alarm.\n         *\n         * @version ReST v2\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         */\n\n    }, {\n        key: \"deleteJournalMemo\",\n        value: function deleteJournalMemo(alarm) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee15() {\n                return _regenerator2.default.wrap(function _callee15$(_context15) {\n                    while (1) {\n                        switch (_context15.prev = _context15.next) {\n                            case 0:\n                                return _context15.abrupt(\"return\", this.deleteMemo('journal', alarm));\n\n                            case 1:\n                            case \"end\":\n                                return _context15.stop();\n                        }\n                    }\n                }, _callee15, this);\n            }));\n        }\n        /**\n         * Generate an alarm object from the given dictionary.\n         * @hidden\n         */\n\n    }, {\n        key: \"fromData\",\n        value: function fromData(data) {\n            var alarm = new OnmsAlarm_1.OnmsAlarm();\n            alarm.id = this.toNumber(data.id);\n            alarm.count = data.count;\n            alarm.ackUser = data.ackUser;\n            alarm.uei = data.uei;\n            alarm.description = data.description;\n            alarm.firstEventTime = this.toDate(data.firstEventTime);\n            alarm.lastEvent = this.eventDao.fromData(data.lastEvent);\n            alarm.location = data.location;\n            alarm.logMessage = data.logMessage;\n            alarm.reductionKey = data.reductionKey;\n            alarm.troubleTicket = data.troubleTicket;\n            alarm.troubleTicketLink = data.troubleTicketLink;\n            alarm.nodeId = this.toNumber(data.nodeId);\n            alarm.nodeLabel = data.nodeLabel;\n            alarm.suppressedBy = data.suppressedBy;\n            alarm.operatorInstructions = data.operatorInstructions;\n            if (data.ackTime) {\n                alarm.ackTime = this.toDate(data.ackTime);\n            }\n            if (data.severity) {\n                alarm.severity = OnmsSeverity_1.Severities[data.severity];\n            }\n            if (data.type) {\n                var type = this.toNumber(data.type);\n                alarm.type = OnmsAlarmType_1.AlarmTypes[type];\n            }\n            if (typeof data.troubleTicketState !== 'undefined') {\n                var troubleTicketKey = Object.keys(OnmsTroubleTicketState_1.TroubleTicketStates).find(function (key) {\n                    return OnmsTroubleTicketState_1.TroubleTicketStates[key].id === data.troubleTicketState;\n                });\n                if (troubleTicketKey) {\n                    alarm.troubleTicketState = OnmsTroubleTicketState_1.TroubleTicketStates[troubleTicketKey];\n                }\n            }\n            if (data.serviceType) {\n                var st = data.serviceType;\n                alarm.service = OnmsServiceType_1.OnmsServiceType.for(st.id, st.name);\n            }\n            if (data.suppressedTime) {\n                alarm.suppressedTime = this.toDate(data.suppressedTime);\n            }\n            if (data.suppressedUntil) {\n                alarm.suppressedUntil = this.toDate(data.suppressedUntil);\n            }\n            if (data.parameters) {\n                var parms = data.parameters;\n                if (parms.parameter) {\n                    parms = parms.parameter;\n                }\n                if (!Array.isArray(parms)) {\n                    parms = [parms];\n                }\n                alarm.parameters = [];\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = parms[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var parm = _step.value;\n\n                        parm = new OnmsParm_1.OnmsParm(parm.name, parm.type, parm.value);\n                        alarm.parameters.push(parm);\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n            }\n            alarm.relatedAlarms = data.relatedAlarms;\n            alarm.managedObjectType = data.managedObjectType;\n            alarm.managedObjectInstance = data.managedObjectInstance;\n            alarm.sticky = this.toMemo(data.stickyMemo);\n            alarm.journal = this.toMemo(data.reductionKeyMemo);\n            alarm.detailsPage = this.getDetailsPage(alarm);\n            alarm.affectedNodeCount = data.affectedNodeCount;\n            return alarm;\n        }\n        /**\n         * Generate a memo from the given dictionary.\n         * @hidden\n         */\n\n    }, {\n        key: \"toMemo\",\n        value: function toMemo(data) {\n            if (!data) {\n                return null;\n            }\n            var memo = new OnmsMemo_1.OnmsMemo();\n            memo.id = data.id;\n            memo.author = data.author;\n            memo.body = data.body;\n            memo.created = this.toDate(data.created);\n            memo.updated = this.toDate(data.updated);\n            return memo;\n        }\n        /**\n         * The path to the alarm search properties endpoint.\n         */\n\n    }, {\n        key: \"searchPropertyPath\",\n        value: function searchPropertyPath() {\n            return this.pathToAlarmsEndpoint() + '/properties';\n        }\n        /**\n         * Given an optional filter, generate an [[OnmsHTTPOptions]] object for DAO calls.\n         * @hidden\n         */\n\n    }, {\n        key: \"getOptions\",\n        value: function getOptions(filter) {\n            var _this7 = this;\n\n            var _super = function _super(name) {\n                return _get(AlarmDAO.prototype.__proto__ || Object.getPrototypeOf(AlarmDAO.prototype), name, _this7);\n            };\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee16() {\n                var _this8 = this;\n\n                return _regenerator2.default.wrap(function _callee16$(_context16) {\n                    while (1) {\n                        switch (_context16.prev = _context16.next) {\n                            case 0:\n                                return _context16.abrupt(\"return\", _super(\"getOptions\").call(this, filter).then(function (options) {\n                                    // always use application/json for v2 calls\n                                    if (_this8.getApiVersion() === 2) {\n                                        options.headers.accept = 'application/json';\n                                    }\n                                    return options;\n                                }));\n\n                            case 1:\n                            case \"end\":\n                                return _context16.stop();\n                        }\n                    }\n                }, _callee16, this);\n            }));\n        }\n        /**\n         * Call a PUT request in the format the alarm ack API expects.\n         * @hidden\n         */\n\n    }, {\n        key: \"put\",\n        value: function put(url) {\n            var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee17() {\n                var _this9 = this;\n\n                return _regenerator2.default.wrap(function _callee17$(_context17) {\n                    while (1) {\n                        switch (_context17.prev = _context17.next) {\n                            case 0:\n                                return _context17.abrupt(\"return\", this.getOptions().then(function (opts) {\n                                    opts.headers['content-type'] = 'application/x-www-form-urlencoded';\n                                    opts.headers.accept = null;\n                                    opts.parameters = parameters;\n                                    return _this9.http.put(url, opts).then(function (result) {\n                                        if (!result.isSuccess) {\n                                            throw result;\n                                        }\n                                        return;\n                                    });\n                                }));\n\n                            case 1:\n                            case \"end\":\n                                return _context17.stop();\n                        }\n                    }\n                }, _callee17, this);\n            }));\n        }\n        /**\n         * Call a DELETE request in the format the alarm ack API expects.\n         * @hidden\n         */\n\n    }, {\n        key: \"httpDelete\",\n        value: function httpDelete(url) {\n            var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee18() {\n                var _this10 = this;\n\n                return _regenerator2.default.wrap(function _callee18$(_context18) {\n                    while (1) {\n                        switch (_context18.prev = _context18.next) {\n                            case 0:\n                                return _context18.abrupt(\"return\", this.getOptions().then(function (opts) {\n                                    opts.headers['content-type'] = 'application/x-www-form-urlencoded';\n                                    opts.headers.accept = null;\n                                    opts.parameters = parameters;\n                                    return _this10.http.httpDelete(url, opts).then(function (result) {\n                                        if (!result.isSuccess) {\n                                            throw result;\n                                        }\n                                        return;\n                                    });\n                                }));\n\n                            case 1:\n                            case \"end\":\n                                return _context18.stop();\n                        }\n                    }\n                }, _callee18, this);\n            }));\n        }\n        /**\n         * Get the path to the alarms endpoint for the appropriate API version.\n         * @hidden\n         */\n\n    }, {\n        key: \"pathToAlarmsEndpoint\",\n        value: function pathToAlarmsEndpoint() {\n            return this.getApiVersion() === 2 ? 'api/v2/alarms' : 'rest/alarms';\n        }\n        /**\n         * Save a journal or sticky memo.\n         * @hidden\n         */\n\n    }, {\n        key: \"saveMemo\",\n        value: function saveMemo(type, alarm, body, user) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee19() {\n                var alarmId, parameters;\n                return _regenerator2.default.wrap(function _callee19$(_context19) {\n                    while (1) {\n                        switch (_context19.prev = _context19.next) {\n                            case 0:\n                                if (!(this.getApiVersion() === 1)) {\n                                    _context19.next = 2;\n                                    break;\n                                }\n\n                                throw new OnmsError_1.OnmsError('Save/Delete memo is only available in OpenNMS ' + 'versions that support the ReSTv2 API.');\n\n                            case 2:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                parameters = {};\n\n                                parameters.body = body;\n                                if (user !== undefined) {\n                                    parameters.user = user;\n                                }\n                                return _context19.abrupt(\"return\", this.put(this.pathToAlarmsEndpoint() + '/' + alarmId + '/' + type, parameters));\n\n                            case 7:\n                            case \"end\":\n                                return _context19.stop();\n                        }\n                    }\n                }, _callee19, this);\n            }));\n        }\n        /**\n         * Delete a journal or sticky memo\n         * @hidden\n         */\n\n    }, {\n        key: \"deleteMemo\",\n        value: function deleteMemo(type, alarm) {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee20() {\n                var alarmId;\n                return _regenerator2.default.wrap(function _callee20$(_context20) {\n                    while (1) {\n                        switch (_context20.prev = _context20.next) {\n                            case 0:\n                                if (!(this.getApiVersion() === 1)) {\n                                    _context20.next = 2;\n                                    break;\n                                }\n\n                                throw new OnmsError_1.OnmsError('Save/Delete memo is only available in OpenNMS ' + 'versions that support the ReSTv2 API.');\n\n                            case 2:\n                                alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n                                return _context20.abrupt(\"return\", this.httpDelete(this.pathToAlarmsEndpoint() + '/' + alarmId + '/' + type));\n\n                            case 4:\n                            case \"end\":\n                                return _context20.stop();\n                        }\n                    }\n                }, _callee20, this);\n            }));\n        }\n        /**\n         * Retrieves the URL to the details page for the given alarm.\n         *\n         * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n         * @returns {URL} URL on the associated OpenNMS server for the alarm details page.\n         */\n\n    }, {\n        key: \"getDetailsPage\",\n        value: function getDetailsPage(alarm) {\n            var alarmId = typeof alarm === 'number' ? alarm : alarm.id;\n            return this.http.server.resolveURL(\"alarm/detail.htm\", { id: alarmId });\n        }\n    }]);\n\n    return AlarmDAO;\n}(AbstractDAO_1.AbstractDAO);\n\nexports.AlarmDAO = AlarmDAO;",{"version":3,"file":"/data/src/dao/AlarmDAO.ts","sourceRoot":"","sources":["/data/node_modules/tslint-loader/index.js??ref--4-0!/data/src/dao/AlarmDAO.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAA0C;AAC1C,yBAAoC;AAMpC,0BAA2C;AAC3C,gCAAuD;AAIvD,0BAA6C;AAE7C,8BAAkD;AAClD,yBAA2C;AAC3C,gCAAyD;AACzD,6BAAiD;AACjD,uCAA4F;AAC5F,yBAA2C;AAE3C,oBAAuC;AACvC,mCAA4C;AAE5C,AAAc;AACd,IAAM,AAAG,MAAG,IAAI,qBAAQ,SAAC,AAAQ,UAAE,MAAM,AAAC,AAAC;AAE3C,AAGG,AACH;;;;;IAAsB;;;AAOpB,sBAAY,AAA0B;AACpC,AAAK;;wHAAC,AAAI,AAAC,AAAC;;AACZ,AAAI,cAAC,AAAQ,WAAG,IAAI,WAAQ,SAAC,AAAI,AAAC,AAAC,AACrC;;AAAC;AAED,AAMG,AACU,AAAG;;;;;;;;;;;4BAAC,AAAU;;AACzB,AAAM;;;;;;sEAAM,AAAU,AAAE,aAAC,AAAI,KAAC,UAAC,AAAI,AAAE,AAAE;AACnC,AAAM,kDAAM,AAAI,KAAC,AAAG,IAAC,AAAI,OAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAE,IAAE,AAAI,AAAC,MAAC,AAAI,KAAC,UAAC,AAAM,AAAE,AAAE;AAC/E,AAAM,+CAAC,AAAI,OAAC,AAAQ,SAAC,AAAM,OAAC,AAAI,AAAC,AAAC,AACtC;AAAC,AAAC,AAAC,AACP,qCAHW,AAAI;AAGd,AAAC,AAAC,AACL,AAAC,iCALQ,AAAI;;;;;;;;;AAKZ;AAED,AAMG,AACU,AAAI;;;;;;;;;;6BAAC,AAAe;;AAC/B,AAAM;;;;;;uEAAM,AAAU,WAAC,AAAM,AAAC,QAAC,AAAI,KAAC,UAAC,AAAI,AAAE,AAAE;AACzC,AAAM,kDAAM,AAAI,KAAC,AAAG,IAAC,AAAI,OAAC,AAAoB,AAAE,wBAAE,AAAI,AAAC,MAAC,AAAI,KAAC,UAAC,AAAM,AAAE,AAAE;AACpE,4CAAM,AAAI,OAAG,AAAI,OAAC,AAAO,QAAC,AAAM,AAAC,AAAC;AAClC,AAAE,AAAC,4CAAC,CAAC,AAAK,MAAC,AAAO,QAAC,AAAI,AAAC,AAAC,OAAC,AAAC;AACzB,AAAE,AAAC,gDAAC,CAAC,AAAI,AAAC,MAAC,AAAC;AACV,AAAM,uDAAC,AAAiB,AAAC,AAC3B;AAAC;AACD,kDAAM,IAAI,YAAS,UAAC,AAAuC,AAAG,AAAC,kDAAO,AAAI,AAAC,sDAAG,AAAY,AAAC,AAAC,AAC9F;AAAC;AACD,AAAM,oDAAM,AAAG,IAAC,UAAC,AAAS,AAAE,AAAE;AAC1B,AAAM,mDAAC,AAAI,OAAC,AAAQ,SAAC,AAAS,AAAC,AAAC,AACpC;AAAC,AAAC,AAAC,AACP,yCAHW,AAAI;AAGd,AAAC,AAAC,AACP,qCAZW,AAAI;AAYd,AAAC,AAAC,AACL,AAAC,iCAdQ,AAAI;;;;;;;;;AAcZ;AAEC,AAKG,AACE,AAAO;;;;;;;;;gCAAC,AAAW;AACtB,gBAAI,AAAI,OAAG,AAAM,OAAC,AAAI,AAAC;AAEvB,AAAE,AAAC,gBAAC,AAAI,SAAK,AAAI,QAAI,AAAI,KAAC,AAAQ,SAAC,AAAI,AAAC,QAAG,AAAC,KAAI,AAAI,KAAC,AAAK,AAAC,OAAC,AAAC;AAC3D,AAAI,uBAAG,AAAI,KAAC,AAAK,AAAC,AACpB;AAAC,AAAC,AAAI,mBAAC,AAAC;AACN,AAAI,uBAAG,AAAE,AAAC,AACZ;AAAC;AAED,AAAE,AAAC,gBAAC,CAAC,AAAK,MAAC,AAAO,QAAC,AAAI,AAAC,AAAC,OAAC,AAAC;AACzB,AAAE,AAAC,oBAAC,AAAI,KAAC,AAAE,AAAC,IAAC,AAAC;AACZ,AAAI,2BAAG,CAAC,AAAI,AAAC,AAAC,AAChB;AAAC,AAAC,AAAI,uBAAC,AAAC;AACN,0BAAM,IAAI,YAAS,UAAC,AAAuC,AAAG,AAAC,kDAAO,AAAI,AAAC,sDAAG,AAAY,AAAC,AAAC,AAC9F;AAAC,AACH;AAAC;AACD,AAAM,mBAAC,AAAI,AAAC,AAChB;AAAC;AAED,AAOG,AACU,AAAW;;;;;;;;;;;oCAAC,AAAuB,OAAE,AAAa;;AAC7D;;;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAU,6CAAG,AAAmB,AAAC;;AACvC,AAAU,2CAAC,AAAG,MAAG,AAAM,AAAC;AACxB,AAAE,AAAC,oCAAC,AAAI,SAAK,AAAS,AAAC,WAAC,AAAC;AACvB,AAAU,+CAAC,AAAO,UAAG,AAAI,AAAC,AAC5B;AAAC,AACD,AAAM;kEAAC,AAAI,KAAC,AAAG,IAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,SAAE,AAAU,AAAC,AAAC,AAC3E,AAAC;;;;;;;;;AAAA;AAED,AAKG,AACU,AAAa;;;;;;;;;sCAAC,AAAuB,OAAE,AAAa;;AAC/D;;;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAU,6CAAG,AAAmB,AAAC;;AACvC,AAAU,2CAAC,AAAG,MAAG,AAAO,AAAC;AACzB,AAAE,AAAC,oCAAC,AAAI,SAAK,AAAS,AAAC,WAAC,AAAC;AACvB,AAAU,+CAAC,AAAO,UAAG,AAAI,AAAC,AAC5B;AAAC,AACD,AAAM;kEAAC,AAAI,KAAC,AAAG,IAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,SAAE,AAAU,AAAC,AAAC,AAC3E,AAAC;;;;;;;;;AAAA;AAED,AAKG,AACU,AAAQ;;;;;;;;;iCAAC,AAAuB;;AAC3C;;;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAU,6CAAG,AAAmB,AAAC;;AACvC,AAAU,2CAAC,AAAQ,WAAG,AAAM,AAAC,AAC7B,AAAM;kEAAC,AAAI,KAAC,AAAG,IAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,SAAE,AAAU,AAAC,AAAC,AAC3E,AAAC;;;;;;;;;AAAA;AAED,AAKG,AACU,AAAK;;;;;;;;;8BAAC,AAAuB;;AACxC;;;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAU,6CAAG,AAAmB,AAAC;;AACvC,AAAU,2CAAC,AAAK,QAAG,AAAM,AAAC,AAC1B,AAAM;kEAAC,AAAI,KAAC,AAAG,IAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,SAAE,AAAU,AAAC,AAAC,AAC3E,AAAC;;;;;;;;;AAAA;AAED,AAMG,AACU,AAAY;;;;;;;;;;qCAAC,AAAuB,OAAE,AAAgB;;AACjE;;;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAU,6CAAG,AAAmB,AAAC;;AACvC,AAAU,2CAAC,AAAQ,WAAG,AAAQ,AAAC,AAC/B,AAAM;kEAAC,AAAI,KAAC,AAAG,IAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,SAAE,AAAU,AAAC,AAAC,AAC3E,AAAC;;;;;;;;;AAAA;AAED,AAMG,AACU,AAAe;;;;;;;;;;wCAAC,AAAuB,OAAE,AAA6B;;AACjF;;;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAU,6CAAG,AAAmB,AAAC;;AACvC,AAAU,2CAAC,AAAW,cAAG,AAAK,MAAC,AAAK,AAAC,AACrC,AAAM;kEAAC,AAAI,KAAC,AAAG,IAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,SAAE,AAAU,AAAC,AAAC,AAC3E,AAAC;;;;;;;;;AAAA;AAED,AAKG,AACU,AAAY;;;;;;;;;qCAAC,AAAuB;;AAC/C,AAAE,AAAC;;;;;;;sCAAC,AAAI,KAAC,AAAa,AAAE,oBAAK,AAAC,AAAC,AAAC,AAAC,AAC/B;;;;;sCAAM,IAAI,YAAS,UAAC,AAA0D,6DAC5E,AAAuC,AAAC,AAAC,AAC7C,AAAC,AAED;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAO,0CAAG,IAAI,kBAAe,AAAE,AAAC;;AACtC,AAAO,wCAAC,AAAO,QAAC,AAAM,SAAG,AAAY,AAAC,AACtC,AAAM;uEAAM,AAAI,KAAC,AAAI,KAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,UAAG,AAAgB,kBAAE,AAAO,AAAC,SAAC,AAAI,KAAC,AAAG,AAAE;AACvG,0CAAG,IAAC,AAAK,MAAC,AAA0B,4BAAE,AAAG,AAAC,AAAC,AAC7C;AAAC,AAAC,iCAFK,AAAI,EAER,AAAK,MAAC,UAAC,AAA0B,AAAE,AAAE;AACtC,AAAE,AAAC,wCAAC,AAAG,IAAC,AAAI,SAAK,AAAG,AAAC,KAAC,AAAC;AACrB,8CAAG,IAAC,AAAI,KAAC,AAAsC,yCAAG,AAAI,OAAC,AAAI,KAAC,AAAM,OAAC,AAAQ,AAAE,AAAC,AAAC,AACjF;AAAC;AACD,0CAAM,AAAG,AAAC,AACZ;AAAC,AAAC,AAAC,AACL,AAAC;;;;;;;;;AAAA;AAED,AAKG,AACU,AAAmB;;;;;;;;;4CAAC,AAAuB;;AACtD,AAAE,AAAC;;;;;;;sCAAC,AAAI,KAAC,AAAa,AAAE,oBAAK,AAAC,AAAC,AAAC,AAAC,AAC/B;;;;;sCAAM,IAAI,YAAS,UAAC,AAA0D,6DAC5E,AAAuC,AAAC,AAAC,AAC7C,AAAC,AAED;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAO,0CAAG,IAAI,kBAAe,AAAE,AAAC;;AACtC,AAAO,wCAAC,AAAO,QAAC,AAAM,SAAG,AAAY,AAAC,AACtC,AAAM;wEAAM,AAAI,KAAC,AAAI,KAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,UAAG,AAAgB,kBAAE,AAAO,AAAC,SAAC,AAAI,KAAC,AAAG,AAAE;AACvG,0CAAG,IAAC,AAAK,MAAC,AAAwB,0BAAE,AAAG,AAAC,AAAC,AAC3C;AAAC,AAAC,iCAFK,AAAI,EAER,AAAK,MAAC,UAAC,AAA0B,AAAE,AAAE;AACtC,AAAE,AAAC,wCAAC,AAAG,IAAC,AAAI,SAAK,AAAG,AAAC,KAAC,AAAC;AACrB,8CAAG,IAAC,AAAI,KAAC,AAAsC,yCAAG,AAAI,OAAC,AAAI,KAAC,AAAM,OAAC,AAAQ,AAAE,AAAC,AAAC,AACjF;AAAC;AACD,0CAAM,AAAG,AAAC,AACZ;AAAC,AAAC,AAAC,AACL,AAAC;;;;;;;;;AAAA;AAED,AAKG,AACU,AAAW;;;;;;;;;oCAAC,AAAuB;;AAC9C,AAAE,AAAC;;;;;;;sCAAC,AAAI,KAAC,AAAa,AAAE,oBAAK,AAAC,AAAC,AAAC,AAAC,AAC/B;;;;;sCAAM,IAAI,YAAS,UAAC,AAA0D,6DAC5E,AAAuC,AAAC,AAAC,AAC7C,AAAC,AAED;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAO,0CAAG,IAAI,kBAAe,AAAE,AAAC;;AACtC,AAAO,wCAAC,AAAO,QAAC,AAAM,SAAG,AAAY,AAAC,AACtC,AAAM;wEAAM,AAAI,KAAC,AAAI,KAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,UAAG,AAAe,iBAAE,AAAO,AAAC,SAAC,AAAI,KAAC,AAAG,AAAE;AACtG,0CAAG,IAAC,AAAK,MAAC,AAAuB,yBAAE,AAAG,AAAC,AAAC,AAC1C;AAAC,AAAC,iCAFK,AAAI,EAER,AAAK,MAAC,UAAC,AAA0B,AAAE,AAAE;AACtC,AAAE,AAAC,wCAAC,AAAG,IAAC,AAAI,SAAK,AAAG,AAAC,KAAC,AAAC;AACrB,8CAAG,IAAC,AAAI,KAAC,AAAsC,yCAAG,AAAI,OAAC,AAAI,KAAC,AAAM,OAAC,AAAQ,AAAE,AAAC,AAAC,AACjF;AAAC;AACD,0CAAM,AAAG,AAAC,AACZ;AAAC,AAAC,AAAC,AACL,AAAC;;;;;;;;;AAAA;AAED,AAQG,AACU,AAAc;;;;;;;;;;;;uCAAC,AAAuB,OAAE,AAAY,MAAE,AAAa;;AAC9E,AAAM;;;;mEAAC,AAAI,KAAC,AAAQ,SAAC,AAAM,QAAE,AAAK,OAAE,AAAI,MAAE,AAAI,AAAC,AAAC,AAClD,AAAC;;;;;;;;;AAAA;AAED,AAQG,AACU,AAAe;;;;;;;;;;;;wCAAC,AAAuB,OAAE,AAAY,MAAE,AAAa;;AAC/E,AAAM;;;;mEAAC,AAAI,KAAC,AAAQ,SAAC,AAAS,WAAE,AAAK,OAAE,AAAI,MAAE,AAAI,AAAC,AAAC,AACrD,AAAC;;;;;;;;;AAAA;AAED,AAKG,AACU,AAAgB;;;;;;;;;yCAAC,AAAuB;;AACnD,AAAM;;;;mEAAC,AAAI,KAAC,AAAU,WAAC,AAAM,QAAE,AAAK,AAAC,AAAC,AACxC,AAAC;;;;;;;;;AAAA;AAED,AAKG,AACU,AAAiB;;;;;;;;;0CAAC,AAAuB;;AACpD,AAAM;;;;mEAAC,AAAI,KAAC,AAAU,WAAC,AAAS,WAAE,AAAK,AAAC,AAAC,AAC3C,AAAC;;;;;;;;;AAAA;AAED,AAGG,AACI,AAAQ;;;;;;;iCAAC,AAAS;AACvB,gBAAM,AAAK,QAAG,IAAI,YAAS,AAAE,AAAC;AAE9B,AAAK,kBAAC,AAAE,KAAG,AAAI,KAAC,AAAQ,SAAC,AAAI,KAAC,AAAE,AAAC,AAAC;AAClC,AAAK,kBAAC,AAAK,QAAG,AAAI,KAAC,AAAK,AAAC;AACzB,AAAK,kBAAC,AAAO,UAAG,AAAI,KAAC,AAAO,AAAC;AAC7B,AAAK,kBAAC,AAAG,MAAG,AAAI,KAAC,AAAG,AAAC;AACrB,AAAK,kBAAC,AAAW,cAAG,AAAI,KAAC,AAAW,AAAC;AACrC,AAAK,kBAAC,AAAc,iBAAG,AAAI,KAAC,AAAM,OAAC,AAAI,KAAC,AAAc,AAAC,AAAC;AACxD,AAAK,kBAAC,AAAS,YAAG,AAAI,KAAC,AAAQ,SAAC,AAAQ,SAAC,AAAI,KAAC,AAAS,AAAC,AAAC;AACzD,AAAK,kBAAC,AAAQ,WAAG,AAAI,KAAC,AAAQ,AAAC;AAC/B,AAAK,kBAAC,AAAU,aAAG,AAAI,KAAC,AAAU,AAAC;AACnC,AAAK,kBAAC,AAAY,eAAG,AAAI,KAAC,AAAY,AAAC;AACvC,AAAK,kBAAC,AAAa,gBAAG,AAAI,KAAC,AAAa,AAAC;AACzC,AAAK,kBAAC,AAAiB,oBAAG,AAAI,KAAC,AAAiB,AAAC;AACjD,AAAK,kBAAC,AAAM,SAAG,AAAI,KAAC,AAAQ,SAAC,AAAI,KAAC,AAAM,AAAC,AAAC;AAC1C,AAAK,kBAAC,AAAS,YAAG,AAAI,KAAC,AAAS,AAAC;AACjC,AAAK,kBAAC,AAAY,eAAG,AAAI,KAAC,AAAY,AAAC;AACvC,AAAK,kBAAC,AAAoB,uBAAG,AAAI,KAAC,AAAoB,AAAC;AAEvD,AAAE,AAAC,gBAAC,AAAI,KAAC,AAAO,AAAC,SAAC,AAAC;AACjB,AAAK,sBAAC,AAAO,UAAG,AAAI,KAAC,AAAM,OAAC,AAAI,KAAC,AAAO,AAAC,AAAC,AAC5C;AAAC;AAED,AAAE,AAAC,gBAAC,AAAI,KAAC,AAAQ,AAAC,UAAC,AAAC;AAClB,AAAK,sBAAC,AAAQ,WAAG,eAAU,WAAC,AAAI,KAAC,AAAQ,AAAC,AAAC,AAC7C;AAAC;AAED,AAAE,AAAC,gBAAC,AAAI,KAAC,AAAI,AAAC,MAAC,AAAC;AACd,oBAAM,AAAI,OAAG,AAAI,KAAC,AAAQ,SAAC,AAAI,KAAC,AAAI,AAAC,AAAC;AACtC,AAAK,sBAAC,AAAI,OAAG,gBAAU,WAAC,AAAI,AAAC,AAAC,AAChC;AAAC;AAED,AAAE,AAAC,gBAAC,OAAO,AAAI,KAAC,AAAkB,uBAAK,AAAW,AAAC,aAAC,AAAC;AACjD,oBAAM,AAAgB,0BAAU,AAAI,KAAC,yBAAmB,AAAC,qBAAC,AAAI,KAAC,UAAC,AAAG,AAAE,AAAE;AACnE,AAAM,2BAAC,yBAAmB,oBAAC,AAAG,AAAC,KAAC,AAAE,OAAK,AAAI,KAAC,AAAkB,AAAC,AACnE;AAAC,AAAC,AAAC,iBAFsB,AAAM;AAG/B,AAAE,AAAC,oBAAC,AAAgB,AAAC,kBAAC,AAAC;AACnB,AAAK,0BAAC,AAAkB,qBAAG,yBAAmB,oBAAC,AAAgB,AAAC,AAAC,AACrE;AAAC,AACL;AAAC;AAED,AAAE,AAAC,gBAAC,AAAI,KAAC,AAAW,AAAC,aAAC,AAAC;AACrB,oBAAM,AAAE,KAAG,AAAI,KAAC,AAAW,AAAC;AAC5B,AAAK,sBAAC,AAAO,UAAG,kBAAe,gBAAC,AAAG,IAAC,AAAE,GAAC,AAAE,IAAE,AAAE,GAAC,AAAI,AAAC,AAAC,AACtD;AAAC;AAED,AAAE,AAAC,gBAAC,AAAI,KAAC,AAAc,AAAC,gBAAC,AAAC;AACxB,AAAK,sBAAC,AAAc,iBAAG,AAAI,KAAC,AAAM,OAAC,AAAI,KAAC,AAAc,AAAC,AAAC,AAC1D;AAAC;AAED,AAAE,AAAC,gBAAC,AAAI,KAAC,AAAe,AAAC,iBAAC,AAAC;AACzB,AAAK,sBAAC,AAAe,kBAAG,AAAI,KAAC,AAAM,OAAC,AAAI,KAAC,AAAe,AAAC,AAAC,AAC5D;AAAC;AAED,AAAE,AAAC,gBAAC,AAAI,KAAC,AAAU,AAAC;AAClB,oBAAI,AAAK,QAAG,AAAI,KAAC,AAAU,AAAC;AAC5B,AAAE,AAAC,oBAAC,AAAK,MAAC,AAAS,AAAC,WAAC,AAAC;AACpB,AAAK,4BAAG,AAAK,MAAC,AAAS,AAAC,AAC1B;AAAC;AACD,AAAE,AAAC,oBAAC,CAAC,AAAK,MAAC,AAAO,QAAC,AAAK,AAAC,AAAC,QAAC,AAAC;AAC1B,AAAK,4BAAG,CAAC,AAAK,AAAC,AAAC,AAClB;AAAC;AACD,AAAK,sBAAC,AAAU,aAAG,AAAE,AAAC;AARH,AAAC;;;;;AAUpB,AAAG,AAAC,AAAC,yCAAY,AAAK,AAAC;AAAC,AAAC,4BAAhB,AAAI;;AACX,AAAI,+BAAG,IAAI,WAAQ,SACjB,AAAI,KAAC,AAAI,MACT,AAAI,KAAC,AAAI,MACT,AAAI,KAAC,AAAK,AACX,AAAC;AACF,AAAK,8BAAC,AAAU,WAAC,AAAI,KAAC,AAAI,AAAC,AAAC,AAC9B;AAAC,AACH;;;;;;;;;;;;;;;AAAC;AAED,AAAK,kBAAC,AAAa,gBAAG,AAAI,KAAC,AAAa,AAAC;AAEzC,AAAK,kBAAC,AAAiB,oBAAG,AAAI,KAAC,AAAiB,AAAC;AACjD,AAAK,kBAAC,AAAqB,wBAAG,AAAI,KAAC,AAAqB,AAAC;AAEzD,AAAK,kBAAC,AAAM,SAAG,AAAI,KAAC,AAAM,OAAC,AAAI,KAAC,AAAU,AAAC,AAAC;AAC5C,AAAK,kBAAC,AAAO,UAAG,AAAI,KAAC,AAAM,OAAC,AAAI,KAAC,AAAgB,AAAC,AAAC;AAEnD,AAAK,kBAAC,AAAW,cAAG,AAAI,KAAC,AAAc,eAAC,AAAK,AAAC,AAAC;AAE/C,AAAK,kBAAC,AAAiB,oBAAG,AAAI,KAAC,AAAiB,AAAC;AAEjD,AAAM,mBAAC,AAAK,AAAC,AACf;AAAC;AAED,AAGG,AACI,AAAM;;;;;;;+BAAC,AAAS;AACrB,AAAE,AAAC,gBAAC,CAAC,AAAI,AAAC,MAAC,AAAC;AACV,AAAM,uBAAC,AAAI,AAAC,AACd;AAAC;AAED,gBAAM,AAAI,OAAG,IAAI,WAAQ,AAAE,AAAC;AAC5B,AAAI,iBAAC,AAAE,KAAG,AAAI,KAAC,AAAE,AAAC;AAClB,AAAI,iBAAC,AAAM,SAAG,AAAI,KAAC,AAAM,AAAC;AAC1B,AAAI,iBAAC,AAAI,OAAG,AAAI,KAAC,AAAI,AAAC;AACtB,AAAI,iBAAC,AAAO,UAAG,AAAI,KAAC,AAAM,OAAC,AAAI,KAAC,AAAO,AAAC,AAAC;AACzC,AAAI,iBAAC,AAAO,UAAG,AAAI,KAAC,AAAM,OAAC,AAAI,KAAC,AAAO,AAAC,AAAC;AACzC,AAAM,mBAAC,AAAI,AAAC,AACd;AAAC;AAED,AAEG,AACO,AAAkB;;;;;;;AAC1B,AAAM,mBAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAa,AAAC,AACrD;AAAC;AAED,AAGG,AACa,AAAU;;;;;;;mCAAC,AAAe;;;;;;;AACxC,AAAM;;;;;;0EAAiB,yBAAC,AAAM,QAAE,AAAI,KAAC,UAAC,AAAO,AAAE,AAAE;AAC7C,AAA2C;AAC3C,AAAE,AAAC,wCAAC,AAAI,OAAC,AAAa,AAAE,oBAAK,AAAC,AAAC,GAAC,AAAC;AAC7B,AAAO,gDAAC,AAAO,QAAC,AAAM,SAAG,AAAkB,AAAC,AAChD;AAAC;AACD,AAAM,2CAAC,AAAO,AAAC,AACnB;AAAC,AAAC,AAAC,AACL,AAAC,iCAPQ;;;;;;;;;AAOR;AAED,AAGG,AACW,AAAG;;;;;;;4BAAC,AAAW;gBAAE,AAAU,iFAAG,AAAmB;;;AAC7D,AAAM;;;;;;wEAAM,AAAU,AAAE,aAAC,AAAI,KAAC,UAAC,AAAI,AAAE,AAAE;AACnC,AAAI,yCAAC,AAAO,QAAC,AAAc,AAAC,kBAAG,AAAmC,AAAC;AACnE,AAAI,yCAAC,AAAO,QAAC,AAAM,SAAG,AAAI,AAAC;AAC3B,AAAI,yCAAC,AAAU,aAAG,AAAU,AAAC;AAC7B,AAAM,kDAAM,AAAI,KAAC,AAAG,IAAC,AAAG,KAAE,AAAI,AAAC,MAAC,AAAI,KAAC,UAAC,AAAM,AAAE,AAAE;AAC5C,AAAE,AAAC,4CAAC,CAAC,AAAM,OAAC,AAAS,AAAC,WAAC,AAAC;AACpB,kDAAM,AAAM,AAAC,AACjB;AAAC;AACD,AAAM,AAAC,AACX;AAAC,AAAC,AAAC,AACP,qCANW,AAAI;AAMd,AAAC,AAAC,AACL,AAAC,iCAXQ,AAAI;;;;;;;;;AAWZ;AAED,AAGG,AACW,AAAU;;;;;;;mCAAC,AAAW;gBAAE,AAAU,iFAAG,AAAmB;;;AAClE,AAAM;;;;;;wEAAM,AAAU,AAAE,aAAC,AAAI,KAAC,UAAC,AAAI,AAAE,AAAE;AACnC,AAAI,yCAAC,AAAO,QAAC,AAAc,AAAC,kBAAG,AAAmC,AAAC;AACnE,AAAI,yCAAC,AAAO,QAAC,AAAM,SAAG,AAAI,AAAC;AAC3B,AAAI,yCAAC,AAAU,aAAG,AAAU,AAAC;AAC7B,AAAM,mDAAM,AAAI,KAAC,AAAU,WAAC,AAAG,KAAE,AAAI,AAAC,MAAC,AAAI,KAAC,UAAC,AAAM,AAAE,AAAE;AACnD,AAAE,AAAC,4CAAC,CAAC,AAAM,OAAC,AAAS,AAAC,WAAC,AAAC;AACpB,kDAAM,AAAM,AAAC,AACjB;AAAC;AACD,AAAM,AAAC,AACX;AAAC,AAAC,AAAC,AACP,qCANW,AAAI;AAMd,AAAC,AAAC,AACP,AAAC,iCAXU,AAAI;;;;;;;;;AAWd;AAED,AAGG,AACK,AAAoB;;;;;;;;AAC1B,AAAM,mBAAC,AAAI,KAAC,AAAa,AAAE,oBAAK,AAAC,AAAC,AAAC,IAAC,AAAe,AAAC,AAAC,kBAAC,AAAa,AAAC,AACtE;AAAC;AAED,AAGG,AACW,AAAQ;;;;;;;iCAAC,AAAY,MAAE,AAAuB,OAAE,AAAY,MAAE,AAAa;;AACvF,AAAE,AAAC;;;;;sCAAC,AAAI,KAAC,AAAa,AAAE,oBAAK,AAAC,AAAC,AAAC,AAAC,AAC/B;;;;;sCAAM,IAAI,YAAS,UAAC,AAAgD,mDAChE,AAAuC,AAAC,AAAC,AAC/C,AAAC,AAED;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE;AAAM,AAAU,6CAAG,AAAmB,AAAC;;AACvC,AAAU,2CAAC,AAAI,OAAG,AAAI,AAAC;AACvB,AAAE,AAAC,oCAAC,AAAI,SAAK,AAAS,AAAC,WAAC,AAAC;AACvB,AAAU,+CAAC,AAAI,OAAG,AAAI,AAAC,AACzB;AAAC,AACD,AAAM;mEAAC,AAAI,KAAC,AAAG,IAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,UAAG,AAAG,MAAG,AAAI,MAAE,AAAU,AAAC,AAAC,AACxF,AAAC;;;;;;;;;AAAA;AAED,AAGG,AACW,AAAU;;;;;;;mCAAC,AAAY,MAAE,AAAuB;;AAC5D,AAAE,AAAC;;;;;sCAAC,AAAI,KAAC,AAAa,AAAE,oBAAK,AAAC,AAAC,AAAC,AAAC,AAC/B;;;;;sCAAM,IAAI,YAAS,UAAC,AAAgD,mDAChE,AAAuC,AAAC,AAAC,AAC/C,AAAC,AAED;;;AAAM,AAAO,AAAG,0CAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC,AAChE,AAAM;mEAAC,AAAI,KAAC,AAAU,WAAC,AAAI,KAAC,AAAoB,AAAE,yBAAG,AAAG,MAAG,AAAO,UAAG,AAAG,MAAG,AAAI,AAAC,AAAC,AACnF,AAAC;;;;;;;;;AAAA;AAED,AAKG,AACK,AAAc;;;;;;;;;uCAAC,AAAuB;AAC1C,gBAAM,AAAO,AAAG,UAAC,AAAM,OAAC,AAAK,AAAC,UAAK,AAAQ,AAAC,AAAC,WAAC,AAAK,AAAC,AAAC,QAAC,AAAK,MAAC,AAAE,AAAC,AAAC;AAChE,AAAM,mBAAC,AAAI,KAAC,AAAI,KAAC,AAAM,OAAC,AAAU,AAAC,AAAkB,+BAAE,EAAC,AAAE,IAAE,AAAO,AAAC,AAAC,AAAC,AAC1E;AAAC,AACF;;;;EAzf6B,cAA8B;;AAA5D,mBAyfC","sourcesContent":["import {AbstractDAO} from './AbstractDAO';\nimport {EventDAO} from './EventDAO';\n\nimport {Filter} from '../api/Filter';\nimport {IHasHTTP} from '../api/IHasHTTP';\nimport {IHash} from '../internal/IHash';\nimport {IOnmsHTTP} from '../api/IOnmsHTTP';\nimport {OnmsError} from '../api/OnmsError';\nimport {OnmsHTTPOptions} from '../api/OnmsHTTPOptions';\nimport {OnmsResult} from '../api/OnmsResult';\nimport {SearchProperty} from '../api/SearchProperty';\n\nimport {OnmsAlarm} from '../model/OnmsAlarm';\nimport {OnmsAlarmSummary} from '../model/OnmsAlarmSummary';\nimport {AlarmTypes} from '../model/OnmsAlarmType';\nimport {OnmsParm} from '../model/OnmsParm';\nimport {OnmsServiceType} from '../model/OnmsServiceType';\nimport {Severities} from '../model/OnmsSeverity';\nimport {OnmsTroubleTicketState, TroubleTicketStates} from '../model/OnmsTroubleTicketState';\nimport {OnmsMemo} from '../model/OnmsMemo';\n\nimport {log, catDao} from '../api/Log';\nimport {Category} from 'typescript-logging';\n\n/** @hidden */\nconst cat = new Category('alarms', catDao);\n\n/**\n * Data access for [[OnmsAlarm]] objects.\n * @module AlarmDAO\n */\nexport class AlarmDAO extends AbstractDAO<number, OnmsAlarm> {\n  /**\n   * an event DAO to be used for creating events attached to alarms from API/JSON data.\n   * @hidden\n   */\n  private eventDao: EventDAO;\n\n  constructor(impl: IHasHTTP | IOnmsHTTP) {\n    super(impl);\n    this.eventDao = new EventDAO(impl);\n  }\n\n  /**\n   * Fetch an alarm.\n   *\n   * @version ReST v1+\n   * @param {number} id - The alarm's ID.\n   * @return An [[OnmsAlarm]].\n   */\n  public async get(id: number): Promise<OnmsAlarm> {\n    return this.getOptions().then((opts) => {\n        return this.http.get(this.pathToAlarmsEndpoint() + '/' + id, opts).then((result) => {\n            return this.fromData(result.data);\n        });\n    });\n  }\n\n  /**\n   * Find matching alarms.\n   *\n   * @version ReST v1+\n   * @param {Filter} filter - The filter to use when querying.\n   * @return An array of [[OnmsAlarm]] objects.\n   */\n  public async find(filter?: Filter): Promise<OnmsAlarm[]> {\n    return this.getOptions(filter).then((opts) => {\n        return this.http.get(this.pathToAlarmsEndpoint(), opts).then((result) => {\n            const data = this.getData(result);\n            if (!Array.isArray(data)) {\n              if (!data) {\n                return [] as OnmsAlarm[];\n              }\n              throw new OnmsError('Expected an array of alarms but got \"' + (typeof data) + '\" instead.');\n            }\n            return data.map((alarmData) => {\n                return this.fromData(alarmData);\n            });\n        });\n    });\n  }\n\n    /**\n     * Extracts the data from an HTTP Request result.\n     *\n     * @param result the HTTP Request result.\n     * @returns An array of [[OnmsAlarm]] objects.\n     */\n  public getData(result: any): OnmsAlarm[] {\n      let data = result.data;\n\n      if (data !== null && this.getCount(data) > 0 && data.alarm) {\n        data = data.alarm;\n      } else {\n        data = [];\n      }\n\n      if (!Array.isArray(data)) {\n        if (data.id) {\n          data = [data];\n        } else {\n          throw new OnmsError('Expected an array of alarms but got \"' + (typeof data) + '\" instead.');\n        }\n      }\n      return data;\n  }\n\n  /**\n   * Acknowledge an alarm.\n   *\n   * @version ReST v1+\n   * @param {number|OnmsAlarm} id - The [[OnmsAlarm]] or alarm ID.\n   * @param {string=} user - The user to ack the alarm as.\n   *                  (Only administrators have the right to do this.)\n   */\n  public async acknowledge(alarm: number|OnmsAlarm, user?: string): Promise<void> {\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const parameters = {} as IHash<string>;\n    parameters.ack = 'true';\n    if (user !== undefined) {\n      parameters.ackUser = user;\n    }\n    return this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters);\n  }\n\n  /**\n   * Un-acknowledge an alarm.\n   *\n   * @version ReST v1+\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   */\n  public async unacknowledge(alarm: number|OnmsAlarm, user?: string): Promise<void> {\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const parameters = {} as IHash<string>;\n    parameters.ack = 'false';\n    if (user !== undefined) {\n      parameters.ackUser = user;\n    }\n    return this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters);\n  }\n\n  /**\n   * Escalate an alarm.\n   *\n   * @version ReST v1+\n   * @param {number|OnsmAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   */\n  public async escalate(alarm: number|OnmsAlarm): Promise<void> {\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const parameters = {} as IHash<string>;\n    parameters.escalate = 'true';\n    return this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters);\n  }\n\n  /**\n   * Clear an alarm.\n   *\n   * @version ReST v1+\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   */\n  public async clear(alarm: number|OnmsAlarm): Promise<void> {\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const parameters = {} as IHash<string>;\n    parameters.clear = 'true';\n    return this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters);\n  }\n\n  /**\n   * Associate a ticket ID with the alarm.\n   *\n   * @version ReST v1+\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   * @param {string} ticketId - The ticket ID.\n   */\n  public async setTTicketId(alarm: number|OnmsAlarm, ticketId: string): Promise<void> {\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const parameters = {} as IHash<string>;\n    parameters.ticketId = ticketId;\n    return this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters);\n  }\n\n  /**\n   * Update the state of the ticket associated with the alarm.\n   *\n   * @version ReST v1+\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   * @param {string} state - The ticket state.\n   */\n  public async setTTicketState(alarm: number|OnmsAlarm, state: OnmsTroubleTicketState): Promise<void> {\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const parameters = {} as IHash<string>;\n    parameters.ticketState = state.label;\n    return this.put(this.pathToAlarmsEndpoint() + '/' + alarmId, parameters);\n  }\n\n  /**\n   * Create a trouble ticket for the specified alarm.\n   *\n   * @version ReST v2\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   */\n  public async createTicket(alarm: number|OnmsAlarm): Promise<void> {\n    if (this.getApiVersion() === 1) {\n      throw new OnmsError('Create/Update/Close ticket is only available in OpenNMS ' +\n        'versions that support the ReSTv2 API.');\n    }\n\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const options = new OnmsHTTPOptions();\n    options.headers.accept = 'text/plain';\n    return this.http.post(this.pathToAlarmsEndpoint() + '/' + alarmId + '/ticket/create', options).then(() => {\n      log.debug('Ticket creation pending.', cat);\n    }).catch((err: OnmsResult<OnmsAlarm>) => {\n      if (err.code === 501) {\n        log.warn('Trouble ticketing is not enabled on ' + this.http.server.toString());\n      }\n      throw err;\n    });\n  }\n\n  /**\n   * Notify OpenNMS it should fetch updated ticket state for an alarm from the remote ticketing system.\n   *\n   * @version ReST v2\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   */\n  public async triggerTicketUpdate(alarm: number|OnmsAlarm): Promise<void> {\n    if (this.getApiVersion() === 1) {\n      throw new OnmsError('Create/Update/Close ticket is only available in OpenNMS ' +\n        'versions that support the ReSTv2 API.');\n    }\n\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const options = new OnmsHTTPOptions();\n    options.headers.accept = 'text/plain';\n    return this.http.post(this.pathToAlarmsEndpoint() + '/' + alarmId + '/ticket/update', options).then(() => {\n      log.debug('Ticket update pending.', cat);\n    }).catch((err: OnmsResult<OnmsAlarm>) => {\n      if (err.code === 501) {\n        log.warn('Trouble ticketing is not enabled on ' + this.http.server.toString());\n      }\n      throw err;\n    });\n  }\n\n  /**\n   * Close the ticket associated with the given alarm.\n   *\n   * @version ReST v2\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   */\n  public async closeTicket(alarm: number|OnmsAlarm): Promise<void> {\n    if (this.getApiVersion() === 1) {\n      throw new OnmsError('Create/Update/Close ticket is only available in OpenNMS ' +\n        'versions that support the ReSTv2 API.');\n    }\n\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const options = new OnmsHTTPOptions();\n    options.headers.accept = 'text/plain';\n    return this.http.post(this.pathToAlarmsEndpoint() + '/' + alarmId + '/ticket/close', options).then(() => {\n      log.debug('Ticket close pending.', cat);\n    }).catch((err: OnmsResult<OnmsAlarm>) => {\n      if (err.code === 501) {\n        log.warn('Trouble ticketing is not enabled on ' + this.http.server.toString());\n      }\n      throw err;\n    });\n  }\n\n  /**\n   * Create or update the sticky memo associated with the alarm.\n   *\n   * @version ReST v2\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   * @param {string} body - The memo body\n   * @param {string=} user - The user to update the memo as.\n   *                  (Only administrators have the right to do this.)\n   */\n  public async saveStickyMemo(alarm: number|OnmsAlarm, body: string, user?: string): Promise<void> {\n    return this.saveMemo('memo', alarm, body, user);\n  }\n\n  /**\n   * Create or update the journal memo associated with the alarm.\n   *\n   * @version ReST v2\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   * @param {string} body - The memo body\n   * @param {string=} user - The user to update the memo as.\n   *                  (Only administrators have the right to do this.)\n   */\n  public async saveJournalMemo(alarm: number|OnmsAlarm, body: string, user?: string): Promise<void> {\n    return this.saveMemo('journal', alarm, body, user);\n  }\n\n  /**\n   * Delete the sticky memo ticket associated with the given alarm.\n   *\n   * @version ReST v2\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   */\n  public async deleteStickyMemo(alarm: number|OnmsAlarm): Promise<void> {\n    return this.deleteMemo('memo', alarm);\n  }\n\n  /**\n   * Delete the journal memo ticket associated with the given alarm.\n   *\n   * @version ReST v2\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   */\n  public async deleteJournalMemo(alarm: number|OnmsAlarm): Promise<void> {\n    return this.deleteMemo('journal', alarm);\n  }\n\n  /**\n   * Generate an alarm object from the given dictionary.\n   * @hidden\n   */\n  public fromData(data: any) {\n    const alarm = new OnmsAlarm();\n\n    alarm.id = this.toNumber(data.id);\n    alarm.count = data.count;\n    alarm.ackUser = data.ackUser;\n    alarm.uei = data.uei;\n    alarm.description = data.description;\n    alarm.firstEventTime = this.toDate(data.firstEventTime);\n    alarm.lastEvent = this.eventDao.fromData(data.lastEvent);\n    alarm.location = data.location;\n    alarm.logMessage = data.logMessage;\n    alarm.reductionKey = data.reductionKey;\n    alarm.troubleTicket = data.troubleTicket;\n    alarm.troubleTicketLink = data.troubleTicketLink;\n    alarm.nodeId = this.toNumber(data.nodeId);\n    alarm.nodeLabel = data.nodeLabel;\n    alarm.suppressedBy = data.suppressedBy;\n    alarm.operatorInstructions = data.operatorInstructions;\n\n    if (data.ackTime) {\n      alarm.ackTime = this.toDate(data.ackTime);\n    }\n\n    if (data.severity) {\n      alarm.severity = Severities[data.severity];\n    }\n\n    if (data.type) {\n      const type = this.toNumber(data.type);\n      alarm.type = AlarmTypes[type];\n    }\n\n    if (typeof data.troubleTicketState !== 'undefined') {\n        const troubleTicketKey = Object.keys(TroubleTicketStates).find((key) => {\n            return TroubleTicketStates[key].id === data.troubleTicketState;\n        });\n        if (troubleTicketKey) {\n            alarm.troubleTicketState = TroubleTicketStates[troubleTicketKey];\n        }\n    }\n\n    if (data.serviceType) {\n      const st = data.serviceType;\n      alarm.service = OnmsServiceType.for(st.id, st.name);\n    }\n\n    if (data.suppressedTime) {\n      alarm.suppressedTime = this.toDate(data.suppressedTime);\n    }\n\n    if (data.suppressedUntil) {\n      alarm.suppressedUntil = this.toDate(data.suppressedUntil);\n    }\n\n    if (data.parameters) {\n      let parms = data.parameters;\n      if (parms.parameter) {\n        parms = parms.parameter;\n      }\n      if (!Array.isArray(parms)) {\n        parms = [parms];\n      }\n      alarm.parameters = [];\n\n      for (let parm of parms) {\n        parm = new OnmsParm(\n          parm.name,\n          parm.type,\n          parm.value,\n        );\n        alarm.parameters.push(parm);\n      }\n    }\n\n    alarm.relatedAlarms = data.relatedAlarms;\n\n    alarm.managedObjectType = data.managedObjectType;\n    alarm.managedObjectInstance = data.managedObjectInstance;\n\n    alarm.sticky = this.toMemo(data.stickyMemo);\n    alarm.journal = this.toMemo(data.reductionKeyMemo);\n\n    alarm.detailsPage = this.getDetailsPage(alarm);\n\n    alarm.affectedNodeCount = data.affectedNodeCount;\n\n    return alarm;\n  }\n\n  /**\n   * Generate a memo from the given dictionary.\n   * @hidden\n   */\n  public toMemo(data: any): OnmsMemo {\n    if (!data) {\n      return null;\n    }\n\n    const memo = new OnmsMemo();\n    memo.id = data.id;\n    memo.author = data.author;\n    memo.body = data.body;\n    memo.created = this.toDate(data.created);\n    memo.updated = this.toDate(data.updated);\n    return memo;\n  }\n\n  /**\n   * The path to the alarm search properties endpoint.\n   */\n  protected searchPropertyPath() {\n    return this.pathToAlarmsEndpoint() + '/properties';\n  }\n\n  /**\n   * Given an optional filter, generate an [[OnmsHTTPOptions]] object for DAO calls.\n   * @hidden\n   */\n  protected async getOptions(filter?: Filter): Promise<OnmsHTTPOptions> {\n    return super.getOptions(filter).then((options) => {\n        // always use application/json for v2 calls\n        if (this.getApiVersion() === 2) {\n            options.headers.accept = 'application/json';\n        }\n        return options;\n    });\n  }\n\n  /**\n   * Call a PUT request in the format the alarm ack API expects.\n   * @hidden\n   */\n  private async put(url: string, parameters = {} as IHash<string>): Promise<void> {\n    return this.getOptions().then((opts) => {\n        opts.headers['content-type'] = 'application/x-www-form-urlencoded';\n        opts.headers.accept = null;\n        opts.parameters = parameters;\n        return this.http.put(url, opts).then((result) => {\n            if (!result.isSuccess) {\n                throw result;\n            }\n            return;\n        });\n    });\n  }\n\n  /**\n   * Call a DELETE request in the format the alarm ack API expects.\n   * @hidden\n   */\n  private async httpDelete(url: string, parameters = {} as IHash<string>): Promise<void> {\n      return this.getOptions().then((opts) => {\n          opts.headers['content-type'] = 'application/x-www-form-urlencoded';\n          opts.headers.accept = null;\n          opts.parameters = parameters;\n          return this.http.httpDelete(url, opts).then((result) => {\n              if (!result.isSuccess) {\n                  throw result;\n              }\n              return;\n          });\n      });\n  }\n\n  /**\n   * Get the path to the alarms endpoint for the appropriate API version.\n   * @hidden\n   */\n  private pathToAlarmsEndpoint() {\n    return this.getApiVersion() === 2 ? 'api/v2/alarms' : 'rest/alarms';\n  }\n\n  /**\n   * Save a journal or sticky memo.\n   * @hidden\n   */\n  private async saveMemo(type: string, alarm: number|OnmsAlarm, body: string, user?: string): Promise<void> {\n    if (this.getApiVersion() === 1) {\n      throw new OnmsError('Save/Delete memo is only available in OpenNMS ' +\n          'versions that support the ReSTv2 API.');\n    }\n\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    const parameters = {} as IHash<string>;\n    parameters.body = body;\n    if (user !== undefined) {\n      parameters.user = user;\n    }\n    return this.put(this.pathToAlarmsEndpoint() + '/' + alarmId + '/' + type, parameters);\n  }\n\n  /**\n   * Delete a journal or sticky memo\n   * @hidden\n   */\n  private async deleteMemo(type: string, alarm: number|OnmsAlarm): Promise<void> {\n    if (this.getApiVersion() === 1) {\n      throw new OnmsError('Save/Delete memo is only available in OpenNMS ' +\n          'versions that support the ReSTv2 API.');\n    }\n\n    const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n    return this.httpDelete(this.pathToAlarmsEndpoint() + '/' + alarmId + '/' + type);\n  }\n\n  /**\n   * Retrieves the URL to the details page for the given alarm.\n   *\n   * @param {number|OnmsAlarm} alarm - The [[OnmsAlarm]] or alarm ID.\n   * @returns {URL} URL on the associated OpenNMS server for the alarm details page.\n   */\n  private getDetailsPage(alarm: number|OnmsAlarm): string {\n      const alarmId = (typeof(alarm) === 'number' ? alarm : alarm.id);\n      return this.http.server.resolveURL(`alarm/detail.htm`, {id: alarmId});\n  }\n}\n"]}]}