carbon-components-angular 5.20.2 → 5.20.3

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.
Files changed (27) hide show
  1. package/docs/documentation/components/Slider.html +157 -135
  2. package/docs/documentation/js/search/search_index.js +2 -2
  3. package/docs/documentation/modules/TimePickerModule/dependencies.svg +4 -4
  4. package/docs/documentation/modules/TimePickerModule.html +4 -4
  5. package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +44 -40
  6. package/docs/documentation/modules/TimePickerSelectModule.html +44 -40
  7. package/docs/documentation/modules/ToggleModule/dependencies.svg +41 -37
  8. package/docs/documentation/modules/ToggleModule.html +41 -37
  9. package/docs/documentation/modules/ToggletipModule/dependencies.svg +37 -37
  10. package/docs/documentation/modules/ToggletipModule.html +37 -37
  11. package/docs/documentation/modules/TooltipModule/dependencies.svg +28 -28
  12. package/docs/documentation/modules/TooltipModule.html +28 -28
  13. package/docs/documentation/modules/TreeviewModule/dependencies.svg +38 -38
  14. package/docs/documentation/modules/TreeviewModule.html +38 -38
  15. package/docs/documentation.json +65 -65
  16. package/docs/storybook/iframe.html +2 -2
  17. package/docs/storybook/{main.053e39e2.iframe.bundle.js → main.939e2f87.iframe.bundle.js} +1 -1
  18. package/docs/storybook/project.json +1 -1
  19. package/docs/storybook/{runtime~main.4d2d3399.iframe.bundle.js → runtime~main.a91352e8.iframe.bundle.js} +1 -1
  20. package/docs/storybook/{slider-slider-stories.476668e9.iframe.bundle.js → slider-slider-stories.f608c3ca.iframe.bundle.js} +1 -1
  21. package/esm2020/slider/slider.component.mjs +71 -49
  22. package/fesm2015/carbon-components-angular-slider.mjs +70 -48
  23. package/fesm2015/carbon-components-angular-slider.mjs.map +1 -1
  24. package/fesm2020/carbon-components-angular-slider.mjs +70 -48
  25. package/fesm2020/carbon-components-angular-slider.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/slider/slider.component.d.ts +4 -1
