UNPKG

react-dropdown-select

Version:
1 lines 35.9 kB
"use strict";exports.__esModule=!0,exports.default=exports.Select=void 0;var _base=_interopRequireDefault(require("@emotion/styled/base")),_react=_interopRequireWildcard(require("react")),_reactDom=_interopRequireDefault(require("react-dom")),_ClickOutside=_interopRequireDefault(require("./components/ClickOutside")),_Content=_interopRequireDefault(require("./components/Content")),_Dropdown=_interopRequireDefault(require("./components/Dropdown")),_Loading=_interopRequireDefault(require("./components/Loading")),_Clear=_interopRequireDefault(require("./components/Clear")),_Separator=_interopRequireDefault(require("./components/Separator")),_DropdownHandle=_interopRequireDefault(require("./components/DropdownHandle")),_util=require("./util"),_constants=require("./constants"),_SelectPropsModel=_interopRequireDefault(require("./models/SelectPropsModel"));function _getRequireWildcardCache(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(_getRequireWildcardCache=function(a){return a?c:b})(a)}function _interopRequireWildcard(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=_getRequireWildcardCache(b);if(c&&c.has(a))return c.get(a);var d={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!=f&&Object.prototype.hasOwnProperty.call(a,f)){var g=e?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(d,f,g):d[f]=a[f]}return d.default=a,c&&c.set(a,d),d}function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function _extends(){return _extends=Object.assign?Object.assign.bind():function(a){for(var b,c=1;c<arguments.length;c++)for(var d in b=arguments[c],b)Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d]);return a},_extends.apply(this,arguments)}function _assertThisInitialized(a){if(void 0===a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return a}function _inheritsLoose(a,b){a.prototype=Object.create(b.prototype),a.prototype.constructor=a,_setPrototypeOf(a,b)}function _setPrototypeOf(a,b){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,b){return a.__proto__=b,a},_setPrototypeOf(a,b)}var Select=/*#__PURE__*/function(a){function b(b){var c;return c=a.call(this,b)||this,c.onDropdownClose=function(){c.setState({cursor:null}),c.props.onDropdownClose()},c.onScroll=function(){c.props.closeOnScroll&&c.dropDown("close"),c.updateSelectBounds()},c.updateSelectBounds=function(){return c.select.current&&c.setState({selectBounds:c.select.current.getBoundingClientRect()})},c.getSelectBounds=function(){return c.state.selectBounds},c.dropDown=function(a,b,d){void 0===a&&(a="toggle"),void 0===d&&(d=!1);var e=b&&b.target||b&&b.srcElement;return void 0!==c.props.onDropdownCloseRequest&&c.state.dropdown&&!1===d&&"close"===a?c.props.onDropdownCloseRequest({props:c.props,methods:c.methods,state:c.state,close:function close(){return c.dropDown("close",null,!0)}}):c.props.portal&&!c.props.closeOnScroll&&!c.props.closeOnSelect&&b&&e&&e.offsetParent&&e.offsetParent.classList.contains("react-dropdown-select-dropdown")?void 0:c.props.keepOpen?c.setState({dropdown:!0}):"close"===a&&c.state.dropdown?(c.select.current.blur(),c.setState({dropdown:!1,search:c.props.clearOnBlur?"":c.state.search,searchResults:c.props.options})):"open"!==a||c.state.dropdown?"toggle"===a&&(c.select.current.focus(),c.setState({dropdown:!c.state.dropdown})):c.setState({dropdown:!0})},c.getSelectRef=function(){return c.select.current},c.addItem=function(a){if(c.props.multi){if((0,_util.valueExistInSelected)((0,_util.getByPath)(a,c.props.valueField),c.state.values,c.props))return c.removeItem(null,a,!1);c.setState({values:[].concat(c.state.values,[a])}),c.props.onSelect([].concat(c.state.values,[a]))}else c.setState({values:[a],dropdown:!1}),c.props.onSelect([a]);return c.props.clearOnSelect&&c.setState({search:""},function(){c.setState({searchResults:c.searchResults()})}),!0},c.removeItem=function(a,b,d){void 0===d&&(d=!1),a&&d&&(a.preventDefault(),a.stopPropagation(),c.dropDown("close"));var e=c.state.values.filter(function(a){return(0,_util.getByPath)(a,c.props.valueField)!==(0,_util.getByPath)(b,c.props.valueField)});c.setState({values:e}),c.props.onDeselect(e)},c.setSearch=function(a){c.setState({cursor:null}),c.setState({search:a.target.value},function(){c.setState({searchResults:c.searchResults()})})},c.getInputSize=function(){return c.state.search?c.state.search.length:0<c.state.values.length?c.props.addPlaceholder.length:c.props.placeholder.length},c.toggleSelectAll=function(){return c.setState({values:0===c.state.values.length?c.selectAll():c.clearAll()})},c.clearAll=function(){c.props.onClearAll(),c.setState({values:[]})},c.selectAll=function(a){void 0===a&&(a=[]),c.props.onSelectAll();var b=0<a.length?a:c.props.options.filter(function(a){return!a.disabled});c.setState({values:b})},c.isSelected=function(a){return!!c.state.values.find(function(b){return(0,_util.getByPath)(b,c.props.valueField)===(0,_util.getByPath)(a,c.props.valueField)})},c.areAllSelected=function(){return c.state.values.length===c.props.options.filter(function(a){return!a.disabled}).length},c.safeString=function(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},c.sortBy=function(){var a=c.props,d=a.sortBy,e=a.options;return d?(e.sort(function(c,a){return(0,_util.getProp)(c,d)<(0,_util.getProp)(a,d)?-1:(0,_util.getProp)(c,d)>(0,_util.getProp)(a,d)?1:0}),e):e},c.searchFn=function(a){var b=a.state,d=a.methods,e=new RegExp(d.safeString(b.search),"i");return d.sortBy().filter(function(a){return e.test((0,_util.getByPath)(a,c.props.searchBy)||(0,_util.getByPath)(a,c.props.valueField))})},c.searchResults=function(){var a={state:c.state,props:c.props,methods:c.methods};return c.props.searchFn(a)||c.searchFn(a)},c.activeCursorItem=function(a){return c.setState({activeCursorItem:a})},c.handleKeyDown=function(a){var b={event:a,state:c.state,props:c.props,methods:c.methods,setState:c.setState.bind(_assertThisInitialized(c))};return c.props.handleKeyDownFn(b)||c.handleKeyDownFn(b)},c.handleKeyDownFn=function(a){var b=a.event,d=a.state,e=a.props,f=a.methods,g=a.setState,h=d.cursor,i=d.searchResults,j="Escape"===b.key,k="Enter"===b.key,l="ArrowUp"===b.key,m="ArrowDown"===b.key,n="Backspace"===b.key,o="Tab"===b.key&&!b.shiftKey,p=b.shiftKey&&"Tab"===b.key;if(m&&!d.dropdown)return b.preventDefault(),c.dropDown("open"),g({cursor:0});if((m||o&&d.dropdown)&&null===h)return g({cursor:0});if((l||m||p&&d.dropdown||o&&d.dropdown)&&b.preventDefault(),j&&c.dropDown("close"),k){var q=i[h];if(q&&!q.disabled){if(e.create&&(0,_util.valueExistInSelected)(d.search,d.values,e))return null;f.addItem(q)}}return(m||o&&d.dropdown)&&i.length===h?g({cursor:0}):void((m||o&&d.dropdown)&&g(function(a){return{cursor:a.cursor+1}}),(l||p&&d.dropdown)&&0<h&&g(function(a){return{cursor:a.cursor-1}}),(l||p&&d.dropdown)&&0===h&&g({cursor:i.length}),n&&e.backspaceDelete&&0===c.getInputSize()&&c.setState({values:c.state.values.slice(0,-1)}))},c.renderDropdown=function(){return c.props.portal?/*#__PURE__*/_reactDom.default.createPortal(/*#__PURE__*/_react.default.createElement(_Dropdown.default,{props:c.props,state:c.state,methods:c.methods}),c.dropdownRoot):/*#__PURE__*/_react.default.createElement(_Dropdown.default,{props:c.props,state:c.state,methods:c.methods})},c.createNew=function(a){var b,d=(b={},b[c.props.labelField]=a,b[c.props.valueField]=a,b);c.addItem(d),c.props.onCreateNew(d),c.setState({search:""})},c.state={dropdown:!1,values:b.values,search:"",selectBounds:{},cursor:null,searchResults:b.options},c.methods={activeCursorItem:c.activeCursorItem,addItem:c.addItem,areAllSelected:c.areAllSelected,clearAll:c.clearAll,createNew:c.createNew,dropDown:c.dropDown,getInputSize:c.getInputSize,getSelectBounds:c.getSelectBounds,getSelectRef:c.getSelectRef,handleKeyDown:c.handleKeyDown,isSelected:c.isSelected,removeItem:c.removeItem,safeString:c.safeString,searchResults:c.searchResults,selectAll:c.selectAll,setSearch:c.setSearch,sortBy:c.sortBy,toggleSelectAll:c.toggleSelectAll},c.select=/*#__PURE__*/_react.default.createRef(),c.dropdownRoot="undefined"!=typeof document&&document.createElement("div"),c}_inheritsLoose(b,a);var c=b.prototype;return c.componentDidMount=function componentDidMount(){this.props.portal&&this.props.portal.appendChild(this.dropdownRoot),(0,_util.isomorphicWindow)().addEventListener("resize",(0,_util.debounce)(this.updateSelectBounds)),(0,_util.isomorphicWindow)().addEventListener("scroll",(0,_util.debounce)(this.onScroll)),this.dropDown("close"),this.select&&this.updateSelectBounds(),this.props.defaultMenuIsOpen&&this.dropDown("open")},c.componentDidUpdate=function componentDidUpdate(a,b){var c=this;!this.props.compareValuesFunc(a.values,this.props.values)&&this.props.compareValuesFunc(a.values,b.values)&&(this.setState({values:this.props.values},function(){c.props.onChange(c.state.values)}),this.updateSelectBounds()),a.options!==this.props.options&&this.setState({searchResults:this.searchResults()}),b.values!==this.state.values&&(this.props.onChange(this.state.values),this.updateSelectBounds()),b.search!==this.state.search&&this.updateSelectBounds(),b.values!==this.state.values&&this.props.closeOnSelect&&this.dropDown("close"),a.multi!==this.props.multi&&this.updateSelectBounds(),b.dropdown&&b.dropdown!==this.state.dropdown&&this.onDropdownClose(),b.dropdown||b.dropdown===this.state.dropdown||this.props.onDropdownOpen()},c.componentWillUnmount=function componentWillUnmount(){this.props.portal&&this.props.portal.removeChild(this.dropdownRoot),(0,_util.isomorphicWindow)().removeEventListener("resize",(0,_util.debounce)(this.updateSelectBounds,this.props.debounceDelay)),(0,_util.isomorphicWindow)().removeEventListener("scroll",(0,_util.debounce)(this.onScroll,this.props.debounceDelay))},c.render=function render(){var a=this;return/*#__PURE__*/_react.default.createElement(_ClickOutside.default,{onClickOutside:function onClickOutside(b){return a.dropDown("close",b)}},/*#__PURE__*/_react.default.createElement(ReactDropdownSelect,_extends({onKeyDown:this.handleKeyDown,"aria-label":"Dropdown select","aria-expanded":this.state.dropdown,onClick:function onClick(b){return a.dropDown("open",b)},tabIndex:this.props.disabled?"-1":"0",direction:this.props.direction,style:this.props.style,ref:this.select,disabled:this.props.disabled,className:_constants.LIB_NAME+" "+this.props.className,color:this.props.color},this.props.additionalProps),/*#__PURE__*/_react.default.createElement(_Content.default,{props:this.props,state:this.state,methods:this.methods}),(this.props.name||this.props.required)&&/*#__PURE__*/_react.default.createElement("input",{tabIndex:-1,style:{opacity:0,width:0,position:"absolute"},name:this.props.name,required:this.props.required,pattern:this.props.pattern,defaultValue:this.state.values.map(function(b){return b[a.props.labelField]}).toString()||[],disabled:this.props.disabled}),this.props.loading&&/*#__PURE__*/_react.default.createElement(_Loading.default,{props:this.props}),this.props.clearable&&/*#__PURE__*/_react.default.createElement(_Clear.default,{props:this.props,state:this.state,methods:this.methods}),this.props.separator&&/*#__PURE__*/_react.default.createElement(_Separator.default,{props:this.props,state:this.state,methods:this.methods}),this.props.dropdownHandle&&/*#__PURE__*/_react.default.createElement(_DropdownHandle.default,{onClick:function onClick(){return a.select.current.focus()},props:this.props,state:this.state,methods:this.methods}),this.state.dropdown&&!this.props.disabled&&this.renderDropdown()))},b}(_react.Component);exports.Select=Select,Select.defaultProps={addPlaceholder:"",additionalProps:null,autoFocus:!1,backspaceDelete:!0,clearAllLabel:"Clear all",clearOnBlur:!0,clearOnSelect:!0,clearable:!1,closeOnScroll:!1,closeOnSelect:!1,closeOnClickInput:!1,color:"#0074D9",compareValuesFunc:_util.isEqual,create:!1,createNewLabel:"add {search}",debounceDelay:0,direction:"ltr",disabled:!1,disabledLabel:"disabled",dropdownGap:5,dropdownHandle:!0,dropdownHeight:"300px",dropdownPosition:"bottom",handleKeyDownFn:function handleKeyDownFn(){},keepOpen:!1,keepSelectedInList:!0,labelField:"label",loading:!1,multi:!1,name:null,noDataLabel:"No data",onChange:function onChange(){},onSelect:function onSelect(){},onDeselect:function onDeselect(){},onClearAll:function onClearAll(){},onCreateNew:function onCreateNew(){},onDropdownClose:function onDropdownClose(){},onDropdownCloseRequest:void 0,onDropdownOpen:function onDropdownOpen(){},onSelectAll:function onSelectAll(){},options:[],pattern:void 0,placeholder:"Select...",portal:null,required:!1,searchBy:"label",searchFn:function searchFn(){},searchable:!0,selectAll:!1,selectAllLabel:"Select all",separator:!1,sortBy:null,valueField:"value",values:[],defaultMenuIsOpen:!1};var ReactDropdownSelect=/*#__PURE__*/(0,_base.default)("div","production"===process.env.NODE_ENV?{target:"e1gzf2xs0"}:{target:"e1gzf2xs0",label:"ReactDropdownSelect"})("box-sizing:border-box;position:relative;display:flex;border:1px solid #ccc;width:100%;border-radius:2px;padding:2px 5px;flex-direction:row;direction:",function(a){var b=a.direction;return b},";align-items:center;cursor:pointer;min-height:36px;",function(a){var b=a.disabled;return b?"cursor: not-allowed;pointer-events: none;opacity: 0.3;":"pointer-events: all;"}," :hover,:focus-within{border-color:",function(a){var b=a.color;return b},";}:focus,:focus-within{outline:0;box-shadow:0 0 0 3px ",function(a){var b=a.color;return(0,_util.hexToRGBA)(b,.2)},";}*{box-sizing:border-box;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1a0JzQyIsImZpbGUiOiIuLi9zcmMvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgQ2xpY2tPdXRzaWRlIGZyb20gJy4vY29tcG9uZW50cy9DbGlja091dHNpZGUnO1xuXG5pbXBvcnQgQ29udGVudCBmcm9tICcuL2NvbXBvbmVudHMvQ29udGVudCc7XG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL0Ryb3Bkb3duJztcbmltcG9ydCBMb2FkaW5nIGZyb20gJy4vY29tcG9uZW50cy9Mb2FkaW5nJztcbmltcG9ydCBDbGVhciBmcm9tICcuL2NvbXBvbmVudHMvQ2xlYXInO1xuaW1wb3J0IFNlcGFyYXRvciBmcm9tICcuL2NvbXBvbmVudHMvU2VwYXJhdG9yJztcbmltcG9ydCBEcm9wZG93bkhhbmRsZSBmcm9tICcuL2NvbXBvbmVudHMvRHJvcGRvd25IYW5kbGUnO1xuXG5pbXBvcnQge1xuICBkZWJvdW5jZSxcbiAgaGV4VG9SR0JBLFxuICBpc0VxdWFsLFxuICBnZXRCeVBhdGgsXG4gIGdldFByb3AsXG4gIHZhbHVlRXhpc3RJblNlbGVjdGVkLFxuICBpc29tb3JwaGljV2luZG93XG59IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBMSUJfTkFNRSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBTZWxlY3RQcm9wc01vZGVsIGZyb20gJy4vbW9kZWxzL1NlbGVjdFByb3BzTW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IFNlbGVjdFByb3BzTW9kZWw7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZHJvcGRvd246IGZhbHNlLFxuICAgICAgdmFsdWVzOiBwcm9wcy52YWx1ZXMsXG4gICAgICBzZWFyY2g6ICcnLFxuICAgICAgc2VsZWN0Qm91bmRzOiB7fSxcbiAgICAgIGN1cnNvcjogbnVsbCxcbiAgICAgIHNlYXJjaFJlc3VsdHM6IHByb3BzLm9wdGlvbnNcbiAgICB9O1xuXG4gICAgdGhpcy5tZXRob2RzID0ge1xuICAgICAgYWN0aXZlQ3Vyc29ySXRlbTogdGhpcy5hY3RpdmVDdXJzb3JJdGVtLFxuICAgICAgYWRkSXRlbTogdGhpcy5hZGRJdGVtLFxuICAgICAgYXJlQWxsU2VsZWN0ZWQ6IHRoaXMuYXJlQWxsU2VsZWN0ZWQsXG4gICAgICBjbGVhckFsbDogdGhpcy5jbGVhckFsbCxcbiAgICAgIGNyZWF0ZU5ldzogdGhpcy5jcmVhdGVOZXcsXG4gICAgICBkcm9wRG93bjogdGhpcy5kcm9wRG93bixcbiAgICAgIGdldElucHV0U2l6ZTogdGhpcy5nZXRJbnB1dFNpemUsXG4gICAgICBnZXRTZWxlY3RCb3VuZHM6IHRoaXMuZ2V0U2VsZWN0Qm91bmRzLFxuICAgICAgZ2V0U2VsZWN0UmVmOiB0aGlzLmdldFNlbGVjdFJlZixcbiAgICAgIGhhbmRsZUtleURvd246IHRoaXMuaGFuZGxlS2V5RG93bixcbiAgICAgIGlzU2VsZWN0ZWQ6IHRoaXMuaXNTZWxlY3RlZCxcbiAgICAgIHJlbW92ZUl0ZW06IHRoaXMucmVtb3ZlSXRlbSxcbiAgICAgIHNhZmVTdHJpbmc6IHRoaXMuc2FmZVN0cmluZyxcbiAgICAgIHNlYXJjaFJlc3VsdHM6IHRoaXMuc2VhcmNoUmVzdWx0cyxcbiAgICAgIHNlbGVjdEFsbDogdGhpcy5zZWxlY3RBbGwsXG4gICAgICBzZXRTZWFyY2g6IHRoaXMuc2V0U2VhcmNoLFxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbDogdGhpcy50b2dnbGVTZWxlY3RBbGxcbiAgICB9O1xuXG4gICAgdGhpcy5zZWxlY3QgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLmRyb3Bkb3duUm9vdCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnByb3BzLnBvcnRhbCAmJiB0aGlzLnByb3BzLnBvcnRhbC5hcHBlbmRDaGlsZCh0aGlzLmRyb3Bkb3duUm9vdCk7XG4gICAgaXNvbW9ycGhpY1dpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGRlYm91bmNlKHRoaXMudXBkYXRlU2VsZWN0Qm91bmRzKSk7XG4gICAgaXNvbW9ycGhpY1dpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGRlYm91bmNlKHRoaXMub25TY3JvbGwpKTtcblxuICAgIHRoaXMuZHJvcERvd24oJ2Nsb3NlJyk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0Qm91bmRzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmRlZmF1bHRNZW51SXNPcGVuKSB7XG4gICAgICB0aGlzLmRyb3BEb3duKCdvcGVuJyk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMucHJvcHMuY29tcGFyZVZhbHVlc0Z1bmMocHJldlByb3BzLnZhbHVlcywgdGhpcy5wcm9wcy52YWx1ZXMpICYmXG4gICAgICB0aGlzLnByb3BzLmNvbXBhcmVWYWx1ZXNGdW5jKHByZXZQcm9wcy52YWx1ZXMsIHByZXZTdGF0ZS52YWx1ZXMpXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWVzOiB0aGlzLnByb3BzLnZhbHVlc1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnN0YXRlLnZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdEJvdW5kcygpO1xuICAgIH1cblxuICAgIGlmIChwcmV2UHJvcHMub3B0aW9ucyAhPT0gdGhpcy5wcm9wcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoUmVzdWx0czogdGhpcy5zZWFyY2hSZXN1bHRzKCkgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZTdGF0ZS52YWx1ZXMgIT09IHRoaXMuc3RhdGUudmFsdWVzKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMuc3RhdGUudmFsdWVzKTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0Qm91bmRzKCk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZTdGF0ZS5zZWFyY2ggIT09IHRoaXMuc3RhdGUuc2VhcmNoKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdEJvdW5kcygpO1xuICAgIH1cblxuICAgIGlmIChwcmV2U3RhdGUudmFsdWVzICE9PSB0aGlzLnN0YXRlLnZhbHVlcyAmJiB0aGlzLnByb3BzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHRoaXMuZHJvcERvd24oJ2Nsb3NlJyk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZQcm9wcy5tdWx0aSAhPT0gdGhpcy5wcm9wcy5tdWx0aSkge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RCb3VuZHMoKTtcbiAgICB9XG5cbiAgICBpZiAocHJldlN0YXRlLmRyb3Bkb3duICYmIHByZXZTdGF0ZS5kcm9wZG93biAhPT0gdGhpcy5zdGF0ZS5kcm9wZG93bikge1xuICAgICAgdGhpcy5vbkRyb3Bkb3duQ2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIXByZXZTdGF0ZS5kcm9wZG93biAmJiBwcmV2U3RhdGUuZHJvcGRvd24gIT09IHRoaXMuc3RhdGUuZHJvcGRvd24pIHtcbiAgICAgIHRoaXMucHJvcHMub25Ecm9wZG93bk9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnByb3BzLnBvcnRhbCAmJiB0aGlzLnByb3BzLnBvcnRhbC5yZW1vdmVDaGlsZCh0aGlzLmRyb3Bkb3duUm9vdCk7XG4gICAgaXNvbW9ycGhpY1dpbmRvdygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAncmVzaXplJyxcbiAgICAgIGRlYm91bmNlKHRoaXMudXBkYXRlU2VsZWN0Qm91bmRzLCB0aGlzLnByb3BzLmRlYm91bmNlRGVsYXkpXG4gICAgKTtcbiAgICBpc29tb3JwaGljV2luZG93KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICdzY3JvbGwnLFxuICAgICAgZGVib3VuY2UodGhpcy5vblNjcm9sbCwgdGhpcy5wcm9wcy5kZWJvdW5jZURlbGF5KVxuICAgICk7XG4gIH1cblxuICBvbkRyb3Bkb3duQ2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGN1cnNvcjogbnVsbCB9KTtcbiAgICB0aGlzLnByb3BzLm9uRHJvcGRvd25DbG9zZSgpO1xuICB9O1xuXG4gIG9uU2Nyb2xsID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmNsb3NlT25TY3JvbGwpIHtcbiAgICAgIHRoaXMuZHJvcERvd24oJ2Nsb3NlJyk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTZWxlY3RCb3VuZHMoKTtcbiAgfTtcblxuICB1cGRhdGVTZWxlY3RCb3VuZHMgPSAoKSA9PlxuICAgIHRoaXMuc2VsZWN0LmN1cnJlbnQgJiZcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNlbGVjdEJvdW5kczogdGhpcy5zZWxlY3QuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIH0pO1xuXG4gIGdldFNlbGVjdEJvdW5kcyA9ICgpID0+IHRoaXMuc3RhdGUuc2VsZWN0Qm91bmRzO1xuXG4gIGRyb3BEb3duID0gKGFjdGlvbiA9ICd0b2dnbGUnLCBldmVudCwgZm9yY2UgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IChldmVudCAmJiBldmVudC50YXJnZXQpIHx8IChldmVudCAmJiBldmVudC5zcmNFbGVtZW50KTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMub25Ecm9wZG93bkNsb3NlUmVxdWVzdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duICYmXG4gICAgICBmb3JjZSA9PT0gZmFsc2UgJiZcbiAgICAgIGFjdGlvbiA9PT0gJ2Nsb3NlJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMub25Ecm9wZG93bkNsb3NlUmVxdWVzdCh7XG4gICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICBtZXRob2RzOiB0aGlzLm1ldGhvZHMsXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBjbG9zZTogKCkgPT4gdGhpcy5kcm9wRG93bignY2xvc2UnLCBudWxsLCB0cnVlKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5wcm9wcy5wb3J0YWwgJiZcbiAgICAgICF0aGlzLnByb3BzLmNsb3NlT25TY3JvbGwgJiZcbiAgICAgICF0aGlzLnByb3BzLmNsb3NlT25TZWxlY3QgJiZcbiAgICAgIGV2ZW50ICYmXG4gICAgICB0YXJnZXQgJiZcbiAgICAgIHRhcmdldC5vZmZzZXRQYXJlbnQgJiZcbiAgICAgIHRhcmdldC5vZmZzZXRQYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZWFjdC1kcm9wZG93bi1zZWxlY3QtZHJvcGRvd24nKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmtlZXBPcGVuKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IGRyb3Bkb3duOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb24gPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZS5kcm9wZG93bikge1xuICAgICAgdGhpcy5zZWxlY3QuY3VycmVudC5ibHVyKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJvcGRvd246IGZhbHNlLFxuICAgICAgICBzZWFyY2g6IHRoaXMucHJvcHMuY2xlYXJPbkJsdXIgPyAnJyA6IHRoaXMuc3RhdGUuc2VhcmNoLFxuICAgICAgICBzZWFyY2hSZXN1bHRzOiB0aGlzLnByb3BzLm9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb24gPT09ICdvcGVuJyAmJiAhdGhpcy5zdGF0ZS5kcm9wZG93bikge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoeyBkcm9wZG93bjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uID09PSAndG9nZ2xlJykge1xuICAgICAgdGhpcy5zZWxlY3QuY3VycmVudC5mb2N1cygpO1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoeyBkcm9wZG93bjogIXRoaXMuc3RhdGUuZHJvcGRvd24gfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIGdldFNlbGVjdFJlZiA9ICgpID0+IHRoaXMuc2VsZWN0LmN1cnJlbnQ7XG5cbiAgYWRkSXRlbSA9IChpdGVtKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMubXVsdGkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWVFeGlzdEluU2VsZWN0ZWQoZ2V0QnlQYXRoKGl0ZW0sIHRoaXMucHJvcHMudmFsdWVGaWVsZCksIHRoaXMuc3RhdGUudmFsdWVzLCB0aGlzLnByb3BzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW92ZUl0ZW0obnVsbCwgaXRlbSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWVzOiBbLi4udGhpcy5zdGF0ZS52YWx1ZXMsIGl0ZW1dXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvcHMub25TZWxlY3QoWy4uLnRoaXMuc3RhdGUudmFsdWVzLCBpdGVtXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZXM6IFtpdGVtXSxcbiAgICAgICAgZHJvcGRvd246IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvcHMub25TZWxlY3QoW2l0ZW1dKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLmNsZWFyT25TZWxlY3QgJiZcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2g6ICcnIH0sICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNlYXJjaFJlc3VsdHM6IHRoaXMuc2VhcmNoUmVzdWx0cygpIH0pO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICByZW1vdmVJdGVtID0gKGV2ZW50LCBpdGVtLCBjbG9zZSA9IGZhbHNlKSA9PiB7XG4gICAgaWYgKGV2ZW50ICYmIGNsb3NlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmRyb3BEb3duKCdjbG9zZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc3RhdGUudmFsdWVzLmZpbHRlcihcbiAgICAgICh2YWx1ZXMpID0+XG4gICAgICAgIGdldEJ5UGF0aCh2YWx1ZXMsIHRoaXMucHJvcHMudmFsdWVGaWVsZCkgIT09IGdldEJ5UGF0aChpdGVtLCB0aGlzLnByb3BzLnZhbHVlRmllbGQpXG4gICAgKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHZhbHVlc1xuICAgIH0pO1xuICAgIHRoaXMucHJvcHMub25EZXNlbGVjdCh2YWx1ZXMpXG4gIH07XG5cbiAgc2V0U2VhcmNoID0gKGV2ZW50KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjdXJzb3I6IG51bGxcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIHNlYXJjaDogZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoUmVzdWx0czogdGhpcy5zZWFyY2hSZXN1bHRzKCkgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBnZXRJbnB1dFNpemUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuc2VhcmNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWFyY2gubGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLnZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5hZGRQbGFjZWhvbGRlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMucGxhY2Vob2xkZXIubGVuZ3RoO1xuICB9O1xuXG4gIHRvZ2dsZVNlbGVjdEFsbCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB2YWx1ZXM6IHRoaXMuc3RhdGUudmFsdWVzLmxlbmd0aCA9PT0gMCA/IHRoaXMuc2VsZWN0QWxsKCkgOiB0aGlzLmNsZWFyQWxsKClcbiAgICB9KTtcbiAgfTtcblxuICBjbGVhckFsbCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLm9uQ2xlYXJBbGwoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHZhbHVlczogW11cbiAgICB9KTtcbiAgfTtcblxuICBzZWxlY3RBbGwgPSAodmFsdWVzTGlzdCA9IFtdKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5vblNlbGVjdEFsbCgpO1xuICAgIGNvbnN0IHZhbHVlcyA9XG4gICAgICB2YWx1ZXNMaXN0Lmxlbmd0aCA+IDAgPyB2YWx1ZXNMaXN0IDogdGhpcy5wcm9wcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uLmRpc2FibGVkKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZXMgfSk7XG4gIH07XG5cbiAgaXNTZWxlY3RlZCA9IChvcHRpb24pID0+XG4gICAgISF0aGlzLnN0YXRlLnZhbHVlcy5maW5kKFxuICAgICAgKHZhbHVlKSA9PlxuICAgICAgICBnZXRCeVBhdGgodmFsdWUsIHRoaXMucHJvcHMudmFsdWVGaWVsZCkgPT09IGdldEJ5UGF0aChvcHRpb24sIHRoaXMucHJvcHMudmFsdWVGaWVsZClcbiAgICApO1xuXG4gIGFyZUFsbFNlbGVjdGVkID0gKCkgPT5cbiAgICB0aGlzLnN0YXRlLnZhbHVlcy5sZW5ndGggPT09IHRoaXMucHJvcHMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gIW9wdGlvbi5kaXNhYmxlZCkubGVuZ3RoO1xuXG4gIHNhZmVTdHJpbmcgPSAoc3RyaW5nKSA9PiBzdHJpbmcucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcblxuICBzb3J0QnkgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBzb3J0QnksIG9wdGlvbnMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoIXNvcnRCeSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoZ2V0UHJvcChhLCBzb3J0QnkpIDwgZ2V0UHJvcChiLCBzb3J0QnkpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoZ2V0UHJvcChhLCBzb3J0QnkpID4gZ2V0UHJvcChiLCBzb3J0QnkpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcblxuICBzZWFyY2hGbiA9ICh7IHN0YXRlLCBtZXRob2RzIH0pID0+IHtcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKG1ldGhvZHMuc2FmZVN0cmluZyhzdGF0ZS5zZWFyY2gpLCAnaScpO1xuXG4gICAgcmV0dXJuIG1ldGhvZHNcbiAgICAgIC5zb3J0QnkoKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgcmVnZXhwLnRlc3QoZ2V0QnlQYXRoKGl0ZW0sIHRoaXMucHJvcHMuc2VhcmNoQnkpIHx8IGdldEJ5UGF0aChpdGVtLCB0aGlzLnByb3BzLnZhbHVlRmllbGQpKVxuICAgICAgKTtcbiAgfTtcblxuICBzZWFyY2hSZXN1bHRzID0gKCkgPT4ge1xuICAgIGNvbnN0IGFyZ3MgPSB7IHN0YXRlOiB0aGlzLnN0YXRlLCBwcm9wczogdGhpcy5wcm9wcywgbWV0aG9kczogdGhpcy5tZXRob2RzIH07XG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWFyY2hGbihhcmdzKSB8fCB0aGlzLnNlYXJjaEZuKGFyZ3MpO1xuICB9O1xuXG4gIGFjdGl2ZUN1cnNvckl0ZW0gPSAoYWN0aXZlQ3Vyc29ySXRlbSkgPT5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGFjdGl2ZUN1cnNvckl0ZW1cbiAgICB9KTtcblxuICBoYW5kbGVLZXlEb3duID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgYXJncyA9IHtcbiAgICAgIGV2ZW50LFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgIG1ldGhvZHM6IHRoaXMubWV0aG9kcyxcbiAgICAgIHNldFN0YXRlOiB0aGlzLnNldFN0YXRlLmJpbmQodGhpcylcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlS2V5RG93bkZuKGFyZ3MpIHx8IHRoaXMuaGFuZGxlS2V5RG93bkZuKGFyZ3MpO1xuICB9O1xuXG4gIGhhbmRsZUtleURvd25GbiA9ICh7IGV2ZW50LCBzdGF0ZSwgcHJvcHMsIG1ldGhvZHMsIHNldFN0YXRlIH0pID0+IHtcbiAgICBjb25zdCB7IGN1cnNvciwgc2VhcmNoUmVzdWx0cyB9ID0gc3RhdGU7XG4gICAgY29uc3QgZXNjYXBlID0gZXZlbnQua2V5ID09PSAnRXNjYXBlJztcbiAgICBjb25zdCBlbnRlciA9IGV2ZW50LmtleSA9PT0gJ0VudGVyJztcbiAgICBjb25zdCBhcnJvd1VwID0gZXZlbnQua2V5ID09PSAnQXJyb3dVcCc7XG4gICAgY29uc3QgYXJyb3dEb3duID0gZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJztcbiAgICBjb25zdCBiYWNrc3BhY2UgPSBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnO1xuICAgIGNvbnN0IHRhYiA9IGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgIWV2ZW50LnNoaWZ0S2V5O1xuICAgIGNvbnN0IHNoaWZ0VGFiID0gZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnVGFiJztcblxuICAgIGlmIChhcnJvd0Rvd24gJiYgIXN0YXRlLmRyb3Bkb3duKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5kcm9wRG93bignb3BlbicpO1xuICAgICAgcmV0dXJuIHNldFN0YXRlKHtcbiAgICAgICAgY3Vyc29yOiAwXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoKGFycm93RG93biB8fCAodGFiICYmIHN0YXRlLmRyb3Bkb3duKSkgJiYgY3Vyc29yID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gc2V0U3RhdGUoe1xuICAgICAgICBjdXJzb3I6IDBcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhcnJvd1VwIHx8IGFycm93RG93biB8fCAoc2hpZnRUYWIgJiYgc3RhdGUuZHJvcGRvd24pIHx8ICh0YWIgJiYgc3RhdGUuZHJvcGRvd24pKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmIChlc2NhcGUpIHtcbiAgICAgIHRoaXMuZHJvcERvd24oJ2Nsb3NlJyk7XG4gICAgfVxuXG4gICAgaWYgKGVudGVyKSB7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbSA9IHNlYXJjaFJlc3VsdHNbY3Vyc29yXTtcbiAgICAgIGlmIChjdXJyZW50SXRlbSAmJiAhY3VycmVudEl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKHByb3BzLmNyZWF0ZSAmJiB2YWx1ZUV4aXN0SW5TZWxlY3RlZChzdGF0ZS5zZWFyY2gsIHN0YXRlLnZhbHVlcywgcHJvcHMpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBtZXRob2RzLmFkZEl0ZW0oY3VycmVudEl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgoYXJyb3dEb3duIHx8ICh0YWIgJiYgc3RhdGUuZHJvcGRvd24pKSAmJiBzZWFyY2hSZXN1bHRzLmxlbmd0aCA9PT0gY3Vyc29yKSB7XG4gICAgICByZXR1cm4gc2V0U3RhdGUoe1xuICAgICAgICBjdXJzb3I6IDBcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhcnJvd0Rvd24gfHwgKHRhYiAmJiBzdGF0ZS5kcm9wZG93bikpIHtcbiAgICAgIHNldFN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgIGN1cnNvcjogcHJldlN0YXRlLmN1cnNvciArIDFcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoKGFycm93VXAgfHwgKHNoaWZ0VGFiICYmIHN0YXRlLmRyb3Bkb3duKSkgJiYgY3Vyc29yID4gMCkge1xuICAgICAgc2V0U3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgY3Vyc29yOiBwcmV2U3RhdGUuY3Vyc29yIC0gMVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICgoYXJyb3dVcCB8fCAoc2hpZnRUYWIgJiYgc3RhdGUuZHJvcGRvd24pKSAmJiBjdXJzb3IgPT09IDApIHtcbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgY3Vyc29yOiBzZWFyY2hSZXN1bHRzLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGJhY2tzcGFjZSAmJiBwcm9wcy5iYWNrc3BhY2VEZWxldGUgJiYgdGhpcy5nZXRJbnB1dFNpemUoKSA9PT0gMCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlczogdGhpcy5zdGF0ZS52YWx1ZXMuc2xpY2UoMCwgLTEpXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyRHJvcGRvd24gPSAoKSA9PlxuICAgIHRoaXMucHJvcHMucG9ydGFsID8gKFxuICAgICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgICA8RHJvcGRvd24gcHJvcHM9e3RoaXMucHJvcHN9IHN0YXRlPXt0aGlzLnN0YXRlfSBtZXRob2RzPXt0aGlzLm1ldGhvZHN9IC8+LFxuICAgICAgICB0aGlzLmRyb3Bkb3duUm9vdFxuICAgICAgKVxuICAgICkgOiAoXG4gICAgICA8RHJvcGRvd24gcHJvcHM9e3RoaXMucHJvcHN9IHN0YXRlPXt0aGlzLnN0YXRlfSBtZXRob2RzPXt0aGlzLm1ldGhvZHN9IC8+XG4gICAgKTtcblxuICBjcmVhdGVOZXcgPSAoaXRlbSkgPT4ge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0ge1xuICAgICAgW3RoaXMucHJvcHMubGFiZWxGaWVsZF06IGl0ZW0sXG4gICAgICBbdGhpcy5wcm9wcy52YWx1ZUZpZWxkXTogaXRlbVxuICAgIH07XG5cbiAgICB0aGlzLmFkZEl0ZW0obmV3VmFsdWUpO1xuICAgIHRoaXMucHJvcHMub25DcmVhdGVOZXcobmV3VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2g6ICcnIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPENsaWNrT3V0c2lkZSBvbkNsaWNrT3V0c2lkZT17KGV2ZW50KSA9PiB0aGlzLmRyb3BEb3duKCdjbG9zZScsIGV2ZW50KX0+XG4gICAgICAgIDxSZWFjdERyb3Bkb3duU2VsZWN0XG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleURvd259XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRyb3Bkb3duIHNlbGVjdFwiXG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17dGhpcy5zdGF0ZS5kcm9wZG93bn1cbiAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMuZHJvcERvd24oJ29wZW4nLCBldmVudCl9XG4gICAgICAgICAgdGFiSW5kZXg9e3RoaXMucHJvcHMuZGlzYWJsZWQgPyAnLTEnIDogJzAnfVxuICAgICAgICAgIGRpcmVjdGlvbj17dGhpcy5wcm9wcy5kaXJlY3Rpb259XG4gICAgICAgICAgc3R5bGU9e3RoaXMucHJvcHMuc3R5bGV9XG4gICAgICAgICAgcmVmPXt0aGlzLnNlbGVjdH1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2Ake0xJQl9OQU1FfSAke3RoaXMucHJvcHMuY2xhc3NOYW1lfWB9XG4gICAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgICAgey4uLnRoaXMucHJvcHMuYWRkaXRpb25hbFByb3BzfT5cbiAgICAgICAgICA8Q29udGVudCBwcm9wcz17dGhpcy5wcm9wc30gc3RhdGU9e3RoaXMuc3RhdGV9IG1ldGhvZHM9e3RoaXMubWV0aG9kc30gLz5cblxuICAgICAgICAgIHsodGhpcy5wcm9wcy5uYW1lIHx8IHRoaXMucHJvcHMucmVxdWlyZWQpICYmIChcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICAgIHN0eWxlPXt7IG9wYWNpdHk6IDAsIHdpZHRoOiAwLCBwb3NpdGlvbjogJ2Fic29sdXRlJyB9fVxuICAgICAgICAgICAgICBuYW1lPXt0aGlzLnByb3BzLm5hbWV9XG4gICAgICAgICAgICAgIHJlcXVpcmVkPXt0aGlzLnByb3BzLnJlcXVpcmVkfVxuICAgICAgICAgICAgICBwYXR0ZXJuPXt0aGlzLnByb3BzLnBhdHRlcm59XG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZXMubWFwKCh2YWx1ZSkgPT4gdmFsdWVbdGhpcy5wcm9wcy5sYWJlbEZpZWxkXSkudG9TdHJpbmcoKSB8fCBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnByb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge3RoaXMucHJvcHMubG9hZGluZyAmJiA8TG9hZGluZyBwcm9wcz17dGhpcy5wcm9wc30gLz59XG5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jbGVhcmFibGUgJiYgKFxuICAgICAgICAgICAgPENsZWFyIHByb3BzPXt0aGlzLnByb3BzfSBzdGF0ZT17dGhpcy5zdGF0ZX0gbWV0aG9kcz17dGhpcy5tZXRob2RzfSAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5zZXBhcmF0b3IgJiYgKFxuICAgICAgICAgICAgPFNlcGFyYXRvciBwcm9wcz17dGhpcy5wcm9wc30gc3RhdGU9e3RoaXMuc3RhdGV9IG1ldGhvZHM9e3RoaXMubWV0aG9kc30gLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge3RoaXMucHJvcHMuZHJvcGRvd25IYW5kbGUgJiYgKFxuICAgICAgICAgICAgPERyb3Bkb3duSGFuZGxlXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuc2VsZWN0LmN1cnJlbnQuZm9jdXMoKX1cbiAgICAgICAgICAgICAgcHJvcHM9e3RoaXMucHJvcHN9XG4gICAgICAgICAgICAgIHN0YXRlPXt0aGlzLnN0YXRlfVxuICAgICAgICAgICAgICBtZXRob2RzPXt0aGlzLm1ldGhvZHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5kcm9wZG93biAmJiAhdGhpcy5wcm9wcy5kaXNhYmxlZCAmJiB0aGlzLnJlbmRlckRyb3Bkb3duKCl9XG4gICAgICAgIDwvUmVhY3REcm9wZG93blNlbGVjdD5cbiAgICAgIDwvQ2xpY2tPdXRzaWRlPlxuICAgICk7XG4gIH1cbn1cblxuU2VsZWN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgYWRkUGxhY2Vob2xkZXI6ICcnLFxuICBhZGRpdGlvbmFsUHJvcHM6IG51bGwsXG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIGJhY2tzcGFjZURlbGV0ZTogdHJ1ZSxcbiAgY2xlYXJBbGxMYWJlbDogJ0NsZWFyIGFsbCcsXG4gIGNsZWFyT25CbHVyOiB0cnVlLFxuICBjbGVhck9uU2VsZWN0OiB0cnVlLFxuICBjbGVhcmFibGU6IGZhbHNlLFxuICBjbG9zZU9uU2Nyb2xsOiBmYWxzZSxcbiAgY2xvc2VPblNlbGVjdDogZmFsc2UsXG4gIGNsb3NlT25DbGlja0lucHV0OiBmYWxzZSxcbiAgY29sb3I6ICcjMDA3NEQ5JyxcbiAgY29tcGFyZVZhbHVlc0Z1bmM6IGlzRXF1YWwsXG4gIGNyZWF0ZTogZmFsc2UsXG4gIGNyZWF0ZU5ld0xhYmVsOiAnYWRkIHtzZWFyY2h9JyxcbiAgZGVib3VuY2VEZWxheTogMCxcbiAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBkaXNhYmxlZExhYmVsOiAnZGlzYWJsZWQnLFxuICBkcm9wZG93bkdhcDogNSxcbiAgZHJvcGRvd25IYW5kbGU6IHRydWUsXG4gIGRyb3Bkb3duSGVpZ2h0OiAnMzAwcHgnLFxuICBkcm9wZG93blBvc2l0aW9uOiAnYm90dG9tJyxcbiAgaGFuZGxlS2V5RG93bkZuOiAoKSA9PiB1bmRlZmluZWQsXG4gIGtlZXBPcGVuOiBmYWxzZSxcbiAga2VlcFNlbGVjdGVkSW5MaXN0OiB0cnVlLFxuICBsYWJlbEZpZWxkOiAnbGFiZWwnLFxuICBsb2FkaW5nOiBmYWxzZSxcbiAgbXVsdGk6IGZhbHNlLFxuICBuYW1lOiBudWxsLFxuICBub0RhdGFMYWJlbDogJ05vIGRhdGEnLFxuICBvbkNoYW5nZTogKCkgPT4gdW5kZWZpbmVkLFxuICBvblNlbGVjdDogKCkgPT4gdW5kZWZpbmVkLFxuICBvbkRlc2VsZWN0OiAoKSA9PiB1bmRlZmluZWQsXG4gIG9uQ2xlYXJBbGw6ICgpID0+IHVuZGVmaW5lZCxcbiAgb25DcmVhdGVOZXc6ICgpID0+IHVuZGVmaW5lZCxcbiAgb25Ecm9wZG93bkNsb3NlOiAoKSA9PiB1bmRlZmluZWQsXG4gIG9uRHJvcGRvd25DbG9zZVJlcXVlc3Q6IHVuZGVmaW5lZCxcbiAgb25Ecm9wZG93bk9wZW46ICgpID0+IHVuZGVmaW5lZCxcbiAgb25TZWxlY3RBbGw6ICgpID0+IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogW10sXG4gIHBhdHRlcm46IHVuZGVmaW5lZCxcbiAgcGxhY2Vob2xkZXI6ICdTZWxlY3QuLi4nLFxuICBwb3J0YWw6IG51bGwsXG4gIHJlcXVpcmVkOiBmYWxzZSxcbiAgc2VhcmNoQnk6ICdsYWJlbCcsXG4gIHNlYXJjaEZuOiAoKSA9PiB1bmRlZmluZWQsXG4gIHNlYXJjaGFibGU6IHRydWUsXG4gIHNlbGVjdEFsbDogZmFsc2UsXG4gIHNlbGVjdEFsbExhYmVsOiAnU2VsZWN0IGFsbCcsXG4gIHNlcGFyYXRvcjogZmFsc2UsXG4gIHNvcnRCeTogbnVsbCxcbiAgdmFsdWVGaWVsZDogJ3ZhbHVlJyxcbiAgdmFsdWVzOiBbXSxcbiAgZGVmYXVsdE1lbnVJc09wZW46IGZhbHNlXG59O1xuXG5jb25zdCBSZWFjdERyb3Bkb3duU2VsZWN0ID0gc3R5bGVkLmRpdmBcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBwYWRkaW5nOiAycHggNXB4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBkaXJlY3Rpb246ICR7KHsgZGlyZWN0aW9uIH0pID0+IGRpcmVjdGlvbn07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWluLWhlaWdodDogMzZweDtcblxuICAkeyh7IGRpc2FibGVkIH0pID0+XG4gICAgZGlzYWJsZWQgPyAnY3Vyc29yOiBub3QtYWxsb3dlZDtwb2ludGVyLWV2ZW50czogbm9uZTtvcGFjaXR5OiAwLjM7JyA6ICdwb2ludGVyLWV2ZW50czogYWxsOyd9XG4gIDpob3ZlcixcbiAgOmZvY3VzLXdpdGhpbiB7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7IGNvbG9yIH0pID0+IGNvbG9yfTtcbiAgfVxuXG4gIDpmb2N1cyxcbiAgOmZvY3VzLXdpdGhpbiB7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHsoeyBjb2xvciB9KSA9PiBoZXhUb1JHQkEoY29sb3IsIDAuMil9O1xuICB9XG5cbiAgKiB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuYDtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIl19 */")),_default=Select;exports.default=_default;