@agilemotion/oui-react-js 2.0.20 → 2.0.22

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.
@@ -1,333 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _react = _interopRequireDefault(require("react"));
8
- var _withWidth = require("material-ui/utils/withWidth");
9
- var _propTypes = _interopRequireDefault(require("prop-types"));
10
- var _Utils = _interopRequireDefault(require("../../Utils"));
11
- var _ViewPort = _interopRequireDefault(require("../layout/ViewPort"));
12
- var _reactRouterDom = require("react-router-dom");
13
- var _perfectScrollbar = _interopRequireDefault(require("perfect-scrollbar"));
14
- var _FoldingTabSidebar = _interopRequireDefault(require("./components/blackDashboard/sidebar/FoldingTabSidebar"));
15
- var _HomeNavbar = _interopRequireDefault(require("../navbars/HomeNavbar"));
16
- var _reactRedux = require("react-redux");
17
- var _DashboardStore = require("../../redux/store/DashboardStore");
18
- var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
19
- var _SocketManager = _interopRequireDefault(require("../SocketManager"));
20
- var _WindowViewPort = _interopRequireDefault(require("../layout/WindowViewPort"));
21
- require("./FoldingSideTabDashboard.css");
22
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
24
- let ps;
25
- const DATA_URL_PREFIX = 'data:image/png;base64,';
26
- function normalizeLogo(src) {
27
- if (!src) return undefined;
28
- const s = src.trim();
29
- if (/^data:/i.test(s)) {
30
- const dup = new RegExp("^(".concat(DATA_URL_PREFIX, ")+"), 'i');
31
- return s.replace(dup, DATA_URL_PREFIX);
32
- }
33
- return DATA_URL_PREFIX + s;
34
- }
35
- const FoldingSideTabDashboard = props => {
36
- const [navDrawerOpen, setNavDrawerOpen] = _react.default.useState(true);
37
- const [loading, setLoading] = _react.default.useState(true);
38
- const [activeColor, setActiveColor] = _react.default.useState('blue');
39
- const [secondaryThemeColor, setSecondaryThemeColor] = _react.default.useState('');
40
- const [primaryThemeColor, setPrimaryThemeColor] = _react.default.useState('');
41
- const [themeTextColor, setThemeTextColor] = _react.default.useState('');
42
- const [routes, setRoutes] = _react.default.useState([]);
43
- const [logo, setLogo] = _react.default.useState(normalizeLogo(props.logo));
44
- const [sidebarOpened, setSidebarOpened] = _react.default.useState(document.documentElement.className.indexOf('nav-open') !== -1);
45
- const [sidebarMini, setSidebarMini] = _react.default.useState(true);
46
- const [opacity, setOpacity] = _react.default.useState(0);
47
- const [windowPinned, setWindowPinned] = _react.default.useState(false);
48
- const dispatch = (0, _reactRedux.useDispatch)();
49
- const handleChangeRequestNavDrawer = () => {
50
- setNavDrawerOpen(!navDrawerOpen);
51
- };
52
- const handleBgClick = color => {
53
- setActiveColor(color);
54
- };
55
- _react.default.useEffect(() => {
56
- if (navigator.platform.indexOf('Win') > -1) {
57
- document.documentElement.classList.add('perfect-scrollbar-on');
58
- document.documentElement.classList.remove('perfect-scrollbar-off');
59
- let tables = document.querySelectorAll('.table-responsive');
60
- for (let i = 0; i < tables.length; i++) {
61
- ps = new _perfectScrollbar.default(tables[i]);
62
- }
63
- }
64
- window.addEventListener('scroll', showNavbarButton);
65
- });
66
- _react.default.useEffect(() => {
67
- if (props.width !== null && typeof props.width !== 'undefined') {
68
- setNavDrawerOpen(props.width === _withWidth.LARGE);
69
- }
70
- }, [props.width]);
71
- _react.default.useEffect(() => {
72
- _SocketManager.default.init();
73
- return () => {
74
- _SocketManager.default.disconnect();
75
- };
76
- }, []);
77
- _react.default.useEffect(() => {
78
- document.body.classList.add('white-content');
79
- if (navigator.platform.indexOf('Win') > -1) {
80
- //ps.destroy();
81
- //document.documentElement.className.add("perfect-scrollbar-off");
82
- //document.documentElement.classList.remove("perfect-scrollbar-on");
83
- }
84
- window.removeEventListener('scroll', showNavbarButton);
85
- setActiveColor('agility');
86
- setSecondaryThemeColor(props.settings.systemProfileDto.secondCorporateBrandColor);
87
- setPrimaryThemeColor(props.settings.systemProfileDto.firstCorporateBrandColor);
88
- setThemeTextColor(props.settings.systemProfileDto.themeTextColor);
89
- dispatch(_DashboardStore.actionCreators.setSecondaryThemeColor(props.settings.systemProfileDto.secondCorporateBrandColor));
90
- if (!_Utils.default.isNull(props.settings)) {
91
- let dashboardMenu = {};
92
- dashboardMenu.id = 'dashboard';
93
- dashboardMenu.menus = [];
94
- let myDashboardMenu = {};
95
- myDashboardMenu.id = 'myDashboard';
96
- myDashboardMenu.items = [];
97
- myDashboardMenu.attributes = {};
98
- myDashboardMenu.attributes.label = 'My Dashboards';
99
- dashboardMenu.menus.push(myDashboardMenu);
100
- if (!_Utils.default.isNull(props.settings.userDashboards)) {
101
- for (let i = 0; i < props.settings.userDashboards.length; i++) {
102
- let userDashboard = props.settings.userDashboards[i];
103
- let item = {};
104
- item.id = userDashboard.id;
105
- item.attributes = {};
106
- item.attributes.label = userDashboard.parameters.map.dashboardName;
107
- myDashboardMenu.items.push(item);
108
- }
109
- }
110
- let createNewMenu = {};
111
- createNewMenu.id = 'createNew';
112
- createNewMenu.items = [];
113
- createNewMenu.attributes = {};
114
- createNewMenu.attributes.label = 'Create New';
115
- dashboardMenu.menus.push(createNewMenu);
116
- if (!_Utils.default.isNull(props.settings.systemProfileDto.modules)) {
117
- for (let i = 0; i < props.settings.systemProfileDto.modules.length; i++) {
118
- let module = props.settings.systemProfileDto.modules[i];
119
- if (!_Utils.default.isNull(module.dashBoardMenuBar)) {
120
- for (let j = 0; j < module.dashBoardMenuBar.menus.length; j++) {
121
- let menu = module.dashBoardMenuBar.menus[j];
122
-
123
- // To keep the module classification, replace the line below with createNewMenu.items.push(menu)
124
- createNewMenu.items = createNewMenu.items.concat(menu.items);
125
- }
126
- }
127
- }
128
- }
129
- let newRoutes = [];
130
- let newRoute = {};
131
- if (_Utils.default.isNull(props.showDashboardMenu) || props.showDashboardMenu) {
132
- newRoute.name = 'Dashboard';
133
- newRoute.id = 'dashboard';
134
- newRoute.icon = 'fa fa-pie-chart';
135
- newRoute.layout = '/admin';
136
- newRoute.level = 0;
137
- newRoute.isParent = true;
138
- newRoutes.push(newRoute);
139
- }
140
- if (!_Utils.default.isNull(props.settings.systemProfileDto.modules)) {
141
- for (let i = 0; i < props.settings.systemProfileDto.modules.length; i++) {
142
- let module = props.settings.systemProfileDto.modules[i];
143
- let route = {};
144
- route.name = module.label;
145
- route.icon = module.icon;
146
- route.menu = module.menu;
147
- route.layout = '/admin';
148
- route.level = 0;
149
- if (module.menu) {
150
- route.collapse = true;
151
- route.state = module.name + 'Collapse';
152
- }
153
- newRoutes.push(route);
154
- }
155
- }
156
- if (props.settings.settingsMenu) {
157
- newRoute = {};
158
- newRoute.name = 'Settings';
159
- newRoute.icon = 'fa fa-cog';
160
- newRoute.layout = '/admin';
161
- newRoute.isParent = true;
162
- newRoute.collapse = true;
163
- newRoute.level = 0;
164
- newRoute.menu = ''; // TODO : set menu value
165
- newRoute.state = 'settingsMenuCollapse';
166
- newRoutes.push(newRoute);
167
- }
168
- setRoutes(newRoutes);
169
- props.settings.dashboardMenu = createNewMenu.items.length > 0 ? dashboardMenu : null;
170
- setLoading(false);
171
- }
172
- }, [props.settings]);
173
- const toggleSidebar = () => {
174
- document.documentElement.classList.toggle('nav-open');
175
- setSidebarOpened(!sidebarOpened);
176
- };
177
- const showNavbarButton = () => {
178
- if (document.documentElement.scrollTop > 50 || document.scrollingElement.scrollTop > 50) {
179
- setOpacity(1);
180
- } else if (document.documentElement.scrollTop <= 50 || document.scrollingElement.scrollTop <= 50) {
181
- setOpacity(0);
182
- }
183
- };
184
- const getRoutes = routes => {
185
- return routes.map((prop, key) => {
186
- if (prop.collapse) {
187
- return getRoutes(prop.views);
188
- }
189
- if (prop.layout === '/admin') {
190
- return /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
191
- path: prop.layout + prop.path,
192
- component: prop.component,
193
- key: key
194
- });
195
- } else {
196
- return null;
197
- }
198
- });
199
- };
200
- const getActiveRoute = routes => {
201
- let activeRoute = 'Dashboard';
202
- for (let i = 0; i < routes.length; i++) {
203
- if (routes[i].collapse && routes[i].views) {
204
- let collapseActiveRoute = getActiveRoute(routes[i].views);
205
- if (collapseActiveRoute !== activeRoute) {
206
- return collapseActiveRoute;
207
- }
208
- } else {
209
- if (window.location.href.indexOf(routes[i].layout + routes[i].path) !== -1) {
210
- return routes[i].name;
211
- }
212
- }
213
- }
214
- return activeRoute;
215
- };
216
- const handleActiveClick = color => {
217
- setActiveColor(color);
218
- };
219
- const handleMiniClick = () => {
220
- let notifyMessage = 'Sidebar mini ';
221
- if (document.body.classList.contains('sidebar-mini')) {
222
- setSidebarMini(false);
223
- notifyMessage += 'deactivated...';
224
- } else {
225
- setSidebarMini(true);
226
- notifyMessage += 'activated...';
227
- }
228
- let options = {};
229
- options = {
230
- place: 'tr',
231
- message: notifyMessage,
232
- type: 'primary',
233
- icon: 'tim-icons icon-bell-55',
234
- autoDismiss: 7
235
- };
236
- document.body.classList.toggle('sidebar-mini');
237
- };
238
- const closeSidebar = () => {
239
- setSidebarOpened(false);
240
- document.documentElement.classList.remove('nav-open');
241
- };
242
- function launchDashboard() {
243
- _ApplicationManager.default.closeAllViews();
244
- //applicationManager.navigate('/switch');
245
- _ApplicationManager.default.navigate('/view/dashboard');
246
- }
247
- return loading ? /*#__PURE__*/_react.default.createElement("div", null, "Loading...") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
248
- className: "wrapper",
249
- style: {
250
- height: '100%',
251
- overflow: 'hidden'
252
- }
253
- }, /*#__PURE__*/_react.default.createElement("div", {
254
- className: "navbar-minimize-fixed",
255
- style: {
256
- opacity: opacity
257
- }
258
- }, /*#__PURE__*/_react.default.createElement("button", {
259
- className: "minimize-sidebar btn btn-link btn-just-icon",
260
- onClick: handleMiniClick
261
- }, /*#__PURE__*/_react.default.createElement("i", {
262
- className: "tim-icons icon-align-center visible-on-sidebar-regular text-muted"
263
- }), /*#__PURE__*/_react.default.createElement("i", {
264
- className: "tim-icons icon-bullet-list-67 visible-on-sidebar-mini text-muted"
265
- })), ' '), ' ', /*#__PURE__*/_react.default.createElement(_FoldingTabSidebar.default, _extends({}, props, {
266
- routes: routes,
267
- activeColor: 'agility',
268
- secondaryThemeColor: secondaryThemeColor,
269
- activeRouteMenu: props.showDashboardMenu ? {
270
- id: 'dashboard',
271
- name: 'Dashboard'
272
- } : null,
273
- className: 'sidebar',
274
- dashboardLauncher: () => {
275
- launchDashboard();
276
- },
277
- appLogoPath: props.appLogoPath,
278
- logo: {
279
- outterLink: '',
280
- text: '',
281
- imgSrc: logo
282
- },
283
- logoStyle: props.logoStyle,
284
- closeSidebar: closeSidebar
285
- })), ' ', /*#__PURE__*/_react.default.createElement("div", {
286
- className: "main-panel",
287
- data: activeColor
288
- }, /*#__PURE__*/_react.default.createElement(_HomeNavbar.default, _extends({}, props, {
289
- color: primaryThemeColor,
290
- themeTextColor: themeTextColor,
291
- handleMiniClick: handleMiniClick,
292
- brandText: getActiveRoute(routes),
293
- sidebarOpened: sidebarOpened,
294
- avatar: props.avatar,
295
- settingsMenu: props.settings.settingsMenu,
296
- toggleSidebar: toggleSidebar,
297
- logoutCallBack: props.logoutCallBack
298
- })), ' ', /*#__PURE__*/_react.default.createElement("div", {
299
- className: "content",
300
- style: {
301
- height: "calc(100vh - 70px)",
302
- maxHeight: "calc(100vh - 70px)"
303
- }
304
- }, /*#__PURE__*/_react.default.createElement("div", {
305
- className: "content w-100 h-100 row no-margin no-padding"
306
- }, /*#__PURE__*/_react.default.createElement("div", {
307
- style: {
308
- width: windowPinned ? 'calc(100% - 320px)' : '100%',
309
- height: "100%",
310
- mxHeight: "100%",
311
- overflow: 'auto',
312
- paddingTop: '4px'
313
- }
314
- }, /*#__PURE__*/_react.default.createElement(_ViewPort.default, {
315
- windowPinned: windowPinned
316
- })), /*#__PURE__*/_react.default.createElement("div", {
317
- className: 'col no-margin no-padding',
318
- style: {
319
- width: windowPinned ? '320px' : '0',
320
- margin: '8px'
321
- }
322
- }, /*#__PURE__*/_react.default.createElement(_WindowViewPort.default, {
323
- stateChangeHandler: state => {
324
- setWindowPinned(state.pinned);
325
- }
326
- }))))), ' '));
327
- };
328
- FoldingSideTabDashboard.propTypes = {
329
- children: _propTypes.default.element,
330
- width: _propTypes.default.number
331
- };
332
- var _default = exports.default = FoldingSideTabDashboard;
333
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl93aXRoV2lkdGgiLCJfcHJvcFR5cGVzIiwiX1V0aWxzIiwiX1ZpZXdQb3J0IiwiX3JlYWN0Um91dGVyRG9tIiwiX3BlcmZlY3RTY3JvbGxiYXIiLCJfRm9sZGluZ1RhYlNpZGViYXIiLCJfSG9tZU5hdmJhciIsIl9yZWFjdFJlZHV4IiwiX0Rhc2hib2FyZFN0b3JlIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9Tb2NrZXRNYW5hZ2VyIiwiX1dpbmRvd1ZpZXdQb3J0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX2V4dGVuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJiaW5kIiwibiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInQiLCJyIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJwcyIsIkRBVEFfVVJMX1BSRUZJWCIsIm5vcm1hbGl6ZUxvZ28iLCJzcmMiLCJ1bmRlZmluZWQiLCJzIiwidHJpbSIsInRlc3QiLCJkdXAiLCJSZWdFeHAiLCJjb25jYXQiLCJyZXBsYWNlIiwiRm9sZGluZ1NpZGVUYWJEYXNoYm9hcmQiLCJwcm9wcyIsIm5hdkRyYXdlck9wZW4iLCJzZXROYXZEcmF3ZXJPcGVuIiwiUmVhY3QiLCJ1c2VTdGF0ZSIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiYWN0aXZlQ29sb3IiLCJzZXRBY3RpdmVDb2xvciIsInNlY29uZGFyeVRoZW1lQ29sb3IiLCJzZXRTZWNvbmRhcnlUaGVtZUNvbG9yIiwicHJpbWFyeVRoZW1lQ29sb3IiLCJzZXRQcmltYXJ5VGhlbWVDb2xvciIsInRoZW1lVGV4dENvbG9yIiwic2V0VGhlbWVUZXh0Q29sb3IiLCJyb3V0ZXMiLCJzZXRSb3V0ZXMiLCJsb2dvIiwic2V0TG9nbyIsInNpZGViYXJPcGVuZWQiLCJzZXRTaWRlYmFyT3BlbmVkIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGFzc05hbWUiLCJpbmRleE9mIiwic2lkZWJhck1pbmkiLCJzZXRTaWRlYmFyTWluaSIsIm9wYWNpdHkiLCJzZXRPcGFjaXR5Iiwid2luZG93UGlubmVkIiwic2V0V2luZG93UGlubmVkIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsImhhbmRsZUNoYW5nZVJlcXVlc3ROYXZEcmF3ZXIiLCJoYW5kbGVCZ0NsaWNrIiwiY29sb3IiLCJ1c2VFZmZlY3QiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsInRhYmxlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpIiwiUGVyZmVjdFNjcm9sbGJhciIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJzaG93TmF2YmFyQnV0dG9uIiwid2lkdGgiLCJMQVJHRSIsIlNvY2tldHMiLCJpbml0IiwiZGlzY29ubmVjdCIsImJvZHkiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2V0dGluZ3MiLCJzeXN0ZW1Qcm9maWxlRHRvIiwic2Vjb25kQ29ycG9yYXRlQnJhbmRDb2xvciIsImZpcnN0Q29ycG9yYXRlQnJhbmRDb2xvciIsImFjdGlvbkNyZWF0b3JzIiwiVXRpbHMiLCJpc051bGwiLCJkYXNoYm9hcmRNZW51IiwiaWQiLCJtZW51cyIsIm15RGFzaGJvYXJkTWVudSIsIml0ZW1zIiwiYXR0cmlidXRlcyIsImxhYmVsIiwicHVzaCIsInVzZXJEYXNoYm9hcmRzIiwidXNlckRhc2hib2FyZCIsIml0ZW0iLCJwYXJhbWV0ZXJzIiwibWFwIiwiZGFzaGJvYXJkTmFtZSIsImNyZWF0ZU5ld01lbnUiLCJtb2R1bGVzIiwibW9kdWxlIiwiZGFzaEJvYXJkTWVudUJhciIsImoiLCJtZW51IiwibmV3Um91dGVzIiwibmV3Um91dGUiLCJzaG93RGFzaGJvYXJkTWVudSIsIm5hbWUiLCJpY29uIiwibGF5b3V0IiwibGV2ZWwiLCJpc1BhcmVudCIsInJvdXRlIiwiY29sbGFwc2UiLCJzdGF0ZSIsInNldHRpbmdzTWVudSIsInRvZ2dsZVNpZGViYXIiLCJ0b2dnbGUiLCJzY3JvbGxUb3AiLCJzY3JvbGxpbmdFbGVtZW50IiwiZ2V0Um91dGVzIiwicHJvcCIsImtleSIsInZpZXdzIiwiY3JlYXRlRWxlbWVudCIsIlJvdXRlIiwicGF0aCIsImNvbXBvbmVudCIsImdldEFjdGl2ZVJvdXRlIiwiYWN0aXZlUm91dGUiLCJjb2xsYXBzZUFjdGl2ZVJvdXRlIiwibG9jYXRpb24iLCJocmVmIiwiaGFuZGxlQWN0aXZlQ2xpY2siLCJoYW5kbGVNaW5pQ2xpY2siLCJub3RpZnlNZXNzYWdlIiwiY29udGFpbnMiLCJvcHRpb25zIiwicGxhY2UiLCJtZXNzYWdlIiwidHlwZSIsImF1dG9EaXNtaXNzIiwiY2xvc2VTaWRlYmFyIiwibGF1bmNoRGFzaGJvYXJkIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiY2xvc2VBbGxWaWV3cyIsIm5hdmlnYXRlIiwiRnJhZ21lbnQiLCJzdHlsZSIsImhlaWdodCIsIm92ZXJmbG93Iiwib25DbGljayIsImFjdGl2ZVJvdXRlTWVudSIsImRhc2hib2FyZExhdW5jaGVyIiwiYXBwTG9nb1BhdGgiLCJvdXR0ZXJMaW5rIiwidGV4dCIsImltZ1NyYyIsImxvZ29TdHlsZSIsImRhdGEiLCJicmFuZFRleHQiLCJhdmF0YXIiLCJsb2dvdXRDYWxsQmFjayIsIm1heEhlaWdodCIsIm14SGVpZ2h0IiwicGFkZGluZ1RvcCIsIm1hcmdpbiIsInN0YXRlQ2hhbmdlSGFuZGxlciIsInBpbm5lZCIsInByb3BUeXBlcyIsImNoaWxkcmVuIiwiUHJvcFR5cGVzIiwiZWxlbWVudCIsIm51bWJlciIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kYXNoYm9hcmQvRm9sZGluZ1NpZGVUYWJEYXNoYm9hcmQuYmNrLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtMQVJHRX0gZnJvbSAnbWF0ZXJpYWwtdWkvdXRpbHMvd2l0aFdpZHRoJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xuaW1wb3J0IFZpZXdQb3J0IGZyb20gJy4uL2xheW91dC9WaWV3UG9ydCc7XG5pbXBvcnQge1JvdXRlfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCBQZXJmZWN0U2Nyb2xsYmFyIGZyb20gJ3BlcmZlY3Qtc2Nyb2xsYmFyJztcbmltcG9ydCBGb2xkaW5nVGFiU2lkZWJhciBmcm9tICcuL2NvbXBvbmVudHMvYmxhY2tEYXNoYm9hcmQvc2lkZWJhci9Gb2xkaW5nVGFiU2lkZWJhcic7XG5pbXBvcnQgSG9tZU5hdmJhciBmcm9tICcuLi9uYXZiYXJzL0hvbWVOYXZiYXInO1xuaW1wb3J0IHt1c2VEaXNwYXRjaH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHthY3Rpb25DcmVhdG9yc30gZnJvbSAnLi4vLi4vcmVkdXgvc3RvcmUvRGFzaGJvYXJkU3RvcmUnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFNvY2tldHMgZnJvbSAnLi4vU29ja2V0TWFuYWdlcic7XG5pbXBvcnQgV2luZG93Vmlld1BvcnQgZnJvbSAnLi4vbGF5b3V0L1dpbmRvd1ZpZXdQb3J0JztcbmltcG9ydCBcIi4vRm9sZGluZ1NpZGVUYWJEYXNoYm9hcmQuY3NzXCJcblxubGV0IHBzO1xuY29uc3QgREFUQV9VUkxfUFJFRklYID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnO1xuXG5mdW5jdGlvbiBub3JtYWxpemVMb2dvKHNyYykge1xuICAgIGlmICghc3JjKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHMgPSBzcmMudHJpbSgpO1xuXG4gICAgaWYgKC9eZGF0YTovaS50ZXN0KHMpKSB7XG4gICAgICAgIGNvbnN0IGR1cCA9IG5ldyBSZWdFeHAoYF4oJHtEQVRBX1VSTF9QUkVGSVh9KStgLCAnaScpO1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKGR1cCwgREFUQV9VUkxfUFJFRklYKTtcbiAgICB9XG5cbiAgICByZXR1cm4gREFUQV9VUkxfUFJFRklYICsgcztcbn1cblxuY29uc3QgRm9sZGluZ1NpZGVUYWJEYXNoYm9hcmQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbbmF2RHJhd2VyT3Blbiwgc2V0TmF2RHJhd2VyT3Blbl0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbYWN0aXZlQ29sb3IsIHNldEFjdGl2ZUNvbG9yXSA9IFJlYWN0LnVzZVN0YXRlKCdibHVlJyk7XG4gICAgY29uc3QgW3NlY29uZGFyeVRoZW1lQ29sb3IsIHNldFNlY29uZGFyeVRoZW1lQ29sb3JdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtwcmltYXJ5VGhlbWVDb2xvciwgc2V0UHJpbWFyeVRoZW1lQ29sb3JdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFt0aGVtZVRleHRDb2xvciwgc2V0VGhlbWVUZXh0Q29sb3JdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtyb3V0ZXMsIHNldFJvdXRlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2xvZ28sIHNldExvZ29dID0gUmVhY3QudXNlU3RhdGUobm9ybWFsaXplTG9nbyhwcm9wcy5sb2dvKSk7XG4gICAgY29uc3QgW3NpZGViYXJPcGVuZWQsIHNldFNpZGViYXJPcGVuZWRdID0gUmVhY3QudXNlU3RhdGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKCduYXYtb3BlbicpICE9PSAtMSk7XG4gICAgY29uc3QgW3NpZGViYXJNaW5pLCBzZXRTaWRlYmFyTWluaV0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbb3BhY2l0eSwgc2V0T3BhY2l0eV0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbd2luZG93UGlubmVkLCBzZXRXaW5kb3dQaW5uZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuXG4gICAgY29uc3QgaGFuZGxlQ2hhbmdlUmVxdWVzdE5hdkRyYXdlciA9ICgpID0+IHtcbiAgICAgICAgc2V0TmF2RHJhd2VyT3BlbighbmF2RHJhd2VyT3Blbik7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUJnQ2xpY2sgPSBjb2xvciA9PiB7XG4gICAgICAgIHNldEFjdGl2ZUNvbG9yKGNvbG9yKTtcbiAgICB9O1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcblxuICAgICAgICBpZiAobmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoJ1dpbicpID4gLTEpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwZXJmZWN0LXNjcm9sbGJhci1vbicpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3BlcmZlY3Qtc2Nyb2xsYmFyLW9mZicpO1xuICAgICAgICAgICAgbGV0IHRhYmxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWJsZS1yZXNwb25zaXZlJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHBzID0gbmV3IFBlcmZlY3RTY3JvbGxiYXIodGFibGVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2hvd05hdmJhckJ1dHRvbik7XG4gICAgfSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMud2lkdGggIT09IG51bGwgJiYgdHlwZW9mIHByb3BzLndpZHRoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgc2V0TmF2RHJhd2VyT3Blbihwcm9wcy53aWR0aCA9PT0gTEFSR0UpO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLndpZHRoXSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBTb2NrZXRzLmluaXQoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIFNvY2tldHMuZGlzY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnd2hpdGUtY29udGVudCcpO1xuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZignV2luJykgPiAtMSkge1xuICAgICAgICAgICAgLy9wcy5kZXN0cm95KCk7XG4gICAgICAgICAgICAvL2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc05hbWUuYWRkKFwicGVyZmVjdC1zY3JvbGxiYXItb2ZmXCIpO1xuICAgICAgICAgICAgLy9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcInBlcmZlY3Qtc2Nyb2xsYmFyLW9uXCIpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2hvd05hdmJhckJ1dHRvbik7XG5cbiAgICAgICAgc2V0QWN0aXZlQ29sb3IoJ2FnaWxpdHknKTtcbiAgICAgICAgc2V0U2Vjb25kYXJ5VGhlbWVDb2xvcihwcm9wcy5zZXR0aW5ncy5zeXN0ZW1Qcm9maWxlRHRvLnNlY29uZENvcnBvcmF0ZUJyYW5kQ29sb3IpO1xuICAgICAgICBzZXRQcmltYXJ5VGhlbWVDb2xvcihwcm9wcy5zZXR0aW5ncy5zeXN0ZW1Qcm9maWxlRHRvLmZpcnN0Q29ycG9yYXRlQnJhbmRDb2xvcik7XG4gICAgICAgIHNldFRoZW1lVGV4dENvbG9yKHByb3BzLnNldHRpbmdzLnN5c3RlbVByb2ZpbGVEdG8udGhlbWVUZXh0Q29sb3IpO1xuICAgICAgICBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5zZXRTZWNvbmRhcnlUaGVtZUNvbG9yKHByb3BzLnNldHRpbmdzLnN5c3RlbVByb2ZpbGVEdG8uc2Vjb25kQ29ycG9yYXRlQnJhbmRDb2xvcikpO1xuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnNldHRpbmdzKSkge1xuICAgICAgICAgICAgbGV0IGRhc2hib2FyZE1lbnUgPSB7fTtcbiAgICAgICAgICAgIGRhc2hib2FyZE1lbnUuaWQgPSAnZGFzaGJvYXJkJztcbiAgICAgICAgICAgIGRhc2hib2FyZE1lbnUubWVudXMgPSBbXTtcblxuICAgICAgICAgICAgbGV0IG15RGFzaGJvYXJkTWVudSA9IHt9O1xuICAgICAgICAgICAgbXlEYXNoYm9hcmRNZW51LmlkID0gJ215RGFzaGJvYXJkJztcbiAgICAgICAgICAgIG15RGFzaGJvYXJkTWVudS5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgbXlEYXNoYm9hcmRNZW51LmF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICAgIG15RGFzaGJvYXJkTWVudS5hdHRyaWJ1dGVzLmxhYmVsID0gJ015IERhc2hib2FyZHMnO1xuICAgICAgICAgICAgZGFzaGJvYXJkTWVudS5tZW51cy5wdXNoKG15RGFzaGJvYXJkTWVudSk7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnNldHRpbmdzLnVzZXJEYXNoYm9hcmRzKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMuc2V0dGluZ3MudXNlckRhc2hib2FyZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVzZXJEYXNoYm9hcmQgPSBwcm9wcy5zZXR0aW5ncy51c2VyRGFzaGJvYXJkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5pZCA9IHVzZXJEYXNoYm9hcmQuaWQ7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmF0dHJpYnV0ZXMubGFiZWwgPSB1c2VyRGFzaGJvYXJkLnBhcmFtZXRlcnMubWFwLmRhc2hib2FyZE5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgbXlEYXNoYm9hcmRNZW51Lml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY3JlYXRlTmV3TWVudSA9IHt9O1xuICAgICAgICAgICAgY3JlYXRlTmV3TWVudS5pZCA9ICdjcmVhdGVOZXcnO1xuICAgICAgICAgICAgY3JlYXRlTmV3TWVudS5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgY3JlYXRlTmV3TWVudS5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgICAgICBjcmVhdGVOZXdNZW51LmF0dHJpYnV0ZXMubGFiZWwgPSAnQ3JlYXRlIE5ldyc7XG4gICAgICAgICAgICBkYXNoYm9hcmRNZW51Lm1lbnVzLnB1c2goY3JlYXRlTmV3TWVudSk7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnNldHRpbmdzLnN5c3RlbVByb2ZpbGVEdG8ubW9kdWxlcykpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLnNldHRpbmdzLnN5c3RlbVByb2ZpbGVEdG8ubW9kdWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbW9kdWxlID0gcHJvcHMuc2V0dGluZ3Muc3lzdGVtUHJvZmlsZUR0by5tb2R1bGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtb2R1bGUuZGFzaEJvYXJkTWVudUJhcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbW9kdWxlLmRhc2hCb2FyZE1lbnVCYXIubWVudXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWVudSA9IG1vZHVsZS5kYXNoQm9hcmRNZW51QmFyLm1lbnVzW2pdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG8ga2VlcCB0aGUgbW9kdWxlIGNsYXNzaWZpY2F0aW9uLCByZXBsYWNlIHRoZSBsaW5lIGJlbG93IHdpdGggY3JlYXRlTmV3TWVudS5pdGVtcy5wdXNoKG1lbnUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTmV3TWVudS5pdGVtcyA9IGNyZWF0ZU5ld01lbnUuaXRlbXMuY29uY2F0KG1lbnUuaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbmV3Um91dGVzID0gW107XG4gICAgICAgICAgICBsZXQgbmV3Um91dGUgPSB7fTtcblxuICAgICAgICAgICAgaWYoVXRpbHMuaXNOdWxsKHByb3BzLnNob3dEYXNoYm9hcmRNZW51KSB8fCBwcm9wcy5zaG93RGFzaGJvYXJkTWVudSkge1xuICAgICAgICAgICAgICAgIG5ld1JvdXRlLm5hbWUgPSAnRGFzaGJvYXJkJztcbiAgICAgICAgICAgICAgICBuZXdSb3V0ZS5pZCA9ICdkYXNoYm9hcmQnO1xuICAgICAgICAgICAgICAgIG5ld1JvdXRlLmljb24gPSAnZmEgZmEtcGllLWNoYXJ0JztcbiAgICAgICAgICAgICAgICBuZXdSb3V0ZS5sYXlvdXQgPSAnL2FkbWluJztcbiAgICAgICAgICAgICAgICBuZXdSb3V0ZS5sZXZlbCA9IDA7XG4gICAgICAgICAgICAgICAgbmV3Um91dGUuaXNQYXJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG5ld1JvdXRlcy5wdXNoKG5ld1JvdXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMuc2V0dGluZ3Muc3lzdGVtUHJvZmlsZUR0by5tb2R1bGVzKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMuc2V0dGluZ3Muc3lzdGVtUHJvZmlsZUR0by5tb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtb2R1bGUgPSBwcm9wcy5zZXR0aW5ncy5zeXN0ZW1Qcm9maWxlRHRvLm1vZHVsZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGxldCByb3V0ZSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlLm5hbWUgPSBtb2R1bGUubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlLmljb24gPSBtb2R1bGUuaWNvbjtcbiAgICAgICAgICAgICAgICAgICAgcm91dGUubWVudSA9IG1vZHVsZS5tZW51O1xuICAgICAgICAgICAgICAgICAgICByb3V0ZS5sYXlvdXQgPSAnL2FkbWluJztcbiAgICAgICAgICAgICAgICAgICAgcm91dGUubGV2ZWwgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2R1bGUubWVudSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGUuY29sbGFwc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGUuc3RhdGUgPSBtb2R1bGUubmFtZSArICdDb2xsYXBzZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBuZXdSb3V0ZXMucHVzaChyb3V0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvcHMuc2V0dGluZ3Muc2V0dGluZ3NNZW51KSB7XG4gICAgICAgICAgICAgICAgbmV3Um91dGUgPSB7fTtcblxuICAgICAgICAgICAgICAgIG5ld1JvdXRlLm5hbWUgPSAnU2V0dGluZ3MnO1xuICAgICAgICAgICAgICAgIG5ld1JvdXRlLmljb24gPSAnZmEgZmEtY29nJztcbiAgICAgICAgICAgICAgICBuZXdSb3V0ZS5sYXlvdXQgPSAnL2FkbWluJztcbiAgICAgICAgICAgICAgICBuZXdSb3V0ZS5pc1BhcmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbmV3Um91dGUuY29sbGFwc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG5ld1JvdXRlLmxldmVsID0gMDtcbiAgICAgICAgICAgICAgICBuZXdSb3V0ZS5tZW51ID0gJyc7IC8vIFRPRE8gOiBzZXQgbWVudSB2YWx1ZVxuICAgICAgICAgICAgICAgIG5ld1JvdXRlLnN0YXRlID0gJ3NldHRpbmdzTWVudUNvbGxhcHNlJztcblxuICAgICAgICAgICAgICAgIG5ld1JvdXRlcy5wdXNoKG5ld1JvdXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0Um91dGVzKG5ld1JvdXRlcyk7XG5cbiAgICAgICAgICAgIHByb3BzLnNldHRpbmdzLmRhc2hib2FyZE1lbnUgPSBjcmVhdGVOZXdNZW51Lml0ZW1zLmxlbmd0aCA+IDAgPyBkYXNoYm9hcmRNZW51IDogbnVsbDtcbiAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnNldHRpbmdzXSk7XG5cbiAgICBjb25zdCB0b2dnbGVTaWRlYmFyID0gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnbmF2LW9wZW4nKTtcbiAgICAgICAgc2V0U2lkZWJhck9wZW5lZCghc2lkZWJhck9wZW5lZCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dOYXZiYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPiA1MCB8fFxuICAgICAgICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPiA1MFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHNldE9wYWNpdHkoMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDw9IDUwIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA8PSA1MFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHNldE9wYWNpdHkoMCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Um91dGVzID0gKHJvdXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gcm91dGVzLm1hcCgocHJvcCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvcC5jb2xsYXBzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRSb3V0ZXMocHJvcC52aWV3cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9wLmxheW91dCA9PT0gJy9hZG1pbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9e3Byb3AubGF5b3V0ICsgcHJvcC5wYXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PXtwcm9wLmNvbXBvbmVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0QWN0aXZlUm91dGUgPSAocm91dGVzKSA9PiB7XG4gICAgICAgIGxldCBhY3RpdmVSb3V0ZSA9ICdEYXNoYm9hcmQnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJvdXRlc1tpXS5jb2xsYXBzZSAmJiByb3V0ZXNbaV0udmlld3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29sbGFwc2VBY3RpdmVSb3V0ZSA9IGdldEFjdGl2ZVJvdXRlKHJvdXRlc1tpXS52aWV3cyk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbGxhcHNlQWN0aXZlUm91dGUgIT09IGFjdGl2ZVJvdXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsYXBzZUFjdGl2ZVJvdXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHJvdXRlc1tpXS5sYXlvdXQgKyByb3V0ZXNbaV0ucGF0aCkgIT09IC0xXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3V0ZXNbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZVJvdXRlO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVBY3RpdmVDbGljayA9IChjb2xvcikgPT4ge1xuICAgICAgICBzZXRBY3RpdmVDb2xvcihjb2xvcik7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZU1pbmlDbGljayA9ICgpID0+IHtcbiAgICAgICAgbGV0IG5vdGlmeU1lc3NhZ2UgPSAnU2lkZWJhciBtaW5pICc7XG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnc2lkZWJhci1taW5pJykpIHtcbiAgICAgICAgICAgIHNldFNpZGViYXJNaW5pKGZhbHNlKTtcbiAgICAgICAgICAgIG5vdGlmeU1lc3NhZ2UgKz0gJ2RlYWN0aXZhdGVkLi4uJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNpZGViYXJNaW5pKHRydWUpO1xuICAgICAgICAgICAgbm90aWZ5TWVzc2FnZSArPSAnYWN0aXZhdGVkLi4uJztcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3B0aW9ucyA9IHt9O1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgcGxhY2U6ICd0cicsXG4gICAgICAgICAgICBtZXNzYWdlOiBub3RpZnlNZXNzYWdlLFxuICAgICAgICAgICAgdHlwZTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgaWNvbjogJ3RpbS1pY29ucyBpY29uLWJlbGwtNTUnLFxuICAgICAgICAgICAgYXV0b0Rpc21pc3M6IDcsXG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnc2lkZWJhci1taW5pJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb3NlU2lkZWJhciA9ICgpID0+IHtcbiAgICAgICAgc2V0U2lkZWJhck9wZW5lZChmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCduYXYtb3BlbicpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsYXVuY2hEYXNoYm9hcmQoKSB7XG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5jbG9zZUFsbFZpZXdzKCk7XG4gICAgICAgIC8vYXBwbGljYXRpb25NYW5hZ2VyLm5hdmlnYXRlKCcvc3dpdGNoJyk7XG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5uYXZpZ2F0ZSgnL3ZpZXcvZGFzaGJvYXJkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgbG9hZGluZyA/XG4gICAgICAgICAgICA8ZGl2PkxvYWRpbmcuLi48L2Rpdj5cbiAgICAgICAgICAgIDpcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3cmFwcGVyXCIgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJuYXZiYXItbWluaW1pemUtZml4ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiBvcGFjaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbmltaXplLXNpZGViYXIgYnRuIGJ0bi1saW5rIGJ0bi1qdXN0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1pbmlDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJ0aW0taWNvbnMgaWNvbi1hbGlnbi1jZW50ZXIgdmlzaWJsZS1vbi1zaWRlYmFyLXJlZ3VsYXIgdGV4dC1tdXRlZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJ0aW0taWNvbnMgaWNvbi1idWxsZXQtbGlzdC02NyB2aXNpYmxlLW9uLXNpZGViYXItbWluaSB0ZXh0LW11dGVkXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAgPEZvbGRpbmdUYWJTaWRlYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXM9e3JvdXRlc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvbG9yPXsnYWdpbGl0eSd9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlUaGVtZUNvbG9yPXtzZWNvbmRhcnlUaGVtZUNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlUm91dGVNZW51PXtwcm9wcy5zaG93RGFzaGJvYXJkTWVudSA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2Rhc2hib2FyZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0Rhc2hib2FyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnc2lkZWJhcid9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRMYXVuY2hlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaERhc2hib2FyZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcExvZ29QYXRoPXtwcm9wcy5hcHBMb2dvUGF0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ289e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXR0ZXJMaW5rOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdTcmM6IGxvZ28sXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nb1N0eWxlPXtwcm9wcy5sb2dvU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVNpZGViYXI9e2Nsb3NlU2lkZWJhcn1cbiAgICAgICAgICAgICAgICAgICAgLz57JyAnfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1haW4tcGFuZWxcIiBkYXRhPXthY3RpdmVDb2xvcn0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SG9tZU5hdmJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJpbWFyeVRoZW1lQ29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVUZXh0Q29sb3I9e3RoZW1lVGV4dENvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU1pbmlDbGljaz17aGFuZGxlTWluaUNsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5kVGV4dD17Z2V0QWN0aXZlUm91dGUocm91dGVzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlYmFyT3BlbmVkPXtzaWRlYmFyT3BlbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhcj17cHJvcHMuYXZhdGFyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzTWVudT17cHJvcHMuc2V0dGluZ3Muc2V0dGluZ3NNZW51fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZVNpZGViYXI9e3RvZ2dsZVNpZGViYXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nb3V0Q2FsbEJhY2s9e3Byb3BzLmxvZ291dENhbGxCYWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz57JyAnfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbnRcIiBzdHlsZT17e2hlaWdodDogXCJjYWxjKDEwMHZoIC0gNzBweClcIiwgbWF4SGVpZ2h0OiBcImNhbGMoMTAwdmggLSA3MHB4KVwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50IHctMTAwIGgtMTAwIHJvdyBuby1tYXJnaW4gbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2luZG93UGlubmVkID8gJ2NhbGMoMTAwJSAtIDMyMHB4KScgOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXhIZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXdQb3J0IHdpbmRvd1Bpbm5lZD17d2luZG93UGlubmVkfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2NvbCBuby1tYXJnaW4gbm8tcGFkZGluZyd9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2luZG93UGlubmVkID8gJzMyMHB4JyA6ICcwJywgbWFyZ2luOiAnOHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxXaW5kb3dWaWV3UG9ydCBzdGF0ZUNoYW5nZUhhbmRsZXI9eyhzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFdpbmRvd1Bpbm5lZChzdGF0ZS5waW5uZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7Lyo8SG9tZUZvb3RlciBmbHVpZCAvPiB7XCIgXCJ9Ki99XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG5cbiAgICApO1xufTtcblxuRm9sZGluZ1NpZGVUYWJEYXNoYm9hcmQucHJvcFR5cGVzID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudCxcbiAgICB3aWR0aDogUHJvcFR5cGVzLm51bWJlclxufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9sZGluZ1NpZGVUYWJEYXNoYm9hcmQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGlCQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxrQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsV0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsZUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsbUJBQUEsR0FBQVosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFZLGNBQUEsR0FBQWIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFhLGVBQUEsR0FBQWQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQXNDLFNBQUFELHVCQUFBZSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsU0FBQSxXQUFBQSxRQUFBLEdBQUFDLE1BQUEsQ0FBQUMsTUFBQSxHQUFBRCxNQUFBLENBQUFDLE1BQUEsQ0FBQUMsSUFBQSxlQUFBQyxDQUFBLGFBQUFQLENBQUEsTUFBQUEsQ0FBQSxHQUFBUSxTQUFBLENBQUFDLE1BQUEsRUFBQVQsQ0FBQSxVQUFBVSxDQUFBLEdBQUFGLFNBQUEsQ0FBQVIsQ0FBQSxZQUFBVyxDQUFBLElBQUFELENBQUEsT0FBQUUsY0FBQSxDQUFBQyxJQUFBLENBQUFILENBQUEsRUFBQUMsQ0FBQSxNQUFBSixDQUFBLENBQUFJLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLGFBQUFKLENBQUEsS0FBQUosUUFBQSxDQUFBVyxLQUFBLE9BQUFOLFNBQUE7QUFFdEMsSUFBSU8sRUFBRTtBQUNOLE1BQU1DLGVBQWUsR0FBRyx3QkFBd0I7QUFFaEQsU0FBU0MsYUFBYUEsQ0FBQ0MsR0FBRyxFQUFFO0VBQ3hCLElBQUksQ0FBQ0EsR0FBRyxFQUFFLE9BQU9DLFNBQVM7RUFDMUIsTUFBTUMsQ0FBQyxHQUFHRixHQUFHLENBQUNHLElBQUksQ0FBQyxDQUFDO0VBRXBCLElBQUksU0FBUyxDQUFDQyxJQUFJLENBQUNGLENBQUMsQ0FBQyxFQUFFO0lBQ25CLE1BQU1HLEdBQUcsR0FBRyxJQUFJQyxNQUFNLE1BQUFDLE1BQUEsQ0FBTVQsZUFBZSxTQUFNLEdBQUcsQ0FBQztJQUNyRCxPQUFPSSxDQUFDLENBQUNNLE9BQU8sQ0FBQ0gsR0FBRyxFQUFFUCxlQUFlLENBQUM7RUFDMUM7RUFFQSxPQUFPQSxlQUFlLEdBQUdJLENBQUM7QUFDOUI7QUFFQSxNQUFNTyx1QkFBdUIsR0FBSUMsS0FBSyxJQUFLO0VBQ3ZDLE1BQU0sQ0FBQ0MsYUFBYSxFQUFFQyxnQkFBZ0IsQ0FBQyxHQUFHQyxjQUFLLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDOUQsTUFBTSxDQUFDQyxPQUFPLEVBQUVDLFVBQVUsQ0FBQyxHQUFHSCxjQUFLLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDbEQsTUFBTSxDQUFDRyxXQUFXLEVBQUVDLGNBQWMsQ0FBQyxHQUFHTCxjQUFLLENBQUNDLFFBQVEsQ0FBQyxNQUFNLENBQUM7RUFDNUQsTUFBTSxDQUFDSyxtQkFBbUIsRUFBRUMsc0JBQXNCLENBQUMsR0FBR1AsY0FBSyxDQUFDQyxRQUFRLENBQUMsRUFBRSxDQUFDO0VBQ3hFLE1BQU0sQ0FBQ08saUJBQWlCLEVBQUVDLG9CQUFvQixDQUFDLEdBQUdULGNBQUssQ0FBQ0MsUUFBUSxDQUFDLEVBQUUsQ0FBQztFQUNwRSxNQUFNLENBQUNTLGNBQWMsRUFBRUMsaUJBQWlCLENBQUMsR0FBR1gsY0FBSyxDQUFDQyxRQUFRLENBQUMsRUFBRSxDQUFDO0VBQzlELE1BQU0sQ0FBQ1csTUFBTSxFQUFFQyxTQUFTLENBQUMsR0FBR2IsY0FBSyxDQUFDQyxRQUFRLENBQUMsRUFBRSxDQUFDO0VBQzlDLE1BQU0sQ0FBQ2EsSUFBSSxFQUFFQyxPQUFPLENBQUMsR0FBR2YsY0FBSyxDQUFDQyxRQUFRLENBQUNmLGFBQWEsQ0FBQ1csS0FBSyxDQUFDaUIsSUFBSSxDQUFDLENBQUM7RUFDakUsTUFBTSxDQUFDRSxhQUFhLEVBQUVDLGdCQUFnQixDQUFDLEdBQUdqQixjQUFLLENBQUNDLFFBQVEsQ0FBQ2lCLFFBQVEsQ0FBQ0MsZUFBZSxDQUFDQyxTQUFTLENBQUNDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUN2SCxNQUFNLENBQUNDLFdBQVcsRUFBRUMsY0FBYyxDQUFDLEdBQUd2QixjQUFLLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDMUQsTUFBTSxDQUFDdUIsT0FBTyxFQUFFQyxVQUFVLENBQUMsR0FBR3pCLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQztFQUMvQyxNQUFNLENBQUN5QixZQUFZLEVBQUVDLGVBQWUsQ0FBQyxHQUFHM0IsY0FBSyxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFDO0VBRTdELE1BQU0yQixRQUFRLEdBQUcsSUFBQUMsdUJBQVcsRUFBQyxDQUFDO0VBRTlCLE1BQU1DLDRCQUE0QixHQUFHQSxDQUFBLEtBQU07SUFDdkMvQixnQkFBZ0IsQ0FBQyxDQUFDRCxhQUFhLENBQUM7RUFDcEMsQ0FBQztFQUVELE1BQU1pQyxhQUFhLEdBQUdDLEtBQUssSUFBSTtJQUMzQjNCLGNBQWMsQ0FBQzJCLEtBQUssQ0FBQztFQUN6QixDQUFDO0VBRURoQyxjQUFLLENBQUNpQyxTQUFTLENBQUMsTUFBTTtJQUVsQixJQUFJQyxTQUFTLENBQUNDLFFBQVEsQ0FBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO01BQ3hDSCxRQUFRLENBQUNDLGVBQWUsQ0FBQ2lCLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLHNCQUFzQixDQUFDO01BQzlEbkIsUUFBUSxDQUFDQyxlQUFlLENBQUNpQixTQUFTLENBQUNFLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQztNQUNsRSxJQUFJQyxNQUFNLEdBQUdyQixRQUFRLENBQUNzQixnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQztNQUMzRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsTUFBTSxDQUFDN0QsTUFBTSxFQUFFK0QsQ0FBQyxFQUFFLEVBQUU7UUFDcEN6RCxFQUFFLEdBQUcsSUFBSTBELHlCQUFnQixDQUFDSCxNQUFNLENBQUNFLENBQUMsQ0FBQyxDQUFDO01BQ3hDO0lBQ0o7SUFDQUUsTUFBTSxDQUFDQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVDLGdCQUFnQixDQUFDO0VBQ3ZELENBQUMsQ0FBQztFQUVGN0MsY0FBSyxDQUFDaUMsU0FBUyxDQUFDLE1BQU07SUFDbEIsSUFBSXBDLEtBQUssQ0FBQ2lELEtBQUssS0FBSyxJQUFJLElBQUksT0FBT2pELEtBQUssQ0FBQ2lELEtBQUssS0FBSyxXQUFXLEVBQUU7TUFDNUQvQyxnQkFBZ0IsQ0FBQ0YsS0FBSyxDQUFDaUQsS0FBSyxLQUFLQyxnQkFBSyxDQUFDO0lBQzNDO0VBQ0osQ0FBQyxFQUFFLENBQUNsRCxLQUFLLENBQUNpRCxLQUFLLENBQUMsQ0FBQztFQUVqQjlDLGNBQUssQ0FBQ2lDLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCZSxzQkFBTyxDQUFDQyxJQUFJLENBQUMsQ0FBQztJQUNkLE9BQU8sTUFBTTtNQUNURCxzQkFBTyxDQUFDRSxVQUFVLENBQUMsQ0FBQztJQUN4QixDQUFDO0VBQ0wsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVObEQsY0FBSyxDQUFDaUMsU0FBUyxDQUFDLE1BQU07SUFDbEJmLFFBQVEsQ0FBQ2lDLElBQUksQ0FBQ2YsU0FBUyxDQUFDQyxHQUFHLENBQUMsZUFBZSxDQUFDO0lBRTVDLElBQUlILFNBQVMsQ0FBQ0MsUUFBUSxDQUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDeEM7TUFDQTtNQUNBO0lBQUE7SUFJSnNCLE1BQU0sQ0FBQ1MsbUJBQW1CLENBQUMsUUFBUSxFQUFFUCxnQkFBZ0IsQ0FBQztJQUV0RHhDLGNBQWMsQ0FBQyxTQUFTLENBQUM7SUFDekJFLHNCQUFzQixDQUFDVixLQUFLLENBQUN3RCxRQUFRLENBQUNDLGdCQUFnQixDQUFDQyx5QkFBeUIsQ0FBQztJQUNqRjlDLG9CQUFvQixDQUFDWixLQUFLLENBQUN3RCxRQUFRLENBQUNDLGdCQUFnQixDQUFDRSx3QkFBd0IsQ0FBQztJQUM5RTdDLGlCQUFpQixDQUFDZCxLQUFLLENBQUN3RCxRQUFRLENBQUNDLGdCQUFnQixDQUFDNUMsY0FBYyxDQUFDO0lBQ2pFa0IsUUFBUSxDQUFDNkIsOEJBQWMsQ0FBQ2xELHNCQUFzQixDQUFDVixLQUFLLENBQUN3RCxRQUFRLENBQUNDLGdCQUFnQixDQUFDQyx5QkFBeUIsQ0FBQyxDQUFDO0lBRTFHLElBQUksQ0FBQ0csY0FBSyxDQUFDQyxNQUFNLENBQUM5RCxLQUFLLENBQUN3RCxRQUFRLENBQUMsRUFBRTtNQUMvQixJQUFJTyxhQUFhLEdBQUcsQ0FBQyxDQUFDO01BQ3RCQSxhQUFhLENBQUNDLEVBQUUsR0FBRyxXQUFXO01BQzlCRCxhQUFhLENBQUNFLEtBQUssR0FBRyxFQUFFO01BRXhCLElBQUlDLGVBQWUsR0FBRyxDQUFDLENBQUM7TUFDeEJBLGVBQWUsQ0FBQ0YsRUFBRSxHQUFHLGFBQWE7TUFDbENFLGVBQWUsQ0FBQ0MsS0FBSyxHQUFHLEVBQUU7TUFDMUJELGVBQWUsQ0FBQ0UsVUFBVSxHQUFHLENBQUMsQ0FBQztNQUMvQkYsZUFBZSxDQUFDRSxVQUFVLENBQUNDLEtBQUssR0FBRyxlQUFlO01BQ2xETixhQUFhLENBQUNFLEtBQUssQ0FBQ0ssSUFBSSxDQUFDSixlQUFlLENBQUM7TUFFekMsSUFBSSxDQUFDTCxjQUFLLENBQUNDLE1BQU0sQ0FBQzlELEtBQUssQ0FBQ3dELFFBQVEsQ0FBQ2UsY0FBYyxDQUFDLEVBQUU7UUFDOUMsS0FBSyxJQUFJM0IsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNUMsS0FBSyxDQUFDd0QsUUFBUSxDQUFDZSxjQUFjLENBQUMxRixNQUFNLEVBQUUrRCxDQUFDLEVBQUUsRUFBRTtVQUMzRCxJQUFJNEIsYUFBYSxHQUFHeEUsS0FBSyxDQUFDd0QsUUFBUSxDQUFDZSxjQUFjLENBQUMzQixDQUFDLENBQUM7VUFDcEQsSUFBSTZCLElBQUksR0FBRyxDQUFDLENBQUM7VUFDYkEsSUFBSSxDQUFDVCxFQUFFLEdBQUdRLGFBQWEsQ0FBQ1IsRUFBRTtVQUMxQlMsSUFBSSxDQUFDTCxVQUFVLEdBQUcsQ0FBQyxDQUFDO1VBQ3BCSyxJQUFJLENBQUNMLFVBQVUsQ0FBQ0MsS0FBSyxHQUFHRyxhQUFhLENBQUNFLFVBQVUsQ0FBQ0MsR0FBRyxDQUFDQyxhQUFhO1VBRWxFVixlQUFlLENBQUNDLEtBQUssQ0FBQ0csSUFBSSxDQUFDRyxJQUFJLENBQUM7UUFDcEM7TUFDSjtNQUVBLElBQUlJLGFBQWEsR0FBRyxDQUFDLENBQUM7TUFDdEJBLGFBQWEsQ0FBQ2IsRUFBRSxHQUFHLFdBQVc7TUFDOUJhLGFBQWEsQ0FBQ1YsS0FBSyxHQUFHLEVBQUU7TUFDeEJVLGFBQWEsQ0FBQ1QsVUFBVSxHQUFHLENBQUMsQ0FBQztNQUM3QlMsYUFBYSxDQUFDVCxVQUFVLENBQUNDLEtBQUssR0FBRyxZQUFZO01BQzdDTixhQUFhLENBQUNFLEtBQUssQ0FBQ0ssSUFBSSxDQUFDTyxhQUFhLENBQUM7TUFFdkMsSUFBSSxDQUFDaEIsY0FBSyxDQUFDQyxNQUFNLENBQUM5RCxLQUFLLENBQUN3RCxRQUFRLENBQUNDLGdCQUFnQixDQUFDcUIsT0FBTyxDQUFDLEVBQUU7UUFDeEQsS0FBSyxJQUFJbEMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNUMsS0FBSyxDQUFDd0QsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQ3FCLE9BQU8sQ0FBQ2pHLE1BQU0sRUFBRStELENBQUMsRUFBRSxFQUFFO1VBQ3JFLElBQUltQyxNQUFNLEdBQUcvRSxLQUFLLENBQUN3RCxRQUFRLENBQUNDLGdCQUFnQixDQUFDcUIsT0FBTyxDQUFDbEMsQ0FBQyxDQUFDO1VBQ3ZELElBQUksQ0FBQ2lCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDaUIsTUFBTSxDQUFDQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3hDLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixNQUFNLENBQUNDLGdCQUFnQixDQUFDZixLQUFLLENBQUNwRixNQUFNLEVBQUVvRyxDQUFDLEVBQUUsRUFBRTtjQUMzRCxJQUFJQyxJQUFJLEdBQUdILE1BQU0sQ0FBQ0MsZ0JBQWdCLENBQUNmLEtBQUssQ0FBQ2dCLENBQUMsQ0FBQzs7Y0FFM0M7Y0FDQUosYUFBYSxDQUFDVixLQUFLLEdBQUdVLGFBQWEsQ0FBQ1YsS0FBSyxDQUFDdEUsTUFBTSxDQUFDcUYsSUFBSSxDQUFDZixLQUFLLENBQUM7WUFDaEU7VUFDSjtRQUNKO01BQ0o7TUFFQSxJQUFJZ0IsU0FBUyxHQUFHLEVBQUU7TUFDbEIsSUFBSUMsUUFBUSxHQUFHLENBQUMsQ0FBQztNQUVqQixJQUFHdkIsY0FBSyxDQUFDQyxNQUFNLENBQUM5RCxLQUFLLENBQUNxRixpQkFBaUIsQ0FBQyxJQUFJckYsS0FBSyxDQUFDcUYsaUJBQWlCLEVBQUU7UUFDakVELFFBQVEsQ0FBQ0UsSUFBSSxHQUFHLFdBQVc7UUFDM0JGLFFBQVEsQ0FBQ3BCLEVBQUUsR0FBRyxXQUFXO1FBQ3pCb0IsUUFBUSxDQUFDRyxJQUFJLEdBQUcsaUJBQWlCO1FBQ2pDSCxRQUFRLENBQUNJLE1BQU0sR0FBRyxRQUFRO1FBQzFCSixRQUFRLENBQUNLLEtBQUssR0FBRyxDQUFDO1FBQ2xCTCxRQUFRLENBQUNNLFFBQVEsR0FBRyxJQUFJO1FBQ3hCUCxTQUFTLENBQUNiLElBQUksQ0FBQ2MsUUFBUSxDQUFDO01BQzVCO01BRUEsSUFBSSxDQUFDdkIsY0FBSyxDQUFDQyxNQUFNLENBQUM5RCxLQUFLLENBQUN3RCxRQUFRLENBQUNDLGdCQUFnQixDQUFDcUIsT0FBTyxDQUFDLEVBQUU7UUFDeEQsS0FBSyxJQUFJbEMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNUMsS0FBSyxDQUFDd0QsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQ3FCLE9BQU8sQ0FBQ2pHLE1BQU0sRUFBRStELENBQUMsRUFBRSxFQUFFO1VBQ3JFLElBQUltQyxNQUFNLEdBQUcvRSxLQUFLLENBQUN3RCxRQUFRLENBQUNDLGdCQUFnQixDQUFDcUIsT0FBTyxDQUFDbEMsQ0FBQyxDQUFDO1VBQ3ZELElBQUkrQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1VBRWRBLEtBQUssQ0FBQ0wsSUFBSSxHQUFHUCxNQUFNLENBQUNWLEtBQUs7VUFDekJzQixLQUFLLENBQUNKLElBQUksR0FBR1IsTUFBTSxDQUFDUSxJQUFJO1VBQ3hCSSxLQUFLLENBQUNULElBQUksR0FBR0gsTUFBTSxDQUFDRyxJQUFJO1VBQ3hCUyxLQUFLLENBQUNILE1BQU0sR0FBRyxRQUFRO1VBQ3ZCRyxLQUFLLENBQUNGLEtBQUssR0FBRyxDQUFDO1VBRWYsSUFBSVYsTUFBTSxDQUFDRyxJQUFJLEVBQUU7WUFDYlMsS0FBSyxDQUFDQyxRQUFRLEdBQUcsSUFBSTtZQUNyQkQsS0FBSyxDQUFDRSxLQUFLLEdBQUdkLE1BQU0sQ0FBQ08sSUFBSSxHQUFHLFVBQVU7VUFDMUM7VUFFQUgsU0FBUyxDQUFDYixJQUFJLENBQUNxQixLQUFLLENBQUM7UUFDekI7TUFDSjtNQUVBLElBQUkzRixLQUFLLENBQUN3RCxRQUFRLENBQUNzQyxZQUFZLEVBQUU7UUFDN0JWLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFFYkEsUUFBUSxDQUFDRSxJQUFJLEdBQUcsVUFBVTtRQUMxQkYsUUFBUSxDQUFDRyxJQUFJLEdBQUcsV0FBVztRQUMzQkgsUUFBUSxDQUFDSSxNQUFNLEdBQUcsUUFBUTtRQUMxQkosUUFBUSxDQUFDTSxRQUFRLEdBQUcsSUFBSTtRQUN4Qk4sUUFBUSxDQUFDUSxRQUFRLEdBQUcsSUFBSTtRQUN4QlIsUUFBUSxDQUFDSyxLQUFLLEdBQUcsQ0FBQztRQUNsQkwsUUFBUSxDQUFDRixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEJFLFFBQVEsQ0FBQ1MsS0FBSyxHQUFHLHNCQUFzQjtRQUV2Q1YsU0FBUyxDQUFDYixJQUFJLENBQUNjLFFBQVEsQ0FBQztNQUM1QjtNQUVBcEUsU0FBUyxDQUFDbUUsU0FBUyxDQUFDO01BRXBCbkYsS0FBSyxDQUFDd0QsUUFBUSxDQUFDTyxhQUFhLEdBQUdjLGFBQWEsQ0FBQ1YsS0FBSyxDQUFDdEYsTUFBTSxHQUFHLENBQUMsR0FBR2tGLGFBQWEsR0FBRyxJQUFJO01BQ3BGekQsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNyQjtFQUNKLENBQUMsRUFBRSxDQUFDTixLQUFLLENBQUN3RCxRQUFRLENBQUMsQ0FBQztFQUVwQixNQUFNdUMsYUFBYSxHQUFHQSxDQUFBLEtBQU07SUFDeEIxRSxRQUFRLENBQUNDLGVBQWUsQ0FBQ2lCLFNBQVMsQ0FBQ3lELE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDckQ1RSxnQkFBZ0IsQ0FBQyxDQUFDRCxhQUFhLENBQUM7RUFDcEMsQ0FBQztFQUVELE1BQU02QixnQkFBZ0IsR0FBR0EsQ0FBQSxLQUFNO0lBQzNCLElBQ0kzQixRQUFRLENBQUNDLGVBQWUsQ0FBQzJFLFNBQVMsR0FBRyxFQUFFLElBQ3ZDNUUsUUFBUSxDQUFDNkUsZ0JBQWdCLENBQUNELFNBQVMsR0FBRyxFQUFFLEVBQzFDO01BQ0VyRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsTUFBTSxJQUNIUCxRQUFRLENBQUNDLGVBQWUsQ0FBQzJFLFNBQVMsSUFBSSxFQUFFLElBQ3hDNUUsUUFBUSxDQUFDNkUsZ0JBQWdCLENBQUNELFNBQVMsSUFBSSxFQUFFLEVBQzNDO01BQ0VyRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2pCO0VBQ0osQ0FBQztFQUVELE1BQU11RSxTQUFTLEdBQUlwRixNQUFNLElBQUs7SUFDMUIsT0FBT0EsTUFBTSxDQUFDNEQsR0FBRyxDQUFDLENBQUN5QixJQUFJLEVBQUVDLEdBQUcsS0FBSztNQUM3QixJQUFJRCxJQUFJLENBQUNSLFFBQVEsRUFBRTtRQUNmLE9BQU9PLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDRSxLQUFLLENBQUM7TUFDaEM7TUFFQSxJQUFJRixJQUFJLENBQUNaLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDMUIsb0JBQ0lwSSxNQUFBLENBQUFrQixPQUFBLENBQUFpSSxhQUFBLENBQUM1SSxlQUFBLENBQUE2SSxLQUFLO1VBQ0ZDLElBQUksRUFBRUwsSUFBSSxDQUFDWixNQUFNLEdBQUdZLElBQUksQ0FBQ0ssSUFBSztVQUM5QkMsU0FBUyxFQUFFTixJQUFJLENBQUNNLFNBQVU7VUFDMUJMLEdBQUcsRUFBRUE7UUFBSSxDQUNaLENBQUM7TUFFVixDQUFDLE1BQU07UUFDSCxPQUFPLElBQUk7TUFDZjtJQUNKLENBQUMsQ0FBQztFQUNOLENBQUM7RUFFRCxNQUFNTSxjQUFjLEdBQUk1RixNQUFNLElBQUs7SUFDL0IsSUFBSTZGLFdBQVcsR0FBRyxXQUFXO0lBQzdCLEtBQUssSUFBSWhFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzdCLE1BQU0sQ0FBQ2xDLE1BQU0sRUFBRStELENBQUMsRUFBRSxFQUFFO01BQ3BDLElBQUk3QixNQUFNLENBQUM2QixDQUFDLENBQUMsQ0FBQ2dELFFBQVEsSUFBSTdFLE1BQU0sQ0FBQzZCLENBQUMsQ0FBQyxDQUFDMEQsS0FBSyxFQUFFO1FBQ3ZDLElBQUlPLG1CQUFtQixHQUFHRixjQUFjLENBQUM1RixNQUFNLENBQUM2QixDQUFDLENBQUMsQ0FBQzBELEtBQUssQ0FBQztRQUN6RCxJQUFJTyxtQkFBbUIsS0FBS0QsV0FBVyxFQUFFO1VBQ3JDLE9BQU9DLG1CQUFtQjtRQUM5QjtNQUNKLENBQUMsTUFBTTtRQUNILElBQ0kvRCxNQUFNLENBQUNnRSxRQUFRLENBQUNDLElBQUksQ0FBQ3ZGLE9BQU8sQ0FBQ1QsTUFBTSxDQUFDNkIsQ0FBQyxDQUFDLENBQUM0QyxNQUFNLEdBQUd6RSxNQUFNLENBQUM2QixDQUFDLENBQUMsQ0FBQzZELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN4RTtVQUNFLE9BQU8xRixNQUFNLENBQUM2QixDQUFDLENBQUMsQ0FBQzBDLElBQUk7UUFDekI7TUFDSjtJQUNKO0lBQ0EsT0FBT3NCLFdBQVc7RUFDdEIsQ0FBQztFQUVELE1BQU1JLGlCQUFpQixHQUFJN0UsS0FBSyxJQUFLO0lBQ2pDM0IsY0FBYyxDQUFDMkIsS0FBSyxDQUFDO0VBQ3pCLENBQUM7RUFFRCxNQUFNOEUsZUFBZSxHQUFHQSxDQUFBLEtBQU07SUFDMUIsSUFBSUMsYUFBYSxHQUFHLGVBQWU7SUFDbkMsSUFBSTdGLFFBQVEsQ0FBQ2lDLElBQUksQ0FBQ2YsU0FBUyxDQUFDNEUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO01BQ2xEekYsY0FBYyxDQUFDLEtBQUssQ0FBQztNQUNyQndGLGFBQWEsSUFBSSxnQkFBZ0I7SUFDckMsQ0FBQyxNQUFNO01BQ0h4RixjQUFjLENBQUMsSUFBSSxDQUFDO01BQ3BCd0YsYUFBYSxJQUFJLGNBQWM7SUFDbkM7SUFDQSxJQUFJRSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCQSxPQUFPLEdBQUc7TUFDTkMsS0FBSyxFQUFFLElBQUk7TUFDWEMsT0FBTyxFQUFFSixhQUFhO01BQ3RCSyxJQUFJLEVBQUUsU0FBUztNQUNmaEMsSUFBSSxFQUFFLHdCQUF3QjtNQUM5QmlDLFdBQVcsRUFBRTtJQUNqQixDQUFDO0lBQ0RuRyxRQUFRLENBQUNpQyxJQUFJLENBQUNmLFNBQVMsQ0FBQ3lELE1BQU0sQ0FBQyxjQUFjLENBQUM7RUFDbEQsQ0FBQztFQUVELE1BQU15QixZQUFZLEdBQUdBLENBQUEsS0FBTTtJQUN2QnJHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUN2QkMsUUFBUSxDQUFDQyxlQUFlLENBQUNpQixTQUFTLENBQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUM7RUFDekQsQ0FBQztFQUVELFNBQVNpRixlQUFlQSxDQUFBLEVBQUc7SUFDdkJDLDJCQUFrQixDQUFDQyxhQUFhLENBQUMsQ0FBQztJQUNsQztJQUNBRCwyQkFBa0IsQ0FBQ0UsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0VBQ2xEO0VBRUEsT0FDSXhILE9BQU8sZ0JBQ0hqRCxNQUFBLENBQUFrQixPQUFBLENBQUFpSSxhQUFBLGNBQUssWUFBZSxDQUFDLGdCQUVyQm5KLE1BQUEsQ0FBQWtCLE9BQUEsQ0FBQWlJLGFBQUEsQ0FBQW5KLE1BQUEsQ0FBQWtCLE9BQUEsQ0FBQXdKLFFBQUEscUJBQ0kxSyxNQUFBLENBQUFrQixPQUFBLENBQUFpSSxhQUFBO0lBQUtoRixTQUFTLEVBQUMsU0FBUztJQUFDd0csS0FBSyxFQUFFO01BQzVCQyxNQUFNLEVBQUUsTUFBTTtNQUNkQyxRQUFRLEVBQUU7SUFDZDtFQUFFLGdCQUNFN0ssTUFBQSxDQUFBa0IsT0FBQSxDQUFBaUksYUFBQTtJQUNJaEYsU0FBUyxFQUFDLHVCQUF1QjtJQUNqQ3dHLEtBQUssRUFBRTtNQUNIcEcsT0FBTyxFQUFFQTtJQUNiO0VBQUUsZ0JBRUZ2RSxNQUFBLENBQUFrQixPQUFBLENBQUFpSSxhQUFBO0lBQ0loRixTQUFTLEVBQUMsNkNBQTZDO0lBQ3ZEMkcsT0FBTyxFQUFFakI7RUFBZ0IsZ0JBRXpCN0osTUFBQSxDQUFBa0IsT0FBQSxDQUFBaUksYUFBQTtJQUFHaEYsU0FBUyxFQUFDO0VBQW1FLENBQUMsQ0FBQyxlQUNsRm5FLE1BQUEsQ0FBQWtCLE9BQUEsQ0FBQWlJLGFBQUE7SUFBR2hGLFNBQVMsRUFBQztFQUFrRSxDQUFDLENBQzVFLENBQUMsRUFDUixHQUNBLENBQUMsRUFDTCxHQUFHLGVBQ0puRSxNQUFBLENBQUFrQixPQUFBLENBQUFpSSxhQUFBLENBQUMxSSxrQkFBQSxDQUFBUyxPQUFpQixFQUFBQyxRQUFBLEtBQ1Z5QixLQUFLO0lBQ1RlLE1BQU0sRUFBRUEsTUFBTztJQUNmUixXQUFXLEVBQUUsU0FBVTtJQUN2QkUsbUJBQW1CLEVBQUVBLG1CQUFvQjtJQUN6QzBILGVBQWUsRUFBRW5JLEtBQUssQ0FBQ3FGLGlCQUFpQixHQUFHO01BQ3ZDckIsRUFBRSxFQUFFLFdBQVc7TUFDZnNCLElBQUksRUFBRTtJQUNWLENBQUMsR0FBRyxJQUFLO0lBQ1QvRCxTQUFTLEVBQUUsU0FBVTtJQUNyQjZHLGlCQUFpQixFQUFFQSxDQUFBLEtBQU07TUFDckJWLGVBQWUsQ0FBQyxDQUFDO0lBQ3JCLENBQUU7SUFDRlcsV0FBVyxFQUFFckksS0FBSyxDQUFDcUksV0FBWTtJQUMvQnBILElBQUksRUFBRTtNQUNGcUgsVUFBVSxFQUFFLEVBQUU7TUFDZEMsSUFBSSxFQUFFLEVBQUU7TUFDUkMsTUFBTSxFQUFFdkg7SUFDWixDQUFFO0lBQ0Z3SCxTQUFTLEVBQUV6SSxLQUFLLENBQUN5SSxTQUFVO0lBQzNCaEIsWUFBWSxFQUFFQTtFQUFhLEVBQzlCLENBQUMsRUFBQyxHQUFHLGVBQ05ySyxNQUFBLENBQUFrQixPQUFBLENBQUFpSSxhQUFBO0lBQUtoRixTQUFTLEVBQUMsWUFBWTtJQUFDbUgsSUFBSSxFQUFFbkk7RUFBWSxnQkFDMUNuRCxNQUFBLENBQUFrQixPQUFBLENBQUFpSSxhQUFBLENBQUN6SSxXQUFBLENBQUFRLE9BQVUsRUFBQUMsUUFBQSxLQUNIeUIsS0FBSztJQUNUbUMsS0FBSyxFQUFFeEIsaUJBQWtCO0lBQ3pCRSxjQUFjLEVBQUVBLGNBQWU7SUFDL0JvRyxlQUFlLEVBQUVBLGVBQWdCO0lBQ2pDMEIsU0FBUyxFQUFFaEMsY0FBYyxDQUFDNUYsTUFBTSxDQUFFO0lBQ2xDSSxhQUFhLEVBQUVBLGFBQWM7SUFDN0J5SCxNQUFNLEVBQUU1SSxLQUFLLENBQUM0SSxNQUFPO0lBQ3JCOUMsWUFBWSxFQUFFOUYsS0FBSyxDQUFDd0QsUUFBUSxDQUFDc0MsWUFBYTtJQUMxQ0MsYUFBYSxFQUFFQSxhQUFjO0lBQzdCOEMsY0FBYyxFQUFFN0ksS0FBSyxDQUFDNkk7RUFBZSxFQUN4QyxDQUFDLEVBQUMsR0FBRyxlQUVOekwsTUFBQSxDQUFBa0IsT0FBQSxDQUFBaUksYUFBQTtJQUFLaEYsU0FBUyxFQUFDLFNBQVM7SUFBQ3dHLEtBQUssRUFBRTtNQUFDQyxNQUFNLEVBQUUsb0JBQW9CO01BQUVjLFNBQVMsRUFBRTtJQUFvQjtFQUFFLGdCQUM1RjFMLE1BQUEsQ0FBQWtCLE9BQUEsQ0FBQWlJLGFBQUE7SUFBS2hGLFNBQVMsRUFBQztFQUE4QyxnQkFDekRuRSxNQUFBLENBQUFrQixPQUFBLENBQUFpSSxhQUFBO0lBQUt3QixLQUFLLEVBQUU7TUFDUjlFLEtBQUssRUFBRXBCLFlBQVksR0FBRyxvQkFBb0IsR0FBRyxNQUFNO01BQ25EbUcsTUFBTSxFQUFFLE1BQU07TUFDZGUsUUFBUSxFQUFFLE1BQU07TUFDaEJkLFFBQVEsRUFBRSxNQUFNO01BQ2hCZSxVQUFVLEVBQUU7SUFDaEI7RUFBRSxnQkFDRTVMLE1BQUEsQ0FBQWtCLE9BQUEsQ0FBQWlJLGFBQUEsQ0FBQzdJLFNBQUEsQ0FBQVksT0FBUTtJQUFDdUQsWUFBWSxFQUFFQTtFQUFhLENBQUMsQ0FDckMsQ0FBQyxlQUNOekUsTUFBQSxDQUFBa0IsT0FBQSxDQUFBaUksYUFBQTtJQUFLaEYsU0FBUyxFQUFFLDBCQUEyQjtJQUFDd0csS0FBSyxFQUFFO01BQy9DOUUsS0FBSyxFQUFFcEIsWUFBWSxHQUFHLE9BQU8sR0FBRyxHQUFHO01BQUVvSCxNQUFNLEVBQUU7SUFDakQ7RUFBRSxnQkFDRTdMLE1BQUEsQ0FBQWtCLE9BQUEsQ0FBQWlJLGFBQUEsQ0FBQ3BJLGVBQUEsQ0FBQUcsT0FBYztJQUFDNEssa0JBQWtCLEVBQUdyRCxLQUFLLElBQUs7TUFDM0MvRCxlQUFlLENBQUMrRCxLQUFLLENBQUNzRCxNQUFNLENBQUM7SUFDakM7RUFBRSxDQUFDLENBQ0YsQ0FDSixDQUNKLENBR0osQ0FBQyxFQUNMLEdBQ0EsQ0FDUCxDQUFDO0FBR2YsQ0FBQztBQUVEcEosdUJBQXVCLENBQUNxSixTQUFTLEdBQUc7RUFDaENDLFFBQVEsRUFBRUMsa0JBQVMsQ0FBQ0MsT0FBTztFQUMzQnRHLEtBQUssRUFBRXFHLGtCQUFTLENBQUNFO0FBQ3JCLENBQUM7QUFBQyxJQUFBQyxRQUFBLEdBQUFDLE9BQUEsQ0FBQXBMLE9BQUEsR0FFYXlCLHVCQUF1QiIsImlnbm9yZUxpc3QiOltdfQ==