@@ -1 +1 @@
1
- {"generatedAt":1709319790660,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":true,"hasStorybookEslint":false,"refCount":0,"packageManager":{"type":"npm","version":"8.19.4"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/angular","options":{}},"builder":"@storybook/builder-webpack5","renderer":"@storybook/angular","storybookVersion":"7.6.7","storybookVersionSpecifier":"7.6.7","language":"typescript","storybookPackages":{"@storybook/addon-actions":{"version":"7.6.7"},"@storybook/angular":{"version":"7.6.7"},"@storybook/theming":{"version":"7.6.7"},"storybook":{"version":"7.6.7"}},"addons":{"@storybook/addon-links":{"version":"7.6.7"},"@storybook/addon-essentials":{"options":{"backgrounds":false},"version":"7.6.7"},"@storybook/addon-a11y":{"version":"7.6.7"},"@storybook/addon-storysource":{"version":"7.6.7"}}}
1
+ {"generatedAt":1709606130614,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":true,"hasStorybookEslint":false,"refCount":0,"packageManager":{"type":"npm","version":"8.19.4"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/angular","options":{}},"builder":"@storybook/builder-webpack5","renderer":"@storybook/angular","storybookVersion":"7.6.7","storybookVersionSpecifier":"7.6.7","language":"typescript","storybookPackages":{"@storybook/addon-actions":{"version":"7.6.7"},"@storybook/angular":{"version":"7.6.7"},"@storybook/theming":{"version":"7.6.7"},"storybook":{"version":"7.6.7"}},"addons":{"@storybook/addon-links":{"version":"7.6.7"},"@storybook/addon-essentials":{"options":{"backgrounds":false},"version":"7.6.7"},"@storybook/addon-a11y":{"version":"7.6.7"},"@storybook/addon-storysource":{"version":"7.6.7"}}}
@@ -1 +1 @@
1
- (()=>{"use strict";var deferred,leafPrototypes,getProto,inProgress,__webpack_modules__={},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(void 0!==cachedModule)return cachedModule.exports;var module=__webpack_module_cache__[moduleId]={id:moduleId,loaded:!1,exports:{}};return __webpack_modules__[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}__webpack_require__.m=__webpack_modules__,__webpack_require__.amdO={},deferred=[],__webpack_require__.O=(result,chunkIds,fn,priority)=>{if(!chunkIds){var notFulfilled=1/0;for(i=0;i<deferred.length;i++){for(var[chunkIds,fn,priority]=deferred[i],fulfilled=!0,j=0;j<chunkIds.length;j++)(!1&priority||notFulfilled>=priority)&&Object.keys(__webpack_require__.O).every((key=>__webpack_require__.O[key](chunkIds[j])))?chunkIds.splice(j--,1):(fulfilled=!1,priority<notFulfilled&&(notFulfilled=priority));if(fulfilled){deferred.splice(i--,1);var r=fn();void 0!==r&&(result=r)}}return result}priority=priority||0;for(var i=deferred.length;i>0&&deferred[i-1][2]>priority;i--)deferred[i]=deferred[i-1];deferred[i]=[chunkIds,fn,priority]},__webpack_require__.n=module=>{var getter=module&&module.__esModule?()=>module.default:()=>module;return __webpack_require__.d(getter,{a:getter}),getter},getProto=Object.getPrototypeOf?obj=>Object.getPrototypeOf(obj):obj=>obj.__proto__,__webpack_require__.t=function(value,mode){if(1&mode&&(value=this(value)),8&mode)return value;if("object"==typeof value&&value){if(4&mode&&value.__esModule)return value;if(16&mode&&"function"==typeof value.then)return value}var ns=Object.create(null);__webpack_require__.r(ns);var def={};leafPrototypes=leafPrototypes||[null,getProto({}),getProto([]),getProto(getProto)];for(var current=2&mode&&value;"object"==typeof current&&!~leafPrototypes.indexOf(current);current=getProto(current))Object.getOwnPropertyNames(current).forEach((key=>def[key]=()=>value[key]));return def.default=()=>value,__webpack_require__.d(ns,def),ns},__webpack_require__.d=(exports,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},__webpack_require__.f={},__webpack_require__.e=chunkId=>Promise.all(Object.keys(__webpack_require__.f).reduce(((promises,key)=>(__webpack_require__.f[key](chunkId,promises),promises)),[])),__webpack_require__.u=chunkId=>(({140:"dialog-overflow-menu-overflow-menu-stories",210:"list-list-stories",384:"grid-css-grid-stories",459:"tabs-tabs-stories",703:"toggletip-toggletip-stories",799:"pagination-pagination-stories",911:"button-button-stories",933:"table-table-stories",972:"patterns-loading-large-loading-stories",1127:"search-search-stories",1928:"accordion-accordion-stories",2218:"inline-loading-inline-loading-stories",2342:"radio-radio-stories",2371:"timepicker-timepicker-stories",2388:"modal-modal-stories",2399:"input-textarea-stories",2489:"toggle-toggle-stories",2494:"loading-loading-stories",2573:"grid-grid-stories",2722:"context-menu-context-menu-stories",2969:"pagination-pagination-nav-stories",3280:"tiles-tiles-stories",3314:"patterns-filtering-multiple-categories-stories",3329:"checkbox-checkbox-stories",3402:"tiles-expandable-tile-stories",3523:"contained-list-contained-list-stories",3610:"patterns-filtering-single-selection-stories",3719:"tiles-clickable-tile-stories",3858:"code-snippet-code-snippet-stories",3867:"tag-tag-stories",4232:"patterns-forms-multi-step-form-stories",4253:"tooltip-tooltip-stories",4277:"patterns-dialogs-modal-with-table-stories",4391:"content-switcher-content-switcher-stories",4731:"icon-icon-stories",4762:"patterns-filtering-multi-selection-stories",5167:"button-icon-button-stories",5368:"number-input-number-stories",5455:"layer-layer-stories",5808:"progress-bar-progress-bar-stories",5980:"select-select-stories",6026:"slider-slider-stories",6115:"theme-theme-stories",6274:"tooltip-definition-tooptip-stories",6310:"file-uploader-file-uploader-stories",6322:"popover-popover-stories",6456:"treeview-treeview-stories",6634:"link-link-stories",6663:"datepicker-datepicker-stories",6842:"breadcrumb-breadcrumb-stories",6943:"input-input-stories",7081:"layout-stack-stories",7235:"index-stories",7291:"structured-list-structured-list-stories",7840:"patterns-loading-progressive-loading-stories",7869:"skeleton-skeleton-stories",7931:"notification-notification-stories",8552:"button-button-set-stories",9211:"dropdown-dropdown-stories",9325:"tiles-tile-group-stories",9552:"timepicker-select-timepicker-select-stories",9619:"progress-indicator-progress-indicator-stories",9660:"ui-shell-ui-shell-stories",9736:"combobox-combobox-stories"}[chunkId]||chunkId)+"."+{140:"e8963bf8",210:"79350958",384:"f5c396e2",454:"3f3499ab",459:"db9e209e",503:"7113f5a6",703:"1da8eaf1",799:"05ab4dd7",901:"fedd2c3b",911:"1b5d80b7",933:"c19aca64",972:"699b1e1b",1119:"f42b55a6",1127:"fac60ec0",1325:"5502bfb0",1470:"39923f01",1895:"0331c090",1928:"48faee56",2218:"7513a48b",2342:"ba1fb969",2371:"7bbf1029",2388:"66aa5c7c",2399:"51dab44c",2489:"7b2e3bc9",2494:"9594d513",2573:"0b935617",2722:"00b09460",2969:"ad4e83e9",3080:"d3996d61",3224:"92030851",3280:"841048dc",3314:"487f9487",3329:"ea872c08",3348:"65c12f97",3360:"e0c015fc",3402:"209d7ef2",3415:"bd5d140d",3523:"2887855a",3610:"e4243e65",3719:"09f1a279",3774:"c37f3d92",3858:"d9a3162d",3867:"7b3a9288",3931:"0e7c514c",4232:"89086fc2",4253:"b15c3310",4277:"a011175b",4391:"2f8cdd41",4578:"93dc52a7",4731:"5b558b26",4762:"cae9c326",5069:"eabf32ea",5103:"20115e64",5167:"fe454546",5368:"b2525c3c",5455:"8fdeec80",5808:"0002dc55",5868:"f5a4be2e",5980:"f28348e5",6026:"476668e9",6115:"781e4fdc",6274:"57864d79",6310:"7cbeda49",6322:"e8d6e7c9",6456:"e544ed9d",6634:"23f8a587",6663:"96effc6c",6842:"43daa149",6943:"eeb079d9",7019:"b8944046",7081:"e9f0fa18",7153:"fff25cdf",7235:"70809ec7",7291:"c50bdf73",7399:"f37bb110",7529:"5272f30b",7773:"6c3cf943",7840:"717ad729",7869:"48ffb189",7931:"624c3d04",8341:"a544f9e9",8552:"d561d04b",9115:"b37cce0a",9211:"97161318",9325:"c925923c",9552:"5b57af49",9558:"f6e6487f",9619:"bf194b73",9660:"70551d65",9672:"00e58d20",9736:"6039adf9"}[chunkId]+".iframe.bundle.js"),__webpack_require__.miniCssF=chunkId=>{},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.hmd=module=>((module=Object.create(module)).children||(module.children=[]),Object.defineProperty(module,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+module.id)}}),module),__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop),inProgress={},__webpack_require__.l=(url,done,key,chunkId)=>{if(inProgress[url])inProgress[url].push(done);else{var script,needAttach;if(void 0!==key)for(var scripts=document.getElementsByTagName("script"),i=0;i<scripts.length;i++){var s=scripts[i];if(s.getAttribute("src")==url||s.getAttribute("data-webpack")=="carbon-components-angular:"+key){script=s;break}}script||(needAttach=!0,(script=document.createElement("script")).charset="utf-8",script.timeout=120,__webpack_require__.nc&&script.setAttribute("nonce",__webpack_require__.nc),script.setAttribute("data-webpack","carbon-components-angular:"+key),script.src=url),inProgress[url]=[done];var onScriptComplete=(prev,event)=>{script.onerror=script.onload=null,clearTimeout(timeout);var doneFns=inProgress[url];if(delete inProgress[url],script.parentNode&&script.parentNode.removeChild(script),doneFns&&doneFns.forEach((fn=>fn(event))),prev)return prev(event)},timeout=setTimeout(onScriptComplete.bind(null,void 0,{type:"timeout",target:script}),12e4);script.onerror=onScriptComplete.bind(null,script.onerror),script.onload=onScriptComplete.bind(null,script.onload),needAttach&&document.head.appendChild(script)}},__webpack_require__.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.nmd=module=>(module.paths=[],module.children||(module.children=[]),module),__webpack_require__.p="",(()=>{var installedChunks={1303:0};__webpack_require__.f.j=(chunkId,promises)=>{var installedChunkData=__webpack_require__.o(installedChunks,chunkId)?installedChunks[chunkId]:void 0;if(0!==installedChunkData)if(installedChunkData)promises.push(installedChunkData[2]);else if(1303!=chunkId){var promise=new Promise(((resolve,reject)=>installedChunkData=installedChunks[chunkId]=[resolve,reject]));promises.push(installedChunkData[2]=promise);var url=__webpack_require__.p+__webpack_require__.u(chunkId),error=new Error;__webpack_require__.l(url,(event=>{if(__webpack_require__.o(installedChunks,chunkId)&&(0!==(installedChunkData=installedChunks[chunkId])&&(installedChunks[chunkId]=void 0),installedChunkData)){var errorType=event&&("load"===event.type?"missing":event.type),realSrc=event&&event.target&&event.target.src;error.message="Loading chunk "+chunkId+" failed.\n("+errorType+": "+realSrc+")",error.name="ChunkLoadError",error.type=errorType,error.request=realSrc,installedChunkData[1](error)}}),"chunk-"+chunkId,chunkId)}else installedChunks[chunkId]=0},__webpack_require__.O.j=chunkId=>0===installedChunks[chunkId];var webpackJsonpCallback=(parentChunkLoadingFunction,data)=>{var moduleId,chunkId,[chunkIds,moreModules,runtime]=data,i=0;if(chunkIds.some((id=>0!==installedChunks[id]))){for(moduleId in moreModules)__webpack_require__.o(moreModules,moduleId)&&(__webpack_require__.m[moduleId]=moreModules[moduleId]);if(runtime)var result=runtime(__webpack_require__)}for(parentChunkLoadingFunction&&parentChunkLoadingFunction(data);i<chunkIds.length;i++)chunkId=chunkIds[i],__webpack_require__.o(installedChunks,chunkId)&&installedChunks[chunkId]&&installedChunks[chunkId][0](),installedChunks[chunkId]=0;return __webpack_require__.O(result)},chunkLoadingGlobal=self.webpackChunkcarbon_components_angular=self.webpackChunkcarbon_components_angular||[];chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null,0)),chunkLoadingGlobal.push=webpackJsonpCallback.bind(null,chunkLoadingGlobal.push.bind(chunkLoadingGlobal))})(),__webpack_require__.nc=void 0})();
1
+ (()=>{"use strict";var deferred,leafPrototypes,getProto,inProgress,__webpack_modules__={},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(void 0!==cachedModule)return cachedModule.exports;var module=__webpack_module_cache__[moduleId]={id:moduleId,loaded:!1,exports:{}};return __webpack_modules__[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}__webpack_require__.m=__webpack_modules__,__webpack_require__.amdO={},deferred=[],__webpack_require__.O=(result,chunkIds,fn,priority)=>{if(!chunkIds){var notFulfilled=1/0;for(i=0;i<deferred.length;i++){for(var[chunkIds,fn,priority]=deferred[i],fulfilled=!0,j=0;j<chunkIds.length;j++)(!1&priority||notFulfilled>=priority)&&Object.keys(__webpack_require__.O).every((key=>__webpack_require__.O[key](chunkIds[j])))?chunkIds.splice(j--,1):(fulfilled=!1,priority<notFulfilled&&(notFulfilled=priority));if(fulfilled){deferred.splice(i--,1);var r=fn();void 0!==r&&(result=r)}}return result}priority=priority||0;for(var i=deferred.length;i>0&&deferred[i-1][2]>priority;i--)deferred[i]=deferred[i-1];deferred[i]=[chunkIds,fn,priority]},__webpack_require__.n=module=>{var getter=module&&module.__esModule?()=>module.default:()=>module;return __webpack_require__.d(getter,{a:getter}),getter},getProto=Object.getPrototypeOf?obj=>Object.getPrototypeOf(obj):obj=>obj.__proto__,__webpack_require__.t=function(value,mode){if(1&mode&&(value=this(value)),8&mode)return value;if("object"==typeof value&&value){if(4&mode&&value.__esModule)return value;if(16&mode&&"function"==typeof value.then)return value}var ns=Object.create(null);__webpack_require__.r(ns);var def={};leafPrototypes=leafPrototypes||[null,getProto({}),getProto([]),getProto(getProto)];for(var current=2&mode&&value;"object"==typeof current&&!~leafPrototypes.indexOf(current);current=getProto(current))Object.getOwnPropertyNames(current).forEach((key=>def[key]=()=>value[key]));return def.default=()=>value,__webpack_require__.d(ns,def),ns},__webpack_require__.d=(exports,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},__webpack_require__.f={},__webpack_require__.e=chunkId=>Promise.all(Object.keys(__webpack_require__.f).reduce(((promises,key)=>(__webpack_require__.f[key](chunkId,promises),promises)),[])),__webpack_require__.u=chunkId=>(({140:"dialog-overflow-menu-overflow-menu-stories",210:"list-list-stories",384:"grid-css-grid-stories",459:"tabs-tabs-stories",703:"toggletip-toggletip-stories",799:"pagination-pagination-stories",911:"button-button-stories",933:"table-table-stories",972:"patterns-loading-large-loading-stories",1127:"search-search-stories",1928:"accordion-accordion-stories",2218:"inline-loading-inline-loading-stories",2342:"radio-radio-stories",2371:"timepicker-timepicker-stories",2388:"modal-modal-stories",2399:"input-textarea-stories",2489:"toggle-toggle-stories",2494:"loading-loading-stories",2573:"grid-grid-stories",2722:"context-menu-context-menu-stories",2969:"pagination-pagination-nav-stories",3280:"tiles-tiles-stories",3314:"patterns-filtering-multiple-categories-stories",3329:"checkbox-checkbox-stories",3402:"tiles-expandable-tile-stories",3523:"contained-list-contained-list-stories",3610:"patterns-filtering-single-selection-stories",3719:"tiles-clickable-tile-stories",3858:"code-snippet-code-snippet-stories",3867:"tag-tag-stories",4232:"patterns-forms-multi-step-form-stories",4253:"tooltip-tooltip-stories",4277:"patterns-dialogs-modal-with-table-stories",4391:"content-switcher-content-switcher-stories",4731:"icon-icon-stories",4762:"patterns-filtering-multi-selection-stories",5167:"button-icon-button-stories",5368:"number-input-number-stories",5455:"layer-layer-stories",5808:"progress-bar-progress-bar-stories",5980:"select-select-stories",6026:"slider-slider-stories",6115:"theme-theme-stories",6274:"tooltip-definition-tooptip-stories",6310:"file-uploader-file-uploader-stories",6322:"popover-popover-stories",6456:"treeview-treeview-stories",6634:"link-link-stories",6663:"datepicker-datepicker-stories",6842:"breadcrumb-breadcrumb-stories",6943:"input-input-stories",7081:"layout-stack-stories",7235:"index-stories",7291:"structured-list-structured-list-stories",7840:"patterns-loading-progressive-loading-stories",7869:"skeleton-skeleton-stories",7931:"notification-notification-stories",8552:"button-button-set-stories",9211:"dropdown-dropdown-stories",9325:"tiles-tile-group-stories",9552:"timepicker-select-timepicker-select-stories",9619:"progress-indicator-progress-indicator-stories",9660:"ui-shell-ui-shell-stories",9736:"combobox-combobox-stories"}[chunkId]||chunkId)+"."+{140:"e8963bf8",210:"79350958",384:"f5c396e2",454:"3f3499ab",459:"db9e209e",503:"7113f5a6",703:"1da8eaf1",799:"05ab4dd7",901:"fedd2c3b",911:"1b5d80b7",933:"c19aca64",972:"699b1e1b",1119:"f42b55a6",1127:"fac60ec0",1325:"5502bfb0",1470:"39923f01",1895:"0331c090",1928:"48faee56",2218:"7513a48b",2342:"ba1fb969",2371:"7bbf1029",2388:"66aa5c7c",2399:"51dab44c",2489:"7b2e3bc9",2494:"9594d513",2573:"0b935617",2722:"00b09460",2969:"ad4e83e9",3080:"d3996d61",3224:"92030851",3280:"841048dc",3314:"487f9487",3329:"ea872c08",3348:"65c12f97",3360:"e0c015fc",3402:"209d7ef2",3415:"bd5d140d",3523:"2887855a",3610:"e4243e65",3719:"09f1a279",3774:"c37f3d92",3858:"d9a3162d",3867:"7b3a9288",3931:"0e7c514c",4232:"89086fc2",4253:"b15c3310",4277:"a011175b",4391:"2f8cdd41",4578:"93dc52a7",4731:"5b558b26",4762:"cae9c326",5069:"eabf32ea",5103:"20115e64",5167:"fe454546",5368:"b2525c3c",5455:"8fdeec80",5808:"0002dc55",5868:"f5a4be2e",5980:"f28348e5",6026:"f608c3ca",6115:"781e4fdc",6274:"57864d79",6310:"7cbeda49",6322:"e8d6e7c9",6456:"e544ed9d",6634:"23f8a587",6663:"96effc6c",6842:"43daa149",6943:"eeb079d9",7019:"b8944046",7081:"e9f0fa18",7153:"fff25cdf",7235:"70809ec7",7291:"c50bdf73",7399:"f37bb110",7529:"5272f30b",7773:"6c3cf943",7840:"717ad729",7869:"48ffb189",7931:"624c3d04",8341:"a544f9e9",8552:"d561d04b",9115:"b37cce0a",9211:"97161318",9325:"c925923c",9552:"5b57af49",9558:"f6e6487f",9619:"bf194b73",9660:"70551d65",9672:"00e58d20",9736:"6039adf9"}[chunkId]+".iframe.bundle.js"),__webpack_require__.miniCssF=chunkId=>{},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.hmd=module=>((module=Object.create(module)).children||(module.children=[]),Object.defineProperty(module,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+module.id)}}),module),__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop),inProgress={},__webpack_require__.l=(url,done,key,chunkId)=>{if(inProgress[url])inProgress[url].push(done);else{var script,needAttach;if(void 0!==key)for(var scripts=document.getElementsByTagName("script"),i=0;i<scripts.length;i++){var s=scripts[i];if(s.getAttribute("src")==url||s.getAttribute("data-webpack")=="carbon-components-angular:"+key){script=s;break}}script||(needAttach=!0,(script=document.createElement("script")).charset="utf-8",script.timeout=120,__webpack_require__.nc&&script.setAttribute("nonce",__webpack_require__.nc),script.setAttribute("data-webpack","carbon-components-angular:"+key),script.src=url),inProgress[url]=[done];var onScriptComplete=(prev,event)=>{script.onerror=script.onload=null,clearTimeout(timeout);var doneFns=inProgress[url];if(delete inProgress[url],script.parentNode&&script.parentNode.removeChild(script),doneFns&&doneFns.forEach((fn=>fn(event))),prev)return prev(event)},timeout=setTimeout(onScriptComplete.bind(null,void 0,{type:"timeout",target:script}),12e4);script.onerror=onScriptComplete.bind(null,script.onerror),script.onload=onScriptComplete.bind(null,script.onload),needAttach&&document.head.appendChild(script)}},__webpack_require__.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.nmd=module=>(module.paths=[],module.children||(module.children=[]),module),__webpack_require__.p="",(()=>{var installedChunks={1303:0};__webpack_require__.f.j=(chunkId,promises)=>{var installedChunkData=__webpack_require__.o(installedChunks,chunkId)?installedChunks[chunkId]:void 0;if(0!==installedChunkData)if(installedChunkData)promises.push(installedChunkData[2]);else if(1303!=chunkId){var promise=new Promise(((resolve,reject)=>installedChunkData=installedChunks[chunkId]=[resolve,reject]));promises.push(installedChunkData[2]=promise);var url=__webpack_require__.p+__webpack_require__.u(chunkId),error=new Error;__webpack_require__.l(url,(event=>{if(__webpack_require__.o(installedChunks,chunkId)&&(0!==(installedChunkData=installedChunks[chunkId])&&(installedChunks[chunkId]=void 0),installedChunkData)){var errorType=event&&("load"===event.type?"missing":event.type),realSrc=event&&event.target&&event.target.src;error.message="Loading chunk "+chunkId+" failed.\n("+errorType+": "+realSrc+")",error.name="ChunkLoadError",error.type=errorType,error.request=realSrc,installedChunkData[1](error)}}),"chunk-"+chunkId,chunkId)}else installedChunks[chunkId]=0},__webpack_require__.O.j=chunkId=>0===installedChunks[chunkId];var webpackJsonpCallback=(parentChunkLoadingFunction,data)=>{var moduleId,chunkId,[chunkIds,moreModules,runtime]=data,i=0;if(chunkIds.some((id=>0!==installedChunks[id]))){for(moduleId in moreModules)__webpack_require__.o(moreModules,moduleId)&&(__webpack_require__.m[moduleId]=moreModules[moduleId]);if(runtime)var result=runtime(__webpack_require__)}for(parentChunkLoadingFunction&&parentChunkLoadingFunction(data);i<chunkIds.length;i++)chunkId=chunkIds[i],__webpack_require__.o(installedChunks,chunkId)&&installedChunks[chunkId]&&installedChunks[chunkId][0](),installedChunks[chunkId]=0;return __webpack_require__.O(result)},chunkLoadingGlobal=self.webpackChunkcarbon_components_angular=self.webpackChunkcarbon_components_angular||[];chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null,0)),chunkLoadingGlobal.push=webpackJsonpCallback.bind(null,chunkLoadingGlobal.push.bind(chunkLoadingGlobal))})(),__webpack_require__.nc=void 0})();
@@ -1 +1 @@
1
- "use strict";(self.webpackChunkcarbon_components_angular=self.webpackChunkcarbon_components_angular||[]).push([[6026],{"./node_modules/@carbon/utils-position/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{var _a,PLACEMENTS;__webpack_require__.d(__webpack_exports__,{FK:()=>position,ZP:()=>__WEBPACK_DEFAULT_EXPORT__}),function(PLACEMENTS){PLACEMENTS.LEFT="left",PLACEMENTS.RIGHT="right",PLACEMENTS.TOP="top",PLACEMENTS.BOTTOM="bottom"}(PLACEMENTS||(PLACEMENTS={}));var defaultPositions=((_a={})[PLACEMENTS.LEFT]=function(referenceOffset,target,referenceRect){return{top:referenceOffset.top-Math.round(target.offsetHeight/2)+Math.round(referenceRect.height/2),left:Math.round(referenceOffset.left-target.offsetWidth)}},_a[PLACEMENTS.RIGHT]=function(referenceOffset,target,referenceRect){return{top:referenceOffset.top-Math.round(target.offsetHeight/2)+Math.round(referenceRect.height/2),left:Math.round(referenceOffset.left+referenceRect.width)}},_a[PLACEMENTS.TOP]=function(referenceOffset,target,referenceRect){return{top:Math.round(referenceOffset.top-target.offsetHeight),left:referenceOffset.left-Math.round(target.offsetWidth/2)+Math.round(referenceRect.width/2)}},_a[PLACEMENTS.BOTTOM]=function(referenceOffset,target,referenceRect){return{top:Math.round(referenceOffset.top+referenceRect.height),left:referenceOffset.left-Math.round(target.offsetWidth/2)+Math.round(referenceRect.width/2)}},_a),windowRef="undefined"!=typeof window?window:{innerHeight:0,scrollY:0,innerWidth:0,scrollX:0},Position=function(){function Position(positions){void 0===positions&&(positions={}),this.positions=defaultPositions,this.positions=Object.assign({},defaultPositions,positions)}return Position.prototype.getRelativeOffset=function(target){for(var offsets={left:target.offsetLeft,top:target.offsetTop};target.offsetParent&&"static"===getComputedStyle(target.offsetParent).position;)offsets.left+=target.offsetLeft,offsets.top+=target.offsetTop,target=target.offsetParent;return offsets},Position.prototype.getAbsoluteOffset=function(target){for(var currentNode=target,margins={top:0,left:0};currentNode.offsetParent;){var computed=getComputedStyle(currentNode.offsetParent);"static"===computed.position&&computed.marginLeft&&computed.marginTop&&(parseInt(computed.marginTop,10)&&(margins.top+=parseInt(computed.marginTop,10)),parseInt(computed.marginLeft,10)&&(margins.left+=parseInt(computed.marginLeft,10))),currentNode=currentNode.offsetParent}var targetRect=target.getBoundingClientRect(),relativeRect=document.body.getBoundingClientRect();return{top:targetRect.top-relativeRect.top+margins.top,left:targetRect.left-relativeRect.left+margins.left}},Position.prototype.findRelative=function(reference,target,placement){var referenceOffset=this.getRelativeOffset(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findAbsolute=function(reference,target,placement){var referenceOffset=this.getAbsoluteOffset(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findPosition=function(reference,target,placement,offsetFunction){void 0===offsetFunction&&(offsetFunction=this.getAbsoluteOffset.bind(this));var referenceOffset=offsetFunction(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findPositionAt=function(offset,target,placement){return this.calculatePosition(offset,{top:0,left:0,height:0,width:0},target,placement)},Position.prototype.getPlacementBox=function(target,position){var targetBottom=target.offsetHeight+position.top,targetRight=target.offsetWidth+position.left;return{top:position.top,bottom:targetBottom,left:position.left,right:targetRight}},Position.prototype.addOffset=function(position,top,left){return void 0===top&&(top=0),void 0===left&&(left=0),Object.assign({},position,{top:position.top+top,left:position.left+left})},Position.prototype.setElement=function(element,position){element.style.top=position.top+"px",element.style.left=position.left+"px"},Position.prototype.findBestPlacement=function(reference,target,placements,containerFunction,positionFunction){var _this=this;void 0===containerFunction&&(containerFunction=this.defaultContainerFunction.bind(this)),void 0===positionFunction&&(positionFunction=this.findPosition.bind(this));var weightedPlacements=placements.map((function(placement){var pos=positionFunction(reference,target,placement),box=_this.getPlacementBox(target,pos),hiddenHeight=0,hiddenWidth=0,container=containerFunction();box.top<container.top?hiddenHeight=container.top-box.top:box.bottom>container.height&&(hiddenHeight=box.bottom-container.height),box.left<container.left?hiddenWidth=container.left-box.left:box.right>container.width&&(hiddenWidth=box.right-container.width),hiddenHeight&&!hiddenWidth?hiddenWidth=1:hiddenWidth&&!hiddenHeight&&(hiddenHeight=1);var area=target.offsetHeight*target.offsetWidth;return{placement,weight:(area-hiddenHeight*hiddenWidth)/area}}));return weightedPlacements.sort((function(a,b){return b.weight-a.weight})),weightedPlacements[0].placement},Position.prototype.findBestPlacementAt=function(offset,target,placements,containerFunction){var _this=this;void 0===containerFunction&&(containerFunction=this.defaultContainerFunction.bind(this));return this.findBestPlacement(null,target,placements,containerFunction,(function(_,target,placement){return _this.findPositionAt(offset,target,placement)}))},Position.prototype.defaultContainerFunction=function(){return{top:0,left:0,height:windowRef.innerHeight,width:windowRef.innerWidth}},Position.prototype.calculatePosition=function(referenceOffset,referenceRect,target,placement){return this.positions[placement]?this.positions[placement](referenceOffset,target,referenceRect):(console.error("No function found for placement, defaulting to 0,0"),{left:0,top:0})},Position}(),position=new Position;const __WEBPACK_DEFAULT_EXPORT__=Position},"./src/utils/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{NV:()=>AnimationFrameService,d2:()=>ElementService,PO:()=>EventService,As:()=>UtilsModule,d9:()=>clone,_K:()=>closestAttr,O3:()=>getScrollableParents,np:()=>getScrollbarWidth,OQ:()=>hasScrollableParents,TS:()=>object_merge});var tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),Subject=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Subject.js"),from=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/observable/from.js");let AnimationFrameServiceSingleton=class AnimationFrameServiceSingleton{constructor(ngZone){this.ngZone=ngZone,this.frameSource=new Subject.x,this.tick=this.frameSource.asObservable(),this.ngZone.runOutsideAngular((()=>{this.animationFrameId=requestAnimationFrame(this.doTick.bind(this))}))}ngOnDestroy(){cancelAnimationFrame(this.animationFrameId)}doTick(frame){this.frameSource.next(frame),this.ngZone.runOutsideAngular((()=>{requestAnimationFrame(this.doTick.bind(this))}))}};AnimationFrameServiceSingleton.ctorParameters=()=>[{type:core.NgZone}],AnimationFrameServiceSingleton=(0,tslib_es6.gn)([(0,core.Injectable)()],AnimationFrameServiceSingleton);let AnimationFrameService=class AnimationFrameService{constructor(singleton){this.singleton=singleton,this.tick=(0,from.D)(this.singleton.tick)}};AnimationFrameService.ctorParameters=()=>[{type:AnimationFrameServiceSingleton}],AnimationFrameService=(0,tslib_es6.gn)([(0,core.Injectable)()],AnimationFrameService);const object_merge=(target,...objects)=>{for(const object of objects)for(const key in object)object.hasOwnProperty(key)&&(object[key]instanceof Object?(target[key]||(target[key]={}),target[key]=object_merge(target[key],object[key])):target[key]=object[key]);return target};__webpack_require__("./node_modules/@carbon/utils-position/index.js");const isScrollableElement=element=>{const computedStyle=getComputedStyle(element);return"auto"===computedStyle.overflow||"scroll"===computedStyle.overflow||"auto"===computedStyle["overflow-y"]||"scroll"===computedStyle["overflow-y"]||"auto"===computedStyle["overflow-x"]||"scroll"===computedStyle["overflow-x"]},isVisibleInContainer=(element,container)=>{const elementRect=element.getBoundingClientRect(),containerRect=container.getBoundingClientRect();if("BODY"===container.tagName||"HTML"===container.tagName){const isAboveViewport=elementRect.top<0&&elementRect.top+element.clientHeight<0,isLeftOfViewport=elementRect.left<0,isBelowViewport=elementRect.bottom-element.clientHeight>(window.innerHeight||document.documentElement.clientHeight),isRightOfViewport=elementRect.right>(window.innerWidth||document.documentElement.clientWidth);return!(isAboveViewport||isBelowViewport||isLeftOfViewport||isRightOfViewport)}return elementRect.bottom-element.clientHeight<=containerRect.bottom+(container.offsetHeight-container.clientHeight)/2&&elementRect.top>=-element.clientHeight},getScrollableParents=node=>{const elements=[document.body];for(;node.parentElement&&node!==document.body;)isScrollableElement(node)&&elements.push(node),node=node.parentElement;return elements},hasScrollableParents=node=>{for(;node.parentElement&&node!==document.body;){if(isScrollableElement(node))return!0;node=node.parentElement}return!1};function clone(obj){return JSON.parse(JSON.stringify(obj))}function matchesAttr(el,attr,val){const styles=window.getComputedStyle(el);return val.includes(styles[attr])}function closestAttr(s,t,element){let el=element;if(!element)return null;do{if(matchesAttr(el,s,t))return el;el=el.parentElement||el.parentNode}while(null!==el&&1===el.nodeType);return null}var operators_map=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/operators/map.js");let ElementService=class ElementService{constructor(singleton){this.singleton=singleton,this.tick=(0,from.D)(this.singleton.tick)}visibility(target,parentElement=target){const scrollableParents=getScrollableParents(parentElement);return this.tick.pipe((0,operators_map.U)((()=>{for(const parent of scrollableParents)if(!isVisibleInContainer(target,parent))return{visible:!1};return{visible:!0}})))}};ElementService.ctorParameters=()=>[{type:AnimationFrameServiceSingleton}],ElementService=(0,tslib_es6.gn)([(0,core.Injectable)()],ElementService);var Subscription=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Subscription.js"),Observable=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Observable.js"),observable_fromEvent=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js");const getEventObservable=(targetElement,eventType)=>{switch(eventType){case"scroll":case"resize":case"touchstart":case"touchmove":case"touchend":return(0,observable_fromEvent.R)(targetElement,eventType,{passive:!0});default:return(0,observable_fromEvent.R)(targetElement,eventType)}};let DocumentService=class DocumentService{constructor(){this.globalEvents=new Map,this.documentRef=document,this.subscriptions=new Subscription.w0}handleEvent(eventType,callback){this.globalEvents.has(eventType)||(this.documentRef?this.globalEvents.set(eventType,getEventObservable(this.documentRef,eventType)):this.globalEvents.set(eventType,new Observable.y));const observable=this.globalEvents.get(eventType);this.subscriptions.add(observable.subscribe(callback))}handleClick(callback){this.handleEvent("click",callback)}ngOnDestroy(){this.subscriptions.unsubscribe(),this.globalEvents=null}};DocumentService=(0,tslib_es6.gn)([(0,core.Injectable)()],DocumentService);let EventService=class EventService{constructor(documentService){this.documentService=documentService,this.subscriptions=new Subscription.w0,this.targets=new WeakMap}on(targetElement,eventType,callback){this.targets.has(targetElement)||this.targets.set(targetElement,new Map);const eventMap=this.targets.get(targetElement);eventMap.has(eventType)||eventMap.set(eventType,getEventObservable(targetElement,eventType));const subscription=eventMap.get(eventType).subscribe(callback);this.subscriptions.add(subscription)}onDocument(eventType,callback){this.documentService.handleEvent(eventType,callback)}ngOnDestroy(){this.subscriptions.unsubscribe()}};EventService.ctorParameters=()=>[{type:DocumentService}],EventService=(0,tslib_es6.gn)([(0,core.Injectable)()],EventService);const DOCUMENT_SERVICE_PROVIDER={provide:DocumentService,deps:[[new core.Optional,new core.SkipSelf,DocumentService]],useFactory:function DOCUMENT_SERVICE_PROVIDER_FACTORY(parentService){return parentService||new DocumentService}};const ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER={provide:AnimationFrameServiceSingleton,deps:[[new core.Optional,new core.SkipSelf,AnimationFrameServiceSingleton],core.NgZone],useFactory:function ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER_FACTORY(parentService,ngZone){return parentService||new AnimationFrameServiceSingleton(ngZone)}};let UtilsModule=class UtilsModule{};UtilsModule=(0,tslib_es6.gn)([(0,core.NgModule)({providers:[DOCUMENT_SERVICE_PROVIDER,ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER,AnimationFrameServiceSingleton,DocumentService,AnimationFrameService,ElementService,EventService]})],UtilsModule);let _scrollbarWidth=-1;function getScrollbarWidth(){if(_scrollbarWidth>=0)return _scrollbarWidth;const outer=document.createElement("div");outer.style.visibility="hidden",outer.style.width="100px",outer.style.msOverflowStyle="scrollbar",document.body.appendChild(outer);const widthNoScroll=outer.offsetWidth;outer.style.overflow="scroll";const inner=document.createElement("div");inner.style.width="100%",outer.appendChild(inner);const widthWithScroll=inner.offsetWidth;return outer.parentNode.removeChild(outer),_scrollbarWidth=widthNoScroll-widthWithScroll,_scrollbarWidth}},"./node_modules/@storybook/angular/dist/client/argsToTemplate.js":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.argsToTemplate=void 0,exports.argsToTemplate=function argsToTemplate(args,options={}){const includeSet=options.include?new Set(options.include):null,excludeSet=options.exclude?new Set(options.exclude):null;return Object.entries(args).filter((([key])=>void 0!==args[key])).filter((([key])=>includeSet?includeSet.has(key):!excludeSet||!excludeSet.has(key))).map((([key,value])=>"function"==typeof value?`(${key})="${key}($event)"`:`[${key}]="${key}"`)).join(" ")}},"./node_modules/@storybook/angular/dist/client/decorators.js":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.componentWrapperDecorator=exports.applicationConfig=exports.moduleMetadata=void 0;const ComputesTemplateFromComponent_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/angular-beta/ComputesTemplateFromComponent.js"),NgComponentAnalyzer_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/angular-beta/utils/NgComponentAnalyzer.js");exports.moduleMetadata=metadata=>storyFn=>{const story=storyFn(),storyMetadata=story.moduleMetadata||{};return metadata=metadata||{},{...story,moduleMetadata:{declarations:[...metadata.declarations||[],...storyMetadata.declarations||[]],entryComponents:[...metadata.entryComponents||[],...storyMetadata.entryComponents||[]],imports:[...metadata.imports||[],...storyMetadata.imports||[]],schemas:[...metadata.schemas||[],...storyMetadata.schemas||[]],providers:[...metadata.providers||[],...storyMetadata.providers||[]]}}},exports.applicationConfig=function applicationConfig(config){return storyFn=>{const story=storyFn(),storyConfig=story.applicationConfig;return{...story,applicationConfig:storyConfig||config?{...config,...storyConfig,providers:[...config?.providers||[],...storyConfig?.providers||[]]}:void 0}}};exports.componentWrapperDecorator=(element,props)=>(storyFn,storyContext)=>{const story=storyFn(),currentProps="function"==typeof props?props(storyContext):props,template=(0,NgComponentAnalyzer_1.isComponent)(element)?(0,ComputesTemplateFromComponent_1.computesTemplateFromComponent)(element,currentProps??{},story.template):element(story.template);return{...story,template,...currentProps||story.props?{props:{...currentProps,...story.props}}:{}}}},"./node_modules/@storybook/angular/dist/client/index.js":function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.argsToTemplate=exports.applicationConfig=exports.componentWrapperDecorator=exports.moduleMetadata=void 0,__webpack_require__("./node_modules/@storybook/angular/dist/client/globals.js"),__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-api.js"),exports),__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-types.js"),exports);var decorators_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/decorators.js");Object.defineProperty(exports,"moduleMetadata",{enumerable:!0,get:function(){return decorators_1.moduleMetadata}}),Object.defineProperty(exports,"componentWrapperDecorator",{enumerable:!0,get:function(){return decorators_1.componentWrapperDecorator}}),Object.defineProperty(exports,"applicationConfig",{enumerable:!0,get:function(){return decorators_1.applicationConfig}});var argsToTemplate_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/argsToTemplate.js");Object.defineProperty(exports,"argsToTemplate",{enumerable:!0,get:function(){return argsToTemplate_1.argsToTemplate}})},"./node_modules/@storybook/angular/dist/client/public-api.js":function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)},__importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.raw=exports.forceReRender=exports.configure=exports.storiesOf=void 0;const preview_api_1=__webpack_require__("@storybook/preview-api"),render_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/render.js"),decorateStory_1=__importDefault(__webpack_require__("./node_modules/@storybook/angular/dist/client/decorateStory.js"));__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-types.js"),exports);const api=(0,preview_api_1.start)(render_1.renderToCanvas,{decorateStory:decorateStory_1.default,render:render_1.render});exports.storiesOf=(kind,m)=>api.clientApi.storiesOf(kind,m).addParameters({renderer:"angular"});exports.configure=(...args)=>api.configure("angular",...args),exports.forceReRender=api.forceReRender,exports.raw=api.clientApi.raw},"./node_modules/@storybook/angular/dist/client/public-types.js":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0})},"./node_modules/@storybook/angular/dist/index.mjs":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{var _client_index__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/@storybook/angular/dist/client/index.js");__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"componentWrapperDecorator")&&__webpack_require__.d(__webpack_exports__,{componentWrapperDecorator:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.componentWrapperDecorator}}),__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"moduleMetadata")&&__webpack_require__.d(__webpack_exports__,{moduleMetadata:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.moduleMetadata}})},"./src/slider/slider.stories.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Basic:()=>Basic,Range:()=>Range,__namedExportsOrder:()=>__namedExportsOrder,default:()=>slider_stories});var dist=__webpack_require__("./node_modules/@storybook/angular/dist/index.mjs"),tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),fesm2020_forms=__webpack_require__("./node_modules/@angular/forms/fesm2020/forms.mjs"),utils=__webpack_require__("./src/utils/index.ts");let Slider=class Slider{constructor(elementRef,eventService,changeDetection){this.elementRef=elementRef,this.eventService=eventService,this.changeDetection=changeDetection,this.step=1,this.id="slider-"+Slider.count++,this.shiftMultiplier=4,this.skeleton=!1,this.disableArrowKeys=!1,this.valueChange=new core.EventEmitter,this.hostClass=!0,this.labelId=`${this.id}-label`,this.bottomRangeId=`${this.id}-bottom-range`,this.topRangeId=`${this.id}-top-range`,this.fractionComplete=0,this.isMouseDown=!1,this._min=0,this._max=100,this._value=[this.min],this._previousValue=[this.min],this._disabled=!1,this._focusedThumbIndex=0,this.propagateChange=_=>{},this.onTouched=()=>{}}set min(v){v&&(this._min=v,this.value=this.value)}get min(){return this._min}set max(v){v&&(this._max=v,this.value=this.value)}get max(){return this._max}set value(v){v||(v=[this.min]),"number"!=typeof v&&"string"!=typeof v||(v=[Number(v)]),v[0]<this.min&&(v[0]=this.min),v[0]>this.max&&(v[0]=this.max),this.isRange()&&(this._previousValue[0]!==v[0]&&(v[0]>v[1]-this.step?v[0]=v[1]-this.step:v[0]>this.max?v[0]=this.max:v[0]<this.min&&(v[0]=this.min)),this._previousValue[1]!==v[1]&&(v[1]>this.max?v[1]=this.max:v[1]<this._value[0]+this.step?v[1]=this._value[0]+this.step:v[1]<this.min&&(v[1]=this.min))),this._previousValue=[...this._value],this._value=[...v],this.isRange()&&this.filledTrack?this.updateTrackRangeWidth():this.filledTrack&&(this.filledTrack.nativeElement.style.transform=`translate(0%, -50%) ${this.scaleX(this.getFractionComplete(v[0]))}`),this.inputs&&this.inputs.length&&this.inputs.forEach(((input,index)=>{input.value=this._value[index].toString()}));const valueToEmit=this.isRange()?v:v[0];this.propagateChange(valueToEmit),this.valueChange.emit(valueToEmit)}get value(){return this.isRange()?this._value:this._value[0]}set disabled(v){this._disabled=v;const inputs=this.getInputs();inputs&&inputs.length>0&&inputs.forEach((input=>input.disabled=v))}get disabled(){return this._disabled}ngAfterViewInit(){this.eventService.onDocument("mousemove",this.onMouseMove.bind(this)),this.eventService.onDocument("mouseup",this.onMouseUp.bind(this)),this.changeDetection.detectChanges(),this.inputs=this.getInputs(),this.inputs&&this.inputs.length>0&&this.inputs.forEach(((input,index)=>{input.type="number",input.classList.add("cds--slider-text-input"),input.classList.add("cds--text-input"),input.setAttribute("aria-labelledby",`${this.bottomRangeId} ${this.topRangeId}`),input.value=index<this._value.length?this._value[index].toString():this.max.toString(),this.eventService.on(input,"change",(event=>this.onChange(event,index))),0===index&&this.eventService.on(input,"focus",this.onFocus.bind(this))}))}trackThumbsBy(index,item){return index}registerOnChange(fn){this.propagateChange=fn}registerOnTouched(fn){this.onTouched=fn}writeValue(v){this.value=v}getFractionComplete(value){if(!this.track)return 0;const trackWidth=this.track.nativeElement.getBoundingClientRect().width;return this.convertToPx(value)/trackWidth}scaleX(complete){return`scaleX(${complete})`}convertToValue(pxAmount){const range=this.max-this.min,unrounded=pxAmount/this.track.nativeElement.getBoundingClientRect().width;return Math.round(range*unrounded/this.step)*this.step+this.min}convertToPx(value){if(!this.track)return 0;const trackWidth=this.track.nativeElement.getBoundingClientRect().width;return value>=this.max?trackWidth:value<=this.min?0:Math.round(trackWidth*((value-this.min)/(this.max-this.min)))}incrementValue(multiplier=1,index=0){this._value[index]=this._value[index]+this.step*multiplier,this.value=this.value}decrementValue(multiplier=1,index=0){this._value[index]=this._value[index]-this.step*multiplier,this.value=this.value}isRange(){return this._value.length>1}updateTrackRangeWidth(){const fraction=this.getFractionComplete(this._value[0]),fraction2=this.getFractionComplete(this._value[1]);this.filledTrack.nativeElement.style.transform=`translate(${100*fraction}%, -50%) ${this.scaleX(fraction2-fraction)}`}onChange(event,index){this._value[index]=Number(event.target.value),this.value=this.value}onClick(event){if(this.disabled)return;const trackLeft=this.track.nativeElement.getBoundingClientRect().left;this._value[0]=this.convertToValue(event.clientX-trackLeft),this.value=this.value}onFocus({target}){target.select()}onMouseMove(event){if(this.disabled||!this.isMouseDown)return;const track=this.track.nativeElement.getBoundingClientRect();let value;event.clientX-track.left<=track.width&&event.clientX-track.left>=0&&(value=this.convertToValue(event.clientX-track.left)),event.clientX-track.left>track.width&&(value=this.max),event.clientX-track.left<0&&(value=this.min),void 0!==value&&(this._value[this._focusedThumbIndex]=value,this.value=this.value)}onMouseDown(event,index=0){event.preventDefault(),this.disabled||(this._focusedThumbIndex=index,this.thumbs.toArray()[index].nativeElement.focus(),this.isMouseDown=!0)}onMouseUp(){this.isMouseDown=!1}onKeyDown(event,index=0){if(this.disableArrowKeys)return;const multiplier=event.shiftKey?this.shiftMultiplier:1;"ArrowLeft"===event.key||"ArrowDown"===event.key?(this.decrementValue(multiplier,index),this.thumbs.toArray()[index].nativeElement.focus(),event.preventDefault()):"ArrowRight"!==event.key&&"ArrowUp"!==event.key||(this.incrementValue(multiplier,index),this.thumbs.toArray()[index].nativeElement.focus(),event.preventDefault())}isTemplate(value){return value instanceof core.TemplateRef}getInputs(){return this.elementRef.nativeElement.querySelectorAll("input:not([type=range])")}};Slider.count=0,Slider.ctorParameters=()=>[{type:core.ElementRef},{type:utils.PO},{type:core.ChangeDetectorRef}],Slider.propDecorators={min:[{type:core.Input}],max:[{type:core.Input}],step:[{type:core.Input}],value:[{type:core.Input}],id:[{type:core.Input}],shiftMultiplier:[{type:core.Input}],skeleton:[{type:core.Input}],label:[{type:core.Input}],disableArrowKeys:[{type:core.Input}],disabled:[{type:core.Input}],valueChange:[{type:core.Output}],hostClass:[{type:core.HostBinding,args:["class.cds--form-item"]}],thumbs:[{type:core.ViewChildren,args:["thumbs"]}],track:[{type:core.ViewChild,args:["track"]}],filledTrack:[{type:core.ViewChild,args:["filledTrack"]}],range:[{type:core.ViewChild,args:["range"]}]},Slider=(0,tslib_es6.gn)([(0,core.Component)({selector:"cds-slider, ibm-slider",template:'\n\t\t<ng-container *ngIf="!skeleton; else skeletonTemplate">\n\t\t\t<label\n\t\t\t\t*ngIf="label"\n\t\t\t\t[for]="id"\n\t\t\t\t[id]="labelId"\n\t\t\t\tclass="cds--label"\n\t\t\t\t[ngClass]="{\'cds--label--disabled\': disabled}">\n\t\t\t\t<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>\n\t\t\t\t<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>\n\t\t\t</label>\n\t\t\t<div class="cds--slider-container">\n\t\t\t\t<label [id]="bottomRangeId" class="cds--slider__range-label">\n\t\t\t\t\t<ng-content select="[minLabel]"></ng-content>\n\t\t\t\t</label>\n\t\t\t\t<div\n\t\t\t\t\tclass="cds--slider"\n\t\t\t\t\t[ngClass]="{\'cds--slider--disabled\': disabled}">\n\t\t\t\t\t<ng-container *ngIf="!isRange()">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t#thumbs\n\t\t\t\t\t\t\trole="slider"\n\t\t\t\t\t\t\t[id]="id"\n\t\t\t\t\t\t\t[attr.aria-labelledby]="labelId"\n\t\t\t\t\t\t\tclass="cds--slider__thumb"\n\t\t\t\t\t\t\t[ngStyle]="{left: getFractionComplete(value) * 100 + \'%\'}"\n\t\t\t\t\t\t\ttabindex="0"\n\t\t\t\t\t\t\t(mousedown)="onMouseDown($event)"\n\t\t\t\t\t\t\t(keydown)="onKeyDown($event)">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<ng-container *ngIf="isRange()">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t#thumbs\n\t\t\t\t\t\t\t*ngFor="let thumb of value; let i = index; trackBy: trackThumbsBy"\n\t\t\t\t\t\t\trole="slider"\n\t\t\t\t\t\t\t[id]="id + (i > 0 ? \'-\' + i : \'\')"\n\t\t\t\t\t\t\t[attr.aria-labelledby]="labelId"\n\t\t\t\t\t\t\tclass="cds--slider__thumb"\n\t\t\t\t\t\t\t[ngStyle]="{left: getFractionComplete(thumb) * 100 + \'%\'}"\n\t\t\t\t\t\t\ttabindex="0"\n\t\t\t\t\t\t\t(mousedown)="onMouseDown($event, i)"\n\t\t\t\t\t\t\t(keydown)="onKeyDown($event, i)">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<div\n\t\t\t\t\t\t#track\n\t\t\t\t\t\tclass="cds--slider__track"\n\t\t\t\t\t\t(click)="onClick($event)">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\t#filledTrack\n\t\t\t\t\t\tclass="cds--slider__filled-track">\n\t\t\t\t\t</div>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#range\n\t\t\t\t\t\taria-label="slider"\n\t\t\t\t\t\tclass="cds--slider__input"\n\t\t\t\t\t\ttype="range"\n\t\t\t\t\t\t[step]="step"\n\t\t\t\t\t\t[min]="min"\n\t\t\t\t\t\t[max]="max"\n\t\t\t\t\t\t[value]="value.toString()">\n\t\t\t\t</div>\n\t\t\t\t<label [id]="topRangeId" class="cds--slider__range-label">\n\t\t\t\t\t<ng-content select="[maxLabel]"></ng-content>\n\t\t\t\t</label>\n\t\t\t\t<ng-content select="input"></ng-content>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<ng-template #skeletonTemplate>\n\t\t\t<label *ngIf="label" class="cds--label cds--skeleton"></label>\n\t\t\t<div class="cds--slider-container cds--skeleton">\n\t\t\t\t<span class="cds--slider__range-label"></span>\n\t\t\t\t<div class="cds--slider">\n\t\t\t\t\t<div class="cds--slider__thumb"></div>\n\t\t\t\t\t<div class="cds--slider__track"></div>\n\t\t\t\t\t<div class="cds--slider__filled-track"></div>\n\t\t\t\t</div>\n\t\t\t\t<span class="cds--slider__range-label"></span>\n\t\t\t</div>\n\t\t</ng-template>\n\t',providers:[{provide:fesm2020_forms.JU,useExisting:Slider,multi:!0}]})],Slider);var common=__webpack_require__("./node_modules/@angular/common/fesm2020/common.mjs");let SliderModule=class SliderModule{};SliderModule=(0,tslib_es6.gn)([(0,core.NgModule)({declarations:[Slider],exports:[Slider],imports:[common.CommonModule,utils.As]})],SliderModule);const slider_stories={title:"Components/Slider",decorators:[(0,dist.moduleMetadata)({imports:[SliderModule]})],component:Slider},Basic=(args=>({props:args,template:'\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [skeleton]="skeleton"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n '})).bind({});Basic.args={min:0,max:100,step:1,value:0,minLabel:"0",maxLabel:"100",disabled:!1,shiftMultiplier:4,theme:"dark"},Basic.argTypes={valueChange:{control:"Value changed!"},theme:{options:["light","dark"],control:"radio"}};const Range=(args=>({props:args,template:'\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n '})).bind({});Range.args={...Basic.args,value:[20,80]},Range.argTypes={...Basic.argTypes},Basic.parameters={...Basic.parameters,docs:{...Basic.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [skeleton]="skeleton"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n `\n})',...Basic.parameters?.docs?.source}}},Range.parameters={...Range.parameters,docs:{...Range.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n `\n})',...Range.parameters?.docs?.source}}};const __namedExportsOrder=["Basic","Range"]}}]);
1
+ "use strict";(self.webpackChunkcarbon_components_angular=self.webpackChunkcarbon_components_angular||[]).push([[6026],{"./node_modules/@carbon/utils-position/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{var _a,PLACEMENTS;__webpack_require__.d(__webpack_exports__,{FK:()=>position,ZP:()=>__WEBPACK_DEFAULT_EXPORT__}),function(PLACEMENTS){PLACEMENTS.LEFT="left",PLACEMENTS.RIGHT="right",PLACEMENTS.TOP="top",PLACEMENTS.BOTTOM="bottom"}(PLACEMENTS||(PLACEMENTS={}));var defaultPositions=((_a={})[PLACEMENTS.LEFT]=function(referenceOffset,target,referenceRect){return{top:referenceOffset.top-Math.round(target.offsetHeight/2)+Math.round(referenceRect.height/2),left:Math.round(referenceOffset.left-target.offsetWidth)}},_a[PLACEMENTS.RIGHT]=function(referenceOffset,target,referenceRect){return{top:referenceOffset.top-Math.round(target.offsetHeight/2)+Math.round(referenceRect.height/2),left:Math.round(referenceOffset.left+referenceRect.width)}},_a[PLACEMENTS.TOP]=function(referenceOffset,target,referenceRect){return{top:Math.round(referenceOffset.top-target.offsetHeight),left:referenceOffset.left-Math.round(target.offsetWidth/2)+Math.round(referenceRect.width/2)}},_a[PLACEMENTS.BOTTOM]=function(referenceOffset,target,referenceRect){return{top:Math.round(referenceOffset.top+referenceRect.height),left:referenceOffset.left-Math.round(target.offsetWidth/2)+Math.round(referenceRect.width/2)}},_a),windowRef="undefined"!=typeof window?window:{innerHeight:0,scrollY:0,innerWidth:0,scrollX:0},Position=function(){function Position(positions){void 0===positions&&(positions={}),this.positions=defaultPositions,this.positions=Object.assign({},defaultPositions,positions)}return Position.prototype.getRelativeOffset=function(target){for(var offsets={left:target.offsetLeft,top:target.offsetTop};target.offsetParent&&"static"===getComputedStyle(target.offsetParent).position;)offsets.left+=target.offsetLeft,offsets.top+=target.offsetTop,target=target.offsetParent;return offsets},Position.prototype.getAbsoluteOffset=function(target){for(var currentNode=target,margins={top:0,left:0};currentNode.offsetParent;){var computed=getComputedStyle(currentNode.offsetParent);"static"===computed.position&&computed.marginLeft&&computed.marginTop&&(parseInt(computed.marginTop,10)&&(margins.top+=parseInt(computed.marginTop,10)),parseInt(computed.marginLeft,10)&&(margins.left+=parseInt(computed.marginLeft,10))),currentNode=currentNode.offsetParent}var targetRect=target.getBoundingClientRect(),relativeRect=document.body.getBoundingClientRect();return{top:targetRect.top-relativeRect.top+margins.top,left:targetRect.left-relativeRect.left+margins.left}},Position.prototype.findRelative=function(reference,target,placement){var referenceOffset=this.getRelativeOffset(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findAbsolute=function(reference,target,placement){var referenceOffset=this.getAbsoluteOffset(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findPosition=function(reference,target,placement,offsetFunction){void 0===offsetFunction&&(offsetFunction=this.getAbsoluteOffset.bind(this));var referenceOffset=offsetFunction(reference),referenceRect=reference.getBoundingClientRect();return this.calculatePosition(referenceOffset,referenceRect,target,placement)},Position.prototype.findPositionAt=function(offset,target,placement){return this.calculatePosition(offset,{top:0,left:0,height:0,width:0},target,placement)},Position.prototype.getPlacementBox=function(target,position){var targetBottom=target.offsetHeight+position.top,targetRight=target.offsetWidth+position.left;return{top:position.top,bottom:targetBottom,left:position.left,right:targetRight}},Position.prototype.addOffset=function(position,top,left){return void 0===top&&(top=0),void 0===left&&(left=0),Object.assign({},position,{top:position.top+top,left:position.left+left})},Position.prototype.setElement=function(element,position){element.style.top=position.top+"px",element.style.left=position.left+"px"},Position.prototype.findBestPlacement=function(reference,target,placements,containerFunction,positionFunction){var _this=this;void 0===containerFunction&&(containerFunction=this.defaultContainerFunction.bind(this)),void 0===positionFunction&&(positionFunction=this.findPosition.bind(this));var weightedPlacements=placements.map((function(placement){var pos=positionFunction(reference,target,placement),box=_this.getPlacementBox(target,pos),hiddenHeight=0,hiddenWidth=0,container=containerFunction();box.top<container.top?hiddenHeight=container.top-box.top:box.bottom>container.height&&(hiddenHeight=box.bottom-container.height),box.left<container.left?hiddenWidth=container.left-box.left:box.right>container.width&&(hiddenWidth=box.right-container.width),hiddenHeight&&!hiddenWidth?hiddenWidth=1:hiddenWidth&&!hiddenHeight&&(hiddenHeight=1);var area=target.offsetHeight*target.offsetWidth;return{placement,weight:(area-hiddenHeight*hiddenWidth)/area}}));return weightedPlacements.sort((function(a,b){return b.weight-a.weight})),weightedPlacements[0].placement},Position.prototype.findBestPlacementAt=function(offset,target,placements,containerFunction){var _this=this;void 0===containerFunction&&(containerFunction=this.defaultContainerFunction.bind(this));return this.findBestPlacement(null,target,placements,containerFunction,(function(_,target,placement){return _this.findPositionAt(offset,target,placement)}))},Position.prototype.defaultContainerFunction=function(){return{top:0,left:0,height:windowRef.innerHeight,width:windowRef.innerWidth}},Position.prototype.calculatePosition=function(referenceOffset,referenceRect,target,placement){return this.positions[placement]?this.positions[placement](referenceOffset,target,referenceRect):(console.error("No function found for placement, defaulting to 0,0"),{left:0,top:0})},Position}(),position=new Position;const __WEBPACK_DEFAULT_EXPORT__=Position},"./src/utils/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{NV:()=>AnimationFrameService,d2:()=>ElementService,PO:()=>EventService,As:()=>UtilsModule,d9:()=>clone,_K:()=>closestAttr,O3:()=>getScrollableParents,np:()=>getScrollbarWidth,OQ:()=>hasScrollableParents,TS:()=>object_merge});var tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),Subject=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Subject.js"),from=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/observable/from.js");let AnimationFrameServiceSingleton=class AnimationFrameServiceSingleton{constructor(ngZone){this.ngZone=ngZone,this.frameSource=new Subject.x,this.tick=this.frameSource.asObservable(),this.ngZone.runOutsideAngular((()=>{this.animationFrameId=requestAnimationFrame(this.doTick.bind(this))}))}ngOnDestroy(){cancelAnimationFrame(this.animationFrameId)}doTick(frame){this.frameSource.next(frame),this.ngZone.runOutsideAngular((()=>{requestAnimationFrame(this.doTick.bind(this))}))}};AnimationFrameServiceSingleton.ctorParameters=()=>[{type:core.NgZone}],AnimationFrameServiceSingleton=(0,tslib_es6.gn)([(0,core.Injectable)()],AnimationFrameServiceSingleton);let AnimationFrameService=class AnimationFrameService{constructor(singleton){this.singleton=singleton,this.tick=(0,from.D)(this.singleton.tick)}};AnimationFrameService.ctorParameters=()=>[{type:AnimationFrameServiceSingleton}],AnimationFrameService=(0,tslib_es6.gn)([(0,core.Injectable)()],AnimationFrameService);const object_merge=(target,...objects)=>{for(const object of objects)for(const key in object)object.hasOwnProperty(key)&&(object[key]instanceof Object?(target[key]||(target[key]={}),target[key]=object_merge(target[key],object[key])):target[key]=object[key]);return target};__webpack_require__("./node_modules/@carbon/utils-position/index.js");const isScrollableElement=element=>{const computedStyle=getComputedStyle(element);return"auto"===computedStyle.overflow||"scroll"===computedStyle.overflow||"auto"===computedStyle["overflow-y"]||"scroll"===computedStyle["overflow-y"]||"auto"===computedStyle["overflow-x"]||"scroll"===computedStyle["overflow-x"]},isVisibleInContainer=(element,container)=>{const elementRect=element.getBoundingClientRect(),containerRect=container.getBoundingClientRect();if("BODY"===container.tagName||"HTML"===container.tagName){const isAboveViewport=elementRect.top<0&&elementRect.top+element.clientHeight<0,isLeftOfViewport=elementRect.left<0,isBelowViewport=elementRect.bottom-element.clientHeight>(window.innerHeight||document.documentElement.clientHeight),isRightOfViewport=elementRect.right>(window.innerWidth||document.documentElement.clientWidth);return!(isAboveViewport||isBelowViewport||isLeftOfViewport||isRightOfViewport)}return elementRect.bottom-element.clientHeight<=containerRect.bottom+(container.offsetHeight-container.clientHeight)/2&&elementRect.top>=-element.clientHeight},getScrollableParents=node=>{const elements=[document.body];for(;node.parentElement&&node!==document.body;)isScrollableElement(node)&&elements.push(node),node=node.parentElement;return elements},hasScrollableParents=node=>{for(;node.parentElement&&node!==document.body;){if(isScrollableElement(node))return!0;node=node.parentElement}return!1};function clone(obj){return JSON.parse(JSON.stringify(obj))}function matchesAttr(el,attr,val){const styles=window.getComputedStyle(el);return val.includes(styles[attr])}function closestAttr(s,t,element){let el=element;if(!element)return null;do{if(matchesAttr(el,s,t))return el;el=el.parentElement||el.parentNode}while(null!==el&&1===el.nodeType);return null}var operators_map=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/operators/map.js");let ElementService=class ElementService{constructor(singleton){this.singleton=singleton,this.tick=(0,from.D)(this.singleton.tick)}visibility(target,parentElement=target){const scrollableParents=getScrollableParents(parentElement);return this.tick.pipe((0,operators_map.U)((()=>{for(const parent of scrollableParents)if(!isVisibleInContainer(target,parent))return{visible:!1};return{visible:!0}})))}};ElementService.ctorParameters=()=>[{type:AnimationFrameServiceSingleton}],ElementService=(0,tslib_es6.gn)([(0,core.Injectable)()],ElementService);var Subscription=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Subscription.js"),Observable=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/Observable.js"),observable_fromEvent=__webpack_require__("./node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js");const getEventObservable=(targetElement,eventType)=>{switch(eventType){case"scroll":case"resize":case"touchstart":case"touchmove":case"touchend":return(0,observable_fromEvent.R)(targetElement,eventType,{passive:!0});default:return(0,observable_fromEvent.R)(targetElement,eventType)}};let DocumentService=class DocumentService{constructor(){this.globalEvents=new Map,this.documentRef=document,this.subscriptions=new Subscription.w0}handleEvent(eventType,callback){this.globalEvents.has(eventType)||(this.documentRef?this.globalEvents.set(eventType,getEventObservable(this.documentRef,eventType)):this.globalEvents.set(eventType,new Observable.y));const observable=this.globalEvents.get(eventType);this.subscriptions.add(observable.subscribe(callback))}handleClick(callback){this.handleEvent("click",callback)}ngOnDestroy(){this.subscriptions.unsubscribe(),this.globalEvents=null}};DocumentService=(0,tslib_es6.gn)([(0,core.Injectable)()],DocumentService);let EventService=class EventService{constructor(documentService){this.documentService=documentService,this.subscriptions=new Subscription.w0,this.targets=new WeakMap}on(targetElement,eventType,callback){this.targets.has(targetElement)||this.targets.set(targetElement,new Map);const eventMap=this.targets.get(targetElement);eventMap.has(eventType)||eventMap.set(eventType,getEventObservable(targetElement,eventType));const subscription=eventMap.get(eventType).subscribe(callback);this.subscriptions.add(subscription)}onDocument(eventType,callback){this.documentService.handleEvent(eventType,callback)}ngOnDestroy(){this.subscriptions.unsubscribe()}};EventService.ctorParameters=()=>[{type:DocumentService}],EventService=(0,tslib_es6.gn)([(0,core.Injectable)()],EventService);const DOCUMENT_SERVICE_PROVIDER={provide:DocumentService,deps:[[new core.Optional,new core.SkipSelf,DocumentService]],useFactory:function DOCUMENT_SERVICE_PROVIDER_FACTORY(parentService){return parentService||new DocumentService}};const ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER={provide:AnimationFrameServiceSingleton,deps:[[new core.Optional,new core.SkipSelf,AnimationFrameServiceSingleton],core.NgZone],useFactory:function ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER_FACTORY(parentService,ngZone){return parentService||new AnimationFrameServiceSingleton(ngZone)}};let UtilsModule=class UtilsModule{};UtilsModule=(0,tslib_es6.gn)([(0,core.NgModule)({providers:[DOCUMENT_SERVICE_PROVIDER,ANIMATION_FRAME_SERVICE_SINGLETON_PROVIDER,AnimationFrameServiceSingleton,DocumentService,AnimationFrameService,ElementService,EventService]})],UtilsModule);let _scrollbarWidth=-1;function getScrollbarWidth(){if(_scrollbarWidth>=0)return _scrollbarWidth;const outer=document.createElement("div");outer.style.visibility="hidden",outer.style.width="100px",outer.style.msOverflowStyle="scrollbar",document.body.appendChild(outer);const widthNoScroll=outer.offsetWidth;outer.style.overflow="scroll";const inner=document.createElement("div");inner.style.width="100%",outer.appendChild(inner);const widthWithScroll=inner.offsetWidth;return outer.parentNode.removeChild(outer),_scrollbarWidth=widthNoScroll-widthWithScroll,_scrollbarWidth}},"./node_modules/@storybook/angular/dist/client/argsToTemplate.js":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.argsToTemplate=void 0,exports.argsToTemplate=function argsToTemplate(args,options={}){const includeSet=options.include?new Set(options.include):null,excludeSet=options.exclude?new Set(options.exclude):null;return Object.entries(args).filter((([key])=>void 0!==args[key])).filter((([key])=>includeSet?includeSet.has(key):!excludeSet||!excludeSet.has(key))).map((([key,value])=>"function"==typeof value?`(${key})="${key}($event)"`:`[${key}]="${key}"`)).join(" ")}},"./node_modules/@storybook/angular/dist/client/decorators.js":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.componentWrapperDecorator=exports.applicationConfig=exports.moduleMetadata=void 0;const ComputesTemplateFromComponent_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/angular-beta/ComputesTemplateFromComponent.js"),NgComponentAnalyzer_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/angular-beta/utils/NgComponentAnalyzer.js");exports.moduleMetadata=metadata=>storyFn=>{const story=storyFn(),storyMetadata=story.moduleMetadata||{};return metadata=metadata||{},{...story,moduleMetadata:{declarations:[...metadata.declarations||[],...storyMetadata.declarations||[]],entryComponents:[...metadata.entryComponents||[],...storyMetadata.entryComponents||[]],imports:[...metadata.imports||[],...storyMetadata.imports||[]],schemas:[...metadata.schemas||[],...storyMetadata.schemas||[]],providers:[...metadata.providers||[],...storyMetadata.providers||[]]}}},exports.applicationConfig=function applicationConfig(config){return storyFn=>{const story=storyFn(),storyConfig=story.applicationConfig;return{...story,applicationConfig:storyConfig||config?{...config,...storyConfig,providers:[...config?.providers||[],...storyConfig?.providers||[]]}:void 0}}};exports.componentWrapperDecorator=(element,props)=>(storyFn,storyContext)=>{const story=storyFn(),currentProps="function"==typeof props?props(storyContext):props,template=(0,NgComponentAnalyzer_1.isComponent)(element)?(0,ComputesTemplateFromComponent_1.computesTemplateFromComponent)(element,currentProps??{},story.template):element(story.template);return{...story,template,...currentProps||story.props?{props:{...currentProps,...story.props}}:{}}}},"./node_modules/@storybook/angular/dist/client/index.js":function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.argsToTemplate=exports.applicationConfig=exports.componentWrapperDecorator=exports.moduleMetadata=void 0,__webpack_require__("./node_modules/@storybook/angular/dist/client/globals.js"),__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-api.js"),exports),__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-types.js"),exports);var decorators_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/decorators.js");Object.defineProperty(exports,"moduleMetadata",{enumerable:!0,get:function(){return decorators_1.moduleMetadata}}),Object.defineProperty(exports,"componentWrapperDecorator",{enumerable:!0,get:function(){return decorators_1.componentWrapperDecorator}}),Object.defineProperty(exports,"applicationConfig",{enumerable:!0,get:function(){return decorators_1.applicationConfig}});var argsToTemplate_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/argsToTemplate.js");Object.defineProperty(exports,"argsToTemplate",{enumerable:!0,get:function(){return argsToTemplate_1.argsToTemplate}})},"./node_modules/@storybook/angular/dist/client/public-api.js":function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)},__importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.raw=exports.forceReRender=exports.configure=exports.storiesOf=void 0;const preview_api_1=__webpack_require__("@storybook/preview-api"),render_1=__webpack_require__("./node_modules/@storybook/angular/dist/client/render.js"),decorateStory_1=__importDefault(__webpack_require__("./node_modules/@storybook/angular/dist/client/decorateStory.js"));__exportStar(__webpack_require__("./node_modules/@storybook/angular/dist/client/public-types.js"),exports);const api=(0,preview_api_1.start)(render_1.renderToCanvas,{decorateStory:decorateStory_1.default,render:render_1.render});exports.storiesOf=(kind,m)=>api.clientApi.storiesOf(kind,m).addParameters({renderer:"angular"});exports.configure=(...args)=>api.configure("angular",...args),exports.forceReRender=api.forceReRender,exports.raw=api.clientApi.raw},"./node_modules/@storybook/angular/dist/client/public-types.js":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0})},"./node_modules/@storybook/angular/dist/index.mjs":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{var _client_index__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/@storybook/angular/dist/client/index.js");__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"componentWrapperDecorator")&&__webpack_require__.d(__webpack_exports__,{componentWrapperDecorator:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.componentWrapperDecorator}}),__webpack_require__.o(_client_index__WEBPACK_IMPORTED_MODULE_0__,"moduleMetadata")&&__webpack_require__.d(__webpack_exports__,{moduleMetadata:function(){return _client_index__WEBPACK_IMPORTED_MODULE_0__.moduleMetadata}})},"./src/slider/slider.stories.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Basic:()=>Basic,Range:()=>Range,__namedExportsOrder:()=>__namedExportsOrder,default:()=>slider_stories});var dist=__webpack_require__("./node_modules/@storybook/angular/dist/index.mjs"),tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),fesm2020_forms=__webpack_require__("./node_modules/@angular/forms/fesm2020/forms.mjs"),utils=__webpack_require__("./src/utils/index.ts");let Slider=class Slider{constructor(elementRef,eventService,changeDetection){this.elementRef=elementRef,this.eventService=eventService,this.changeDetection=changeDetection,this.step=1,this.id="slider-"+Slider.count++,this.shiftMultiplier=4,this.skeleton=!1,this.disableArrowKeys=!1,this.valueChange=new core.EventEmitter,this.hostClass=!0,this.labelId=`${this.id}-label`,this.bottomRangeId=`${this.id}-bottom-range`,this.topRangeId=`${this.id}-top-range`,this.fractionComplete=0,this.isMouseDown=!1,this._min=0,this._max=100,this._value=[this.min],this._previousValue=[this.min],this._disabled=!1,this._focusedThumbIndex=0,this.propagateChange=_=>{},this.onTouched=()=>{}}set min(v){v&&(this._min=v,this.value=this.value)}get min(){return this._min}set max(v){v&&(this._max=v,this.value=this.value)}get max(){return this._max}set value(v){v||(v=[this.min]),"number"!=typeof v&&"string"!=typeof v||(v=[Number(v)]),v[0]<this.min&&(v[0]=this.min),v[0]>this.max&&(v[0]=this.max),this.isRange()&&(this._previousValue[0]!==v[0]&&(v[0]>v[1]-this.step?v[0]=v[1]-this.step:v[0]>this.max?v[0]=this.max:v[0]<this.min&&(v[0]=this.min)),this._previousValue[1]!==v[1]&&(v[1]>this.max?v[1]=this.max:v[1]<this._value[0]+this.step?v[1]=this._value[0]+this.step:v[1]<this.min&&(v[1]=this.min))),this._previousValue=[...this._value],this._value=[...v],this.isRange()&&this.filledTrack?this.updateTrackRangeWidth():this.filledTrack&&(this.filledTrack.nativeElement.style.transform=`translate(0%, -50%) ${this.scaleX(this.getFractionComplete(v[0]))}`),this.inputs&&this.inputs.length&&this.inputs.forEach(((input,index)=>{input.value=this._value[index].toString()}));const valueToEmit=this.isRange()?v:v[0];this.propagateChange(valueToEmit),this.valueChange.emit(valueToEmit)}get value(){return this.isRange()?this._value:this._value[0]}set disabled(v){this._disabled=v;const inputs=this.getInputs();inputs&&inputs.length>0&&inputs.forEach((input=>input.disabled=v))}get disabled(){return this._disabled}ngAfterViewInit(){this.eventService.onDocument("mousemove",this.onMouseMove.bind(this)),this.eventService.onDocument("mouseup",this.onMouseUp.bind(this)),this.changeDetection.detectChanges(),this.inputs=this.getInputs(),this.inputs&&this.inputs.length>0&&this.inputs.forEach(((input,index)=>{input.type="number",input.classList.add("cds--slider-text-input"),input.classList.add("cds--text-input"),input.setAttribute("aria-labelledby",`${this.bottomRangeId} ${this.topRangeId}`),input.value=index<this._value.length?this._value[index].toString():this.max.toString(),this.eventService.on(input,"change",(event=>this.onChange(event,index))),0===index&&this.eventService.on(input,"focus",this.onFocus.bind(this))}))}trackThumbsBy(index,item){return index}registerOnChange(fn){this.propagateChange=fn}registerOnTouched(fn){this.onTouched=fn}writeValue(v){this.value=v}getFractionComplete(value){if(!this.track)return 0;const trackWidth=this.track.nativeElement.getBoundingClientRect().width;return this.convertToPx(value)/trackWidth}scaleX(complete){return`scaleX(${complete})`}convertToValue(pxAmount){const range=this.max-this.min,unrounded=pxAmount/this.track.nativeElement.getBoundingClientRect().width;return Math.round(range*unrounded/this.step)*this.step+this.min}convertToPx(value){if(!this.track)return 0;const trackWidth=this.track.nativeElement.getBoundingClientRect().width;return value>=this.max?trackWidth:value<=this.min?0:Math.round(trackWidth*((value-this.min)/(this.max-this.min)))}incrementValue(multiplier=1,index=0){this._value[index]=this._value[index]+this.step*multiplier,this.value=this.value}decrementValue(multiplier=1,index=0){this._value[index]=this._value[index]-this.step*multiplier,this.value=this.value}isRange(){return this._value.length>1}updateTrackRangeWidth(){const fraction=this.getFractionComplete(this._value[0]),fraction2=this.getFractionComplete(this._value[1]);this.filledTrack.nativeElement.style.transform=`translate(${100*fraction}%, -50%) ${this.scaleX(fraction2-fraction)}`}onChange(event,index){this._value[index]=Number(event.target.value),this.value=this.value}onClick(event){if(this.disabled)return;const trackLeft=this.track.nativeElement.getBoundingClientRect().left,trackValue=this.convertToValue(event.clientX-trackLeft);this.isRange()?Math.abs(this._value[0]-trackValue)<Math.abs(this._value[1]-trackValue)?this._value[0]=trackValue:this._value[1]=trackValue:this._value[0]=trackValue,this.value=this.value}onFocus({target}){target.select()}onMouseMove(event){if(this.disabled||!this.isMouseDown)return;const track=this.track.nativeElement.getBoundingClientRect();let value;event.clientX-track.left<=track.width&&event.clientX-track.left>=0&&(value=this.convertToValue(event.clientX-track.left)),event.clientX-track.left>track.width&&(value=this.max),event.clientX-track.left<0&&(value=this.min),void 0!==value&&(this._value[this._focusedThumbIndex]=value,this.value=this.value)}onMouseDown(event,index=0){event.preventDefault(),this.disabled||(this._focusedThumbIndex=index,this.thumbs.toArray()[index].nativeElement.focus(),this.isMouseDown=!0)}onMouseUp(){this.isMouseDown=!1}onKeyDown(event,index=0){if(this.disableArrowKeys)return;const multiplier=event.shiftKey?this.shiftMultiplier:1;"ArrowLeft"===event.key||"ArrowDown"===event.key?(this.decrementValue(multiplier,index),this.thumbs.toArray()[index].nativeElement.focus(),event.preventDefault()):"ArrowRight"!==event.key&&"ArrowUp"!==event.key||(this.incrementValue(multiplier,index),this.thumbs.toArray()[index].nativeElement.focus(),event.preventDefault())}isTemplate(value){return value instanceof core.TemplateRef}getInputs(){return this.elementRef.nativeElement.querySelectorAll("input:not([type=range])")}};Slider.count=0,Slider.ctorParameters=()=>[{type:core.ElementRef},{type:utils.PO},{type:core.ChangeDetectorRef}],Slider.propDecorators={min:[{type:core.Input}],max:[{type:core.Input}],step:[{type:core.Input}],value:[{type:core.Input}],id:[{type:core.Input}],shiftMultiplier:[{type:core.Input}],skeleton:[{type:core.Input}],label:[{type:core.Input}],disableArrowKeys:[{type:core.Input}],disabled:[{type:core.Input}],valueChange:[{type:core.Output}],hostClass:[{type:core.HostBinding,args:["class.cds--form-item"]}],thumbs:[{type:core.ViewChildren,args:["thumbs"]}],track:[{type:core.ViewChild,args:["track"]}],filledTrack:[{type:core.ViewChild,args:["filledTrack"]}],range:[{type:core.ViewChild,args:["range"]}]},Slider=(0,tslib_es6.gn)([(0,core.Component)({selector:"cds-slider, ibm-slider",template:'\n\t\t<ng-container *ngIf="!skeleton; else skeletonTemplate">\n\t\t\t<label\n\t\t\t\t*ngIf="label"\n\t\t\t\t[for]="id"\n\t\t\t\t[id]="labelId"\n\t\t\t\tclass="cds--label"\n\t\t\t\t[ngClass]="{\'cds--label--disabled\': disabled}">\n\t\t\t\t<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>\n\t\t\t\t<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>\n\t\t\t</label>\n\t\t\t<div class="cds--slider-container">\n\t\t\t\t<label [id]="bottomRangeId" class="cds--slider__range-label">\n\t\t\t\t\t<ng-content select="[minLabel]"></ng-content>\n\t\t\t\t</label>\n\t\t\t\t<div\n\t\t\t\t\tclass="cds--slider"\n\t\t\t\t\t(click)="onClick($event)"\n\t\t\t\t\t[ngClass]="{\'cds--slider--disabled\': disabled}">\n\t\t\t\t\t<ng-container *ngIf="!isRange()">\n\t\t\t\t\t\t<div class="cds--slider__thumb-wrapper"\n\t\t\t\t\t\t\t[ngStyle]="{insetInlineStart: getFractionComplete(value) * 100 + \'%\'}">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#thumbs\n\t\t\t\t\t\t\t\trole="slider"\n\t\t\t\t\t\t\t\t[id]="id"\n\t\t\t\t\t\t\t\t[attr.aria-labelledby]="labelId"\n\t\t\t\t\t\t\t\tclass="cds--slider__thumb"\n\t\t\t\t\t\t\t\ttabindex="0"\n\t\t\t\t\t\t\t\t(mousedown)="onMouseDown($event)"\n\t\t\t\t\t\t\t\t(keydown)="onKeyDown($event)">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<ng-container *ngIf="isRange()">\n\t\t\t\t\t\t<div class="cds--slider__thumb-wrapper"\n\t\t\t\t\t\t [ngStyle]="{insetInlineStart: getFractionComplete(thumb) * 100 + \'%\'}"\n\t\t\t\t\t\t *ngFor="let thumb of value; let i = index; trackBy: trackThumbsBy">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t#thumbs\n\t\t\t\t\t\t\t\trole="slider"\n\t\t\t\t\t\t\t\t[id]="id + (i > 0 ? \'-\' + i : \'\')"\n\t\t\t\t\t\t\t\t[attr.aria-labelledby]="labelId"\n\t\t\t\t\t\t\t\tclass="cds--slider__thumb"\n\t\t\t\t\t\t\t\ttabindex="0"\n\t\t\t\t\t\t\t\t(mousedown)="onMouseDown($event, i)"\n\t\t\t\t\t\t\t\t(keydown)="onKeyDown($event, i)">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<div\n\t\t\t\t\t\t#track\n\t\t\t\t\t\tclass="cds--slider__track">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\t#filledTrack\n\t\t\t\t\t\tclass="cds--slider__filled-track">\n\t\t\t\t\t</div>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#range\n\t\t\t\t\t\taria-label="slider"\n\t\t\t\t\t\tclass="cds--slider__input"\n\t\t\t\t\t\ttype="range"\n\t\t\t\t\t\t[step]="step"\n\t\t\t\t\t\t[min]="min"\n\t\t\t\t\t\t[max]="max"\n\t\t\t\t\t\t[value]="value.toString()">\n\t\t\t\t</div>\n\t\t\t\t<label [id]="topRangeId" class="cds--slider__range-label">\n\t\t\t\t\t<ng-content select="[maxLabel]"></ng-content>\n\t\t\t\t</label>\n\t\t\t\t<ng-content select="input"></ng-content>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<ng-template #skeletonTemplate>\n\t\t\t<label *ngIf="label" class="cds--label cds--skeleton"></label>\n\t\t\t<div class="cds--slider-container cds--skeleton">\n\t\t\t\t<span class="cds--slider__range-label"></span>\n\t\t\t\t<div class="cds--slider">\n\t\t\t\t\t<div class="cds--slider__thumb"></div>\n\t\t\t\t\t<div class="cds--slider__track"></div>\n\t\t\t\t\t<div class="cds--slider__filled-track"></div>\n\t\t\t\t</div>\n\t\t\t\t<span class="cds--slider__range-label"></span>\n\t\t\t</div>\n\t\t</ng-template>\n\t',providers:[{provide:fesm2020_forms.JU,useExisting:Slider,multi:!0}]})],Slider);var common=__webpack_require__("./node_modules/@angular/common/fesm2020/common.mjs");let SliderModule=class SliderModule{};SliderModule=(0,tslib_es6.gn)([(0,core.NgModule)({declarations:[Slider],exports:[Slider],imports:[common.CommonModule,utils.As]})],SliderModule);const slider_stories={title:"Components/Slider",decorators:[(0,dist.moduleMetadata)({imports:[SliderModule]})],component:Slider},Basic=(args=>({props:args,template:'\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [skeleton]="skeleton"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n '})).bind({});Basic.args={min:0,max:100,step:1,value:0,minLabel:"0",maxLabel:"100",disabled:!1,shiftMultiplier:4,theme:"dark"},Basic.argTypes={valueChange:{control:"Value changed!"},theme:{options:["light","dark"],control:"radio"}};const Range=(args=>({props:args,template:'\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n '})).bind({});Range.args={...Basic.args,value:[20,80]},Range.argTypes={...Basic.argTypes},Basic.parameters={...Basic.parameters,docs:{...Basic.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [skeleton]="skeleton"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n `\n})',...Basic.parameters?.docs?.source}}},Range.parameters={...Range.parameters,docs:{...Range.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <cds-slider\n [label]="label"\n [min]="min"\n [max]="max"\n [step]="step"\n [value]="value"\n [shiftMultiplier]="shiftMultiplier"\n [disabled]="disabled"\n aria-Label="Label for slider value"\n (valueChange)="valueChange($event)">\n <span minLabel>{{minLabel}}</span>\n <span maxLabel>{{maxLabel}}</span>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n <input [ngClass]="{\'cds--text-input--light\': theme === \'light\'}"/>\n </cds-slider>\n `\n})',...Range.parameters?.docs?.source}}};const __namedExportsOrder=["Basic","Range"]}}]);
@@ -296,13 +296,27 @@ export class Slider {
296
296
  this._value[index] = Number(event.target.value);
297
297
  this.value = this.value;
298
298
  }
