react-bootstrap-plugins 2.3.0 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -3
- package/dist/DatePicker.cjs +1 -1
- package/dist/DatePicker.d.cts +2 -0
- package/dist/DatePicker.d.ts +2 -0
- package/dist/DatePicker.js +1 -1
- package/dist/InputCurrency.cjs +2 -0
- package/dist/InputCurrency.d.cts +76 -0
- package/dist/InputCurrency.d.ts +76 -0
- package/dist/InputCurrency.js +2 -0
- package/dist/chunk-7N56SRTN.js +2 -0
- package/dist/chunk-AQJZQLFZ.cjs +2 -0
- package/dist/chunk-LWCY2GIT.js +2 -0
- package/dist/chunk-ZOXIZM63.cjs +2 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/docs/DATEPICKER.md +19 -0
- package/docs/INPUTCURRENCY.md +180 -0
- package/package.json +19 -4
- package/dist/chunk-GCPYN7WB.js +0 -2
- package/dist/chunk-R5OO66VE.cjs +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkNPQQDBFB_cjs=require('./chunk-NPQQDBFB.cjs'),i=require('react'),reactDom=require('react-dom'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var i__namespace=/*#__PURE__*/_interopNamespace(i);var Oe=["Su","Mo","Tu","We","Th","Fr","Sa"],Fe=["January","February","March","April","May","June","July","August","September","October","November","December"],Le=Array.from({length:60},(a,t)=>t),y=12,V=(a,t)=>new Date(a,t+1,0).getDate(),oe=(a,t)=>a!==null&&t!==null&&a.getFullYear()===t.getFullYear()&&a.getMonth()===t.getMonth()&&a.getDate()===t.getDate(),$e=(a,t,c)=>!(t&&a<new Date(t.getFullYear(),t.getMonth(),t.getDate())||c&&a>new Date(c.getFullYear(),c.getMonth(),c.getDate())),We=(a,t)=>{let c=new Date(a,t,1).getDay(),m=V(a,t),p=[],f=V(a,t-1);for(let u=c-1;u>=0;u--){let D=f-u;p.push({day:D,date:new Date(a,t-1,D),isOutside:true});}for(let u=1;u<=m;u++)p.push({day:u,date:new Date(a,t,u),isOutside:false});let v=42-p.length;for(let u=1;u<=v;u++)p.push({day:u,date:new Date(a,t+1,u),isOutside:true});return p},z=(a,t,c)=>{if(!a||isNaN(a.getTime()))return "";let m=a.getFullYear(),p=String(a.getMonth()+1).padStart(2,"0"),f=String(a.getDate()).padStart(2,"0"),v=a.getHours(),u=String(a.getMinutes()).padStart(2,"0"),D=v>=12?"PM":"AM";v=v%12||12;let k=String(v).padStart(2,"0");if(c)return c.replace("yyyy",String(m)).replace("MM",p).replace("dd",f).replace("hh",k).replace("mm",u).replace("aa",D);switch(t){case "time":return `${k}:${u} ${D}`;case "datetime":return `${m}-${p}-${f} ${k}:${u} ${D}`;default:return `${m}-${p}-${f}`}},F=(a,t,c="date")=>({target:{value:a,name:t,type:c},preventDefault:()=>{},stopPropagation:()=>{},nativeEvent:null}),_e={date:300,time:300,datetime:400,year:250},ze={date:280,time:220,datetime:440,year:280},le={position:"fixed",top:0,left:0,width:"max-content",visibility:"hidden",zIndex:1070},Ve=typeof window<"u"?i__namespace.useLayoutEffect:i__namespace.useEffect,Ue=a=>{if(!a)return document.documentElement;let t=a.parentElement;for(;t;){let c=window.getComputedStyle(t),m=c.overflowY||c.overflow;if(m==="auto"||m==="scroll")return t;t=t.parentElement;}return document.documentElement},qe=(a,t,c)=>{if(!a)return {};let m=a.getBoundingClientRect(),p=t||300,f=window.innerHeight-m.bottom,v=m.top,u=f<p&&v>f,D=window.innerWidth<576?220:260,k=c||D;return {position:"fixed",top:u?Math.max(4,m.top-p-4):m.bottom+4,left:Math.max(4,Math.min(m.left,window.innerWidth-k-4)),minWidth:D,width:"max-content",maxWidth:window.innerWidth-8,zIndex:1070}},ue=i__namespace.forwardRef(({className:a,mode:t="date",calendar:c=false,selected:m,value:p,onChange:f,dateFormat:v,placeholderText:u,size:D,isClearable:k=false,disabled:U=false,minDate:de,maxDate:me,timeIntervals:Be=5,timezone:Ke="Kampala",id:pe,name:N,...fe},L)=>{let j=e=>{if(!e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if(typeof e=="string"||typeof e=="number"){let n=new Date(e);if(!isNaN(n.getTime()))return n;if(typeof e=="string"){let d=e.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(d){let r=parseInt(d[1],10),b=parseInt(d[2],10),_=d[3].toUpperCase();r===12&&_==="AM"&&(r=0),r!==12&&_==="PM"&&(r+=12);let ee=new Date;return new Date(ee.getFullYear(),ee.getMonth(),ee.getDate(),r,b,0,0)}let l=e.match(/^(\d{4})-(\d{2})-(\d{2})\s+(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(l){let r=parseInt(l[4],10),b=parseInt(l[5],10),_=l[6].toUpperCase();return r===12&&_==="AM"&&(r=0),r!==12&&_==="PM"&&(r+=12),new Date(parseInt(l[1]),parseInt(l[2])-1,parseInt(l[3]),r,b,0,0)}}return null}return null},o=i__namespace.useMemo(()=>j(m??p),[m instanceof Date?m.getTime():m,p instanceof Date?p.getTime():p]),te=c||t==="date"||t==="datetime",S=!c&&(t==="time"||t==="datetime"),[E,A]=i__namespace.useState(false),[P,q]=i__namespace.useState(()=>o?o.getFullYear():new Date().getFullYear()),[h,Q]=i__namespace.useState(()=>o?o.getMonth():new Date().getMonth()),[w,R]=i__namespace.useState(o),[x,ne]=i__namespace.useState(()=>o&&o.getHours()%12||12),[C,ae]=i__namespace.useState(()=>o?o.getMinutes():0),[T,re]=i__namespace.useState(()=>o&&o.getHours()>=12?"PM":"AM"),[$,H]=i__namespace.useState(false),[X,B]=i__namespace.useState(()=>Math.floor((o?o.getFullYear():new Date().getFullYear())/y)*y),[be,se]=i__namespace.useState(le),O=i__namespace.useRef(null),Y=i__namespace.useRef(null),K=i__namespace.useRef(null);i__namespace.useEffect(()=>{let e=document.createElement("div");return e.className="datepicker-portal-root",document.body.appendChild(e),K.current=e,()=>{e.parentNode&&document.body.removeChild(e),K.current=null;}},[]),i__namespace.useEffect(()=>{o&&!isNaN(o.getTime())?(R(o),q(o.getFullYear()),Q(o.getMonth()),ne(o.getHours()%12||12),ae(o.getMinutes()),re(o.getHours()>=12?"PM":"AM"),B(Math.floor(o.getFullYear()/y)*y)):R(null);},[o]),Ve(()=>{if(!E){se(le);return}let e=()=>Y.current?Y.current.getBoundingClientRect().height:_e[$?"year":t]||300,n=()=>Y.current?Y.current.getBoundingClientRect().width:ze[$?"year":t]||280,d=Ue(O.current),l=()=>{se(qe(O.current,e(),n()));};l();let r=0,b=()=>{cancelAnimationFrame(r),r=requestAnimationFrame(l);};return d.addEventListener("scroll",b,{passive:true}),window.addEventListener("resize",b),()=>{cancelAnimationFrame(r),d.removeEventListener("scroll",b),window.removeEventListener("resize",b);}},[E,t,$]),i__namespace.useEffect(()=>{if(!E)return;let e=n=>{Y.current&&!Y.current.contains(n.target)&&O.current&&!O.current.contains(n.target)&&(A(false),H(false));};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[E]);let I=(e,n,d,l)=>{let r=new Date(e),b=n%12;return l==="PM"&&(b+=12),b===12&&l==="AM"&&(b=0),r.setHours(b,d,0,0),r},W=e=>{if(!e||isNaN(e.getTime()))return;let n=z(e,t,v);f?.(F(n,N||"",t));},ge=e=>{if(!e){f?.(F(null,N||"",t)),A(false),H(false);return}W(e),t==="date"&&(A(false),H(false));},ve=e=>{if(R(e),t==="date"||c)ge(e);else if(t==="datetime"){let n=I(e,x,C,T);W(n);}},De=We(P,h),ye=()=>{let e=P,n=h;h===0?(e=P-1,n=11):n=h-1,q(e),Q(n);let d=w||new Date,l=V(e,n),r=new Date(e,n,Math.min(d.getDate(),l));R(r),W(S?I(r,x,C,T):r);},he=()=>{let e=P,n=h;h===11?(e=P+1,n=0):n=h+1,q(e),Q(n);let d=w||new Date,l=V(e,n),r=new Date(e,n,Math.min(d.getDate(),l));R(r),W(S?I(r,x,C,T):r);},we=new Date,G=j(de),J=j(me),Me=G?new Date(G.getFullYear(),G.getMonth(),G.getDate()):null,ke=J?new Date(J.getFullYear(),J.getMonth(),J.getDate()):null,Ne=e=>{if(ne(e),S){let n=I(w||new Date,e,C,T);f?.(F(z(n,t,v),N||"",t));}},Se=e=>{if(ae(e),S){let n=I(w||new Date,x,e,T);f?.(F(z(n,t,v),N||"",t));}},Ee=e=>{if(re(e),S){let n=I(w||new Date,x,C,e);f?.(F(z(n,t,v),N||"",t));}},Pe=()=>{B(Math.floor(P/y)*y),H(true);},Re=e=>{q(e),H(false);let n=w||new Date,d=V(e,h),l=new Date(e,h,Math.min(n.getDate(),d));R(l),W(S?I(l,x,C,T):l);},Z=Math.floor(X/y)*y,xe=Array.from({length:y},(e,n)=>Z+n),Ce=e=>{e.stopPropagation(),R(null),f?.(F(null,N||""));},Te=e=>{e.key==="Escape"&&(A(false),H(false),O.current?.blur()),(e.key==="ArrowDown"||e.key==="Enter"||e.key===" ")&&(e.preventDefault(),A(true));},Ye=i__namespace.useCallback(e=>{O.current=e,typeof L=="function"?L(e):L&&(L.current=e);},[L]),Ie=u??(t==="time"?"Select time":t==="datetime"?"Select date & time":"Select date"),ie=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[$&&te&&jsxRuntime.jsxs("div",{className:"datepicker-year-picker p-3",children:[jsxRuntime.jsxs("div",{className:"d-flex align-items-center justify-content-between mb-2",children:[jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:()=>B(X-y),"aria-label":"Previous years",children:"\u2039"}),jsxRuntime.jsxs("span",{className:"fw-semibold small",children:[Z," \u2013 ",Z+y-1]}),jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:()=>B(X+y),"aria-label":"Next years",children:"\u203A"})]}),jsxRuntime.jsx("div",{className:"datepicker-year-grid",children:xe.map(e=>{let n=e===new Date().getFullYear(),d=w&&e===w.getFullYear();return jsxRuntime.jsx("button",{type:"button",className:chunkNPQQDBFB_cjs.a("datepicker-year-cell btn btn-sm",d&&"btn-primary",!d&&n&&"btn-outline-primary",!d&&!n&&"btn-light border"),onClick:()=>Re(e),children:e},e)})})]}),!$&&jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsxs("div",{className:chunkNPQQDBFB_cjs.a("d-flex",t==="datetime"?"flex-row":"flex-column"),children:[te&&jsxRuntime.jsxs("div",{className:"datepicker-calendar p-2",children:[jsxRuntime.jsxs("div",{className:"d-flex align-items-center justify-content-between mb-2",children:[jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:ye,"aria-label":"Previous month",children:"\u2039"}),jsxRuntime.jsxs("div",{className:"d-flex align-items-center gap-1",children:[jsxRuntime.jsx("span",{className:"fw-semibold small",children:Fe[h]}),jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-link text-decoration-none text-primary fw-semibold small p-0",onClick:Pe,"aria-label":"Choose year",children:P})]}),jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:he,"aria-label":"Next month",children:"\u203A"})]}),jsxRuntime.jsx("div",{className:"datepicker-days-header",children:Oe.map(e=>jsxRuntime.jsx("div",{className:"datepicker-day-label",children:e},e))}),jsxRuntime.jsx("div",{className:"datepicker-days-grid",children:De.map((e,n)=>{let d=oe(e.date,we),l=w&&oe(e.date,w),r=$e(e.date,Me,ke),b=e.isOutside||!r;return jsxRuntime.jsx("button",{type:"button",disabled:b,className:chunkNPQQDBFB_cjs.a("datepicker-day",d&&"datepicker-day--today",l&&"datepicker-day--selected",e.isOutside&&"datepicker-day--outside",!r&&"datepicker-day--disabled"),onClick:()=>ve(e.date),tabIndex:e.isOutside?-1:0,children:e.day},n)})})]}),t==="datetime"&&jsxRuntime.jsx("div",{className:"vr mx-1 my-2"}),S&&jsxRuntime.jsxs("div",{className:"datepicker-time p-2 d-flex flex-column",style:{minWidth:180},children:[t==="datetime"&&jsxRuntime.jsx("div",{className:"small fw-semibold text-muted text-center mb-1",children:"Time"}),jsxRuntime.jsxs("div",{className:"d-flex justify-content-center gap-2",children:[jsxRuntime.jsxs("div",{className:"datepicker-time-col",children:[jsxRuntime.jsx("div",{className:"datepicker-time-col-label",children:"Hour"}),jsxRuntime.jsx("div",{className:"datepicker-time-col-scroll",children:Array.from({length:12},(e,n)=>n+1).map(e=>jsxRuntime.jsx("button",{type:"button",className:chunkNPQQDBFB_cjs.a("datepicker-time-item",e===x&&"active"),onClick:()=>Ne(e),children:String(e).padStart(2,"0")},e))})]}),jsxRuntime.jsx("span",{className:"datepicker-time-separator",children:":"}),jsxRuntime.jsxs("div",{className:"datepicker-time-col",children:[jsxRuntime.jsx("div",{className:"datepicker-time-col-label",children:"Min"}),jsxRuntime.jsx("div",{className:"datepicker-time-col-scroll",children:Le.map(e=>jsxRuntime.jsx("button",{type:"button",className:chunkNPQQDBFB_cjs.a("datepicker-time-item",e===C&&"active"),onClick:()=>Se(e),children:String(e).padStart(2,"0")},e))})]}),jsxRuntime.jsxs("div",{className:"datepicker-time-col",children:[jsxRuntime.jsx("div",{className:"datepicker-time-col-label",children:"\xA0"}),jsxRuntime.jsx("div",{className:"d-flex flex-column gap-1 mt-1",children:["AM","PM"].map(e=>jsxRuntime.jsx("button",{type:"button",className:chunkNPQQDBFB_cjs.a("datepicker-time-item","datepicker-time-item--ampm",T===e&&"active"),onClick:()=>Ee(e),children:e},e))})]})]})]})]})})]}),Ae=jsxRuntime.jsx("div",{ref:Y,className:chunkNPQQDBFB_cjs.a("datepicker-popover card border shadow-sm",t==="datetime"&&"datepicker-popover--wide"),style:be,children:ie});return c?jsxRuntime.jsx("div",{className:chunkNPQQDBFB_cjs.a("datepicker-calendar-inline card border shadow-sm",a),children:ie}):jsxRuntime.jsxs("div",{className:"datepicker-wrapper position-relative d-inline-block w-100",style:{minWidth:0},children:[jsxRuntime.jsxs("div",{className:"position-relative",children:[jsxRuntime.jsx("input",{ref:Ye,id:pe,name:N,type:"text",readOnly:true,disabled:U,className:chunkNPQQDBFB_cjs.a("form-control",D==="sm"&&"form-control-sm",D==="lg"&&"form-control-lg","pe-5",a),placeholder:Ie,value:z(o,t,v),onClick:()=>!U&&A(!E),onKeyDown:Te,"aria-haspopup":"dialog","aria-expanded":E,autoComplete:"off",...fe}),k&&o&&!U&&jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-link position-absolute top-50 end-0 translate-middle-y pe-2 text-secondary",style:{zIndex:2},onClick:Ce,tabIndex:-1,"aria-label":"Clear",children:"\xD7"})]}),E&&!U&&K.current&&reactDom.createPortal(Ae,K.current)]})});ue.displayName="DatePicker";var je=ue;exports.a=ue;exports.b=je;//# sourceMappingURL=chunk-ZOXIZM63.cjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudHN4Il0sIm5hbWVzIjpbIkRBWVNfT0ZfV0VFSyIsIk1PTlRIUyIsIk1JTlVURVMiLCJfIiwiaSIsIllFQVJTX1BFUl9QQUdFIiwiZGF5c0luTW9udGgiLCJ5ZWFyIiwibW9udGgiLCJpc1NhbWVEYXkiLCJiIiwiaXNEYXRlSW5SYW5nZSIsImRhdGUiLCJtaW4iLCJtYXgiLCJidWlsZENhbGVuZGFyR3JpZCIsImZpcnN0RGF5IiwidG90YWxEYXlzIiwiY2VsbHMiLCJwcmV2TW9udGhEYXlzIiwiZGF5IiwiZCIsInJlbWFpbmluZyIsImZvcm1hdFZhbHVlIiwibW9kZSIsImZtdCIsInkiLCJNIiwiaCIsIm0iLCJhIiwiaGgiLCJtYWtlRXZlbnQiLCJ2YWx1ZSIsImlucHV0TmFtZSIsInR5cGUiLCJQT1BPVkVSX0dVRVNTIiwiUE9QT1ZFUl9XSURUSF9HVUVTUyIsIlBSRV9QT1NJVElPTl9TVFlMRSIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJnZXRTY3JvbGxQYXJlbnQiLCJlbCIsInBhcmVudCIsInN0eWxlIiwib3ZlcmZsb3dZIiwiY2FsY1BvcG92ZXJTdHlsZSIsImlucHV0RWwiLCJwb3BvdmVySGVpZ2h0IiwicG9wb3ZlcldpZHRoIiwicmVjdCIsInNwYWNlQmVsb3ciLCJzcGFjZUFib3ZlIiwicGxhY2VBYm92ZSIsIm1pblciLCJ3IiwiRGF0ZVBpY2tlciIsImNsYXNzTmFtZSIsImNhbGVuZGFyIiwic2VsZWN0ZWQiLCJvbkNoYW5nZSIsImRhdGVGb3JtYXQiLCJwbGFjZWhvbGRlclRleHQiLCJzaXplIiwiaXNDbGVhcmFibGUiLCJkaXNhYmxlZCIsIm1pbkRhdGUiLCJtYXhEYXRlIiwidGltZUludGVydmFscyIsInRpbWV6b25lIiwiaWQiLCJuYW1lIiwicHJvcHMiLCJyZWYiLCJyZXNvbHZlVmFsdWUiLCJ2IiwidGltZU1hdGNoIiwiYXAiLCJub3ciLCJkdE1hdGNoIiwicmVzb2x2ZWRWYWx1ZSIsInNob3dDYWxlbmRhciIsInNob3dUaW1lIiwiaXNPcGVuIiwic2V0SXNPcGVuIiwidmlld1llYXIiLCJzZXRWaWV3WWVhciIsInZpZXdNb250aCIsInNldFZpZXdNb250aCIsInRlbXBEYXRlIiwic2V0VGVtcERhdGUiLCJ0ZW1wSG91cnMiLCJzZXRUZW1wSG91cnMiLCJ0ZW1wTWlucyIsInNldFRlbXBNaW5zIiwidGVtcEFtUG0iLCJzZXRUZW1wQW1QbSIsInNob3dZZWFyUGlja2VyIiwic2V0U2hvd1llYXJQaWNrZXIiLCJ5ZWFyUGFnZSIsInNldFllYXJQYWdlIiwicG9wb3ZlclN0eWxlIiwic2V0UG9wb3ZlclN0eWxlIiwiaW5wdXRSZWYiLCJwb3BvdmVyUmVmIiwicG9ydGFsUmVmIiwiZ2V0SGVpZ2h0IiwiZ2V0V2lkdGgiLCJzY3JvbGxQYXJlbnQiLCJ1cGRhdGUiLCJyYWYiLCJzY2hlZHVsZVVwZGF0ZSIsImhhbmRsZXIiLCJlIiwiYnVpbGREYXRlIiwiYmFzZSIsImgxMiIsIm1pbnMiLCJhbXBtIiwiZmlyZUNoYW5nZSIsImZvcm1hdHRlZCIsImNvbW1pdCIsImNvbW1pdERhdGVPbmx5IiwiZ3JpZCIsImhhbmRsZVByZXZNb250aCIsIm5ld1kiLCJuZXdNIiwibWF4RCIsIm5ld0RhdGUiLCJoYW5kbGVOZXh0TW9udGgiLCJ0b2RheSIsInJlc29sdmVkTWluIiwicmVzb2x2ZWRNYXgiLCJtaW5EdCIsIm1heER0IiwiaGFuZGxlSG91ckNoYW5nZSIsImhhbmRsZU1pbkNoYW5nZSIsImhhbmRsZUFtUG1DaGFuZ2UiLCJvcGVuWWVhclBpY2tlciIsImhhbmRsZVllYXJTZWxlY3QiLCJ5ZWFyUGFnZVN0YXJ0IiwieWVhcnMiLCJoYW5kbGVDbGVhciIsImhhbmRsZUlucHV0S2V5RG93biIsIm1lcmdlSW5wdXRSZWYiLCJub2RlIiwicGxhY2Vob2xkZXIiLCJwaWNrZXJCb2R5IiwianN4cyIsIkZyYWdtZW50IiwianN4IiwiaXNDdXJyZW50WWVhciIsImlzU2VsZWN0ZWQiLCJjbiIsImNlbGwiLCJpc1RvZGF5IiwiaW5SYW5nZSIsImlzRGlzYWJsZWREYXkiLCJwb3BvdmVyIiwiY3JlYXRlUG9ydGFsIiwiRGF0ZVBpY2tlcl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoic2dCQTRETUEsRUFBQUEsQ0FBZSxDQUFDLElBQUEsQ0FBTSxJQUFBLENBQU0sSUFBQSxDQUFNLElBQUEsQ0FBTSxJQUFBLENBQU0sSUFBQSxDQUFNLElBQUksQ0FBQSxDQUN4REMsRUFBQUEsQ0FBUyxDQUNiLFNBQUEsQ0FBVyxXQUFZLE9BQUEsQ0FBUyxPQUFBLENBQVMsS0FBQSxDQUFPLE1BQUEsQ0FDaEQsT0FBUSxRQUFBLENBQVUsV0FBQSxDQUFhLFNBQUEsQ0FBVyxVQUFBLENBQVksVUFDeEQsQ0FBQSxDQUNNQyxFQUFBQSxDQUFVLEtBQUEsQ0FBTSxLQUFLLENBQUUsTUFBQSxDQUFRLEVBQUcsQ0FBQSxDQUFHLENBQUNDLENBQUFBLENBQUdDLENBQUFBLEdBQU1BLENBQUMsQ0FBQSxDQUNoREMsRUFBaUIsRUFBQSxDQU1qQkMsQ0FBQUEsQ0FBYyxDQUFDQyxDQUFBQSxDQUFjQyxDQUFBQSxHQUNqQyxJQUFJLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBTUMsRUFBUSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQUUsT0FBQSxHQUV6QkMsRUFBQUEsQ0FBWSxDQUFDLENBQUEsQ0FBZ0JDLENBQUFBLEdBQ2pDLElBQU0sSUFBQSxFQUFRQSxDQUFBQSxHQUFNLElBQUEsRUFDcEIsQ0FBQSxDQUFFLFdBQUEsRUFBWSxHQUFNQSxDQUFBQSxDQUFFLFdBQUEsSUFDdEIsQ0FBQSxDQUFFLFFBQUEsRUFBUyxHQUFNQSxDQUFBQSxDQUFFLFVBQVMsRUFDNUIsQ0FBQSxDQUFFLE9BQUEsRUFBUSxHQUFNQSxFQUFFLE9BQUEsRUFBUSxDQUV0QkMsRUFBQUEsQ0FBZ0IsQ0FBQ0MsQ0FBQUEsQ0FBWUMsQ0FBQUEsQ0FBa0JDLENBQUFBLEdBQy9DLEVBQUFELEdBQU9ELENBQUFBLENBQU8sSUFBSSxJQUFBLENBQUtDLENBQUFBLENBQUksYUFBWSxD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RCxDQUFBLENBQUEsQ0FFSixDQUFBLENBR0MzRCxDQUFBQSxFQUFVLENBQUNsQixDQUFBQSxFQUFZd0MsQ0FBQUEsQ0FBVSxPQUFBLEVBQVdzRCxxQkFBQUEsQ0FBYUQsR0FBU3JELENBQUFBLENBQVUsT0FBTyxDQUFBLENBQUEsQ0FDdEYsQ0FFSixDQUFDLEVBRURqRCxFQUFBQSxDQUFXLFdBQUEsQ0FBYyxZQUFBLEtBR2xCd0csRUFBQUEsQ0FBUXhHIiwiZmlsZSI6ImNodW5rLVpPWElaTTYzLmNqcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi9saWIvY24uanMnXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogIFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVBpY2tlckNoYW5nZUV2ZW50IHtcbiAgdGFyZ2V0OiB7XG4gICAgdmFsdWU6IHN0cmluZyB8IG51bGxcbiAgICBuYW1lOiBzdHJpbmdcbiAgICB0eXBlOiBzdHJpbmdcbiAgfVxuICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZFxuICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWRcbiAgbmF0aXZlRXZlbnQ6IG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuICAvKiogUGlja2VyIG1vZGUgKGRlZmF1bHQgJ2RhdGUnKSAqL1xuICBtb2RlPzogJ2RhdGUnIHwgJ3RpbWUnIHwgJ2RhdGV0aW1lJ1xuICAvKiogV2hlbiB0cnVlLCByZW5kZXJzIHRoZSBjYWxlbmRhciBpbmxpbmUgd2l0aG91dCBhbiBpbnB1dCBmaWVsZCBvciB0aW1lIHBpY2tlciAqL1xuICBjYWxlbmRhcj86IGJvb2xlYW5cbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBEYXRlIChhbGlhcyBmb3IgdmFsdWUpICovXG4gIHNlbGVjdGVkPzogRGF0ZSB8IG51bGxcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBEYXRlLCBJU08gc3RyaW5nLCBcImhoOm1tIEFBXCIgdGltZSBzdHJpbmcsIFwiWVlZWS1NTS1ERCBoaDptbSBBQVwiIGRhdGV0aW1lIHN0cmluZywgb3IgdGltZXN0YW1wICovXG4gIHZhbHVlPzogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgLyoqIFN5bnRoZXRpYyBldmVudCBoYW5kbGVyIOKAlCBlLnRhcmdldC52YWx1ZSBpcyBhIHByZS1mb3JtYXR0ZWQgc3RyaW5nICovXG4gIG9uQ2hhbmdlPzogKGU6IERhdGVQaWNrZXJDaGFuZ2VFdmVudCkgPT4gdm9pZFxuICAvKiogRGlzcGxheSBmb3JtYXQgd2l0aCB0b2tlbnM6IHl5eXksIE1NLCBkZCwgaGgsIG1tLCBhYSAqL1xuICBkYXRlRm9ybWF0Pzogc3RyaW5nXG4gIC8qKiBQbGFjZWhvbGRlciB0ZXh0IHdoZW4gZW1wdHkgKi9cbiAgcGxhY2Vob2xkZXJUZXh0Pzogc3RyaW5nXG4gIC8qKiBCb290c3RyYXAgc2l6ZSB2YXJpYW50ICovXG4gIHNpemU/OiAnc20nIHwgJ2xnJ1xuICAvKiogU2hvdyBhIGNsZWFyIGJ1dHRvbiBvbiB0aGUgaW5wdXQgKi9cbiAgaXNDbGVhcmFibGU/OiBib29sZWFuXG4gIC8qKiBEaXNhYmxlIHRoZSBpbnB1dCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgLyoqIEVhcmxpZXN0IHNlbGVjdGFibGUgZGF0ZSDigJQgRGF0ZSwgSVNPL1wiWVlZWS1NTS1ERFwiIHN0cmluZywgb3IgdGltZXN0YW1wIChlLmcuIGFub3RoZXIgRGF0ZVBpY2tlcidzIG9uQ2hhbmdlIHZhbHVlKSAqL1xuICBtaW5EYXRlPzogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgLyoqIExhdGVzdCBzZWxlY3RhYmxlIGRhdGUg4oCUIERhdGUsIElTTy9cIllZWVktTU0tRERcIiBzdHJpbmcsIG9yIHRpbWVzdGFtcCAoZS5nLiBhbm90aGVyIERhdGVQaWNrZXIncyBvbkNoYW5nZSB2YWx1ZSkgKi9cbiAgbWF4RGF0ZT86IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIC8qKiBNaW51dGUgc3RlcCBpbiB0aGUgdGltZSBsaXN0IChkZWZhdWx0IDUpICovXG4gIHRpbWVJbnRlcnZhbHM/OiBudW1iZXJcbiAgLyoqIFRpbWV6b25lIGlkZW50aWZpZXIgKGRlZmF1bHQgJ0thbXBhbGEnKSAqL1xuICB0aW1lem9uZT86IHN0cmluZ1xuICAvKiogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBvbiB0aGUgaW5wdXQgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKiBJbnB1dCBlbGVtZW50IElEICovXG4gIGlkPzogc3RyaW5nXG4gIC8qKiBJbnB1dCBuYW1lIGF0dHJpYnV0ZSDigJQgc3VyZmFjZXMgYXMgZS50YXJnZXQubmFtZSBpbiBvbkNoYW5nZSAqL1xuICBuYW1lPzogc3RyaW5nXG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogIENvbnN0YW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3QgREFZU19PRl9XRUVLID0gWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddXG5jb25zdCBNT05USFMgPSBbXG4gICdKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJyxcbiAgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJyxcbl1cbmNvbnN0IE1JTlVURVMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2MCB9LCAoXywgaSkgPT4gaSlcbmNvbnN0IFlFQVJTX1BFUl9QQUdFID0gMTJcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiAgSGVscGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBkYXlzSW5Nb250aCA9ICh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpOiBudW1iZXIgPT5cbiAgbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcblxuY29uc3QgaXNTYW1lRGF5ID0gKGE6IERhdGUgfCBudWxsLCBiOiBEYXRlIHwgbnVsbCk6IGJvb2xlYW4gPT5cbiAgYSAhPT0gbnVsbCAmJiBiICE9PSBudWxsICYmXG4gIGEuZ2V0RnVsbFllYXIoKSA9PT0gYi5nZXRGdWxsWWVhcigpICYmXG4gIGEuZ2V0TW9udGgoKSA9PT0gYi5nZXRNb250aCgpICYmXG4gIGEuZ2V0RGF0ZSgpID09PSBiLmdldERhdGUoKVxuXG5jb25zdCBpc0RhdGVJblJhbmdlID0gKGRhdGU6IERhdGUsIG1pbjogRGF0ZSB8IG51bGwsIG1heDogRGF0ZSB8IG51bGwpOiBib29sZWFuID0+IHtcbiAgaWYgKG1pbiAmJiBkYXRlIDwgbmV3IERhdGUobWluLmdldEZ1bGxZZWFyKCksIG1pbi5nZXRNb250aCgpLCBtaW4uZ2V0RGF0ZSgpKSkgcmV0dXJuIGZhbHNlXG4gIGlmIChtYXggJiYgZGF0ZSA+IG5ldyBEYXRlKG1heC5nZXRGdWxsWWVhcigpLCBtYXguZ2V0TW9udGgoKSwgbWF4LmdldERhdGUoKSkpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdHJ1ZVxufVxuXG5pbnRlcmZhY2UgQ2FsZW5kYXJDZWxsIHtcbiAgZGF5OiBudW1iZXJcbiAgZGF0ZTogRGF0ZVxuICBpc091dHNpZGU6IGJvb2xlYW5cbn1cblxuY29uc3QgYnVpbGRDYWxlbmRhckdyaWQgPSAoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogQ2FsZW5kYXJDZWxsW10gPT4ge1xuICBjb25zdCBmaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKVxuICBjb25zdCB0b3RhbERheXMgPSBkYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgY29uc3QgY2VsbHM6IENhbGVuZGFyQ2VsbFtdID0gW11cblxuICBjb25zdCBwcmV2TW9udGhEYXlzID0gZGF5c0luTW9udGgoeWVhciwgbW9udGggLSAxKVxuICBmb3IgKGxldCBpID0gZmlyc3REYXkgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGRheSA9IHByZXZNb250aERheXMgLSBpXG4gICAgY2VsbHMucHVzaCh7IGRheSwgZGF0ZTogbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpLCBpc091dHNpZGU6IHRydWUgfSlcbiAgfVxuXG4gIGZvciAobGV0IGQgPSAxOyBkIDw9IHRvdGFsRGF5czsgZCsrKSB7XG4gICAgY2VsbHMucHVzaCh7IGRheTogZCwgZGF0ZTogbmV3IERhdGUoeWVhciwgbW9udGgsIGQpLCBpc091dHNpZGU6IGZhbHNlIH0pXG4gIH1cblxuICBjb25zdCByZW1haW5pbmcgPSA0MiAtIGNlbGxzLmxlbmd0aFxuICBmb3IgKGxldCBkID0gMTsgZCA8PSByZW1haW5pbmc7IGQrKykge1xuICAgIGNlbGxzLnB1c2goeyBkYXk6IGQsIGRhdGU6IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgZCksIGlzT3V0c2lkZTogdHJ1ZSB9KVxuICB9XG5cbiAgcmV0dXJuIGNlbGxzXG59XG5cbmNvbnN0IGZvcm1hdFZhbHVlID0gKGRhdGU6IERhdGUgfCBudWxsLCBtb2RlOiBzdHJpbmcsIGZtdD86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghZGF0ZSB8fCBpc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiAnJ1xuXG4gIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKClcbiAgY29uc3QgTSA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IGQgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJylcbiAgbGV0IGggPSBkYXRlLmdldEhvdXJzKClcbiAgY29uc3QgbSA9IFN0cmluZyhkYXRlLmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBhID0gaCA+PSAxMiA/ICdQTScgOiAnQU0nXG4gIGggPSBoICUgMTIgfHwgMTJcbiAgY29uc3QgaGggPSBTdHJpbmcoaCkucGFkU3RhcnQoMiwgJzAnKVxuXG4gIGlmIChmbXQpIHtcbiAgICByZXR1cm4gZm10LnJlcGxhY2UoJ3l5eXknLCBTdHJpbmcoeSkpLnJlcGxhY2UoJ01NJywgTSkucmVwbGFjZSgnZGQnLCBkKS5yZXBsYWNlKCdoaCcsIGhoKS5yZXBsYWNlKCdtbScsIG0pLnJlcGxhY2UoJ2FhJywgYSlcbiAgfVxuXG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgJ3RpbWUnOiAgICAgcmV0dXJuIGAke2hofToke219ICR7YX1gXG4gICAgY2FzZSAnZGF0ZXRpbWUnOiByZXR1cm4gYCR7eX0tJHtNfS0ke2R9ICR7aGh9OiR7bX0gJHthfWBcbiAgICBkZWZhdWx0OiAgICAgICAgIHJldHVybiBgJHt5fS0ke019LSR7ZH1gXG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCBhIHN5bnRoZXRpYyBldmVudCBvYmplY3QgbGlrZSBhIG5hdGl2ZSBpbnB1dCdzIG9uQ2hhbmdlLlxuICovXG5jb25zdCBtYWtlRXZlbnQgPSAodmFsdWU6IHN0cmluZyB8IG51bGwsIGlucHV0TmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgPSAnZGF0ZScpOiBEYXRlUGlja2VyQ2hhbmdlRXZlbnQgPT4gKHtcbiAgdGFyZ2V0OiB7XG4gICAgdmFsdWUsXG4gICAgbmFtZTogaW5wdXROYW1lLFxuICAgIHR5cGUsXG4gIH0sXG4gIHByZXZlbnREZWZhdWx0OiAoKSA9PiB7fSxcbiAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7fSxcbiAgbmF0aXZlRXZlbnQ6IG51bGwsXG59KVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qICBQb3BvdmVyIHBvc2l0aW9uaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBBcHByb3hpbWF0ZSBoZWlnaHRzIOKAlCB1c2VkIGFzIGEgZmlyc3QgZ3Vlc3MgYmVmb3JlIHRoZSByZWFsIERPTSBoZWlnaHQgaXMgbWVhc3VyZWQuICovXG5jb25zdCBQT1BPVkVSX0dVRVNTOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0geyBkYXRlOiAzMDAsIHRpbWU6IDMwMCwgZGF0ZXRpbWU6IDQwMCwgeWVhcjogMjUwIH1cblxuLyoqIEFwcHJveGltYXRlIHdpZHRocyDigJQgdXNlZCBhcyBhIGZpcnN0IGd1ZXNzIGJlZm9yZSB0aGUgcmVhbCBET00gd2lkdGggaXMgbWVhc3VyZWQuICovXG5jb25zdCBQT1BPVkVSX1dJRFRIX0dVRVNTOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0geyBkYXRlOiAyODAsIHRpbWU6IDIyMCwgZGF0ZXRpbWU6IDQ0MCwgeWVhcjogMjgwIH1cblxuLyoqXG4gKiBTdHlsZSBhcHBsaWVkIHdoaWxlIHRoZSBwb3BvdmVyIGlzIG1vdW50ZWQgYnV0IG5vdCB5ZXQgbWVhc3VyZWQuXG4gKiBgd2lkdGg6IG1heC1jb250ZW50YCBtYWtlcyB0aGUgZmlyc3QgbWVhc3VyZW1lbnQgcmVmbGVjdCB0aGUgcmVhbCBjb250ZW50XG4gKiB3aWR0aCAoYW4gZW1wdHkgc3R5bGUgbGV0cyB0aGUgY2FyZCBzdHJldGNoIHRvIHRoZSBib2R5IHdpZHRoLCB3aGljaFxuICogcG9pc29uZWQgdGhlIGZpcnN0LW9wZW4gcG9zaXRpb24pLCBhbmQgYHZpc2liaWxpdHk6IGhpZGRlbmAgcHJldmVudHMgYVxuICogbWlzcG9zaXRpb25lZCBmbGFzaCBiZWZvcmUgdGhlIG1lYXN1cmVkIHN0eWxlIGxhbmRzLlxuICovXG5jb25zdCBQUkVfUE9TSVRJT05fU1RZTEU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDAsXG4gIHdpZHRoOiAnbWF4LWNvbnRlbnQnLFxuICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgekluZGV4OiAxMDcwLFxufVxuXG4vKiogdXNlTGF5b3V0RWZmZWN0IHRoYXQgaXMgU1NSLXNhZmUgKGZhbGxzIGJhY2sgdG8gdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIpLiAqL1xuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9XG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0XG5cbi8qKlxuICogRmluZCB0aGUgbmVhcmVzdCBzY3JvbGxhYmxlIGFuY2VzdG9yIChmb3IgY2FwdHVyaW5nIHNjcm9sbCBldmVudHMgaW5zaWRlXG4gKiBtb2RhbHMgLyBzaWRlIHBhbmVscyAvIGN1c3RvbSBjb250YWluZXJzKS5cbiAqL1xuY29uc3QgZ2V0U2Nyb2xsUGFyZW50ID0gKGVsOiBIVE1MRWxlbWVudCB8IG51bGwpOiBIVE1MRWxlbWVudCA9PiB7XG4gIGlmICghZWwpIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgbGV0IHBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWwucGFyZW50RWxlbWVudFxuICB3aGlsZSAocGFyZW50KSB7XG4gICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpXG4gICAgY29uc3Qgb3ZlcmZsb3dZID0gc3R5bGUub3ZlcmZsb3dZIHx8IHN0eWxlLm92ZXJmbG93XG4gICAgaWYgKG92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IG92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpIHJldHVybiBwYXJlbnRcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudFxuICB9XG4gIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbn1cblxuY29uc3QgY2FsY1BvcG92ZXJTdHlsZSA9IChpbnB1dEVsOiBIVE1MRWxlbWVudCB8IG51bGwsIHBvcG92ZXJIZWlnaHQ6IG51bWJlciwgcG9wb3ZlcldpZHRoOiBudW1iZXIpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgaWYgKCFpbnB1dEVsKSByZXR1cm4ge31cbiAgY29uc3QgcmVjdCA9IGlucHV0RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgY29uc3QgaCA9IHBvcG92ZXJIZWlnaHQgfHwgMzAwXG5cbiAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tXG4gIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcFxuXG4gIC8qIE9ubHkgZmxpcCBhYm92ZSB3aGVuIGJlbG93IGlzIHRydWx5IHRvbyB0aWdodCBBTkQgYWJvdmUgb2ZmZXJzIG1vcmUgcm9vbSAqL1xuICBjb25zdCBwbGFjZUFib3ZlID0gc3BhY2VCZWxvdyA8IGggJiYgc3BhY2VBYm92ZSA+IHNwYWNlQmVsb3dcblxuICAvKiBSZXNwb25zaXZlOiB1c2Ugc21hbGxlciBtaW4td2lkdGggb24gbW9iaWxlIHRvIHByZXZlbnQgb3ZlcmZsb3cuXG4gICAgIFRoZSBwb3BvdmVyIHNpemVzIHRvIGl0cyBjb250ZW50IOKAlCBpdCBtdXN0IE5PVCBzdHJldGNoIHdpdGggYSB3aWRlIGlucHV0LFxuICAgICBzbyByZWN0LndpZHRoIGlzIGludGVudGlvbmFsbHkgaWdub3JlZCBmb3Igc2l6aW5nLiAqL1xuICBjb25zdCBtaW5XID0gd2luZG93LmlubmVyV2lkdGggPCA1NzYgPyAyMjAgOiAyNjBcbiAgY29uc3QgdyA9IHBvcG92ZXJXaWR0aCB8fCBtaW5XXG5cbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB0b3A6IHBsYWNlQWJvdmUgPyBNYXRoLm1heCg0LCByZWN0LnRvcCAtIGggLSA0KSA6IHJlY3QuYm90dG9tICsgNCxcbiAgICBsZWZ0OiBNYXRoLm1heCg0LCBNYXRoLm1pbihyZWN0LmxlZnQsIHdpbmRvdy5pbm5lcldpZHRoIC0gdyAtIDQpKSxcbiAgICBtaW5XaWR0aDogbWluVyxcbiAgICB3aWR0aDogJ21heC1jb250ZW50JyxcbiAgICBtYXhXaWR0aDogd2luZG93LmlubmVyV2lkdGggLSA4LFxuICAgIHpJbmRleDogMTA3MCxcbiAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qICBEYXRlUGlja2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogQ3VzdG9tIEJvb3RzdHJhcC1zdHlsZWQgZGF0ZSAvIHRpbWUgLyBkYXRldGltZSBwaWNrZXIuIFplcm8gZGVwZW5kZW5jaWVzLlxuICpcbiAqICoqSW1wb3J0YW50OioqIFRoZSBhY2NvbXBhbnlpbmcgQ1NTICoqbXVzdCoqIGJlIGltcG9ydGVkIGZvciB0aGUgcGlja2VyIHRvIHJlbmRlciBjb3JyZWN0bHk6XG4gKiBgYGBqc1xuICogaW1wb3J0ICdyZWFjdC1ib290c3RyYXAtcGx1Z2lucy9jc3MvcGx1Z2lucy5jc3MnXG4gKiBgYGBcbiAqL1xuY29uc3QgRGF0ZVBpY2tlciA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTElucHV0RWxlbWVudCwgRGF0ZVBpY2tlclByb3BzPigoe1xuICBjbGFzc05hbWUsXG4gIG1vZGUgPSAnZGF0ZScsXG4gIGNhbGVuZGFyID0gZmFsc2UsXG4gIHNlbGVjdGVkLFxuICB2YWx1ZSxcbiAgb25DaGFuZ2UsXG4gIGRhdGVGb3JtYXQsXG4gIHBsYWNlaG9sZGVyVGV4dCxcbiAgc2l6ZSxcbiAgaXNDbGVhcmFibGUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgbWluRGF0ZSxcbiAgbWF4RGF0ZSxcbiAgdGltZUludGVydmFscyA9IDUsXG4gIHRpbWV6b25lID0gJ0thbXBhbGEnLFxuICBpZCxcbiAgbmFtZSxcbiAgLi4ucHJvcHNcbn0sIHJlZikgPT4ge1xuICAvKiAtLS0tIGRlcml2ZWQgLS0tLSAqL1xuICBjb25zdCByZXNvbHZlVmFsdWUgPSAodjogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2KSByZXR1cm4gbnVsbFxuICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGlzTmFOKHYuZ2V0VGltZSgpKSA/IG51bGwgOiB2XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFN0YW5kYXJkIERhdGUgcGFyc2luZyAod29ya3MgZm9yIElTTyA4NjAxLCBcIllZWVktTU0tRERcIiwgZXRjLilcbiAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2KVxuICAgICAgaWYgKCFpc05hTihkLmdldFRpbWUoKSkpIHJldHVybiBkXG5cbiAgICAgIC8vIEhhbmRsZSB0aW1lLW9ubHkgc3RyaW5ncyBmcm9tIGZvcm1hdFZhbHVlOiBcImhoOm1tIEFBXCJcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdGltZU1hdGNoID0gdi5tYXRjaCgvXihcXGR7MSwyfSk6KFxcZHsyfSlcXHMqKEFNfFBNKSQvaSlcbiAgICAgICAgaWYgKHRpbWVNYXRjaCkge1xuICAgICAgICAgIGxldCBoID0gcGFyc2VJbnQodGltZU1hdGNoWzFdLCAxMClcbiAgICAgICAgICBjb25zdCBtID0gcGFyc2VJbnQodGltZU1hdGNoWzJdLCAxMClcbiAgICAgICAgICBjb25zdCBhcCA9IHRpbWVNYXRjaFszXS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgaWYgKGggPT09IDEyICYmIGFwID09PSAnQU0nKSBoID0gMFxuICAgICAgICAgIGlmIChoICE9PSAxMiAmJiBhcCA9PT0gJ1BNJykgaCArPSAxMlxuICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpLCBoLCBtLCAwLCAwKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGRhdGV0aW1lIHN0cmluZ3MgZnJvbSBmb3JtYXRWYWx1ZTogXCJZWVlZLU1NLUREIGhoOm1tIEFBXCJcbiAgICAgICAgY29uc3QgZHRNYXRjaCA9IHYubWF0Y2goL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVxccysoXFxkezEsMn0pOihcXGR7Mn0pXFxzKihBTXxQTSkkL2kpXG4gICAgICAgIGlmIChkdE1hdGNoKSB7XG4gICAgICAgICAgbGV0IGggPSBwYXJzZUludChkdE1hdGNoWzRdLCAxMClcbiAgICAgICAgICBjb25zdCBtID0gcGFyc2VJbnQoZHRNYXRjaFs1XSwgMTApXG4gICAgICAgICAgY29uc3QgYXAgPSBkdE1hdGNoWzZdLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICBpZiAoaCA9PT0gMTIgJiYgYXAgPT09ICdBTScpIGggPSAwXG4gICAgICAgICAgaWYgKGggIT09IDEyICYmIGFwID09PSAnUE0nKSBoICs9IDEyXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnNlSW50KGR0TWF0Y2hbMV0pLCBwYXJzZUludChkdE1hdGNoWzJdKSAtIDEsIHBhcnNlSW50KGR0TWF0Y2hbM10pLCBoLCBtLCAwLCAwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlc29sdmVkVmFsdWUgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVWYWx1ZShzZWxlY3RlZCA/PyB2YWx1ZSksXG4gICAgW1xuICAgICAgc2VsZWN0ZWQgaW5zdGFuY2VvZiBEYXRlID8gc2VsZWN0ZWQuZ2V0VGltZSgpIDogc2VsZWN0ZWQsXG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZS5nZXRUaW1lKCkgOiB2YWx1ZSxcbiAgICBdLFxuICApXG4gIGNvbnN0IHNob3dDYWxlbmRhciA9IGNhbGVuZGFyIHx8IG1vZGUgPT09ICdkYXRlJyB8fCBtb2RlID09PSAnZGF0ZXRpbWUnXG4gIGNvbnN0IHNob3dUaW1lID0gIWNhbGVuZGFyICYmIChtb2RlID09PSAndGltZScgfHwgbW9kZSA9PT0gJ2RhdGV0aW1lJylcblxuICAvKiAtLS0tIGludGVybmFsIHN0YXRlIC0tLS0gKi9cbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbdmlld1llYXIsIHNldFZpZXdZZWFyXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+XG4gICAgcmVzb2x2ZWRWYWx1ZSA/IHJlc29sdmVkVmFsdWUuZ2V0RnVsbFllYXIoKSA6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSlcbiAgY29uc3QgW3ZpZXdNb250aCwgc2V0Vmlld01vbnRoXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+XG4gICAgcmVzb2x2ZWRWYWx1ZSA/IHJlc29sdmVkVmFsdWUuZ2V0TW9udGgoKSA6IG5ldyBEYXRlKCkuZ2V0TW9udGgoKSlcbiAgY29uc3QgW3RlbXBEYXRlLCBzZXRUZW1wRGF0ZV0gPSBSZWFjdC51c2VTdGF0ZTxEYXRlIHwgbnVsbD4ocmVzb2x2ZWRWYWx1ZSlcbiAgY29uc3QgW3RlbXBIb3Vycywgc2V0VGVtcEhvdXJzXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+XG4gICAgcmVzb2x2ZWRWYWx1ZSA/IChyZXNvbHZlZFZhbHVlLmdldEhvdXJzKCkgJSAxMiB8fCAxMikgOiAxMilcbiAgY29uc3QgW3RlbXBNaW5zLCBzZXRUZW1wTWluc10gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PlxuICAgIHJlc29sdmVkVmFsdWUgPyByZXNvbHZlZFZhbHVlLmdldE1pbnV0ZXMoKSA6IDApXG4gIGNvbnN0IFt0ZW1wQW1QbSwgc2V0VGVtcEFtUG1dID0gUmVhY3QudXNlU3RhdGUoKCkgPT5cbiAgICByZXNvbHZlZFZhbHVlID8gKHJlc29sdmVkVmFsdWUuZ2V0SG91cnMoKSA+PSAxMiA/ICdQTScgOiAnQU0nKSA6ICdBTScpXG4gIGNvbnN0IFtzaG93WWVhclBpY2tlciwgc2V0U2hvd1llYXJQaWNrZXJdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt5ZWFyUGFnZSwgc2V0WWVhclBhZ2VdID0gUmVhY3QudXNlU3RhdGUoKCkgPT5cbiAgICBNYXRoLmZsb29yKChyZXNvbHZlZFZhbHVlID8gcmVzb2x2ZWRWYWx1ZS5nZXRGdWxsWWVhcigpIDogbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpKSAvIFlFQVJTX1BFUl9QQUdFKSAqIFlFQVJTX1BFUl9QQUdFXG4gIClcbiAgY29uc3QgW3BvcG92ZXJTdHlsZSwgc2V0UG9wb3ZlclN0eWxlXSA9IFJlYWN0LnVzZVN0YXRlPFJlYWN0LkNTU1Byb3BlcnRpZXM+KFBSRV9QT1NJVElPTl9TVFlMRSlcblxuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBwb3BvdmVyUmVmID0gUmVhY3QudXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBwb3J0YWxSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG4gIC8qIC0tLS0gcG9ydGFsIGNvbnRhaW5lciAtLS0tICovXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGVsLmNsYXNzTmFtZSA9ICdkYXRlcGlja2VyLXBvcnRhbC1yb290J1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpXG4gICAgcG9ydGFsUmVmLmN1cnJlbnQgPSBlbFxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoZWwucGFyZW50Tm9kZSkgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbClcbiAgICAgIHBvcnRhbFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyogLS0tLSBzeW5jIHRlbXAgc3RhdGUgd2hlbiB2YWx1ZSBjaGFuZ2VzIGV4dGVybmFsbHkgLS0tLSAqL1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNvbHZlZFZhbHVlICYmICFpc05hTihyZXNvbHZlZFZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgIHNldFRlbXBEYXRlKHJlc29sdmVkVmFsdWUpXG4gICAgICBzZXRWaWV3WWVhcihyZXNvbHZlZFZhbHVlLmdldEZ1bGxZZWFyKCkpXG4gICAgICBzZXRWaWV3TW9udGgocmVzb2x2ZWRWYWx1ZS5nZXRNb250aCgpKVxuICAgICAgc2V0VGVtcEhvdXJzKHJlc29sdmVkVmFsdWUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyKVxuICAgICAgc2V0VGVtcE1pbnMocmVzb2x2ZWRWYWx1ZS5nZXRNaW51dGVzKCkpXG4gICAgICBzZXRUZW1wQW1QbShyZXNvbHZlZFZhbHVlLmdldEhvdXJzKCkgPj0gMTIgPyAnUE0nIDogJ0FNJylcbiAgICAgIHNldFllYXJQYWdlKE1hdGguZmxvb3IocmVzb2x2ZWRWYWx1ZS5nZXRGdWxsWWVhcigpIC8gWUVBUlNfUEVSX1BBR0UpICogWUVBUlNfUEVSX1BBR0UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRlbXBEYXRlKG51bGwpXG4gICAgfVxuICB9LCBbcmVzb2x2ZWRWYWx1ZV0pXG5cbiAgLyogLS0tLSByZXBvc2l0aW9uIHBvcG92ZXIgb24gb3BlbiAvIHNjcm9sbCAvIHJlc2l6ZSAtLS0tICovXG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAvKiBSZXNldCBzbyB0aGUgbmV4dCBvcGVuIHN0YXJ0cyBoaWRkZW4gdW50aWwgbWVhc3VyZWQg4oCUIHJldXNpbmcgdGhlIGxhc3RcbiAgICAgICAgIHBvc2l0aW9uIHdvdWxkIGZsYXNoIHRoZSBwb3BvdmVyIGF0IHRoZSBwcmV2aW91cyBsb2NhdGlvbiAqL1xuICAgICAgc2V0UG9wb3ZlclN0eWxlKFBSRV9QT1NJVElPTl9TVFlMRSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qIE1lYXN1cmUgYWN0dWFsIHBvcG92ZXIgc2l6ZSBzbyB3ZSBwb3NpdGlvbiB3aXRoIG5vIHdhc3RlZCBzcGFjZSAqL1xuICAgIGNvbnN0IGdldEhlaWdodCA9ICgpOiBudW1iZXIgPT4ge1xuICAgICAgaWYgKHBvcG92ZXJSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm4gcG9wb3ZlclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodFxuICAgICAgfVxuICAgICAgcmV0dXJuIFBPUE9WRVJfR1VFU1Nbc2hvd1llYXJQaWNrZXIgPyAneWVhcicgOiBtb2RlXSB8fCAzMDBcbiAgICB9XG4gICAgY29uc3QgZ2V0V2lkdGggPSAoKTogbnVtYmVyID0+IHtcbiAgICAgIGlmIChwb3BvdmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHBvcG92ZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aFxuICAgICAgfVxuICAgICAgcmV0dXJuIFBPUE9WRVJfV0lEVEhfR1VFU1Nbc2hvd1llYXJQaWNrZXIgPyAneWVhcicgOiBtb2RlXSB8fCAyODBcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoaW5wdXRSZWYuY3VycmVudClcblxuICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIHNldFBvcG92ZXJTdHlsZShjYWxjUG9wb3ZlclN0eWxlKGlucHV0UmVmLmN1cnJlbnQsIGdldEhlaWdodCgpLCBnZXRXaWR0aCgpKSlcbiAgICB9XG4gICAgLyogUG9zaXRpb24gc3luY2hyb25vdXNseSBiZWZvcmUgcGFpbnQg4oCUIHRoZSBwb3BvdmVyIGlzIGFscmVhZHkgbW91bnRlZFxuICAgICAgIChoaWRkZW4sIGNvbnRlbnQtc2l6ZWQgdmlhIFBSRV9QT1NJVElPTl9TVFlMRSkgc28gbWVhc3VyZW1lbnRzIGFyZSByZWFsICovXG4gICAgdXBkYXRlKClcblxuICAgIC8qIFRocm90dGxlIHNjcm9sbC9yZXNpemUgcmVwb3NpdGlvbmluZyB0byBhbmltYXRpb24gZnJhbWVzICovXG4gICAgbGV0IHJhZiA9IDBcbiAgICBjb25zdCBzY2hlZHVsZVVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZilcbiAgICAgIHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGUpXG4gICAgfVxuXG4gICAgLyogTGlzdGVuIG9uIHRoZSBuZWFyZXN0IHNjcm9sbGFibGUgYW5jZXN0b3IgKGUuZy4gbW9kYWwgYm9keSkgQU5EIHRoZSB3aW5kb3cgKi9cbiAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2NoZWR1bGVVcGRhdGUsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzY2hlZHVsZVVwZGF0ZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKVxuICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjaGVkdWxlVXBkYXRlKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHNjaGVkdWxlVXBkYXRlKVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgbW9kZSwgc2hvd1llYXJQaWNrZXJdKVxuXG4gIC8qIC0tLS0gY2xpY2sgb3V0c2lkZSB0byBjbG9zZSAtLS0tICovXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHJldHVyblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHBvcG92ZXJSZWYuY3VycmVudCAmJiAhcG9wb3ZlclJlZi5jdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpICYmXG4gICAgICAgICAgaW5wdXRSZWYuY3VycmVudCAmJiAhaW5wdXRSZWYuY3VycmVudC5jb250YWlucyhlLnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICBzZXRJc09wZW4oZmFsc2UpXG4gICAgICAgIHNldFNob3dZZWFyUGlja2VyKGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVyKVxuICB9LCBbaXNPcGVuXSlcblxuICAvKiAtLS0tIGNvbW1pdCBoZWxwZXJzIC0tLS0gKi9cbiAgY29uc3QgYnVpbGREYXRlID0gKGJhc2U6IERhdGUsIGgxMjogbnVtYmVyLCBtaW5zOiBudW1iZXIsIGFtcG06IHN0cmluZyk6IERhdGUgPT4ge1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShiYXNlKVxuICAgIGxldCBoID0gaDEyICUgMTJcbiAgICBpZiAoYW1wbSA9PT0gJ1BNJykgaCArPSAxMlxuICAgIGlmIChoID09PSAxMiAmJiBhbXBtID09PSAnQU0nKSBoID0gMFxuICAgIGQuc2V0SG91cnMoaCwgbWlucywgMCwgMClcbiAgICByZXR1cm4gZFxuICB9XG5cbiAgLyoqXG4gICAqIEZpcmUgb25DaGFuZ2Ugd2l0aCBhIHByZS1idWlsdCBkYXRlIHdpdGhvdXQgY2xvc2luZyB0aGUgcG9wb3Zlci5cbiAgICogQ2FsbGVycyBtdXN0IGJ1aWxkIHRoZSBjb21wbGV0ZSBkYXRlIChpbmNsdWRpbmcgdGltZSkgYmVmb3JlIHBhc3NpbmcgaXQgaW4uXG4gICAqL1xuICBjb25zdCBmaXJlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCBudWxsKTogdm9pZCA9PiB7XG4gICAgaWYgKCFkYXRlIHx8IGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuXG4gICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VmFsdWUoZGF0ZSwgbW9kZSwgZGF0ZUZvcm1hdClcbiAgICBvbkNoYW5nZT8uKG1ha2VFdmVudChmb3JtYXR0ZWQsIG5hbWUgfHwgJycsIG1vZGUpKVxuICB9XG5cbiAgY29uc3QgY29tbWl0ID0gKGRhdGU6IERhdGUgfCBudWxsKTogdm9pZCA9PiB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICBvbkNoYW5nZT8uKG1ha2VFdmVudChudWxsLCBuYW1lIHx8ICcnLCBtb2RlKSlcbiAgICAgIHNldElzT3BlbihmYWxzZSlcbiAgICAgIHNldFNob3dZZWFyUGlja2VyKGZhbHNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGZpcmVDaGFuZ2UoZGF0ZSlcbiAgICBpZiAobW9kZSA9PT0gJ2RhdGUnKSB7IHNldElzT3BlbihmYWxzZSk7IHNldFNob3dZZWFyUGlja2VyKGZhbHNlKSB9XG4gIH1cblxuICBjb25zdCBjb21taXREYXRlT25seSA9IChkYXRlOiBEYXRlKTogdm9pZCA9PiB7XG4gICAgc2V0VGVtcERhdGUoZGF0ZSlcbiAgICBpZiAobW9kZSA9PT0gJ2RhdGUnIHx8IGNhbGVuZGFyKSB7XG4gICAgICBjb21taXQoZGF0ZSlcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgIC8vIEJ1aWxkIGZ1bGwgZGF0ZXRpbWUgKGRhdGUgKyBjdXJyZW50IHRpbWUgc2VsZWN0aW9uKSBhbmQgZmlyZVxuICAgICAgY29uc3QgZCA9IGJ1aWxkRGF0ZShkYXRlLCB0ZW1wSG91cnMsIHRlbXBNaW5zLCB0ZW1wQW1QbSlcbiAgICAgIGZpcmVDaGFuZ2UoZClcbiAgICB9XG4gIH1cblxuICAvKiAtLS0tIGNhbGVuZGFyIGdyaWQgLS0tLSAqL1xuICBjb25zdCBncmlkID0gYnVpbGRDYWxlbmRhckdyaWQodmlld1llYXIsIHZpZXdNb250aClcblxuICBjb25zdCBoYW5kbGVQcmV2TW9udGggPSAoKSA9PiB7XG4gICAgbGV0IG5ld1kgPSB2aWV3WWVhciwgbmV3TSA9IHZpZXdNb250aFxuICAgIGlmICh2aWV3TW9udGggPT09IDApIHsgbmV3WSA9IHZpZXdZZWFyIC0gMTsgbmV3TSA9IDExIH1cbiAgICBlbHNlIG5ld00gPSB2aWV3TW9udGggLSAxXG4gICAgc2V0Vmlld1llYXIobmV3WSk7IHNldFZpZXdNb250aChuZXdNKVxuICAgIGNvbnN0IGJhc2UgPSB0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpXG4gICAgY29uc3QgbWF4RCA9IGRheXNJbk1vbnRoKG5ld1ksIG5ld00pXG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKG5ld1ksIG5ld00sIE1hdGgubWluKGJhc2UuZ2V0RGF0ZSgpLCBtYXhEKSlcbiAgICBzZXRUZW1wRGF0ZShuZXdEYXRlKVxuICAgIGZpcmVDaGFuZ2Uoc2hvd1RpbWUgPyBidWlsZERhdGUobmV3RGF0ZSwgdGVtcEhvdXJzLCB0ZW1wTWlucywgdGVtcEFtUG0pIDogbmV3RGF0ZSlcbiAgfVxuICBjb25zdCBoYW5kbGVOZXh0TW9udGggPSAoKSA9PiB7XG4gICAgbGV0IG5ld1kgPSB2aWV3WWVhciwgbmV3TSA9IHZpZXdNb250aFxuICAgIGlmICh2aWV3TW9udGggPT09IDExKSB7IG5ld1kgPSB2aWV3WWVhciArIDE7IG5ld00gPSAwIH1cbiAgICBlbHNlIG5ld00gPSB2aWV3TW9udGggKyAxXG4gICAgc2V0Vmlld1llYXIobmV3WSk7IHNldFZpZXdNb250aChuZXdNKVxuICAgIGNvbnN0IGJhc2UgPSB0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpXG4gICAgY29uc3QgbWF4RCA9IGRheXNJbk1vbnRoKG5ld1ksIG5ld00pXG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKG5ld1ksIG5ld00sIE1hdGgubWluKGJhc2UuZ2V0RGF0ZSgpLCBtYXhEKSlcbiAgICBzZXRUZW1wRGF0ZShuZXdEYXRlKVxuICAgIGZpcmVDaGFuZ2Uoc2hvd1RpbWUgPyBidWlsZERhdGUobmV3RGF0ZSwgdGVtcEhvdXJzLCB0ZW1wTWlucywgdGVtcEFtUG0pIDogbmV3RGF0ZSlcbiAgfVxuXG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuICAvKiBtaW4vbWF4IGFjY2VwdCB0aGUgc2FtZSBmbGV4aWJsZSBpbnB1dHMgYXMgYHZhbHVlYCAoRGF0ZSwgc3RyaW5nLCB0aW1lc3RhbXApIOKAlFxuICAgICBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhbm90aGVyIERhdGVQaWNrZXIncyBvbkNoYW5nZSBpcyBhIGNvbW1vbiBzb3VyY2UgKi9cbiAgY29uc3QgcmVzb2x2ZWRNaW4gPSByZXNvbHZlVmFsdWUobWluRGF0ZSlcbiAgY29uc3QgcmVzb2x2ZWRNYXggPSByZXNvbHZlVmFsdWUobWF4RGF0ZSlcbiAgY29uc3QgbWluRHQgPSByZXNvbHZlZE1pbiA/IG5ldyBEYXRlKHJlc29sdmVkTWluLmdldEZ1bGxZZWFyKCksIHJlc29sdmVkTWluLmdldE1vbnRoKCksIHJlc29sdmVkTWluLmdldERhdGUoKSkgOiBudWxsXG4gIGNvbnN0IG1heER0ID0gcmVzb2x2ZWRNYXggPyBuZXcgRGF0ZShyZXNvbHZlZE1heC5nZXRGdWxsWWVhcigpLCByZXNvbHZlZE1heC5nZXRNb250aCgpLCByZXNvbHZlZE1heC5nZXREYXRlKCkpIDogbnVsbFxuXG4gIC8qIC0tLS0gdGltZSBjaGFuZ2UgaGFuZGxlcnMgLS0tLSAqL1xuICBjb25zdCBoYW5kbGVIb3VyQ2hhbmdlID0gKGg6IG51bWJlcikgPT4ge1xuICAgIHNldFRlbXBIb3VycyhoKVxuICAgIGlmIChzaG93VGltZSkge1xuICAgICAgY29uc3QgZCA9IGJ1aWxkRGF0ZSh0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpLCBoLCB0ZW1wTWlucywgdGVtcEFtUG0pXG4gICAgICBvbkNoYW5nZT8uKG1ha2VFdmVudChmb3JtYXRWYWx1ZShkLCBtb2RlLCBkYXRlRm9ybWF0KSwgbmFtZSB8fCAnJywgbW9kZSkpXG4gICAgfVxuICB9XG4gIGNvbnN0IGhhbmRsZU1pbkNoYW5nZSA9IChtOiBudW1iZXIpID0+IHtcbiAgICBzZXRUZW1wTWlucyhtKVxuICAgIGlmIChzaG93VGltZSkge1xuICAgICAgY29uc3QgZCA9IGJ1aWxkRGF0ZSh0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpLCB0ZW1wSG91cnMsIG0sIHRlbXBBbVBtKVxuICAgICAgb25DaGFuZ2U/LihtYWtlRXZlbnQoZm9ybWF0VmFsdWUoZCwgbW9kZSwgZGF0ZUZvcm1hdCksIG5hbWUgfHwgJycsIG1vZGUpKVxuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGVBbVBtQ2hhbmdlID0gKGFwOiBzdHJpbmcpID0+IHtcbiAgICBzZXRUZW1wQW1QbShhcClcbiAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgIGNvbnN0IGQgPSBidWlsZERhdGUodGVtcERhdGUgfHwgbmV3IERhdGUoKSwgdGVtcEhvdXJzLCB0ZW1wTWlucywgYXApXG4gICAgICBvbkNoYW5nZT8uKG1ha2VFdmVudChmb3JtYXRWYWx1ZShkLCBtb2RlLCBkYXRlRm9ybWF0KSwgbmFtZSB8fCAnJywgbW9kZSkpXG4gICAgfVxuICB9XG5cbiAgLyogLS0tLSB5ZWFyIHBpY2tlciAtLS0tICovXG4gIGNvbnN0IG9wZW5ZZWFyUGlja2VyID0gKCkgPT4ge1xuICAgIHNldFllYXJQYWdlKE1hdGguZmxvb3Iodmlld1llYXIgLyBZRUFSU19QRVJfUEFHRSkgKiBZRUFSU19QRVJfUEFHRSlcbiAgICBzZXRTaG93WWVhclBpY2tlcih0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlWWVhclNlbGVjdCA9ICh5OiBudW1iZXIpID0+IHtcbiAgICBzZXRWaWV3WWVhcih5KVxuICAgIHNldFNob3dZZWFyUGlja2VyKGZhbHNlKVxuICAgIGNvbnN0IGJhc2UgPSB0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpXG4gICAgY29uc3QgbWF4RCA9IGRheXNJbk1vbnRoKHksIHZpZXdNb250aClcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoeSwgdmlld01vbnRoLCBNYXRoLm1pbihiYXNlLmdldERhdGUoKSwgbWF4RCkpXG4gICAgc2V0VGVtcERhdGUobmV3RGF0ZSlcbiAgICBmaXJlQ2hhbmdlKHNob3dUaW1lID8gYnVpbGREYXRlKG5ld0RhdGUsIHRlbXBIb3VycywgdGVtcE1pbnMsIHRlbXBBbVBtKSA6IG5ld0RhdGUpXG4gIH1cblxuICBjb25zdCB5ZWFyUGFnZVN0YXJ0ID0gTWF0aC5mbG9vcih5ZWFyUGFnZSAvIFlFQVJTX1BFUl9QQUdFKSAqIFlFQVJTX1BFUl9QQUdFXG4gIGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogWUVBUlNfUEVSX1BBR0UgfSwgKF8sIGkpID0+IHllYXJQYWdlU3RhcnQgKyBpKVxuXG4gIC8qIC0tLS0gY2xlYXIgLS0tLSAqL1xuICBjb25zdCBoYW5kbGVDbGVhciA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHNldFRlbXBEYXRlKG51bGwpXG4gICAgb25DaGFuZ2U/LihtYWtlRXZlbnQobnVsbCwgbmFtZSB8fCAnJykpXG4gIH1cblxuICAvKiAtLS0tIGtleWJvYXJkIC0tLS0gKi9cbiAgY29uc3QgaGFuZGxlSW5wdXRLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7IHNldElzT3BlbihmYWxzZSk7IHNldFNob3dZZWFyUGlja2VyKGZhbHNlKTsgaW5wdXRSZWYuY3VycmVudD8uYmx1cigpIH1cbiAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgfVxuICB9XG5cbiAgLyogLS0tLSBtZXJnZWQgcmVmIC0tLS0gKi9cbiAgY29uc3QgbWVyZ2VJbnB1dFJlZiA9IFJlYWN0LnVzZUNhbGxiYWNrKChub2RlOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgIGlucHV0UmVmLmN1cnJlbnQgPSBub2RlXG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHJlZihub2RlKVxuICAgIGVsc2UgaWYgKHJlZikgcmVmLmN1cnJlbnQgPSBub2RlXG4gIH0sIFtyZWZdKVxuXG4gIC8qIC0tLS0gcmVuZGVyIC0tLS0gKi9cbiAgY29uc3QgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlclRleHRcbiAgICA/PyAobW9kZSA9PT0gJ3RpbWUnID8gJ1NlbGVjdCB0aW1lJyA6IG1vZGUgPT09ICdkYXRldGltZScgPyAnU2VsZWN0IGRhdGUgJiB0aW1lJyA6ICdTZWxlY3QgZGF0ZScpXG5cbiAgY29uc3QgcGlja2VyQm9keSA9IChcbiAgICA8PlxuICAgICAgey8qID09PT09PT09PT09PT09IFlFQVIgUElDS0VSID09PT09PT09PT09PT09ICovfVxuICAgICAge3Nob3dZZWFyUGlja2VyICYmIHNob3dDYWxlbmRhciAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci15ZWFyLXBpY2tlciBwLTNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLTAgcHgtMVwiIG9uQ2xpY2s9eygpID0+IHNldFllYXJQYWdlKHllYXJQYWdlIC0gWUVBUlNfUEVSX1BBR0UpfSBhcmlhLWxhYmVsPVwiUHJldmlvdXMgeWVhcnNcIj4mbHNhcXVvOzwvYnV0dG9uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZnctc2VtaWJvbGQgc21hbGxcIj57eWVhclBhZ2VTdGFydH0g4oCTIHt5ZWFyUGFnZVN0YXJ0ICsgWUVBUlNfUEVSX1BBR0UgLSAxfTwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci0wIHB4LTFcIiBvbkNsaWNrPXsoKSA9PiBzZXRZZWFyUGFnZSh5ZWFyUGFnZSArIFlFQVJTX1BFUl9QQUdFKX0gYXJpYS1sYWJlbD1cIk5leHQgeWVhcnNcIj4mcnNhcXVvOzwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci15ZWFyLWdyaWRcIj5cbiAgICAgICAgICAgIHt5ZWFycy5tYXAoKHkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50WWVhciA9IHkgPT09IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGVtcERhdGUgJiYgeSA9PT0gdGVtcERhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17eX1cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGVwaWNrZXIteWVhci1jZWxsIGJ0biBidG4tc20nLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkICYmICdidG4tcHJpbWFyeScsXG4gICAgICAgICAgICAgICAgICAgICFpc1NlbGVjdGVkICYmIGlzQ3VycmVudFllYXIgJiYgJ2J0bi1vdXRsaW5lLXByaW1hcnknLFxuICAgICAgICAgICAgICAgICAgICAhaXNTZWxlY3RlZCAmJiAhaXNDdXJyZW50WWVhciAmJiAnYnRuLWxpZ2h0IGJvcmRlcidcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVZZWFyU2VsZWN0KHkpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt5fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7LyogPT09PT09PT09PT09PT0gQ0FMRU5EQVIgKyBUSU1FID09PT09PT09PT09PT09ICovfVxuICAgICAgeyFzaG93WWVhclBpY2tlciAmJiAoXG4gICAgICAgIDw+XG5cbiAgICAgICAgICB7LyogLS0tLSBDQUxFTkRBUiArIFRJTUUgQ09OVEFJTkVSIC0tLS0gKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKCdkLWZsZXgnLCBtb2RlID09PSAnZGF0ZXRpbWUnID8gJ2ZsZXgtcm93JyA6ICdmbGV4LWNvbHVtbicpfT5cblxuICAgICAgICAgIHsvKiAtLS0tIENBTEVOREFSIC0tLS0gKi99XG4gICAgICAgICAge3Nob3dDYWxlbmRhciAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItY2FsZW5kYXIgcC0yXCI+XG4gICAgICAgICAgICAgIHsvKiBNb250aCAvIFllYXIgaGVhZGVyICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci0wIHB4LTFcIiBvbkNsaWNrPXtoYW5kbGVQcmV2TW9udGh9IGFyaWEtbGFiZWw9XCJQcmV2aW91cyBtb250aFwiPiZsc2FxdW87PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmdy1zZW1pYm9sZCBzbWFsbFwiPntNT05USFNbdmlld01vbnRoXX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXNtIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIHRleHQtcHJpbWFyeSBmdy1zZW1pYm9sZCBzbWFsbCBwLTBcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvcGVuWWVhclBpY2tlcn1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNob29zZSB5ZWFyXCJcbiAgICAgICAgICAgICAgICAgID57dmlld1llYXJ9PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLTAgcHgtMVwiIG9uQ2xpY2s9e2hhbmRsZU5leHRNb250aH0gYXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIj4mcnNhcXVvOzwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogRGF5LW9mLXdlZWsgaGVhZGVycyAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLWRheXMtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAge0RBWVNfT0ZfV0VFSy5tYXAoZCA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGtleT17ZH0gY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci1kYXktbGFiZWxcIj57ZH08L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIERheSBncmlkICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItZGF5cy1ncmlkXCI+XG4gICAgICAgICAgICAgICAge2dyaWQubWFwKChjZWxsLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1RvZGF5ID0gaXNTYW1lRGF5KGNlbGwuZGF0ZSwgdG9kYXkpXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGVtcERhdGUgJiYgaXNTYW1lRGF5KGNlbGwuZGF0ZSwgdGVtcERhdGUpXG4gICAgICAgICAgICAgICAgICBjb25zdCBpblJhbmdlID0gaXNEYXRlSW5SYW5nZShjZWxsLmRhdGUsIG1pbkR0LCBtYXhEdClcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRGlzYWJsZWREYXkgPSBjZWxsLmlzT3V0c2lkZSB8fCAhaW5SYW5nZVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkRGF5fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0ZXBpY2tlci1kYXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb2RheSAmJiAnZGF0ZXBpY2tlci1kYXktLXRvZGF5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQgJiYgJ2RhdGVwaWNrZXItZGF5LS1zZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmlzT3V0c2lkZSAmJiAnZGF0ZXBpY2tlci1kYXktLW91dHNpZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgIWluUmFuZ2UgJiYgJ2RhdGVwaWNrZXItZGF5LS1kaXNhYmxlZCdcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvbW1pdERhdGVPbmx5KGNlbGwuZGF0ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg9e2NlbGwuaXNPdXRzaWRlID8gLTEgOiAwfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge2NlbGwuZGF5fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgey8qIC0tLS0gRElWSURFUiAoZGF0ZXRpbWUgbW9kZSkgLS0tLSAqL31cbiAgICAgICAgICB7bW9kZSA9PT0gJ2RhdGV0aW1lJyAmJiA8ZGl2IGNsYXNzTmFtZT1cInZyIG14LTEgbXktMlwiIC8+fVxuXG4gICAgICAgICAgey8qIC0tLS0gVElNRSAtLS0tICovfVxuICAgICAgICAgIHtzaG93VGltZSAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItdGltZSBwLTIgZC1mbGV4IGZsZXgtY29sdW1uXCIgc3R5bGU9e3sgbWluV2lkdGg6IDE4MCB9fT5cbiAgICAgICAgICAgICAge21vZGUgPT09ICdkYXRldGltZScgJiYgPGRpdiBjbGFzc05hbWU9XCJzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkIHRleHQtY2VudGVyIG1iLTFcIj5UaW1lPC9kaXY+fVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgey8qIEhvdXIgY29sdW1uICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci10aW1lLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLXRpbWUtY29sLWxhYmVsXCI+SG91cjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLXRpbWUtY29sLXNjcm9sbFwiPlxuICAgICAgICAgICAgICAgICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIGkpID0+IGkgKyAxKS5tYXAoaCA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtofVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdkYXRlcGlja2VyLXRpbWUtaXRlbScsIGggPT09IHRlbXBIb3VycyAmJiAnYWN0aXZlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVIb3VyQ2hhbmdlKGgpfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmcoaCkucGFkU3RhcnQoMiwgJzAnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLXRpbWUtc2VwYXJhdG9yXCI+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7LyogTWludXRlIGNvbHVtbiAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItdGltZS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci10aW1lLWNvbC1sYWJlbFwiPk1pbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLXRpbWUtY29sLXNjcm9sbFwiPlxuICAgICAgICAgICAgICAgICAgICB7TUlOVVRFUy5tYXAobSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXttfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdkYXRlcGlja2VyLXRpbWUtaXRlbScsIG0gPT09IHRlbXBNaW5zICYmICdhY3RpdmUnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1pbkNoYW5nZShtKX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKG0pLnBhZFN0YXJ0KDIsICcwJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgey8qIEFNL1BNIGNvbHVtbiAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItdGltZS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci10aW1lLWNvbC1sYWJlbFwiPiZuYnNwOzwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTEgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICB7WydBTScsICdQTSddLm1hcChhcCA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXthcH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignZGF0ZXBpY2tlci10aW1lLWl0ZW0nLCAnZGF0ZXBpY2tlci10aW1lLWl0ZW0tLWFtcG0nLCB0ZW1wQW1QbSA9PT0gYXAgJiYgJ2FjdGl2ZScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQW1QbUNoYW5nZShhcCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2FwfVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcblxuICBjb25zdCBwb3BvdmVyID0gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17cG9wb3ZlclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdkYXRlcGlja2VyLXBvcG92ZXIgY2FyZCBib3JkZXIgc2hhZG93LXNtJyxcbiAgICAgICAgbW9kZSA9PT0gJ2RhdGV0aW1lJyAmJiAnZGF0ZXBpY2tlci1wb3BvdmVyLS13aWRlJ1xuICAgICAgKX1cbiAgICAgIHN0eWxlPXtwb3BvdmVyU3R5bGV9XG4gICAgPlxuICAgICAge3BpY2tlckJvZHl9XG4gICAgPC9kaXY+XG4gIClcblxuICAvKiAtLS0tIGlubGluZSBjYWxlbmRhciBtb2RlIChubyBpbnB1dCwgbm8gcG9wb3ZlcikgLS0tLSAqL1xuICBpZiAoY2FsZW5kYXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKCdkYXRlcGlja2VyLWNhbGVuZGFyLWlubGluZSBjYXJkIGJvcmRlciBzaGFkb3ctc20nLCBjbGFzc05hbWUpfT5cbiAgICAgICAge3BpY2tlckJvZHl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci13cmFwcGVyIHBvc2l0aW9uLXJlbGF0aXZlIGQtaW5saW5lLWJsb2NrIHctMTAwXCIgc3R5bGU9e3sgbWluV2lkdGg6IDAgfX0+XG4gICAgICB7LyogLS0tLSBJbnB1dCAtLS0tICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e21lcmdlSW5wdXRSZWZ9XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHJlYWRPbmx5XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnZm9ybS1jb250cm9sJyxcbiAgICAgICAgICAgIHNpemUgPT09ICdzbScgJiYgJ2Zvcm0tY29udHJvbC1zbScsXG4gICAgICAgICAgICBzaXplID09PSAnbGcnICYmICdmb3JtLWNvbnRyb2wtbGcnLFxuICAgICAgICAgICAgJ3BlLTUnLFxuICAgICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgdmFsdWU9e2Zvcm1hdFZhbHVlKHJlc29sdmVkVmFsdWUsIG1vZGUsIGRhdGVGb3JtYXQpfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFkaXNhYmxlZCAmJiBzZXRJc09wZW4oIWlzT3Blbil9XG4gICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVJbnB1dEtleURvd259XG4gICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17aXNPcGVufVxuICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAvPlxuICAgICAgICB7LyogY2xlYXIgYnV0dG9uICovfVxuICAgICAgICB7aXNDbGVhcmFibGUgJiYgcmVzb2x2ZWRWYWx1ZSAmJiAhZGlzYWJsZWQgJiYgKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1zbSBidG4tbGluayBwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTAgZW5kLTAgdHJhbnNsYXRlLW1pZGRsZS15IHBlLTIgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgc3R5bGU9e3sgekluZGV4OiAyIH19XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGVhcn1cbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgJnRpbWVzO1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiAtLS0tIFBvcnRhbCB0aGUgcG9wb3ZlciB0byBkb2N1bWVudC5ib2R5IC0tLS0gKi99XG4gICAgICB7aXNPcGVuICYmICFkaXNhYmxlZCAmJiBwb3J0YWxSZWYuY3VycmVudCAmJiBjcmVhdGVQb3J0YWwocG9wb3ZlciwgcG9ydGFsUmVmLmN1cnJlbnQpfVxuICAgIDwvZGl2PlxuICApXG59KVxuXG5EYXRlUGlja2VyLmRpc3BsYXlOYW1lID0gJ0RhdGVQaWNrZXInXG5cbmV4cG9ydCB7IERhdGVQaWNrZXIgfVxuZXhwb3J0IGRlZmF1bHQgRGF0ZVBpY2tlclxuIl19
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkAQJZQLFZ_cjs=require('./chunk-AQJZQLFZ.cjs'),chunkZOXIZM63_cjs=require('./chunk-ZOXIZM63.cjs'),chunkAWU5XGMI_cjs=require('./chunk-AWU5XGMI.cjs'),chunk2Q4NZKMX_cjs=require('./chunk-2Q4NZKMX.cjs'),chunk5IOLZUVD_cjs=require('./chunk-5IOLZUVD.cjs'),chunkM3OUUXZG_cjs=require('./chunk-M3OUUXZG.cjs'),chunkG26VJJWL_cjs=require('./chunk-G26VJJWL.cjs');require('./chunk-NPQQDBFB.cjs');var chunkH2ULQLGP_cjs=require('./chunk-H2ULQLGP.cjs');Object.defineProperty(exports,"InputCurrency",{enumerable:true,get:function(){return chunkAQJZQLFZ_cjs.a}});Object.defineProperty(exports,"DatePicker",{enumerable:true,get:function(){return chunkZOXIZM63_cjs.a}});Object.defineProperty(exports,"SearchSelect",{enumerable:true,get:function(){return chunkAWU5XGMI_cjs.a}});Object.defineProperty(exports,"Label",{enumerable:true,get:function(){return chunk2Q4NZKMX_cjs.a}});Object.defineProperty(exports,"TableLoading",{enumerable:true,get:function(){return chunk5IOLZUVD_cjs.a}});Object.defineProperty(exports,"AutoTextarea",{enumerable:true,get:function(){return chunkM3OUUXZG_cjs.a}});Object.defineProperty(exports,"NavPills",{enumerable:true,get:function(){return chunkG26VJJWL_cjs.a}});Object.defineProperty(exports,"AutoDisplay",{enumerable:true,get:function(){return chunkH2ULQLGP_cjs.a}});//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbmRleC5janMifQ==
|
package/dist/index.d.cts
CHANGED
|
@@ -5,4 +5,5 @@ export { TableLoading, TableLoadingProps } from './TableLoading.cjs';
|
|
|
5
5
|
export { AutoTextarea, AutoTextareaProps } from './AutoTextarea.cjs';
|
|
6
6
|
export { NavPill, NavPills, NavPillsProps } from './NavPills.cjs';
|
|
7
7
|
export { AutoDisplay, AutoDisplayProps } from './AutoDisplay.cjs';
|
|
8
|
+
export { InputCurrency, InputCurrencyProps } from './InputCurrency.cjs';
|
|
8
9
|
import 'react';
|
package/dist/index.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ export { TableLoading, TableLoadingProps } from './TableLoading.js';
|
|
|
5
5
|
export { AutoTextarea, AutoTextareaProps } from './AutoTextarea.js';
|
|
6
6
|
export { NavPill, NavPills, NavPillsProps } from './NavPills.js';
|
|
7
7
|
export { AutoDisplay, AutoDisplayProps } from './AutoDisplay.js';
|
|
8
|
+
export { InputCurrency, InputCurrencyProps } from './InputCurrency.js';
|
|
8
9
|
import 'react';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as DatePicker}from'./chunk-
|
|
1
|
+
export{a as InputCurrency}from'./chunk-7N56SRTN.js';export{a as DatePicker}from'./chunk-LWCY2GIT.js';export{a as SearchSelect}from'./chunk-ZCAQ7S2A.js';export{a as Label}from'./chunk-HYB5IGJK.js';export{a as TableLoading}from'./chunk-7LXLWNUR.js';export{a as AutoTextarea}from'./chunk-KKWFIJKN.js';export{a as NavPills}from'./chunk-KVUHNUBG.js';import'./chunk-RR7TBRGI.js';export{a as AutoDisplay}from'./chunk-2UX7JYM3.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbmRleC5qcyJ9
|
package/docs/DATEPICKER.md
CHANGED
|
@@ -49,6 +49,7 @@ function MyForm() {
|
|
|
49
49
|
| Prop | Type | Default | Description |
|
|
50
50
|
|---|---|---|---|
|
|
51
51
|
| `mode` | `'date'` \| `'time'` \| `'datetime'` | `'date'` | Picker mode |
|
|
52
|
+
| `calendar` | `boolean` | `false` | When `true`, renders the calendar inline without an input field or time picker. Ideal for embedding a date picker directly in a form or dashboard. |
|
|
52
53
|
| `value` | `Date` \| `string` \| `null` | — | Currently selected value |
|
|
53
54
|
| `selected` | `Date` \| `null` | — | Alias for `value` |
|
|
54
55
|
| `onChange` | `(e) => void` | — | Synthetic event; `e.target.value` is formatted string, `e.target.name` is the input name |
|
|
@@ -107,6 +108,24 @@ function MyForm() {
|
|
|
107
108
|
// e.target.value → "29/06/2026 02:30 PM"
|
|
108
109
|
```
|
|
109
110
|
|
|
111
|
+
### Inline Calendar mode
|
|
112
|
+
|
|
113
|
+
When `calendar` is `true`, the picker renders as an inline calendar card — no input field, no popover, no time picker. The calendar is always visible, making it ideal for dashboards, date-range selectors, or any layout where you want the calendar embedded directly in the page.
|
|
114
|
+
|
|
115
|
+
```jsx
|
|
116
|
+
<DatePicker
|
|
117
|
+
calendar
|
|
118
|
+
name="eventDate"
|
|
119
|
+
value={eventDate}
|
|
120
|
+
onChange={(e) => setEventDate(e.target.value)}
|
|
121
|
+
minDate={new Date()}
|
|
122
|
+
/>
|
|
123
|
+
// e.target.value → "2026-07-22"
|
|
124
|
+
// Renders as an inline card with the full calendar grid
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The component applies the `datepicker-calendar-inline` CSS class alongside `card`, `border`, and `shadow-sm` for the wrapper. Any `className` you pass is merged onto the wrapper div.
|
|
128
|
+
|
|
110
129
|
### Linked pickers (start date bounds end date)
|
|
111
130
|
|
|
112
131
|
`minDate`/`maxDate` accept the formatted string another picker emits, so linking two pickers needs no conversion:
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# InputCurrency
|
|
2
|
+
|
|
3
|
+
> Bootstrap 5 controlled currency input for financial forms. Numbers in, numbers out — the component manages locale-formatted display internally. Zero dependencies.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Import
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
// Default import (recommended for single-component tree-shaking)
|
|
11
|
+
import InputCurrency from 'react-bootstrap-plugins/InputCurrency'
|
|
12
|
+
|
|
13
|
+
// Named import from individual entry point
|
|
14
|
+
import { InputCurrency } from 'react-bootstrap-plugins/InputCurrency'
|
|
15
|
+
|
|
16
|
+
// Barrel import
|
|
17
|
+
import { InputCurrency } from 'react-bootstrap-plugins'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Basic Usage
|
|
23
|
+
|
|
24
|
+
```jsx
|
|
25
|
+
import { useState } from 'react'
|
|
26
|
+
import { InputCurrency } from 'react-bootstrap-plugins'
|
|
27
|
+
|
|
28
|
+
function FeeForm() {
|
|
29
|
+
const [fee, setFee] = useState(150000)
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<InputCurrency
|
|
33
|
+
name="fee"
|
|
34
|
+
value={fee}
|
|
35
|
+
onChange={(e) => setFee(e.target.value)}
|
|
36
|
+
placeholder="Enter fee amount"
|
|
37
|
+
/>
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The input displays `UGX 150,000` but the component state holds `150000` (a number). While focused, the raw number `150000` is shown for frictionless editing. On blur, it snaps back to `UGX 150,000`.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Data Contract
|
|
47
|
+
|
|
48
|
+
| Direction | Type | Example |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `value` prop (in) | `number` | `150000` |
|
|
51
|
+
| `onChange` → `e.target.value` (out) | `number \| ''` | `150000` or `''` (when cleared) |
|
|
52
|
+
| Display (internal) | `string` | `"UGX 150,000"` |
|
|
53
|
+
|
|
54
|
+
The parent component never sees commas or currency symbols — it works entirely with numbers.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Editing UX
|
|
59
|
+
|
|
60
|
+
- **Focused**: raw number shown (`150000`) — no commas or symbols fighting keystrokes
|
|
61
|
+
- **Blurred**: locale-formatted currency (`UGX 150,000`) — clean, readable display
|
|
62
|
+
- **External value change**: if the parent pushes a new `value` while the field is not focused, the display updates immediately (e.g. after a successful API call that resets the form)
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Currency & Locale
|
|
67
|
+
|
|
68
|
+
```jsx
|
|
69
|
+
// UGX — zero decimal places (default)
|
|
70
|
+
<InputCurrency value={50000} name="tuition" onChange={handleChange} />
|
|
71
|
+
|
|
72
|
+
// USD with cents
|
|
73
|
+
<InputCurrency
|
|
74
|
+
value={99.99}
|
|
75
|
+
currency="USD"
|
|
76
|
+
locale="en-US"
|
|
77
|
+
decimals={2}
|
|
78
|
+
name="price"
|
|
79
|
+
onChange={handleChange}
|
|
80
|
+
/>
|
|
81
|
+
|
|
82
|
+
// Kenyan Shillings
|
|
83
|
+
<InputCurrency
|
|
84
|
+
value={25000}
|
|
85
|
+
currency="KES"
|
|
86
|
+
locale="en-KE"
|
|
87
|
+
decimals={0}
|
|
88
|
+
name="fee"
|
|
89
|
+
onChange={handleChange}
|
|
90
|
+
/>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Plain Number Mode
|
|
96
|
+
|
|
97
|
+
When `plain` is `true`, formatting omits the currency symbol and outputs a plain locale-formatted number. Useful for non-monetary numeric inputs that still benefit from thousand-separator formatting:
|
|
98
|
+
|
|
99
|
+
```jsx
|
|
100
|
+
<InputCurrency
|
|
101
|
+
value={50000}
|
|
102
|
+
plain
|
|
103
|
+
name="studentCount"
|
|
104
|
+
onChange={(e) => setCount(e.target.value)}
|
|
105
|
+
placeholder="Number of students"
|
|
106
|
+
/>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Displays `150,000` instead of `UGX 150,000`.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Props
|
|
114
|
+
|
|
115
|
+
Accepts all standard `<input>` props (except `value`, `onChange`, and `type`, which are managed internally), plus:
|
|
116
|
+
|
|
117
|
+
| Prop | Type | Default | Description |
|
|
118
|
+
|---|---|---|---|
|
|
119
|
+
| `value` | `number \| string \| null` | — | Numeric value to display. Pass `undefined`/`null`/`''` for an empty field |
|
|
120
|
+
| `onChange` | `(e: ChangeEvent) => void` | — | Called with a synthetic event where `e.target.value` is the parsed `number` (or `''` when cleared). `e.target.name` is preserved |
|
|
121
|
+
| `currency` | `string` | `'UGX'` | ISO 4217 currency code |
|
|
122
|
+
| `locale` | `string` | `'en-UG'` | BCP 47 locale tag for formatting |
|
|
123
|
+
| `decimals` | `number` | `0` | Number of decimal places. UGX/JYP = 0, USD/EUR = 2, etc. |
|
|
124
|
+
| `plain` | `boolean` | `false` | When `true`, omits the currency symbol and outputs a plain locale-formatted number |
|
|
125
|
+
| `name` | `string` | — | Input name attribute. Accessible in `onChange` via `e.target.name` |
|
|
126
|
+
| `id` | `string` | — | Input id attribute. Falls back to `name` if omitted |
|
|
127
|
+
| `className` | `string` | — | Additional classes merged with `form-control` |
|
|
128
|
+
| `placeholder` | `string` | — | Placeholder text shown when the field is empty |
|
|
129
|
+
| `disabled` | `boolean` | `false` | Disables the input |
|
|
130
|
+
| `readOnly` | `boolean` | `false` | Makes the input read-only |
|
|
131
|
+
| `autoComplete` | `string` | `'off'` | Defaults to `'off'` for financial inputs |
|
|
132
|
+
|
|
133
|
+
A `ref` is forwarded to the underlying `<input>` element.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Edge Cases Handled
|
|
138
|
+
|
|
139
|
+
| Input | Display | Value |
|
|
140
|
+
|---|---|---|
|
|
141
|
+
| Empty / cleared | Placeholder shown | `''` |
|
|
142
|
+
| `null` / `undefined` | Empty field | `''` |
|
|
143
|
+
| `"150000"` (string) | Formatted currency | `150000` (number) |
|
|
144
|
+
| `"-"` alone | Raw `-` shown while typing | `''` (not emitted) |
|
|
145
|
+
| `"."` alone | Raw `.` shown while typing | `''` (not emitted) |
|
|
146
|
+
| `"abc123"` | `123` while focused → formatted on blur | `123` |
|
|
147
|
+
| Letters only | Empty → formatted to `''` | `''` |
|
|
148
|
+
| Negative numbers | `-50000` → `UGX -50,000` | `-50000` |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Accessibility
|
|
153
|
+
|
|
154
|
+
- `inputMode="decimal"` — brings up the numeric keypad on mobile
|
|
155
|
+
- `type="text"` — avoids browser number-input quirks (spinners, locale-specific formatting)
|
|
156
|
+
- `autoComplete="off"` — prevents unwanted autofill on financial fields
|
|
157
|
+
- `id` falls back to `name` when omitted — always ensure a label association
|
|
158
|
+
- Ref forwarding for programmatic focus management
|
|
159
|
+
- All standard ARIA attributes spread through via `...rest`
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Dark Mode
|
|
164
|
+
|
|
165
|
+
Uses Bootstrap's `form-control` class, which adapts automatically. Set `data-bs-theme="dark"` on any parent element.
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Bundle Size
|
|
170
|
+
|
|
171
|
+
~0.6 KB (min+gzip).
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## See Also
|
|
176
|
+
|
|
177
|
+
- [AutoTextarea](./AUTOTEXTAREA.md) — Auto-resizing textarea
|
|
178
|
+
- [SearchSelect](./SEARCHSELECT.md) — Filterable, searchable select dropdown
|
|
179
|
+
- [Label](./LABEL.md) — Bootstrap-styled form label with required indicator
|
|
180
|
+
- [Main README](../README.md) — Package overview, installation, and general info
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-bootstrap-plugins",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Production-grade Bootstrap 5 UI plugins for React — DatePicker, SearchSelect, Label, TableLoading, and more. Zero runtime dependencies beyond React.",
|
|
3
|
+
"version": "2.4.1",
|
|
4
|
+
"description": "Production-grade Bootstrap 5 UI plugins for React — DatePicker, SearchSelect, Label, TableLoading, InputCurrency, and more. Zero runtime dependencies beyond React.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Tumwesigye Robert",
|
|
@@ -82,6 +82,16 @@
|
|
|
82
82
|
"default": "./dist/AutoDisplay.cjs"
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
|
+
"./InputCurrency": {
|
|
86
|
+
"import": {
|
|
87
|
+
"types": "./dist/InputCurrency.d.ts",
|
|
88
|
+
"default": "./dist/InputCurrency.js"
|
|
89
|
+
},
|
|
90
|
+
"require": {
|
|
91
|
+
"types": "./dist/InputCurrency.d.ts",
|
|
92
|
+
"default": "./dist/InputCurrency.cjs"
|
|
93
|
+
}
|
|
94
|
+
},
|
|
85
95
|
"./NavPills": {
|
|
86
96
|
"import": {
|
|
87
97
|
"types": "./dist/NavPills.d.ts",
|
|
@@ -117,7 +127,7 @@
|
|
|
117
127
|
"prepublishOnly": "pnpm run build",
|
|
118
128
|
"lint": "echo 'Lint passed'",
|
|
119
129
|
"test": "echo 'Tests passed'",
|
|
120
|
-
"push
|
|
130
|
+
"push": "npm publish --no-git-checks"
|
|
121
131
|
},
|
|
122
132
|
"keywords": [
|
|
123
133
|
"react",
|
|
@@ -141,7 +151,12 @@
|
|
|
141
151
|
"react-bootstrap",
|
|
142
152
|
"form-controls",
|
|
143
153
|
"tree-shakeable",
|
|
144
|
-
"zero-dependencies"
|
|
154
|
+
"zero-dependencies",
|
|
155
|
+
"input-currency",
|
|
156
|
+
"currency-input",
|
|
157
|
+
"currency-formatter",
|
|
158
|
+
"number-input",
|
|
159
|
+
"financial-input"
|
|
145
160
|
],
|
|
146
161
|
"repository": {
|
|
147
162
|
"type": "git",
|