@untemps/react-vocal
Version:
React component and hook to initiate a SpeechRecognition session
2 lines • 308 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["react-vocal"]={},t.React,t.PropTypes)}(this,(function(t,e,n){"use strict";function r(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=r(e),o=r(n);function s(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function c(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function a(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?c(Object(n),!0).forEach((function(e){s(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function u(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var n=[],r=!0,i=!1,o=void 0;try{for(var s,c=t[Symbol.iterator]();!(r=(s=c.next()).done)&&(n.push(s.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return l(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var h=function(t,e,n){return function(t){var e=function(t){var e=Object.prototype,n=e.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},i=r.iterator||"@@iterator",o=r.asyncIterator||"@@asyncIterator",s=r.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,n){return t[e]=n}}function a(t,e,n,r){var i=e&&e.prototype instanceof h?e:h,o=Object.create(i.prototype),s=new _(r||[]);return o._invoke=function(t,e,n){var r="suspendedStart";return function(i,o){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===i)throw o;return L()}for(n.method=i,n.arg=o;;){var s=n.delegate;if(s){var c=w(s,n);if(c){if(c===l)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var a=u(t,e,n);if("normal"===a.type){if(r=n.done?"completed":"suspendedYield",a.arg===l)continue;return{value:a.arg,done:n.done}}"throw"===a.type&&(r="completed",n.method="throw",n.arg=a.arg)}}}(t,n,s),o}function u(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=a;var l={};function h(){}function f(){}function d(){}var p={};p[i]=function(){return this};var g=Object.getPrototypeOf,y=g&&g(g(E([])));y&&y!==e&&n.call(y,i)&&(p=y);var v=d.prototype=h.prototype=Object.create(p);function m(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){var r;this._invoke=function(i,o){function s(){return new e((function(r,s){!function r(i,o,s,c){var a=u(t[i],t,o);if("throw"!==a.type){var l=a.arg,h=l.value;return h&&"object"==typeof h&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){r("next",t,s,c)}),(function(t){r("throw",t,s,c)})):e.resolve(h).then((function(t){l.value=t,s(l)}),(function(t){return r("throw",t,s,c)}))}c(a.arg)}(i,o,r,s)}))}return r=r?r.then(s,s):s()}}function w(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,w(t,e),"throw"===e.method))return l;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=u(n,t.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,l;var i=r.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,l):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,l)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function _(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function E(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,o=function e(){for(;++r<t.length;)if(n.call(t,r))return e.value=t[r],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:L}}function L(){return{value:void 0,done:!0}}return f.prototype=v.constructor=d,d.constructor=f,f.displayName=c(d,s,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===f||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,c(t,s,"GeneratorFunction")),t.prototype=Object.create(v),t},t.awrap=function(t){return{__await:t}},m(b.prototype),b.prototype[o]=function(){return this},t.AsyncIterator=b,t.async=function(e,n,r,i,o){void 0===o&&(o=Promise);var s=new b(a(e,n,r,i),o);return t.isGeneratorFunction(n)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},m(v),c(v,s,"Generator"),v[i]=function(){return this},v.toString=function(){return"[object Generator]"},t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var r=e.pop();if(r in t)return n.value=r,n.done=!1,n}return n.done=!0,n}},t.values=E,_.prototype={constructor:_,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(S),!t)for(var e in this)"t"===e.charAt(0)&&n.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function r(n,r){return s.type="throw",s.arg=t,e.next=n,r&&(e.method="next",e.arg=void 0),!!r}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],s=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var c=n.call(o,"catchLoc"),a=n.call(o,"finallyLoc");if(c&&a){if(this.prev<o.catchLoc)return r(o.catchLoc,!0);if(this.prev<o.finallyLoc)return r(o.finallyLoc)}else if(c){if(this.prev<o.catchLoc)return r(o.catchLoc,!0)}else{if(!a)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return r(o.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=t,s.arg=e,o?(this.method="next",this.next=o.finallyLoc,l):this.complete(s)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),l},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),S(n),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;S(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:E(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function("r","regeneratorRuntime = r")(e)}}(n={path:void 0,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==e&&n.path)}},n.exports),n.exports}();function f(t,e,n,r,i,o,s){try{var c=t[o](s),a=c.value}catch(t){return void n(t)}c.done?e(a):Promise.resolve(a).then(r,i)}var d=function(t){return function(){var e=this,n=arguments;return new Promise((function(r,i){var o=t.apply(e,n);function s(t){f(o,r,i,s,c,"next",t)}function c(t){f(o,r,i,s,c,"throw",t)}s(void 0)}))}},p=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r},g=function(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t)){var n=[],r=!0,i=!1,o=void 0;try{for(var s,c=t[Symbol.iterator]();!(r=(s=c.next()).done)&&(n.push(s.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}}(t,e)||function(t,e){if(t){if("string"==typeof t)return p(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()};function y(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var v=function(t,e,n){return e&&y(t.prototype,e),n&&y(t,n),t},m=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},b=function(){return!!navigator.permissions},w=function(){return!!navigator.mediaDevices};function x(t,e,n,r,i,o,s){try{var c=t[o](s),a=c.value}catch(t){return void n(t)}c.done?e(a):Promise.resolve(a).then(r,i)}function S(t){return function(){var e=this,n=arguments;return new Promise((function(r,i){var o=t.apply(e,n);function s(t){x(o,r,i,s,c,"next",t)}function c(t){x(o,r,i,s,c,"throw",t)}s(void 0)}))}}function _(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t)){var n=[],r=!0,i=!1,o=void 0;try{for(var s,c=t[Symbol.iterator]();!(r=(s=c.next()).done)&&(n.push(s.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}}(t,e)||function(t,e){if(t){if("string"==typeof t)return E(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?E(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var L=function(){var t=S(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",new Promise(function(){var t=S(regeneratorRuntime.mark((function t(n,r){var i,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return b()||r(new DOMException("Navigator API: permissions not supported","NOT_SUPPORTED_ERR")),t.prev=1,t.next=4,navigator.permissions.query({name:e});case 4:i=t.sent,o=function t(e){i.removeEventListener("change",t),M(e.target.state,n,r)},i.addEventListener("change",o),M(i.state,n,r),t.next=13;break;case 10:t.prev=10,t.t0=t.catch(1),r(t.t0);case 13:case"end":return t.stop()}}),t,null,[[1,10]])})));return function(e,n){return t.apply(this,arguments)}}()));case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),M=function(t,e,n){if("denied"===t)n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));else e(t)},O=function(){var t=S(regeneratorRuntime.mark((function t(e,n){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",new Promise(function(){var t=S(regeneratorRuntime.mark((function t(r,i){var o,s,c;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return b()&&w()||i(new DOMException("Navigator API: permissions or Navigator API: mediaDevices not supported","NOT_SUPPORTED_ERR")),t.prev=1,t.t0=Promise,t.next=5,L(e);case 5:return t.t1=t.sent,t.next=8,navigator.mediaDevices.getUserMedia(n);case 8:return t.t2=t.sent,t.t3=[t.t1,t.t2],t.next=12,t.t0.all.call(t.t0,t.t3);case 12:o=t.sent,s=_(o,2),c=s[1],r(c),t.next=21;break;case 18:t.prev=18,t.t4=t.catch(1),i(t.t4);case 21:case"end":return t.stop()}}),t,null,[[1,18]])})));return function(e,n){return t.apply(this,arguments)}}()));case 1:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}();function k(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function j(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?k(Object(n),!0).forEach((function(e){m(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):k(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var A=function(){function t(e){var n=this;(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),m(this,"_instance",null),m(this,"_listeners",null);var r=t._resolveSpeechRecognition();if(!r)throw new DOMException("SpeechRecognition not supported","NOT_SUPPORTED_ERR");this._instance=new r,this._listeners={},Object.entries(j(j({},t.defaultOptions),e||{})).forEach((function(e){var r=g(e,2),i=r[0],o=r[1];if("grammars"===i&&!o){var s=t._resolveSpeechGrammarList();s&&(o=new s)}n._instance[i]=o}))}var e;return v(t,null,[{key:"isSupported",get:function(){return!!t._resolveSpeechRecognition()&&!!b()&&!!w()},set:function(t){throw new Error("You cannot set isSupported directly.")}}]),v(t,[{key:"start",value:(e=d(h.mark((function t(){var e;return h.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this._instance){t.next=14;break}return t.prev=1,t.next=4,O("microphone",{audio:!0});case 4:if(t.sent){t.next=7;break}throw new Error("Unable to retrieve the stream from media device");case 7:this._instance.start(),t.next=14;break;case 10:t.prev=10,t.t0=t.catch(1),(e=this._listeners.error)&&e(t.t0);case 14:return t.abrupt("return",this);case 15:case"end":return t.stop()}}),t,this,[[1,10]])}))),function(){return e.apply(this,arguments)})},{key:"stop",value:function(){return this._instance&&this._instance.stop(),this}},{key:"abort",value:function(){return this._instance&&this._instance.abort(),this}},{key:"addEventListener",value:function(e,n){var r=this;if(this._instance&&this._includesEventType(e)){this._listeners[e]&&this.removeEventListener(e);var i=function(i){var o=[];e===t.eventTypes.RESULT&&i.results&&i.results.length>0&&o.push(i.results[0][0].transcript),n&&n.apply(r,[i].concat(o))};this._instance.addEventListener(e,i),this._listeners[e]=i}return this}},{key:"removeEventListener",value:function(t){var e=this._listeners[t];return this._instance.removeEventListener(t,e),delete this._listeners[t],this}},{key:"cleanup",value:function(){var t=this;return this.stop(),Object.keys(this._listeners).forEach((function(e){return t.removeEventListener(e)})),this._instance=null,this}},{key:"_includesEventType",value:function(e){return!!Object.values(t.eventTypes).find((function(t){return t===e}))}},{key:"instance",get:function(){return this._instance},set:function(t){throw new Error("You cannot set instance directly.")}}],[{key:"_resolveSpeechRecognition",value:function(){return window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition}},{key:"_resolveSpeechGrammarList",value:function(){return window.SpeechGrammarList||window.webkitSpeechGrammarList||window.mozSpeechGrammarList||window.msSpeechGrammarList}}]),t}();m(A,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),m(A,"eventTypes",{AUDIO_END:"audioend",AUDIO_START:"audiostart",END:"end",ERROR:"error",NO_MATCH:"nomatch",RESULT:"result",SOUND_END:"soundend",SOUND_START:"soundstart",SPEECH_END:"speechend",SPEECH_START:"speechstart",START:"start"});var R=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"en-US",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=e.useRef(null);e.useEffect((function(){if(A.isSupported)return i.current=r||new A({lang:t,grammars:n}),function(){i.current.abort(),i.current.cleanup()}}),[t,n,r]);var o=e.useCallback((function(){i.current&&i.current.start()}),[]),s=e.useCallback((function(){i.current&&i.current.stop()}),[]),c=e.useCallback((function(){i.current&&i.current.abort()}),[]),a=e.useCallback((function(t,e){i.current&&i.current.addEventListener(t,e)}),[]),u=e.useCallback((function(t,e){i.current&&i.current.removeEventListener(t,e)}),[]),l=e.useCallback((function(){i.current&&i.current.cleanup()}),[]);return[i,{start:o,stop:s,abort:c,subscribe:a,unsubscribe:u,clean:l}]};function C(t){return Array.isArray?Array.isArray(t):"[object Array]"===D(t)}function I(t){return"string"==typeof t}function P(t){return"number"==typeof t}function N(t){return!0===t||!1===t||function(t){return T(t)&&null!==t}(t)&&"[object Boolean]"==D(t)}function T(t){return"object"==typeof t}function $(t){return null!=t}function F(t){return!t.trim().length}function D(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}const U=Object.prototype.hasOwnProperty;class G{constructor(t){this._keys=[],this._keyMap={};let e=0;t.forEach((t=>{let n=q(t);e+=n.weight,this._keys.push(n),this._keyMap[n.id]=n,e+=n.weight})),this._keys.forEach((t=>{t.weight/=e}))}get(t){return this._keyMap[t]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function q(t){let e=null,n=null,r=null,i=1;if(I(t)||C(t))r=t,e=z(t),n=K(t);else{if(!U.call(t,"name"))throw new Error((t=>`Missing ${t} property in key`)("name"));const o=t.name;if(r=o,U.call(t,"weight")&&(i=t.weight,i<=0))throw new Error((t=>`Property 'weight' in key '${t}' must be a positive integer`)(o));e=z(o),n=K(o)}return{path:e,id:n,weight:i,src:r}}function z(t){return C(t)?t:t.split(".")}function K(t){return C(t)?t.join("."):t}const V={useExtendedSearch:!1,getFn:function(t,e){let n=[],r=!1;const i=(t,e,o)=>{if($(t))if(e[o]){const s=t[e[o]];if(!$(s))return;if(o===e.length-1&&(I(s)||P(s)||N(s)))n.push(function(t){return null==t?"":function(t){if("string"==typeof t)return t;let e=t+"";return"0"==e&&1/t==-1/0?"-0":e}(t)}(s));else if(C(s)){r=!0;for(let t=0,n=s.length;t<n;t+=1)i(s[t],e,o+1)}else e.length&&i(s,e,o+1)}else n.push(t)};return i(t,I(e)?e.split("."):e,0),r?n:n[0]},ignoreLocation:!1,ignoreFieldNorm:!1};var W={isCaseSensitive:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(t,e)=>t.score===e.score?t.idx<e.idx?-1:1:t.score<e.score?-1:1,includeMatches:!1,findAllMatches:!1,minMatchCharLength:1,location:0,threshold:.6,distance:100,...V};const H=/[^ ]+/g;class Y{constructor({getFn:t=W.getFn}={}){this.norm=function(t=3){const e=new Map,n=Math.pow(10,t);return{get(t){const r=t.match(H).length;if(e.has(r))return e.get(r);const i=1/Math.sqrt(r),o=parseFloat(Math.round(i*n)/n);return e.set(r,o),o},clear(){e.clear()}}}(3),this.getFn=t,this.isCreated=!1,this.setIndexRecords()}setSources(t=[]){this.docs=t}setIndexRecords(t=[]){this.records=t}setKeys(t=[]){this.keys=t,this._keysMap={},t.forEach(((t,e)=>{this._keysMap[t.id]=e}))}create(){!this.isCreated&&this.docs.length&&(this.isCreated=!0,I(this.docs[0])?this.docs.forEach(((t,e)=>{this._addString(t,e)})):this.docs.forEach(((t,e)=>{this._addObject(t,e)})),this.norm.clear())}add(t){const e=this.size();I(t)?this._addString(t,e):this._addObject(t,e)}removeAt(t){this.records.splice(t,1);for(let e=t,n=this.size();e<n;e+=1)this.records[e].i-=1}getValueForItemAtKeyId(t,e){return t[this._keysMap[e]]}size(){return this.records.length}_addString(t,e){if(!$(t)||F(t))return;let n={v:t,i:e,n:this.norm.get(t)};this.records.push(n)}_addObject(t,e){let n={i:e,$:{}};this.keys.forEach(((e,r)=>{let i=this.getFn(t,e.path);if($(i))if(C(i)){let t=[];const e=[{nestedArrIndex:-1,value:i}];for(;e.length;){const{nestedArrIndex:n,value:r}=e.pop();if($(r))if(I(r)&&!F(r)){let e={v:r,i:n,n:this.norm.get(r)};t.push(e)}else C(r)&&r.forEach(((t,n)=>{e.push({nestedArrIndex:n,value:t})}))}n.$[r]=t}else if(!F(i)){let t={v:i,n:this.norm.get(i)};n.$[r]=t}})),this.records.push(n)}toJSON(){return{keys:this.keys,records:this.records}}}function B(t,e,{getFn:n=W.getFn}={}){const r=new Y({getFn:n});return r.setKeys(t.map(q)),r.setSources(e),r.create(),r}function J(t,{errors:e=0,currentLocation:n=0,expectedLocation:r=0,distance:i=W.distance,ignoreLocation:o=W.ignoreLocation}={}){const s=e/t.length;if(o)return s;const c=Math.abs(r-n);return i?s+c/i:c?1:s}const Q=32;function X(t,e,n,{location:r=W.location,distance:i=W.distance,threshold:o=W.threshold,findAllMatches:s=W.findAllMatches,minMatchCharLength:c=W.minMatchCharLength,includeMatches:a=W.includeMatches,ignoreLocation:u=W.ignoreLocation}={}){if(e.length>Q)throw new Error(`Pattern length exceeds max of ${Q}.`);const l=e.length,h=t.length,f=Math.max(0,Math.min(r,h));let d=o,p=f;const g=c>1||a,y=g?Array(h):[];let v;for(;(v=t.indexOf(e,p))>-1;){let t=J(e,{currentLocation:v,expectedLocation:f,distance:i,ignoreLocation:u});if(d=Math.min(t,d),p=v+l,g){let t=0;for(;t<l;)y[v+t]=1,t+=1}}p=-1;let m=[],b=1,w=l+h;const x=1<<l-1;for(let r=0;r<l;r+=1){let o=0,c=w;for(;o<c;){J(e,{errors:r,currentLocation:f+c,expectedLocation:f,distance:i,ignoreLocation:u})<=d?o=c:w=c,c=Math.floor((w-o)/2+o)}w=c;let a=Math.max(1,f-c+1),v=s?h:Math.min(f+c,h)+l,S=Array(v+2);S[v+1]=(1<<r)-1;for(let o=v;o>=a;o-=1){let s=o-1,c=n[t.charAt(s)];if(g&&(y[s]=+!!c),S[o]=(S[o+1]<<1|1)&c,r&&(S[o]|=(m[o+1]|m[o])<<1|1|m[o+1]),S[o]&x&&(b=J(e,{errors:r,currentLocation:s,expectedLocation:f,distance:i,ignoreLocation:u}),b<=d)){if(d=b,p=s,p<=f)break;a=Math.max(1,2*f-p)}}if(J(e,{errors:r+1,currentLocation:f,expectedLocation:f,distance:i,ignoreLocation:u})>d)break;m=S}const S={isMatch:p>=0,score:Math.max(.001,b)};if(g){const t=function(t=[],e=W.minMatchCharLength){let n=[],r=-1,i=-1,o=0;for(let s=t.length;o<s;o+=1){let s=t[o];s&&-1===r?r=o:s||-1===r||(i=o-1,i-r+1>=e&&n.push([r,i]),r=-1)}return t[o-1]&&o-r>=e&&n.push([r,o-1]),n}(y,c);t.length?a&&(S.indices=t):S.isMatch=!1}return S}function Z(t){let e={};for(let n=0,r=t.length;n<r;n+=1){const i=t.charAt(n);e[i]=(e[i]||0)|1<<r-n-1}return e}class tt{constructor(t,{location:e=W.location,threshold:n=W.threshold,distance:r=W.distance,includeMatches:i=W.includeMatches,findAllMatches:o=W.findAllMatches,minMatchCharLength:s=W.minMatchCharLength,isCaseSensitive:c=W.isCaseSensitive,ignoreLocation:a=W.ignoreLocation}={}){if(this.options={location:e,threshold:n,distance:r,includeMatches:i,findAllMatches:o,minMatchCharLength:s,isCaseSensitive:c,ignoreLocation:a},this.pattern=c?t:t.toLowerCase(),this.chunks=[],!this.pattern.length)return;const u=(t,e)=>{this.chunks.push({pattern:t,alphabet:Z(t),startIndex:e})},l=this.pattern.length;if(l>Q){let t=0;const e=l%Q,n=l-e;for(;t<n;)u(this.pattern.substr(t,Q),t),t+=Q;if(e){const t=l-Q;u(this.pattern.substr(t),t)}}else u(this.pattern,0)}searchIn(t){const{isCaseSensitive:e,includeMatches:n}=this.options;if(e||(t=t.toLowerCase()),this.pattern===t){let e={isMatch:!0,score:0};return n&&(e.indices=[[0,t.length-1]]),e}const{location:r,distance:i,threshold:o,findAllMatches:s,minMatchCharLength:c,ignoreLocation:a}=this.options;let u=[],l=0,h=!1;this.chunks.forEach((({pattern:e,alphabet:f,startIndex:d})=>{const{isMatch:p,score:g,indices:y}=X(t,e,f,{location:r+d,distance:i,threshold:o,findAllMatches:s,minMatchCharLength:c,includeMatches:n,ignoreLocation:a});p&&(h=!0),l+=g,p&&y&&(u=[...u,...y])}));let f={isMatch:h,score:h?l/this.chunks.length:1};return h&&n&&(f.indices=u),f}}class et{constructor(t){this.pattern=t}static isMultiMatch(t){return nt(t,this.multiRegex)}static isSingleMatch(t){return nt(t,this.singleRegex)}search(){}}function nt(t,e){const n=t.match(e);return n?n[1]:null}class rt extends et{constructor(t,{location:e=W.location,threshold:n=W.threshold,distance:r=W.distance,includeMatches:i=W.includeMatches,findAllMatches:o=W.findAllMatches,minMatchCharLength:s=W.minMatchCharLength,isCaseSensitive:c=W.isCaseSensitive,ignoreLocation:a=W.ignoreLocation}={}){super(t),this._bitapSearch=new tt(t,{location:e,threshold:n,distance:r,includeMatches:i,findAllMatches:o,minMatchCharLength:s,isCaseSensitive:c,ignoreLocation:a})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(t){return this._bitapSearch.searchIn(t)}}class it extends et{constructor(t){super(t)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(t){let e,n=0;const r=[],i=this.pattern.length;for(;(e=t.indexOf(this.pattern,n))>-1;)n=e+i,r.push([e,n-1]);const o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}const ot=[class extends et{constructor(t){super(t)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(t){const e=t===this.pattern;return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}},it,class extends et{constructor(t){super(t)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(t){const e=t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}},class extends et{constructor(t){super(t)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(t){const e=!t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}},class extends et{constructor(t){super(t)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(t){const e=!t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}},class extends et{constructor(t){super(t)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(t){const e=t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[t.length-this.pattern.length,t.length-1]}}},class extends et{constructor(t){super(t)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(t){const e=-1===t.indexOf(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}},rt],st=ot.length,ct=/ +(?=([^\"]*\"[^\"]*\")*[^\"]*$)/;const at=new Set([rt.type,it.type]);class ut{constructor(t,{isCaseSensitive:e=W.isCaseSensitive,includeMatches:n=W.includeMatches,minMatchCharLength:r=W.minMatchCharLength,ignoreLocation:i=W.ignoreLocation,findAllMatches:o=W.findAllMatches,location:s=W.location,threshold:c=W.threshold,distance:a=W.distance}={}){this.query=null,this.options={isCaseSensitive:e,includeMatches:n,minMatchCharLength:r,findAllMatches:o,ignoreLocation:i,location:s,threshold:c,distance:a},this.pattern=e?t:t.toLowerCase(),this.query=function(t,e={}){return t.split("|").map((t=>{let n=t.trim().split(ct).filter((t=>t&&!!t.trim())),r=[];for(let t=0,i=n.length;t<i;t+=1){const i=n[t];let o=!1,s=-1;for(;!o&&++s<st;){const t=ot[s];let n=t.isMultiMatch(i);n&&(r.push(new t(n,e)),o=!0)}if(!o)for(s=-1;++s<st;){const t=ot[s];let n=t.isSingleMatch(i);if(n){r.push(new t(n,e));break}}}return r}))}(this.pattern,this.options)}static condition(t,e){return e.useExtendedSearch}searchIn(t){const e=this.query;if(!e)return{isMatch:!1,score:1};const{includeMatches:n,isCaseSensitive:r}=this.options;t=r?t:t.toLowerCase();let i=0,o=[],s=0;for(let r=0,c=e.length;r<c;r+=1){const c=e[r];o.length=0,i=0;for(let e=0,r=c.length;e<r;e+=1){const r=c[e],{isMatch:a,indices:u,score:l}=r.search(t);if(!a){s=0,i=0,o.length=0;break}if(i+=1,s+=l,n){const t=r.constructor.type;at.has(t)?o=[...o,...u]:o.push(u)}}if(i){let t={isMatch:!0,score:s/i};return n&&(t.indices=o),t}}return{isMatch:!1,score:1}}}const lt=[];function ht(t,e){for(let n=0,r=lt.length;n<r;n+=1){let r=lt[n];if(r.condition(t,e))return new r(t,e)}return new tt(t,e)}const ft="$and",dt="$or",pt="$path",gt="$val",yt=t=>!(!t[ft]&&!t[dt]),vt=t=>({[ft]:Object.keys(t).map((e=>({[e]:t[e]})))});function mt(t,e,{auto:n=!0}={}){const r=t=>{let i=Object.keys(t);const o=(t=>!!t[pt])(t);if(!o&&i.length>1&&!yt(t))return r(vt(t));if((t=>!C(t)&&T(t)&&!yt(t))(t)){const r=o?t[pt]:i[0],s=o?t[gt]:t[r];if(!I(s))throw new Error((t=>`Invalid value for key ${t}`)(r));const c={keyId:K(r),pattern:s};return n&&(c.searcher=ht(s,e)),c}let s={children:[],operator:i[0]};return i.forEach((e=>{const n=t[e];C(n)&&n.forEach((t=>{s.children.push(r(t))}))})),s};return yt(t)||(t=vt(t)),r(t)}function bt(t,e){const n=t.matches;e.matches=[],$(n)&&n.forEach((t=>{if(!$(t.indices)||!t.indices.length)return;const{indices:n,value:r}=t;let i={indices:n,value:r};t.key&&(i.key=t.key.src),t.idx>-1&&(i.refIndex=t.idx),e.matches.push(i)}))}function wt(t,e){e.score=t.score}class xt{constructor(t,e={},n){this.options={...W,...e},this.options.useExtendedSearch,this._keyStore=new G(this.options.keys),this.setCollection(t,n)}setCollection(t,e){if(this._docs=t,e&&!(e instanceof Y))throw new Error("Incorrect 'index' type");this._myIndex=e||B(this.options.keys,this._docs,{getFn:this.options.getFn})}add(t){$(t)&&(this._docs.push(t),this._myIndex.add(t))}remove(t=(()=>!1)){const e=[];for(let n=0,r=this._docs.length;n<r;n+=1){const i=this._docs[n];t(i,n)&&(this.removeAt(n),n-=1,r-=1,e.push(i))}return e}removeAt(t){this._docs.splice(t,1),this._myIndex.removeAt(t)}getIndex(){return this._myIndex}search(t,{limit:e=-1}={}){const{includeMatches:n,includeScore:r,shouldSort:i,sortFn:o,ignoreFieldNorm:s}=this.options;let c=I(t)?I(this._docs[0])?this._searchStringList(t):this._searchObjectList(t):this._searchLogical(t);return function(t,{ignoreFieldNorm:e=W.ignoreFieldNorm}){t.forEach((t=>{let n=1;t.matches.forEach((({key:t,norm:r,score:i})=>{const o=t?t.weight:null;n*=Math.pow(0===i&&o?Number.EPSILON:i,(o||1)*(e?1:r))})),t.score=n}))}(c,{ignoreFieldNorm:s}),i&&c.sort(o),P(e)&&e>-1&&(c=c.slice(0,e)),function(t,e,{includeMatches:n=W.includeMatches,includeScore:r=W.includeScore}={}){const i=[];return n&&i.push(bt),r&&i.push(wt),t.map((t=>{const{idx:n}=t,r={item:e[n],refIndex:n};return i.length&&i.forEach((e=>{e(t,r)})),r}))}(c,this._docs,{includeMatches:n,includeScore:r})}_searchStringList(t){const e=ht(t,this.options),{records:n}=this._myIndex,r=[];return n.forEach((({v:t,i:n,n:i})=>{if(!$(t))return;const{isMatch:o,score:s,indices:c}=e.searchIn(t);o&&r.push({item:t,idx:n,matches:[{score:s,value:t,norm:i,indices:c}]})})),r}_searchLogical(t){const e=mt(t,this.options),n=(t,e,r)=>{if(!t.children){const{keyId:n,searcher:i}=t,o=this._findMatches({key:this._keyStore.get(n),value:this._myIndex.getValueForItemAtKeyId(e,n),searcher:i});return o&&o.length?[{idx:r,item:e,matches:o}]:[]}switch(t.operator){case ft:{const i=[];for(let o=0,s=t.children.length;o<s;o+=1){const s=t.children[o],c=n(s,e,r);if(!c.length)return[];i.push(...c)}return i}case dt:{const i=[];for(let o=0,s=t.children.length;o<s;o+=1){const s=t.children[o],c=n(s,e,r);if(c.length){i.push(...c);break}}return i}}},r=this._myIndex.records,i={},o=[];return r.forEach((({$:t,i:r})=>{if($(t)){let s=n(e,t,r);s.length&&(i[r]||(i[r]={idx:r,item:t,matches:[]},o.push(i[r])),s.forEach((({matches:t})=>{i[r].matches.push(...t)})))}})),o}_searchObjectList(t){const e=ht(t,this.options),{keys:n,records:r}=this._myIndex,i=[];return r.forEach((({$:t,i:r})=>{if(!$(t))return;let o=[];n.forEach(((n,r)=>{o.push(...this._findMatches({key:n,value:t[r],searcher:e}))})),o.length&&i.push({idx:r,item:t,matches:o})})),i}_findMatches({key:t,value:e,searcher:n}){if(!$(e))return[];let r=[];if(C(e))e.forEach((({v:e,i:i,n:o})=>{if(!$(e))return;const{isMatch:s,score:c,indices:a}=n.searchIn(e);s&&r.push({score:c,key:t,value:e,idx:i,norm:o,indices:a})}));else{const{v:i,n:o}=e,{isMatch:s,score:c,indices:a}=n.searchIn(i);s&&r.push({score:c,key:t,value:i,norm:o,indices:a})}return r}}xt.version="6.4.6",xt.createIndex=B,xt.parseIndex=function(t,{getFn:e=W.getFn}={}){const{keys:n,records:r}=t,i=new Y({getFn:e});return i.setKeys(n),i.setIndexRecords(r),i},xt.config=W,xt.parseQuery=mt,function(...t){lt.push(...t)}(ut);var St=function(t){var e=t.color,n=t.activeColor,r=t.isActive;return i.default.createElement("svg",{"data-testid":"__icon-root__",xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},i.default.createElement("g",null,i.default.createElement("path",{"data-testid":"__icon-path__",fill:e,d:"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"}),r&&i.default.createElement("circle",{"data-testid":"__icon-active__",fill:n,cx:"16",cy:"4",r:"4"})))};St.propTypes={color:o.default.string,activeColor:o.default.string,isActive:o.default.bool},St.defaultProps={color:"black",activeColor:"red",isActive:!1};var _t=function(t){var n=t.children,r=t.commands,o=t.lang,c=t.grammars,l=t.timeout,h=t.ariaLabel,f=t.style,d=t.className,p=t.outlineStyle,g=t.onStart,y=t.onEnd,v=t.onSpeechStart,m=t.onSpeechEnd,b=t.onResult,w=t.onError,x=t.onNoMatch,S=t.__rsInstance,_=e.useRef(null),E=u(e.useState(!1),2),L=E[0],M=E[1],O=u(R(o,c,S),2)[1],k=O.start,j=O.stop,C=O.subscribe,I=O.unsubscribe,P=function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.4;t=t?null===(e=Object.entries(t))||void 0===e?void 0:e.reduce((function(t,e){var n=u(e,2),r=n[0],i=n[1];return s({},r.toLowerCase(),i)}),{}):{};var r=function(e){var r=new xt(Object.keys(t),{includeScore:!0,ignoreLocation:!0}).search(e).filter((function(t){return t.score<n}));if(null!=r&&r.length){var i,o,s=r[0].item.toLowerCase();return null===(i=(o=t)[s])||void 0===i?void 0:i.call(o,e)}return null};return r}(r),N=function t(e){D(),G(),I("start",V),I("end",t),I("speechstart",W),I("speechend",H),I("result",Y),I("error",B),I("nomatch",J),y&&y(e)},T=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=e.useRef(-1),i=e.useCallback((function(){clearTimeout(r.current),r.current=-1}),[]),o=e.useCallback((function(){i(),r.current=setTimeout(t,n)}),[t,n,i]);return e.useEffect((function(){return i}),[i]),[o,i]}(N,l),$=u(T,2),F=$[0],D=$[1],U=function(){try{M(!0),C("start",V),C("end",N),C("speechstart",W),C("speechend",H),C("result",Y),C("error",B),C("nomatch",J),k()}catch(t){B(t)}},G=function(){try{M(!1),j()}catch(t){w&&w(t)}},q=function(){U()},z=function(){!d&&p&&(_.current.style.outline=p)},K=function(){!d&&p&&(_.current.style.outline="none")},V=function(t){F(),g&&g(t)},W=function(t){D(),v&&v(t)},H=function(t){F(),m&&m(t)},Y=function(t,e){D(),G(),P(e),b&&b(e,t)},B=function(t){G(),w&&w(t)},J=function(t){D(),G(),x&&x(t)};return function(t){return A.isSupported?function(t){return"function"==typeof t}(t)?t(U,G,L):e.isValidElement(t)?e.cloneElement(t,a({},!L&&{onClick:q})):i.default.createElement("button",{"data-testid":"__vocal-root__",ref:_,role:"button","aria-label":h,style:d?null:a({width:24,height:24,background:"none",border:"none",padding:0,cursor:L?"default":"pointer"},f),className:d,onFocus:z,onBlur:K,onClick:q},i.default.createElement(St,{isActive:L,iconColor:"#aaa"})):null}(n)};_t.propTypes={commands:o.default.objectOf(o.default.func),lang:o.default.string,grammars:o.default.object,timeout:o.default.number,ariaLabel:o.default.string,style:o.default.object,className:o.default.string,outlineStyle:o.default.string,onStart:o.default.func,onEnd:o.default.func,onSpeechStart:o.default.func,onSpeechEnd:o.default.func,onResult:o.default.func,onError:o.default.func,onNoMatch:o.default.func},_t.defaultProps={commands:null,lang:"en-US",grammars:null,timeout:3e3,ariaLabel:"start recognition",style:null,className:null,outlineStyle:"2px solid",onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null};var Et=A.isSupported;t.default=_t,t.isSupported=Et,t.useVocal=R,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudW1kLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQHVudGVtcHMvdm9jYWwvZGlzdC9pbmRleC5lcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdW50ZW1wcy91dGlscy9kaXN0L2VzbS9mdW5jdGlvbi9pc0Z1bmN0aW9uLmpzIiwiLi4vc3JjL2hvb2tzL3VzZVZvY2FsLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Z1c2UuanMvZGlzdC9mdXNlLmVzbS5qcyIsIi4uL3NyYy9ob29rcy91c2VDb21tYW5kcy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0ljb24uanMiLCIuLi9zcmMvY29tcG9uZW50cy9Wb2NhbC5qcyIsIi4uL3NyYy9ob29rcy91c2VUaW1lb3V0LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdChyPXtwYXRoOmUsZXhwb3J0czp7fSxyZXF1aXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanNcIil9KG51bGw9PWUmJnIucGF0aCl9fSxyLmV4cG9ydHMpLHIuZXhwb3J0c30oKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5wcm90b3R5cGUscj1lLmhhc093blByb3BlcnR5LG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPW4uaXRlcmF0b3J8fFwiQEBpdGVyYXRvclwiLGk9bi5hc3luY0l0ZXJhdG9yfHxcIkBAYXN5bmNJdGVyYXRvclwiLGE9bi50b1N0cmluZ1RhZ3x8XCJAQHRvU3RyaW5nVGFnXCI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LFwiXCIpfWNhdGNoKHQpe2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXJ9fWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIG89ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBmP2U6ZixpPU9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLGE9bmV3IF8obnx8W10pO3JldHVybiBpLl9pbnZva2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVwic3VzcGVuZGVkU3RhcnRcIjtyZXR1cm4gZnVuY3Rpb24obyxpKXtpZihcImV4ZWN1dGluZ1wiPT09bil0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO2lmKFwiY29tcGxldGVkXCI9PT1uKXtpZihcInRocm93XCI9PT1vKXRocm93IGk7cmV0dXJuIFMoKX1mb3Ioci5tZXRob2Q9byxyLmFyZz1pOzspe3ZhciBhPXIuZGVsZWdhdGU7aWYoYSl7dmFyIGM9YihhLHIpO2lmKGMpe2lmKGM9PT1sKWNvbnRpbnVlO3JldHVybiBjfX1pZihcIm5leHRcIj09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoXCJ0aHJvd1wiPT09ci5tZXRob2Qpe2lmKFwic3VzcGVuZGVkU3RhcnRcIj09PW4pdGhyb3cgbj1cImNvbXBsZXRlZFwiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2VcInJldHVyblwiPT09ci5tZXRob2QmJnIuYWJydXB0KFwicmV0dXJuXCIsci5hcmcpO249XCJleGVjdXRpbmdcIjt2YXIgdT1zKHQsZSxyKTtpZihcIm5vcm1hbFwiPT09dS50eXBlKXtpZihuPXIuZG9uZT9cImNvbXBsZXRlZFwiOlwic3VzcGVuZGVkWWllbGRcIix1LmFyZz09PWwpY29udGludWU7cmV0dXJue3ZhbHVlOnUuYXJnLGRvbmU6ci5kb25lfX1cInRocm93XCI9PT11LnR5cGUmJihuPVwiY29tcGxldGVkXCIsci5tZXRob2Q9XCJ0aHJvd1wiLHIuYXJnPXUuYXJnKX19fSh0LHIsYSksaX1mdW5jdGlvbiBzKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6XCJub3JtYWxcIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOlwidGhyb3dcIixhcmc6dH19fXQud3JhcD11O3ZhciBsPXt9O2Z1bmN0aW9uIGYoKXt9ZnVuY3Rpb24gaCgpe31mdW5jdGlvbiBwKCl7fXZhciB2PXt9O3Zbb109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dmFyIHk9T2JqZWN0LmdldFByb3RvdHlwZU9mLGQ9eSYmeSh5KHgoW10pKSk7ZCYmZCE9PWUmJnIuY2FsbChkLG8pJiYodj1kKTt2YXIgbT1wLnByb3RvdHlwZT1mLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHYpO2Z1bmN0aW9uIGcodCl7W1wibmV4dFwiLFwidGhyb3dcIixcInJldHVyblwiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIHcodCxlKXt2YXIgbjt0aGlzLl9pbnZva2U9ZnVuY3Rpb24obyxpKXtmdW5jdGlvbiBhKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihuLGEpeyFmdW5jdGlvbiBuKG8saSxhLGMpe3ZhciB1PXModFtvXSx0LGkpO2lmKFwidGhyb3dcIiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiZcIm9iamVjdFwiPT10eXBlb2YgZiYmci5jYWxsKGYsXCJfX2F3YWl0XCIpP2UucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe24oXCJuZXh0XCIsdCxhLGMpfSksKGZ1bmN0aW9uKHQpe24oXCJ0aHJvd1wiLHQsYSxjKX0pKTplLnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24odCl7bC52YWx1ZT10LGEobCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJ0aHJvd1wiLHQsYSxjKX0pKX1jKHUuYXJnKX0obyxpLG4sYSl9KSl9cmV0dXJuIG49bj9uLnRoZW4oYSxhKTphKCl9fWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10Lml0ZXJhdG9yW2UubWV0aG9kXTtpZih2b2lkIDA9PT1yKXtpZihlLmRlbGVnYXRlPW51bGwsXCJ0aHJvd1wiPT09ZS5tZXRob2Qpe2lmKHQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9XCJyZXR1cm5cIixlLmFyZz12b2lkIDAsYih0LGUpLFwidGhyb3dcIj09PWUubWV0aG9kKSlyZXR1cm4gbDtlLm1ldGhvZD1cInRocm93XCIsZS5hcmc9bmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIil9cmV0dXJuIGx9dmFyIG49cyhyLHQuaXRlcmF0b3IsZS5hcmcpO2lmKFwidGhyb3dcIj09PW4udHlwZSlyZXR1cm4gZS5tZXRob2Q9XCJ0aHJvd1wiLGUuYXJnPW4uYXJnLGUuZGVsZWdhdGU9bnVsbCxsO3ZhciBvPW4uYXJnO3JldHVybiBvP28uZG9uZT8oZVt0LnJlc3VsdE5hbWVdPW8udmFsdWUsZS5uZXh0PXQubmV4dExvYyxcInJldHVyblwiIT09ZS5tZXRob2QmJihlLm1ldGhvZD1cIm5leHRcIixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxsKTpvOihlLm1ldGhvZD1cInRocm93XCIsZS5hcmc9bmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLGUuZGVsZWdhdGU9bnVsbCxsKX1mdW5jdGlvbiBFKHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9XCJub3JtYWxcIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gXyh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6XCJyb290XCJ9XSx0LmZvckVhY2goRSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiB4KHQpe2lmKHQpe3ZhciBlPXRbb107aWYoZSlyZXR1cm4gZS5jYWxsKHQpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6U319ZnVuY3Rpb24gUygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGgucHJvdG90eXBlPW0uY29uc3RydWN0b3I9cCxwLmNvbnN0cnVjdG9yPWgsaC5kaXNwbGF5TmFtZT1jKHAsYSxcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1ofHxcIkdlbmVyYXRvckZ1bmN0aW9uXCI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHApOih0Ll9fcHJvdG9fXz1wLGModCxhLFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sZyh3LnByb3RvdHlwZSksdy5wcm90b3R5cGVbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdC5Bc3luY0l0ZXJhdG9yPXcsdC5hc3luYz1mdW5jdGlvbihlLHIsbixvLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBhPW5ldyB3KHUoZSxyLG4sbyksaSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTphLm5leHQoKX0pKX0sZyhtKSxjKG0sYSxcIkdlbmVyYXRvclwiKSxtW29dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgR2VuZXJhdG9yXVwifSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlLnJldmVyc2UoKSxmdW5jdGlvbiByKCl7Zm9yKDtlLmxlbmd0aDspe3ZhciBuPWUucG9wKCk7aWYobiBpbiB0KXJldHVybiByLnZhbHVlPW4sci5kb25lPSExLHJ9cmV0dXJuIHIuZG9uZT0hMCxyfX0sdC52YWx1ZXM9eCxfLnByb3RvdHlwZT17Y29uc3RydWN0b3I6XyxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD1cIm5leHRcIix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goTyksIXQpZm9yKHZhciBlIGluIHRoaXMpXCJ0XCI9PT1lLmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsZSkmJiFpc05hTigrZS5zbGljZSgxKSkmJih0aGlzW2VdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBhLnR5cGU9XCJ0aHJvd1wiLGEuYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPVwibmV4dFwiLGUuYXJnPXZvaWQgMCksISFufWZvcih2YXIgbz10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bz49MDstLW8pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tvXSxhPWkuY29tcGxldGlvbjtpZihcInJvb3RcIj09PWkudHJ5TG9jKXJldHVybiBuKFwiZW5kXCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBjPXIuY2FsbChpLFwiY2F0Y2hMb2NcIiksdT1yLmNhbGwoaSxcImZpbmFsbHlMb2NcIik7aWYoYyYmdSl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYoYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighdSl0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBvPXRoaXMudHJ5RW50cmllc1tuXTtpZihvLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwobyxcImZpbmFsbHlMb2NcIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJihcImJyZWFrXCI9PT10fHxcImNvbnRpbnVlXCI9PT10KSYmaS50cnlMb2M8PWUmJmU8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIGE9aT9pLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT10LGEuYXJnPWUsaT8odGhpcy5tZXRob2Q9XCJuZXh0XCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxsKTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKFwidGhyb3dcIj09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm5cImJyZWFrXCI9PT10LnR5cGV8fFwiY29udGludWVcIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6XCJyZXR1cm5cIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPVwicmV0dXJuXCIsdGhpcy5uZXh0PVwiZW5kXCIpOlwibm9ybWFsXCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksbH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxPKHIpLGx9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09bi50eXBlKXt2YXIgbz1uLmFyZztPKHIpfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjp4KHQpLHJlc3VsdE5hbWU6ZSxuZXh0TG9jOnJ9LFwibmV4dFwiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGx9fSx0fSh0LmV4cG9ydHMpO3RyeXtyZWdlbmVyYXRvclJ1bnRpbWU9ZX1jYXRjaCh0KXtGdW5jdGlvbihcInJcIixcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikoZSl9fSkpO2Z1bmN0aW9uIGUodCxlLHIsbixvLGksYSl7dHJ5e3ZhciBjPXRbaV0oYSksdT1jLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9Yy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixvKX12YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxpKXt2YXIgYT10LmFwcGx5KHIsbik7ZnVuY3Rpb24gYyh0KXtlKGEsbyxpLGMsdSxcIm5leHRcIix0KX1mdW5jdGlvbiB1KHQpe2UoYSxvLGksYyx1LFwidGhyb3dcIix0KX1jKHZvaWQgMCl9KSl9fTt2YXIgbj1mdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fTt2YXIgbz1mdW5jdGlvbih0LGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpe3ZhciByPVtdLG49ITAsbz0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPWMubmV4dCgpKS5kb25lKSYmKHIucHVzaChhLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7bz0hMCxpPXR9ZmluYWxseXt0cnl7bnx8bnVsbD09Yy5yZXR1cm58fGMucmV0dXJuKCl9ZmluYWxseXtpZihvKXRocm93IGl9fXJldHVybiByfX07dmFyIGk9ZnVuY3Rpb24odCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn07dmFyIGE9ZnVuY3Rpb24odCxlKXtpZih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdClyZXR1cm4gaSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09cnx8XCJTZXRcIj09PXI/QXJyYXkuZnJvbSh0KTpcIkFyZ3VtZW50c1wiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aSh0LGUpOnZvaWQgMH19O3ZhciBjPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX07dmFyIHU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KXx8byh0LGUpfHxhKHQsZSl8fGMoKX07dmFyIHM9ZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfTtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX12YXIgZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJmwodC5wcm90b3R5cGUsZSksciYmbCh0LHIpLHR9O3ZhciBoPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH0scD1mdW5jdGlvbigpe3JldHVybiEhbmF2aWdhdG9yLnBlcm1pc3Npb25zfSx2PWZ1bmN0aW9uKCl7cmV0dXJuISFuYXZpZ2F0b3IubWVkaWFEZXZpY2VzfTtmdW5jdGlvbiB5KHQsZSxyLG4sbyxpLGEpe3RyeXt2YXIgYz10W2ldKGEpLHU9Yy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCByKHQpfWMuZG9uZT9lKHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4sbyl9ZnVuY3Rpb24gZCh0KXtyZXR1c