299
- /** Handles clicks on the range track, and setting the value to it's "real" equivalent */
299
+ /**
300
+ * Handles clicks on the slider, and setting the value to it's "real" equivalent.
301
+ * Will assign the value to the closest thumb if in range mode.
302
+ * */
300
303
  onClick(event) {
301
304
  if (this.disabled) {
302
305
  return;
303
306
  }
304
307
  const trackLeft = this.track.nativeElement.getBoundingClientRect().left;
305
- this._value[0] = this.convertToValue(event.clientX - trackLeft);
308
+ const trackValue = this.convertToValue(event.clientX - trackLeft);
309
+ if (this.isRange()) {
310
+ if (Math.abs(this._value[0] - trackValue) < Math.abs(this._value[1] - trackValue)) {
311
+ this._value[0] = trackValue;
312
+ }
313
+ else {
314
+ this._value[1] = trackValue;
315
+ }
316
+ }
317
+ else {
318
+ this._value[0] = trackValue;
319
+ }
306
320
  this.value = this.value;
307
321
  }
308
322
  /** Focus handler for the optional input */
@@ -406,38 +420,42 @@ Slider.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.
406
420
  </label>
407
421
  <div
408
422
  class="cds--slider"
423
+ (click)="onClick($event)"
409
424
  [ngClass]="{'cds--slider--disabled': disabled}">
