@commercetools-frontend/application-shell 22.17.0 → 22.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commercetools-frontend-application-shell.cjs.dev.js +2 -2
- package/dist/commercetools-frontend-application-shell.cjs.prod.js +2 -2
- package/dist/commercetools-frontend-application-shell.esm.js +2 -2
- package/dist/{custom-view-dev-host-e21e5a32.esm.js → custom-view-dev-host-03a7e8ee.esm.js} +2 -2
- package/dist/{custom-view-dev-host-3e6d433e.cjs.dev.js → custom-view-dev-host-5f8c0099.cjs.dev.js} +2 -2
- package/dist/{custom-view-dev-host-f29878d8.cjs.prod.js → custom-view-dev-host-a4c2526e.cjs.prod.js} +2 -2
- package/dist/declarations/src/components/navbar/main-navbar.styles.d.ts +47 -0
- package/dist/declarations/src/components/navbar/menu-items.d.ts +2 -5
- package/dist/declarations/src/components/navbar/menu-items.styles.d.ts +52 -0
- package/dist/declarations/src/components/navbar/shared.styles.d.ts +18 -0
- package/dist/declarations/src/constants.d.ts +15 -3
- package/dist/{index-c92d8a48.cjs.dev.js → index-3a78b6af.cjs.dev.js} +29 -29
- package/dist/{index-528c3a33.cjs.prod.js → index-3d6cf404.cjs.prod.js} +18 -18
- package/dist/{index-fd3ab5c6.esm.js → index-5f138907.esm.js} +30 -30
- package/dist/navbar-17317c0f.cjs.dev.js +1334 -0
- package/dist/navbar-2af36692.esm.js +1301 -0
- package/dist/{navbar-d60f807a.cjs.prod.js → navbar-53abe300.cjs.prod.js} +228 -252
- package/dist/{oidc-7c48215c.cjs.dev.js → oidc-63e926e1.cjs.dev.js} +17 -4
- package/dist/{oidc-callback-ce1b0eda.cjs.dev.js → oidc-callback-10ec1861.cjs.dev.js} +2 -2
- package/dist/{oidc-callback-bfa85a94.esm.js → oidc-callback-137a6058.esm.js} +2 -2
- package/dist/{oidc-callback-04085556.cjs.prod.js → oidc-callback-663e13d0.cjs.prod.js} +2 -2
- package/dist/{oidc-b070ff6c.cjs.prod.js → oidc-cfa56c46.cjs.prod.js} +17 -4
- package/dist/{oidc-da8526e3.esm.js → oidc-ff53dfd3.esm.js} +17 -5
- package/dist/{project-container-f1416d28.esm.js → project-container-695b6d00.esm.js} +6 -6
- package/dist/{project-container-c515853a.cjs.prod.js → project-container-a7b22509.cjs.prod.js} +6 -6
- package/dist/{project-container-a7fa7db0.cjs.dev.js → project-container-c967d69d.cjs.dev.js} +6 -6
- package/dist/{project-expired-2f224a15.cjs.prod.js → project-expired-198fe545.cjs.prod.js} +3 -3
- package/dist/{project-expired-11b7fd68.esm.js → project-expired-4a84dc5d.esm.js} +3 -3
- package/dist/{project-expired-61105fb9.cjs.dev.js → project-expired-fcc5b863.cjs.dev.js} +3 -3
- package/dist/{project-not-found-62ebce6e.esm.js → project-not-found-43c7b3d9.esm.js} +3 -3
- package/dist/{project-not-found-48cf94a3.cjs.prod.js → project-not-found-aee676f3.cjs.prod.js} +3 -3
- package/dist/{project-not-found-a28398bf.cjs.dev.js → project-not-found-bd1ed00d.cjs.dev.js} +3 -3
- package/dist/{project-not-initialized-3e294ed5.esm.js → project-not-initialized-3f005d66.esm.js} +3 -3
- package/dist/{project-not-initialized-0d42087d.cjs.prod.js → project-not-initialized-855e47a8.cjs.prod.js} +3 -3
- package/dist/{project-not-initialized-fd0e86c9.cjs.dev.js → project-not-initialized-ed2395cc.cjs.dev.js} +3 -3
- package/dist/{project-suspended-db1068ca.esm.js → project-suspended-030ffee4.esm.js} +3 -3
- package/dist/{project-suspended-500dbb1b.cjs.prod.js → project-suspended-3ef95f71.cjs.prod.js} +3 -3
- package/dist/{project-suspended-77a01855.cjs.dev.js → project-suspended-4a17383b.cjs.dev.js} +3 -3
- package/dist/quick-access-04797c0b.esm.js +1818 -0
- package/dist/quick-access-a40b1e0f.cjs.dev.js +1848 -0
- package/dist/{quick-access-2c92aa86.cjs.prod.js → quick-access-bd6496a4.cjs.prod.js} +8 -8
- package/dist/{redirect-to-login-5e148cff.esm.js → redirect-to-login-5615df08.esm.js} +1 -1
- package/dist/{redirect-to-login-d2287ced.cjs.dev.js → redirect-to-login-5e78faae.cjs.dev.js} +1 -1
- package/dist/{redirect-to-login-e4f2ca07.cjs.prod.js → redirect-to-login-ad874fb5.cjs.prod.js} +1 -1
- package/dist/{redirect-to-logout-f3e5475b.cjs.dev.js → redirect-to-logout-86110e8c.cjs.dev.js} +2 -2
- package/dist/{redirect-to-logout-5f9db1ee.esm.js → redirect-to-logout-9b60153e.esm.js} +2 -2
- package/dist/{redirect-to-logout-7609e738.cjs.prod.js → redirect-to-logout-9b9b32c5.cjs.prod.js} +2 -2
- package/dist/{requests-in-flight-loader-43b3200e.esm.js → requests-in-flight-loader-0f883386.esm.js} +2 -2
- package/dist/{requests-in-flight-loader-a54338f5.cjs.dev.js → requests-in-flight-loader-6ab1fa05.cjs.dev.js} +2 -2
- package/dist/{requests-in-flight-loader-10022cf4.cjs.prod.js → requests-in-flight-loader-f5ea48c9.cjs.prod.js} +2 -2
- package/dist/{service-page-project-switcher-a1408268.esm.js → service-page-project-switcher-1b1fa2df.esm.js} +1 -1
- package/dist/{service-page-project-switcher-0bd44b89.cjs.prod.js → service-page-project-switcher-7cddddfb.cjs.prod.js} +1 -1
- package/dist/{service-page-project-switcher-ffa91841.cjs.dev.js → service-page-project-switcher-b35c912b.cjs.dev.js} +1 -1
- package/dist/{user-settings-menu-4580467a.cjs.prod.js → user-settings-menu-1314b25d.cjs.prod.js} +2 -3
- package/dist/user-settings-menu-60dc5e0a.cjs.dev.js +364 -0
- package/dist/user-settings-menu-dcbb0bd3.esm.js +338 -0
- package/dist/{version-tracker-1bd0b997.cjs.prod.js → version-tracker-15416b7d.cjs.prod.js} +2 -2
- package/dist/{version-tracker-83f3dcb4.esm.js → version-tracker-acf36f46.esm.js} +2 -2
- package/dist/{version-tracker-9549fe99.cjs.dev.js → version-tracker-f54893c4.cjs.dev.js} +2 -2
- package/package.json +30 -33
- package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.dev.js +1 -1
- package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.prod.js +1 -1
- package/ssr/dist/commercetools-frontend-application-shell-ssr.esm.js +1 -1
- package/dist/declarations/src/components/navbar/compiled/navbar.css.json.d.ts +0 -3
- package/dist/declarations/src/components/navbar/navbar.styles.d.ts +0 -7
- package/dist/navbar-5a1b9a06.esm.js +0 -1223
- package/dist/navbar-a5342082.cjs.dev.js +0 -1256
- package/dist/quick-access-6f0f1cda.cjs.dev.js +0 -1848
- package/dist/quick-access-ee315928.esm.js +0 -1818
- package/dist/user-settings-menu-1ae6c56e.cjs.dev.js +0 -365
- package/dist/user-settings-menu-46fe08bf.esm.js +0 -339
|
@@ -1,1818 +0,0 @@
|
|
|
1
|
-
import _taggedTemplateLiteral from '@babel/runtime-corejs3/helpers/esm/taggedTemplateLiteral';
|
|
2
|
-
import _slicedToArray from '@babel/runtime-corejs3/helpers/esm/slicedToArray';
|
|
3
|
-
import _pt from 'prop-types';
|
|
4
|
-
import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
|
|
5
|
-
import _Array$isArray from '@babel/runtime-corejs3/core-js-stable/array/is-array';
|
|
6
|
-
import _JSON$stringify from '@babel/runtime-corejs3/core-js-stable/json/stringify';
|
|
7
|
-
import _concatInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/concat';
|
|
8
|
-
import _forEachInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/for-each';
|
|
9
|
-
import _trimInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/trim';
|
|
10
|
-
import _startsWithInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/starts-with';
|
|
11
|
-
import { useReducer, useRef, useCallback, useState, useEffect } from 'react';
|
|
12
|
-
import { useApolloClient } from '@apollo/client/react';
|
|
13
|
-
import { useFeatureToggles } from '@flopflip/react-broadcast';
|
|
14
|
-
import { oneLineTrim } from 'common-tags';
|
|
15
|
-
import debounce from 'debounce-async';
|
|
16
|
-
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
|
17
|
-
import { useHistory } from 'react-router-dom';
|
|
18
|
-
import { useApplicationContext } from '@commercetools-frontend/application-shell-connectors';
|
|
19
|
-
import { SUPPORT_PORTAL_URL, LOGOUT_REASONS, GRAPHQL_TARGETS, MC_API_PROXY_TARGETS } from '@commercetools-frontend/constants';
|
|
20
|
-
import { hasSomePermissions } from '@commercetools-frontend/permissions';
|
|
21
|
-
import { useAsyncDispatch, actions } from '@commercetools-frontend/sdk';
|
|
22
|
-
import { l as location } from './use-is-served-by-proxy-77984220.esm.js';
|
|
23
|
-
import _Object$keys from '@babel/runtime-corejs3/core-js-stable/object/keys';
|
|
24
|
-
import _Object$getOwnPropertySymbols from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
|
|
25
|
-
import _Object$getOwnPropertyDescriptor from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor';
|
|
26
|
-
import _Object$getOwnPropertyDescriptors from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors';
|
|
27
|
-
import _Object$defineProperties from '@babel/runtime-corejs3/core-js-stable/object/define-properties';
|
|
28
|
-
import _Object$defineProperty from '@babel/runtime-corejs3/core-js-stable/object/define-property';
|
|
29
|
-
import _defineProperty from '@babel/runtime-corejs3/helpers/esm/defineProperty';
|
|
30
|
-
import _includesInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/includes';
|
|
31
|
-
import _sliceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/slice';
|
|
32
|
-
import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter';
|
|
33
|
-
import _findIndexInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find-index';
|
|
34
|
-
import { css, keyframes, ClassNames } from '@emotion/react';
|
|
35
|
-
import Fuse from 'fuse.js';
|
|
36
|
-
import last from 'lodash/last';
|
|
37
|
-
import { customProperties } from '@commercetools-uikit/design-system';
|
|
38
|
-
import { AngleThinRightIcon, SearchIcon } from '@commercetools-uikit/icons';
|
|
39
|
-
import LoadingSpinner from '@commercetools-uikit/loading-spinner';
|
|
40
|
-
import { jsxs, jsx } from '@emotion/react/jsx-runtime';
|
|
41
|
-
import { B as ButlerContainer, p as pimIndexerStates } from './index-fd3ab5c6.esm.js';
|
|
42
|
-
import _Promise from '@babel/runtime-corejs3/core-js-stable/promise';
|
|
43
|
-
import _reduceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/reduce';
|
|
44
|
-
import _findInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find';
|
|
45
|
-
import './index-89e5711a.esm.js';
|
|
46
|
-
import '@babel/runtime-corejs3/core-js-stable/object/entries';
|
|
47
|
-
import '@babel/runtime-corejs3/core-js-stable/reflect/has';
|
|
48
|
-
import '@reduxjs/toolkit';
|
|
49
|
-
import 'lodash/mapValues';
|
|
50
|
-
import 'omit-empty-es';
|
|
51
|
-
import 'redux-thunk';
|
|
52
|
-
import '@commercetools-frontend/notifications';
|
|
53
|
-
import '@babel/runtime-corejs3/core-js-stable/instance/index-of';
|
|
54
|
-
import '@commercetools-frontend/sentry';
|
|
55
|
-
import '@commercetools-frontend/react-notifications';
|
|
56
|
-
import 'redux-logger';
|
|
57
|
-
import '@emotion/styled/base';
|
|
58
|
-
import '@commercetools-frontend/application-components';
|
|
59
|
-
import '@commercetools-frontend/i18n';
|
|
60
|
-
import './oidc-da8526e3.esm.js';
|
|
61
|
-
import '@babel/runtime-corejs3/core-js-stable/url';
|
|
62
|
-
import '@commercetools-uikit/spacings';
|
|
63
|
-
import '@commercetools-uikit/flat-button';
|
|
64
|
-
import '@babel/runtime-corejs3/helpers/objectDestructuringEmpty';
|
|
65
|
-
import '@babel/runtime-corejs3/helpers/extends';
|
|
66
|
-
import 'memoize-one';
|
|
67
|
-
import 'react-select';
|
|
68
|
-
import '@commercetools-uikit/accessible-hidden';
|
|
69
|
-
import '@commercetools-uikit/select-input';
|
|
70
|
-
import '@commercetools-frontend/assets/images/ct-logo.svg';
|
|
71
|
-
import '@commercetools-frontend/browser-history';
|
|
72
|
-
import '@commercetools-frontend/l10n';
|
|
73
|
-
import '@babel/runtime-corejs3/core-js-stable/reflect/construct';
|
|
74
|
-
import '@babel/runtime-corejs3/helpers/classCallCheck';
|
|
75
|
-
import '@babel/runtime-corejs3/helpers/createClass';
|
|
76
|
-
import '@babel/runtime-corejs3/helpers/inherits';
|
|
77
|
-
import '@babel/runtime-corejs3/helpers/possibleConstructorReturn';
|
|
78
|
-
import '@babel/runtime-corejs3/helpers/getPrototypeOf';
|
|
79
|
-
import '@babel/runtime-corejs3/core-js-stable/object/from-entries';
|
|
80
|
-
import '@babel/runtime-corejs3/core-js-stable/instance/flags';
|
|
81
|
-
import '@flopflip/combine-adapters';
|
|
82
|
-
import '@flopflip/http-adapter';
|
|
83
|
-
import '@flopflip/launchdarkly-adapter';
|
|
84
|
-
import 'react-redux';
|
|
85
|
-
import 'lodash/upperFirst';
|
|
86
|
-
import '@commercetools-uikit/design-system/materials/resets.css';
|
|
87
|
-
import '@commercetools-frontend/application-config/ssr';
|
|
88
|
-
import '@babel/runtime-corejs3/core-js-stable/instance/some';
|
|
89
|
-
import '@commercetools-frontend/actions-global';
|
|
90
|
-
|
|
91
|
-
function _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
92
|
-
var _ref$1 = process.env.NODE_ENV === "production" ? {
|
|
93
|
-
name: "13n9jnb",
|
|
94
|
-
styles: "align-self:center;>*{display:block;}"
|
|
95
|
-
} : {
|
|
96
|
-
name: "1qkkrpz-ButlerCommand",
|
|
97
|
-
styles: "align-self:center;>*{display:block;};label:ButlerCommand;",
|
|
98
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrRGdCIiwiZmlsZSI6ImJ1dGxlci1jb21tYW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vdXNlRXZlbnRIYW5kbGVyIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgQW5nbGVUaGluUmlnaHRJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIFByb3BzID0ge1xuICBjb21tYW5kOiBDb21tYW5kO1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgb25DbGljazogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBvbk1vdXNlRW50ZXI6IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbmNvbnN0IEJ1dGxlckNvbW1hbmQgPSAocHJvcHM6IFByb3BzKSA9PiAoXG4gIDxkaXZcbiAgICBrZXk9e3Byb3BzLmNvbW1hbmQuaWR9XG4gICAgZGF0YS10ZXN0aWQ9e2BxdWljay1hY2Nlc3MtcmVzdWx0KCR7cHJvcHMuY29tbWFuZC5pZH0pYH1cbiAgICBhcmlhLWN1cnJlbnQ9e3Byb3BzLmlzU2VsZWN0ZWQgPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgIGNzcz17Y3NzYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBhZGRpbmc6IDAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfTtcbiAgICAgIGhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICR7cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICA/IGBcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvckFjY2VudH07XG4gICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYFxuICAgICAgICA6ICcnfVxuICAgIGB9XG4gICAgb25Nb3VzZUVudGVyPXtwcm9wcy5vbk1vdXNlRW50ZXJ9XG4gICAgb25DbGljaz17cHJvcHMub25DbGlja31cbiAgPlxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBmbGV4OiAxIGF1dG87XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgYH1cbiAgICA+XG4gICAgICB7cHJvcHMuY29tbWFuZC50ZXh0fVxuICAgIDwvZGl2PlxuICAgIHsoKEFycmF5LmlzQXJyYXkocHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcykgJiZcbiAgICAgIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgIHR5cGVvZiBwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzID09PSAnZnVuY3Rpb24nKSAmJiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICA+ICoge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICBgfVxuICAgICAgPlxuICAgICAgICA8QW5nbGVUaGluUmlnaHRJY29uXG4gICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgY29sb3I9e3Byb3BzLmlzU2VsZWN0ZWQgPyAnc3VyZmFjZScgOiAnbmV1dHJhbDYwJ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuQnV0bGVyQ29tbWFuZC5kaXNwbGF5TmFtZSA9ICdCdXRsZXJDb21tYW5kJztcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyQ29tbWFuZDtcbiJdfQ== */",
|
|
99
|
-
toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
|
|
100
|
-
};
|
|
101
|
-
var _ref2 = process.env.NODE_ENV === "production" ? {
|
|
102
|
-
name: "lhzw0z",
|
|
103
|
-
styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis"
|
|
104
|
-
} : {
|
|
105
|
-
name: "zq3ooq-ButlerCommand",
|
|
106
|
-
styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;label:ButlerCommand;",
|
|
107
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQ2MiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */",
|
|
108
|
-
toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
|
|
109
|
-
};
|
|
110
|
-
const ButlerCommand = props => {
|
|
111
|
-
var _context;
|
|
112
|
-
return jsxs("div", {
|
|
113
|
-
"data-testid": "quick-access-result(".concat(props.command.id, ")"),
|
|
114
|
-
"aria-current": props.isSelected === true ? 'true' : 'false',
|
|
115
|
-
css: /*#__PURE__*/css("display:flex;padding:0 ", customProperties.spacingM, ";height:36px;font-size:16px;font-weight:200;line-height:36px;cursor:default;", props.isSelected === true ? _concatInstanceProperty(_context = "\n background: ".concat(customProperties.colorAccent, ";\n color: ")).call(_context, customProperties.colorSurface, ";\n ") : '', ";" + (process.env.NODE_ENV === "production" ? "" : ";label:ButlerCommand;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQlkiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */"),
|
|
116
|
-
onMouseEnter: props.onMouseEnter,
|
|
117
|
-
onClick: props.onClick,
|
|
118
|
-
children: [jsx("div", {
|
|
119
|
-
css: _ref2,
|
|
120
|
-
children: props.command.text
|
|
121
|
-
}), (_Array$isArray(props.command.subCommands) && props.command.subCommands.length > 0 || typeof props.command.subCommands === 'function') && jsx("div", {
|
|
122
|
-
css: _ref$1,
|
|
123
|
-
children: jsx(AngleThinRightIcon, {
|
|
124
|
-
size: "medium",
|
|
125
|
-
color: props.isSelected ? 'surface' : 'neutral60'
|
|
126
|
-
})
|
|
127
|
-
})]
|
|
128
|
-
}, props.command.id);
|
|
129
|
-
};
|
|
130
|
-
ButlerCommand.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
131
|
-
command: _pt.any.isRequired,
|
|
132
|
-
isSelected: _pt.bool,
|
|
133
|
-
onClick: _pt.func.isRequired,
|
|
134
|
-
onMouseEnter: _pt.func.isRequired
|
|
135
|
-
} : {};
|
|
136
|
-
ButlerCommand.displayName = 'ButlerCommand';
|
|
137
|
-
|
|
138
|
-
var messages = defineMessages({
|
|
139
|
-
inputPlacehoder: {
|
|
140
|
-
id: 'QuickAccess.inputPlaceholder',
|
|
141
|
-
defaultMessage: 'Go to...'
|
|
142
|
-
},
|
|
143
|
-
offline: {
|
|
144
|
-
id: 'QuickAccess.offline',
|
|
145
|
-
defaultMessage: 'Offline'
|
|
146
|
-
},
|
|
147
|
-
noResults: {
|
|
148
|
-
id: 'QuickAccess.noResults',
|
|
149
|
-
defaultMessage: 'No results found'
|
|
150
|
-
},
|
|
151
|
-
// create-commands
|
|
152
|
-
setResourceLanguage: {
|
|
153
|
-
id: 'QuickAccess.setResourceLanguage',
|
|
154
|
-
defaultMessage: 'Set Resource Language'
|
|
155
|
-
},
|
|
156
|
-
openDashboard: {
|
|
157
|
-
id: 'QuickAccess.openDashboard',
|
|
158
|
-
defaultMessage: 'Open Dashboard'
|
|
159
|
-
},
|
|
160
|
-
openProducts: {
|
|
161
|
-
id: 'QuickAccess.openProducts',
|
|
162
|
-
defaultMessage: 'Open Products'
|
|
163
|
-
},
|
|
164
|
-
openProductList: {
|
|
165
|
-
id: 'QuickAccess.openProductList',
|
|
166
|
-
defaultMessage: 'Open Product List'
|
|
167
|
-
},
|
|
168
|
-
openProductVariantGeneral: {
|
|
169
|
-
id: 'QuickAccess.openProductVariantGeneral',
|
|
170
|
-
defaultMessage: 'General'
|
|
171
|
-
},
|
|
172
|
-
openProductVariantList: {
|
|
173
|
-
id: 'QuickAccess.openProductVariantList',
|
|
174
|
-
defaultMessage: 'Variants'
|
|
175
|
-
},
|
|
176
|
-
openProductVariantSearch: {
|
|
177
|
-
id: 'QuickAccess.openProductVariantSearch',
|
|
178
|
-
defaultMessage: 'Int. / Ext. Search'
|
|
179
|
-
},
|
|
180
|
-
openModifiedProducts: {
|
|
181
|
-
id: 'QuickAccess.openModifiedProducts',
|
|
182
|
-
defaultMessage: 'Open Review Modified Products'
|
|
183
|
-
},
|
|
184
|
-
openPimSearch: {
|
|
185
|
-
id: 'QuickAccess.openPimSearch',
|
|
186
|
-
defaultMessage: 'Open PIM Search'
|
|
187
|
-
},
|
|
188
|
-
openAddProducts: {
|
|
189
|
-
id: 'QuickAccess.openAddProducts',
|
|
190
|
-
defaultMessage: 'Open Add Products'
|
|
191
|
-
},
|
|
192
|
-
openCategories: {
|
|
193
|
-
id: 'QuickAccess.openCategories',
|
|
194
|
-
defaultMessage: 'Open Categories'
|
|
195
|
-
},
|
|
196
|
-
openCategoriesList: {
|
|
197
|
-
id: 'QuickAccess.openCategoriesList',
|
|
198
|
-
defaultMessage: 'Open Categories List'
|
|
199
|
-
},
|
|
200
|
-
openCategoriesSearch: {
|
|
201
|
-
id: 'QuickAccess.openCategoriesSearch',
|
|
202
|
-
defaultMessage: 'Open Categories Search'
|
|
203
|
-
},
|
|
204
|
-
openAddCategory: {
|
|
205
|
-
id: 'QuickAccess.openAddCategory',
|
|
206
|
-
defaultMessage: 'Open Add Category'
|
|
207
|
-
},
|
|
208
|
-
openCustomers: {
|
|
209
|
-
id: 'QuickAccess.openCustomers',
|
|
210
|
-
defaultMessage: 'Open Customers'
|
|
211
|
-
},
|
|
212
|
-
openCustomersList: {
|
|
213
|
-
id: 'QuickAccess.openCustomersList',
|
|
214
|
-
defaultMessage: 'Open Customers List'
|
|
215
|
-
},
|
|
216
|
-
openAddCustomer: {
|
|
217
|
-
id: 'QuickAccess.openAddCustomer',
|
|
218
|
-
defaultMessage: 'Open Add Customer'
|
|
219
|
-
},
|
|
220
|
-
openCustomerGroupsList: {
|
|
221
|
-
id: 'QuickAccess.openCustomerGroupsList',
|
|
222
|
-
defaultMessage: 'Open Customer Groups List'
|
|
223
|
-
},
|
|
224
|
-
openAddCustomerGroup: {
|
|
225
|
-
id: 'QuickAccess.openAddCustomerGroup',
|
|
226
|
-
defaultMessage: 'Open Add Customer Group'
|
|
227
|
-
},
|
|
228
|
-
openOrders: {
|
|
229
|
-
id: 'QuickAccess.openOrders',
|
|
230
|
-
defaultMessage: 'Open Orders'
|
|
231
|
-
},
|
|
232
|
-
openOrdersList: {
|
|
233
|
-
id: 'QuickAccess.openOrdersList',
|
|
234
|
-
defaultMessage: 'Open Orders List'
|
|
235
|
-
},
|
|
236
|
-
openAddOrder: {
|
|
237
|
-
id: 'QuickAccess.openAddOrder',
|
|
238
|
-
defaultMessage: 'Open Add Order'
|
|
239
|
-
},
|
|
240
|
-
openDiscounts: {
|
|
241
|
-
id: 'QuickAccess.openDiscounts',
|
|
242
|
-
defaultMessage: 'Open Discounts'
|
|
243
|
-
},
|
|
244
|
-
openProductDiscountsList: {
|
|
245
|
-
id: 'QuickAccess.openProductDiscountsList',
|
|
246
|
-
defaultMessage: 'Open Product Discounts List'
|
|
247
|
-
},
|
|
248
|
-
openCartDiscountsList: {
|
|
249
|
-
id: 'QuickAccess.openCartDiscountsList',
|
|
250
|
-
defaultMessage: 'Open Cart Discounts List'
|
|
251
|
-
},
|
|
252
|
-
openDiscountCodesList: {
|
|
253
|
-
id: 'QuickAccess.openDiscountCodesList',
|
|
254
|
-
defaultMessage: 'Open Discount Codes List'
|
|
255
|
-
},
|
|
256
|
-
openAddDiscount: {
|
|
257
|
-
id: 'QuickAccess.openAddDiscount',
|
|
258
|
-
defaultMessage: 'Open Add Discount'
|
|
259
|
-
},
|
|
260
|
-
openAddProductDiscount: {
|
|
261
|
-
id: 'QuickAccess.openAddProductDiscount',
|
|
262
|
-
defaultMessage: 'Open Add Product Discount'
|
|
263
|
-
},
|
|
264
|
-
openAddCartDiscount: {
|
|
265
|
-
id: 'QuickAccess.openAddCartDiscount',
|
|
266
|
-
defaultMessage: 'Open Add Cart Discount'
|
|
267
|
-
},
|
|
268
|
-
openAddDiscountCode: {
|
|
269
|
-
id: 'QuickAccess.openAddDiscountCode',
|
|
270
|
-
defaultMessage: 'Open Add Discount Code'
|
|
271
|
-
},
|
|
272
|
-
openSettings: {
|
|
273
|
-
id: 'QuickAccess.openSettings',
|
|
274
|
-
defaultMessage: 'Open Settings'
|
|
275
|
-
},
|
|
276
|
-
openProjectSettings: {
|
|
277
|
-
id: 'QuickAccess.openProjectSettings',
|
|
278
|
-
defaultMessage: 'Open Project Settings'
|
|
279
|
-
},
|
|
280
|
-
openProjectSettingsInternationalTab: {
|
|
281
|
-
id: 'QuickAccess.openProjectSettingsInternationalTab',
|
|
282
|
-
defaultMessage: 'Open Project Settings • International'
|
|
283
|
-
},
|
|
284
|
-
openProjectSettingsTaxesTab: {
|
|
285
|
-
id: 'QuickAccess.openProjectSettingsTaxesTab',
|
|
286
|
-
defaultMessage: 'Open Project Settings • Taxes'
|
|
287
|
-
},
|
|
288
|
-
openProjectSettingsShippingMethodsTab: {
|
|
289
|
-
id: 'QuickAccess.openProjectSettingsShippingMethodsTab',
|
|
290
|
-
defaultMessage: 'Open Project Settings • Shipping Methods'
|
|
291
|
-
},
|
|
292
|
-
openProjectSettingsChannelsTab: {
|
|
293
|
-
id: 'QuickAccess.openProjectSettingsChannelsTab',
|
|
294
|
-
defaultMessage: 'Open Project Settings • Channels'
|
|
295
|
-
},
|
|
296
|
-
openProjectSettingsStoresTab: {
|
|
297
|
-
id: 'QuickAccess.openProjectSettingsStoresTab',
|
|
298
|
-
defaultMessage: 'Open Project Settings • Stores'
|
|
299
|
-
},
|
|
300
|
-
openProductTypesSettings: {
|
|
301
|
-
id: 'QuickAccess.openProductTypesSettings',
|
|
302
|
-
defaultMessage: 'Open Product Types Settings'
|
|
303
|
-
},
|
|
304
|
-
openDeveloperSettings: {
|
|
305
|
-
id: 'QuickAccess.openDeveloperSettings',
|
|
306
|
-
defaultMessage: 'Open Developer Settings'
|
|
307
|
-
},
|
|
308
|
-
openCustomApplicationsSettings: {
|
|
309
|
-
id: 'QuickAccess.openCustomApplicationsSettings',
|
|
310
|
-
defaultMessage: 'Open Custom Applications Settings'
|
|
311
|
-
},
|
|
312
|
-
openApiClientsList: {
|
|
313
|
-
id: 'QuickAccess.openApiClientsList',
|
|
314
|
-
defaultMessage: 'Open API Clients'
|
|
315
|
-
},
|
|
316
|
-
openAddApiClient: {
|
|
317
|
-
id: 'QuickAccess.openAddApiClient',
|
|
318
|
-
defaultMessage: 'Open Add API Client'
|
|
319
|
-
},
|
|
320
|
-
openSupport: {
|
|
321
|
-
id: 'QuickAccess.openSupport',
|
|
322
|
-
defaultMessage: 'Open Support'
|
|
323
|
-
},
|
|
324
|
-
openMyProfile: {
|
|
325
|
-
id: 'QuickAccess.openMyProfile',
|
|
326
|
-
defaultMessage: 'Open My Profile'
|
|
327
|
-
},
|
|
328
|
-
showPrivacyPolicy: {
|
|
329
|
-
id: 'QuickAccess.showPrivacyPolicy',
|
|
330
|
-
defaultMessage: 'Show Privacy Policy'
|
|
331
|
-
},
|
|
332
|
-
logout: {
|
|
333
|
-
id: 'QuickAccess.logout',
|
|
334
|
-
defaultMessage: 'Logout'
|
|
335
|
-
},
|
|
336
|
-
useProject: {
|
|
337
|
-
id: 'QuickAccess.useProject',
|
|
338
|
-
defaultMessage: 'Switch to project "{projectName}"'
|
|
339
|
-
},
|
|
340
|
-
openManageProjects: {
|
|
341
|
-
id: 'QuickAccess.openManageProject',
|
|
342
|
-
defaultMessage: 'Open Manage Projects'
|
|
343
|
-
},
|
|
344
|
-
openManageOrganizations: {
|
|
345
|
-
id: 'QuickAccess.openManageOrganizations',
|
|
346
|
-
defaultMessage: 'Open Manage Organizations'
|
|
347
|
-
},
|
|
348
|
-
// subcommands
|
|
349
|
-
openVariantById: {
|
|
350
|
-
id: 'QuickAccess.openVariantById',
|
|
351
|
-
defaultMessage: 'Open Variant "{id}" (id)'
|
|
352
|
-
},
|
|
353
|
-
openVariantByKey: {
|
|
354
|
-
id: 'QuickAccess.openVariantByKey',
|
|
355
|
-
defaultMessage: 'Open Variant "{key}" (key)'
|
|
356
|
-
},
|
|
357
|
-
openVariantBySku: {
|
|
358
|
-
id: 'QuickAccess.openVariantBySku',
|
|
359
|
-
defaultMessage: 'Open Variant "{sku}" (sku)'
|
|
360
|
-
},
|
|
361
|
-
showProduct: {
|
|
362
|
-
id: 'QuickAccess.showProduct',
|
|
363
|
-
defaultMessage: 'Show Product "{productName}"'
|
|
364
|
-
},
|
|
365
|
-
showProductVariant: {
|
|
366
|
-
id: 'QuickAccess.showProductVariant',
|
|
367
|
-
defaultMessage: 'Show Product Variant "{variantName}"'
|
|
368
|
-
},
|
|
369
|
-
showProductVariantAttributes: {
|
|
370
|
-
id: 'QuickAccess.showProductVariantAttributes',
|
|
371
|
-
defaultMessage: 'Show Attributes'
|
|
372
|
-
},
|
|
373
|
-
showProductVariantImages: {
|
|
374
|
-
id: 'QuickAccess.showProductVariantImages',
|
|
375
|
-
defaultMessage: 'Show Images'
|
|
376
|
-
},
|
|
377
|
-
showProductVariantPrices: {
|
|
378
|
-
id: 'QuickAccess.showProductVariantPrices',
|
|
379
|
-
defaultMessage: 'Show Prices'
|
|
380
|
-
},
|
|
381
|
-
showProductVariantInventory: {
|
|
382
|
-
id: 'QuickAccess.showProductVariantInventory',
|
|
383
|
-
defaultMessage: 'Show Inventory'
|
|
384
|
-
}
|
|
385
|
-
});
|
|
386
|
-
|
|
387
|
-
var _templateObject$3, _templateObject2$2;
|
|
388
|
-
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
389
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context12, _context13; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context12 = ownKeys(Object(t), !0)).call(_context12, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context13 = ownKeys(Object(t))).call(_context13, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
390
|
-
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
391
|
-
const isSelectAllCombo = event => event.key === 'a' && event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
|
|
392
|
-
const isCloseCombo = event => event.key === 'Escape' && !event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
|
|
393
|
-
const getPlatform = () => {
|
|
394
|
-
var _context, _context2, _context3, _context4;
|
|
395
|
-
if (_includesInstanceProperty(_context = navigator.appVersion).call(_context, 'Win')) return 'windows';
|
|
396
|
-
if (_includesInstanceProperty(_context2 = navigator.appVersion).call(_context2, 'Mac')) return 'macos';
|
|
397
|
-
if (_includesInstanceProperty(_context3 = navigator.appVersion).call(_context3, 'X11')) return 'unix';
|
|
398
|
-
if (_includesInstanceProperty(_context4 = navigator.appVersion).call(_context4, 'Linux')) return 'linux';
|
|
399
|
-
return null;
|
|
400
|
-
};
|
|
401
|
-
const hasNewWindowModifier = event => {
|
|
402
|
-
const platform = getPlatform();
|
|
403
|
-
switch (platform) {
|
|
404
|
-
case 'macos':
|
|
405
|
-
return event.metaKey;
|
|
406
|
-
default:
|
|
407
|
-
return event.ctrlKey;
|
|
408
|
-
}
|
|
409
|
-
};
|
|
410
|
-
const shakeAnimation = keyframes(_templateObject$3 || (_templateObject$3 = _taggedTemplateLiteral(["\n from,\n to {\n transform: translate3d(0, 0, 0);\n }\n\n 14%,\n 42%,\n 70% {\n transform: translate3d(-3px, 0, 0);\n }\n\n 28%,\n 56%,\n 84% {\n transform: translate3d(3px, 0, 0);\n }\n"])));
|
|
411
|
-
const initialState = {
|
|
412
|
-
hasNetworkError: false,
|
|
413
|
-
isLoading: false,
|
|
414
|
-
searchText: '',
|
|
415
|
-
selectedResult: -1,
|
|
416
|
-
// Used for UX when browsing through history
|
|
417
|
-
enableHistory: true,
|
|
418
|
-
results: [],
|
|
419
|
-
stack: []
|
|
420
|
-
};
|
|
421
|
-
const reducer = function () {
|
|
422
|
-
var _context5;
|
|
423
|
-
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
|
424
|
-
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
425
|
-
switch (action.type) {
|
|
426
|
-
case 'networkError':
|
|
427
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
428
|
-
hasNetworkError: action.payload
|
|
429
|
-
});
|
|
430
|
-
case 'loading':
|
|
431
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
432
|
-
isLoading: action.payload
|
|
433
|
-
});
|
|
434
|
-
case 'selectedResult':
|
|
435
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
436
|
-
selectedResult: action.payload
|
|
437
|
-
});
|
|
438
|
-
case 'incrementSelectedResult':
|
|
439
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
440
|
-
selectedResult: state.selectedResult === state.results.length - 1 ? 0 : state.selectedResult + 1,
|
|
441
|
-
enableHistory: false
|
|
442
|
-
});
|
|
443
|
-
case 'decrementSelectedResult':
|
|
444
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
445
|
-
selectedResult: state.selectedResult < 1 ? state.results.length - 1 : state.selectedResult - 1,
|
|
446
|
-
enableHistory: false
|
|
447
|
-
});
|
|
448
|
-
case 'pickCommandFromHistory':
|
|
449
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
450
|
-
selectedResult: 0,
|
|
451
|
-
searchText: action.payload.searchText,
|
|
452
|
-
results: action.payload.results,
|
|
453
|
-
stack: []
|
|
454
|
-
// The history does not get changed here, it will be changed along
|
|
455
|
-
// with the regular flow.
|
|
456
|
-
});
|
|
457
|
-
|
|
458
|
-
case 'setNextCommands':
|
|
459
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
460
|
-
stack: [...state.stack, {
|
|
461
|
-
searchText: state.searchText,
|
|
462
|
-
results: state.results,
|
|
463
|
-
selectedResult: state.selectedResult
|
|
464
|
-
}],
|
|
465
|
-
selectedResult: 0,
|
|
466
|
-
enableHistory: false,
|
|
467
|
-
results: action.payload.results
|
|
468
|
-
});
|
|
469
|
-
case 'setPrevCommands':
|
|
470
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
471
|
-
searchText: action.payload.searchText,
|
|
472
|
-
results: action.payload.results,
|
|
473
|
-
selectedResult: 0,
|
|
474
|
-
enableHistory: false,
|
|
475
|
-
// omit last item
|
|
476
|
-
stack: _sliceInstanceProperty(_context5 = state.stack).call(_context5, 0, -1)
|
|
477
|
-
});
|
|
478
|
-
case 'searchText':
|
|
479
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
480
|
-
searchText: action.payload,
|
|
481
|
-
// clear network error when search text is cleared, so that users
|
|
482
|
-
// are tempted to retry
|
|
483
|
-
hasNetworkError: action.payload.length > 0 && state.hasNetworkError
|
|
484
|
-
});
|
|
485
|
-
case 'setSearchTextResults':
|
|
486
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
487
|
-
results: action.payload,
|
|
488
|
-
selectedResult: action.payload.length > 0 ? 0 : -1,
|
|
489
|
-
enableHistory: true,
|
|
490
|
-
stack: []
|
|
491
|
-
});
|
|
492
|
-
case 'resetSearchText':
|
|
493
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
494
|
-
searchText: '',
|
|
495
|
-
results: [],
|
|
496
|
-
selectedResult: -1
|
|
497
|
-
});
|
|
498
|
-
case 'resetResultsWhenClosing':
|
|
499
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
500
|
-
selectedResult: -1,
|
|
501
|
-
enableHistory: true
|
|
502
|
-
});
|
|
503
|
-
case 'reset':
|
|
504
|
-
return initialState;
|
|
505
|
-
default:
|
|
506
|
-
return state;
|
|
507
|
-
}
|
|
508
|
-
};
|
|
509
|
-
var _ref = process.env.NODE_ENV === "production" ? {
|
|
510
|
-
name: "zjik7",
|
|
511
|
-
styles: "display:flex"
|
|
512
|
-
} : {
|
|
513
|
-
name: "vnvgom-Butler",
|
|
514
|
-
styles: "display:flex;label:Butler;",
|
|
515
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ25Ca0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */",
|
|
516
|
-
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
517
|
-
};
|
|
518
|
-
const Butler = props => {
|
|
519
|
-
const intl = useIntl();
|
|
520
|
-
const _useReducer = useReducer(reducer, initialState),
|
|
521
|
-
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
522
|
-
state = _useReducer2[0],
|
|
523
|
-
dispatch = _useReducer2[1];
|
|
524
|
-
const shouldSelectFieldText = useRef(false);
|
|
525
|
-
const isNewWindowCombo = useRef(false);
|
|
526
|
-
const skipNextSelection = useRef(false);
|
|
527
|
-
const searchContainerRef = useRef(null);
|
|
528
|
-
const searchInputRef = useRef(null);
|
|
529
|
-
const setHasNetworkError = useCallback(() => {
|
|
530
|
-
dispatch({
|
|
531
|
-
type: 'networkError',
|
|
532
|
-
payload: true
|
|
533
|
-
});
|
|
534
|
-
}, []);
|
|
535
|
-
const unsetHasNetworkError = useCallback(() => {
|
|
536
|
-
dispatch({
|
|
537
|
-
type: 'networkError',
|
|
538
|
-
payload: false
|
|
539
|
-
});
|
|
540
|
-
}, []);
|
|
541
|
-
const setIsLoading = useCallback(() => {
|
|
542
|
-
dispatch({
|
|
543
|
-
type: 'loading',
|
|
544
|
-
payload: true
|
|
545
|
-
});
|
|
546
|
-
}, []);
|
|
547
|
-
const unsetIsLoading = useCallback(() => {
|
|
548
|
-
dispatch({
|
|
549
|
-
type: 'loading',
|
|
550
|
-
payload: false
|
|
551
|
-
});
|
|
552
|
-
}, []);
|
|
553
|
-
|
|
554
|
-
// Destructure functions from props to reference them in the hook dependency list
|
|
555
|
-
const searchFromParent = props.search,
|
|
556
|
-
onCloseFromParent = props.onClose,
|
|
557
|
-
executeCommandFromParent = props.executeCommand,
|
|
558
|
-
onHistoryEntriesChangeFromParent = props.onHistoryEntriesChange,
|
|
559
|
-
getNextCommandsFromParent = props.getNextCommands;
|
|
560
|
-
const shake = useCallback(() => {
|
|
561
|
-
if (searchContainerRef.current) {
|
|
562
|
-
searchContainerRef.current.classList.remove(props.classNameShakeAnimation);
|
|
563
|
-
// -> triggering reflow
|
|
564
|
-
// eslint-disable-next-line no-void
|
|
565
|
-
void searchContainerRef.current.offsetWidth;
|
|
566
|
-
searchContainerRef.current.classList.add(props.classNameShakeAnimation);
|
|
567
|
-
}
|
|
568
|
-
}, [props.classNameShakeAnimation]);
|
|
569
|
-
const execute = useCallback((command, meta) => {
|
|
570
|
-
var _context6;
|
|
571
|
-
// Only main entries get added to history, so when a subcommand is executed,
|
|
572
|
-
// we add the main command of it to the history (the top-level command).
|
|
573
|
-
//
|
|
574
|
-
// The key to identify history entries by is always the searchText
|
|
575
|
-
// There will never be two history entries with the same searchText
|
|
576
|
-
const entry = state.stack.length === 0 ?
|
|
577
|
-
// The stack is empty, so we are executing a top-level command
|
|
578
|
-
{
|
|
579
|
-
searchText: state.searchText,
|
|
580
|
-
results: state.results
|
|
581
|
-
} :
|
|
582
|
-
// We are executing a subcommand, so we get the top-level command for it,
|
|
583
|
-
// which is at the bottom of the stack.
|
|
584
|
-
{
|
|
585
|
-
searchText: state.stack[0].searchText,
|
|
586
|
-
results: state.stack[0].results
|
|
587
|
-
};
|
|
588
|
-
|
|
589
|
-
// Add the entry to the history, while excluding any earlier history entry
|
|
590
|
-
// with the same search text. This effectively "moves" that entry to the
|
|
591
|
-
// top of the history (with the most recent results), or appends a new entry
|
|
592
|
-
// when it didn't exist before.
|
|
593
|
-
onHistoryEntriesChangeFromParent([..._filterInstanceProperty(_context6 = props.historyEntries).call(_context6, command => command.searchText !== entry.searchText), entry]);
|
|
594
|
-
dispatch({
|
|
595
|
-
type: 'resetSearchText'
|
|
596
|
-
});
|
|
597
|
-
onCloseFromParent();
|
|
598
|
-
executeCommandFromParent(command, meta);
|
|
599
|
-
}, [executeCommandFromParent, onCloseFromParent, onHistoryEntriesChangeFromParent, props.historyEntries, state.results, state.searchText, state.stack]);
|
|
600
|
-
const handleKeyDown = useCallback(event => {
|
|
601
|
-
// Preventing cursor jumps can only happen in onKeyDown, but not in onKeyUp
|
|
602
|
-
event.persist();
|
|
603
|
-
|
|
604
|
-
// We want to know when the user presses cmd+enter (cmd being a meta key).
|
|
605
|
-
// We are only told about this in keyDown, but not in keyUp, so we need
|
|
606
|
-
// to handle it here
|
|
607
|
-
if (event.key === 'Enter' && hasNewWindowModifier(event)) {
|
|
608
|
-
isNewWindowCombo.current = true;
|
|
609
|
-
return;
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
// Avoid selecting the whole page when user selectes everything with
|
|
613
|
-
// a keyboard shortcut. There is probably a better way to do this though.
|
|
614
|
-
// This prevents the whole page from being selected in case the user
|
|
615
|
-
// 1) opens the search box
|
|
616
|
-
// 2) types into it
|
|
617
|
-
// 3) selects all text using cmd+a
|
|
618
|
-
// 4) closes the search box with esc
|
|
619
|
-
// Without this handling, the whole page would now be selected
|
|
620
|
-
if (isSelectAllCombo(event)) {
|
|
621
|
-
// This stops the browser from selecting anything
|
|
622
|
-
event.preventDefault();
|
|
623
|
-
if (searchInputRef.current) {
|
|
624
|
-
// This selects the text in the search input
|
|
625
|
-
searchInputRef.current.setSelectionRange(0, state.searchText.length);
|
|
626
|
-
}
|
|
627
|
-
return;
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
// avoid interfering with other key combinations using modifier keys
|
|
631
|
-
if (event.ctrlKey || event.altKey || event.shiftKey || event.metaKey) return;
|
|
632
|
-
if (isCloseCombo(event)) return;
|
|
633
|
-
|
|
634
|
-
// skip next mouseEnter to avoid setting selectedResult when cursor just
|
|
635
|
-
// happens to be where the results will pop up
|
|
636
|
-
skipNextSelection.current = true;
|
|
637
|
-
if (event.key === 'ArrowDown') {
|
|
638
|
-
// prevent cursor from jumping to end of text input
|
|
639
|
-
event.preventDefault();
|
|
640
|
-
dispatch({
|
|
641
|
-
type: 'incrementSelectedResult'
|
|
642
|
-
});
|
|
643
|
-
return;
|
|
644
|
-
}
|
|
645
|
-
if (event.key === 'ArrowUp') {
|
|
646
|
-
// browse through history
|
|
647
|
-
if (state.searchText.length === 0 || state.selectedResult < 1 && state.enableHistory) {
|
|
648
|
-
var _context7;
|
|
649
|
-
shouldSelectFieldText.current = true;
|
|
650
|
-
const selectedIndex = state.searchText.length === 0 ?
|
|
651
|
-
// When going back the first step
|
|
652
|
-
-1 :
|
|
653
|
-
// When going back more than one step
|
|
654
|
-
_findIndexInstanceProperty(_context7 = props.historyEntries).call(_context7, command => command.searchText === state.searchText);
|
|
655
|
-
// Pick the previous command from the history
|
|
656
|
-
const prevCommand = selectedIndex === -1 ?
|
|
657
|
-
// previous command on top of the history when going back on
|
|
658
|
-
// first step
|
|
659
|
-
last(props.historyEntries) :
|
|
660
|
-
// previous command is deeper down
|
|
661
|
-
// When the history does not exist (negative index), then
|
|
662
|
-
// this implicitly returns undefined
|
|
663
|
-
props.historyEntries[selectedIndex - 1];
|
|
664
|
-
// Skip when no previous entry exists in the history
|
|
665
|
-
if (!prevCommand) return;
|
|
666
|
-
dispatch({
|
|
667
|
-
type: 'pickCommandFromHistory',
|
|
668
|
-
payload: {
|
|
669
|
-
searchText: prevCommand.searchText,
|
|
670
|
-
results: prevCommand.results
|
|
671
|
-
}
|
|
672
|
-
});
|
|
673
|
-
return;
|
|
674
|
-
}
|
|
675
|
-
// prevent cursor from jumping to beginning of text input
|
|
676
|
-
event.preventDefault();
|
|
677
|
-
dispatch({
|
|
678
|
-
type: 'decrementSelectedResult'
|
|
679
|
-
});
|
|
680
|
-
return;
|
|
681
|
-
}
|
|
682
|
-
if (state.selectedResult > -1) {
|
|
683
|
-
if (event.key === 'ArrowRight') {
|
|
684
|
-
const command = state.results[state.selectedResult];
|
|
685
|
-
const searchText = state.searchText;
|
|
686
|
-
const isCursorAtEnd = searchInputRef.current && state.searchText.length === searchInputRef.current.selectionStart;
|
|
687
|
-
const isEverythingSelected = searchInputRef.current && searchInputRef.current.selectionStart === 0 && state.searchText.length === searchInputRef.current.selectionEnd;
|
|
688
|
-
|
|
689
|
-
// only allow diving in when cursor is at end of input or when
|
|
690
|
-
// the complete text is selected (when browsing through history)
|
|
691
|
-
if (!isCursorAtEnd && !isEverythingSelected) return;
|
|
692
|
-
unsetHasNetworkError();
|
|
693
|
-
|
|
694
|
-
// NOTE: since we need to fetch the "next command", which is an async operation,
|
|
695
|
-
// we use a IIFE to process that and eventually update the state.
|
|
696
|
-
(async () => {
|
|
697
|
-
if (command) {
|
|
698
|
-
const nextCommands = await getNextCommandsFromParent(command);
|
|
699
|
-
// avoid moving cursor when there are sub-options
|
|
700
|
-
if (nextCommands.length > 0) {
|
|
701
|
-
// Ensure the search text has not changed while we were loading
|
|
702
|
-
// the next results, otherwise we'd interrupt the user.
|
|
703
|
-
// Throw away the results in case the search text has changed.
|
|
704
|
-
if (state.searchText === searchText) {
|
|
705
|
-
dispatch({
|
|
706
|
-
type: 'setNextCommands',
|
|
707
|
-
payload: {
|
|
708
|
-
results: nextCommands
|
|
709
|
-
}
|
|
710
|
-
});
|
|
711
|
-
}
|
|
712
|
-
return;
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
shake();
|
|
716
|
-
})();
|
|
717
|
-
return;
|
|
718
|
-
}
|
|
719
|
-
if (event.key === 'ArrowLeft') {
|
|
720
|
-
// go left in stack
|
|
721
|
-
const prevCommand = last(state.stack);
|
|
722
|
-
|
|
723
|
-
// do nothing when we can't go left anymore
|
|
724
|
-
if (!prevCommand) return;
|
|
725
|
-
|
|
726
|
-
// prevent cursor from jumping a char to the left in text input
|
|
727
|
-
event.preventDefault();
|
|
728
|
-
dispatch({
|
|
729
|
-
type: 'setPrevCommands',
|
|
730
|
-
payload: {
|
|
731
|
-
searchText: prevCommand.searchText,
|
|
732
|
-
results: prevCommand.results
|
|
733
|
-
}
|
|
734
|
-
});
|
|
735
|
-
return;
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
}, [getNextCommandsFromParent, props.historyEntries, shake, state, unsetHasNetworkError]);
|
|
739
|
-
const handleKeyUp = useCallback(event => {
|
|
740
|
-
// setting the selection can only happen in onKeyUp
|
|
741
|
-
if (shouldSelectFieldText.current) {
|
|
742
|
-
const input = event.target;
|
|
743
|
-
input.focus();
|
|
744
|
-
input.select();
|
|
745
|
-
shouldSelectFieldText.current = false;
|
|
746
|
-
}
|
|
747
|
-
if (event.key !== 'Enter' && !isNewWindowCombo.current) return true;
|
|
748
|
-
|
|
749
|
-
// User just triggered the search
|
|
750
|
-
if (state.selectedResult === -1) return true;
|
|
751
|
-
|
|
752
|
-
// User had something selected and wants to go there
|
|
753
|
-
execute(state.results[state.selectedResult], {
|
|
754
|
-
openInNewTab: isNewWindowCombo.current
|
|
755
|
-
});
|
|
756
|
-
isNewWindowCombo.current = false;
|
|
757
|
-
return true;
|
|
758
|
-
}, [execute, state.results, state.selectedResult]);
|
|
759
|
-
const handleChange = useCallback(event => {
|
|
760
|
-
const searchText = event.target.value;
|
|
761
|
-
if (_trimInstanceProperty(searchText).call(searchText).length === 0) {
|
|
762
|
-
dispatch({
|
|
763
|
-
type: 'reset'
|
|
764
|
-
});
|
|
765
|
-
return;
|
|
766
|
-
}
|
|
767
|
-
dispatch({
|
|
768
|
-
type: 'searchText',
|
|
769
|
-
payload: searchText
|
|
770
|
-
});
|
|
771
|
-
|
|
772
|
-
// A search via network is only triggered when there
|
|
773
|
-
// are more than three characters. So no false loading
|
|
774
|
-
// indication is given.
|
|
775
|
-
if (_trimInstanceProperty(searchText).call(searchText).length > 3) {
|
|
776
|
-
setIsLoading();
|
|
777
|
-
}
|
|
778
|
-
searchFromParent(searchText).then(asyncResults => {
|
|
779
|
-
var _context8, _context9;
|
|
780
|
-
unsetHasNetworkError();
|
|
781
|
-
unsetIsLoading();
|
|
782
|
-
const fuse = new Fuse(asyncResults, {
|
|
783
|
-
keys: [{
|
|
784
|
-
name: 'text',
|
|
785
|
-
weight: 0.6
|
|
786
|
-
}, {
|
|
787
|
-
name: 'keywords',
|
|
788
|
-
weight: 0.4
|
|
789
|
-
}],
|
|
790
|
-
minMatchCharLength: 2,
|
|
791
|
-
includeScore: true
|
|
792
|
-
});
|
|
793
|
-
const searchResults = _sliceInstanceProperty(_context8 = _filterInstanceProperty(_context9 = fuse.search(searchText)
|
|
794
|
-
// Filter out results with a matching score over 0.75
|
|
795
|
-
).call(_context9, result => result.score ? result.score < 0.75 : false)
|
|
796
|
-
// Keep a maximal of 9 results
|
|
797
|
-
).call(_context8, 0, 9);
|
|
798
|
-
dispatch({
|
|
799
|
-
type: 'setSearchTextResults',
|
|
800
|
-
payload: _mapInstanceProperty(searchResults).call(searchResults, result => result.item)
|
|
801
|
-
});
|
|
802
|
-
}, error => {
|
|
803
|
-
// eslint-disable-next-line no-console
|
|
804
|
-
if (process.env.NODE_ENV !== 'production') console.error(error);
|
|
805
|
-
unsetIsLoading();
|
|
806
|
-
setHasNetworkError();
|
|
807
|
-
});
|
|
808
|
-
}, [searchFromParent, setHasNetworkError, setIsLoading, unsetHasNetworkError, unsetIsLoading]);
|
|
809
|
-
const handleContainerClick = useCallback(() => {
|
|
810
|
-
dispatch({
|
|
811
|
-
type: 'resetResultsWhenClosing'
|
|
812
|
-
});
|
|
813
|
-
onCloseFromParent();
|
|
814
|
-
}, [onCloseFromParent]);
|
|
815
|
-
const createCommandMouseEnterHandler = useCallback(index => () => {
|
|
816
|
-
// In case the cursor happened to be in a location where a
|
|
817
|
-
// result would appear, it would trigger onMouseEnter and the
|
|
818
|
-
// result would be selected immediately. This is not something
|
|
819
|
-
// a user would expect, hence we prevent it from happening.
|
|
820
|
-
// The user has to move the cursor to an option explicitly for
|
|
821
|
-
// it to become active. However, the user can always click and
|
|
822
|
-
// that action will be triggered.
|
|
823
|
-
if (skipNextSelection.current) {
|
|
824
|
-
skipNextSelection.current = false;
|
|
825
|
-
return;
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
// sets the selected result, mainly for the hover effect
|
|
829
|
-
dispatch({
|
|
830
|
-
type: 'selectedResult',
|
|
831
|
-
payload: index
|
|
832
|
-
});
|
|
833
|
-
}, []);
|
|
834
|
-
const createCommandClickHandler = useCallback(command => event => {
|
|
835
|
-
execute(command, {
|
|
836
|
-
openInNewTab: hasNewWindowModifier(event)
|
|
837
|
-
});
|
|
838
|
-
}, [execute]);
|
|
839
|
-
return jsx(ButlerContainer, {
|
|
840
|
-
onClick: handleContainerClick,
|
|
841
|
-
"data-testid": "quick-access",
|
|
842
|
-
tabIndex: -1,
|
|
843
|
-
children: jsxs("div", {
|
|
844
|
-
ref: searchContainerRef,
|
|
845
|
-
css: /*#__PURE__*/css("background-color:", customProperties.colorSurface, ";border:0;border-radius:", customProperties.borderRadius4, ";min-height:40px;z-index:20002;width:400px;margin:40px auto;overflow:hidden;-webkit-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);-moz-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);padding-bottom:", state.hasNetworkError ? '0' : customProperties.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcWxCZ0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
|
|
846
|
-
onClick: event => {
|
|
847
|
-
// Avoid closing when the searchContainer itself is clicked
|
|
848
|
-
// If we don't do this, then the overlay will close when e.g.
|
|
849
|
-
// the search input is clicked.
|
|
850
|
-
event.stopPropagation();
|
|
851
|
-
event.preventDefault();
|
|
852
|
-
},
|
|
853
|
-
children: [jsxs("div", {
|
|
854
|
-
css: _ref,
|
|
855
|
-
children: [jsx("label", {
|
|
856
|
-
htmlFor: "quick-access-search-input",
|
|
857
|
-
css: /*#__PURE__*/css("align-self:center;padding-left:", customProperties.spacingM, ";margin-top:", customProperties.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc25Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
|
|
858
|
-
children: jsx(SearchIcon, {
|
|
859
|
-
color: "neutral60"
|
|
860
|
-
})
|
|
861
|
-
}), jsx("input", {
|
|
862
|
-
id: "quick-access-search-input",
|
|
863
|
-
ref: searchInputRef,
|
|
864
|
-
placeholder: intl.formatMessage(messages.inputPlacehoder),
|
|
865
|
-
type: "text",
|
|
866
|
-
css: /*#__PURE__*/css("width:100%;border:0;outline:0;font-size:22px;font-weight:300;padding:", customProperties.spacingM, " ", customProperties.spacingM, " ", customProperties.spacingS, " ", customProperties.spacingS, ";&::placeholder{color:", customProperties.colorNeutral60, ";}" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbW9Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
|
|
867
|
-
value: state.searchText,
|
|
868
|
-
onChange: handleChange,
|
|
869
|
-
onKeyDown: handleKeyDown,
|
|
870
|
-
onKeyUp: handleKeyUp,
|
|
871
|
-
autoFocus: true,
|
|
872
|
-
autoComplete: "off",
|
|
873
|
-
"data-testid": "quick-access-search-input"
|
|
874
|
-
}), state.isLoading && jsx("div", {
|
|
875
|
-
css: /*#__PURE__*/css("align-self:center;margin-top:", customProperties.spacingS, ";margin-right:", customProperties.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeXBCc0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
|
|
876
|
-
children: jsx(LoadingSpinner, {})
|
|
877
|
-
})]
|
|
878
|
-
}), ((_context10, _context11) => {
|
|
879
|
-
if (state.hasNetworkError) return jsx("div", {
|
|
880
|
-
css: /*#__PURE__*/css("overflow:hidden;white-space:nowrap;cursor:default;background:", customProperties.colorError, ";text-align:center;text-transform:uppercase;color:", customProperties.colorSurface, ";font-size:", customProperties.fontSizeSmall, ";padding:", customProperties.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdXFCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
|
|
881
|
-
children: jsx(FormattedMessage, _objectSpread({}, messages.offline))
|
|
882
|
-
});
|
|
883
|
-
if (state.results.length === 0 && _trimInstanceProperty(_context10 = state.searchText).call(_context10).length > 0) return jsx("div", {
|
|
884
|
-
css: /*#__PURE__*/css("overflow:hidden;white-space:nowrap;cursor:default;background:", customProperties.colorNeutral, ";color:", customProperties.colorSolid, ";text-align:center;text-transform:uppercase;font-size:", customProperties.fontSizeSmall, ";padding:", customProperties.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMHJCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
|
|
885
|
-
children: jsx(FormattedMessage, _objectSpread({}, messages.noResults))
|
|
886
|
-
});
|
|
887
|
-
return _mapInstanceProperty(_context11 = state.results).call(_context11, (command, index) => jsx(ButlerCommand, {
|
|
888
|
-
command: command,
|
|
889
|
-
isSelected: state.selectedResult === index,
|
|
890
|
-
onMouseEnter: createCommandMouseEnterHandler(index),
|
|
891
|
-
onClick: createCommandClickHandler(command)
|
|
892
|
-
}, command.id));
|
|
893
|
-
})()]
|
|
894
|
-
})
|
|
895
|
-
});
|
|
896
|
-
};
|
|
897
|
-
Butler.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
898
|
-
historyEntries: _pt.arrayOf(_pt.any).isRequired,
|
|
899
|
-
onHistoryEntriesChange: _pt.func.isRequired,
|
|
900
|
-
search: _pt.func.isRequired,
|
|
901
|
-
getNextCommands: _pt.func.isRequired,
|
|
902
|
-
executeCommand: _pt.func.isRequired,
|
|
903
|
-
onClose: _pt.func.isRequired,
|
|
904
|
-
classNameShakeAnimation: _pt.string.isRequired
|
|
905
|
-
} : {};
|
|
906
|
-
Butler.displayName = 'Butler';
|
|
907
|
-
const ButlerWithAnimation = props => jsx(ClassNames, {
|
|
908
|
-
children: _ref2 => {
|
|
909
|
-
let css = _ref2.css;
|
|
910
|
-
return jsx(Butler, _objectSpread(_objectSpread({}, props), {}, {
|
|
911
|
-
classNameShakeAnimation: css(_templateObject2$2 || (_templateObject2$2 = _taggedTemplateLiteral(["\n animation-duration: 0.45s;\n animation-fill-mode: both;\n animation-name: ", ";\n "])), shakeAnimation)
|
|
912
|
-
}));
|
|
913
|
-
}
|
|
914
|
-
});
|
|
915
|
-
|
|
916
|
-
// eslint-disable-next-line import/prefer-default-export
|
|
917
|
-
|
|
918
|
-
const permissions = {
|
|
919
|
-
ViewOrders: 'ViewOrders',
|
|
920
|
-
ManageOrders: 'ManageOrders',
|
|
921
|
-
ViewProducts: 'ViewProducts',
|
|
922
|
-
ManageProducts: 'ManageProducts',
|
|
923
|
-
ViewCategories: 'ViewCategories',
|
|
924
|
-
ManageCategories: 'ManageCategories',
|
|
925
|
-
ViewCustomers: 'ViewCustomers',
|
|
926
|
-
ManageCustomers: 'ManageCustomers',
|
|
927
|
-
ViewCustomerGroups: 'ViewCustomerGroups',
|
|
928
|
-
ManageCustomerGroups: 'ManageCustomerGroups',
|
|
929
|
-
ViewProductDiscounts: 'ViewProductDiscounts',
|
|
930
|
-
ManageProductDiscounts: 'ManageProductDiscounts',
|
|
931
|
-
ViewDiscountCodes: 'ViewDiscountCodes',
|
|
932
|
-
ManageDiscountCodes: 'ManageDiscountCodes',
|
|
933
|
-
ViewCartDiscounts: 'ViewCartDiscounts',
|
|
934
|
-
ManageCartDiscounts: 'ManageCartDiscounts',
|
|
935
|
-
ViewProjectSettings: 'ViewProjectSettings',
|
|
936
|
-
ManageProjectSettings: 'ManageProjectSettings',
|
|
937
|
-
ViewDeveloperSettings: 'ViewDeveloperSettings',
|
|
938
|
-
ManageDeveloperSettings: 'ManageDeveloperSettings',
|
|
939
|
-
ViewProductTypes: 'ViewProductTypes',
|
|
940
|
-
ManageProductTypes: 'ManageProductTypes'
|
|
941
|
-
};
|
|
942
|
-
|
|
943
|
-
const actionTypes = {
|
|
944
|
-
go: 'go'
|
|
945
|
-
};
|
|
946
|
-
|
|
947
|
-
var _templateObject$2;
|
|
948
|
-
function nonNullable(value) {
|
|
949
|
-
return value !== null && value !== undefined && typeof value !== 'boolean';
|
|
950
|
-
}
|
|
951
|
-
const createCommands = _ref => {
|
|
952
|
-
var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context13;
|
|
953
|
-
let intl = _ref.intl,
|
|
954
|
-
applicationContext = _ref.applicationContext,
|
|
955
|
-
featureToggles = _ref.featureToggles,
|
|
956
|
-
changeProjectDataLocale = _ref.changeProjectDataLocale;
|
|
957
|
-
return _filterInstanceProperty(_context = [applicationContext.project && applicationContext.permissions && featureToggles.canViewDashboard && hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
|
|
958
|
-
id: 'go/dashboard',
|
|
959
|
-
text: intl.formatMessage(messages.openDashboard),
|
|
960
|
-
keywords: ['Go to Dashboard'],
|
|
961
|
-
action: {
|
|
962
|
-
type: actionTypes.go,
|
|
963
|
-
to: "/".concat(applicationContext.project.key, "/dashboard")
|
|
964
|
-
}
|
|
965
|
-
}, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
|
|
966
|
-
id: 'go/products',
|
|
967
|
-
text: intl.formatMessage(messages.openProducts),
|
|
968
|
-
keywords: ['Go to Products'],
|
|
969
|
-
action: {
|
|
970
|
-
type: actionTypes.go,
|
|
971
|
-
to: "/".concat(applicationContext.project.key, "/products")
|
|
972
|
-
},
|
|
973
|
-
subCommands: _filterInstanceProperty(_context2 = [hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
|
|
974
|
-
id: 'go/products/list',
|
|
975
|
-
text: intl.formatMessage(messages.openProductList),
|
|
976
|
-
action: {
|
|
977
|
-
type: actionTypes.go,
|
|
978
|
-
to: "/".concat(applicationContext.project.key, "/products")
|
|
979
|
-
}
|
|
980
|
-
}, hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
|
|
981
|
-
id: 'go/products/modified',
|
|
982
|
-
text: intl.formatMessage(messages.openModifiedProducts),
|
|
983
|
-
action: {
|
|
984
|
-
type: actionTypes.go,
|
|
985
|
-
to: "/".concat(applicationContext.project.key, "/products/modified")
|
|
986
|
-
}
|
|
987
|
-
}, hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && featureToggles.pimSearch && {
|
|
988
|
-
id: 'go/products/pim-search',
|
|
989
|
-
text: intl.formatMessage(messages.openPimSearch),
|
|
990
|
-
action: {
|
|
991
|
-
type: actionTypes.go,
|
|
992
|
-
to: "/".concat(applicationContext.project.key, "/products")
|
|
993
|
-
}
|
|
994
|
-
}, hasSomePermissions([permissions.ManageProducts], applicationContext.permissions) && {
|
|
995
|
-
id: 'go/products/add',
|
|
996
|
-
text: intl.formatMessage(messages.openAddProducts),
|
|
997
|
-
action: {
|
|
998
|
-
type: actionTypes.go,
|
|
999
|
-
to: "/".concat(applicationContext.project.key, "/products/new")
|
|
1000
|
-
}
|
|
1001
|
-
}]).call(_context2, nonNullable)
|
|
1002
|
-
}, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
|
|
1003
|
-
id: 'go/categories',
|
|
1004
|
-
text: intl.formatMessage(messages.openCategories),
|
|
1005
|
-
keywords: ['Go to Categories'],
|
|
1006
|
-
action: {
|
|
1007
|
-
type: actionTypes.go,
|
|
1008
|
-
to: "/".concat(applicationContext.project.key, "/categories")
|
|
1009
|
-
},
|
|
1010
|
-
subCommands: _filterInstanceProperty(_context3 = [hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
|
|
1011
|
-
id: 'go/categories/list',
|
|
1012
|
-
text: intl.formatMessage(messages.openCategoriesList),
|
|
1013
|
-
action: {
|
|
1014
|
-
type: actionTypes.go,
|
|
1015
|
-
to: "/".concat(applicationContext.project.key, "/categories?mode=list")
|
|
1016
|
-
}
|
|
1017
|
-
}, hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
|
|
1018
|
-
id: 'go/categories/search',
|
|
1019
|
-
text: intl.formatMessage(messages.openCategoriesSearch),
|
|
1020
|
-
action: {
|
|
1021
|
-
type: actionTypes.go,
|
|
1022
|
-
to: "/".concat(applicationContext.project.key, "/categories?mode=search")
|
|
1023
|
-
}
|
|
1024
|
-
}, hasSomePermissions([permissions.ManageCategories], applicationContext.permissions) && {
|
|
1025
|
-
id: 'go/categories/add',
|
|
1026
|
-
text: intl.formatMessage(messages.openAddCategory),
|
|
1027
|
-
action: {
|
|
1028
|
-
type: actionTypes.go,
|
|
1029
|
-
to: "/".concat(applicationContext.project.key, "/categories/new")
|
|
1030
|
-
}
|
|
1031
|
-
}]).call(_context3, nonNullable)
|
|
1032
|
-
}, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewCustomers, permissions.ViewCustomerGroups], applicationContext.permissions) && {
|
|
1033
|
-
id: 'go/customers',
|
|
1034
|
-
text: intl.formatMessage(messages.openCustomers),
|
|
1035
|
-
keywords: ['Go to Customers'],
|
|
1036
|
-
action: {
|
|
1037
|
-
type: actionTypes.go,
|
|
1038
|
-
to: "/".concat(applicationContext.project.key, "/customers")
|
|
1039
|
-
},
|
|
1040
|
-
subCommands: _filterInstanceProperty(_context4 = [hasSomePermissions([permissions.ViewCustomers], applicationContext.permissions) && {
|
|
1041
|
-
id: 'go/customers/list',
|
|
1042
|
-
text: intl.formatMessage(messages.openCustomersList),
|
|
1043
|
-
action: {
|
|
1044
|
-
type: actionTypes.go,
|
|
1045
|
-
to: "/".concat(applicationContext.project.key, "/customers")
|
|
1046
|
-
}
|
|
1047
|
-
}, hasSomePermissions([permissions.ManageCustomers], applicationContext.permissions) && {
|
|
1048
|
-
id: 'go/customers/new',
|
|
1049
|
-
text: intl.formatMessage(messages.openAddCustomer),
|
|
1050
|
-
action: {
|
|
1051
|
-
type: actionTypes.go,
|
|
1052
|
-
to: "/".concat(applicationContext.project.key, "/customers/new")
|
|
1053
|
-
}
|
|
1054
|
-
}, hasSomePermissions([permissions.ViewCustomerGroups], applicationContext.permissions) && {
|
|
1055
|
-
id: 'go/customer/customer-groups',
|
|
1056
|
-
text: intl.formatMessage(messages.openCustomerGroupsList),
|
|
1057
|
-
action: {
|
|
1058
|
-
type: actionTypes.go,
|
|
1059
|
-
to: "/".concat(applicationContext.project.key, "/customers/customer-groups")
|
|
1060
|
-
}
|
|
1061
|
-
}, hasSomePermissions([permissions.ManageCustomerGroups], applicationContext.permissions) && {
|
|
1062
|
-
id: 'go/customers/customer-groups/add',
|
|
1063
|
-
text: intl.formatMessage(messages.openAddCustomerGroup),
|
|
1064
|
-
action: {
|
|
1065
|
-
type: actionTypes.go,
|
|
1066
|
-
to: "/".concat(applicationContext.project.key, "/customers/customer-groups/new")
|
|
1067
|
-
}
|
|
1068
|
-
}]).call(_context4, nonNullable)
|
|
1069
|
-
}, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
|
|
1070
|
-
id: 'go/orders',
|
|
1071
|
-
text: intl.formatMessage(messages.openOrders),
|
|
1072
|
-
keywords: ['Go to Orders'],
|
|
1073
|
-
action: {
|
|
1074
|
-
type: actionTypes.go,
|
|
1075
|
-
to: "/".concat(applicationContext.project.key, "/orders")
|
|
1076
|
-
},
|
|
1077
|
-
subCommands: _filterInstanceProperty(_context5 = [hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
|
|
1078
|
-
id: 'go/orders/list',
|
|
1079
|
-
text: intl.formatMessage(messages.openOrdersList),
|
|
1080
|
-
action: {
|
|
1081
|
-
type: actionTypes.go,
|
|
1082
|
-
to: "/".concat(applicationContext.project.key, "/orders")
|
|
1083
|
-
}
|
|
1084
|
-
}, hasSomePermissions([permissions.ManageOrders], applicationContext.permissions) && {
|
|
1085
|
-
id: 'go/orders/add',
|
|
1086
|
-
text: intl.formatMessage(messages.openAddOrder),
|
|
1087
|
-
action: {
|
|
1088
|
-
type: actionTypes.go,
|
|
1089
|
-
to: "/".concat(applicationContext.project.key, "/orders/new")
|
|
1090
|
-
}
|
|
1091
|
-
}]).call(_context5, nonNullable)
|
|
1092
|
-
}, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewDiscountCodes, permissions.ViewProductDiscounts, permissions.ViewCartDiscounts], applicationContext.permissions) && {
|
|
1093
|
-
id: 'go/discounts',
|
|
1094
|
-
text: intl.formatMessage(messages.openDiscounts),
|
|
1095
|
-
keywords: ['Go to Discounts'],
|
|
1096
|
-
action: {
|
|
1097
|
-
type: actionTypes.go,
|
|
1098
|
-
to: "/".concat(applicationContext.project.key, "/discounts")
|
|
1099
|
-
},
|
|
1100
|
-
subCommands: _filterInstanceProperty(_context6 = [hasSomePermissions([permissions.ViewProductDiscounts], applicationContext.permissions) && {
|
|
1101
|
-
id: 'go/discounts/products/list',
|
|
1102
|
-
text: intl.formatMessage(messages.openProductDiscountsList),
|
|
1103
|
-
action: {
|
|
1104
|
-
type: actionTypes.go,
|
|
1105
|
-
to: "/".concat(applicationContext.project.key, "/discounts/products")
|
|
1106
|
-
}
|
|
1107
|
-
}, hasSomePermissions([permissions.ViewCartDiscounts], applicationContext.permissions) && {
|
|
1108
|
-
id: 'go/discounts/carts/list',
|
|
1109
|
-
text: intl.formatMessage(messages.openCartDiscountsList),
|
|
1110
|
-
action: {
|
|
1111
|
-
type: actionTypes.go,
|
|
1112
|
-
to: "/".concat(applicationContext.project.key, "/discounts/carts")
|
|
1113
|
-
}
|
|
1114
|
-
}, hasSomePermissions([permissions.ViewDiscountCodes], applicationContext.permissions) && {
|
|
1115
|
-
id: 'go/discounts/codes/list',
|
|
1116
|
-
text: intl.formatMessage(messages.openDiscountCodesList),
|
|
1117
|
-
action: {
|
|
1118
|
-
type: actionTypes.go,
|
|
1119
|
-
to: "/".concat(applicationContext.project.key, "/discounts/codes")
|
|
1120
|
-
}
|
|
1121
|
-
}, hasSomePermissions([permissions.ManageProductDiscounts, permissions.ManageDiscountCodes, permissions.ManageCartDiscounts], applicationContext.permissions) && {
|
|
1122
|
-
id: 'go/discounts/add',
|
|
1123
|
-
text: intl.formatMessage(messages.openAddDiscount),
|
|
1124
|
-
action: {
|
|
1125
|
-
type: actionTypes.go,
|
|
1126
|
-
to: "/".concat(applicationContext.project.key, "/discounts/new")
|
|
1127
|
-
},
|
|
1128
|
-
subCommands: _filterInstanceProperty(_context7 = [hasSomePermissions([permissions.ManageProductDiscounts], applicationContext.permissions) && {
|
|
1129
|
-
id: 'go/discounts/product/add',
|
|
1130
|
-
text: intl.formatMessage(messages.openAddProductDiscount),
|
|
1131
|
-
action: {
|
|
1132
|
-
type: actionTypes.go,
|
|
1133
|
-
to: "/".concat(applicationContext.project.key, "/discounts/products/new")
|
|
1134
|
-
}
|
|
1135
|
-
}, hasSomePermissions([permissions.ManageCartDiscounts], applicationContext.permissions) && {
|
|
1136
|
-
id: 'go/discounts/cart/add',
|
|
1137
|
-
text: intl.formatMessage(messages.openAddCartDiscount),
|
|
1138
|
-
action: {
|
|
1139
|
-
type: actionTypes.go,
|
|
1140
|
-
to: "/".concat(applicationContext.project.key, "/discounts/carts/new")
|
|
1141
|
-
}
|
|
1142
|
-
}, hasSomePermissions([permissions.ManageDiscountCodes], applicationContext.permissions) && {
|
|
1143
|
-
id: 'go/discounts/code/add',
|
|
1144
|
-
text: intl.formatMessage(messages.openAddCartDiscount),
|
|
1145
|
-
action: {
|
|
1146
|
-
type: actionTypes.go,
|
|
1147
|
-
to: "/".concat(applicationContext.project.key, "/discounts/codes/new")
|
|
1148
|
-
}
|
|
1149
|
-
}]).call(_context7, nonNullable)
|
|
1150
|
-
}]).call(_context6, nonNullable)
|
|
1151
|
-
}, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewProjectSettings, permissions.ViewDeveloperSettings, permissions.ViewProductTypes], applicationContext.permissions) && {
|
|
1152
|
-
id: 'go/settings',
|
|
1153
|
-
text: intl.formatMessage(messages.openSettings),
|
|
1154
|
-
keywords: ['Go to Settings'],
|
|
1155
|
-
action: {
|
|
1156
|
-
type: actionTypes.go,
|
|
1157
|
-
to: "/".concat(applicationContext.project.key, "/settings/project")
|
|
1158
|
-
},
|
|
1159
|
-
subCommands: _filterInstanceProperty(_context8 = [hasSomePermissions([permissions.ViewProjectSettings, permissions.ManageProjectSettings], applicationContext.permissions) && {
|
|
1160
|
-
id: 'go/settings/project',
|
|
1161
|
-
text: intl.formatMessage(messages.openProjectSettings),
|
|
1162
|
-
action: {
|
|
1163
|
-
type: actionTypes.go,
|
|
1164
|
-
to: "/".concat(applicationContext.project.key, "/settings/project")
|
|
1165
|
-
},
|
|
1166
|
-
subCommands: _filterInstanceProperty(_context9 = [{
|
|
1167
|
-
id: 'go/settings/project/international',
|
|
1168
|
-
text: intl.formatMessage(messages.openProjectSettingsInternationalTab),
|
|
1169
|
-
action: {
|
|
1170
|
-
type: actionTypes.go,
|
|
1171
|
-
to: "/".concat(applicationContext.project.key, "/settings/project/international")
|
|
1172
|
-
}
|
|
1173
|
-
}, {
|
|
1174
|
-
id: 'go/settings/project/taxes',
|
|
1175
|
-
text: intl.formatMessage(messages.openProjectSettingsTaxesTab),
|
|
1176
|
-
action: {
|
|
1177
|
-
type: actionTypes.go,
|
|
1178
|
-
to: "/".concat(applicationContext.project.key, "/settings/project/taxes")
|
|
1179
|
-
}
|
|
1180
|
-
}, {
|
|
1181
|
-
id: 'go/settings/project/shipping-methods',
|
|
1182
|
-
text: intl.formatMessage(messages.openProjectSettingsShippingMethodsTab),
|
|
1183
|
-
action: {
|
|
1184
|
-
type: actionTypes.go,
|
|
1185
|
-
to: "/".concat(applicationContext.project.key, "/settings/project/shipping-methods")
|
|
1186
|
-
}
|
|
1187
|
-
}, {
|
|
1188
|
-
id: 'go/settings/project/channels',
|
|
1189
|
-
text: intl.formatMessage(messages.openProjectSettingsChannelsTab),
|
|
1190
|
-
action: {
|
|
1191
|
-
type: actionTypes.go,
|
|
1192
|
-
to: "/".concat(applicationContext.project.key, "/settings/project/channels")
|
|
1193
|
-
}
|
|
1194
|
-
}, {
|
|
1195
|
-
id: 'go/settings/project/stores',
|
|
1196
|
-
text: intl.formatMessage(messages.openProjectSettingsStoresTab),
|
|
1197
|
-
action: {
|
|
1198
|
-
type: actionTypes.go,
|
|
1199
|
-
to: "/".concat(applicationContext.project.key, "/settings/project/stores")
|
|
1200
|
-
}
|
|
1201
|
-
}]).call(_context9, nonNullable)
|
|
1202
|
-
}, hasSomePermissions([permissions.ViewProductTypes], applicationContext.permissions) && {
|
|
1203
|
-
id: 'go/settings/product-types',
|
|
1204
|
-
text: intl.formatMessage(messages.openProductTypesSettings),
|
|
1205
|
-
action: {
|
|
1206
|
-
type: actionTypes.go,
|
|
1207
|
-
to: "/".concat(applicationContext.project.key, "/settings/product-types")
|
|
1208
|
-
}
|
|
1209
|
-
}, hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
|
|
1210
|
-
id: 'go/settings/developer',
|
|
1211
|
-
text: intl.formatMessage(messages.openDeveloperSettings),
|
|
1212
|
-
action: {
|
|
1213
|
-
type: actionTypes.go,
|
|
1214
|
-
to: "/".concat(applicationContext.project.key, "/settings/developer")
|
|
1215
|
-
},
|
|
1216
|
-
subCommands: _filterInstanceProperty(_context10 = [hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
|
|
1217
|
-
id: 'go/settings/developer/api-clients/list',
|
|
1218
|
-
text: intl.formatMessage(messages.openApiClientsList),
|
|
1219
|
-
action: {
|
|
1220
|
-
type: actionTypes.go,
|
|
1221
|
-
to: "/".concat(applicationContext.project.key, "/settings/developer/api-clients")
|
|
1222
|
-
}
|
|
1223
|
-
}, hasSomePermissions([permissions.ManageDeveloperSettings], applicationContext.permissions) && {
|
|
1224
|
-
id: 'go/settings/developer/api-clients/add',
|
|
1225
|
-
text: intl.formatMessage(messages.openAddApiClient),
|
|
1226
|
-
action: {
|
|
1227
|
-
type: actionTypes.go,
|
|
1228
|
-
to: "/".concat(applicationContext.project.key, "/settings/developer/api-clients/new")
|
|
1229
|
-
}
|
|
1230
|
-
}]).call(_context10, nonNullable)
|
|
1231
|
-
}, featureToggles.customApplications && hasSomePermissions([permissions.ManageProjectSettings], applicationContext.permissions) && {
|
|
1232
|
-
id: 'go/settings/custom-applications',
|
|
1233
|
-
text: intl.formatMessage(messages.openCustomApplicationsSettings),
|
|
1234
|
-
action: {
|
|
1235
|
-
type: actionTypes.go,
|
|
1236
|
-
to: "/".concat(applicationContext.project.key, "/settings/custom-applications")
|
|
1237
|
-
}
|
|
1238
|
-
}]).call(_context8, nonNullable)
|
|
1239
|
-
}, applicationContext.project && applicationContext.project.languages && applicationContext.project.languages.length > 1 && {
|
|
1240
|
-
id: 'action/set-resource-language',
|
|
1241
|
-
text: intl.formatMessage(messages.setResourceLanguage),
|
|
1242
|
-
keywords: ['set resource locale', 'set project data language', 'set project data locale'],
|
|
1243
|
-
action: () => void 0,
|
|
1244
|
-
// We would know these statically, but we define them here as we don't
|
|
1245
|
-
// want to include them in the top-level search results
|
|
1246
|
-
subCommands: () => {
|
|
1247
|
-
var _context11, _context12;
|
|
1248
|
-
return _Promise.resolve(_filterInstanceProperty(_context11 = _mapInstanceProperty(_context12 = applicationContext.project ? applicationContext.project.languages : []).call(_context12, language => changeProjectDataLocale && {
|
|
1249
|
-
id: "action/set-resource-language/".concat(language),
|
|
1250
|
-
text: oneLineTrim(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral(["\n ", "\n ", "\n "])), language, language === applicationContext.dataLocale ? ' (active)' : ''),
|
|
1251
|
-
action: () => {
|
|
1252
|
-
changeProjectDataLocale(language);
|
|
1253
|
-
|
|
1254
|
-
// We reload, since ProjectDataLocale is written in a way where
|
|
1255
|
-
// only the tree under the parent container reloads, but
|
|
1256
|
-
// not all of them reload.
|
|
1257
|
-
// So this action would seem like it had not effect, unless we
|
|
1258
|
-
// reload
|
|
1259
|
-
location.reload();
|
|
1260
|
-
}
|
|
1261
|
-
})).call(_context11, nonNullable));
|
|
1262
|
-
}
|
|
1263
|
-
}, {
|
|
1264
|
-
id: 'go/support',
|
|
1265
|
-
text: intl.formatMessage(messages.openSupport),
|
|
1266
|
-
keywords: ['Go to support'],
|
|
1267
|
-
action: {
|
|
1268
|
-
type: actionTypes.go,
|
|
1269
|
-
to: SUPPORT_PORTAL_URL
|
|
1270
|
-
}
|
|
1271
|
-
}, {
|
|
1272
|
-
id: 'go/account-profile',
|
|
1273
|
-
text: intl.formatMessage(messages.openMyProfile),
|
|
1274
|
-
keywords: ['Go to user account', 'Go to profile', 'Open profile'],
|
|
1275
|
-
action: {
|
|
1276
|
-
type: actionTypes.go,
|
|
1277
|
-
to: "/account/profile"
|
|
1278
|
-
}
|
|
1279
|
-
}, {
|
|
1280
|
-
id: 'go/privacy-policy',
|
|
1281
|
-
text: intl.formatMessage(messages.showPrivacyPolicy),
|
|
1282
|
-
keywords: ['Open Privacy Policy'],
|
|
1283
|
-
action: {
|
|
1284
|
-
type: actionTypes.go,
|
|
1285
|
-
to: 'https://commercetools.com/privacy#suppliers'
|
|
1286
|
-
}
|
|
1287
|
-
}, {
|
|
1288
|
-
id: 'go/logout',
|
|
1289
|
-
text: intl.formatMessage(messages.logout),
|
|
1290
|
-
keywords: ['Sign out'],
|
|
1291
|
-
action: {
|
|
1292
|
-
type: actionTypes.go,
|
|
1293
|
-
to: "/logout?reason=".concat(LOGOUT_REASONS.USER)
|
|
1294
|
-
}
|
|
1295
|
-
}, {
|
|
1296
|
-
id: 'go/manage-projects',
|
|
1297
|
-
text: intl.formatMessage(messages.openManageProjects),
|
|
1298
|
-
keywords: ['Go to manage projects', 'Go to projects', 'Open projects list'],
|
|
1299
|
-
action: {
|
|
1300
|
-
type: actionTypes.go,
|
|
1301
|
-
to: "/account/projects"
|
|
1302
|
-
}
|
|
1303
|
-
}, {
|
|
1304
|
-
id: 'go/manage-organizations',
|
|
1305
|
-
text: intl.formatMessage(messages.openManageOrganizations),
|
|
1306
|
-
keywords: ['Go to manage organizations', 'Go to organizations', 'Open organizations list'],
|
|
1307
|
-
action: {
|
|
1308
|
-
type: actionTypes.go,
|
|
1309
|
-
to: "/account/organizations"
|
|
1310
|
-
}
|
|
1311
|
-
}, ...(applicationContext.user ? _mapInstanceProperty(_context13 = applicationContext.user.projects.results).call(_context13, userProject => ({
|
|
1312
|
-
id: "go/project(".concat(userProject.key, ")"),
|
|
1313
|
-
text: intl.formatMessage(messages.useProject, {
|
|
1314
|
-
projectName: userProject.name
|
|
1315
|
-
}),
|
|
1316
|
-
keywords: [userProject.key],
|
|
1317
|
-
action: () => {
|
|
1318
|
-
// Switching projects needs a full redirect so that
|
|
1319
|
-
// the feature flags are reloaded (and things caches get destroyed)
|
|
1320
|
-
window.location.href = "/".concat(userProject.key);
|
|
1321
|
-
}
|
|
1322
|
-
})) : [])]).call(_context, nonNullable);
|
|
1323
|
-
};
|
|
1324
|
-
|
|
1325
|
-
const STORAGE_KEY = 'quickAccessHistoryEntries';
|
|
1326
|
-
const saveHistoryEntries = historyEntries => {
|
|
1327
|
-
try {
|
|
1328
|
-
window.sessionStorage.setItem(STORAGE_KEY, _JSON$stringify(historyEntries));
|
|
1329
|
-
return true;
|
|
1330
|
-
} catch (error) {
|
|
1331
|
-
return false;
|
|
1332
|
-
}
|
|
1333
|
-
};
|
|
1334
|
-
const loadHistoryEntries = () => {
|
|
1335
|
-
try {
|
|
1336
|
-
const value = sessionStorage.getItem(STORAGE_KEY);
|
|
1337
|
-
return value ? JSON.parse(value) : [];
|
|
1338
|
-
} catch (error) {
|
|
1339
|
-
return [];
|
|
1340
|
-
}
|
|
1341
|
-
};
|
|
1342
|
-
|
|
1343
|
-
var _templateObject$1, _templateObject2$1, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
|
|
1344
|
-
var QuickAccessProductQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccessProduct" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productId" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "productId" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "allVariants" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 208, source: { body: "query QuickAccessProduct($productId: String!) {\n product(id: $productId) {\n id\n masterData {\n staged {\n allVariants {\n id\n key\n sku\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
|
|
1345
|
-
const createProductVariantSubCommands = _ref => {
|
|
1346
|
-
var _context, _context2, _context3, _context4;
|
|
1347
|
-
let intl = _ref.intl,
|
|
1348
|
-
applicationContext = _ref.applicationContext,
|
|
1349
|
-
productId = _ref.productId,
|
|
1350
|
-
variantId = _ref.variantId;
|
|
1351
|
-
const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
|
|
1352
|
-
if (!canViewProducts || !applicationContext.project) return [];
|
|
1353
|
-
return [{
|
|
1354
|
-
id: _concatInstanceProperty(_context = "go/product(".concat(productId, ")/variant(")).call(_context, variantId, ")/attributes"),
|
|
1355
|
-
text: intl.formatMessage(messages.showProductVariantAttributes),
|
|
1356
|
-
action: {
|
|
1357
|
-
type: actionTypes.go,
|
|
1358
|
-
to: oneLineTrim(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /attributes\n "])), applicationContext.project.key, productId, variantId)
|
|
1359
|
-
}
|
|
1360
|
-
}, {
|
|
1361
|
-
id: _concatInstanceProperty(_context2 = "go/product(".concat(productId, ")/variant")).call(_context2, variantId, "/images"),
|
|
1362
|
-
text: intl.formatMessage(messages.showProductVariantImages),
|
|
1363
|
-
action: {
|
|
1364
|
-
type: actionTypes.go,
|
|
1365
|
-
to: oneLineTrim(_templateObject2$1 || (_templateObject2$1 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /images\n "])), applicationContext.project.key, productId, variantId)
|
|
1366
|
-
}
|
|
1367
|
-
}, {
|
|
1368
|
-
id: _concatInstanceProperty(_context3 = "go/product(".concat(productId, ")/variant(")).call(_context3, variantId, ")/prices"),
|
|
1369
|
-
text: intl.formatMessage(messages.showProductVariantPrices),
|
|
1370
|
-
action: {
|
|
1371
|
-
type: actionTypes.go,
|
|
1372
|
-
to: oneLineTrim(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /prices\n "])), applicationContext.project.key, productId, variantId)
|
|
1373
|
-
}
|
|
1374
|
-
}, {
|
|
1375
|
-
id: _concatInstanceProperty(_context4 = "go/product(".concat(productId, ")/variant(")).call(_context4, variantId, ")/inventory"),
|
|
1376
|
-
text: intl.formatMessage(messages.showProductVariantInventory),
|
|
1377
|
-
action: {
|
|
1378
|
-
type: actionTypes.go,
|
|
1379
|
-
to: oneLineTrim(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /inventory\n "])), applicationContext.project.key, productId, variantId)
|
|
1380
|
-
}
|
|
1381
|
-
}];
|
|
1382
|
-
};
|
|
1383
|
-
const formatVariantMessage = (variant, intl) => {
|
|
1384
|
-
if (variant.sku) return intl.formatMessage(messages.openVariantBySku, {
|
|
1385
|
-
sku: variant.sku
|
|
1386
|
-
});
|
|
1387
|
-
if (variant.key) return intl.formatMessage(messages.openVariantByKey, {
|
|
1388
|
-
key: variant.key
|
|
1389
|
-
});
|
|
1390
|
-
return intl.formatMessage(messages.openVariantById, {
|
|
1391
|
-
id: variant.id
|
|
1392
|
-
});
|
|
1393
|
-
};
|
|
1394
|
-
const createProductVariantListSubCommands = async _ref2 => {
|
|
1395
|
-
let intl = _ref2.intl,
|
|
1396
|
-
applicationContext = _ref2.applicationContext,
|
|
1397
|
-
productId = _ref2.productId,
|
|
1398
|
-
execQuery = _ref2.execQuery;
|
|
1399
|
-
const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
|
|
1400
|
-
if (!canViewProducts) return [];
|
|
1401
|
-
const data = await execQuery(QuickAccessProductQuery, {
|
|
1402
|
-
productId
|
|
1403
|
-
}, {
|
|
1404
|
-
target: GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
|
|
1405
|
-
});
|
|
1406
|
-
if (data && data.product && data.product.masterData && data.product.masterData.staged && applicationContext.project) {
|
|
1407
|
-
var _context5;
|
|
1408
|
-
const projectKey = applicationContext.project.key;
|
|
1409
|
-
return _mapInstanceProperty(_context5 = data.product.masterData.staged.allVariants).call(_context5, variant => {
|
|
1410
|
-
var _context6;
|
|
1411
|
-
return {
|
|
1412
|
-
id: _concatInstanceProperty(_context6 = "go/product(".concat(productId, ")/variant(")).call(_context6, variant.id, ")"),
|
|
1413
|
-
text: formatVariantMessage(variant, intl),
|
|
1414
|
-
subCommands: createProductVariantSubCommands({
|
|
1415
|
-
intl,
|
|
1416
|
-
applicationContext,
|
|
1417
|
-
productId,
|
|
1418
|
-
variantId: variant.id
|
|
1419
|
-
}),
|
|
1420
|
-
action: {
|
|
1421
|
-
type: actionTypes.go,
|
|
1422
|
-
to: oneLineTrim(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), projectKey, productId, variant.id)
|
|
1423
|
-
}
|
|
1424
|
-
};
|
|
1425
|
-
});
|
|
1426
|
-
}
|
|
1427
|
-
return [];
|
|
1428
|
-
};
|
|
1429
|
-
const createProductTabsSubCommands = _ref3 => {
|
|
1430
|
-
let intl = _ref3.intl,
|
|
1431
|
-
applicationContext = _ref3.applicationContext,
|
|
1432
|
-
productId = _ref3.productId;
|
|
1433
|
-
const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
|
|
1434
|
-
if (!canViewProducts || !applicationContext.project) return [];
|
|
1435
|
-
return [{
|
|
1436
|
-
id: "go/product(".concat(productId, ")/general"),
|
|
1437
|
-
text: intl.formatMessage(messages.openProductVariantGeneral),
|
|
1438
|
-
action: {
|
|
1439
|
-
type: actionTypes.go,
|
|
1440
|
-
to: oneLineTrim(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /general\n "])), applicationContext.project.key, productId)
|
|
1441
|
-
}
|
|
1442
|
-
}, {
|
|
1443
|
-
id: "go/product(".concat(productId, ")/variants"),
|
|
1444
|
-
text: intl.formatMessage(messages.openProductVariantList),
|
|
1445
|
-
action: {
|
|
1446
|
-
type: actionTypes.go,
|
|
1447
|
-
to: oneLineTrim(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n "])), applicationContext.project.key, productId)
|
|
1448
|
-
},
|
|
1449
|
-
subCommands: execQuery => createProductVariantListSubCommands({
|
|
1450
|
-
intl,
|
|
1451
|
-
applicationContext,
|
|
1452
|
-
productId,
|
|
1453
|
-
execQuery
|
|
1454
|
-
})
|
|
1455
|
-
}, {
|
|
1456
|
-
id: "go/product(".concat(productId, ")/search"),
|
|
1457
|
-
text: intl.formatMessage(messages.openProductVariantSearch),
|
|
1458
|
-
action: {
|
|
1459
|
-
type: actionTypes.go,
|
|
1460
|
-
to: oneLineTrim(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /search\n "])), applicationContext.project.key, productId)
|
|
1461
|
-
}
|
|
1462
|
-
}];
|
|
1463
|
-
};
|
|
1464
|
-
|
|
1465
|
-
const sanitize = param => param
|
|
1466
|
-
// Replace all \ with \\ (to prevent generate escape characters)
|
|
1467
|
-
.replace(/\\/g, '\\\\')
|
|
1468
|
-
// Replace all " with \"
|
|
1469
|
-
.replace(/"/g, '\\"');
|
|
1470
|
-
const flattenCommands = async (results, execQuery) => {
|
|
1471
|
-
async function flatten(commands) {
|
|
1472
|
-
return _reduceInstanceProperty(commands).call(commands, async (prevPromise, command) => {
|
|
1473
|
-
const prevResults = await prevPromise;
|
|
1474
|
-
if (command.subCommands) {
|
|
1475
|
-
if (typeof command.subCommands === 'function') {
|
|
1476
|
-
const subCommands = await command.subCommands(execQuery);
|
|
1477
|
-
const flattenSubCommands = await flatten(subCommands);
|
|
1478
|
-
return [...prevResults, command, ...flattenSubCommands];
|
|
1479
|
-
}
|
|
1480
|
-
const flattenSubCommands = await flatten(command.subCommands);
|
|
1481
|
-
return [...prevResults, command, ...flattenSubCommands];
|
|
1482
|
-
}
|
|
1483
|
-
return [...prevResults, command];
|
|
1484
|
-
}, _Promise.resolve([]));
|
|
1485
|
-
}
|
|
1486
|
-
return await flatten(results);
|
|
1487
|
-
};
|
|
1488
|
-
|
|
1489
|
-
// Once ui-kit exposes its fallback mechanism, we can use the same one here
|
|
1490
|
-
const translate = (nameAllLocales, projectDataLocale) => {
|
|
1491
|
-
const matchedTranslation = _findInstanceProperty(nameAllLocales).call(nameAllLocales, translation => translation.locale === projectDataLocale && translation.value);
|
|
1492
|
-
if (matchedTranslation) return matchedTranslation.value;
|
|
1493
|
-
|
|
1494
|
-
// Fall back to the first available locale
|
|
1495
|
-
if (nameAllLocales.length > 0) return nameAllLocales[0].value;
|
|
1496
|
-
return '';
|
|
1497
|
-
};
|
|
1498
|
-
|
|
1499
|
-
var _templateObject, _templateObject2;
|
|
1500
|
-
var QuickAccessQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccess" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "searchText" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } }, type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", alias: { kind: "Name", value: "productsByIds" }, name: { kind: "Name", value: "products" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "where" }, value: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "results" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productById" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantSku" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "variantKey" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 1407, source: { body: "query QuickAccess(\n $searchText: String!\n $canViewProducts: Boolean!\n $productsWhereClause: String\n $includeProductsByIds: Boolean!\n) {\n productsByIds: products(where: $productsWhereClause)\n @include(if: $includeProductsByIds) {\n results {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n }\n\n productById: product(id: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByKey: product(key: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByVariantSku: product(sku: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(sku: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n\n productByVariantKey: product(variantKey: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(key: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
|
|
1501
|
-
const searchProductIdsAction = (searchText, projectKey, dataLocale) => actions.post({
|
|
1502
|
-
uri: "/".concat(projectKey, "/search/products"),
|
|
1503
|
-
mcApiProxyTarget: MC_API_PROXY_TARGETS.PIM_SEARCH,
|
|
1504
|
-
payload: {
|
|
1505
|
-
query: {
|
|
1506
|
-
fullText: {
|
|
1507
|
-
field: 'name',
|
|
1508
|
-
language: dataLocale,
|
|
1509
|
-
value: searchText
|
|
1510
|
-
}
|
|
1511
|
-
},
|
|
1512
|
-
sort: [{
|
|
1513
|
-
field: 'name',
|
|
1514
|
-
language: dataLocale,
|
|
1515
|
-
order: 'desc'
|
|
1516
|
-
}],
|
|
1517
|
-
limit: 9,
|
|
1518
|
-
offset: 0
|
|
1519
|
-
}
|
|
1520
|
-
});
|
|
1521
|
-
const pimIndexerStatusAction = (projectKey, dataLocale) =>
|
|
1522
|
-
// TODO this should be sdkActions.head()
|
|
1523
|
-
// and then we should check whether the response code is
|
|
1524
|
-
// - 200 meaning the project is indexed
|
|
1525
|
-
// - 404 meaning the project is not indexed
|
|
1526
|
-
//
|
|
1527
|
-
// But there is a problem in tne node-sdk client as it tries to
|
|
1528
|
-
// .json()-parse the response to HEAD requests which results in an
|
|
1529
|
-
// error, so we send a regular request for now and limit to no results
|
|
1530
|
-
// instead to keep the payload minimal
|
|
1531
|
-
actions.post({
|
|
1532
|
-
uri: "/".concat(projectKey, "/search/products"),
|
|
1533
|
-
mcApiProxyTarget: MC_API_PROXY_TARGETS.PIM_SEARCH,
|
|
1534
|
-
payload: {
|
|
1535
|
-
query: {
|
|
1536
|
-
fullText: {
|
|
1537
|
-
field: 'name',
|
|
1538
|
-
language: dataLocale,
|
|
1539
|
-
value: 'availability-check'
|
|
1540
|
-
}
|
|
1541
|
-
},
|
|
1542
|
-
limit: 0,
|
|
1543
|
-
offset: 0
|
|
1544
|
-
}
|
|
1545
|
-
});
|
|
1546
|
-
const QuickAccess = props => {
|
|
1547
|
-
const _useState = useState(loadHistoryEntries()),
|
|
1548
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
1549
|
-
historyEntries = _useState2[0],
|
|
1550
|
-
setHistoryEntries = _useState2[1];
|
|
1551
|
-
const handleHistoryEntriesChange = useCallback(entries => {
|
|
1552
|
-
// Keep the history in sync with the session storage
|
|
1553
|
-
saveHistoryEntries(entries);
|
|
1554
|
-
setHistoryEntries(entries);
|
|
1555
|
-
}, []);
|
|
1556
|
-
const history = useHistory();
|
|
1557
|
-
const apolloClient = useApolloClient();
|
|
1558
|
-
const intl = useIntl();
|
|
1559
|
-
const _useFeatureToggles = useFeatureToggles({
|
|
1560
|
-
pimSearch: true,
|
|
1561
|
-
customApplications: true,
|
|
1562
|
-
canViewDashboard: true
|
|
1563
|
-
}),
|
|
1564
|
-
_useFeatureToggles2 = _slicedToArray(_useFeatureToggles, 3),
|
|
1565
|
-
isPimSearchEnabled = _useFeatureToggles2[0],
|
|
1566
|
-
isCustomApplicationsEnabled = _useFeatureToggles2[1],
|
|
1567
|
-
isCanViewDashboardEnabled = _useFeatureToggles2[2];
|
|
1568
|
-
const applicationContext = useApplicationContext();
|
|
1569
|
-
|
|
1570
|
-
// Destructure functions from props to reference them in the hook dependency list
|
|
1571
|
-
const onPimIndexerStateChangeFromParent = props.onPimIndexerStateChange;
|
|
1572
|
-
const dispatchFetchProductIds = useAsyncDispatch();
|
|
1573
|
-
const fetchPimSearchProductIds = useCallback(async searchText => {
|
|
1574
|
-
if (applicationContext.project && applicationContext.dataLocale) {
|
|
1575
|
-
var _context;
|
|
1576
|
-
const result = await dispatchFetchProductIds(searchProductIdsAction(searchText, applicationContext.project.key, applicationContext.dataLocale));
|
|
1577
|
-
return result && result.hits ? _mapInstanceProperty(_context = result.hits).call(_context, hit => hit.id) : [];
|
|
1578
|
-
}
|
|
1579
|
-
return [];
|
|
1580
|
-
}, [applicationContext.dataLocale, applicationContext.project, dispatchFetchProductIds]);
|
|
1581
|
-
const dispatchFetchPimIndexerStatus = useAsyncDispatch();
|
|
1582
|
-
const fetchPimIndexerStatus = useCallback(async () => {
|
|
1583
|
-
if (applicationContext.project && applicationContext.dataLocale) {
|
|
1584
|
-
try {
|
|
1585
|
-
dispatchFetchPimIndexerStatus(pimIndexerStatusAction(applicationContext.project.key, applicationContext.dataLocale));
|
|
1586
|
-
return pimIndexerStates.INDEXED;
|
|
1587
|
-
} catch (error) {
|
|
1588
|
-
// eslint-disable-next-line no-console
|
|
1589
|
-
if (process.env.NODE_ENV !== 'production') console.error(error);
|
|
1590
|
-
// project is not using pim-indexer when response error code is 404,
|
|
1591
|
-
// but we treat all errors as non-indexed as a safe guard, so we're
|
|
1592
|
-
// not checking the response error code at all
|
|
1593
|
-
return pimIndexerStates.NOT_INDEXED;
|
|
1594
|
-
}
|
|
1595
|
-
}
|
|
1596
|
-
return pimIndexerStates.NOT_INDEXED;
|
|
1597
|
-
}, [applicationContext.dataLocale, applicationContext.project, dispatchFetchPimIndexerStatus]);
|
|
1598
|
-
const getProjectIndexStatus = useCallback(async () => {
|
|
1599
|
-
// skip when there is no project
|
|
1600
|
-
if (!applicationContext.project) return pimIndexerStates.NOT_INDEXED;
|
|
1601
|
-
const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
|
|
1602
|
-
|
|
1603
|
-
// skip checking when user can't view products anyways
|
|
1604
|
-
if (!canViewProducts) return pimIndexerStates.NOT_INDEXED;
|
|
1605
|
-
return await fetchPimIndexerStatus();
|
|
1606
|
-
}, [applicationContext.permissions, applicationContext.project, fetchPimIndexerStatus]);
|
|
1607
|
-
useEffect(() => {
|
|
1608
|
-
if (props.pimIndexerState === pimIndexerStates.UNCHECKED) {
|
|
1609
|
-
getProjectIndexStatus().then(status => {
|
|
1610
|
-
onPimIndexerStateChangeFromParent(status);
|
|
1611
|
-
});
|
|
1612
|
-
}
|
|
1613
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1614
|
-
}, []); // <-- run only once, when component mounts
|
|
1615
|
-
|
|
1616
|
-
const execQuery = useCallback((Query, variables, context) => apolloClient.query({
|
|
1617
|
-
query: Query,
|
|
1618
|
-
errorPolicy: 'ignore',
|
|
1619
|
-
variables,
|
|
1620
|
-
context
|
|
1621
|
-
}).then(response => response.data), [apolloClient]);
|
|
1622
|
-
const getNextCommands = useCallback(async command => {
|
|
1623
|
-
if (!command.subCommands) return [];
|
|
1624
|
-
if (_Array$isArray(command.subCommands)) return command.subCommands;
|
|
1625
|
-
return await command.subCommands(execQuery);
|
|
1626
|
-
}, [execQuery]);
|
|
1627
|
-
const getProjectCommands = useCallback(async searchText => {
|
|
1628
|
-
const idsOfProductsMatchingSearchText = props.pimIndexerState === pimIndexerStates.INDEXED ? await fetchPimSearchProductIds(searchText) : [];
|
|
1629
|
-
const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
|
|
1630
|
-
const data = await execQuery(QuickAccessQuery, {
|
|
1631
|
-
searchText: sanitize(searchText),
|
|
1632
|
-
// Pass conditional arguments to disable some of the queries
|
|
1633
|
-
canViewProducts,
|
|
1634
|
-
productsWhereClause: "id in (".concat(_mapInstanceProperty(idsOfProductsMatchingSearchText).call(idsOfProductsMatchingSearchText, id => _JSON$stringify(id)).join(', '), ")"),
|
|
1635
|
-
includeProductsByIds: Boolean(canViewProducts && idsOfProductsMatchingSearchText.length > 0)
|
|
1636
|
-
}, {
|
|
1637
|
-
target: GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
|
|
1638
|
-
});
|
|
1639
|
-
const commands = [];
|
|
1640
|
-
if (data && data.productByVariantKey && data.productByVariantKey.masterData && data.productByVariantKey.masterData.staged && data.productByVariantKey.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
|
|
1641
|
-
var _context2;
|
|
1642
|
-
const productId = data.productByVariantKey.id;
|
|
1643
|
-
const variantId = data.productByVariantKey.masterData.staged.variant.id;
|
|
1644
|
-
const variantKey = data.productByVariantKey.masterData.staged.variant.key;
|
|
1645
|
-
commands.push({
|
|
1646
|
-
id: _concatInstanceProperty(_context2 = "go/product-variant-by-key/product(".concat(productId, "/variant(")).call(_context2, variantId, ")"),
|
|
1647
|
-
text: intl.formatMessage(messages.showProductVariant, {
|
|
1648
|
-
variantName: translate(data.productByVariantKey.masterData.staged.nameAllLocales, applicationContext.dataLocale)
|
|
1649
|
-
}),
|
|
1650
|
-
keywords: variantKey ? [variantKey] : undefined,
|
|
1651
|
-
action: {
|
|
1652
|
-
type: actionTypes.go,
|
|
1653
|
-
to: oneLineTrim(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), applicationContext.project.key, productId, variantId)
|
|
1654
|
-
},
|
|
1655
|
-
subCommands: createProductVariantSubCommands({
|
|
1656
|
-
intl,
|
|
1657
|
-
applicationContext,
|
|
1658
|
-
productId,
|
|
1659
|
-
variantId
|
|
1660
|
-
})
|
|
1661
|
-
});
|
|
1662
|
-
}
|
|
1663
|
-
if (data && data.productByVariantSku && data.productByVariantSku.masterData && data.productByVariantSku.masterData.staged && data.productByVariantSku.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
|
|
1664
|
-
var _context3;
|
|
1665
|
-
const productId = data.productByVariantSku.id;
|
|
1666
|
-
const variantId = data.productByVariantSku.masterData.staged.variant.id;
|
|
1667
|
-
commands.push({
|
|
1668
|
-
id: _concatInstanceProperty(_context3 = "go/product-variant-by-sku/product(".concat(productId, ")/variant(")).call(_context3, variantId, ")"),
|
|
1669
|
-
text: intl.formatMessage(messages.showProductVariant, {
|
|
1670
|
-
variantName: data.productByVariantSku.masterData.staged.variant.sku
|
|
1671
|
-
}),
|
|
1672
|
-
action: {
|
|
1673
|
-
type: actionTypes.go,
|
|
1674
|
-
to: oneLineTrim(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), applicationContext.project.key, productId, variantId)
|
|
1675
|
-
},
|
|
1676
|
-
subCommands: createProductVariantSubCommands({
|
|
1677
|
-
intl,
|
|
1678
|
-
applicationContext,
|
|
1679
|
-
productId,
|
|
1680
|
-
variantId
|
|
1681
|
-
})
|
|
1682
|
-
});
|
|
1683
|
-
}
|
|
1684
|
-
if (data && data.productById && data.productById.masterData && data.productById.masterData.staged && data.productById.masterData.staged.nameAllLocales && applicationContext.project && applicationContext.dataLocale) {
|
|
1685
|
-
var _context4;
|
|
1686
|
-
const productId = data.productById.id;
|
|
1687
|
-
commands.push({
|
|
1688
|
-
id: "go/product-by-id/product(".concat(productId, ")"),
|
|
1689
|
-
text: intl.formatMessage(messages.showProduct, {
|
|
1690
|
-
productName: translate(data.productById.masterData.staged.nameAllLocales, applicationContext.dataLocale)
|
|
1691
|
-
}),
|
|
1692
|
-
keywords: [productId],
|
|
1693
|
-
action: {
|
|
1694
|
-
type: actionTypes.go,
|
|
1695
|
-
to: _concatInstanceProperty(_context4 = "/".concat(applicationContext.project.key, "/products/")).call(_context4, productId)
|
|
1696
|
-
},
|
|
1697
|
-
subCommands: createProductTabsSubCommands({
|
|
1698
|
-
intl,
|
|
1699
|
-
applicationContext,
|
|
1700
|
-
productId
|
|
1701
|
-
})
|
|
1702
|
-
});
|
|
1703
|
-
}
|
|
1704
|
-
if (data && data.productsByIds && data.productsByIds.results) {
|
|
1705
|
-
var _context5;
|
|
1706
|
-
_forEachInstanceProperty(_context5 = data.productsByIds.results).call(_context5, product => {
|
|
1707
|
-
if (product.masterData.staged && applicationContext.project && applicationContext.dataLocale) {
|
|
1708
|
-
var _context6;
|
|
1709
|
-
commands.push({
|
|
1710
|
-
id: "go/product-by-search-text/product(".concat(product.id, ")"),
|
|
1711
|
-
text: intl.formatMessage(messages.showProduct, {
|
|
1712
|
-
productName: translate(product.masterData.staged.nameAllLocales, applicationContext.dataLocale)
|
|
1713
|
-
}),
|
|
1714
|
-
keywords: [product.id],
|
|
1715
|
-
action: {
|
|
1716
|
-
type: actionTypes.go,
|
|
1717
|
-
to: _concatInstanceProperty(_context6 = "/".concat(applicationContext.project.key, "/products/")).call(_context6, product.id)
|
|
1718
|
-
},
|
|
1719
|
-
subCommands: createProductTabsSubCommands({
|
|
1720
|
-
intl,
|
|
1721
|
-
applicationContext,
|
|
1722
|
-
productId: product.id
|
|
1723
|
-
})
|
|
1724
|
-
});
|
|
1725
|
-
}
|
|
1726
|
-
});
|
|
1727
|
-
}
|
|
1728
|
-
if (data && data.productByKey && applicationContext.project && applicationContext.dataLocale) {
|
|
1729
|
-
var _context7;
|
|
1730
|
-
const productId = data.productByKey.id;
|
|
1731
|
-
commands.push({
|
|
1732
|
-
id: "go/product-by-key/product(".concat(productId, ")"),
|
|
1733
|
-
text: intl.formatMessage(messages.showProduct, {
|
|
1734
|
-
productName: searchText
|
|
1735
|
-
}),
|
|
1736
|
-
action: {
|
|
1737
|
-
type: actionTypes.go,
|
|
1738
|
-
to: _concatInstanceProperty(_context7 = "/".concat(applicationContext.project.key, "/products/")).call(_context7, productId)
|
|
1739
|
-
},
|
|
1740
|
-
subCommands: createProductTabsSubCommands({
|
|
1741
|
-
intl,
|
|
1742
|
-
applicationContext,
|
|
1743
|
-
productId
|
|
1744
|
-
})
|
|
1745
|
-
});
|
|
1746
|
-
}
|
|
1747
|
-
return commands;
|
|
1748
|
-
}, [applicationContext, execQuery, fetchPimSearchProductIds, intl, props.pimIndexerState]);
|
|
1749
|
-
const debouncedGetProjectCommands = debounce(getProjectCommands, 200, {
|
|
1750
|
-
cancelObj: 'canceled'
|
|
1751
|
-
});
|
|
1752
|
-
const search = useCallback(async searchText => {
|
|
1753
|
-
const generalCommands = createCommands({
|
|
1754
|
-
applicationContext,
|
|
1755
|
-
changeProjectDataLocale: props.onChangeProjectDataLocale,
|
|
1756
|
-
intl,
|
|
1757
|
-
featureToggles: {
|
|
1758
|
-
pimSearch: isPimSearchEnabled,
|
|
1759
|
-
customApplications: isCustomApplicationsEnabled,
|
|
1760
|
-
canViewDashboard: isCanViewDashboardEnabled
|
|
1761
|
-
}
|
|
1762
|
-
});
|
|
1763
|
-
if (!applicationContext.project) return generalCommands;
|
|
1764
|
-
|
|
1765
|
-
// Avoid searching for short texts, as we won't get any good results
|
|
1766
|
-
// anyways. This results in commands popping up immediately when the user
|
|
1767
|
-
// starts typing, which gives the whole search a much more repsonsive
|
|
1768
|
-
// feeling.
|
|
1769
|
-
if (_trimInstanceProperty(searchText).call(searchText).length < 3) return generalCommands;
|
|
1770
|
-
try {
|
|
1771
|
-
const projectCommands = await debouncedGetProjectCommands(searchText);
|
|
1772
|
-
const allCommands = [...generalCommands, ...projectCommands];
|
|
1773
|
-
return await flattenCommands(allCommands, execQuery);
|
|
1774
|
-
} catch (error) {
|
|
1775
|
-
// When the debounced search is canceled, it throws with "canceled"
|
|
1776
|
-
// In that case we know that another search is going to happen
|
|
1777
|
-
// and we just resolve with the general commands.
|
|
1778
|
-
if (error === 'canceled') return generalCommands;
|
|
1779
|
-
throw error;
|
|
1780
|
-
}
|
|
1781
|
-
}, [applicationContext, debouncedGetProjectCommands, execQuery, intl, isCanViewDashboardEnabled, isCustomApplicationsEnabled, isPimSearchEnabled, props.onChangeProjectDataLocale]);
|
|
1782
|
-
const executeCommand = useCallback((command, meta) => {
|
|
1783
|
-
var _context8;
|
|
1784
|
-
if (typeof command.action === 'function') {
|
|
1785
|
-
// Idea: We could handle these errors and set them on status bar of Butler
|
|
1786
|
-
// We can also handle sync/async commands by checking command.action.then
|
|
1787
|
-
command.action();
|
|
1788
|
-
return;
|
|
1789
|
-
}
|
|
1790
|
-
// open in new window
|
|
1791
|
-
// and always open other pages in a new window
|
|
1792
|
-
if (meta.openInNewTab || !_startsWithInstanceProperty(_context8 = command.action.to).call(_context8, '/')) {
|
|
1793
|
-
// eslint-disable-next-line no-restricted-globals
|
|
1794
|
-
open(command.action.to, '_blank');
|
|
1795
|
-
} else if (applicationContext.environment.useFullRedirectsForLinks) {
|
|
1796
|
-
location.replace(command.action.to);
|
|
1797
|
-
} else {
|
|
1798
|
-
history.push(command.action.to);
|
|
1799
|
-
}
|
|
1800
|
-
}, [applicationContext.environment.useFullRedirectsForLinks, history]);
|
|
1801
|
-
return jsx(ButlerWithAnimation, {
|
|
1802
|
-
historyEntries: historyEntries,
|
|
1803
|
-
onHistoryEntriesChange: handleHistoryEntriesChange,
|
|
1804
|
-
search: search,
|
|
1805
|
-
executeCommand: executeCommand,
|
|
1806
|
-
onClose: props.onClose,
|
|
1807
|
-
getNextCommands: getNextCommands
|
|
1808
|
-
});
|
|
1809
|
-
};
|
|
1810
|
-
QuickAccess.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
1811
|
-
pimIndexerState: _pt.any.isRequired,
|
|
1812
|
-
onPimIndexerStateChange: _pt.func.isRequired,
|
|
1813
|
-
onClose: _pt.func.isRequired,
|
|
1814
|
-
onChangeProjectDataLocale: _pt.func
|
|
1815
|
-
} : {};
|
|
1816
|
-
QuickAccess.displayName = 'QuickAccess';
|
|
1817
|
-
|
|
1818
|
-
export { QuickAccess as default };
|