410
425
  <ng-container *ngIf="!isRange()">
411
- <div
412
- #thumbs
413
- role="slider"
414
- [id]="id"
415
- [attr.aria-labelledby]="labelId"
416
- class="cds--slider__thumb"
417
- [ngStyle]="{left: getFractionComplete(value) * 100 + '%'}"
418
- tabindex="0"
419
- (mousedown)="onMouseDown($event)"
420
- (keydown)="onKeyDown($event)">
426
+ <div class="cds--slider__thumb-wrapper"
427
+ [ngStyle]="{insetInlineStart: getFractionComplete(value) * 100 + '%'}">
428
+ <div
429
+ #thumbs
430
+ role="slider"
431
+ [id]="id"
432
+ [attr.aria-labelledby]="labelId"
433
+ class="cds--slider__thumb"
434
+ tabindex="0"
435
+ (mousedown)="onMouseDown($event)"
436
+ (keydown)="onKeyDown($event)">
437
+ </div>
421
438
  </div>
422
439
  </ng-container>
423
440
  <ng-container *ngIf="isRange()">
424
- <div
425
- #thumbs
426
- *ngFor="let thumb of value; let i = index; trackBy: trackThumbsBy"
427
- role="slider"
428
- [id]="id + (i > 0 ? '-' + i : '')"
429
- [attr.aria-labelledby]="labelId"
430
- class="cds--slider__thumb"
431
- [ngStyle]="{left: getFractionComplete(thumb) * 100 + '%'}"
432
- tabindex="0"
433
- (mousedown)="onMouseDown($event, i)"
434
- (keydown)="onKeyDown($event, i)">
441
+ <div class="cds--slider__thumb-wrapper"
442
+ [ngStyle]="{insetInlineStart: getFractionComplete(thumb) * 100 + '%'}"
443
+ *ngFor="let thumb of value; let i = index; trackBy: trackThumbsBy">
444
+ <div
445
+ #thumbs
446
+ role="slider"
447
+ [id]="id + (i > 0 ? '-' + i : '')"
448
+ [attr.aria-labelledby]="labelId"
449
+ class="cds--slider__thumb"
450
+ tabindex="0"
451
+ (mousedown)="onMouseDown($event, i)"
452
+ (keydown)="onKeyDown($event, i)">
453
+ </div>
435
454
  </div>
436
455
  </ng-container>
437
456
  <div
438
457
  #track
439
- class="cds--slider__track"
440
- (click)="onClick($event)">
458
+ class="cds--slider__track">
441
459
  </div>
442
460
  <div
443
461
  #filledTrack
@@ -494,38 +512,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
494
512
  </label>
495
513
  <div
496
514
  class="cds--slider"
515
+ (click)="onClick($event)"
497
516
  [ngClass]="{'cds--slider--disabled': disabled}">
498
517
  <ng-container *ngIf="!isRange()">
499
- <div
500
- #thumbs
501
- role="slider"
502
- [id]="id"
503
- [attr.aria-labelledby]="labelId"
504
- class="cds--slider__thumb"
505
- [ngStyle]="{left: getFractionComplete(value) * 100 + '%'}"
506
- tabindex="0"
507
- (mousedown)="onMouseDown($event)"
508
- (keydown)="onKeyDown($event)">
518
+ <div class="cds--slider__thumb-wrapper"
519
+ [ngStyle]="{insetInlineStart: getFractionComplete(value) * 100 + '%'}">
520
+ <div
521
+ #thumbs
522
+ role="slider"
523
+ [id]="id"
524
+ [attr.aria-labelledby]="labelId"
525
+ class="cds--slider__thumb"
526
+ tabindex="0"
527
+ (mousedown)="onMouseDown($event)"
528
+ (keydown)="onKeyDown($event)">
529
+ </div>
509
530
  </div>
510
531
  </ng-container>
511
532
  <ng-container *ngIf="isRange()">
512
- <div
513
- #thumbs
514
- *ngFor="let thumb of value; let i = index; trackBy: trackThumbsBy"
515
- role="slider"
516
- [id]="id + (i > 0 ? '-' + i : '')"
517
- [attr.aria-labelledby]="labelId"
518
- class="cds--slider__thumb"
519
- [ngStyle]="{left: getFractionComplete(thumb) * 100 + '%'}"
520
- tabindex="0"
521
- (mousedown)="onMouseDown($event, i)"
522
- (keydown)="onKeyDown($event, i)">
533
+ <div class="cds--slider__thumb-wrapper"
534
+ [ngStyle]="{insetInlineStart: getFractionComplete(thumb) * 100 + '%'}"
535
+ *ngFor="let thumb of value; let i = index; trackBy: trackThumbsBy">
536
+ <div
537
+ #thumbs
538
+ role="slider"
539
+ [id]="id + (i > 0 ? '-' + i : '')"
540
+ [attr.aria-labelledby]="labelId"
541
+ class="cds--slider__thumb"
542
+ tabindex="0"
543
+ (mousedown)="onMouseDown($event, i)"
544
+ (keydown)="onKeyDown($event, i)">
545
+ </div>
523
546
  </div>
524
547
  </ng-container>
525
548
  <div
526
549
  #track
527
- class="cds--slider__track"
528
- (click)="onClick($event)">
550
+ class="cds--slider__track">
529
551
  </div>
530
552
  <div
531
553
  #filledTrack
@@ -607,4 +629,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
607
629
  type: ViewChild,
608
630
  args: ["range"]
609
631
  }] } });
610
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksRUFHWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQ0c7QUErRkgsTUFBTSxPQUFPLE1BQU07SUE4SWxCLFlBQ1csVUFBc0IsRUFDdEIsWUFBMEIsRUFDNUIsZUFBa0M7UUFGaEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUF4SDNDLGlDQUFpQztRQUN4QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBc0VsQiwrSEFBK0g7UUFDdEgsT0FBRSxHQUFHLFVBQVUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDekMsaUZBQWlGO1FBQ3hFLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLHlDQUF5QztRQUNoQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRzFCLGlFQUFpRTtRQUN4RCxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFjbEMsK0NBQStDO1FBQ3JDLGdCQUFXLEdBQW9DLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFHLElBQUksQ0FBQztRQU8vQyxZQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLGVBQWUsQ0FBQztRQUMxQyxlQUFVLEdB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QkFDUSxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ0osS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRBZnRlclZpZXdJbml0LFxuXHRWaWV3Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGRyZW4sXG5cdFF1ZXJ5TGlzdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcblxuLyoqXG4gKiBVc2VkIHRvIHNlbGVjdCBmcm9tIHJhbmdlcyBvZiB2YWx1ZXMuIFtTZWUgaGVyZV0oaHR0cHM6Ly93d3cuY2FyYm9uZGVzaWduc3lzdGVtLmNvbS9jb21wb25lbnRzL3NsaWRlci91c2FnZSkgZm9yIHVzYWdlIGluZm9ybWF0aW9uLlxuICpcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIFRoZSBzaW1wbGVzdCBwb3NzaWJsZSBzbGlkZXIgdXNhZ2UgbG9va3Mgc29tZXRoaW5nIGxpa2U6XG4gKlxuICogYGBgaHRtbFxuICpcdDxjZHMtc2xpZGVyPjwvY2RzLXNsaWRlcj5cbiAqIGBgYFxuICpcbiAqIFRoYXQgd2lsbCByZW5kZXIgYSBzbGlkZXIgd2l0aG91dCBsYWJlbHMgb3IgYWx0ZXJuYXRpdmUgdmFsdWUgaW5wdXQuIExhYmVscyBjYW4gYmUgcHJvdmlkZWQgYnlcbiAqIGVsZW1lbnRzIHdpdGggYFttaW5MYWJlbF1gIGFuZCBgW21heExhYmVsXWAgYXR0cmlidXRlcywgYW5kIGFuIGBpbnB1dGAgKG1heSB1c2UgdGhlIGBpYm1JbnB1dGAgZGlyZWN0aXZlKSBjYW4gYmUgc3VwcGxpZWRcbiAqIGZvciB1c2UgYXMgYW4gYWx0ZXJuYXRpdmUgdmFsdWUgZmllbGQuXG4gKlxuICogZXg6XG4gKlxuICogYGBgaHRtbFxuICogPCEtLSBGdWxsIGV4YW1wbGUgLS0+XG4gKiA8Y2RzLXNsaWRlcj5cbiAqXHRcdDxzcGFuIG1pbkxhYmVsPjBHQjwvc3Bhbj5cbiAqXHRcdDxzcGFuIG1heExhYmVsPjEwMEdCPC9zcGFuPlxuICpcdFx0PGlucHV0Lz5cbiAqIDwvY2RzLXNsaWRlcj5cbiAqXG4gKiA8IS0tIHdpdGgganVzdCBhbiBpbnB1dCAtLT5cbiAqIDxjZHMtc2xpZGVyPlxuICpcdFx0PGlucHV0Lz5cbiAqIDwvY2RzLXNsaWRlcj5cbiAqXG4gKiA8IS0tIHdpdGgganVzdCBvbmUgbGFiZWwgLS0+XG4gKiA8Y2RzLXNsaWRlcj5cbiAqXHRcdDxzcGFuIG1heExhYmVsPk1heGltdW08L3NwYW4+XG4gKiA8L2Nkcy1zbGlkZXI+XG4gKiBgYGBcbiAqXG4gKiBTbGlkZXIgc3VwcG9ydHMgYE5nTW9kZWxgIGJ5IGRlZmF1bHQsIGFzIHdlbGwgYXMgdHdvIHdheSBiaW5kaW5nIHRvIHRoZSBgdmFsdWVgIGlucHV0LlxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtc2xpZGVyLS1hZHZhbmNlZClcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1zbGlkZXIsIGlibS1zbGlkZXJcIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uOyBlbHNlIHNrZWxldG9uVGVtcGxhdGVcIj5cblx0XHRcdDxsYWJlbFxuXHRcdFx0XHQqbmdJZj1cImxhYmVsXCJcblx0XHRcdFx0W2Zvcl09XCJpZFwiXG5cdFx0XHRcdFtpZF09XCJsYWJlbElkXCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxhYmVsXCJcblx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLWxhYmVsLS1kaXNhYmxlZCc6IGRpc2FibGVkfVwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUobGFiZWwpXCI+e3tsYWJlbH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUobGFiZWwpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9sYWJlbD5cblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlci1jb250YWluZXJcIj5cblx0XHRcdFx0PGxhYmVsIFtpZF09XCJib3R0b21SYW5nZUlkXCIgY2xhc3M9XCJjZHMtLXNsaWRlcl9fcmFuZ2UtbGFiZWxcIj5cblx0XHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbbWluTGFiZWxdXCI+PC9uZy1jb250ZW50PlxuXHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXNsaWRlclwiXG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLXNsaWRlci0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUmFuZ2UoKVwiPlxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHQjdGh1bWJzXG5cdFx0XHRcdFx0XHRcdHJvbGU9XCJzbGlkZXJcIlxuXHRcdFx0XHRcdFx0XHRbaWRdPVwiaWRcIlxuXHRcdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxJZFwiXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RodW1iXCJcblx0XHRcdFx0XHRcdFx0W25nU3R5bGVdPVwie2xlZnQ6IGdldEZyYWN0aW9uQ29tcGxldGUodmFsdWUpICogMTAwICsgJyUnfVwiXG5cdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRcdChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHRcdChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiaXNSYW5nZSgpXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdCN0aHVtYnNcblx0XHRcdFx0XHRcdFx0Km5nRm9yPVwibGV0IHRodW1iIG9mIHZhbHVlOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja1RodW1ic0J5XCJcblx0XHRcdFx0XHRcdFx0cm9sZT1cInNsaWRlclwiXG5cdFx0XHRcdFx0XHRcdFtpZF09XCJpZCArIChpID4gMCA/ICctJyArIGkgOiAnJylcIlxuXHRcdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxJZFwiXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RodW1iXCJcblx0XHRcdFx0XHRcdFx0W25nU3R5bGVdPVwie2xlZnQ6IGdldEZyYWN0aW9uQ29tcGxldGUodGh1bWIpICogMTAwICsgJyUnfVwiXG5cdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRcdChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCBpKVwiXG5cdFx0XHRcdFx0XHRcdChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIGkpXCI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHQjdHJhY2tcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RyYWNrXCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHQjZmlsbGVkVHJhY2tcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX2ZpbGxlZC10cmFja1wiPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0I3JhbmdlXG5cdFx0XHRcdFx0XHRhcmlhLWxhYmVsPVwic2xpZGVyXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX2lucHV0XCJcblx0XHRcdFx0XHRcdHR5cGU9XCJyYW5nZVwiXG5cdFx0XHRcdFx0XHRbc3RlcF09XCJzdGVwXCJcblx0XHRcdFx0XHRcdFttaW5dPVwibWluXCJcblx0XHRcdFx0XHRcdFttYXhdPVwibWF4XCJcblx0XHRcdFx0XHRcdFt2YWx1ZV09XCJ2YWx1ZS50b1N0cmluZygpXCI+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8bGFiZWwgW2lkXT1cInRvcFJhbmdlSWRcIiBjbGFzcz1cImNkcy0tc2xpZGVyX19yYW5nZS1sYWJlbFwiPlxuXHRcdFx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXhMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG5cdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cImlucHV0XCI+PC9uZy1jb250ZW50PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHQ8bmctdGVtcGxhdGUgI3NrZWxldG9uVGVtcGxhdGU+XG5cdFx0XHQ8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiY2RzLS1sYWJlbCBjZHMtLXNrZWxldG9uXCI+PC9sYWJlbD5cblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlci1jb250YWluZXIgY2RzLS1za2VsZXRvblwiPlxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tc2xpZGVyX19yYW5nZS1sYWJlbFwiPjwvc3Bhbj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2xpZGVyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2xpZGVyX190aHVtYlwiPjwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlcl9fdHJhY2tcIj48L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zbGlkZXJfX2ZpbGxlZC10cmFja1wiPjwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLXNsaWRlcl9fcmFuZ2UtbGFiZWxcIj48L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBTbGlkZXIsXG5cdFx0XHRtdWx0aTogdHJ1ZVxuXHRcdH1cblx0XVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXIgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdC8qKiBVc2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMgKi9cblx0cHJpdmF0ZSBzdGF0aWMgY291bnQgPSAwO1xuXG5cdC8qKiBUaGUgbG93ZXIgYm91bmQgb2Ygb3VyIHJhbmdlICovXG5cdEBJbnB1dCgpIHNldCBtaW4odikge1xuXHRcdGlmICghdikgeyByZXR1cm47IH1cblx0XHR0aGlzLl9taW4gPSB2O1xuXHRcdC8vIGZvcmNlIHRoZSBjb21wb25lbnQgdG8gdXBkYXRlXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XG5cdH1cblx0Z2V0IG1pbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fbWluO1xuXHR9XG5cdC8qKiBUaGUgdXBwZXIgYm91bmQgb2Ygb3VyIHJhbmdlICovXG5cdEBJbnB1dCgpIHNldCBtYXgodikge1xuXHRcdGlmICghdikgeyByZXR1cm47IH1cblx0XHR0aGlzLl9tYXggPSB2O1xuXHRcdC8vIGZvcmNlIHRoZSBjb21wb25lbnQgdG8gdXBkYXRlXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XG5cdH1cblxuXHRnZXQgbWF4KCkge1xuXHRcdHJldHVybiB0aGlzLl9tYXg7XG5cdH1cblx0LyoqIFRoZSBpbnRlcnZhbCBmb3Igb3VyIHJhbmdlICovXG5cdEBJbnB1dCgpIHN0ZXAgPSAxO1xuXHQvKiogU2V0IHRoZSBpbml0aWFsIHZhbHVlLiBBdmFpbGFibGUgZm9yIHR3byB3YXkgYmluZGluZyAqL1xuXHRASW5wdXQoKSBzZXQgdmFsdWUodikge1xuXHRcdGlmICghdikge1xuXHRcdFx0diA9IFt0aGlzLm1pbl07XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHR2ID0gW051bWJlcih2KV07XG5cdFx0fVxuXG5cdFx0aWYgKHZbMF0gPCB0aGlzLm1pbikge1xuXHRcdFx0dlswXSA9IHRoaXMubWluO1xuXHRcdH1cblxuXHRcdGlmICh2WzBdID4gdGhpcy5tYXgpIHtcblx0XHRcdHZbMF0gPSB0aGlzLm1heDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1JhbmdlKCkpIHtcblx0XHRcdGlmICh0aGlzLl9wcmV2aW91c1ZhbHVlWzBdICE9PSB2WzBdKSB7IC8vIGxlZnQgbW92ZWRcblx0XHRcdFx0aWYgKHZbMF0gPiB2WzFdIC0gdGhpcy5zdGVwKSB7XG5cdFx0XHRcdFx0Ly8gc3RvcCB0aGUgbGVmdCBoYW5kbGUgaWYgc3VycGFzc2luZyB0aGUgcmlnaHQgb25lXG5cdFx0XHRcdFx0dlswXSA9IHZbMV0gLSB0aGlzLnN0ZXA7XG5cdFx0XHRcdH0gZWxzZSBpZiAodlswXSA+IHRoaXMubWF4KSB7XG5cdFx0XHRcdFx0dlswXSA9IHRoaXMubWF4O1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZbMF0gPCB0aGlzLm1pbikge1xuXHRcdFx0XHRcdHZbMF0gPSB0aGlzLm1pbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fcHJldmlvdXNWYWx1ZVsxXSAhPT0gdlsxXSkgeyAvLyByaWdodCBtb3ZlZFxuXHRcdFx0XHRpZiAodlsxXSA+IHRoaXMubWF4KSB7XG5cdFx0XHRcdFx0dlsxXSA9IHRoaXMubWF4O1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZbMV0gPCB0aGlzLl92YWx1ZVswXSArIHRoaXMuc3RlcCkge1xuXHRcdFx0XHRcdC8vIHN0b3AgdGhlIHJpZ2h0IGhhbmRsZSBpZiBzdXJwYXNzaW5nIHRoZSBsZWZ0IG9uZVxuXHRcdFx0XHRcdHZbMV0gPSB0aGlzLl92YWx1ZVswXSArIHRoaXMuc3RlcDtcblx0XHRcdFx0fSBlbHNlIGlmICh2WzFdIDwgdGhpcy5taW4pIHtcblx0XHRcdFx0XHR2WzFdID0gdGhpcy5taW47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLl9wcmV2aW91c1ZhbHVlID0gWy4uLnRoaXMuX3ZhbHVlXTsgLy8gc3RvcmUgYSBjb3B5LCBlbmFibGUgZGV0ZWN0aW9uIHdoaWNoIGhhbmRsZSBtb3ZlZFxuXHRcdHRoaXMuX3ZhbHVlID0gWy4uLnZdOyAvLyB0cmlnZ2VycyBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gbmdNb2RlbCB2YWx1ZSBpcyBhbiBhcnJheSAoZm9yIHJhbmdlKVxuXG5cdFx0aWYgKHRoaXMuaXNSYW5nZSgpICYmIHRoaXMuZmlsbGVkVHJhY2spIHtcblx0XHRcdHRoaXMudXBkYXRlVHJhY2tSYW5nZVdpZHRoKCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmZpbGxlZFRyYWNrKSB7XG5cdFx0XHR0aGlzLmZpbGxlZFRyYWNrLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgwJSwgLTUwJSkgJHt0aGlzLnNjYWxlWCh0aGlzLmdldEZyYWN0aW9uQ29tcGxldGUodlswXSkpfWA7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaW5wdXRzICYmIHRoaXMuaW5wdXRzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGlucHV0LnZhbHVlID0gdGhpcy5fdmFsdWVbaW5kZXhdLnRvU3RyaW5nKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZVRvRW1pdCA9IHRoaXMuaXNSYW5nZSgpID8gdiA6IHZbMF07XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsdWVUb0VtaXQpO1xuXHRcdHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVRvRW1pdCk7XG5cdH1cblxuXHRnZXQgdmFsdWUoKSB7XG5cdFx0aWYgKHRoaXMuaXNSYW5nZSgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl92YWx1ZVswXTtcblx0fVxuXG5cdC8qKiBCYXNlIElEIGZvciB0aGUgc2xpZGVyLiBUaGUgbWluIGFuZCBtYXggbGFiZWxzIGdldCBJRHMgYCR7dGhpcy5pZH0tYm90dG9tLXJhbmdlYCBhbmQgYCR7dGhpcy5pZH0tdG9wLXJhbmdlYCByZXNwZWN0aXZlbHkgKi9cblx0QElucHV0KCkgaWQgPSBgc2xpZGVyLSR7U2xpZGVyLmNvdW50Kyt9YDtcblx0LyoqIFZhbHVlIHVzZWQgdG8gXCJtdWx0aXBseVwiIHRoZSBgc3RlcGAgd2hlbiB1c2luZyBhcnJvdyBrZXlzIHRvIHNlbGVjdCB2YWx1ZXMgKi9cblx0QElucHV0KCkgc2hpZnRNdWx0aXBsaWVyID0gNDtcblx0LyoqIFNldCB0byBgdHJ1ZWAgZm9yIGEgbG9hZGluZyBzbGlkZXIgKi9cblx0QElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcblx0LyoqIFNldHMgdGhlIHRleHQgaW5zaWRlIHRoZSBgbGFiZWxgIHRhZyAqL1xuXHRASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqIFNldCB0byBgdHJ1ZWAgZm9yIGEgc2xpZGVyIHdpdGhvdXQgYXJyb3cga2V5IGludGVyYWN0aW9ucy4gKi9cblx0QElucHV0KCkgZGlzYWJsZUFycm93S2V5cyA9IGZhbHNlO1xuXHQvKiogRGlzYWJsZXMgdGhlIHJhbmdlIHZpc3VhbGx5IGFuZCBmdW5jdGlvbmFsbHkgKi9cblx0QElucHV0KCkgc2V0IGRpc2FibGVkKHYpIHtcblx0XHR0aGlzLl9kaXNhYmxlZCA9IHY7XG5cdFx0Ly8gZm9yIHNvbWUgcmVhc29uIGB0aGlzLmlucHV0YCBuZXZlciBleGlzdHMgaGVyZSwgc28gd2UgaGF2ZSB0byBxdWVyeSBmb3IgaXQgaGVyZSB0b29cblx0XHRjb25zdCBpbnB1dHMgPSB0aGlzLmdldElucHV0cygpO1xuXHRcdGlmIChpbnB1dHMgJiYgaW5wdXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGlucHV0cy5mb3JFYWNoKGlucHV0ID0+IGlucHV0LmRpc2FibGVkID0gdik7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IGRpc2FibGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9kaXNhYmxlZDtcblx0fVxuXHQvKiogRW1pdHMgZXZlcnkgdGltZSBhIG5ldyB2YWx1ZSBpcyBzZWxlY3RlZCAqL1xuXHRAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBudW1iZXJbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tZm9ybS1pdGVtXCIpIGhvc3RDbGFzcyA9IHRydWU7XG5cdEBWaWV3Q2hpbGRyZW4oXCJ0aHVtYnNcIikgdGh1bWJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cblx0QFZpZXdDaGlsZChcInRyYWNrXCIpIHRyYWNrOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKFwiZmlsbGVkVHJhY2tcIikgZmlsbGVkVHJhY2s6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoXCJyYW5nZVwiKSByYW5nZTogRWxlbWVudFJlZjtcblxuXHRwdWJsaWMgbGFiZWxJZCA9IGAke3RoaXMuaWR9LWxhYmVsYDtcblx0cHVibGljIGJvdHRvbVJhbmdlSWQgPSBgJHt0aGlzLmlkfS1ib3R0b20tcmFuZ2VgO1xuXHRwdWJsaWMgdG9wUmFuZ2VJZCA9IGAke3RoaXMuaWR9LXRvcC1yYW5nZWA7XG5cdHB1YmxpYyBmcmFjdGlvbkNvbXBsZXRlID0gMDtcblxuXHRwcm90ZWN0ZWQgaXNNb3VzZURvd24gPSBmYWxzZTtcblx0cHJvdGVjdGVkIGlucHV0czogSFRNTElucHV0RWxlbWVudFtdO1xuXHRwcm90ZWN0ZWQgX21pbiA9IDA7XG5cdHByb3RlY3RlZCBfbWF4ID0gMTAwO1xuXHRwcm90ZWN0ZWQgX3ZhbHVlID0gW3RoaXMubWluXTtcblx0cHJvdGVjdGVkIF9wcmV2aW91c1ZhbHVlID0gW3RoaXMubWluXTtcblx0cHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuXHRwcm90ZWN0ZWQgX2ZvY3VzZWRUaHVtYkluZGV4ID0gMDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcblx0XHRwcm90ZWN0ZWQgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmXG5cdCkge31cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0Ly8gYmluZCBtb3VzZW1vdmUgYW5kIG1vdXNldXAgdG8gdGhlIGRvY3VtZW50IHNvIHdlIGRvbid0IGhhdmUgaXNzdWVzIHRyYWNraW5nIHRoZSBtb3VzZVxuXHRcdHRoaXMuZXZlbnRTZXJ2aWNlLm9uRG9jdW1lbnQoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLmV2ZW50U2VydmljZS5vbkRvY3VtZW50KFwibW91c2V1cFwiLCB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpKTtcblxuXHRcdC8vIGFwcGx5IGFueSB2YWx1ZXMgd2UgZ290IGZyb20gYmVmb3JlIHRoZSB2aWV3IGluaXRpYWxpemVkXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xuXG5cdFx0Ly8gVE9ETzogb250b3VjaHN0YXJ0L29udG91Y2htb3ZlL29udG91Y2hlbmRcblxuXHRcdC8vIHNldCB1cCB0aGUgb3B0aW9uYWwgaW5wdXRcblx0XHR0aGlzLmlucHV0cyA9IHRoaXMuZ2V0SW5wdXRzKCk7XG5cdFx0aWYgKHRoaXMuaW5wdXRzICYmIHRoaXMuaW5wdXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRpbnB1dC50eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdFx0aW5wdXQuY2xhc3NMaXN0LmFkZChcImNkcy0tc2xpZGVyLXRleHQtaW5wdXRcIik7XG5cdFx0XHRcdGlucHV0LmNsYXNzTGlzdC5hZGQoXCJjZHMtLXRleHQtaW5wdXRcIik7XG5cdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxsZWRieVwiLCBgJHt0aGlzLmJvdHRvbVJhbmdlSWR9ICR7dGhpcy50b3BSYW5nZUlkfWApO1xuXG5cdFx0XHRcdGlucHV0LnZhbHVlID0gaW5kZXggPCB0aGlzLl92YWx1ZS5sZW5ndGggPyB0aGlzLl92YWx1ZVtpbmRleF0udG9TdHJpbmcoKSA6IHRoaXMubWF4LnRvU3RyaW5nKCk7XG5cdFx0XHRcdC8vIGJpbmQgZXZlbnRzIG9uIG91ciBvcHRpb25hbCBpbnB1dFxuXHRcdFx0XHR0aGlzLmV2ZW50U2VydmljZS5vbihpbnB1dCwgXCJjaGFuZ2VcIiwgZXZlbnQgPT4gdGhpcy5vbkNoYW5nZShldmVudCwgaW5kZXgpKTtcblxuXHRcdFx0XHRpZiAoaW5kZXggPT09IDApIHtcblx0XHRcdFx0XHR0aGlzLmV2ZW50U2VydmljZS5vbihpbnB1dCwgXCJmb2N1c1wiLCB0aGlzLm9uRm9jdXMuYmluZCh0aGlzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHRyYWNrVGh1bWJzQnkoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG5cdFx0cmV0dXJuIGluZGV4O1xuXHR9XG5cblx0LyoqIFNlbmQgY2hhbmdlcyBiYWNrIHRvIHRoZSBtb2RlbCAqL1xuXHRwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG5cblx0LyoqIFJlZ2lzdGVyIGEgY2hhbmdlIHByb3BhZ2F0aW9uIGZ1bmN0aW9uIGZvciBgQ29udHJvbFZhbHVlQWNjZXNzb3JgICovXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG5cdH1cblxuXHQvKiogQ2FsbGJhY2sgdG8gbm90aWZ5IHRoZSBtb2RlbCB3aGVuIG91ciBpbnB1dCBoYXMgYmVlbiB0b3VjaGVkICovXG5cdG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuXG5cdC8qKiBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIG5vdGlmeSB3aGVuIG91ciBpbnB1dCBoYXMgYmVlbiB0b3VjaGVkICovXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0LyoqIFJlY2VpdmVzIGEgdmFsdWUgZnJvbSB0aGUgbW9kZWwgKi9cblx0d3JpdGVWYWx1ZSh2OiBhbnkpIHtcblx0XHR0aGlzLnZhbHVlID0gdjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgXCJjb21wbGV0ZW5lc3NcIiBvZiBhIHZhbHVlIGFzIGEgZnJhY3Rpb24gb2YgdGhlIHRvdGFsIHRyYWNrIHdpZHRoXG5cdCAqL1xuXHRnZXRGcmFjdGlvbkNvbXBsZXRlKHZhbHVlOiBudW1iZXIpIHtcblx0XHRpZiAoIXRoaXMudHJhY2spIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRyYWNrV2lkdGggPSB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydFRvUHgodmFsdWUpIC8gdHJhY2tXaWR0aDtcblx0fVxuXG5cdC8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBDU1MgdHJhbnNmb3JtIGBzY2FsZVhgIGZ1bmN0aW9uICovXG5cdHNjYWxlWChjb21wbGV0ZSkge1xuXHRcdHJldHVybiBgc2NhbGVYKCR7Y29tcGxldGV9KWA7XG5cdH1cblxuXHQvKiogQ29udmVydHMgYSBnaXZlbiBweCB2YWx1ZSB0byBhIFwicmVhbFwiIHZhbHVlIGluIG91ciByYW5nZSAqL1xuXHRjb252ZXJ0VG9WYWx1ZShweEFtb3VudCkge1xuXHRcdC8vIGJhc2ljIGNvbmNlcHQgYm9ycm93ZWQgZnJvbSBjYXJib24tY29tcG9uZW50c1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXJib24tZGVzaWduLXN5c3RlbS9jYXJib24vYmxvYi80M2JmM2FiZGMyZjhiZGFhMzhhYTg0ZTBmNzMzYWRkZTFlMWU4ODk0L3NyYy9jb21wb25lbnRzL3NsaWRlci9zbGlkZXIuanMjTDE0Ny1MMTUxXG5cdFx0Y29uc3QgcmFuZ2UgPSB0aGlzLm1heCAtIHRoaXMubWluO1xuXHRcdGNvbnN0IHRyYWNrV2lkdGggPSB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0Y29uc3QgdW5yb3VuZGVkID0gcHhBbW91bnQgLyB0cmFja1dpZHRoO1xuXHRcdGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKChyYW5nZSAqIHVucm91bmRlZCkgLyB0aGlzLnN0ZXApICogdGhpcy5zdGVwO1xuXHRcdHJldHVybiByb3VuZGVkICsgdGhpcy5taW47XG5cdH1cblxuXHQvKiogQ29udmVydHMgYSBnaXZlbiBcInJlYWxcIiB2YWx1ZSB0byBhIHB4IHZhbHVlIHdlIGNhbiB1cGRhdGUgdGhlIHZpZXcgd2l0aCAqL1xuXHRjb252ZXJ0VG9QeCh2YWx1ZSkge1xuXHRcdGlmICghdGhpcy50cmFjaykge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdHJhY2tXaWR0aCA9IHRoaXMudHJhY2submF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblx0XHRpZiAodmFsdWUgPj0gdGhpcy5tYXgpIHtcblx0XHRcdHJldHVybiB0cmFja1dpZHRoO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSA8PSB0aGlzLm1pbikge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gYWNjb3VudCBmb3IgdmFsdWUgc2hpZnRpbmcgYnkgc3VidHJhY3RpbmcgbWluIGZyb20gdmFsdWUgYW5kIG1heFxuXHRcdHJldHVybiBNYXRoLnJvdW5kKHRyYWNrV2lkdGggKiAoKHZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSk7XG5cdH1cblxuXHQvKipcblx0ICogSW5jcmVtZW50cyB0aGUgdmFsdWUgYnkgdGhlIHN0ZXAgdmFsdWUsIG9yIHRoZSBzdGVwIHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIGBtdWx0aXBsaWVyYCBhcmd1bWVudC5cblx0ICpcblx0ICogQGFyZ3VtZW50IG11bHRpcGxpZXIgRGVmYXVsdHMgdG8gYDFgLCBtdWx0aXBsaWVkIHdpdGggdGhlIHN0ZXAgdmFsdWUuXG5cdCAqL1xuXHRpbmNyZW1lbnRWYWx1ZShtdWx0aXBsaWVyID0gMSwgaW5kZXggPSAwKSB7XG5cdFx0dGhpcy5fdmFsdWVbaW5kZXhdID0gdGhpcy5fdmFsdWVbaW5kZXhdICsgKHRoaXMuc3RlcCAqIG11bHRpcGxpZXIpO1xuXHRcdHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlOyAvLyBydW4gdGhlIHNldHRlclxuXHR9XG5cblx0LyoqXG5cdCAqIERlY3JlbWVudHMgdGhlIHZhbHVlIGJ5IHRoZSBzdGVwIHZhbHVlLCBvciB0aGUgc3RlcCB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBgbXVsdGlwbGllcmAgYXJndW1lbnQuXG5cdCAqXG5cdCAqIEBhcmd1bWVudCBtdWx0aXBsaWVyIERlZmF1bHRzIHRvIGAxYCwgbXVsdGlwbGllZCB3aXRoIHRoZSBzdGVwIHZhbHVlLlxuXHQgKi9cblx0ZGVjcmVtZW50VmFsdWUobXVsdGlwbGllciA9IDEsIGluZGV4ID0gMCkge1xuXHRcdHRoaXMuX3ZhbHVlW2luZGV4XSA9IHRoaXMuX3ZhbHVlW2luZGV4XSAtICh0aGlzLnN0ZXAgKiBtdWx0aXBsaWVyKTtcblx0XHR0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTsgLy8gcnVuIHRoZSBzZXR0ZXJcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIGlmIHRoZSBzbGlkZXIgaXMgaW4gcmFuZ2UgbW9kZS5cblx0ICovXG5cdGlzUmFuZ2UoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlLmxlbmd0aCA+IDE7XG5cdH1cblxuXHQvKipcblx0ICogUmFuZ2UgbW9kZSBvbmx5LlxuXHQgKiBVcGRhdGVzIHRoZSB0cmFjayB3aWR0aCB0byBzcGFuIGZyb20gdGhlIGxvdyB0aHVtYiB0byB0aGUgaGlnaCB0aHVtYlxuXHQgKi9cblx0dXBkYXRlVHJhY2tSYW5nZVdpZHRoKCkge1xuXHRcdGNvbnN0IGZyYWN0aW9uID0gdGhpcy5nZXRGcmFjdGlvbkNvbXBsZXRlKHRoaXMuX3ZhbHVlWzBdKTtcblx0XHRjb25zdCBmcmFjdGlvbjIgPSB0aGlzLmdldEZyYWN0aW9uQ29tcGxldGUodGhpcy5fdmFsdWVbMV0pO1xuXHRcdHRoaXMuZmlsbGVkVHJhY2submF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7ZnJhY3Rpb24gKiAxMDB9JSwgLTUwJSkgJHt0aGlzLnNjYWxlWChmcmFjdGlvbjIgLSBmcmFjdGlvbil9YDtcblx0fVxuXG5cdC8qKiBDaGFuZ2UgaGFuZGxlciBmb3IgdGhlIG9wdGlvbmFsIGlucHV0ICovXG5cdG9uQ2hhbmdlKGV2ZW50LCBpbmRleCkge1xuXHRcdHRoaXMuX3ZhbHVlW2luZGV4XSA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlO1xuXHR9XG5cblx0LyoqIEhhbmRsZXMgY2xpY2tzIG9uIHRoZSByYW5nZSB0cmFjaywgYW5kIHNldHRpbmcgdGhlIHZhbHVlIHRvIGl0J3MgXCJyZWFsXCIgZXF1aXZhbGVudCAqL1xuXHRvbkNsaWNrKGV2ZW50KSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHsgcmV0dXJuOyB9XG5cdFx0Y29uc3QgdHJhY2tMZWZ0ID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0dGhpcy5fdmFsdWVbMF0gPSB0aGlzLmNvbnZlcnRUb1ZhbHVlKGV2ZW50LmNsaWVudFggLSB0cmFja0xlZnQpO1xuXHRcdHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlO1xuXHR9XG5cblx0LyoqIEZvY3VzIGhhbmRsZXIgZm9yIHRoZSBvcHRpb25hbCBpbnB1dCAqL1xuXHRvbkZvY3VzKHt0YXJnZXR9KSB7XG5cdFx0dGFyZ2V0LnNlbGVjdCgpO1xuXHR9XG5cblx0LyoqIE1vdXNlIG1vdmUgaGFuZGxlci4gUmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoZSB2YWx1ZSBhbmQgdmlzdWFsIHNlbGVjdGlvbiBiYXNlZCBvbiBtb3VzZSBtb3ZlbWVudCAqL1xuXHRvbk1vdXNlTW92ZShldmVudCkge1xuXHRcdGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmlzTW91c2VEb3duKSB7IHJldHVybjsgfVxuXHRcdGNvbnN0IHRyYWNrID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0aWYgKFxuXHRcdFx0ZXZlbnQuY2xpZW50WCAtIHRyYWNrLmxlZnQgPD0gdHJhY2sud2lkdGhcblx0XHRcdCYmIGV2ZW50LmNsaWVudFggLSB0cmFjay5sZWZ0ID49IDBcblx0XHQpIHtcblx0XHRcdHZhbHVlID0gdGhpcy5jb252ZXJ0VG9WYWx1ZShldmVudC5jbGllbnRYIC0gdHJhY2subGVmdCk7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgdGhlIG1vdXNlIGlzIGJleW9uZCB0aGUgbWF4LCBzZXQgdGhlIHZhbHVlIHRvIGBtYXhgXG5cdFx0aWYgKGV2ZW50LmNsaWVudFggLSB0cmFjay5sZWZ0ID4gdHJhY2sud2lkdGgpIHtcblx0XHRcdHZhbHVlID0gdGhpcy5tYXg7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgdGhlIG1vdXNlIGlzIGJlbG93IHRoZSBtaW4sIHNldCB0aGUgdmFsdWUgdG8gYG1pbmBcblx0XHRpZiAoZXZlbnQuY2xpZW50WCAtIHRyYWNrLmxlZnQgPCAwKSB7XG5cdFx0XHR2YWx1ZSA9IHRoaXMubWluO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLl92YWx1ZVt0aGlzLl9mb2N1c2VkVGh1bWJJbmRleF0gPSB2YWx1ZTtcblx0XHRcdHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFbmFibGVzIHRoZSBgb25Nb3VzZU1vdmVgIGhhbmRsZXJcblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSB0aHVtYiBJZiB0cnVlIHRoZW4gYHRodW1iYCBpcyBjbGlja2VkIGRvd24sIG90aGVyd2lzZSBgdGh1bWIyYCBpcyBjbGlja2VkIGRvd24uXG5cdCAqL1xuXHRvbk1vdXNlRG93bihldmVudCwgaW5kZXggPSAwKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCkgeyByZXR1cm47IH1cblx0XHR0aGlzLl9mb2N1c2VkVGh1bWJJbmRleCA9IGluZGV4O1xuXHRcdHRoaXMudGh1bWJzLnRvQXJyYXkoKVtpbmRleF0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdHRoaXMuaXNNb3VzZURvd24gPSB0cnVlO1xuXHR9XG5cblx0LyoqIERpc2FibGVzIHRoZSBgb25Nb3VzZU1vdmVgIGhhbmRsZXIgKi9cblx0b25Nb3VzZVVwKCkge1xuXHRcdHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxscyBgaW5jcmVtZW50VmFsdWVgIGZvciBBcnJvd1JpZ2h0IGFuZCBBcnJvd1VwLCBgZGVjcmVtZW50VmFsdWVgIGZvciBBcnJvd0xlZnQgYW5kIEFycm93RG93bi5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSB0aHVtYiBJZiB0cnVlIHRoZW4gYHRodW1iYCBpcyBwcmVzc2VkIGRvd24sIG90aGVyd2lzZSBgdGh1bWIyYCBpcyBwcmVzc2VkIGRvd24uXG5cdCAqL1xuXHRvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4ID0gMCkge1xuXHRcdGlmICh0aGlzLmRpc2FibGVBcnJvd0tleXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbXVsdGlwbGllciA9IGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5zaGlmdE11bHRpcGxpZXIgOiAxO1xuXHRcdGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dMZWZ0XCIgfHwgZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiKSB7XG5cdFx0XHR0aGlzLmRlY3JlbWVudFZhbHVlKG11bHRpcGxpZXIsIGluZGV4KTtcblx0XHRcdHRoaXMudGh1bWJzLnRvQXJyYXkoKVtpbmRleF0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgfHwgZXZlbnQua2V5ID09PSBcIkFycm93VXBcIikge1xuXHRcdFx0dGhpcy5pbmNyZW1lbnRWYWx1ZShtdWx0aXBsaWVyLCBpbmRleCk7XG5cdFx0XHR0aGlzLnRodW1icy50b0FycmF5KClbaW5kZXhdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxuXG5cdC8qKiBHZXQgb3B0aW9uYWwgaW5wdXQgZmllbGRzICovXG5cdHByb3RlY3RlZCBnZXRJbnB1dHMoKTogSFRNTElucHV0RWxlbWVudFtdIHtcblx0XHRyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcImlucHV0Om5vdChbdHlwZT1yYW5nZV0pXCIpO1xuXHR9XG59XG4iXX0=
632
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksRUFHWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQ0c7QUFtR0gsTUFBTSxPQUFPLE1BQU07SUE4SWxCLFlBQ1csVUFBc0IsRUFDdEIsWUFBMEIsRUFDNUIsZUFBa0M7UUFGaEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUF4SDNDLGlDQUFpQztRQUN4QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBc0VsQiwrSEFBK0g7UUFDdEgsT0FBRSxHQUFHLFVBQVUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDekMsaUZBQWlGO1FBQ3hFLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLHlDQUF5QztRQUNoQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRzFCLGlFQUFpRTtRQUN4RCxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFjbEMsK0NBQStDO1FBQ3JDLGdCQUFXLEdBQW9DLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFHLElBQUksQ0FBQztRQU8vQyxZQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLGVBQWUsQ0FBQztRQUMxQyxlQUFVLEdB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Q0Q7NEpBTWEsR0FBRztzQkFBZixLQUFLO2dCQVVPLEdBQUc7c0JBQWYsS0FBSztnQkFXRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRU8sS0FBSztzQkFBakIsS0FBSztnQkFxRUcsRUFBRTtzQkFBVixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBYUksV0FBVztzQkFBcEIsTUFBTTtnQkFDOEIsU0FBUztzQkFBN0MsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBQ1gsTUFBTTtzQkFBN0IsWUFBWTt1QkFBQyxRQUFRO2dCQUVGLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDUSxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ0osS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRBZnRlclZpZXdJbml0LFxuXHRWaWV3Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGRyZW4sXG5cdFF1ZXJ5TGlzdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcblxuLyoqXG4gKiBVc2VkIHRvIHNlbGVjdCBmcm9tIHJhbmdlcyBvZiB2YWx1ZXMuIFtTZWUgaGVyZV0oaHR0cHM6Ly93d3cuY2FyYm9uZGVzaWduc3lzdGVtLmNvbS9jb21wb25lbnRzL3NsaWRlci91c2FnZSkgZm9yIHVzYWdlIGluZm9ybWF0aW9uLlxuICpcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIFRoZSBzaW1wbGVzdCBwb3NzaWJsZSBzbGlkZXIgdXNhZ2UgbG9va3Mgc29tZXRoaW5nIGxpa2U6XG4gKlxuICogYGBgaHRtbFxuICpcdDxjZHMtc2xpZGVyPjwvY2RzLXNsaWRlcj5cbiAqIGBgYFxuICpcbiAqIFRoYXQgd2lsbCByZW5kZXIgYSBzbGlkZXIgd2l0aG91dCBsYWJlbHMgb3IgYWx0ZXJuYXRpdmUgdmFsdWUgaW5wdXQuIExhYmVscyBjYW4gYmUgcHJvdmlkZWQgYnlcbiAqIGVsZW1lbnRzIHdpdGggYFttaW5MYWJlbF1gIGFuZCBgW21heExhYmVsXWAgYXR0cmlidXRlcywgYW5kIGFuIGBpbnB1dGAgKG1heSB1c2UgdGhlIGBpYm1JbnB1dGAgZGlyZWN0aXZlKSBjYW4gYmUgc3VwcGxpZWRcbiAqIGZvciB1c2UgYXMgYW4gYWx0ZXJuYXRpdmUgdmFsdWUgZmllbGQuXG4gKlxuICogZXg6XG4gKlxuICogYGBgaHRtbFxuICogPCEtLSBGdWxsIGV4YW1wbGUgLS0+XG4gKiA8Y2RzLXNsaWRlcj5cbiAqXHRcdDxzcGFuIG1pbkxhYmVsPjBHQjwvc3Bhbj5cbiAqXHRcdDxzcGFuIG1heExhYmVsPjEwMEdCPC9zcGFuPlxuICpcdFx0PGlucHV0Lz5cbiAqIDwvY2RzLXNsaWRlcj5cbiAqXG4gKiA8IS0tIHdpdGgganVzdCBhbiBpbnB1dCAtLT5cbiAqIDxjZHMtc2xpZGVyPlxuICpcdFx0PGlucHV0Lz5cbiAqIDwvY2RzLXNsaWRlcj5cbiAqXG4gKiA8IS0tIHdpdGgganVzdCBvbmUgbGFiZWwgLS0+XG4gKiA8Y2RzLXNsaWRlcj5cbiAqXHRcdDxzcGFuIG1heExhYmVsPk1heGltdW08L3NwYW4+XG4gKiA8L2Nkcy1zbGlkZXI+XG4gKiBgYGBcbiAqXG4gKiBTbGlkZXIgc3VwcG9ydHMgYE5nTW9kZWxgIGJ5IGRlZmF1bHQsIGFzIHdlbGwgYXMgdHdvIHdheSBiaW5kaW5nIHRvIHRoZSBgdmFsdWVgIGlucHV0LlxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtc2xpZGVyLS1hZHZhbmNlZClcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1zbGlkZXIsIGlibS1zbGlkZXJcIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uOyBlbHNlIHNrZWxldG9uVGVtcGxhdGVcIj5cblx0XHRcdDxsYWJlbFxuXHRcdFx0XHQqbmdJZj1cImxhYmVsXCJcblx0XHRcdFx0W2Zvcl09XCJpZFwiXG5cdFx0XHRcdFtpZF09XCJsYWJlbElkXCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxhYmVsXCJcblx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLWxhYmVsLS1kaXNhYmxlZCc6IGRpc2FibGVkfVwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUobGFiZWwpXCI+e3tsYWJlbH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUobGFiZWwpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9sYWJlbD5cblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlci1jb250YWluZXJcIj5cblx0XHRcdFx0PGxhYmVsIFtpZF09XCJib3R0b21SYW5nZUlkXCIgY2xhc3M9XCJjZHMtLXNsaWRlcl9fcmFuZ2UtbGFiZWxcIj5cblx0XHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbbWluTGFiZWxdXCI+PC9uZy1jb250ZW50PlxuXHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXNsaWRlclwiXG5cdFx0XHRcdFx0KGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLXNsaWRlci0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUmFuZ2UoKVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2xpZGVyX190aHVtYi13cmFwcGVyXCJcblx0XHRcdFx0XHRcdFx0W25nU3R5bGVdPVwie2luc2V0SW5saW5lU3RhcnQ6IGdldEZyYWN0aW9uQ29tcGxldGUodmFsdWUpICogMTAwICsgJyUnfVwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0I3RodW1ic1xuXHRcdFx0XHRcdFx0XHRcdHJvbGU9XCJzbGlkZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFtpZF09XCJpZFwiXG5cdFx0XHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RodW1iXCJcblx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHRcdFx0KGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiaXNSYW5nZSgpXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RodW1iLXdyYXBwZXJcIlxuXHRcdFx0XHRcdFx0IFtuZ1N0eWxlXT1cIntpbnNldElubGluZVN0YXJ0OiBnZXRGcmFjdGlvbkNvbXBsZXRlKHRodW1iKSAqIDEwMCArICclJ31cIlxuXHRcdFx0XHRcdFx0ICpuZ0Zvcj1cImxldCB0aHVtYiBvZiB2YWx1ZTsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tUaHVtYnNCeVwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0I3RodW1ic1xuXHRcdFx0XHRcdFx0XHRcdHJvbGU9XCJzbGlkZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFtpZF09XCJpZCArIChpID4gMCA/ICctJyArIGkgOiAnJylcIlxuXHRcdFx0XHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbElkXCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tc2xpZGVyX190aHVtYlwiXG5cdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHQobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgaSlcIlxuXHRcdFx0XHRcdFx0XHRcdChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIGkpXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0I3RyYWNrXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tc2xpZGVyX190cmFja1wiPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdCNmaWxsZWRUcmFja1xuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXNsaWRlcl9fZmlsbGVkLXRyYWNrXCI+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGlucHV0XG5cdFx0XHRcdFx0XHQjcmFuZ2Vcblx0XHRcdFx0XHRcdGFyaWEtbGFiZWw9XCJzbGlkZXJcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXNsaWRlcl9faW5wdXRcIlxuXHRcdFx0XHRcdFx0dHlwZT1cInJhbmdlXCJcblx0XHRcdFx0XHRcdFtzdGVwXT1cInN0ZXBcIlxuXHRcdFx0XHRcdFx0W21pbl09XCJtaW5cIlxuXHRcdFx0XHRcdFx0W21heF09XCJtYXhcIlxuXHRcdFx0XHRcdFx0W3ZhbHVlXT1cInZhbHVlLnRvU3RyaW5nKClcIj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxsYWJlbCBbaWRdPVwidG9wUmFuZ2VJZFwiIGNsYXNzPVwiY2RzLS1zbGlkZXJfX3JhbmdlLWxhYmVsXCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiW21heExhYmVsXVwiPjwvbmctY29udGVudD5cblx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiaW5wdXRcIj48L25nLWNvbnRlbnQ+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblxuXHRcdDxuZy10ZW1wbGF0ZSAjc2tlbGV0b25UZW1wbGF0ZT5cblx0XHRcdDxsYWJlbCAqbmdJZj1cImxhYmVsXCIgY2xhc3M9XCJjZHMtLWxhYmVsIGNkcy0tc2tlbGV0b25cIj48L2xhYmVsPlxuXHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2xpZGVyLWNvbnRhaW5lciBjZHMtLXNrZWxldG9uXCI+XG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1zbGlkZXJfX3JhbmdlLWxhYmVsXCI+PC9zcGFuPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zbGlkZXJcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1zbGlkZXJfX3RodW1iXCI+PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tc2xpZGVyX190cmFja1wiPjwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXNsaWRlcl9fZmlsbGVkLXRyYWNrXCI+PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tc2xpZGVyX19yYW5nZS1sYWJlbFwiPjwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IFNsaWRlcixcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblx0LyoqIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcyAqL1xuXHRwcml2YXRlIHN0YXRpYyBjb3VudCA9IDA7XG5cblx0LyoqIFRoZSBsb3dlciBib3VuZCBvZiBvdXIgcmFuZ2UgKi9cblx0QElucHV0KCkgc2V0IG1pbih2KSB7XG5cdFx0aWYgKCF2KSB7IHJldHVybjsgfVxuXHRcdHRoaXMuX21pbiA9IHY7XG5cdFx0Ly8gZm9yY2UgdGhlIGNvbXBvbmVudCB0byB1cGRhdGVcblx0XHR0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTtcblx0fVxuXHRnZXQgbWluKCkge1xuXHRcdHJldHVybiB0aGlzLl9taW47XG5cdH1cblx0LyoqIFRoZSB1cHBlciBib3VuZCBvZiBvdXIgcmFuZ2UgKi9cblx0QElucHV0KCkgc2V0IG1heCh2KSB7XG5cdFx0aWYgKCF2KSB7IHJldHVybjsgfVxuXHRcdHRoaXMuX21heCA9IHY7XG5cdFx0Ly8gZm9yY2UgdGhlIGNvbXBvbmVudCB0byB1cGRhdGVcblx0XHR0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTtcblx0fVxuXG5cdGdldCBtYXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX21heDtcblx0fVxuXHQvKiogVGhlIGludGVydmFsIGZvciBvdXIgcmFuZ2UgKi9cblx0QElucHV0KCkgc3RlcCA9IDE7XG5cdC8qKiBTZXQgdGhlIGluaXRpYWwgdmFsdWUuIEF2YWlsYWJsZSBmb3IgdHdvIHdheSBiaW5kaW5nICovXG5cdEBJbnB1dCgpIHNldCB2YWx1ZSh2KSB7XG5cdFx0aWYgKCF2KSB7XG5cdFx0XHR2ID0gW3RoaXMubWluXTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHYgPSBbTnVtYmVyKHYpXTtcblx0XHR9XG5cblx0XHRpZiAodlswXSA8IHRoaXMubWluKSB7XG5cdFx0XHR2WzBdID0gdGhpcy5taW47XG5cdFx0fVxuXG5cdFx0aWYgKHZbMF0gPiB0aGlzLm1heCkge1xuXHRcdFx0dlswXSA9IHRoaXMubWF4O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmlzUmFuZ2UoKSkge1xuXHRcdFx0aWYgKHRoaXMuX3ByZXZpb3VzVmFsdWVbMF0gIT09IHZbMF0pIHsgLy8gbGVmdCBtb3ZlZFxuXHRcdFx0XHRpZiAodlswXSA+IHZbMV0gLSB0aGlzLnN0ZXApIHtcblx0XHRcdFx0XHQvLyBzdG9wIHRoZSBsZWZ0IGhhbmRsZSBpZiBzdXJwYXNzaW5nIHRoZSByaWdodCBvbmVcblx0XHRcdFx0XHR2WzBdID0gdlsxXSAtIHRoaXMuc3RlcDtcblx0XHRcdFx0fSBlbHNlIGlmICh2WzBdID4gdGhpcy5tYXgpIHtcblx0XHRcdFx0XHR2WzBdID0gdGhpcy5tYXg7XG5cdFx0XHRcdH0gZWxzZSBpZiAodlswXSA8IHRoaXMubWluKSB7XG5cdFx0XHRcdFx0dlswXSA9IHRoaXMubWluO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9wcmV2aW91c1ZhbHVlWzFdICE9PSB2WzFdKSB7IC8vIHJpZ2h0IG1vdmVkXG5cdFx0XHRcdGlmICh2WzFdID4gdGhpcy5tYXgpIHtcblx0XHRcdFx0XHR2WzFdID0gdGhpcy5tYXg7XG5cdFx0XHRcdH0gZWxzZSBpZiAodlsxXSA8IHRoaXMuX3ZhbHVlWzBdICsgdGhpcy5zdGVwKSB7XG5cdFx0XHRcdFx0Ly8gc3RvcCB0aGUgcmlnaHQgaGFuZGxlIGlmIHN1cnBhc3NpbmcgdGhlIGxlZnQgb25lXG5cdFx0XHRcdFx0dlsxXSA9IHRoaXMuX3ZhbHVlWzBdICsgdGhpcy5zdGVwO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHZbMV0gPCB0aGlzLm1pbikge1xuXHRcdFx0XHRcdHZbMV0gPSB0aGlzLm1pbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuX3ByZXZpb3VzVmFsdWUgPSBbLi4udGhpcy5fdmFsdWVdOyAvLyBzdG9yZSBhIGNvcHksIGVuYWJsZSBkZXRlY3Rpb24gd2hpY2ggaGFuZGxlIG1vdmVkXG5cdFx0dGhpcy5fdmFsdWUgPSBbLi4udl07IC8vIHRyaWdnZXJzIGNoYW5nZSBkZXRlY3Rpb24gd2hlbiBuZ01vZGVsIHZhbHVlIGlzIGFuIGFycmF5IChmb3IgcmFuZ2UpXG5cblx0XHRpZiAodGhpcy5pc1JhbmdlKCkgJiYgdGhpcy5maWxsZWRUcmFjaykge1xuXHRcdFx0dGhpcy51cGRhdGVUcmFja1JhbmdlV2lkdGgoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuZmlsbGVkVHJhY2spIHtcblx0XHRcdHRoaXMuZmlsbGVkVHJhY2submF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKDAlLCAtNTAlKSAke3RoaXMuc2NhbGVYKHRoaXMuZ2V0RnJhY3Rpb25Db21wbGV0ZSh2WzBdKSl9YDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pbnB1dHMgJiYgdGhpcy5pbnB1dHMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcblx0XHRcdFx0aW5wdXQudmFsdWUgPSB0aGlzLl92YWx1ZVtpbmRleF0udG9TdHJpbmcoKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlVG9FbWl0ID0gdGhpcy5pc1JhbmdlKCkgPyB2IDogdlswXTtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh2YWx1ZVRvRW1pdCk7XG5cdFx0dGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlVG9FbWl0KTtcblx0fVxuXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRpZiAodGhpcy5pc1JhbmdlKCkpIHtcblx0XHRcdHJldHVybiB0aGlzLl92YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlWzBdO1xuXHR9XG5cblx0LyoqIEJhc2UgSUQgZm9yIHRoZSBzbGlkZXIuIFRoZSBtaW4gYW5kIG1heCBsYWJlbHMgZ2V0IElEcyBgJHt0aGlzLmlkfS1ib3R0b20tcmFuZ2VgIGFuZCBgJHt0aGlzLmlkfS10b3AtcmFuZ2VgIHJlc3BlY3RpdmVseSAqL1xuXHRASW5wdXQoKSBpZCA9IGBzbGlkZXItJHtTbGlkZXIuY291bnQrK31gO1xuXHQvKiogVmFsdWUgdXNlZCB0byBcIm11bHRpcGx5XCIgdGhlIGBzdGVwYCB3aGVuIHVzaW5nIGFycm93IGtleXMgdG8gc2VsZWN0IHZhbHVlcyAqL1xuXHRASW5wdXQoKSBzaGlmdE11bHRpcGxpZXIgPSA0O1xuXHQvKiogU2V0IHRvIGB0cnVlYCBmb3IgYSBsb2FkaW5nIHNsaWRlciAqL1xuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXHQvKiogU2V0cyB0aGUgdGV4dCBpbnNpZGUgdGhlIGBsYWJlbGAgdGFnICovXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKiogU2V0IHRvIGB0cnVlYCBmb3IgYSBzbGlkZXIgd2l0aG91dCBhcnJvdyBrZXkgaW50ZXJhY3Rpb25zLiAqL1xuXHRASW5wdXQoKSBkaXNhYmxlQXJyb3dLZXlzID0gZmFsc2U7XG5cdC8qKiBEaXNhYmxlcyB0aGUgcmFuZ2UgdmlzdWFsbHkgYW5kIGZ1bmN0aW9uYWxseSAqL1xuXHRASW5wdXQoKSBzZXQgZGlzYWJsZWQodikge1xuXHRcdHRoaXMuX2Rpc2FibGVkID0gdjtcblx0XHQvLyBmb3Igc29tZSByZWFzb24gYHRoaXMuaW5wdXRgIG5ldmVyIGV4aXN0cyBoZXJlLCBzbyB3ZSBoYXZlIHRvIHF1ZXJ5IGZvciBpdCBoZXJlIHRvb1xuXHRcdGNvbnN0IGlucHV0cyA9IHRoaXMuZ2V0SW5wdXRzKCk7XG5cdFx0aWYgKGlucHV0cyAmJiBpbnB1dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0aW5wdXRzLmZvckVhY2goaW5wdXQgPT4gaW5wdXQuZGlzYWJsZWQgPSB2KTtcblx0XHR9XG5cdH1cblxuXHRnZXQgZGlzYWJsZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuXHR9XG5cdC8qKiBFbWl0cyBldmVyeSB0aW1lIGEgbmV3IHZhbHVlIGlzIHNlbGVjdGVkICovXG5cdEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bWJlcltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1mb3JtLWl0ZW1cIikgaG9zdENsYXNzID0gdHJ1ZTtcblx0QFZpZXdDaGlsZHJlbihcInRodW1ic1wiKSB0aHVtYnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuXHRAVmlld0NoaWxkKFwidHJhY2tcIikgdHJhY2s6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoXCJmaWxsZWRUcmFja1wiKSBmaWxsZWRUcmFjazogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZChcInJhbmdlXCIpIHJhbmdlOiBFbGVtZW50UmVmO1xuXG5cdHB1YmxpYyBsYWJlbElkID0gYCR7dGhpcy5pZH0tbGFiZWxgO1xuXHRwdWJsaWMgYm90dG9tUmFuZ2VJZCA9IGAke3RoaXMuaWR9LWJvdHRvbS1yYW5nZWA7XG5cdHB1YmxpYyB0b3BSYW5nZUlkID0gYCR7dGhpcy5pZH0tdG9wLXJhbmdlYDtcblx0cHVibGljIGZyYWN0aW9uQ29tcGxldGUgPSAwO1xuXG5cdHByb3RlY3RlZCBpc01vdXNlRG93biA9IGZhbHNlO1xuXHRwcm90ZWN0ZWQgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W107XG5cdHByb3RlY3RlZCBfbWluID0gMDtcblx0cHJvdGVjdGVkIF9tYXggPSAxMDA7XG5cdHByb3RlY3RlZCBfdmFsdWUgPSBbdGhpcy5taW5dO1xuXHRwcm90ZWN0ZWQgX3ByZXZpb3VzVmFsdWUgPSBbdGhpcy5taW5dO1xuXHRwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG5cdHByb3RlY3RlZCBfZm9jdXNlZFRodW1iSW5kZXggPSAwO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuXHRcdHByb3RlY3RlZCBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcblx0XHRwcml2YXRlIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWZcblx0KSB7fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHQvLyBiaW5kIG1vdXNlbW92ZSBhbmQgbW91c2V1cCB0byB0aGUgZG9jdW1lbnQgc28gd2UgZG9uJ3QgaGF2ZSBpc3N1ZXMgdHJhY2tpbmcgdGhlIG1vdXNlXG5cdFx0dGhpcy5ldmVudFNlcnZpY2Uub25Eb2N1bWVudChcIm1vdXNlbW92ZVwiLCB0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcykpO1xuXHRcdHRoaXMuZXZlbnRTZXJ2aWNlLm9uRG9jdW1lbnQoXCJtb3VzZXVwXCIsIHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcykpO1xuXG5cdFx0Ly8gYXBwbHkgYW55IHZhbHVlcyB3ZSBnb3QgZnJvbSBiZWZvcmUgdGhlIHZpZXcgaW5pdGlhbGl6ZWRcblx0XHR0aGlzLmNoYW5nZURldGVjdGlvbi5kZXRlY3RDaGFuZ2VzKCk7XG5cblx0XHQvLyBUT0RPOiBvbnRvdWNoc3RhcnQvb250b3VjaG1vdmUvb250b3VjaGVuZFxuXG5cdFx0Ly8gc2V0IHVwIHRoZSBvcHRpb25hbCBpbnB1dFxuXHRcdHRoaXMuaW5wdXRzID0gdGhpcy5nZXRJbnB1dHMoKTtcblx0XHRpZiAodGhpcy5pbnB1dHMgJiYgdGhpcy5pbnB1dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGlucHV0LnR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0XHRpbnB1dC5jbGFzc0xpc3QuYWRkKFwiY2RzLS1zbGlkZXItdGV4dC1pbnB1dFwiKTtcblx0XHRcdFx0aW5wdXQuY2xhc3NMaXN0LmFkZChcImNkcy0tdGV4dC1pbnB1dFwiKTtcblx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbGxlZGJ5XCIsIGAke3RoaXMuYm90dG9tUmFuZ2VJZH0gJHt0aGlzLnRvcFJhbmdlSWR9YCk7XG5cblx0XHRcdFx0aW5wdXQudmFsdWUgPSBpbmRleCA8IHRoaXMuX3ZhbHVlLmxlbmd0aCA/IHRoaXMuX3ZhbHVlW2luZGV4XS50b1N0cmluZygpIDogdGhpcy5tYXgudG9TdHJpbmcoKTtcblx0XHRcdFx0Ly8gYmluZCBldmVudHMgb24gb3VyIG9wdGlvbmFsIGlucHV0XG5cdFx0XHRcdHRoaXMuZXZlbnRTZXJ2aWNlLm9uKGlucHV0LCBcImNoYW5nZVwiLCBldmVudCA9PiB0aGlzLm9uQ2hhbmdlKGV2ZW50LCBpbmRleCkpO1xuXG5cdFx0XHRcdGlmIChpbmRleCA9PT0gMCkge1xuXHRcdFx0XHRcdHRoaXMuZXZlbnRTZXJ2aWNlLm9uKGlucHV0LCBcImZvY3VzXCIsIHRoaXMub25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0dHJhY2tUaHVtYnNCeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcblx0XHRyZXR1cm4gaW5kZXg7XG5cdH1cblxuXHQvKiogU2VuZCBjaGFuZ2VzIGJhY2sgdG8gdGhlIG1vZGVsICovXG5cdHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuXHQvKiogUmVnaXN0ZXIgYSBjaGFuZ2UgcHJvcGFnYXRpb24gZnVuY3Rpb24gZm9yIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgKi9cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcblx0fVxuXG5cdC8qKiBDYWxsYmFjayB0byBub3RpZnkgdGhlIG1vZGVsIHdoZW4gb3VyIGlucHV0IGhhcyBiZWVuIHRvdWNoZWQgKi9cblx0b25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7IH07XG5cblx0LyoqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gbm90aWZ5IHdoZW4gb3VyIGlucHV0IGhhcyBiZWVuIHRvdWNoZWQgKi9cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkID0gZm47XG5cdH1cblxuXHQvKiogUmVjZWl2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBtb2RlbCAqL1xuXHR3cml0ZVZhbHVlKHY6IGFueSkge1xuXHRcdHRoaXMudmFsdWUgPSB2O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGFtb3VudCBvZiBcImNvbXBsZXRlbmVzc1wiIG9mIGEgdmFsdWUgYXMgYSBmcmFjdGlvbiBvZiB0aGUgdG90YWwgdHJhY2sgd2lkdGhcblx0ICovXG5cdGdldEZyYWN0aW9uQ29tcGxldGUodmFsdWU6IG51bWJlcikge1xuXHRcdGlmICghdGhpcy50cmFjaykge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdHJhY2tXaWR0aCA9IHRoaXMudHJhY2submF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblx0XHRyZXR1cm4gdGhpcy5jb252ZXJ0VG9QeCh2YWx1ZSkgLyB0cmFja1dpZHRoO1xuXHR9XG5cblx0LyoqIEhlbHBlciBmdW5jdGlvbiB0byByZXR1cm4gdGhlIENTUyB0cmFuc2Zvcm0gYHNjYWxlWGAgZnVuY3Rpb24gKi9cblx0c2NhbGVYKGNvbXBsZXRlKSB7XG5cdFx0cmV0dXJuIGBzY2FsZVgoJHtjb21wbGV0ZX0pYDtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIGdpdmVuIHB4IHZhbHVlIHRvIGEgXCJyZWFsXCIgdmFsdWUgaW4gb3VyIHJhbmdlICovXG5cdGNvbnZlcnRUb1ZhbHVlKHB4QW1vdW50KSB7XG5cdFx0Ly8gYmFzaWMgY29uY2VwdCBib3Jyb3dlZCBmcm9tIGNhcmJvbi1jb21wb25lbnRzXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2NhcmJvbi1kZXNpZ24tc3lzdGVtL2NhcmJvbi9ibG9iLzQzYmYzYWJkYzJmOGJkYWEzOGFhODRlMGY3MzNhZGRlMWUxZTg4OTQvc3JjL2NvbXBvbmVudHMvc2xpZGVyL3NsaWRlci5qcyNMMTQ3LUwxNTFcblx0XHRjb25zdCByYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47XG5cdFx0Y29uc3QgdHJhY2tXaWR0aCA9IHRoaXMudHJhY2submF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblx0XHRjb25zdCB1bnJvdW5kZWQgPSBweEFtb3VudCAvIHRyYWNrV2lkdGg7XG5cdFx0Y29uc3Qgcm91bmRlZCA9IE1hdGgucm91bmQoKHJhbmdlICogdW5yb3VuZGVkKSAvIHRoaXMuc3RlcCkgKiB0aGlzLnN0ZXA7XG5cdFx0cmV0dXJuIHJvdW5kZWQgKyB0aGlzLm1pbjtcblx0fVxuXG5cdC8qKiBDb252ZXJ0cyBhIGdpdmVuIFwicmVhbFwiIHZhbHVlIHRvIGEgcHggdmFsdWUgd2UgY2FuIHVwZGF0ZSB0aGUgdmlldyB3aXRoICovXG5cdGNvbnZlcnRUb1B4KHZhbHVlKSB7XG5cdFx0aWYgKCF0aGlzLnRyYWNrKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRjb25zdCB0cmFja1dpZHRoID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXHRcdGlmICh2YWx1ZSA+PSB0aGlzLm1heCkge1xuXHRcdFx0cmV0dXJuIHRyYWNrV2lkdGg7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlIDw9IHRoaXMubWluKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBhY2NvdW50IGZvciB2YWx1ZSBzaGlmdGluZyBieSBzdWJ0cmFjdGluZyBtaW4gZnJvbSB2YWx1ZSBhbmQgbWF4XG5cdFx0cmV0dXJuIE1hdGgucm91bmQodHJhY2tXaWR0aCAqICgodmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5tYXggLSB0aGlzLm1pbikpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmNyZW1lbnRzIHRoZSB2YWx1ZSBieSB0aGUgc3RlcCB2YWx1ZSwgb3IgdGhlIHN0ZXAgdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgYG11bHRpcGxpZXJgIGFyZ3VtZW50LlxuXHQgKlxuXHQgKiBAYXJndW1lbnQgbXVsdGlwbGllciBEZWZhdWx0cyB0byBgMWAsIG11bHRpcGxpZWQgd2l0aCB0aGUgc3RlcCB2YWx1ZS5cblx0ICovXG5cdGluY3JlbWVudFZhbHVlKG11bHRpcGxpZXIgPSAxLCBpbmRleCA9IDApIHtcblx0XHR0aGlzLl92YWx1ZVtpbmRleF0gPSB0aGlzLl92YWx1ZVtpbmRleF0gKyAodGhpcy5zdGVwICogbXVsdGlwbGllcik7XG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7IC8vIHJ1biB0aGUgc2V0dGVyXG5cdH1cblxuXHQvKipcblx0ICogRGVjcmVtZW50cyB0aGUgdmFsdWUgYnkgdGhlIHN0ZXAgdmFsdWUsIG9yIHRoZSBzdGVwIHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIGBtdWx0aXBsaWVyYCBhcmd1bWVudC5cblx0ICpcblx0ICogQGFyZ3VtZW50IG11bHRpcGxpZXIgRGVmYXVsdHMgdG8gYDFgLCBtdWx0aXBsaWVkIHdpdGggdGhlIHN0ZXAgdmFsdWUuXG5cdCAqL1xuXHRkZWNyZW1lbnRWYWx1ZShtdWx0aXBsaWVyID0gMSwgaW5kZXggPSAwKSB7XG5cdFx0dGhpcy5fdmFsdWVbaW5kZXhdID0gdGhpcy5fdmFsdWVbaW5kZXhdIC0gKHRoaXMuc3RlcCAqIG11bHRpcGxpZXIpO1xuXHRcdHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlOyAvLyBydW4gdGhlIHNldHRlclxuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIHNsaWRlciBpcyBpbiByYW5nZSBtb2RlLlxuXHQgKi9cblx0aXNSYW5nZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fdmFsdWUubGVuZ3RoID4gMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSYW5nZSBtb2RlIG9ubHkuXG5cdCAqIFVwZGF0ZXMgdGhlIHRyYWNrIHdpZHRoIHRvIHNwYW4gZnJvbSB0aGUgbG93IHRodW1iIHRvIHRoZSBoaWdoIHRodW1iXG5cdCAqL1xuXHR1cGRhdGVUcmFja1JhbmdlV2lkdGgoKSB7XG5cdFx0Y29uc3QgZnJhY3Rpb24gPSB0aGlzLmdldEZyYWN0aW9uQ29tcGxldGUodGhpcy5fdmFsdWVbMF0pO1xuXHRcdGNvbnN0IGZyYWN0aW9uMiA9IHRoaXMuZ2V0RnJhY3Rpb25Db21wbGV0ZSh0aGlzLl92YWx1ZVsxXSk7XG5cdFx0dGhpcy5maWxsZWRUcmFjay5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtmcmFjdGlvbiAqIDEwMH0lLCAtNTAlKSAke3RoaXMuc2NhbGVYKGZyYWN0aW9uMiAtIGZyYWN0aW9uKX1gO1xuXHR9XG5cblx0LyoqIENoYW5nZSBoYW5kbGVyIGZvciB0aGUgb3B0aW9uYWwgaW5wdXQgKi9cblx0b25DaGFuZ2UoZXZlbnQsIGluZGV4KSB7XG5cdFx0dGhpcy5fdmFsdWVbaW5kZXhdID0gTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyBjbGlja3Mgb24gdGhlIHNsaWRlciwgYW5kIHNldHRpbmcgdGhlIHZhbHVlIHRvIGl0J3MgXCJyZWFsXCIgZXF1aXZhbGVudC5cblx0ICogV2lsbCBhc3NpZ24gdGhlIHZhbHVlIHRvIHRoZSBjbG9zZXN0IHRodW1iIGlmIGluIHJhbmdlIG1vZGUuXG5cdCAqICovXG5cdG9uQ2xpY2soZXZlbnQpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCkgeyByZXR1cm47IH1cblx0XHRjb25zdCB0cmFja0xlZnQgPSB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRjb25zdCB0cmFja1ZhbHVlID0gdGhpcy5jb252ZXJ0VG9WYWx1ZShldmVudC5jbGllbnRYIC0gdHJhY2tMZWZ0KTtcblx0XHRpZiAodGhpcy5pc1JhbmdlKCkpIHtcblx0XHRcdGlmIChNYXRoLmFicyh0aGlzLl92YWx1ZVswXSAtIHRyYWNrVmFsdWUpIDwgTWF0aC5hYnModGhpcy5fdmFsdWVbMV0gLSB0cmFja1ZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLl92YWx1ZVswXSA9IHRyYWNrVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl92YWx1ZVsxXSA9IHRyYWNrVmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3ZhbHVlWzBdID0gdHJhY2tWYWx1ZTtcblx0XHR9XG5cblx0XHR0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTtcblx0fVxuXG5cdC8qKiBGb2N1cyBoYW5kbGVyIGZvciB0aGUgb3B0aW9uYWwgaW5wdXQgKi9cblx0b25Gb2N1cyh7dGFyZ2V0fSkge1xuXHRcdHRhcmdldC5zZWxlY3QoKTtcblx0fVxuXG5cdC8qKiBNb3VzZSBtb3ZlIGhhbmRsZXIuIFJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgdmFsdWUgYW5kIHZpc3VhbCBzZWxlY3Rpb24gYmFzZWQgb24gbW91c2UgbW92ZW1lbnQgKi9cblx0b25Nb3VzZU1vdmUoZXZlbnQpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5pc01vdXNlRG93bikgeyByZXR1cm47IH1cblx0XHRjb25zdCB0cmFjayA9IHRoaXMudHJhY2submF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdGxldCB2YWx1ZTtcblxuXHRcdGlmIChcblx0XHRcdGV2ZW50LmNsaWVudFggLSB0cmFjay5sZWZ0IDw9IHRyYWNrLndpZHRoXG5cdFx0XHQmJiBldmVudC5jbGllbnRYIC0gdHJhY2subGVmdCA+PSAwXG5cdFx0KSB7XG5cdFx0XHR2YWx1ZSA9IHRoaXMuY29udmVydFRvVmFsdWUoZXZlbnQuY2xpZW50WCAtIHRyYWNrLmxlZnQpO1xuXHRcdH1cblxuXHRcdC8vIGlmIHRoZSBtb3VzZSBpcyBiZXlvbmQgdGhlIG1heCwgc2V0IHRoZSB2YWx1ZSB0byBgbWF4YFxuXHRcdGlmIChldmVudC5jbGllbnRYIC0gdHJhY2subGVmdCA+IHRyYWNrLndpZHRoKSB7XG5cdFx0XHR2YWx1ZSA9IHRoaXMubWF4O1xuXHRcdH1cblxuXHRcdC8vIGlmIHRoZSBtb3VzZSBpcyBiZWxvdyB0aGUgbWluLCBzZXQgdGhlIHZhbHVlIHRvIGBtaW5gXG5cdFx0aWYgKGV2ZW50LmNsaWVudFggLSB0cmFjay5sZWZ0IDwgMCkge1xuXHRcdFx0dmFsdWUgPSB0aGlzLm1pbjtcblx0XHR9XG5cblx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fdmFsdWVbdGhpcy5fZm9jdXNlZFRodW1iSW5kZXhdID0gdmFsdWU7XG5cdFx0XHR0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRW5hYmxlcyB0aGUgYG9uTW91c2VNb3ZlYCBoYW5kbGVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gdGh1bWIgSWYgdHJ1ZSB0aGVuIGB0aHVtYmAgaXMgY2xpY2tlZCBkb3duLCBvdGhlcndpc2UgYHRodW1iMmAgaXMgY2xpY2tlZCBkb3duLlxuXHQgKi9cblx0b25Nb3VzZURvd24oZXZlbnQsIGluZGV4ID0gMCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHsgcmV0dXJuOyB9XG5cdFx0dGhpcy5fZm9jdXNlZFRodW1iSW5kZXggPSBpbmRleDtcblx0XHR0aGlzLnRodW1icy50b0FycmF5KClbaW5kZXhdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR0aGlzLmlzTW91c2VEb3duID0gdHJ1ZTtcblx0fVxuXG5cdC8qKiBEaXNhYmxlcyB0aGUgYG9uTW91c2VNb3ZlYCBoYW5kbGVyICovXG5cdG9uTW91c2VVcCgpIHtcblx0XHR0aGlzLmlzTW91c2VEb3duID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbHMgYGluY3JlbWVudFZhbHVlYCBmb3IgQXJyb3dSaWdodCBhbmQgQXJyb3dVcCwgYGRlY3JlbWVudFZhbHVlYCBmb3IgQXJyb3dMZWZ0IGFuZCBBcnJvd0Rvd24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gdGh1bWIgSWYgdHJ1ZSB0aGVuIGB0aHVtYmAgaXMgcHJlc3NlZCBkb3duLCBvdGhlcndpc2UgYHRodW1iMmAgaXMgcHJlc3NlZCBkb3duLlxuXHQgKi9cblx0b25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleCA9IDApIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlQXJyb3dLZXlzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG11bHRpcGxpZXIgPSBldmVudC5zaGlmdEtleSA/IHRoaXMuc2hpZnRNdWx0aXBsaWVyIDogMTtcblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkFycm93TGVmdFwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuXHRcdFx0dGhpcy5kZWNyZW1lbnRWYWx1ZShtdWx0aXBsaWVyLCBpbmRleCk7XG5cdFx0XHR0aGlzLnRodW1icy50b0FycmF5KClbaW5kZXhdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dSaWdodFwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpIHtcblx0XHRcdHRoaXMuaW5jcmVtZW50VmFsdWUobXVsdGlwbGllciwgaW5kZXgpO1xuXHRcdFx0dGhpcy50aHVtYnMudG9BcnJheSgpW2luZGV4XS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG5cdH1cblxuXHQvKiogR2V0IG9wdGlvbmFsIGlucHV0IGZpZWxkcyAqL1xuXHRwcm90ZWN0ZWQgZ2V0SW5wdXRzKCk6IEhUTUxJbnB1dEVsZW1lbnRbXSB7XG5cdFx0cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dDpub3QoW3R5cGU9cmFuZ2VdKVwiKTtcblx0fVxufVxuIl19