@satriobagasp/vue-slicksort 1.0.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/LICENSE +24 -0
- package/README.md +461 -0
- package/dist/vue-slicksort.cjs.js +1284 -0
- package/dist/vue-slicksort.esm.js +1273 -0
- package/dist/vue-slicksort.min.js +2 -0
- package/dist/vue-slicksort.min.js.map +1 -0
- package/dist/vue-slicksort.umd.js +1288 -0
- package/index.d.ts +16 -0
- package/package.json +112 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(g,m){typeof exports=="object"&&typeof module!="undefined"?m(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],m):(g=typeof globalThis!="undefined"?globalThis:g||self,m(g.VueSlicksort={},g.vue))})(this,function(g,m){"use strict";const E=m.defineComponent({inject:["manager"],props:{index:{type:Number,required:!0},disabled:{type:Boolean,default:!1}},data(){return{}},watch:{index(t){this.$el&&this.$el.sortableInfo&&(this.$el.sortableInfo.index=t)},disabled(t){t?this.removeDraggable():this.setDraggable(this.index)}},mounted(){const{disabled:t,index:e}=this.$props;t||this.setDraggable(e)},beforeUnmount(){this.disabled||this.removeDraggable()},methods:{setDraggable(t){const e=this.$el;e.sortableInfo={index:t,manager:this.manager},this.ref={node:e},this.manager.add(this.ref)},removeDraggable(){this.manager.remove(this.ref)}}});class A{constructor(){this.refs=[],this.active=null}add(e){this.refs||(this.refs=[]),this.refs.push(e)}remove(e){const i=this.getIndex(e);i!==-1&&this.refs.splice(i,1)}isActive(){return!!this.active}getActive(){return this.refs.find(({node:e})=>{var i,s;return((i=e==null?void 0:e.sortableInfo)==null?void 0:i.index)==((s=this==null?void 0:this.active)==null?void 0:s.index)})||null}getIndex(e){return this.refs.indexOf(e)}getRefs(){return this.refs}getOrderedRefs(){return this.refs.sort((e,i)=>e.node.sortableInfo.index-i.node.sortableInfo.index)}}const b=t=>t.touches!=null;function I(t,e){return!!t&&Object.prototype.hasOwnProperty.call(t,e)}function O(t,e,i){const s=t.slice(0);if(i>=s.length){let n=i-s.length;for(;n--+1;)s.push(void 0)}return s.splice(i,0,s.splice(e,1)[0]),s}function F(t,e){const i=t.slice(0);return e>=i.length||i.splice(e,1),i}function Y(t,e,i){const s=t.slice(0);return e===s.length?s.push(i):s.splice(e,0,i),s}const y={start:["touchstart","mousedown"],move:["touchmove","mousemove"],end:["touchend","mouseup"],cancel:["touchcancel","keyup"]};function $(t,e){for(;t;){if(e(t))return t;t=t.parentNode}}function _(t,e,i){return i<t?t:i>e?e:i}function S(t){return t.substr(-2)==="px"?parseFloat(t):0}function N(t){const e=window.getComputedStyle(t);return{top:S(e.marginTop),right:S(e.marginRight),bottom:S(e.marginBottom),left:S(e.marginLeft)}}function w(t,e="page"){const i=`${e}X`,s=`${e}Y`;return{x:b(t)?t.touches[0][i]:t[i],y:b(t)?t.touches[0][s]:t[s]}}function L(t){const e=[t];for(;t;t=t.offsetParent)e.unshift(t);return e}function K(t,e){const i=L(t),s=L(e);if(i[0]!=s[0])throw"No common ancestor!";for(let n=0;n<i.length;n++)if(i[n]!=s[n])return i[n-1]}function v(t,e,i={top:0,left:0}){if(t){const s={top:i.top+t.offsetTop,left:i.left+t.offsetLeft};return t.offsetParent!==e.offsetParent?v(t.offsetParent,e,s):s}return{top:0,left:0}}function M(t){const e=t.querySelectorAll("input, textarea, select"),i=t.cloneNode(!0);return[...i.querySelectorAll("input, textarea, select")].forEach((n,r)=>{n.type!=="file"&&e[r]&&(n.value=e[r].value)}),i}function X(t,e,i){if(typeof t=="string"&&(t=+t),Array.isArray(t)||(t=[t,t]),t.length!==2)throw new Error(`lockOffset prop of SortableContainer should be a single value or an array of exactly two values. Given ${t}`);const[s,n]=t;return[R(s,e,i),R(n,e,i)]}function R(t,e,i){let s=t,n=t,r="px";if(typeof t=="string"){const o=/^[+-]?\d*(?:\.\d*)?(px|%)$/.exec(t);if(o===null)throw new Error(`lockOffset value should be a number or a string of a number followed by "px" or "%". Given ${t}`);s=n=parseFloat(t),r=o[1]}if(!isFinite(s)||!isFinite(n))throw new Error(`lockOffset value should be a finite. Given ${t}`);return r==="%"&&(s=s*e/100,n=n*i/100),{x:s,y:n}}function q(t,e,i,s){const n=t-i,r=e-s;return Math.sqrt(n*n+r*r)}function j(t){return{x:t.left+t.width/2,y:t.top+t.height/2}}function k(t=[]){for(let e=0,i=t.length;e<i;e++){const s=t[e],n=s.node;if(!n)return;s.edgeOffset=null,T(n)}}function T(t,e="",i=""){!t||(t.style.transform=e,t.style.transitionDuration=i)}function H(t,e,i){const s=Math.max(e,i);return Math.min(e,i)<=t&&t<=s}function P({x:t,y:e},{top:i,left:s,width:n,height:r}){const o=H(t,s,s+n),h=H(e,i,i+r);return o&&h}const C=setTimeout,B=m.defineComponent({inject:{SlicksortHub:{from:"SlicksortHub",default:null}},provide(){return{manager:this.manager}},props:{list:{type:Array,required:!0},axis:{type:String,default:"y"},distance:{type:Number,default:0},pressDelay:{type:Number,default:0},pressThreshold:{type:Number,default:5},useDragHandle:{type:Boolean,default:!1},useWindowAsScrollContainer:{type:Boolean,default:!1},hideSortableGhost:{type:Boolean,default:!0},lockToContainerEdges:{type:Boolean,default:!1},lockOffset:{type:[String,Number,Array],default:"50%"},transitionDuration:{type:Number,default:300},appendTo:{type:String,default:"body"},draggedSettlingDuration:{type:Number,default:null},group:{type:String,default:""},accept:{type:[Boolean,Array,Function],default:null},cancelKey:{type:String,default:"Escape"},block:{type:Array,default:()=>[]},lockAxis:{type:String,default:""},helperClass:{type:String,default:""},contentWindow:{type:Object,default:null},shouldCancelStart:{type:Function,default:t=>["input","textarea","select","option","button"].indexOf(t.target.tagName.toLowerCase())!==-1},getHelperDimensions:{type:Function,default:({node:t})=>({width:t.offsetWidth,height:t.offsetHeight})}},emits:["sort-start","sort-move","sort-end","sort-cancel","sort-insert","sort-remove","update:list"],data(){let t=!1;return this.group&&this.SlicksortHub&&(t=!0),{sorting:!1,hub:t?this.SlicksortHub:null,manager:new A}},mounted(){if(this.hub&&(this.id=this.hub.getId()),this.container=this.$el,this.document=this.container.ownerDocument||document,this._window=this.contentWindow||window,this.useWindowAsScrollContainer)this.scrollContainer={scrollLeft:0,scrollTop:0};else{let t=this.container.parentElement;for(;t&&t!==document.body;){const e=window.getComputedStyle(t).overflowY;if(e==="auto"||e==="scroll")break;t=t.parentElement}this.scrollContainer=t||this.container}this.events={start:this.handleStart,move:this.handleMove,end:this.handleEnd};for(const t in this.events)I(this.events,t)&&y[t].forEach(e=>this.container.addEventListener(e,this.events[t]));this.hub&&this.hub.addContainer(this)},beforeUnmount(){for(const t in this.events)I(this.events,t)&&y[t].forEach(e=>this.container.removeEventListener(e,this.events[t]));this.hub&&this.hub.removeContainer(this),this.dragendTimer&&clearTimeout(this.dragendTimer),this.cancelTimer&&clearTimeout(this.cancelTimer),this.pressTimer&&clearTimeout(this.pressTimer),this.autoscrollInterval&&clearInterval(this.autoscrollInterval)},methods:{handleStart(t){const{distance:e,shouldCancelStart:i}=this.$props;if(!b(t)&&t.button===2||i(t))return!1;this._touched=!0,this._pos=w(t);const s=t.target,n=$(s,r=>r.sortableInfo!=null);if(n&&n.sortableInfo&&this.nodeIsChild(n)&&!this.sorting){const{useDragHandle:r}=this.$props,{index:o}=n.sortableInfo;if(r&&!$(s,h=>h.sortableHandle!=null))return;this.manager.active={index:o},s.tagName.toLowerCase()==="a"&&t.preventDefault(),e||(this.pressDelay===0?this.handlePress(t):this.pressTimer=C(()=>this.handlePress(t),this.pressDelay))}},nodeIsChild(t){return t.sortableInfo.manager===this.manager},handleMove(t){const{distance:e,pressThreshold:i}=this.$props;if(!this.sorting&&this._touched){const s=w(t);this._delta={x:this._pos.x-s.x,y:this._pos.y-s.y};const n=Math.abs(this._delta.x)+Math.abs(this._delta.y);!e&&(!i||i&&n>=i)?(this.cancelTimer&&clearTimeout(this.cancelTimer),this.cancelTimer=C(this.cancel,0)):e&&n>=e&&this.manager.isActive()&&this.handlePress(t)}},handleEnd(){if(!this._touched)return;const{distance:t}=this.$props;this._touched=!1,t||this.cancel()},cancel(){this.sorting||(clearTimeout(this.pressTimer),this.manager.active=null,this.hub&&this.hub.cancel())},handleSortCancel(t){(b(t)||t.key===this.cancelKey)&&(this.newIndex=this.index,this.canceling=!0,this.translate={x:0,y:0},this.animateNodes(),this.handleSortEnd(t))},handlePress(t){t.stopPropagation();const e=this.manager.getActive();if(e){const{getHelperDimensions:i,helperClass:s,hideSortableGhost:n,appendTo:r}=this.$props,{node:o}=e,{index:h}=o.sortableInfo,a=N(o),l=this.container.getBoundingClientRect(),u=i({index:h,node:o});this.node=o,this.margin=a,this.width=u.width,this.height=u.height,this.marginOffset={x:this.margin.left+this.margin.right,y:Math.max(this.margin.top,this.margin.bottom)},this.boundingClientRect=o.getBoundingClientRect(),this.containerBoundingRect=l,this.index=h,this.newIndex=h;const p=M(o);this.helper=this.document.querySelector(r).appendChild(p),this.helper.style.position="fixed",this.helper.style.top=`${this.boundingClientRect.top-a.top}px`,this.helper.style.left=`${this.boundingClientRect.left-a.left}px`,this.helper.style.width=`${this.width}px`,this.helper.style.height=`${this.height}px`,this.helper.style.boxSizing="border-box",this.helper.style.pointerEvents="none",n&&(this.sortableGhost=o,o.style.visibility="hidden",o.style.opacity="0"),this.hub&&(this.hub.sortStart(this),this.hub.helper=this.helper,this.hub.ghost=this.sortableGhost),this.intializeOffsets(t,this.boundingClientRect),this.offsetEdge=v(o,this.container),s&&this.helper.classList.add(...s.split(" ")),this.listenerNode=b(t)?o:this._window,y.move.forEach(f=>this.listenerNode.addEventListener(f,this.handleSortMove)),y.end.forEach(f=>this.listenerNode.addEventListener(f,this.handleSortEnd)),y.cancel.forEach(f=>this.listenerNode.addEventListener(f,this.handleSortCancel)),this.sorting=!0,this.$emit("sort-start",{event:t,node:o,index:h})}},handleSortMove(t){if(t.preventDefault(),this.updatePosition(t),this.hub){const e=this.list[this.index];this.hub.handleSortMove(t,e)}(!this.hub||this.hub.isDest(this))&&(this.animateNodes(),this.autoscroll()),this.$emit("sort-move",{event:t})},handleDropOut(){const t=this.list[this.index],e=F(this.list,this.index);return this.$emit("sort-remove",{oldIndex:this.index}),this.$emit("update:list",e),t},handleDropIn(t){const e=Y(this.list,this.newIndex,t);this.$emit("sort-insert",{newIndex:this.newIndex,value:t}),this.$emit("update:list",e),this.handleDragEnd()},handleDragOut(){this.autoscrollInterval&&(clearInterval(this.autoscrollInterval),this.autoscrollInterval=null),this.hub.isSource(this)?(this.translate={x:1e4,y:1e4},this.animateNodes()):(this.manager.getRefs().forEach(t=>{t.node.style.transform=""}),this.dragendTimer=C(this.handleDragEnd,this.transitionDuration||0))},handleDragEnd(){this.autoscrollInterval&&(clearInterval(this.autoscrollInterval),this.autoscrollInterval=null),k(this.manager.getRefs()),this.sortableGhost&&(this.sortableGhost.remove(),this.sortableGhost=null),this.dragendTimer&&(clearTimeout(this.dragendTimer),this.dragendTimer=null),this.manager.active=null,this._touched=!1,this.sorting=!1},intializeOffsets(t,e){const{useWindowAsScrollContainer:i,containerBoundingRect:s,_window:n}=this;this.marginOffset={x:this.margin.left+this.margin.right,y:Math.max(this.margin.top,this.margin.bottom)},this._axis={x:this.axis.indexOf("x")>=0,y:this.axis.indexOf("y")>=0},this.initialOffset=w(t),this.initialScroll={top:this.scrollContainer.scrollTop,left:this.scrollContainer.scrollLeft},this.initialWindowScroll={top:window.pageYOffset,left:window.pageXOffset},this.translate={x:0,y:0},this.minTranslate={},this.maxTranslate={},this._axis.x&&(this.minTranslate.x=(i?0:s.left)-e.left-this.width/2,this.maxTranslate.x=(i?n.innerWidth:s.left+s.width)-e.left-this.width/2),this._axis.y&&(this.minTranslate.y=(i?0:s.top)-e.top-this.height/2,this.maxTranslate.y=(i?n.innerHeight:s.top+s.height)-e.top-this.height/2)},handleDragIn(t,e,i){if(this.hub.isSource(this))return;this.dragendTimer&&(this.handleDragEnd(),clearTimeout(this.dragendTimer),this.dragendTimer=null);const s=this.manager.getRefs();this.index=s.length,this.manager.active={index:this.index};const n=this.container.getBoundingClientRect(),r=i.getBoundingClientRect();this.containerBoundingRect=n,this.sortableGhost=M(e),this.container.appendChild(this.sortableGhost);const o=this.sortableGhost.getBoundingClientRect();this.boundingClientRect=o,this.margin=N(this.sortableGhost),this.width=o.width,this.height=o.height,this.offsetEdge=v(this.sortableGhost,this.container),this.intializeOffsets(t,o),this.initialOffset.x+=o.x-r.x,this.initialOffset.y+=o.y-r.y,this.sorting=!0},handleSortEnd(t){this.listenerNode&&(y.move.forEach(s=>this.listenerNode.removeEventListener(s,this.handleSortMove)),y.end.forEach(s=>this.listenerNode.removeEventListener(s,this.handleSortEnd)),y.cancel.forEach(s=>this.listenerNode.removeEventListener(s,this.handleSortCancel)));const e=this.manager.getRefs();this.helper&&this.helperClass&&this.helper.classList.remove(...this.helperClass.split(" ")),this.autoscrollInterval&&clearInterval(this.autoscrollInterval),this.autoscrollInterval=null;const i=()=>{this.helper&&(this.helper.remove(),this.helper=null),this.hideSortableGhost&&this.sortableGhost&&(this.sortableGhost.style.visibility="",this.sortableGhost.style.opacity=""),k(e),this.hub&&!this.hub.isDest(this)?this.canceling?this.hub.cancel():this.hub.handleSortEnd():this.canceling?this.$emit("sort-cancel",{event:t}):(this.$emit("sort-end",{event:t,oldIndex:this.index,newIndex:this.newIndex}),this.$emit("update:list",O(this.list,this.index,this.newIndex))),this.manager.active=null,this._touched=!1,this.canceling=!1,this.sorting=!1};this.transitionDuration||this.draggedSettlingDuration?this.transitionHelperIntoPlace(e,i):i()},transitionHelperIntoPlace(t,e){if(this.draggedSettlingDuration===0||t.length===0||!this.helper)return Promise.resolve();const i=t[this.index].node;let s=0,n=0;const r={top:window.pageYOffset-this.initialWindowScroll.top,left:window.pageXOffset-this.initialWindowScroll.left};if(this.hub&&!this.hub.isDest(this)&&!this.canceling){const l=this.hub.getDest();if(!l)return;const u=l.newIndex,p=l.manager.getOrderedRefs(),f=u<p.length?p[u].node:l.sortableGhost,c=K(i,f),d=v(i,c),x=v(f,c);s=x.left-d.left-r.left,n=x.top-d.top-r.top}else{const l=t[this.newIndex].node,u={left:this.scrollContainer.scrollLeft-this.initialScroll.left+r.left,top:this.scrollContainer.scrollTop-this.initialScroll.top+r.top};s=-u.left,this.translate&&this.translate.x>0?s+=l.offsetLeft+l.offsetWidth-(i.offsetLeft+i.offsetWidth):s+=l.offsetLeft-i.offsetLeft,n=-u.top,this.translate&&this.translate.y>0?n+=l.offsetTop+l.offsetHeight-(i.offsetTop+i.offsetHeight):n+=l.offsetTop-i.offsetTop}const o=this.draggedSettlingDuration!==null?this.draggedSettlingDuration:this.transitionDuration;T(this.helper,`translate3d(${s}px,${n}px, 0)`,`${o}ms`);const h=l=>{(!l||l.propertyName==="transform")&&(clearTimeout(a),T(this.helper),e())},a=setTimeout(h,o+10);this.helper.addEventListener("transitionend",h)},updatePosition(t){const{lockAxis:e,lockToContainerEdges:i}=this.$props,s=w(t),n={x:s.x-this.initialOffset.x,y:s.y-this.initialOffset.y};if(n.y-=window.pageYOffset-this.initialWindowScroll.top,n.x-=window.pageXOffset-this.initialWindowScroll.left,this.translate=n,i){const[r,o]=X(this.lockOffset,this.height,this.width),h={x:this.width/2-r.x,y:this.height/2-r.y},a={x:this.width/2-o.x,y:this.height/2-o.y};this.minTranslate.x&&this.maxTranslate.x&&(n.x=_(this.minTranslate.x+h.x,this.maxTranslate.x-a.x,n.x)),this.minTranslate.y&&this.maxTranslate.y&&(n.y=_(this.minTranslate.y+h.y,this.maxTranslate.y-a.y,n.y))}e==="x"?n.y=0:e==="y"&&(n.x=0),this.helper&&(this.helper.style.transform=`translate3d(${n.x}px,${n.y}px, 0)`)},animateNodes(){const{transitionDuration:t,hideSortableGhost:e}=this.$props,i=this.manager.getOrderedRefs(),s={left:this.scrollContainer.scrollLeft-this.initialScroll.left,top:this.scrollContainer.scrollTop-this.initialScroll.top},n={left:this.offsetEdge.left+this.translate.x+s.left,top:this.offsetEdge.top+this.translate.y+s.top},r={top:window.pageYOffset-this.initialWindowScroll.top,left:window.pageXOffset-this.initialWindowScroll.left};this.newIndex=null;for(let o=0,h=i.length;o<h;o++){const{node:a}=i[o],l=a.sortableInfo.index,u=a.offsetWidth,p=a.offsetHeight,f={width:this.width>u?u/2:this.width/2,height:this.height>p?p/2:this.height/2},c={x:0,y:0};let{edgeOffset:d}=i[o];d||(i[o].edgeOffset=d=v(a,this.container));const x=o<i.length-1&&i[o+1],D=o>0&&i[o-1];if(x&&!x.edgeOffset&&(x.edgeOffset=v(x.node,this.container)),l===this.index){e&&(this.sortableGhost=a,a.style.visibility="hidden",a.style.opacity="0");continue}t&&(a.style.transitionDuration=`${t}ms`),this._axis.x?this._axis.y?l<this.index&&(n.left+r.left-f.width<=d.left&&n.top+r.top<=d.top+f.height||n.top+r.top+f.height<=d.top)?(c.x=this.width+this.marginOffset.x,d.left+c.x>this.containerBoundingRect.width-f.width&&x&&(c.x=x.edgeOffset.left-d.left,c.y=x.edgeOffset.top-d.top),this.newIndex===null&&(this.newIndex=l)):l>this.index&&(n.left+r.left+f.width>=d.left&&n.top+r.top+f.height>=d.top||n.top+r.top+f.height>=d.top+p)&&(c.x=-(this.width+this.marginOffset.x),d.left+c.x<this.containerBoundingRect.left+f.width&&D&&(c.x=D.edgeOffset.left-d.left,c.y=D.edgeOffset.top-d.top),this.newIndex=l):l>this.index&&n.left+r.left+f.width>=d.left?(c.x=-(this.width+this.marginOffset.x),this.newIndex=l):l<this.index&&n.left+r.left<=d.left+f.width&&(c.x=this.width+this.marginOffset.x,this.newIndex==null&&(this.newIndex=l)):this._axis.y&&(l>this.index&&n.top+r.top+f.height>=d.top?(c.y=-(this.height+this.marginOffset.y),this.newIndex=l):l<this.index&&n.top+r.top<=d.top+f.height&&(c.y=this.height+this.marginOffset.y,this.newIndex==null&&(this.newIndex=l))),a.style.transform=`translate3d(${c.x}px,${c.y}px,0)`}this.newIndex==null&&(this.newIndex=this.index)},autoscroll(){const t=this.translate,e={x:0,y:0},i={x:1,y:1},s={x:10,y:10};t.y>=this.maxTranslate.y-this.height/2?(e.y=1,i.y=s.y*Math.abs((this.maxTranslate.y-this.height/2-t.y)/this.height)):t.x>=this.maxTranslate.x-this.width/2?(e.x=1,i.x=s.x*Math.abs((this.maxTranslate.x-this.width/2-t.x)/this.width)):t.y<=this.minTranslate.y+this.height/2?(e.y=-1,i.y=s.y*Math.abs((t.y-this.height/2-this.minTranslate.y)/this.height)):t.x<=this.minTranslate.x+this.width/2&&(e.x=-1,i.x=s.x*Math.abs((t.x-this.width/2-this.minTranslate.x)/this.width)),this.autoscrollInterval&&(clearInterval(this.autoscrollInterval),this.autoscrollInterval=null),(e.x!==0||e.y!==0)&&(this.autoscrollInterval=window.setInterval(()=>{const n={left:1*i.x*e.x,top:1*i.y*e.y};this.useWindowAsScrollContainer?this._window.scrollBy(n.left,n.top):(this.scrollContainer.scrollTop+=n.top,this.scrollContainer.scrollLeft+=n.left),this.translate.x+=n.left,this.translate.y+=n.top,this.animateNodes()},5))}}}),G={beforeMount(t){t.sortableHandle=!0}},W=m.defineComponent({name:"SlickItem",mixins:[E],props:{tag:{type:String,default:"div"}},render(){var t,e;return m.h(this.tag,(e=(t=this.$slots).default)==null?void 0:e.call(t))}}),z=m.defineComponent({name:"SlickList",mixins:[B],props:{tag:{type:String,default:"div"},itemKey:{type:[String,Function],default:"id"}},render(){var t,e;return this.$slots.item?m.h(this.tag,this.list.map((i,s)=>{let n;if(i!=null){if(typeof this.itemKey=="function")n=this.itemKey(i);else if(typeof i=="object"&&I(i,this.itemKey)&&typeof i[this.itemKey]=="string")n=i[this.itemKey];else if(typeof i=="string")n=i;else throw new Error("Cannot find key for item, use the item-key prop and pass a function or string");return m.h(W,{key:n,index:s},{default:()=>{var r,o;return(o=(r=this.$slots).item)==null?void 0:o.call(r,{item:i,index:s})}})}})):m.h(this.tag,(e=(t=this.$slots).default)==null?void 0:e.call(t))}}),V=m.defineComponent({props:{tag:{type:String,default:"span"}},mounted(){this.$el.sortableHandle=!0},render(){var t,e;return m.h(this.tag,(e=(t=this.$slots).default)==null?void 0:e.call(t))}});let U=1;function J(t,e,i){return e.id===t.id?!0:t.block&&t.block.includes(e.group)?!1:typeof t.accept=="function"?t.accept({dest:t,source:e,payload:i}):typeof t.accept=="boolean"?t.accept:!!(t.accept&&t.accept.includes(e.group)||t.group===e.group)}function Q({x:t,y:e},i,s){if(P({x:t,y:e},s.container.getBoundingClientRect()))return s;let n=null,r=Infinity;for(let o=0;o<i.length;o++){const h=i[o],a=h.container.getBoundingClientRect();if(P({x:t,y:e},a))return h;const u=j(a),p=q(t,e,u.x,u.y);p<r&&(n=h,r=p)}return n}class Z{constructor(){this.helper=null,this.ghost=null,this.refs=[],this.source=null,this.dest=null}getId(){return""+U++}isSource({id:e}){var i;return((i=this.source)==null?void 0:i.id)===e}getSource(){return this.source}isDest({id:e}){var i;return((i=this.dest)==null?void 0:i.id)===e}getDest(){return this.dest}addContainer(e){this.refs.push(e)}removeContainer(e){this.refs=this.refs.filter(i=>i.id!==e.id)}sortStart(e){this.source=e,this.dest=e}handleSortMove(e,i){var s,n,r,o;const h=this.dest,a=this.source;if(!h||!a)return;const l=this.refs,u=w(e,"client"),p=Q(u,l,h)||h;h.id!==p.id&&J(p,a,i)&&(this.dest=p,h.handleDragOut(),p.handleDragIn(e,this.ghost,this.helper)),h.id!==((s=this.source)==null?void 0:s.id)&&((n=this.dest)==null||n.updatePosition(e),(r=this.dest)==null||r.animateNodes(),(o=this.dest)==null||o.autoscroll())}handleSortEnd(){var e,i,s,n;if(((e=this.source)==null?void 0:e.id)===((i=this.dest)==null?void 0:i.id))return;const r=(s=this.source)==null?void 0:s.handleDropOut();(n=this.dest)==null||n.handleDropIn(r),this.reset()}reset(){this.source=null,this.dest=null,this.helper=null,this.ghost=null}cancel(){var e;(e=this.dest)==null||e.handleDragEnd(),this.reset()}}const tt={install(t){t.directive("drag-handle",G),t.provide("SlicksortHub",new Z)}};g.ContainerMixin=B,g.DragHandle=V,g.ElementMixin=E,g.HandleDirective=G,g.SlickItem=W,g.SlickList=z,g.arrayMove=O,g.plugin=tt,Object.defineProperty(g,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=vue-slicksort.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue-slicksort.min.js","sources":["../src/ElementMixin.ts","../src/Manager.ts","../src/utils.ts","../src/ContainerMixin.ts","../src/HandleDirective.ts","../src/components/SlickItem.ts","../src/components/SlickList.ts","../src/components/DragHandle.ts","../src/SlicksortHub.ts","../src/plugin.ts"],"sourcesContent":["import { defineComponent } from 'vue';\r\nimport Manager, { ItemRef } from './Manager';\r\n\r\ninterface ComponentData {\r\n manager: Manager;\r\n ref: ItemRef;\r\n}\r\n\r\n// Export Sortable Element Component Mixin\r\nexport const ElementMixin = defineComponent({\r\n inject: ['manager'],\r\n props: {\r\n index: {\r\n type: Number,\r\n required: true,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n\r\n data() {\r\n return ({} as unknown) as ComponentData;\r\n },\r\n\r\n watch: {\r\n index(newIndex) {\r\n if (this.$el && this.$el.sortableInfo) {\r\n this.$el.sortableInfo.index = newIndex;\r\n }\r\n },\r\n disabled(isDisabled) {\r\n if (isDisabled) {\r\n this.removeDraggable();\r\n } else {\r\n this.setDraggable(this.index);\r\n }\r\n },\r\n },\r\n\r\n mounted() {\r\n const { disabled, index } = this.$props;\r\n\r\n if (!disabled) {\r\n this.setDraggable(index);\r\n }\r\n },\r\n\r\n beforeUnmount() {\r\n if (!this.disabled) this.removeDraggable();\r\n },\r\n\r\n methods: {\r\n setDraggable(index: number) {\r\n const node = this.$el;\r\n\r\n node.sortableInfo = {\r\n index,\r\n manager: this.manager,\r\n };\r\n\r\n this.ref = { node };\r\n this.manager.add(this.ref);\r\n },\r\n\r\n removeDraggable() {\r\n this.manager.remove(this.ref);\r\n },\r\n },\r\n});\r\n","import { TopLeft } from './utils';\r\n\r\nexport interface SortableNode extends HTMLElement {\r\n sortableInfo: {\r\n index: number;\r\n manager: Manager;\r\n };\r\n sortableHandle?: boolean;\r\n}\r\n\r\nexport interface ItemRef {\r\n node: SortableNode;\r\n index?: number;\r\n edgeOffset?: TopLeft | null;\r\n}\r\n\r\nexport default class Manager {\r\n private refs: ItemRef[] = [];\r\n public active: { index: number } | null = null;\r\n\r\n add(ref: ItemRef): void {\r\n if (!this.refs) {\r\n this.refs = [];\r\n }\r\n\r\n this.refs.push(ref);\r\n }\r\n\r\n remove(ref: ItemRef): void {\r\n const index = this.getIndex(ref);\r\n\r\n if (index !== -1) {\r\n this.refs.splice(index, 1);\r\n }\r\n }\r\n\r\n isActive(): boolean {\r\n return !!this.active;\r\n }\r\n\r\n getActive(): ItemRef | null {\r\n return this.refs.find(({ node }) => node?.sortableInfo?.index == this?.active?.index) || null;\r\n }\r\n\r\n getIndex(ref: ItemRef): number {\r\n return this.refs.indexOf(ref);\r\n }\r\n\r\n getRefs(): ItemRef[] {\r\n return this.refs;\r\n }\r\n\r\n getOrderedRefs(): ItemRef[] {\r\n return this.refs.sort((a, b) => {\r\n return a.node.sortableInfo.index - b.node.sortableInfo.index;\r\n });\r\n }\r\n}\r\n","import { ItemRef, SortableNode } from './Manager';\r\n\r\nexport type XY = { x: number; y: number };\r\n\r\nexport type TopLeft = { top: number; left: number };\r\nexport type BottomRight = { bottom: number; right: number };\r\nexport type WidthHeight = { width: number; height: number };\r\nexport type Timer = ReturnType<typeof setTimeout>;\r\nexport type PointEventName =\r\n | 'mousedown'\r\n | 'mousemove'\r\n | 'mouseup'\r\n | 'touchstart'\r\n | 'touchmove'\r\n | 'touchend'\r\n | 'touchcancel';\r\nexport type PointEvent = MouseEvent | TouchEvent;\r\n\r\nexport const isTouch = (e: Event): e is TouchEvent => {\r\n return (e as TouchEvent).touches != null;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport function hasOwnProperty<X extends object, Y extends PropertyKey>(\r\n obj: X | null,\r\n prop: Y,\r\n): obj is X & Record<Y, unknown> {\r\n return !!obj && Object.prototype.hasOwnProperty.call(obj, prop);\r\n}\r\n\r\nexport function arrayMove<T>(arr: T[], previousIndex: number, newIndex: number): (T | undefined)[] {\r\n const array: (T | undefined)[] = arr.slice(0);\r\n if (newIndex >= array.length) {\r\n let k = newIndex - array.length;\r\n while (k-- + 1) {\r\n array.push(undefined);\r\n }\r\n }\r\n array.splice(newIndex, 0, array.splice(previousIndex, 1)[0]);\r\n return array;\r\n}\r\n\r\nexport function arrayRemove<T>(arr: T[], previousIndex: number): T[] {\r\n const array = arr.slice(0);\r\n if (previousIndex >= array.length) return array;\r\n array.splice(previousIndex, 1);\r\n return array;\r\n}\r\n\r\nexport function arrayInsert<T>(arr: T[], newIndex: number, value: T): T[] {\r\n const array = arr.slice(0);\r\n if (newIndex === array.length) {\r\n array.push(value);\r\n } else {\r\n array.splice(newIndex, 0, value);\r\n }\r\n return array;\r\n}\r\n\r\nexport const events: Record<string, string[]> = {\r\n start: ['touchstart', 'mousedown'],\r\n move: ['touchmove', 'mousemove'],\r\n end: ['touchend', 'mouseup'],\r\n cancel: ['touchcancel', 'keyup'],\r\n};\r\n\r\nexport function closest(\r\n el: SortableNode | Node | null,\r\n fn: (el: SortableNode | Node) => boolean,\r\n): SortableNode | Node | undefined {\r\n while (el) {\r\n if (fn(el)) return el;\r\n el = el.parentNode;\r\n }\r\n}\r\n\r\nexport function limit(min: number, max: number, value: number): number {\r\n if (value < min) {\r\n return min;\r\n }\r\n if (value > max) {\r\n return max;\r\n }\r\n return value;\r\n}\r\n\r\nfunction getCSSPixelValue(stringValue: string): number {\r\n if (stringValue.substr(-2) === 'px') {\r\n return parseFloat(stringValue);\r\n }\r\n return 0;\r\n}\r\n\r\nexport function getElementMargin(element: HTMLElement): TopLeft & BottomRight {\r\n const style = window.getComputedStyle(element);\r\n\r\n return {\r\n top: getCSSPixelValue(style.marginTop),\r\n right: getCSSPixelValue(style.marginRight),\r\n bottom: getCSSPixelValue(style.marginBottom),\r\n left: getCSSPixelValue(style.marginLeft),\r\n };\r\n}\r\n\r\nexport function getPointerOffset(e: PointEvent, reference: 'client' | 'page' = 'page'): XY {\r\n const x = `${reference}X` as 'clientX' | 'pageX';\r\n const y = `${reference}Y` as 'clientY' | 'pageY';\r\n\r\n return {\r\n x: isTouch(e) ? e.touches[0][x] : e[x],\r\n y: isTouch(e) ? e.touches[0][y] : e[y],\r\n };\r\n}\r\n\r\nfunction offsetParents(node: HTMLElement) {\r\n const nodes = [node];\r\n for (; node; node = node.offsetParent as HTMLElement) {\r\n nodes.unshift(node);\r\n }\r\n return nodes;\r\n}\r\n\r\nexport function commonOffsetParent(node1: HTMLElement, node2: HTMLElement): HTMLElement | undefined {\r\n const parents1 = offsetParents(node1);\r\n const parents2 = offsetParents(node2);\r\n\r\n if (parents1[0] != parents2[0]) throw 'No common ancestor!';\r\n\r\n for (let i = 0; i < parents1.length; i++) {\r\n if (parents1[i] != parents2[i]) return parents1[i - 1];\r\n }\r\n}\r\n\r\nexport function getEdgeOffset(\r\n node: HTMLElement,\r\n container: HTMLElement,\r\n offset = { top: 0, left: 0 },\r\n): { top: number; left: number } {\r\n // Get the actual offsetTop / offsetLeft value, no matter how deep the node is nested\r\n if (node) {\r\n const nodeOffset = {\r\n top: offset.top + node.offsetTop,\r\n left: offset.left + node.offsetLeft,\r\n };\r\n if (node.offsetParent !== container.offsetParent) {\r\n return getEdgeOffset(node.offsetParent as HTMLElement, container, nodeOffset);\r\n } else {\r\n return nodeOffset;\r\n }\r\n }\r\n return { top: 0, left: 0 };\r\n}\r\n\r\nexport function cloneNode(node: HTMLElement): HTMLElement {\r\n const fields = node.querySelectorAll('input, textarea, select') as NodeListOf<HTMLInputElement>;\r\n const clonedNode = node.cloneNode(true) as HTMLElement;\r\n const clonedFields = [...clonedNode.querySelectorAll('input, textarea, select')] as HTMLInputElement[]; // Convert NodeList to Array\r\n\r\n clonedFields.forEach((field, index) => {\r\n if (field.type !== 'file' && fields[index]) {\r\n field.value = fields[index].value;\r\n }\r\n });\r\n\r\n return clonedNode;\r\n}\r\n\r\nexport function getLockPixelOffsets(lockOffset: string | number | number[], width: number, height: number): XY[] {\r\n if (typeof lockOffset == 'string') {\r\n lockOffset = +lockOffset;\r\n }\r\n\r\n if (!Array.isArray(lockOffset)) {\r\n lockOffset = [lockOffset, lockOffset];\r\n }\r\n\r\n if (lockOffset.length !== 2) {\r\n throw new Error(\r\n `lockOffset prop of SortableContainer should be a single value or an array of exactly two values. Given ${lockOffset}`,\r\n );\r\n }\r\n\r\n const [minLockOffset, maxLockOffset] = lockOffset;\r\n\r\n return [getLockPixelOffset(minLockOffset, width, height), getLockPixelOffset(maxLockOffset, width, height)];\r\n}\r\n\r\nexport function getLockPixelOffset(lockOffset: number, width: number, height: number): XY {\r\n let offsetX = lockOffset;\r\n let offsetY = lockOffset;\r\n let unit = 'px';\r\n\r\n if (typeof lockOffset === 'string') {\r\n const match = /^[+-]?\\d*(?:\\.\\d*)?(px|%)$/.exec(lockOffset);\r\n\r\n if (match === null) {\r\n throw new Error(\r\n `lockOffset value should be a number or a string of a number followed by \"px\" or \"%\". Given ${lockOffset}`,\r\n );\r\n }\r\n\r\n offsetX = offsetY = parseFloat(lockOffset);\r\n unit = match[1];\r\n }\r\n\r\n if (!isFinite(offsetX) || !isFinite(offsetY)) {\r\n throw new Error(`lockOffset value should be a finite. Given ${lockOffset}`);\r\n }\r\n\r\n if (unit === '%') {\r\n offsetX = (offsetX * width) / 100;\r\n offsetY = (offsetY * height) / 100;\r\n }\r\n\r\n return {\r\n x: offsetX,\r\n y: offsetY,\r\n };\r\n}\r\n\r\nexport function getDistance(x1: number, y1: number, x2: number, y2: number): number {\r\n const x = x1 - x2;\r\n const y = y1 - y2;\r\n return Math.sqrt(x * x + y * y);\r\n}\r\n\r\nexport function getRectCenter(clientRect: ClientRect): XY {\r\n return {\r\n x: clientRect.left + clientRect.width / 2,\r\n y: clientRect.top + clientRect.height / 2,\r\n };\r\n}\r\n\r\nexport function resetTransform(nodes: ItemRef[] = []): void {\r\n for (let i = 0, len = nodes.length; i < len; i++) {\r\n const node = nodes[i];\r\n const el = node.node;\r\n\r\n if (!el) return;\r\n\r\n // Clear the cached offsetTop / offsetLeft value\r\n node.edgeOffset = null;\r\n\r\n // Remove the transforms / transitions\r\n setTransform(el);\r\n }\r\n}\r\n\r\nexport function setTransform(el: HTMLElement | null, transform = '', duration = ''): void {\r\n if (!el) return;\r\n el.style['transform'] = transform;\r\n el.style['transitionDuration'] = duration;\r\n}\r\n\r\nfunction withinBounds(pos: number, top: number, bottom: number) {\r\n const upper = Math.max(top, bottom);\r\n const lower = Math.min(top, bottom);\r\n return lower <= pos && pos <= upper;\r\n}\r\n\r\nexport function isPointWithinRect({ x, y }: XY, { top, left, width, height }: ClientRect): boolean {\r\n const withinX = withinBounds(x, left, left + width);\r\n const withinY = withinBounds(y, top, top + height);\r\n return withinX && withinY;\r\n}\r\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\r\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\nimport { defineComponent, PropType } from 'vue';\r\nimport Manager, { ItemRef, SortableNode } from './Manager';\r\nimport SlicksortHub, { AcceptProp, ContainerRef } from './SlicksortHub';\r\nimport {\r\n arrayMove,\r\n arrayRemove,\r\n arrayInsert,\r\n cloneNode,\r\n closest,\r\n commonOffsetParent,\r\n events,\r\n getEdgeOffset,\r\n getElementMargin,\r\n getLockPixelOffsets,\r\n getPointerOffset,\r\n limit,\r\n resetTransform,\r\n XY,\r\n TopLeft,\r\n WidthHeight,\r\n PointEvent,\r\n BottomRight,\r\n isTouch,\r\n setTransform,\r\n hasOwnProperty,\r\n} from './utils';\r\n\r\ntype PointEventListener = (e: PointEvent) => unknown;\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nconst timeout: (cb: Function, dur?: number) => number = setTimeout;\r\ntype Timer = number | null;\r\n\r\ninterface ComponentProps {\r\n list: unknown[];\r\n axis: 'x' | 'y' | 'xy' | 'yx'; // 'x', 'y', 'xy'\r\n distance: number;\r\n pressDelay: number;\r\n pressThreshold: number;\r\n useDragHandle: boolean;\r\n useWindowAsScrollContainer: boolean;\r\n hideSortableGhost: boolean;\r\n lockToContainerEdges: boolean;\r\n lockOffset: string | number | string[];\r\n transitionDuration: number;\r\n appendTo: string;\r\n draggedSettlingDuration: number;\r\n group: string;\r\n accept: boolean | string[] | ((ctx: { source: ContainerRef; dest: ContainerRef; payload: unknown }) => boolean);\r\n cancelKey: string;\r\n block: string[];\r\n lockAxis: string;\r\n helperClass: string;\r\n contentWindow: Window;\r\n shouldCancelStart: (e: PointEvent) => boolean;\r\n getHelperDimensions: (ref: ItemRef) => { width: number; height: number };\r\n}\r\n\r\ninterface ComponentData extends ComponentProps {\r\n id: string;\r\n\r\n // usually thi.$el\r\n container: HTMLElement;\r\n\r\n // ref to document\r\n document: Document;\r\n\r\n // Provided for sortable elements to register\r\n manager: Manager;\r\n\r\n // ref to window\r\n _window: Window;\r\n\r\n // window or container\r\n // TODO make this a prop\r\n scrollContainer: { scrollTop: number; scrollLeft: number };\r\n\r\n // Injected and used for drag and drop between lists\r\n hub?: SlicksortHub;\r\n\r\n // Normalized events for mouse and touch devices\r\n events: Record<string, PointEventListener>;\r\n\r\n // MOusedown or touchstart occurred\r\n _touched: boolean;\r\n\r\n // initial point of contact\r\n _pos: XY;\r\n\r\n // distance from _pos to current pointer position\r\n // Used for drag threshold, aka `distance`\r\n _delta: XY;\r\n\r\n // Data structure for `axis` prop\r\n _axis: { x: boolean; y: boolean };\r\n\r\n // timer for press threshold\r\n pressTimer: Timer;\r\n\r\n // used to wait until next tick to cancel\r\n cancelTimer: Timer;\r\n\r\n // dragout transition timer\r\n dragendTimer: Timer;\r\n\r\n // Used for repeating autoscroll\r\n autoscrollInterval: Timer;\r\n\r\n // The translation applied to the helper\r\n translate: XY;\r\n\r\n // The minmax values of translate before starting autoscroll\r\n minTranslate: Partial<XY>;\r\n maxTranslate: Partial<XY>;\r\n\r\n // Is the user currently sorting\r\n sorting: boolean;\r\n\r\n // The user has initiated a cancel action\r\n canceling: boolean;\r\n\r\n // The active node that was originally clicked\r\n node: SortableNode;\r\n\r\n // The measurements of the node that have to be calculated separately\r\n margin: TopLeft & BottomRight;\r\n width: number;\r\n height: number;\r\n\r\n // space added around the active node\r\n marginOffset: XY;\r\n\r\n // Initial offset of the cursor\r\n initialOffset: XY;\r\n\r\n // Initial scroll position of the container and window\r\n initialScroll: TopLeft;\r\n initialWindowScroll: TopLeft;\r\n\r\n // The top-left offset of the node from the offsetParent of the *container*\r\n // Its important to use the container as a source for the offsetParent so all nodes have the same reference point\r\n offsetEdge: TopLeft;\r\n\r\n // client rect for the node and container\r\n boundingClientRect: ClientRect;\r\n containerBoundingRect: ClientRect;\r\n\r\n // Starting index (use last index for drag in operations)\r\n index: number | null;\r\n\r\n // Target index for dropping\r\n newIndex: number | null;\r\n\r\n // The node that follows the mouse\r\n helper: HTMLElement | null;\r\n\r\n // The node that stays in the list and is hidden\r\n sortableGhost: HTMLElement | null;\r\n\r\n // The element that we listen to for events\r\n listenerNode: GlobalEventHandlers;\r\n}\r\n\r\n// Export Sortable Container Component Mixin\r\nexport const ContainerMixin = defineComponent({\r\n inject: {\r\n SlicksortHub: {\r\n from: 'SlicksortHub',\r\n default: null,\r\n },\r\n },\r\n\r\n provide() {\r\n return {\r\n manager: this.manager,\r\n };\r\n },\r\n\r\n props: {\r\n list: { type: Array as PropType<unknown[]>, required: true },\r\n axis: { type: String, default: 'y' }, // 'x', 'y', 'xy'\r\n distance: { type: Number, default: 0 },\r\n pressDelay: { type: Number, default: 0 },\r\n pressThreshold: { type: Number, default: 5 },\r\n useDragHandle: { type: Boolean, default: false },\r\n useWindowAsScrollContainer: { type: Boolean, default: false },\r\n hideSortableGhost: { type: Boolean, default: true },\r\n lockToContainerEdges: { type: Boolean, default: false },\r\n lockOffset: { type: [String, Number, Array] as PropType<string | number | number[]>, default: '50%' },\r\n transitionDuration: { type: Number, default: 300 },\r\n appendTo: { type: String, default: 'body' },\r\n draggedSettlingDuration: { type: Number, default: null },\r\n group: { type: String, default: '' },\r\n accept: { type: [Boolean, Array, Function] as PropType<AcceptProp>, default: null },\r\n cancelKey: { type: String, default: 'Escape' },\r\n block: { type: Array as PropType<string[]>, default: () => [] },\r\n lockAxis: { type: String, default: '' },\r\n helperClass: { type: String, default: '' },\r\n contentWindow: { type: Object as PropType<Window>, default: null },\r\n shouldCancelStart: {\r\n type: Function as PropType<PointEventListener>,\r\n default: (e: PointEvent) => {\r\n // Cancel sorting if the event target is an `input`, `textarea`, `select` or `option`\r\n const disabledElements = ['input', 'textarea', 'select', 'option', 'button'];\r\n return disabledElements.indexOf((e.target as HTMLElement).tagName.toLowerCase()) !== -1;\r\n },\r\n },\r\n getHelperDimensions: {\r\n type: Function as PropType<(arg: ItemRef) => WidthHeight>,\r\n default: ({ node }: ItemRef) => ({\r\n width: node.offsetWidth,\r\n height: node.offsetHeight,\r\n }),\r\n },\r\n },\r\n\r\n emits: ['sort-start', 'sort-move', 'sort-end', 'sort-cancel', 'sort-insert', 'sort-remove', 'update:list'],\r\n\r\n data() {\r\n let useHub = false;\r\n if (this.group) {\r\n // If the group option is set, it is assumed the user intends\r\n // to drag between containers and the required plugin has been installed\r\n if (this.SlicksortHub) {\r\n useHub = true;\r\n } else if (process.env.NODE_ENV !== 'production') {\r\n throw new Error('Slicksort plugin required to use \"group\" prop');\r\n }\r\n }\r\n\r\n return ({\r\n sorting: false,\r\n hub: useHub ? this.SlicksortHub : null,\r\n manager: new Manager(),\r\n } as unknown) as ComponentData;\r\n },\r\n\r\n mounted() {\r\n if (this.hub) {\r\n this.id = this.hub.getId();\r\n }\r\n this.container = this.$el;\r\n this.document = this.container.ownerDocument || document;\r\n this._window = this.contentWindow || window;\r\n\r\n // Find the actual scroll container by traversing up the DOM\r\n if (this.useWindowAsScrollContainer) {\r\n this.scrollContainer = { scrollLeft: 0, scrollTop: 0 };\r\n } else {\r\n // Start from parent element to find scrollable container\r\n let scrollContainer = this.container.parentElement;\r\n while (scrollContainer && scrollContainer !== document.body) {\r\n const overflowY = window.getComputedStyle(scrollContainer).overflowY;\r\n if (overflowY === 'auto' || overflowY === 'scroll') {\r\n break;\r\n }\r\n scrollContainer = scrollContainer.parentElement;\r\n }\r\n this.scrollContainer = scrollContainer || this.container;\r\n }\r\n\r\n this.events = {\r\n start: this.handleStart,\r\n move: this.handleMove,\r\n end: this.handleEnd,\r\n };\r\n\r\n for (const key in this.events) {\r\n if (hasOwnProperty(this.events, key)) {\r\n // @ts-ignore\r\n events[key].forEach((eventName) => this.container.addEventListener(eventName, this.events[key]));\r\n }\r\n }\r\n\r\n if (this.hub) {\r\n this.hub.addContainer(this as ContainerRef);\r\n }\r\n },\r\n\r\n beforeUnmount() {\r\n for (const key in this.events) {\r\n if (hasOwnProperty(this.events, key)) {\r\n // @ts-ignore\r\n events[key].forEach((eventName) => this.container.removeEventListener(eventName, this.events[key]));\r\n }\r\n }\r\n\r\n if (this.hub) {\r\n this.hub.removeContainer(this as ContainerRef);\r\n }\r\n\r\n if (this.dragendTimer) clearTimeout(this.dragendTimer);\r\n if (this.cancelTimer) clearTimeout(this.cancelTimer);\r\n if (this.pressTimer) clearTimeout(this.pressTimer);\r\n if (this.autoscrollInterval) clearInterval(this.autoscrollInterval);\r\n },\r\n\r\n methods: {\r\n handleStart(e: PointEvent) {\r\n const { distance, shouldCancelStart } = this.$props;\r\n\r\n if ((!isTouch(e) && e.button === 2) || shouldCancelStart(e)) {\r\n return false;\r\n }\r\n\r\n this._touched = true;\r\n this._pos = getPointerOffset(e);\r\n const target = e.target as HTMLElement;\r\n\r\n const node = closest(target, (el) => (el as SortableNode).sortableInfo != null) as SortableNode;\r\n\r\n if (node && node.sortableInfo && this.nodeIsChild(node) && !this.sorting) {\r\n const { useDragHandle } = this.$props;\r\n const { index } = node.sortableInfo;\r\n\r\n if (useDragHandle && !closest(target, (el) => (el as SortableNode).sortableHandle != null)) return;\r\n\r\n this.manager.active = { index };\r\n\r\n /*\r\n * Fixes a bug in Firefox where the :active state of anchor tags\r\n * prevent subsequent 'mousemove' events from being fired\r\n * (see https://github.com/clauderic/react-sortable-hoc/issues/118)\r\n */\r\n if (target.tagName.toLowerCase() === 'a') {\r\n e.preventDefault();\r\n }\r\n\r\n if (!distance) {\r\n if (this.pressDelay === 0) {\r\n this.handlePress(e);\r\n } else {\r\n this.pressTimer = timeout(() => this.handlePress(e), this.pressDelay) as Timer;\r\n }\r\n }\r\n }\r\n },\r\n\r\n nodeIsChild(node: SortableNode) {\r\n return node.sortableInfo.manager === this.manager;\r\n },\r\n\r\n handleMove(e: PointEvent) {\r\n const { distance, pressThreshold } = this.$props;\r\n\r\n if (!this.sorting && this._touched) {\r\n const offset = getPointerOffset(e);\r\n this._delta = {\r\n x: this._pos.x - offset.x,\r\n y: this._pos.y - offset.y,\r\n };\r\n const delta = Math.abs(this._delta.x) + Math.abs(this._delta.y);\r\n\r\n if (!distance && (!pressThreshold || (pressThreshold && delta >= pressThreshold))) {\r\n if (this.cancelTimer) clearTimeout(this.cancelTimer);\r\n this.cancelTimer = timeout(this.cancel, 0);\r\n } else if (distance && delta >= distance && this.manager.isActive()) {\r\n this.handlePress(e);\r\n }\r\n }\r\n },\r\n\r\n handleEnd() {\r\n if (!this._touched) return;\r\n\r\n const { distance } = this.$props;\r\n\r\n this._touched = false;\r\n\r\n if (!distance) {\r\n this.cancel();\r\n }\r\n },\r\n\r\n cancel() {\r\n if (!this.sorting) {\r\n clearTimeout(this.pressTimer);\r\n this.manager.active = null;\r\n if (this.hub) this.hub.cancel();\r\n }\r\n },\r\n\r\n handleSortCancel(e: KeyboardEvent | TouchEvent) {\r\n if (isTouch(e) || e.key === this.cancelKey) {\r\n this.newIndex = this.index;\r\n this.canceling = true;\r\n this.translate = { x: 0, y: 0 };\r\n this.animateNodes();\r\n this.handleSortEnd(e);\r\n }\r\n },\r\n\r\n handlePress(e: PointEvent) {\r\n e.stopPropagation();\r\n const active = this.manager.getActive();\r\n\r\n if (active) {\r\n const { getHelperDimensions, helperClass, hideSortableGhost, appendTo } = this.$props;\r\n const { node } = active;\r\n const { index } = node.sortableInfo;\r\n const margin = getElementMargin(node);\r\n\r\n const containerBoundingRect = this.container.getBoundingClientRect();\r\n const dimensions = getHelperDimensions({ index, node });\r\n\r\n this.node = node;\r\n this.margin = margin;\r\n this.width = dimensions.width;\r\n this.height = dimensions.height;\r\n this.marginOffset = {\r\n x: this.margin.left + this.margin.right,\r\n y: Math.max(this.margin.top, this.margin.bottom),\r\n };\r\n this.boundingClientRect = node.getBoundingClientRect();\r\n this.containerBoundingRect = containerBoundingRect;\r\n this.index = index;\r\n this.newIndex = index;\r\n\r\n const clonedNode = cloneNode(node);\r\n\r\n this.helper = this.document.querySelector(appendTo)!.appendChild(clonedNode);\r\n\r\n this.helper.style.position = 'fixed';\r\n this.helper.style.top = `${this.boundingClientRect.top - margin.top}px`;\r\n this.helper.style.left = `${this.boundingClientRect.left - margin.left}px`;\r\n this.helper.style.width = `${this.width}px`;\r\n this.helper.style.height = `${this.height}px`;\r\n this.helper.style.boxSizing = 'border-box';\r\n this.helper.style.pointerEvents = 'none';\r\n\r\n if (hideSortableGhost) {\r\n this.sortableGhost = node;\r\n node.style.visibility = 'hidden';\r\n node.style.opacity = '0';\r\n }\r\n\r\n if (this.hub) {\r\n this.hub.sortStart(this as ContainerRef);\r\n this.hub.helper = this.helper;\r\n this.hub.ghost = this.sortableGhost;\r\n }\r\n\r\n this.intializeOffsets(e, this.boundingClientRect);\r\n this.offsetEdge = getEdgeOffset(node, this.container);\r\n\r\n if (helperClass) {\r\n this.helper.classList.add(...helperClass.split(' '));\r\n }\r\n\r\n this.listenerNode = isTouch(e) ? node : this._window;\r\n // @ts-ignore\r\n events.move.forEach((eventName) => this.listenerNode.addEventListener(eventName, this.handleSortMove));\r\n // @ts-ignore\r\n events.end.forEach((eventName) => this.listenerNode.addEventListener(eventName, this.handleSortEnd));\r\n // @ts-ignore\r\n events.cancel.forEach((eventName) => this.listenerNode.addEventListener(eventName, this.handleSortCancel));\r\n\r\n this.sorting = true;\r\n\r\n this.$emit('sort-start', { event: e, node, index });\r\n }\r\n },\r\n\r\n handleSortMove(e: PointEvent) {\r\n e.preventDefault(); // Prevent scrolling on mobile\r\n\r\n this.updatePosition(e);\r\n\r\n if (this.hub) {\r\n const payload = this.list[this.index!];\r\n this.hub.handleSortMove(e, payload);\r\n }\r\n\r\n if (!this.hub || this.hub.isDest(this as ContainerRef)) {\r\n this.animateNodes();\r\n this.autoscroll();\r\n }\r\n\r\n this.$emit('sort-move', { event: e });\r\n },\r\n\r\n handleDropOut() {\r\n const removed = this.list[this.index!];\r\n const newValue = arrayRemove(this.list, this.index!);\r\n this.$emit('sort-remove', {\r\n oldIndex: this.index,\r\n });\r\n this.$emit('update:list', newValue);\r\n return removed;\r\n },\r\n\r\n handleDropIn(payload: unknown) {\r\n const newValue = arrayInsert(this.list, this.newIndex!, payload);\r\n this.$emit('sort-insert', {\r\n newIndex: this.newIndex,\r\n value: payload,\r\n });\r\n this.$emit('update:list', newValue);\r\n this.handleDragEnd();\r\n },\r\n\r\n handleDragOut() {\r\n if (this.autoscrollInterval) {\r\n clearInterval(this.autoscrollInterval);\r\n this.autoscrollInterval = null;\r\n }\r\n if (this.hub!.isSource(this as ContainerRef)) {\r\n // Trick to animate all nodes up\r\n this.translate = {\r\n x: 10000,\r\n y: 10000,\r\n };\r\n this.animateNodes();\r\n } else {\r\n this.manager.getRefs().forEach((ref) => {\r\n ref.node.style['transform'] = '';\r\n });\r\n this.dragendTimer = timeout(this.handleDragEnd, this.transitionDuration || 0);\r\n }\r\n },\r\n\r\n handleDragEnd() {\r\n if (this.autoscrollInterval) {\r\n clearInterval(this.autoscrollInterval);\r\n this.autoscrollInterval = null;\r\n }\r\n\r\n resetTransform(this.manager.getRefs());\r\n if (this.sortableGhost) {\r\n this.sortableGhost.remove();\r\n this.sortableGhost = null;\r\n }\r\n\r\n if (this.dragendTimer) {\r\n clearTimeout(this.dragendTimer);\r\n this.dragendTimer = null;\r\n }\r\n this.manager.active = null;\r\n this._touched = false;\r\n this.sorting = false;\r\n },\r\n\r\n intializeOffsets(e: PointEvent, clientRect: ClientRect) {\r\n const { useWindowAsScrollContainer, containerBoundingRect, _window } = this;\r\n\r\n this.marginOffset = {\r\n x: this.margin.left + this.margin.right,\r\n y: Math.max(this.margin.top, this.margin.bottom),\r\n };\r\n\r\n this._axis = {\r\n x: this.axis.indexOf('x') >= 0,\r\n y: this.axis.indexOf('y') >= 0,\r\n };\r\n\r\n this.initialOffset = getPointerOffset(e);\r\n\r\n // initialScroll;\r\n this.initialScroll = {\r\n top: this.scrollContainer.scrollTop,\r\n left: this.scrollContainer.scrollLeft,\r\n };\r\n\r\n // initialWindowScroll;\r\n this.initialWindowScroll = {\r\n top: window.pageYOffset,\r\n left: window.pageXOffset,\r\n };\r\n\r\n this.translate = { x: 0, y: 0 };\r\n this.minTranslate = {};\r\n this.maxTranslate = {};\r\n\r\n if (this._axis.x) {\r\n this.minTranslate.x =\r\n (useWindowAsScrollContainer ? 0 : containerBoundingRect.left) - clientRect.left - this.width / 2;\r\n this.maxTranslate.x =\r\n (useWindowAsScrollContainer ? _window.innerWidth : containerBoundingRect.left + containerBoundingRect.width) -\r\n clientRect.left -\r\n this.width / 2;\r\n }\r\n if (this._axis.y) {\r\n this.minTranslate.y =\r\n (useWindowAsScrollContainer ? 0 : containerBoundingRect.top) - clientRect.top - this.height / 2;\r\n this.maxTranslate.y =\r\n (useWindowAsScrollContainer\r\n ? _window.innerHeight\r\n : containerBoundingRect.top + containerBoundingRect.height) -\r\n clientRect.top -\r\n this.height / 2;\r\n }\r\n },\r\n\r\n handleDragIn(e: PointEvent, sortableGhost: SortableNode, helper: SortableNode) {\r\n if (this.hub!.isSource(this as ContainerRef)) {\r\n return;\r\n }\r\n\r\n if (this.dragendTimer) {\r\n this.handleDragEnd();\r\n clearTimeout(this.dragendTimer);\r\n this.dragendTimer = null;\r\n }\r\n\r\n const nodes = this.manager.getRefs();\r\n this.index = nodes.length;\r\n this.manager.active = { index: this.index };\r\n\r\n const containerBoundingRect = this.container.getBoundingClientRect();\r\n const helperBoundingRect = helper.getBoundingClientRect();\r\n this.containerBoundingRect = containerBoundingRect;\r\n\r\n this.sortableGhost = cloneNode(sortableGhost);\r\n this.container.appendChild(this.sortableGhost);\r\n const ghostRect = this.sortableGhost.getBoundingClientRect();\r\n this.boundingClientRect = ghostRect;\r\n this.margin = getElementMargin(this.sortableGhost);\r\n this.width = ghostRect.width;\r\n this.height = ghostRect.height;\r\n\r\n // XY coords of the inserted node, relative to the top-left corner of the container\r\n this.offsetEdge = getEdgeOffset(this.sortableGhost, this.container);\r\n\r\n this.intializeOffsets(e, ghostRect);\r\n\r\n // Move the initialOffset back to the insertion point of the\r\n // sortableGhost (end of the list), as if we had started the drag there.\r\n this.initialOffset.x += ghostRect.x - helperBoundingRect.x;\r\n this.initialOffset.y += ghostRect.y - helperBoundingRect.y;\r\n\r\n // Turn on dragging\r\n this.sorting = true;\r\n },\r\n\r\n handleSortEnd(e: PointEvent | KeyboardEvent) {\r\n // Remove the event listeners if the node is still in the DOM\r\n if (this.listenerNode) {\r\n events.move.forEach((eventName) =>\r\n // @ts-ignore\r\n this.listenerNode.removeEventListener(eventName, this.handleSortMove),\r\n );\r\n events.end.forEach((eventName) =>\r\n // @ts-ignore\r\n this.listenerNode.removeEventListener(eventName, this.handleSortEnd),\r\n );\r\n events.cancel.forEach((eventName) =>\r\n // @ts-ignore\r\n this.listenerNode.removeEventListener(eventName, this.handleSortCancel),\r\n );\r\n }\r\n\r\n const nodes = this.manager.getRefs();\r\n\r\n // Remove the helper class(es) early to give it a chance to transition back\r\n if (this.helper && this.helperClass) {\r\n this.helper.classList.remove(...this.helperClass.split(' '));\r\n }\r\n\r\n // Stop autoscroll\r\n if (this.autoscrollInterval) clearInterval(this.autoscrollInterval);\r\n this.autoscrollInterval = null;\r\n\r\n const onEnd = () => {\r\n // Remove the helper from the DOM\r\n if (this.helper) {\r\n this.helper.remove();\r\n this.helper = null;\r\n }\r\n\r\n if (this.hideSortableGhost && this.sortableGhost) {\r\n this.sortableGhost.style.visibility = '';\r\n this.sortableGhost.style.opacity = '';\r\n }\r\n\r\n resetTransform(nodes);\r\n\r\n // Update state\r\n if (this.hub && !this.hub.isDest(this as ContainerRef)) {\r\n this.canceling ? this.hub.cancel() : this.hub.handleSortEnd();\r\n } else if (this.canceling) {\r\n this.$emit('sort-cancel', { event: e });\r\n } else {\r\n this.$emit('sort-end', {\r\n event: e,\r\n oldIndex: this.index,\r\n newIndex: this.newIndex,\r\n });\r\n this.$emit('update:list', arrayMove(this.list, this.index!, this.newIndex!));\r\n }\r\n\r\n this.manager.active = null;\r\n this._touched = false;\r\n this.canceling = false;\r\n this.sorting = false;\r\n };\r\n\r\n if (this.transitionDuration || this.draggedSettlingDuration) {\r\n this.transitionHelperIntoPlace(nodes, onEnd);\r\n } else {\r\n onEnd();\r\n }\r\n },\r\n\r\n transitionHelperIntoPlace(nodes: ItemRef[], cb: () => void) {\r\n if (this.draggedSettlingDuration === 0 || nodes.length === 0 || !this.helper) {\r\n return Promise.resolve();\r\n }\r\n\r\n const indexNode = nodes[this.index!].node;\r\n let targetX = 0;\r\n let targetY = 0;\r\n\r\n const scrollDifference = {\r\n top: window.pageYOffset - this.initialWindowScroll.top,\r\n left: window.pageXOffset - this.initialWindowScroll.left,\r\n };\r\n\r\n if (this.hub && !this.hub.isDest(this as ContainerRef) && !this.canceling) {\r\n const dest = this.hub.getDest();\r\n if (!dest) return;\r\n const destIndex = dest.newIndex;\r\n const destRefs = dest.manager.getOrderedRefs();\r\n const destNode = destIndex < destRefs.length ? destRefs[destIndex].node : dest.sortableGhost!;\r\n const ancestor = commonOffsetParent(indexNode, destNode)!;\r\n\r\n const sourceOffset = getEdgeOffset(indexNode, ancestor);\r\n const targetOffset = getEdgeOffset(destNode, ancestor);\r\n\r\n targetX = targetOffset.left - sourceOffset.left - scrollDifference.left;\r\n targetY = targetOffset.top - sourceOffset.top - scrollDifference.top;\r\n } else {\r\n const newIndexNode = nodes[this.newIndex!].node;\r\n const deltaScroll = {\r\n left: this.scrollContainer.scrollLeft - this.initialScroll.left + scrollDifference.left,\r\n top: this.scrollContainer.scrollTop - this.initialScroll.top + scrollDifference.top,\r\n };\r\n targetX = -deltaScroll.left;\r\n if (this.translate && this.translate.x > 0) {\r\n // Diff against right edge when moving to the right\r\n targetX +=\r\n newIndexNode.offsetLeft + newIndexNode.offsetWidth - (indexNode.offsetLeft + indexNode.offsetWidth);\r\n } else {\r\n targetX += newIndexNode.offsetLeft - indexNode.offsetLeft;\r\n }\r\n\r\n targetY = -deltaScroll.top;\r\n if (this.translate && this.translate.y > 0) {\r\n // Diff against the bottom edge when moving down\r\n targetY +=\r\n newIndexNode.offsetTop + newIndexNode.offsetHeight - (indexNode.offsetTop + indexNode.offsetHeight);\r\n } else {\r\n targetY += newIndexNode.offsetTop - indexNode.offsetTop;\r\n }\r\n }\r\n\r\n const duration = this.draggedSettlingDuration !== null ? this.draggedSettlingDuration : this.transitionDuration;\r\n\r\n setTransform(this.helper, `translate3d(${targetX}px,${targetY}px, 0)`, `${duration}ms`);\r\n\r\n // Register an event handler to clean up styles when the transition\r\n // finishes.\r\n const cleanup = (event: TransitionEvent) => {\r\n if (!event || event.propertyName === 'transform') {\r\n clearTimeout(cleanupTimer);\r\n setTransform(this.helper);\r\n cb();\r\n }\r\n };\r\n // Force cleanup in case 'transitionend' never fires\r\n const cleanupTimer = setTimeout(cleanup, duration + 10);\r\n this.helper.addEventListener('transitionend', cleanup);\r\n },\r\n\r\n updatePosition(e: PointEvent) {\r\n const { lockAxis, lockToContainerEdges } = this.$props;\r\n\r\n const offset = getPointerOffset(e);\r\n const translate = {\r\n x: offset.x - this.initialOffset.x,\r\n y: offset.y - this.initialOffset.y,\r\n };\r\n // Adjust for window scroll\r\n translate.y -= window.pageYOffset - this.initialWindowScroll.top;\r\n translate.x -= window.pageXOffset - this.initialWindowScroll.left;\r\n\r\n this.translate = translate;\r\n\r\n if (lockToContainerEdges) {\r\n const [minLockOffset, maxLockOffset] = getLockPixelOffsets(this.lockOffset, this.height, this.width);\r\n const minOffset = {\r\n x: this.width / 2 - minLockOffset.x,\r\n y: this.height / 2 - minLockOffset.y,\r\n };\r\n const maxOffset = {\r\n x: this.width / 2 - maxLockOffset.x,\r\n y: this.height / 2 - maxLockOffset.y,\r\n };\r\n\r\n if (this.minTranslate.x && this.maxTranslate.x)\r\n translate.x = limit(this.minTranslate.x + minOffset.x, this.maxTranslate.x - maxOffset.x, translate.x);\r\n if (this.minTranslate.y && this.maxTranslate.y)\r\n translate.y = limit(this.minTranslate.y + minOffset.y, this.maxTranslate.y - maxOffset.y, translate.y);\r\n }\r\n\r\n if (lockAxis === 'x') {\r\n translate.y = 0;\r\n } else if (lockAxis === 'y') {\r\n translate.x = 0;\r\n }\r\n\r\n if (this.helper) {\r\n this.helper.style['transform'] = `translate3d(${translate.x}px,${translate.y}px, 0)`;\r\n }\r\n },\r\n\r\n animateNodes() {\r\n const { transitionDuration, hideSortableGhost } = this.$props;\r\n const nodes = this.manager.getOrderedRefs();\r\n const deltaScroll = {\r\n left: this.scrollContainer.scrollLeft - this.initialScroll.left,\r\n top: this.scrollContainer.scrollTop - this.initialScroll.top,\r\n };\r\n const sortingOffset = {\r\n left: this.offsetEdge.left + this.translate.x + deltaScroll.left,\r\n top: this.offsetEdge.top + this.translate.y + deltaScroll.top,\r\n };\r\n const scrollDifference = {\r\n top: window.pageYOffset - this.initialWindowScroll.top,\r\n left: window.pageXOffset - this.initialWindowScroll.left,\r\n };\r\n this.newIndex = null;\r\n\r\n for (let i = 0, len = nodes.length; i < len; i++) {\r\n const { node } = nodes[i];\r\n const index = node.sortableInfo.index;\r\n const width = node.offsetWidth;\r\n const height = node.offsetHeight;\r\n const offset = {\r\n width: this.width > width ? width / 2 : this.width / 2,\r\n height: this.height > height ? height / 2 : this.height / 2,\r\n };\r\n\r\n const translate = {\r\n x: 0,\r\n y: 0,\r\n };\r\n let { edgeOffset } = nodes[i];\r\n\r\n // If we haven't cached the node's offsetTop / offsetLeft value\r\n if (!edgeOffset) {\r\n nodes[i].edgeOffset = edgeOffset = getEdgeOffset(node, this.container);\r\n }\r\n\r\n // Get a reference to the next and previous node\r\n const nextNode = i < nodes.length - 1 && nodes[i + 1];\r\n const prevNode = i > 0 && nodes[i - 1];\r\n\r\n // Also cache the next node's edge offset if needed.\r\n // We need this for calculating the animation in a grid setup\r\n if (nextNode && !nextNode.edgeOffset) {\r\n nextNode.edgeOffset = getEdgeOffset(nextNode.node, this.container);\r\n }\r\n\r\n // If the node is the one we're currently animating, skip it\r\n if (index === this.index) {\r\n /*\r\n * With windowing libraries such as `react-virtualized`, the sortableGhost\r\n * node may change while scrolling down and then back up (or vice-versa),\r\n * so we need to update the reference to the new node just to be safe.\r\n */\r\n if (hideSortableGhost) {\r\n this.sortableGhost = node;\r\n node.style.visibility = 'hidden';\r\n node.style.opacity = '0';\r\n }\r\n\r\n continue;\r\n }\r\n\r\n if (transitionDuration) {\r\n node.style['transitionDuration'] = `${transitionDuration}ms`;\r\n }\r\n\r\n if (this._axis.x) {\r\n if (this._axis.y) {\r\n // Calculations for a grid setup\r\n if (\r\n index < this.index! &&\r\n ((sortingOffset.left + scrollDifference.left - offset.width <= edgeOffset.left &&\r\n sortingOffset.top + scrollDifference.top <= edgeOffset.top + offset.height) ||\r\n sortingOffset.top + scrollDifference.top + offset.height <= edgeOffset.top)\r\n ) {\r\n // If the current node is to the left on the same row, or above the node that's being dragged\r\n // then move it to the right\r\n translate.x = this.width + this.marginOffset.x;\r\n if (edgeOffset.left + translate.x > this.containerBoundingRect.width - offset.width && nextNode) {\r\n // If it moves passed the right bounds, then animate it to the first position of the next row.\r\n // We just use the offset of the next node to calculate where to move, because that node's original position\r\n // is exactly where we want to go\r\n translate.x = nextNode.edgeOffset!.left - edgeOffset.left;\r\n translate.y = nextNode.edgeOffset!.top - edgeOffset.top;\r\n }\r\n if (this.newIndex === null) {\r\n this.newIndex = index;\r\n }\r\n } else if (\r\n index > this.index! &&\r\n ((sortingOffset.left + scrollDifference.left + offset.width >= edgeOffset.left &&\r\n sortingOffset.top + scrollDifference.top + offset.height >= edgeOffset.top) ||\r\n sortingOffset.top + scrollDifference.top + offset.height >= edgeOffset.top + height)\r\n ) {\r\n // If the current node is to the right on the same row, or below the node that's being dragged\r\n // then move it to the left\r\n translate.x = -(this.width + this.marginOffset.x);\r\n if (edgeOffset.left + translate.x < this.containerBoundingRect.left + offset.width && prevNode) {\r\n // If it moves passed the left bounds, then animate it to the last position of the previous row.\r\n // We just use the offset of the previous node to calculate where to move, because that node's original position\r\n // is exactly where we want to go\r\n translate.x = prevNode.edgeOffset!.left - edgeOffset.left;\r\n translate.y = prevNode.edgeOffset!.top - edgeOffset.top;\r\n }\r\n this.newIndex = index;\r\n }\r\n } else {\r\n if (index > this.index! && sortingOffset.left + scrollDifference.left + offset.width >= edgeOffset.left) {\r\n translate.x = -(this.width + this.marginOffset.x);\r\n this.newIndex = index;\r\n } else if (\r\n index < this.index! &&\r\n sortingOffset.left + scrollDifference.left <= edgeOffset.left + offset.width\r\n ) {\r\n translate.x = this.width + this.marginOffset.x;\r\n if (this.newIndex == null) {\r\n this.newIndex = index;\r\n }\r\n }\r\n }\r\n } else if (this._axis.y) {\r\n if (index > this.index! && sortingOffset.top + scrollDifference.top + offset.height >= edgeOffset.top) {\r\n translate.y = -(this.height + this.marginOffset.y);\r\n this.newIndex = index;\r\n } else if (\r\n index < this.index! &&\r\n sortingOffset.top + scrollDifference.top <= edgeOffset.top + offset.height\r\n ) {\r\n translate.y = this.height + this.marginOffset.y;\r\n if (this.newIndex == null) {\r\n this.newIndex = index;\r\n }\r\n }\r\n }\r\n node.style['transform'] = `translate3d(${translate.x}px,${translate.y}px,0)`;\r\n }\r\n\r\n if (this.newIndex == null) {\r\n this.newIndex = this.index;\r\n }\r\n },\r\n\r\n autoscroll() {\r\n const translate = this.translate;\r\n const direction = {\r\n x: 0,\r\n y: 0,\r\n };\r\n const speed = {\r\n x: 1,\r\n y: 1,\r\n };\r\n const acceleration = {\r\n x: 10,\r\n y: 10,\r\n };\r\n\r\n if (translate.y >= this.maxTranslate.y! - this.height / 2) {\r\n direction.y = 1; // Scroll Down\r\n speed.y = acceleration.y * Math.abs((this.maxTranslate.y! - this.height / 2 - translate.y) / this.height);\r\n } else if (translate.x >= this.maxTranslate.x! - this.width / 2) {\r\n direction.x = 1; // Scroll Right\r\n speed.x = acceleration.x * Math.abs((this.maxTranslate.x! - this.width / 2 - translate.x) / this.width);\r\n } else if (translate.y <= this.minTranslate.y! + this.height / 2) {\r\n direction.y = -1; // Scroll Up\r\n speed.y = acceleration.y * Math.abs((translate.y - this.height / 2 - this.minTranslate.y!) / this.height);\r\n } else if (translate.x <= this.minTranslate.x! + this.width / 2) {\r\n direction.x = -1; // Scroll Left\r\n speed.x = acceleration.x * Math.abs((translate.x - this.width / 2 - this.minTranslate.x!) / this.width);\r\n }\r\n\r\n if (this.autoscrollInterval) {\r\n clearInterval(this.autoscrollInterval);\r\n this.autoscrollInterval = null;\r\n }\r\n\r\n if (direction.x !== 0 || direction.y !== 0) {\r\n this.autoscrollInterval = window.setInterval(() => {\r\n const offset = {\r\n left: 1 * speed.x * direction.x,\r\n top: 1 * speed.y * direction.y,\r\n };\r\n\r\n if (this.useWindowAsScrollContainer) {\r\n this._window.scrollBy(offset.left, offset.top);\r\n } else {\r\n this.scrollContainer.scrollTop += offset.top;\r\n this.scrollContainer.scrollLeft += offset.left;\r\n }\r\n\r\n this.translate.x += offset.left;\r\n this.translate.y += offset.top;\r\n this.animateNodes();\r\n }, 5);\r\n }\r\n },\r\n },\r\n});\r\n","import { Directive } from 'vue';\r\n\r\n// Export Sortable Element Handle Directive\r\nexport const HandleDirective: Directive = {\r\n beforeMount(el) {\r\n el.sortableHandle = true;\r\n },\r\n};\r\n","import { h, defineComponent } from 'vue';\r\nimport { ElementMixin } from '../ElementMixin';\r\n\r\nexport const SlickItem = defineComponent({\r\n name: 'SlickItem',\r\n mixins: [ElementMixin],\r\n props: {\r\n tag: {\r\n type: String,\r\n default: 'div',\r\n },\r\n },\r\n render() {\r\n return h(this.tag, this.$slots.default?.());\r\n },\r\n});\r\n","import { h, defineComponent, PropType } from 'vue';\r\nimport { ContainerMixin } from '../ContainerMixin';\r\nimport { hasOwnProperty } from '../utils';\r\nimport { SlickItem } from './SlickItem';\r\n\r\nexport const SlickList = defineComponent({\r\n name: 'SlickList',\r\n mixins: [ContainerMixin],\r\n props: {\r\n tag: {\r\n type: String,\r\n default: 'div',\r\n },\r\n itemKey: {\r\n type: [String, Function] as PropType<((item: unknown) => string) | string>,\r\n default: 'id',\r\n },\r\n },\r\n render() {\r\n if (this.$slots.item) {\r\n return h(\r\n this.tag,\r\n this.list.map((item, index) => {\r\n let key: string;\r\n if (item == null) {\r\n return;\r\n } else if (typeof this.itemKey === 'function') {\r\n key = this.itemKey(item);\r\n } else if (\r\n typeof item === 'object' &&\r\n hasOwnProperty(item, this.itemKey) &&\r\n typeof item[this.itemKey] == 'string'\r\n ) {\r\n key = item[this.itemKey] as string;\r\n } else if (typeof item === 'string') {\r\n key = item;\r\n } else {\r\n throw new Error('Cannot find key for item, use the item-key prop and pass a function or string');\r\n }\r\n return h(\r\n SlickItem,\r\n {\r\n key,\r\n index,\r\n },\r\n {\r\n default: () => this.$slots.item?.({ item, index }),\r\n },\r\n );\r\n }),\r\n );\r\n }\r\n return h(this.tag, this.$slots.default?.());\r\n },\r\n});\r\n","import { h, defineComponent } from 'vue';\r\n\r\nexport const DragHandle = defineComponent({\r\n props: {\r\n tag: {\r\n type: String,\r\n default: 'span',\r\n },\r\n },\r\n mounted() {\r\n this.$el.sortableHandle = true;\r\n },\r\n render() {\r\n return h(this.tag, this.$slots.default?.());\r\n },\r\n});\r\n","import Manager from './Manager';\r\nimport { getRectCenter, getDistance, getPointerOffset, isPointWithinRect, PointEvent } from './utils';\r\n\r\nlet containerIDCounter = 1;\r\n\r\nexport interface ContainerRef {\r\n id: string;\r\n group: string;\r\n accept: AcceptProp | null;\r\n block: string[];\r\n container: HTMLElement;\r\n newIndex: number;\r\n manager: Manager;\r\n sortableGhost: HTMLElement | null;\r\n\r\n handleDragIn(e: PointEvent, ghost: HTMLElement | null, helper: HTMLElement | null): void;\r\n handleDragOut(): void;\r\n handleDragEnd(): void;\r\n handleSortEnd(e: PointEvent): void;\r\n handleDropIn(payload: unknown): void;\r\n handleDropOut(): unknown;\r\n\r\n updatePosition(e: PointEvent): void;\r\n animateNodes(): void;\r\n autoscroll(): void;\r\n}\r\n\r\ntype AcceptPropArgs = { source: ContainerRef; dest: ContainerRef; payload: unknown };\r\nexport type AcceptProp = boolean | string[] | ((args: AcceptPropArgs) => boolean);\r\n\r\n/**\r\n * Always allow when dest === source\r\n * Defer to 'dest.accept()' if it is a function\r\n * Allow any group in the accept lists\r\n * Deny any group in the block list\r\n * Allow the same group by default, this can be overridden with the block prop\r\n */\r\nfunction canAcceptElement(dest: ContainerRef, source: ContainerRef, payload: unknown): boolean {\r\n if (source.id === dest.id) return true;\r\n if (dest.block && dest.block.includes(source.group)) return false;\r\n if (typeof dest.accept === 'function') {\r\n return dest.accept({ dest, source, payload });\r\n }\r\n if (typeof dest.accept === 'boolean') {\r\n return dest.accept;\r\n }\r\n if (dest.accept && dest.accept.includes(source.group)) return true;\r\n if (dest.group === source.group) return true;\r\n return false;\r\n}\r\n\r\nfunction findClosestDest(\r\n { x, y }: { x: number; y: number },\r\n refs: ContainerRef[],\r\n currentDest: ContainerRef,\r\n): ContainerRef | null {\r\n // Quickly check if we are within the bounds of the current destination\r\n if (isPointWithinRect({ x, y }, currentDest.container.getBoundingClientRect())) {\r\n return currentDest;\r\n }\r\n\r\n let closest = null;\r\n let minDistance = Infinity;\r\n for (let i = 0; i < refs.length; i++) {\r\n const ref = refs[i];\r\n const rect = ref.container.getBoundingClientRect();\r\n const isWithin = isPointWithinRect({ x, y }, rect);\r\n\r\n if (isWithin) {\r\n // If we are within another destination, stop here\r\n return ref;\r\n }\r\n\r\n const center = getRectCenter(rect);\r\n const distance = getDistance(x, y, center.x, center.y);\r\n if (distance < minDistance) {\r\n closest = ref;\r\n minDistance = distance;\r\n }\r\n }\r\n\r\n // Try to guess the closest destination\r\n return closest;\r\n}\r\n\r\nexport default class SlicksortHub {\r\n public helper: HTMLElement | null = null;\r\n public ghost: HTMLElement | null = null;\r\n\r\n private refs: ContainerRef[] = [];\r\n private source: ContainerRef | null = null;\r\n private dest: ContainerRef | null = null;\r\n\r\n getId(): string {\r\n return '' + containerIDCounter++;\r\n }\r\n\r\n isSource({ id }: ContainerRef): boolean {\r\n return this.source?.id === id;\r\n }\r\n\r\n getSource(): ContainerRef | null {\r\n return this.source;\r\n }\r\n\r\n isDest({ id }: ContainerRef): boolean {\r\n return this.dest?.id === id;\r\n }\r\n\r\n getDest(): ContainerRef | null {\r\n return this.dest;\r\n }\r\n\r\n addContainer(ref: ContainerRef): void {\r\n this.refs.push(ref);\r\n }\r\n\r\n removeContainer(ref: ContainerRef): void {\r\n this.refs = this.refs.filter((c) => c.id !== ref.id);\r\n }\r\n\r\n sortStart(ref: ContainerRef): void {\r\n this.source = ref;\r\n this.dest = ref;\r\n }\r\n\r\n handleSortMove(e: PointEvent, payload: unknown): void {\r\n const dest = this.dest;\r\n const source = this.source;\r\n\r\n if (!dest || !source) return;\r\n\r\n const refs = this.refs;\r\n const pointer = getPointerOffset(e, 'client');\r\n const newDest = findClosestDest(pointer, refs, dest) || dest;\r\n\r\n if (dest.id !== newDest.id && canAcceptElement(newDest, source, payload)) {\r\n this.dest = newDest;\r\n dest.handleDragOut();\r\n newDest.handleDragIn(e, this.ghost, this.helper);\r\n }\r\n if (dest.id !== this.source?.id) {\r\n this.dest?.updatePosition(e);\r\n this.dest?.animateNodes();\r\n this.dest?.autoscroll();\r\n }\r\n }\r\n\r\n handleSortEnd(): void {\r\n if (this.source?.id === this.dest?.id) return;\r\n const payload = this.source?.handleDropOut();\r\n this.dest?.handleDropIn(payload);\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.source = null;\r\n this.dest = null;\r\n this.helper = null;\r\n this.ghost = null;\r\n }\r\n\r\n cancel(): void {\r\n this.dest?.handleDragEnd();\r\n this.reset();\r\n }\r\n}\r\n","import SlicksortHub from './SlicksortHub';\r\nimport { HandleDirective } from './HandleDirective';\r\nimport { Plugin } from 'vue';\r\n\r\nconst plugin: Plugin = {\r\n install(app) {\r\n app.directive('drag-handle', HandleDirective);\r\n app.provide('SlicksortHub', new SlicksortHub());\r\n },\r\n};\r\n\r\nexport default plugin;\r\n"],"names":["defineComponent","h"],"mappings":";;;;;;AASO,QAAM,eAAeA,mBAAgB,CAAA;EAAA,EAC1C,QAAQ,CAAC,SAAA,CAAA;EAAA,EACT,KAAO,EAAA;EAAA,IACL,KAAO,EAAA;EAAA,MACL,IAAM,EAAA,MAAA;EAAA,MACN,QAAU,EAAA,IAAA;EAAA,KAAA;EAAA,IAEZ,QAAU,EAAA;EAAA,MACR,IAAM,EAAA,OAAA;EAAA,MACN,OAAS,EAAA,KAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAIb,IAAA,GAAA;EACE,IAAQ,OAAA,EAAA,CAAA;EAAA,GAAA;EAAA,EAGV,KAAO,EAAA;EAAA,IACL,KAAM,CAAA,QAAA,EAAA;EACJ,MAAI,IAAA,IAAA,CAAK,GAAO,IAAA,IAAA,CAAK,GAAI,CAAA,YAAA,EAAA;EACvB,QAAK,IAAA,CAAA,GAAA,CAAI,aAAa,KAAQ,GAAA,QAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAGlC,QAAS,CAAA,UAAA,EAAA;EACP,MAAI,IAAA,UAAA,EAAA;EACF,QAAK,IAAA,CAAA,eAAA,EAAA,CAAA;EAAA,OAAA,MAAA;EAEL,QAAA,IAAA,CAAK,aAAa,IAAK,CAAA,KAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAK7B,OAAA,GAAA;EACE,IAAM,MAAA,CAAE,QAAU,EAAA,KAAA,CAAA,GAAU,IAAK,CAAA,MAAA,CAAA;EAEjC,IAAA,IAAI,CAAC,QAAA,EAAA;EACH,MAAA,IAAA,CAAK,YAAa,CAAA,KAAA,CAAA,CAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAItB,aAAA,GAAA;EACE,IAAA,IAAI,CAAC,IAAK,CAAA,QAAA;EAAU,MAAK,IAAA,CAAA,eAAA,EAAA,CAAA;EAAA,GAAA;EAAA,EAG3B,OAAS,EAAA;EAAA,IACP,YAAa,CAAA,KAAA,EAAA;EACX,MAAA,MAAM,OAAO,IAAK,CAAA,GAAA,CAAA;EAElB,MAAA,IAAA,CAAK,YAAe,GAAA;EAAA,QAClB,KAAA;EAAA,QACA,SAAS,IAAK,CAAA,OAAA;EAAA,OAAA,CAAA;EAGhB,MAAA,IAAA,CAAK,MAAM,CAAE,IAAA,CAAA,CAAA;EACb,MAAK,IAAA,CAAA,OAAA,CAAQ,IAAI,IAAK,CAAA,GAAA,CAAA,CAAA;EAAA,KAAA;EAAA,IAGxB,eAAA,GAAA;EACE,MAAK,IAAA,CAAA,OAAA,CAAQ,OAAO,IAAK,CAAA,GAAA,CAAA,CAAA;EAAA,KAAA;EAAA,GAAA;EAAA,CAAA;;ECnE/B,MAAA,OAAA,CAAA;EAAA,EAAA,WAAA,GAAA;EAiBU,IAAkB,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA;EACnB,IAAmC,IAAA,CAAA,MAAA,GAAA,IAAA,CAAA;EAAA,GAAA;EAAA,EAE1C,GAAI,CAAA,GAAA,EAAA;EACF,IAAA,IAAI,CAAC,IAAK,CAAA,IAAA,EAAA;EACR,MAAA,IAAA,CAAK,IAAO,GAAA,EAAA,CAAA;EAAA,KAAA;EAGd,IAAA,IAAA,CAAK,KAAK,IAAK,CAAA,GAAA,CAAA,CAAA;EAAA,GAAA;EAAA,EAGjB,MAAO,CAAA,GAAA,EAAA;EACL,IAAM,MAAA,KAAA,GAAQ,KAAK,QAAS,CAAA,GAAA,CAAA,CAAA;EAE5B,IAAA,IAAI,KAAU,KAAA,CAAA,CAAA,EAAA;EACZ,MAAK,IAAA,CAAA,IAAA,CAAK,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAI5B,QAAA,GAAA;EACE,IAAO,OAAA,CAAC,CAAC,IAAK,CAAA,MAAA,CAAA;EAAA,GAAA;EAAA,EAGhB,SAAA,GAAA;EACE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,IAAK,CAAA,CAAC,CAAE,IAAA,CAAA,KAAA;EAzC7B,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;EAyCwC,MAAA,OAAA,CAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,YAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,KAAS,MAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,WAAN,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAA,CAAA;EAAA,KAAU,CAAA,IAAA,IAAA,CAAA;EAAA,GAAA;EAAA,EAG3F,QAAS,CAAA,GAAA,EAAA;EACP,IAAO,OAAA,IAAA,CAAK,KAAK,OAAQ,CAAA,GAAA,CAAA,CAAA;EAAA,GAAA;EAAA,EAG3B,OAAA,GAAA;EACE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAA;EAAA,GAAA;EAAA,EAGd,cAAA,GAAA;EACE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAA;EACxB,MAAA,OAAO,EAAE,IAAK,CAAA,YAAA,CAAa,KAAQ,GAAA,CAAA,CAAE,KAAK,YAAa,CAAA,KAAA,CAAA;EAAA,KAAA,CAAA,CAAA;EAAA,GAAA;EAAA;;ECpCtD,MAAM,UAAU,CAAC,CAAA,KAAA;EACtB,EAAA,OAAQ,EAAiB,OAAW,IAAA,IAAA,CAAA;EAAA,CAAA,CAAA;EAI/B,SAAA,cAAA,CACL,GACA,EAAA,IAAA,EAAA;EAEA,EAAA,OAAO,CAAC,CAAC,GAAA,IAAO,OAAO,SAAU,CAAA,cAAA,CAAe,KAAK,GAAK,EAAA,IAAA,CAAA,CAAA;EAAA,CAAA;EAGrD,SAAA,SAAA,CAAsB,KAAU,aAAuB,EAAA,QAAA,EAAA;EAC5D,EAAM,MAAA,KAAA,GAA2B,IAAI,KAAM,CAAA,CAAA,CAAA,CAAA;EAC3C,EAAA,IAAI,YAAY,KAAM,CAAA,MAAA,EAAA;EACpB,IAAI,IAAA,CAAA,GAAI,WAAW,KAAM,CAAA,MAAA,CAAA;EACzB,IAAA,OAAO,CAAM,EAAA,GAAA,CAAA,EAAA;EACX,MAAA,KAAA,CAAM,IAAK,CAAA,KAAA,CAAA,CAAA,CAAA;EAAA,KAAA;EAAA,GAAA;EAGf,EAAA,KAAA,CAAM,OAAO,QAAU,EAAA,CAAA,EAAG,KAAM,CAAA,MAAA,CAAO,eAAe,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EACzD,EAAO,OAAA,KAAA,CAAA;EAAA,CAAA;EAGF,SAAA,WAAA,CAAwB,GAAU,EAAA,aAAA,EAAA;EACvC,EAAM,MAAA,KAAA,GAAQ,IAAI,KAAM,CAAA,CAAA,CAAA,CAAA;EACxB,EAAA,IAAI,iBAAiB,KAAM,CAAA,MAAA;EAAQ,IAAO,OAAA,KAAA,CAAA;EAC1C,EAAA,KAAA,CAAM,OAAO,aAAe,EAAA,CAAA,CAAA,CAAA;EAC5B,EAAO,OAAA,KAAA,CAAA;EAAA,CAAA;EAGF,SAAA,WAAA,CAAwB,KAAU,QAAkB,EAAA,KAAA,EAAA;EACzD,EAAM,MAAA,KAAA,GAAQ,IAAI,KAAM,CAAA,CAAA,CAAA,CAAA;EACxB,EAAA,IAAI,aAAa,KAAM,CAAA,MAAA,EAAA;EACrB,IAAA,KAAA,CAAM,IAAK,CAAA,KAAA,CAAA,CAAA;EAAA,GAAA,MAAA;EAEX,IAAM,KAAA,CAAA,MAAA,CAAO,UAAU,CAAG,EAAA,KAAA,CAAA,CAAA;EAAA,GAAA;EAE5B,EAAO,OAAA,KAAA,CAAA;EAAA,CAAA;EAGF,MAAM,MAAmC,GAAA;EAAA,EAC9C,KAAA,EAAO,CAAC,YAAc,EAAA,WAAA,CAAA;EAAA,EACtB,IAAA,EAAM,CAAC,WAAa,EAAA,WAAA,CAAA;EAAA,EACpB,GAAA,EAAK,CAAC,UAAY,EAAA,SAAA,CAAA;EAAA,EAClB,MAAA,EAAQ,CAAC,aAAe,EAAA,OAAA,CAAA;EAAA,CAAA,CAAA;EAGnB,SAAA,OAAA,CACL,EACA,EAAA,EAAA,EAAA;EAEA,EAAO,OAAA,EAAA,EAAA;EACL,IAAA,IAAI,EAAG,CAAA,EAAA,CAAA;EAAK,MAAO,OAAA,EAAA,CAAA;EACnB,IAAA,EAAA,GAAK,EAAG,CAAA,UAAA,CAAA;EAAA,GAAA;EAAA,CAAA;EAIL,SAAA,KAAA,CAAe,KAAa,GAAa,EAAA,KAAA,EAAA;EAC9C,EAAA,IAAI,KAAQ,GAAA,GAAA,EAAA;EACV,IAAO,OAAA,GAAA,CAAA;EAAA,GAAA;EAET,EAAA,IAAI,KAAQ,GAAA,GAAA,EAAA;EACV,IAAO,OAAA,GAAA,CAAA;EAAA,GAAA;EAET,EAAO,OAAA,KAAA,CAAA;EAAA,CAAA;EAGT,SAA0B,gBAAA,CAAA,WAAA,EAAA;EACxB,EAAI,IAAA,WAAA,CAAY,OAAO,CAAQ,CAAA,CAAA,KAAA,IAAA,EAAA;EAC7B,IAAA,OAAO,UAAW,CAAA,WAAA,CAAA,CAAA;EAAA,GAAA;EAEpB,EAAO,OAAA,CAAA,CAAA;EAAA,CAAA;EAGwB,SAAA,gBAAA,CAAA,OAAA,EAAA;EAC/B,EAAM,MAAA,KAAA,GAAQ,OAAO,gBAAiB,CAAA,OAAA,CAAA,CAAA;EAEtC,EAAO,OAAA;EAAA,IACL,GAAA,EAAK,iBAAiB,KAAM,CAAA,SAAA,CAAA;EAAA,IAC5B,KAAA,EAAO,iBAAiB,KAAM,CAAA,WAAA,CAAA;EAAA,IAC9B,MAAA,EAAQ,iBAAiB,KAAM,CAAA,YAAA,CAAA;EAAA,IAC/B,IAAA,EAAM,iBAAiB,KAAM,CAAA,UAAA,CAAA;EAAA,GAAA,CAAA;EAAA,CAAA;EAI1B,SAAA,gBAAA,CAA0B,GAAe,SAA+B,GAAA,MAAA,EAAA;EAC7E,EAAA,MAAM,IAAI,CAAG,EAAA,SAAA,CAAA,CAAA,CAAA,CAAA;EACb,EAAA,MAAM,IAAI,CAAG,EAAA,SAAA,CAAA,CAAA,CAAA,CAAA;EAEb,EAAO,OAAA;EAAA,IACL,GAAG,OAAQ,CAAA,CAAA,CAAA,GAAK,EAAE,OAAQ,CAAA,CAAA,CAAA,CAAG,KAAK,CAAE,CAAA,CAAA,CAAA;EAAA,IACpC,GAAG,OAAQ,CAAA,CAAA,CAAA,GAAK,EAAE,OAAQ,CAAA,CAAA,CAAA,CAAG,KAAK,CAAE,CAAA,CAAA,CAAA;EAAA,GAAA,CAAA;EAAA,CAAA;EAIxC,SAAuB,aAAA,CAAA,IAAA,EAAA;EACrB,EAAA,MAAM,QAAQ,CAAC,IAAA,CAAA,CAAA;EACf,EAAO,OAAA,IAAA,EAAM,OAAO,IAAK,CAAA,YAAA,EAAA;EACvB,IAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAA,CAAA;EAAA,GAAA;EAEhB,EAAO,OAAA,KAAA,CAAA;EAAA,CAAA;EAGF,SAAA,kBAAA,CAA4B,KAAoB,EAAA,KAAA,EAAA;EACrD,EAAA,MAAM,WAAW,aAAc,CAAA,KAAA,CAAA,CAAA;EAC/B,EAAA,MAAM,WAAW,aAAc,CAAA,KAAA,CAAA,CAAA;EAE/B,EAAI,IAAA,QAAA,CAAS,MAAM,QAAS,CAAA,CAAA,CAAA;EAAI,IAAM,MAAA,qBAAA,CAAA;EAEtC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,MAAQ,EAAA,CAAA,EAAA,EAAA;EACnC,IAAI,IAAA,QAAA,CAAS,MAAM,QAAS,CAAA,CAAA,CAAA;EAAI,MAAA,OAAO,SAAS,CAAI,GAAA,CAAA,CAAA,CAAA;EAAA,GAAA;EAAA,CAAA;EAIjD,SAAA,aAAA,CACL,MACA,SACA,EAAA,MAAA,GAAS,CAAE,GAAA,EAAK,GAAG,IAAM,EAAA,CAAA,CAAA,EAAA;EAGzB,EAAI,IAAA,IAAA,EAAA;EACF,IAAA,MAAM,UAAa,GAAA;EAAA,MACjB,GAAA,EAAK,MAAO,CAAA,GAAA,GAAM,IAAK,CAAA,SAAA;EAAA,MACvB,IAAA,EAAM,MAAO,CAAA,IAAA,GAAO,IAAK,CAAA,UAAA;EAAA,KAAA,CAAA;EAE3B,IAAI,IAAA,IAAA,CAAK,iBAAiB,SAAU,CAAA,YAAA,EAAA;EAClC,MAAO,OAAA,aAAA,CAAc,IAAK,CAAA,YAAA,EAA6B,SAAW,EAAA,UAAA,CAAA,CAAA;EAAA,KAAA,MAAA;EAElE,MAAO,OAAA,UAAA,CAAA;EAAA,KAAA;EAAA,GAAA;EAGX,EAAO,OAAA,CAAE,GAAK,EAAA,CAAA,EAAG,IAAM,EAAA,CAAA,CAAA,CAAA;EAAA,CAAA;EAGC,SAAA,SAAA,CAAA,IAAA,EAAA;EACxB,EAAM,MAAA,MAAA,GAAS,KAAK,gBAAiB,CAAA,yBAAA,CAAA,CAAA;EACrC,EAAM,MAAA,UAAA,GAAa,KAAK,SAAU,CAAA,IAAA,CAAA,CAAA;EAClC,EAAA,MAAM,YAAe,GAAA,CAAC,GAAG,UAAA,CAAW,gBAAiB,CAAA,yBAAA,CAAA,CAAA,CAAA;EAErD,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,KAAO,EAAA,KAAA,KAAA;EAC3B,IAAI,IAAA,KAAA,CAAM,IAAS,KAAA,MAAA,IAAU,MAAO,CAAA,KAAA,CAAA,EAAA;EAClC,MAAM,KAAA,CAAA,KAAA,GAAQ,OAAO,KAAO,CAAA,CAAA,KAAA,CAAA;EAAA,KAAA;EAAA,GAAA,CAAA,CAAA;EAIhC,EAAO,OAAA,UAAA,CAAA;EAAA,CAAA;EAGF,SAAA,mBAAA,CAA6B,YAAwC,KAAe,EAAA,MAAA,EAAA;EACzF,EAAA,IAAI,OAAO,UAAc,IAAA,QAAA,EAAA;EACvB,IAAA,UAAA,GAAa,CAAC,UAAA,CAAA;EAAA,GAAA;EAGhB,EAAI,IAAA,CAAC,MAAM,OAAQ,CAAA,UAAA,CAAA,EAAA;EACjB,IAAA,UAAA,GAAa,CAAC,UAAY,EAAA,UAAA,CAAA,CAAA;EAAA,GAAA;EAG5B,EAAA,IAAI,WAAW,MAAW,KAAA,CAAA,EAAA;EACxB,IAAM,MAAA,IAAI,MACR,CAA0G,uGAAA,EAAA,UAAA,CAAA,CAAA,CAAA,CAAA;EAAA,GAAA;EAI9G,EAAM,MAAA,CAAC,eAAe,aAAiB,CAAA,GAAA,UAAA,CAAA;EAEvC,EAAA,OAAO,CAAC,kBAAmB,CAAA,aAAA,EAAe,OAAO,MAAS,CAAA,EAAA,kBAAA,CAAmB,eAAe,KAAO,EAAA,MAAA,CAAA,CAAA,CAAA;EAAA,CAAA;EAG9F,SAAA,kBAAA,CAA4B,YAAoB,KAAe,EAAA,MAAA,EAAA;EACpE,EAAA,IAAI,OAAU,GAAA,UAAA,CAAA;EACd,EAAA,IAAI,OAAU,GAAA,UAAA,CAAA;EACd,EAAA,IAAI,IAAO,GAAA,IAAA,CAAA;EAEX,EAAA,IAAI,OAAO,UAAe,KAAA,QAAA,EAAA;EACxB,IAAM,MAAA,KAAA,GAAQ,6BAA6B,IAAK,CAAA,UAAA,CAAA,CAAA;EAEhD,IAAA,IAAI,KAAU,KAAA,IAAA,EAAA;EACZ,MAAM,MAAA,IAAI,MACR,CAA8F,2FAAA,EAAA,UAAA,CAAA,CAAA,CAAA,CAAA;EAAA,KAAA;EAIlG,IAAA,OAAA,GAAU,UAAU,UAAW,CAAA,UAAA,CAAA,CAAA;EAC/B,IAAA,IAAA,GAAO,KAAM,CAAA,CAAA,CAAA,CAAA;EAAA,GAAA;EAGf,EAAA,IAAI,CAAC,QAAA,CAAS,OAAY,CAAA,IAAA,CAAC,QAAS,CAAA,OAAA,CAAA,EAAA;EAClC,IAAM,MAAA,IAAI,MAAM,CAA8C,2CAAA,EAAA,UAAA,CAAA,CAAA,CAAA,CAAA;EAAA,GAAA;EAGhE,EAAA,IAAI,IAAS,KAAA,GAAA,EAAA;EACX,IAAA,OAAA,GAAW,UAAU,KAAS,GAAA,GAAA,CAAA;EAC9B,IAAA,OAAA,GAAW,UAAU,MAAU,GAAA,GAAA,CAAA;EAAA,GAAA;EAGjC,EAAO,OAAA;EAAA,IACL,CAAG,EAAA,OAAA;EAAA,IACH,CAAG,EAAA,OAAA;EAAA,GAAA,CAAA;EAAA,CAAA;EAIqB,SAAA,WAAA,CAAA,EAAA,EAAY,IAAY,EAAY,EAAA,EAAA,EAAA;EAC9D,EAAA,MAAM,IAAI,EAAK,GAAA,EAAA,CAAA;EACf,EAAA,MAAM,IAAI,EAAK,GAAA,EAAA,CAAA;EACf,EAAA,OAAO,IAAK,CAAA,IAAA,CAAK,CAAI,GAAA,CAAA,GAAI,CAAI,GAAA,CAAA,CAAA,CAAA;EAAA,CAAA;EAGD,SAAA,aAAA,CAAA,UAAA,EAAA;EAC5B,EAAO,OAAA;EAAA,IACL,CAAG,EAAA,UAAA,CAAW,IAAO,GAAA,UAAA,CAAW,KAAQ,GAAA,CAAA;EAAA,IACxC,CAAG,EAAA,UAAA,CAAW,GAAM,GAAA,UAAA,CAAW,MAAS,GAAA,CAAA;EAAA,GAAA,CAAA;EAAA,CAAA;EAIrC,SAAA,cAAA,CAAwB,KAAmB,GAAA,EAAA,EAAA;EAChD,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,GAAA,GAAM,KAAM,CAAA,MAAA,EAAQ,IAAI,GAAK,EAAA,CAAA,EAAA,EAAA;EAC3C,IAAA,MAAM,OAAO,KAAM,CAAA,CAAA,CAAA,CAAA;EACnB,IAAA,MAAM,KAAK,IAAK,CAAA,IAAA,CAAA;EAEhB,IAAA,IAAI,CAAC,EAAA;EAAI,MAAA,OAAA;EAGT,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA,CAAA;EAGlB,IAAa,YAAA,CAAA,EAAA,CAAA,CAAA;EAAA,GAAA;EAAA,CAAA;EAIY,SAAA,YAAA,CAAA,EAAA,EAAwB,SAAY,GAAA,EAAA,EAAI,QAAW,GAAA,EAAA,EAAA;EAC9E,EAAA,IAAI,CAAC,EAAA;EAAI,IAAA,OAAA;EACT,EAAA,EAAA,CAAG,MAAM,WAAe,CAAA,GAAA,SAAA,CAAA;EACxB,EAAA,EAAA,CAAG,MAAM,oBAAwB,CAAA,GAAA,QAAA,CAAA;EAAA,CAAA;EAGnC,SAAA,YAAA,CAAsB,KAAa,GAAa,EAAA,MAAA,EAAA;EAC9C,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,GAAK,EAAA,MAAA,CAAA,CAAA;EAC5B,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,GAAK,EAAA,MAAA,CAAA,CAAA;EAC5B,EAAO,OAAA,KAAA,IAAS,OAAO,GAAO,IAAA,KAAA,CAAA;EAAA,CAAA;EAGzB,SAAA,iBAAA,CAA2B,CAAE,CAAG,EAAA,CAAA,CAAA,EAAS,CAAE,GAAA,EAAK,MAAM,KAAO,EAAA,MAAA,CAAA,EAAA;EAClE,EAAA,MAAM,OAAU,GAAA,YAAA,CAAa,CAAG,EAAA,IAAA,EAAM,IAAO,GAAA,KAAA,CAAA,CAAA;EAC7C,EAAA,MAAM,OAAU,GAAA,YAAA,CAAa,CAAG,EAAA,GAAA,EAAK,GAAM,GAAA,MAAA,CAAA,CAAA;EAC3C,EAAA,OAAO,OAAW,IAAA,OAAA,CAAA;EAAA;;ECxOpB,MAAM,OAAkD,GAAA,UAAA,CAAA;AAsIjD,QAAM,iBAAiBA,mBAAgB,CAAA;EAAA,EAC5C,MAAQ,EAAA;EAAA,IACN,YAAc,EAAA;EAAA,MACZ,IAAM,EAAA,cAAA;EAAA,MACN,OAAS,EAAA,IAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAIb,OAAA,GAAA;EACE,IAAO,OAAA;EAAA,MACL,SAAS,IAAK,CAAA,OAAA;EAAA,KAAA,CAAA;EAAA,GAAA;EAAA,EAIlB,KAAO,EAAA;EAAA,IACL,IAAM,EAAA,CAAE,IAAM,EAAA,KAAA,EAA8B,QAAU,EAAA,IAAA,CAAA;EAAA,IACtD,IAAM,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,GAAA,CAAA;EAAA,IAC/B,QAAU,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,CAAA,CAAA;EAAA,IACnC,UAAY,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,CAAA,CAAA;EAAA,IACrC,cAAgB,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,CAAA,CAAA;EAAA,IACzC,aAAe,EAAA,CAAE,IAAM,EAAA,OAAA,EAAS,OAAS,EAAA,KAAA,CAAA;EAAA,IACzC,0BAA4B,EAAA,CAAE,IAAM,EAAA,OAAA,EAAS,OAAS,EAAA,KAAA,CAAA;EAAA,IACtD,iBAAmB,EAAA,CAAE,IAAM,EAAA,OAAA,EAAS,OAAS,EAAA,IAAA,CAAA;EAAA,IAC7C,oBAAsB,EAAA,CAAE,IAAM,EAAA,OAAA,EAAS,OAAS,EAAA,KAAA,CAAA;EAAA,IAChD,YAAY,CAAE,IAAA,EAAM,CAAC,MAAQ,EAAA,MAAA,EAAQ,QAAgD,OAAS,EAAA,KAAA,CAAA;EAAA,IAC9F,kBAAoB,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,GAAA,CAAA;EAAA,IAC7C,QAAU,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,MAAA,CAAA;EAAA,IACnC,uBAAyB,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,IAAA,CAAA;EAAA,IAClD,KAAO,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,EAAA,CAAA;EAAA,IAChC,QAAQ,CAAE,IAAA,EAAM,CAAC,OAAS,EAAA,KAAA,EAAO,WAAmC,OAAS,EAAA,IAAA,CAAA;EAAA,IAC7E,SAAW,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,QAAA,CAAA;EAAA,IACpC,KAAO,EAAA,CAAE,IAAM,EAAA,KAAA,EAA6B,SAAS,MAAM,EAAA,CAAA;EAAA,IAC3D,QAAU,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,EAAA,CAAA;EAAA,IACnC,WAAa,EAAA,CAAE,IAAM,EAAA,MAAA,EAAQ,OAAS,EAAA,EAAA,CAAA;EAAA,IACtC,aAAe,EAAA,CAAE,IAAM,EAAA,MAAA,EAA4B,OAAS,EAAA,IAAA,CAAA;EAAA,IAC5D,iBAAmB,EAAA;EAAA,MACjB,IAAM,EAAA,QAAA;EAAA,MACN,SAAS,CAAC,CAAA,KAAA;EAER,QAAA,MAAM,gBAAmB,GAAA,CAAC,OAAS,EAAA,UAAA,EAAY,UAAU,QAAU,EAAA,QAAA,CAAA,CAAA;EACnE,QAAA,OAAO,gBAAiB,CAAA,OAAA,CAAS,CAAE,CAAA,MAAA,CAAuB,QAAQ,WAAmB,EAAA,CAAA,KAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAGzF,mBAAqB,EAAA;EAAA,MACnB,IAAM,EAAA,QAAA;EAAA,MACN,OAAA,EAAS,CAAC,CAAE,IAAqB,CAAA,MAAA;EAAA,QAC/B,OAAO,IAAK,CAAA,WAAA;EAAA,QACZ,QAAQ,IAAK,CAAA,YAAA;EAAA,OAAA,CAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAKnB,OAAO,CAAC,YAAA,EAAc,aAAa,UAAY,EAAA,aAAA,EAAe,eAAe,aAAe,EAAA,aAAA,CAAA;EAAA,EAE5F,IAAA,GAAA;EACE,IAAA,IAAI,MAAS,GAAA,KAAA,CAAA;EACb,IAAA,IAAI,IAAK,CAAA,KAAA,EAAA;EAGP,MAAA,IAAI,IAAK,CAAA,YAAA,EAAA;EACP,QAAS,MAAA,GAAA,IAAA,CAAA;EAAA,OAEO;EAAA,KAAA;EAIpB,IAAQ,OAAA;EAAA,MACN,OAAS,EAAA,KAAA;EAAA,MACT,GAAA,EAAK,MAAS,GAAA,IAAA,CAAK,YAAe,GAAA,IAAA;EAAA,MAClC,SAAS,IAAI,OAAA,EAAA;EAAA,KAAA,CAAA;EAAA,GAAA;EAAA,EAIjB,OAAA,GAAA;EACE,IAAA,IAAI,IAAK,CAAA,GAAA,EAAA;EACP,MAAK,IAAA,CAAA,EAAA,GAAK,KAAK,GAAI,CAAA,KAAA,EAAA,CAAA;EAAA,KAAA;EAErB,IAAA,IAAA,CAAK,YAAY,IAAK,CAAA,GAAA,CAAA;EACtB,IAAK,IAAA,CAAA,QAAA,GAAW,IAAK,CAAA,SAAA,CAAU,aAAiB,IAAA,QAAA,CAAA;EAChD,IAAK,IAAA,CAAA,OAAA,GAAU,KAAK,aAAiB,IAAA,MAAA,CAAA;EAGrC,IAAA,IAAI,IAAK,CAAA,0BAAA,EAAA;EACP,MAAA,IAAA,CAAK,eAAkB,GAAA,CAAE,UAAY,EAAA,CAAA,EAAG,SAAW,EAAA,CAAA,CAAA,CAAA;EAAA,KAAA,MAAA;EAGnD,MAAI,IAAA,eAAA,GAAkB,KAAK,SAAU,CAAA,aAAA,CAAA;EACrC,MAAO,OAAA,eAAA,IAAmB,oBAAoB,QAAS,CAAA,IAAA,EAAA;EACrD,QAAM,MAAA,SAAA,GAAY,MAAO,CAAA,gBAAA,CAAiB,eAAiB,CAAA,CAAA,SAAA,CAAA;EAC3D,QAAI,IAAA,SAAA,KAAc,UAAU,SAAc,KAAA,QAAA,EAAA;EACxC,UAAA,MAAA;EAAA,SAAA;EAEF,QAAA,eAAA,GAAkB,eAAgB,CAAA,aAAA,CAAA;EAAA,OAAA;EAEpC,MAAK,IAAA,CAAA,eAAA,GAAkB,mBAAmB,IAAK,CAAA,SAAA,CAAA;EAAA,KAAA;EAGjD,IAAA,IAAA,CAAK,MAAS,GAAA;EAAA,MACZ,OAAO,IAAK,CAAA,WAAA;EAAA,MACZ,MAAM,IAAK,CAAA,UAAA;EAAA,MACX,KAAK,IAAK,CAAA,SAAA;EAAA,KAAA,CAAA;EAGZ,IAAA,KAAA,MAAW,OAAO,IAAK,CAAA,MAAA,EAAA;EACrB,MAAI,IAAA,cAAA,CAAe,KAAK,MAAQ,EAAA,GAAA,CAAA,EAAA;EAE9B,QAAO,MAAA,CAAA,GAAA,CAAA,CAAK,QAAQ,CAAC,SAAA,KAAc,KAAK,SAAU,CAAA,gBAAA,CAAiB,SAAW,EAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAI9F,IAAA,IAAI,IAAK,CAAA,GAAA,EAAA;EACP,MAAA,IAAA,CAAK,IAAI,YAAa,CAAA,IAAA,CAAA,CAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAI1B,aAAA,GAAA;EACE,IAAA,KAAA,MAAW,OAAO,IAAK,CAAA,MAAA,EAAA;EACrB,MAAI,IAAA,cAAA,CAAe,KAAK,MAAQ,EAAA,GAAA,CAAA,EAAA;EAE9B,QAAO,MAAA,CAAA,GAAA,CAAA,CAAK,QAAQ,CAAC,SAAA,KAAc,KAAK,SAAU,CAAA,mBAAA,CAAoB,SAAW,EAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAIjG,IAAA,IAAI,IAAK,CAAA,GAAA,EAAA;EACP,MAAA,IAAA,CAAK,IAAI,eAAgB,CAAA,IAAA,CAAA,CAAA;EAAA,KAAA;EAG3B,IAAA,IAAI,IAAK,CAAA,YAAA;EAAc,MAAA,YAAA,CAAa,IAAK,CAAA,YAAA,CAAA,CAAA;EACzC,IAAA,IAAI,IAAK,CAAA,WAAA;EAAa,MAAA,YAAA,CAAa,IAAK,CAAA,WAAA,CAAA,CAAA;EACxC,IAAA,IAAI,IAAK,CAAA,UAAA;EAAY,MAAA,YAAA,CAAa,IAAK,CAAA,UAAA,CAAA,CAAA;EACvC,IAAA,IAAI,IAAK,CAAA,kBAAA;EAAoB,MAAA,aAAA,CAAc,IAAK,CAAA,kBAAA,CAAA,CAAA;EAAA,GAAA;EAAA,EAGlD,OAAS,EAAA;EAAA,IACP,WAAY,CAAA,CAAA,EAAA;EACV,MAAM,MAAA,CAAE,QAAU,EAAA,iBAAA,CAAA,GAAsB,IAAK,CAAA,MAAA,CAAA;EAE7C,MAAA,IAAK,CAAC,OAAQ,CAAA,CAAA,CAAA,IAAM,CAAE,CAAA,MAAA,KAAW,KAAM,iBAAkB,CAAA,CAAA,CAAA,EAAA;EACvD,QAAO,OAAA,KAAA,CAAA;EAAA,OAAA;EAGT,MAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;EAChB,MAAA,IAAA,CAAK,OAAO,gBAAiB,CAAA,CAAA,CAAA,CAAA;EAC7B,MAAA,MAAM,SAAS,CAAE,CAAA,MAAA,CAAA;EAEjB,MAAA,MAAM,OAAO,OAAQ,CAAA,MAAA,EAAQ,CAAC,EAAA,KAAQ,GAAoB,YAAgB,IAAA,IAAA,CAAA,CAAA;EAE1E,MAAA,IAAI,QAAQ,IAAK,CAAA,YAAA,IAAgB,KAAK,WAAY,CAAA,IAAA,CAAA,IAAS,CAAC,IAAK,CAAA,OAAA,EAAA;EAC/D,QAAM,MAAA,CAAE,iBAAkB,IAAK,CAAA,MAAA,CAAA;EAC/B,QAAM,MAAA,CAAE,SAAU,IAAK,CAAA,YAAA,CAAA;EAEvB,QAAA,IAAI,iBAAiB,CAAC,OAAA,CAAQ,QAAQ,CAAC,EAAA,KAAQ,GAAoB,cAAkB,IAAA,IAAA,CAAA;EAAO,UAAA,OAAA;EAE5F,QAAK,IAAA,CAAA,OAAA,CAAQ,SAAS,CAAE,KAAA,CAAA,CAAA;EAOxB,QAAI,IAAA,MAAA,CAAO,QAAQ,WAAkB,EAAA,KAAA,GAAA,EAAA;EACnC,UAAE,CAAA,CAAA,cAAA,EAAA,CAAA;EAAA,SAAA;EAGJ,QAAA,IAAI,CAAC,QAAA,EAAA;EACH,UAAA,IAAI,KAAK,UAAe,KAAA,CAAA,EAAA;EACtB,YAAA,IAAA,CAAK,WAAY,CAAA,CAAA,CAAA,CAAA;EAAA,WAAA,MAAA;EAEjB,YAAA,IAAA,CAAK,aAAa,OAAQ,CAAA,MAAM,IAAK,CAAA,WAAA,CAAY,IAAI,IAAK,CAAA,UAAA,CAAA,CAAA;EAAA,WAAA;EAAA,SAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAMlE,WAAY,CAAA,IAAA,EAAA;EACV,MAAO,OAAA,IAAA,CAAK,YAAa,CAAA,OAAA,KAAY,IAAK,CAAA,OAAA,CAAA;EAAA,KAAA;EAAA,IAG5C,UAAW,CAAA,CAAA,EAAA;EACT,MAAM,MAAA,CAAE,QAAU,EAAA,cAAA,CAAA,GAAmB,IAAK,CAAA,MAAA,CAAA;EAE1C,MAAI,IAAA,CAAC,IAAK,CAAA,OAAA,IAAW,IAAK,CAAA,QAAA,EAAA;EACxB,QAAA,MAAM,SAAS,gBAAiB,CAAA,CAAA,CAAA,CAAA;EAChC,QAAA,IAAA,CAAK,MAAS,GAAA;EAAA,UACZ,CAAG,EAAA,IAAA,CAAK,IAAK,CAAA,CAAA,GAAI,MAAO,CAAA,CAAA;EAAA,UACxB,CAAG,EAAA,IAAA,CAAK,IAAK,CAAA,CAAA,GAAI,MAAO,CAAA,CAAA;EAAA,SAAA,CAAA;EAE1B,QAAM,MAAA,KAAA,GAAQ,KAAK,GAAI,CAAA,IAAA,CAAK,OAAO,CAAK,CAAA,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,MAAO,CAAA,CAAA,CAAA,CAAA;EAE7D,QAAA,IAAI,CAAC,QAAA,KAAc,CAAA,cAAA,IAAmB,kBAAkB,KAAS,IAAA,cAAA,CAAA,EAAA;EAC/D,UAAA,IAAI,IAAK,CAAA,WAAA;EAAa,YAAA,YAAA,CAAa,IAAK,CAAA,WAAA,CAAA,CAAA;EACxC,UAAK,IAAA,CAAA,WAAA,GAAc,OAAQ,CAAA,IAAA,CAAK,MAAQ,EAAA,CAAA,CAAA,CAAA;EAAA,SAAA,MAAA,IAC/B,QAAY,IAAA,KAAA,IAAS,QAAY,IAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,EAAA,EAAA;EACvD,UAAA,IAAA,CAAK,WAAY,CAAA,CAAA,CAAA,CAAA;EAAA,SAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAKvB,SAAA,GAAA;EACE,MAAA,IAAI,CAAC,IAAK,CAAA,QAAA;EAAU,QAAA,OAAA;EAEpB,MAAM,MAAA,CAAE,YAAa,IAAK,CAAA,MAAA,CAAA;EAE1B,MAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAEhB,MAAA,IAAI,CAAC,QAAA,EAAA;EACH,QAAK,IAAA,CAAA,MAAA,EAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAIT,MAAA,GAAA;EACE,MAAA,IAAI,CAAC,IAAK,CAAA,OAAA,EAAA;EACR,QAAA,YAAA,CAAa,IAAK,CAAA,UAAA,CAAA,CAAA;EAClB,QAAA,IAAA,CAAK,QAAQ,MAAS,GAAA,IAAA,CAAA;EACtB,QAAA,IAAI,IAAK,CAAA,GAAA;EAAK,UAAA,IAAA,CAAK,GAAI,CAAA,MAAA,EAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAI3B,gBAAiB,CAAA,CAAA,EAAA;EACf,MAAA,IAAI,OAAQ,CAAA,CAAA,CAAA,IAAM,CAAE,CAAA,GAAA,KAAQ,IAAK,CAAA,SAAA,EAAA;EAC/B,QAAA,IAAA,CAAK,WAAW,IAAK,CAAA,KAAA,CAAA;EACrB,QAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAA;EACjB,QAAA,IAAA,CAAK,SAAY,GAAA,CAAE,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,CAAA;EAC5B,QAAK,IAAA,CAAA,YAAA,EAAA,CAAA;EACL,QAAA,IAAA,CAAK,aAAc,CAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAIvB,WAAY,CAAA,CAAA,EAAA;EACV,MAAE,CAAA,CAAA,eAAA,EAAA,CAAA;EACF,MAAM,MAAA,MAAA,GAAS,KAAK,OAAQ,CAAA,SAAA,EAAA,CAAA;EAE5B,MAAI,IAAA,MAAA,EAAA;EACF,QAAA,MAAM,CAAE,mBAAA,EAAqB,WAAa,EAAA,iBAAA,EAAmB,YAAa,IAAK,CAAA,MAAA,CAAA;EAC/E,QAAA,MAAM,CAAE,IAAS,CAAA,GAAA,MAAA,CAAA;EACjB,QAAM,MAAA,CAAE,SAAU,IAAK,CAAA,YAAA,CAAA;EACvB,QAAA,MAAM,SAAS,gBAAiB,CAAA,IAAA,CAAA,CAAA;EAEhC,QAAM,MAAA,qBAAA,GAAwB,KAAK,SAAU,CAAA,qBAAA,EAAA,CAAA;EAC7C,QAAM,MAAA,UAAA,GAAa,mBAAoB,CAAA,CAAE,KAAO,EAAA,IAAA,CAAA,CAAA,CAAA;EAEhD,QAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;EACZ,QAAA,IAAA,CAAK,MAAS,GAAA,MAAA,CAAA;EACd,QAAA,IAAA,CAAK,QAAQ,UAAW,CAAA,KAAA,CAAA;EACxB,QAAA,IAAA,CAAK,SAAS,UAAW,CAAA,MAAA,CAAA;EACzB,QAAA,IAAA,CAAK,YAAe,GAAA;EAAA,UAClB,CAAG,EAAA,IAAA,CAAK,MAAO,CAAA,IAAA,GAAO,KAAK,MAAO,CAAA,KAAA;EAAA,UAClC,GAAG,IAAK,CAAA,GAAA,CAAI,KAAK,MAAO,CAAA,GAAA,EAAK,KAAK,MAAO,CAAA,MAAA,CAAA;EAAA,SAAA,CAAA;EAE3C,QAAA,IAAA,CAAK,qBAAqB,IAAK,CAAA,qBAAA,EAAA,CAAA;EAC/B,QAAA,IAAA,CAAK,qBAAwB,GAAA,qBAAA,CAAA;EAC7B,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;EACb,QAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAEhB,QAAA,MAAM,aAAa,SAAU,CAAA,IAAA,CAAA,CAAA;EAE7B,QAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAK,QAAS,CAAA,aAAA,CAAc,UAAW,WAAY,CAAA,UAAA,CAAA,CAAA;EAEjE,QAAK,IAAA,CAAA,MAAA,CAAO,MAAM,QAAW,GAAA,OAAA,CAAA;EAC7B,QAAA,IAAA,CAAK,OAAO,KAAM,CAAA,GAAA,GAAM,GAAG,IAAK,CAAA,kBAAA,CAAmB,MAAM,MAAO,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA;EAChE,QAAA,IAAA,CAAK,OAAO,KAAM,CAAA,IAAA,GAAO,GAAG,IAAK,CAAA,kBAAA,CAAmB,OAAO,MAAO,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;EAClE,QAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,KAAQ,GAAA,CAAA,EAAG,IAAK,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA;EAClC,QAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,IAAK,CAAA,MAAA,CAAA,EAAA,CAAA,CAAA;EACnC,QAAK,IAAA,CAAA,MAAA,CAAO,MAAM,SAAY,GAAA,YAAA,CAAA;EAC9B,QAAK,IAAA,CAAA,MAAA,CAAO,MAAM,aAAgB,GAAA,MAAA,CAAA;EAElC,QAAI,IAAA,iBAAA,EAAA;EACF,UAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;EACrB,UAAA,IAAA,CAAK,MAAM,UAAa,GAAA,QAAA,CAAA;EACxB,UAAA,IAAA,CAAK,MAAM,OAAU,GAAA,GAAA,CAAA;EAAA,SAAA;EAGvB,QAAA,IAAI,IAAK,CAAA,GAAA,EAAA;EACP,UAAA,IAAA,CAAK,IAAI,SAAU,CAAA,IAAA,CAAA,CAAA;EACnB,UAAK,IAAA,CAAA,GAAA,CAAI,SAAS,IAAK,CAAA,MAAA,CAAA;EACvB,UAAK,IAAA,CAAA,GAAA,CAAI,QAAQ,IAAK,CAAA,aAAA,CAAA;EAAA,SAAA;EAGxB,QAAK,IAAA,CAAA,gBAAA,CAAiB,GAAG,IAAK,CAAA,kBAAA,CAAA,CAAA;EAC9B,QAAK,IAAA,CAAA,UAAA,GAAa,aAAc,CAAA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAA,CAAA;EAE3C,QAAI,IAAA,WAAA,EAAA;EACF,UAAA,IAAA,CAAK,MAAO,CAAA,SAAA,CAAU,GAAI,CAAA,GAAG,YAAY,KAAM,CAAA,GAAA,CAAA,CAAA,CAAA;EAAA,SAAA;EAGjD,QAAA,IAAA,CAAK,YAAe,GAAA,OAAA,CAAQ,CAAK,CAAA,GAAA,IAAA,GAAO,IAAK,CAAA,OAAA,CAAA;EAE7C,QAAO,MAAA,CAAA,IAAA,CAAK,QAAQ,CAAC,SAAA,KAAc,KAAK,YAAa,CAAA,gBAAA,CAAiB,WAAW,IAAK,CAAA,cAAA,CAAA,CAAA,CAAA;EAEtF,QAAO,MAAA,CAAA,GAAA,CAAI,QAAQ,CAAC,SAAA,KAAc,KAAK,YAAa,CAAA,gBAAA,CAAiB,WAAW,IAAK,CAAA,aAAA,CAAA,CAAA,CAAA;EAErF,QAAO,MAAA,CAAA,MAAA,CAAO,QAAQ,CAAC,SAAA,KAAc,KAAK,YAAa,CAAA,gBAAA,CAAiB,WAAW,IAAK,CAAA,gBAAA,CAAA,CAAA,CAAA;EAExF,QAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAA;EAEf,QAAA,IAAA,CAAK,KAAM,CAAA,YAAA,EAAc,CAAE,KAAA,EAAO,GAAG,IAAM,EAAA,KAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAI/C,cAAe,CAAA,CAAA,EAAA;EACb,MAAE,CAAA,CAAA,cAAA,EAAA,CAAA;EAEF,MAAA,IAAA,CAAK,cAAe,CAAA,CAAA,CAAA,CAAA;EAEpB,MAAA,IAAI,IAAK,CAAA,GAAA,EAAA;EACP,QAAM,MAAA,OAAA,GAAU,IAAK,CAAA,IAAA,CAAK,IAAK,CAAA,KAAA,CAAA,CAAA;EAC/B,QAAK,IAAA,CAAA,GAAA,CAAI,eAAe,CAAG,EAAA,OAAA,CAAA,CAAA;EAAA,OAAA;EAG7B,MAAA,IAAI,CAAC,IAAA,CAAK,GAAO,IAAA,IAAA,CAAK,IAAI,MAAO,CAAA,IAAA,CAAA,EAAA;EAC/B,QAAK,IAAA,CAAA,YAAA,EAAA,CAAA;EACL,QAAK,IAAA,CAAA,UAAA,EAAA,CAAA;EAAA,OAAA;EAGP,MAAK,IAAA,CAAA,KAAA,CAAM,WAAa,EAAA,CAAE,KAAO,EAAA,CAAA,CAAA,CAAA,CAAA;EAAA,KAAA;EAAA,IAGnC,aAAA,GAAA;EACE,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,IAAA,CAAK,IAAK,CAAA,KAAA,CAAA,CAAA;EAC/B,MAAA,MAAM,QAAW,GAAA,WAAA,CAAY,IAAK,CAAA,IAAA,EAAM,IAAK,CAAA,KAAA,CAAA,CAAA;EAC7C,MAAA,IAAA,CAAK,MAAM,aAAe,EAAA;EAAA,QACxB,UAAU,IAAK,CAAA,KAAA;EAAA,OAAA,CAAA,CAAA;EAEjB,MAAA,IAAA,CAAK,MAAM,aAAe,EAAA,QAAA,CAAA,CAAA;EAC1B,MAAO,OAAA,OAAA,CAAA;EAAA,KAAA;EAAA,IAGT,YAAa,CAAA,OAAA,EAAA;EACX,MAAA,MAAM,QAAW,GAAA,WAAA,CAAY,IAAK,CAAA,IAAA,EAAM,KAAK,QAAW,EAAA,OAAA,CAAA,CAAA;EACxD,MAAA,IAAA,CAAK,MAAM,aAAe,EAAA;EAAA,QACxB,UAAU,IAAK,CAAA,QAAA;EAAA,QACf,KAAO,EAAA,OAAA;EAAA,OAAA,CAAA,CAAA;EAET,MAAA,IAAA,CAAK,MAAM,aAAe,EAAA,QAAA,CAAA,CAAA;EAC1B,MAAK,IAAA,CAAA,aAAA,EAAA,CAAA;EAAA,KAAA;EAAA,IAGP,aAAA,GAAA;EACE,MAAA,IAAI,IAAK,CAAA,kBAAA,EAAA;EACP,QAAA,aAAA,CAAc,IAAK,CAAA,kBAAA,CAAA,CAAA;EACnB,QAAA,IAAA,CAAK,kBAAqB,GAAA,IAAA,CAAA;EAAA,OAAA;EAE5B,MAAI,IAAA,IAAA,CAAK,IAAK,QAAS,CAAA,IAAA,CAAA,EAAA;EAErB,QAAA,IAAA,CAAK,SAAY,GAAA;EAAA,UACf,CAAG,EAAA,GAAA;EAAA,UACH,CAAG,EAAA,GAAA;EAAA,SAAA,CAAA;EAEL,QAAK,IAAA,CAAA,YAAA,EAAA,CAAA;EAAA,OAAA,MAAA;EAEL,QAAK,IAAA,CAAA,OAAA,CAAQ,OAAU,EAAA,CAAA,OAAA,CAAQ,CAAC,GAAA,KAAA;EAC9B,UAAI,GAAA,CAAA,IAAA,CAAK,MAAM,WAAe,CAAA,GAAA,EAAA,CAAA;EAAA,SAAA,CAAA,CAAA;EAEhC,QAAA,IAAA,CAAK,YAAe,GAAA,OAAA,CAAQ,IAAK,CAAA,aAAA,EAAe,KAAK,kBAAsB,IAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAI/E,aAAA,GAAA;EACE,MAAA,IAAI,IAAK,CAAA,kBAAA,EAAA;EACP,QAAA,aAAA,CAAc,IAAK,CAAA,kBAAA,CAAA,CAAA;EACnB,QAAA,IAAA,CAAK,kBAAqB,GAAA,IAAA,CAAA;EAAA,OAAA;EAG5B,MAAA,cAAA,CAAe,KAAK,OAAQ,CAAA,OAAA,EAAA,CAAA,CAAA;EAC5B,MAAA,IAAI,IAAK,CAAA,aAAA,EAAA;EACP,QAAA,IAAA,CAAK,aAAc,CAAA,MAAA,EAAA,CAAA;EACnB,QAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;EAAA,OAAA;EAGvB,MAAA,IAAI,IAAK,CAAA,YAAA,EAAA;EACP,QAAA,YAAA,CAAa,IAAK,CAAA,YAAA,CAAA,CAAA;EAClB,QAAA,IAAA,CAAK,YAAe,GAAA,IAAA,CAAA;EAAA,OAAA;EAEtB,MAAA,IAAA,CAAK,QAAQ,MAAS,GAAA,IAAA,CAAA;EACtB,MAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAChB,MAAA,IAAA,CAAK,OAAU,GAAA,KAAA,CAAA;EAAA,KAAA;EAAA,IAGjB,iBAAiB,CAAe,EAAA,UAAA,EAAA;EAC9B,MAAM,MAAA,CAAE,0BAA4B,EAAA,qBAAA,EAAuB,OAAY,CAAA,GAAA,IAAA,CAAA;EAEvE,MAAA,IAAA,CAAK,YAAe,GAAA;EAAA,QAClB,CAAG,EAAA,IAAA,CAAK,MAAO,CAAA,IAAA,GAAO,KAAK,MAAO,CAAA,KAAA;EAAA,QAClC,GAAG,IAAK,CAAA,GAAA,CAAI,KAAK,MAAO,CAAA,GAAA,EAAK,KAAK,MAAO,CAAA,MAAA,CAAA;EAAA,OAAA,CAAA;EAG3C,MAAA,IAAA,CAAK,KAAQ,GAAA;EAAA,QACX,CAAG,EAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,GAAQ,CAAA,IAAA,CAAA;EAAA,QAC7B,CAAG,EAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,GAAQ,CAAA,IAAA,CAAA;EAAA,OAAA,CAAA;EAG/B,MAAA,IAAA,CAAK,gBAAgB,gBAAiB,CAAA,CAAA,CAAA,CAAA;EAGtC,MAAA,IAAA,CAAK,aAAgB,GAAA;EAAA,QACnB,GAAA,EAAK,KAAK,eAAgB,CAAA,SAAA;EAAA,QAC1B,IAAA,EAAM,KAAK,eAAgB,CAAA,UAAA;EAAA,OAAA,CAAA;EAI7B,MAAA,IAAA,CAAK,mBAAsB,GAAA;EAAA,QACzB,KAAK,MAAO,CAAA,WAAA;EAAA,QACZ,MAAM,MAAO,CAAA,WAAA;EAAA,OAAA,CAAA;EAGf,MAAA,IAAA,CAAK,SAAY,GAAA,CAAE,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,CAAA;EAC5B,MAAA,IAAA,CAAK,YAAe,GAAA,EAAA,CAAA;EACpB,MAAA,IAAA,CAAK,YAAe,GAAA,EAAA,CAAA;EAEpB,MAAA,IAAI,KAAK,KAAM,CAAA,CAAA,EAAA;EACb,QAAK,IAAA,CAAA,YAAA,CAAa,IACf,CAA6B,0BAAA,GAAA,CAAA,GAAI,sBAAsB,IAAQ,IAAA,UAAA,CAAW,IAAO,GAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,CAAA;EACjG,QAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GACf,CAA6B,0BAAA,GAAA,OAAA,CAAQ,UAAa,GAAA,qBAAA,CAAsB,IAAO,GAAA,qBAAA,CAAsB,KACtG,IAAA,UAAA,CAAW,IACX,GAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,CAAA;EAAA,OAAA;EAEjB,MAAA,IAAI,KAAK,KAAM,CAAA,CAAA,EAAA;EACb,QAAK,IAAA,CAAA,YAAA,CAAa,IACf,CAA6B,0BAAA,GAAA,CAAA,GAAI,sBAAsB,GAAO,IAAA,UAAA,CAAW,GAAM,GAAA,IAAA,CAAK,MAAS,GAAA,CAAA,CAAA;EAChG,QAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GACf,CACG,0BAAA,GAAA,OAAA,CAAQ,WACR,GAAA,qBAAA,CAAsB,GAAM,GAAA,qBAAA,CAAsB,MACtD,IAAA,UAAA,CAAW,GACX,GAAA,IAAA,CAAK,MAAS,GAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAIpB,YAAA,CAAa,GAAe,aAA6B,EAAA,MAAA,EAAA;EACvD,MAAI,IAAA,IAAA,CAAK,IAAK,QAAS,CAAA,IAAA,CAAA,EAAA;EACrB,QAAA,OAAA;EAAA,OAAA;EAGF,MAAA,IAAI,IAAK,CAAA,YAAA,EAAA;EACP,QAAK,IAAA,CAAA,aAAA,EAAA,CAAA;EACL,QAAA,YAAA,CAAa,IAAK,CAAA,YAAA,CAAA,CAAA;EAClB,QAAA,IAAA,CAAK,YAAe,GAAA,IAAA,CAAA;EAAA,OAAA;EAGtB,MAAM,MAAA,KAAA,GAAQ,KAAK,OAAQ,CAAA,OAAA,EAAA,CAAA;EAC3B,MAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,MAAA,CAAA;EACnB,MAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,GAAS,CAAE,KAAA,EAAO,IAAK,CAAA,KAAA,CAAA,CAAA;EAEpC,MAAM,MAAA,qBAAA,GAAwB,KAAK,SAAU,CAAA,qBAAA,EAAA,CAAA;EAC7C,MAAA,MAAM,qBAAqB,MAAO,CAAA,qBAAA,EAAA,CAAA;EAClC,MAAA,IAAA,CAAK,qBAAwB,GAAA,qBAAA,CAAA;EAE7B,MAAA,IAAA,CAAK,gBAAgB,SAAU,CAAA,aAAA,CAAA,CAAA;EAC/B,MAAK,IAAA,CAAA,SAAA,CAAU,YAAY,IAAK,CAAA,aAAA,CAAA,CAAA;EAChC,MAAM,MAAA,SAAA,GAAY,KAAK,aAAc,CAAA,qBAAA,EAAA,CAAA;EACrC,MAAA,IAAA,CAAK,kBAAqB,GAAA,SAAA,CAAA;EAC1B,MAAK,IAAA,CAAA,MAAA,GAAS,iBAAiB,IAAK,CAAA,aAAA,CAAA,CAAA;EACpC,MAAA,IAAA,CAAK,QAAQ,SAAU,CAAA,KAAA,CAAA;EACvB,MAAA,IAAA,CAAK,SAAS,SAAU,CAAA,MAAA,CAAA;EAGxB,MAAA,IAAA,CAAK,UAAa,GAAA,aAAA,CAAc,IAAK,CAAA,aAAA,EAAe,IAAK,CAAA,SAAA,CAAA,CAAA;EAEzD,MAAA,IAAA,CAAK,iBAAiB,CAAG,EAAA,SAAA,CAAA,CAAA;EAIzB,MAAA,IAAA,CAAK,aAAc,CAAA,CAAA,IAAK,SAAU,CAAA,CAAA,GAAI,kBAAmB,CAAA,CAAA,CAAA;EACzD,MAAA,IAAA,CAAK,aAAc,CAAA,CAAA,IAAK,SAAU,CAAA,CAAA,GAAI,kBAAmB,CAAA,CAAA,CAAA;EAGzD,MAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAA;EAAA,KAAA;EAAA,IAGjB,aAAc,CAAA,CAAA,EAAA;EAEZ,MAAA,IAAI,IAAK,CAAA,YAAA,EAAA;EACP,QAAO,MAAA,CAAA,IAAA,CAAK,QAAQ,CAAC,SAAA,KAEnB,KAAK,YAAa,CAAA,mBAAA,CAAoB,WAAW,IAAK,CAAA,cAAA,CAAA,CAAA,CAAA;EAExD,QAAO,MAAA,CAAA,GAAA,CAAI,QAAQ,CAAC,SAAA,KAElB,KAAK,YAAa,CAAA,mBAAA,CAAoB,WAAW,IAAK,CAAA,aAAA,CAAA,CAAA,CAAA;EAExD,QAAO,MAAA,CAAA,MAAA,CAAO,QAAQ,CAAC,SAAA,KAErB,KAAK,YAAa,CAAA,mBAAA,CAAoB,WAAW,IAAK,CAAA,gBAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAI1D,MAAM,MAAA,KAAA,GAAQ,KAAK,OAAQ,CAAA,OAAA,EAAA,CAAA;EAG3B,MAAI,IAAA,IAAA,CAAK,UAAU,IAAK,CAAA,WAAA,EAAA;EACtB,QAAA,IAAA,CAAK,OAAO,SAAU,CAAA,MAAA,CAAO,GAAG,IAAA,CAAK,YAAY,KAAM,CAAA,GAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAIzD,MAAA,IAAI,IAAK,CAAA,kBAAA;EAAoB,QAAA,aAAA,CAAc,IAAK,CAAA,kBAAA,CAAA,CAAA;EAChD,MAAA,IAAA,CAAK,kBAAqB,GAAA,IAAA,CAAA;EAE1B,MAAA,MAAM,KAAQ,GAAA,MAAA;EAEZ,QAAA,IAAI,IAAK,CAAA,MAAA,EAAA;EACP,UAAA,IAAA,CAAK,MAAO,CAAA,MAAA,EAAA,CAAA;EACZ,UAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;EAAA,SAAA;EAGhB,QAAI,IAAA,IAAA,CAAK,qBAAqB,IAAK,CAAA,aAAA,EAAA;EACjC,UAAK,IAAA,CAAA,aAAA,CAAc,MAAM,UAAa,GAAA,EAAA,CAAA;EACtC,UAAK,IAAA,CAAA,aAAA,CAAc,MAAM,OAAU,GAAA,EAAA,CAAA;EAAA,SAAA;EAGrC,QAAe,cAAA,CAAA,KAAA,CAAA,CAAA;EAGf,QAAA,IAAI,IAAK,CAAA,GAAA,IAAO,CAAC,IAAA,CAAK,IAAI,MAAO,CAAA,IAAA,CAAA,EAAA;EAC/B,UAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAK,GAAI,CAAA,MAAA,EAAA,GAAW,KAAK,GAAI,CAAA,aAAA,EAAA,CAAA;EAAA,SAAA,MAAA,IACrC,IAAK,CAAA,SAAA,EAAA;EACd,UAAK,IAAA,CAAA,KAAA,CAAM,aAAe,EAAA,CAAE,KAAO,EAAA,CAAA,CAAA,CAAA,CAAA;EAAA,SAAA,MAAA;EAEnC,UAAA,IAAA,CAAK,MAAM,UAAY,EAAA;EAAA,YACrB,KAAO,EAAA,CAAA;EAAA,YACP,UAAU,IAAK,CAAA,KAAA;EAAA,YACf,UAAU,IAAK,CAAA,QAAA;EAAA,WAAA,CAAA,CAAA;EAEjB,UAAA,IAAA,CAAK,MAAM,aAAe,EAAA,SAAA,CAAU,KAAK,IAAM,EAAA,IAAA,CAAK,OAAQ,IAAK,CAAA,QAAA,CAAA,CAAA,CAAA;EAAA,SAAA;EAGnE,QAAA,IAAA,CAAK,QAAQ,MAAS,GAAA,IAAA,CAAA;EACtB,QAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAChB,QAAA,IAAA,CAAK,SAAY,GAAA,KAAA,CAAA;EACjB,QAAA,IAAA,CAAK,OAAU,GAAA,KAAA,CAAA;EAAA,OAAA,CAAA;EAGjB,MAAI,IAAA,IAAA,CAAK,sBAAsB,IAAK,CAAA,uBAAA,EAAA;EAClC,QAAA,IAAA,CAAK,0BAA0B,KAAO,EAAA,KAAA,CAAA,CAAA;EAAA,OAAA,MAAA;EAEtC,QAAA,KAAA,EAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAIJ,0BAA0B,KAAkB,EAAA,EAAA,EAAA;EAC1C,MAAA,IAAI,KAAK,uBAA4B,KAAA,CAAA,IAAK,MAAM,MAAW,KAAA,CAAA,IAAK,CAAC,IAAK,CAAA,MAAA,EAAA;EACpE,QAAA,OAAO,OAAQ,CAAA,OAAA,EAAA,CAAA;EAAA,OAAA;EAGjB,MAAM,MAAA,SAAA,GAAY,KAAM,CAAA,IAAA,CAAK,KAAQ,CAAA,CAAA,IAAA,CAAA;EACrC,MAAA,IAAI,OAAU,GAAA,CAAA,CAAA;EACd,MAAA,IAAI,OAAU,GAAA,CAAA,CAAA;EAEd,MAAA,MAAM,gBAAmB,GAAA;EAAA,QACvB,GAAK,EAAA,MAAA,CAAO,WAAc,GAAA,IAAA,CAAK,mBAAoB,CAAA,GAAA;EAAA,QACnD,IAAM,EAAA,MAAA,CAAO,WAAc,GAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA;EAAA,OAAA,CAAA;EAGtD,MAAI,IAAA,IAAA,CAAK,OAAO,CAAC,IAAA,CAAK,IAAI,MAAO,CAAA,IAAA,CAAA,IAAyB,CAAC,IAAK,CAAA,SAAA,EAAA;EAC9D,QAAM,MAAA,IAAA,GAAO,KAAK,GAAI,CAAA,OAAA,EAAA,CAAA;EACtB,QAAA,IAAI,CAAC,IAAA;EAAM,UAAA,OAAA;EACX,QAAA,MAAM,YAAY,IAAK,CAAA,QAAA,CAAA;EACvB,QAAM,MAAA,QAAA,GAAW,KAAK,OAAQ,CAAA,cAAA,EAAA,CAAA;EAC9B,QAAA,MAAM,WAAW,SAAY,GAAA,QAAA,CAAS,SAAS,QAAS,CAAA,SAAA,CAAA,CAAW,OAAO,IAAK,CAAA,aAAA,CAAA;EAC/E,QAAM,MAAA,QAAA,GAAW,mBAAmB,SAAW,EAAA,QAAA,CAAA,CAAA;EAE/C,QAAM,MAAA,YAAA,GAAe,cAAc,SAAW,EAAA,QAAA,CAAA,CAAA;EAC9C,QAAM,MAAA,YAAA,GAAe,cAAc,QAAU,EAAA,QAAA,CAAA,CAAA;EAE7C,QAAA,OAAA,GAAU,YAAa,CAAA,IAAA,GAAO,YAAa,CAAA,IAAA,GAAO,gBAAiB,CAAA,IAAA,CAAA;EACnE,QAAA,OAAA,GAAU,YAAa,CAAA,GAAA,GAAM,YAAa,CAAA,GAAA,GAAM,gBAAiB,CAAA,GAAA,CAAA;EAAA,OAAA,MAAA;EAEjE,QAAM,MAAA,YAAA,GAAe,KAAM,CAAA,IAAA,CAAK,QAAW,CAAA,CAAA,IAAA,CAAA;EAC3C,QAAA,MAAM,WAAc,GAAA;EAAA,UAClB,MAAM,IAAK,CAAA,eAAA,CAAgB,aAAa,IAAK,CAAA,aAAA,CAAc,OAAO,gBAAiB,CAAA,IAAA;EAAA,UACnF,KAAK,IAAK,CAAA,eAAA,CAAgB,YAAY,IAAK,CAAA,aAAA,CAAc,MAAM,gBAAiB,CAAA,GAAA;EAAA,SAAA,CAAA;EAElF,QAAA,OAAA,GAAU,CAAC,WAAY,CAAA,IAAA,CAAA;EACvB,QAAA,IAAI,IAAK,CAAA,SAAA,IAAa,IAAK,CAAA,SAAA,CAAU,CAAI,GAAA,CAAA,EAAA;EAEvC,UAAA,OAAA,IACE,aAAa,UAAa,GAAA,YAAA,CAAa,WAAe,IAAA,SAAA,CAAU,aAAa,SAAU,CAAA,WAAA,CAAA,CAAA;EAAA,SAAA,MAAA;EAEzF,UAAW,OAAA,IAAA,YAAA,CAAa,aAAa,SAAU,CAAA,UAAA,CAAA;EAAA,SAAA;EAGjD,QAAA,OAAA,GAAU,CAAC,WAAY,CAAA,GAAA,CAAA;EACvB,QAAA,IAAI,IAAK,CAAA,SAAA,IAAa,IAAK,CAAA,SAAA,CAAU,CAAI,GAAA,CAAA,EAAA;EAEvC,UAAA,OAAA,IACE,aAAa,SAAY,GAAA,YAAA,CAAa,YAAgB,IAAA,SAAA,CAAU,YAAY,SAAU,CAAA,YAAA,CAAA,CAAA;EAAA,SAAA,MAAA;EAExF,UAAW,OAAA,IAAA,YAAA,CAAa,YAAY,SAAU,CAAA,SAAA,CAAA;EAAA,SAAA;EAAA,OAAA;EAIlD,MAAA,MAAM,WAAW,IAAK,CAAA,uBAAA,KAA4B,IAAO,GAAA,IAAA,CAAK,0BAA0B,IAAK,CAAA,kBAAA,CAAA;EAE7F,MAAA,YAAA,CAAa,IAAK,CAAA,MAAA,EAAQ,CAAe,YAAA,EAAA,OAAA,CAAA,GAAA,EAAa,iBAAiB,CAAG,EAAA,QAAA,CAAA,EAAA,CAAA,CAAA,CAAA;EAI1E,MAAA,MAAM,UAAU,CAAC,KAAA,KAAA;EACf,QAAI,IAAA,CAAC,KAAS,IAAA,KAAA,CAAM,YAAiB,KAAA,WAAA,EAAA;EACnC,UAAa,YAAA,CAAA,YAAA,CAAA,CAAA;EACb,UAAA,YAAA,CAAa,IAAK,CAAA,MAAA,CAAA,CAAA;EAClB,UAAA,EAAA,EAAA,CAAA;EAAA,SAAA;EAAA,OAAA,CAAA;EAIJ,MAAM,MAAA,YAAA,GAAe,UAAW,CAAA,OAAA,EAAS,QAAW,GAAA,EAAA,CAAA,CAAA;EACpD,MAAK,IAAA,CAAA,MAAA,CAAO,iBAAiB,eAAiB,EAAA,OAAA,CAAA,CAAA;EAAA,KAAA;EAAA,IAGhD,cAAe,CAAA,CAAA,EAAA;EACb,MAAM,MAAA,CAAE,QAAU,EAAA,oBAAA,CAAA,GAAyB,IAAK,CAAA,MAAA,CAAA;EAEhD,MAAA,MAAM,SAAS,gBAAiB,CAAA,CAAA,CAAA,CAAA;EAChC,MAAA,MAAM,SAAY,GAAA;EAAA,QAChB,CAAG,EAAA,MAAA,CAAO,CAAI,GAAA,IAAA,CAAK,aAAc,CAAA,CAAA;EAAA,QACjC,CAAG,EAAA,MAAA,CAAO,CAAI,GAAA,IAAA,CAAK,aAAc,CAAA,CAAA;EAAA,OAAA,CAAA;EAGnC,MAAA,SAAA,CAAU,CAAK,IAAA,MAAA,CAAO,WAAc,GAAA,IAAA,CAAK,mBAAoB,CAAA,GAAA,CAAA;EAC7D,MAAA,SAAA,CAAU,CAAK,IAAA,MAAA,CAAO,WAAc,GAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA,CAAA;EAE7D,MAAA,IAAA,CAAK,SAAY,GAAA,SAAA,CAAA;EAEjB,MAAI,IAAA,oBAAA,EAAA;EACF,QAAM,MAAA,CAAC,eAAe,aAAiB,CAAA,GAAA,mBAAA,CAAoB,KAAK,UAAY,EAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,CAAA,CAAA;EAC9F,QAAA,MAAM,SAAY,GAAA;EAAA,UAChB,CAAG,EAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,GAAI,aAAc,CAAA,CAAA;EAAA,UAClC,CAAG,EAAA,IAAA,CAAK,MAAS,GAAA,CAAA,GAAI,aAAc,CAAA,CAAA;EAAA,SAAA,CAAA;EAErC,QAAA,MAAM,SAAY,GAAA;EAAA,UAChB,CAAG,EAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,GAAI,aAAc,CAAA,CAAA;EAAA,UAClC,CAAG,EAAA,IAAA,CAAK,MAAS,GAAA,CAAA,GAAI,aAAc,CAAA,CAAA;EAAA,SAAA,CAAA;EAGrC,QAAA,IAAI,IAAK,CAAA,YAAA,CAAa,CAAK,IAAA,IAAA,CAAK,YAAa,CAAA,CAAA;EAC3C,UAAA,SAAA,CAAU,CAAI,GAAA,KAAA,CAAM,IAAK,CAAA,YAAA,CAAa,CAAI,GAAA,SAAA,CAAU,CAAG,EAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GAAI,SAAU,CAAA,CAAA,EAAG,SAAU,CAAA,CAAA,CAAA,CAAA;EACtG,QAAA,IAAI,IAAK,CAAA,YAAA,CAAa,CAAK,IAAA,IAAA,CAAK,YAAa,CAAA,CAAA;EAC3C,UAAA,SAAA,CAAU,CAAI,GAAA,KAAA,CAAM,IAAK,CAAA,YAAA,CAAa,CAAI,GAAA,SAAA,CAAU,CAAG,EAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GAAI,SAAU,CAAA,CAAA,EAAG,SAAU,CAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAGxG,MAAA,IAAI,QAAa,KAAA,GAAA,EAAA;EACf,QAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA;EAAA,OAAA,MAAA,IACL,QAAa,KAAA,GAAA,EAAA;EACtB,QAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA;EAAA,OAAA;EAGhB,MAAA,IAAI,IAAK,CAAA,MAAA,EAAA;EACP,QAAA,IAAA,CAAK,OAAO,KAAM,CAAA,WAAA,CAAA,GAAe,CAAe,YAAA,EAAA,SAAA,CAAU,OAAO,SAAU,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAI/E,YAAA,GAAA;EACE,MAAM,MAAA,CAAE,kBAAoB,EAAA,iBAAA,CAAA,GAAsB,IAAK,CAAA,MAAA,CAAA;EACvD,MAAM,MAAA,KAAA,GAAQ,KAAK,OAAQ,CAAA,cAAA,EAAA,CAAA;EAC3B,MAAA,MAAM,WAAc,GAAA;EAAA,QAClB,IAAM,EAAA,IAAA,CAAK,eAAgB,CAAA,UAAA,GAAa,KAAK,aAAc,CAAA,IAAA;EAAA,QAC3D,GAAK,EAAA,IAAA,CAAK,eAAgB,CAAA,SAAA,GAAY,KAAK,aAAc,CAAA,GAAA;EAAA,OAAA,CAAA;EAE3D,MAAA,MAAM,aAAgB,GAAA;EAAA,QACpB,MAAM,IAAK,CAAA,UAAA,CAAW,OAAO,IAAK,CAAA,SAAA,CAAU,IAAI,WAAY,CAAA,IAAA;EAAA,QAC5D,KAAK,IAAK,CAAA,UAAA,CAAW,MAAM,IAAK,CAAA,SAAA,CAAU,IAAI,WAAY,CAAA,GAAA;EAAA,OAAA,CAAA;EAE5D,MAAA,MAAM,gBAAmB,GAAA;EAAA,QACvB,GAAK,EAAA,MAAA,CAAO,WAAc,GAAA,IAAA,CAAK,mBAAoB,CAAA,GAAA;EAAA,QACnD,IAAM,EAAA,MAAA,CAAO,WAAc,GAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA;EAAA,OAAA,CAAA;EAEtD,MAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;EAEhB,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,GAAA,GAAM,KAAM,CAAA,MAAA,EAAQ,IAAI,GAAK,EAAA,CAAA,EAAA,EAAA;EAC3C,QAAM,MAAA,CAAE,QAAS,KAAM,CAAA,CAAA,CAAA,CAAA;EACvB,QAAM,MAAA,KAAA,GAAQ,KAAK,YAAa,CAAA,KAAA,CAAA;EAChC,QAAA,MAAM,QAAQ,IAAK,CAAA,WAAA,CAAA;EACnB,QAAA,MAAM,SAAS,IAAK,CAAA,YAAA,CAAA;EACpB,QAAA,MAAM,MAAS,GAAA;EAAA,UACb,OAAO,IAAK,CAAA,KAAA,GAAQ,QAAQ,KAAQ,GAAA,CAAA,GAAI,KAAK,KAAQ,GAAA,CAAA;EAAA,UACrD,QAAQ,IAAK,CAAA,MAAA,GAAS,SAAS,MAAS,GAAA,CAAA,GAAI,KAAK,MAAS,GAAA,CAAA;EAAA,SAAA,CAAA;EAG5D,QAAA,MAAM,SAAY,GAAA;EAAA,UAChB,CAAG,EAAA,CAAA;EAAA,UACH,CAAG,EAAA,CAAA;EAAA,SAAA,CAAA;EAEL,QAAI,IAAA,CAAE,cAAe,KAAM,CAAA,CAAA,CAAA,CAAA;EAG3B,QAAA,IAAI,CAAC,UAAA,EAAA;EACH,UAAA,KAAA,CAAM,CAAG,CAAA,CAAA,UAAA,GAAa,UAAa,GAAA,aAAA,CAAc,MAAM,IAAK,CAAA,SAAA,CAAA,CAAA;EAAA,SAAA;EAI9D,QAAA,MAAM,WAAW,CAAI,GAAA,KAAA,CAAM,MAAS,GAAA,CAAA,IAAK,MAAM,CAAI,GAAA,CAAA,CAAA,CAAA;EACnD,QAAA,MAAM,QAAW,GAAA,CAAA,GAAI,CAAK,IAAA,KAAA,CAAM,CAAI,GAAA,CAAA,CAAA,CAAA;EAIpC,QAAI,IAAA,QAAA,IAAY,CAAC,QAAS,CAAA,UAAA,EAAA;EACxB,UAAA,QAAA,CAAS,UAAa,GAAA,aAAA,CAAc,QAAS,CAAA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAA,CAAA;EAAA,SAAA;EAI1D,QAAA,IAAI,UAAU,IAAK,CAAA,KAAA,EAAA;EAMjB,UAAI,IAAA,iBAAA,EAAA;EACF,YAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;EACrB,YAAA,IAAA,CAAK,MAAM,UAAa,GAAA,QAAA,CAAA;EACxB,YAAA,IAAA,CAAK,MAAM,OAAU,GAAA,GAAA,CAAA;EAAA,WAAA;EAGvB,UAAA,SAAA;EAAA,SAAA;EAGF,QAAI,IAAA,kBAAA,EAAA;EACF,UAAK,IAAA,CAAA,KAAA,CAAM,wBAAwB,CAAG,EAAA,kBAAA,CAAA,EAAA,CAAA,CAAA;EAAA,SAAA;EAGxC,QAAA,IAAI,KAAK,KAAM,CAAA,CAAA,EAAA;EACb,UAAA,IAAI,KAAK,KAAM,CAAA,CAAA,EAAA;EAEb,YACE,IAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,KACG,aAAA,CAAA,IAAA,GAAO,iBAAiB,IAAO,GAAA,MAAA,CAAO,KAAS,IAAA,UAAA,CAAW,IACxE,IAAA,aAAA,CAAc,MAAM,gBAAiB,CAAA,GAAA,IAAO,UAAW,CAAA,GAAA,GAAM,MAAO,CAAA,MAAA,IACpE,aAAc,CAAA,GAAA,GAAM,gBAAiB,CAAA,GAAA,GAAM,MAAO,CAAA,MAAA,IAAU,UAAW,CAAA,GAAA,CAAA,EAAA;EAIzE,cAAA,SAAA,CAAU,CAAI,GAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAK,YAAa,CAAA,CAAA,CAAA;EAC7C,cAAI,IAAA,UAAA,CAAW,OAAO,SAAU,CAAA,CAAA,GAAI,KAAK,qBAAsB,CAAA,KAAA,GAAQ,OAAO,KAAS,IAAA,QAAA,EAAA;EAIrF,gBAAA,SAAA,CAAU,CAAI,GAAA,QAAA,CAAS,UAAY,CAAA,IAAA,GAAO,UAAW,CAAA,IAAA,CAAA;EACrD,gBAAA,SAAA,CAAU,CAAI,GAAA,QAAA,CAAS,UAAY,CAAA,GAAA,GAAM,UAAW,CAAA,GAAA,CAAA;EAAA,eAAA;EAEtD,cAAA,IAAI,KAAK,QAAa,KAAA,IAAA,EAAA;EACpB,gBAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAAA,eAAA;EAAA,aAGlB,MAAA,IAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,KACG,aAAA,CAAA,IAAA,GAAO,gBAAiB,CAAA,IAAA,GAAO,MAAO,CAAA,KAAA,IAAS,UAAW,CAAA,IAAA,IACxE,aAAc,CAAA,GAAA,GAAM,iBAAiB,GAAM,GAAA,MAAA,CAAO,MAAU,IAAA,UAAA,CAAW,GACvE,IAAA,aAAA,CAAc,GAAM,GAAA,gBAAA,CAAiB,GAAM,GAAA,MAAA,CAAO,MAAU,IAAA,UAAA,CAAW,GAAM,GAAA,MAAA,CAAA,EAAA;EAI/E,cAAA,SAAA,CAAU,CAAI,GAAA,EAAO,IAAA,CAAA,KAAA,GAAQ,KAAK,YAAa,CAAA,CAAA,CAAA,CAAA;EAC/C,cAAI,IAAA,UAAA,CAAW,OAAO,SAAU,CAAA,CAAA,GAAI,KAAK,qBAAsB,CAAA,IAAA,GAAO,OAAO,KAAS,IAAA,QAAA,EAAA;EAIpF,gBAAA,SAAA,CAAU,CAAI,GAAA,QAAA,CAAS,UAAY,CAAA,IAAA,GAAO,UAAW,CAAA,IAAA,CAAA;EACrD,gBAAA,SAAA,CAAU,CAAI,GAAA,QAAA,CAAS,UAAY,CAAA,GAAA,GAAM,UAAW,CAAA,GAAA,CAAA;EAAA,eAAA;EAEtD,cAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAAA,aAAA;EAAA,WAAA,MAAA;EAGlB,YAAI,IAAA,KAAA,GAAQ,KAAK,KAAU,IAAA,aAAA,CAAc,OAAO,gBAAiB,CAAA,IAAA,GAAO,MAAO,CAAA,KAAA,IAAS,UAAW,CAAA,IAAA,EAAA;EACjG,cAAA,SAAA,CAAU,CAAI,GAAA,EAAO,IAAA,CAAA,KAAA,GAAQ,KAAK,YAAa,CAAA,CAAA,CAAA,CAAA;EAC/C,cAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAAA,aAEhB,MAAA,IAAA,KAAA,GAAQ,KAAK,KACb,IAAA,aAAA,CAAc,OAAO,gBAAiB,CAAA,IAAA,IAAQ,UAAW,CAAA,IAAA,GAAO,MAAO,CAAA,KAAA,EAAA;EAEvE,cAAA,SAAA,CAAU,CAAI,GAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAK,YAAa,CAAA,CAAA,CAAA;EAC7C,cAAA,IAAI,KAAK,QAAY,IAAA,IAAA,EAAA;EACnB,gBAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAAA,eAAA;EAAA,aAAA;EAAA,WAAA;EAAA,SAAA,MAAA,IAIb,KAAK,KAAM,CAAA,CAAA,EAAA;EACpB,UAAI,IAAA,KAAA,GAAQ,KAAK,KAAU,IAAA,aAAA,CAAc,MAAM,gBAAiB,CAAA,GAAA,GAAM,MAAO,CAAA,MAAA,IAAU,UAAW,CAAA,GAAA,EAAA;EAChG,YAAA,SAAA,CAAU,CAAI,GAAA,EAAO,IAAA,CAAA,MAAA,GAAS,KAAK,YAAa,CAAA,CAAA,CAAA,CAAA;EAChD,YAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAAA,WAEhB,MAAA,IAAA,KAAA,GAAQ,KAAK,KACb,IAAA,aAAA,CAAc,MAAM,gBAAiB,CAAA,GAAA,IAAO,UAAW,CAAA,GAAA,GAAM,MAAO,CAAA,MAAA,EAAA;EAEpE,YAAA,SAAA,CAAU,CAAI,GAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAK,YAAa,CAAA,CAAA,CAAA;EAC9C,YAAA,IAAI,KAAK,QAAY,IAAA,IAAA,EAAA;EACnB,cAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;EAAA,aAAA;EAAA,WAAA;EAAA,SAAA;EAItB,QAAA,IAAA,CAAK,KAAM,CAAA,WAAA,CAAA,GAAe,CAAe,YAAA,EAAA,SAAA,CAAU,OAAO,SAAU,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA;EAAA,OAAA;EAGtE,MAAA,IAAI,KAAK,QAAY,IAAA,IAAA,EAAA;EACnB,QAAA,IAAA,CAAK,WAAW,IAAK,CAAA,KAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,IAIzB,UAAA,GAAA;EACE,MAAA,MAAM,YAAY,IAAK,CAAA,SAAA,CAAA;EACvB,MAAA,MAAM,SAAY,GAAA;EAAA,QAChB,CAAG,EAAA,CAAA;EAAA,QACH,CAAG,EAAA,CAAA;EAAA,OAAA,CAAA;EAEL,MAAA,MAAM,KAAQ,GAAA;EAAA,QACZ,CAAG,EAAA,CAAA;EAAA,QACH,CAAG,EAAA,CAAA;EAAA,OAAA,CAAA;EAEL,MAAA,MAAM,YAAe,GAAA;EAAA,QACnB,CAAG,EAAA,EAAA;EAAA,QACH,CAAG,EAAA,EAAA;EAAA,OAAA,CAAA;EAGL,MAAA,IAAI,UAAU,CAAK,IAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GAAK,KAAK,MAAS,GAAA,CAAA,EAAA;EACtD,QAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA;EACd,QAAA,KAAA,CAAM,CAAI,GAAA,YAAA,CAAa,CAAI,GAAA,IAAA,CAAK,GAAK,CAAA,CAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GAAK,IAAK,CAAA,MAAA,GAAS,CAAI,GAAA,SAAA,CAAU,KAAK,IAAK,CAAA,MAAA,CAAA,CAAA;EAAA,OAAA,MAAA,IACzF,UAAU,CAAK,IAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GAAK,KAAK,KAAQ,GAAA,CAAA,EAAA;EAC5D,QAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA;EACd,QAAA,KAAA,CAAM,CAAI,GAAA,YAAA,CAAa,CAAI,GAAA,IAAA,CAAK,GAAK,CAAA,CAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GAAK,IAAK,CAAA,KAAA,GAAQ,CAAI,GAAA,SAAA,CAAU,KAAK,IAAK,CAAA,KAAA,CAAA,CAAA;EAAA,OAAA,MAAA,IACxF,UAAU,CAAK,IAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GAAK,KAAK,MAAS,GAAA,CAAA,EAAA;EAC7D,QAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA,CAAA;EACd,QAAA,KAAA,CAAM,CAAI,GAAA,YAAA,CAAa,CAAI,GAAA,IAAA,CAAK,GAAK,CAAA,CAAA,SAAA,CAAU,CAAI,GAAA,IAAA,CAAK,MAAS,GAAA,CAAA,GAAI,IAAK,CAAA,YAAA,CAAa,KAAM,IAAK,CAAA,MAAA,CAAA,CAAA;EAAA,OAAA,MAAA,IACzF,UAAU,CAAK,IAAA,IAAA,CAAK,YAAa,CAAA,CAAA,GAAK,KAAK,KAAQ,GAAA,CAAA,EAAA;EAC5D,QAAA,SAAA,CAAU,CAAI,GAAA,CAAA,CAAA,CAAA;EACd,QAAA,KAAA,CAAM,CAAI,GAAA,YAAA,CAAa,CAAI,GAAA,IAAA,CAAK,GAAK,CAAA,CAAA,SAAA,CAAU,CAAI,GAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,GAAI,IAAK,CAAA,YAAA,CAAa,KAAM,IAAK,CAAA,KAAA,CAAA,CAAA;EAAA,OAAA;EAGnG,MAAA,IAAI,IAAK,CAAA,kBAAA,EAAA;EACP,QAAA,aAAA,CAAc,IAAK,CAAA,kBAAA,CAAA,CAAA;EACnB,QAAA,IAAA,CAAK,kBAAqB,GAAA,IAAA,CAAA;EAAA,OAAA;EAG5B,MAAA,IAAI,SAAU,CAAA,CAAA,KAAM,CAAK,IAAA,SAAA,CAAU,CAAM,KAAA,CAAA,EAAA;EACvC,QAAK,IAAA,CAAA,kBAAA,GAAqB,OAAO,WAAY,CAAA,MAAA;EAC3C,UAAA,MAAM,MAAS,GAAA;EAAA,YACb,IAAM,EAAA,CAAA,GAAI,KAAM,CAAA,CAAA,GAAI,SAAU,CAAA,CAAA;EAAA,YAC9B,GAAK,EAAA,CAAA,GAAI,KAAM,CAAA,CAAA,GAAI,SAAU,CAAA,CAAA;EAAA,WAAA,CAAA;EAG/B,UAAA,IAAI,IAAK,CAAA,0BAAA,EAAA;EACP,YAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAS,MAAO,CAAA,IAAA,EAAM,MAAO,CAAA,GAAA,CAAA,CAAA;EAAA,WAAA,MAAA;EAE1C,YAAK,IAAA,CAAA,eAAA,CAAgB,aAAa,MAAO,CAAA,GAAA,CAAA;EACzC,YAAK,IAAA,CAAA,eAAA,CAAgB,cAAc,MAAO,CAAA,IAAA,CAAA;EAAA,WAAA;EAG5C,UAAK,IAAA,CAAA,SAAA,CAAU,KAAK,MAAO,CAAA,IAAA,CAAA;EAC3B,UAAK,IAAA,CAAA,SAAA,CAAU,KAAK,MAAO,CAAA,GAAA,CAAA;EAC3B,UAAK,IAAA,CAAA,YAAA,EAAA,CAAA;EAAA,SACJ,EAAA,CAAA,CAAA,CAAA;EAAA,OAAA;EAAA,KAAA;EAAA,GAAA;EAAA,CAAA;;ACh/BJ,QAAM,eAA6B,GAAA;EAAA,EACxC,WAAY,CAAA,EAAA,EAAA;EACV,IAAA,EAAA,CAAG,cAAiB,GAAA,IAAA,CAAA;EAAA,GAAA;EAAA;;ACFjB,QAAM,YAAYA,mBAAgB,CAAA;EAAA,EACvC,IAAM,EAAA,WAAA;EAAA,EACN,QAAQ,CAAC,YAAA,CAAA;EAAA,EACT,KAAO,EAAA;EAAA,IACL,GAAK,EAAA;EAAA,MACH,IAAM,EAAA,MAAA;EAAA,MACN,OAAS,EAAA,KAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAGb,MAAA,GAAA;EAZF,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;EAaI,IAAA,OAAOC,KAAE,CAAA,IAAA,CAAK,GAAK,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAO,OAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAAA;EAAA,GAAA;EAAA,CAAA;;ACRhB,QAAM,YAAYD,mBAAgB,CAAA;EAAA,EACvC,IAAM,EAAA,WAAA;EAAA,EACN,QAAQ,CAAC,cAAA,CAAA;EAAA,EACT,KAAO,EAAA;EAAA,IACL,GAAK,EAAA;EAAA,MACH,IAAM,EAAA,MAAA;EAAA,MACN,OAAS,EAAA,KAAA;EAAA,KAAA;EAAA,IAEX,OAAS,EAAA;EAAA,MACP,IAAA,EAAM,CAAC,MAAQ,EAAA,QAAA,CAAA;EAAA,MACf,OAAS,EAAA,IAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAGb,MAAA,GAAA;EAlBF,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;EAmBI,IAAA,IAAI,KAAK,MAAO,CAAA,IAAA,EAAA;EACd,MAAA,OAAOC,MACL,IAAK,CAAA,GAAA,EACL,KAAK,IAAK,CAAA,GAAA,CAAI,CAAC,IAAM,EAAA,KAAA,KAAA;EACnB,QAAI,IAAA,GAAA,CAAA;EACJ,QAAA,IAAI,IAAQ,IAAA,IAAA,EAAA;EACV,UAAA,OAAA;EAAA,SACS,MAAA,IAAA,OAAO,KAAK,OAAY,KAAA,UAAA,EAAA;EACjC,UAAA,GAAA,GAAM,KAAK,OAAQ,CAAA,IAAA,CAAA,CAAA;EAAA,SAEnB,MAAA,IAAA,OAAO,IAAS,KAAA,QAAA,IAChB,cAAe,CAAA,IAAA,EAAM,KAAK,OAC1B,CAAA,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,OAAY,CAAA,IAAA,QAAA,EAAA;EAE7B,UAAA,GAAA,GAAM,KAAK,IAAK,CAAA,OAAA,CAAA,CAAA;EAAA,SAAA,MAAA,IACP,OAAO,IAAS,KAAA,QAAA,EAAA;EACzB,UAAM,GAAA,GAAA,IAAA,CAAA;EAAA,SAAA,MAAA;EAEN,UAAA,MAAM,IAAI,KAAM,CAAA,+EAAA,CAAA,CAAA;EAAA,SAAA;EAElB,QAAA,OAAOA,MACL,SACA,EAAA;EAAA,UACE,GAAA;EAAA,UACA,KAAA;EAAA,SAEF,EAAA;EAAA,UACE,OAAS,EAAA,MAAA;EA9CvB,YAAA,IAAA,GAAA,EAAA,GAAA,CAAA;EA8C6B,YAAA,OAAA,CAAA,GAAA,GAAA,CAAA,GAAA,GAAA,IAAA,CAAK,MAAO,EAAA,IAAA,KAAZ,IAAmB,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,IAAA,CAAA,GAAA,EAAA,CAAE,IAAM,EAAA,KAAA,CAAA,CAAA,CAAA;EAAA,WAAA;EAAA,SAAA,CAAA,CAAA;EAAA,OAAA,CAAA,CAAA,CAAA;EAAA,KAAA;EAMpD,IAAA,OAAOA,KAAE,CAAA,IAAA,CAAK,GAAK,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAO,OAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAAA;EAAA,GAAA;EAAA,CAAA;;AClDhB,QAAM,aAAaD,mBAAgB,CAAA;EAAA,EACxC,KAAO,EAAA;EAAA,IACL,GAAK,EAAA;EAAA,MACH,IAAM,EAAA,MAAA;EAAA,MACN,OAAS,EAAA,MAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAGb,OAAA,GAAA;EACE,IAAA,IAAA,CAAK,IAAI,cAAiB,GAAA,IAAA,CAAA;EAAA,GAAA;EAAA,EAE5B,MAAA,GAAA;EAZF,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;EAaI,IAAA,OAAOC,KAAE,CAAA,IAAA,CAAK,GAAK,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAO,OAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAAA;EAAA,GAAA;EAAA,CAAA;;ECVvB,IAAI,kBAAqB,GAAA,CAAA,CAAA;EAkCzB,SAAA,gBAAA,CAA0B,MAAoB,MAAsB,EAAA,OAAA,EAAA;EAClE,EAAI,IAAA,MAAA,CAAO,OAAO,IAAK,CAAA,EAAA;EAAI,IAAO,OAAA,IAAA,CAAA;EAClC,EAAA,IAAI,IAAK,CAAA,KAAA,IAAS,IAAK,CAAA,KAAA,CAAM,SAAS,MAAO,CAAA,KAAA,CAAA;EAAQ,IAAO,OAAA,KAAA,CAAA;EAC5D,EAAI,IAAA,OAAO,KAAK,MAAW,KAAA,UAAA,EAAA;EACzB,IAAA,OAAO,IAAK,CAAA,MAAA,CAAO,CAAE,IAAA,EAAM,MAAQ,EAAA,OAAA,CAAA,CAAA,CAAA;EAAA,GAAA;EAErC,EAAI,IAAA,OAAO,KAAK,MAAW,KAAA,SAAA,EAAA;EACzB,IAAA,OAAO,IAAK,CAAA,MAAA,CAAA;EAAA,GAAA;EAEd,EAAA,IAAI,IAAK,CAAA,MAAA,IAAU,IAAK,CAAA,MAAA,CAAO,SAAS,MAAO,CAAA,KAAA,CAAA;EAAQ,IAAO,OAAA,IAAA,CAAA;EAC9D,EAAI,IAAA,IAAA,CAAK,UAAU,MAAO,CAAA,KAAA;EAAO,IAAO,OAAA,IAAA,CAAA;EACxC,EAAO,OAAA,KAAA,CAAA;EAAA,CAAA;EAGT,SACE,eAAA,CAAA,CAAE,CAAG,EAAA,CAAA,CAAA,EACL,IACA,EAAA,WAAA,EAAA;EAGA,EAAA,IAAI,iBAAkB,CAAA,CAAE,CAAG,EAAA,CAAA,CAAA,EAAK,YAAY,SAAU,CAAA,qBAAA,EAAA,CAAA,EAAA;EACpD,IAAO,OAAA,WAAA,CAAA;EAAA,GAAA;EAGT,EAAA,IAAI,OAAU,GAAA,IAAA,CAAA;EACd,EAAA,IAAI,WAAc,GAAA,QAAA,CAAA;EAClB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,MAAQ,EAAA,CAAA,EAAA,EAAA;EAC/B,IAAA,MAAM,MAAM,IAAK,CAAA,CAAA,CAAA,CAAA;EACjB,IAAM,MAAA,IAAA,GAAO,IAAI,SAAU,CAAA,qBAAA,EAAA,CAAA;EAC3B,IAAA,MAAM,QAAW,GAAA,iBAAA,CAAkB,CAAE,CAAA,EAAG,CAAK,CAAA,EAAA,IAAA,CAAA,CAAA;EAE7C,IAAI,IAAA,QAAA,EAAA;EAEF,MAAO,OAAA,GAAA,CAAA;EAAA,KAAA;EAGT,IAAA,MAAM,SAAS,aAAc,CAAA,IAAA,CAAA,CAAA;EAC7B,IAAA,MAAM,WAAW,WAAY,CAAA,CAAA,EAAG,CAAG,EAAA,MAAA,CAAO,GAAG,MAAO,CAAA,CAAA,CAAA,CAAA;EACpD,IAAA,IAAI,QAAW,GAAA,WAAA,EAAA;EACb,MAAU,OAAA,GAAA,GAAA,CAAA;EACV,MAAc,WAAA,GAAA,QAAA,CAAA;EAAA,KAAA;EAAA,GAAA;EAKlB,EAAO,OAAA,OAAA,CAAA;EAAA,CAAA;EAlFT,MAAA,YAAA,CAAA;EAAA,EAAA,WAAA,GAAA;EAsFS,IAA6B,IAAA,CAAA,MAAA,GAAA,IAAA,CAAA;EAC7B,IAA4B,IAAA,CAAA,KAAA,GAAA,IAAA,CAAA;EAE3B,IAAuB,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA;EACvB,IAA8B,IAAA,CAAA,MAAA,GAAA,IAAA,CAAA;EAC9B,IAA4B,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;EAAA,GAAA;EAAA,EAEpC,KAAA,GAAA;EACE,IAAA,OAAO,EAAK,GAAA,kBAAA,EAAA,CAAA;EAAA,GAAA;EAAA,EAGd,SAAS,CAAE,EAAA,CAAA,EAAA;EAjGb,IAAA,IAAA,EAAA,CAAA;EAkGI,IAAO,OAAA,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,EAAO,MAAA,EAAA,CAAA;EAAA,GAAA;EAAA,EAG7B,SAAA,GAAA;EACE,IAAA,OAAO,IAAK,CAAA,MAAA,CAAA;EAAA,GAAA;EAAA,EAGd,OAAO,CAAE,EAAA,CAAA,EAAA;EAzGX,IAAA,IAAA,EAAA,CAAA;EA0GI,IAAO,OAAA,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,IAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,EAAO,MAAA,EAAA,CAAA;EAAA,GAAA;EAAA,EAG3B,OAAA,GAAA;EACE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAA;EAAA,GAAA;EAAA,EAGd,YAAa,CAAA,GAAA,EAAA;EACX,IAAA,IAAA,CAAK,KAAK,IAAK,CAAA,GAAA,CAAA,CAAA;EAAA,GAAA;EAAA,EAGjB,eAAgB,CAAA,GAAA,EAAA;EACd,IAAK,IAAA,CAAA,IAAA,GAAO,KAAK,IAAK,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,GAAI,CAAA,EAAA,CAAA,CAAA;EAAA,GAAA;EAAA,EAGnD,SAAU,CAAA,GAAA,EAAA;EACR,IAAA,IAAA,CAAK,MAAS,GAAA,GAAA,CAAA;EACd,IAAA,IAAA,CAAK,IAAO,GAAA,GAAA,CAAA;EAAA,GAAA;EAAA,EAGd,eAAe,CAAe,EAAA,OAAA,EAAA;EA9HhC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;EA+HI,IAAA,MAAM,OAAO,IAAK,CAAA,IAAA,CAAA;EAClB,IAAA,MAAM,SAAS,IAAK,CAAA,MAAA,CAAA;EAEpB,IAAI,IAAA,CAAC,QAAQ,CAAC,MAAA;EAAQ,MAAA,OAAA;EAEtB,IAAA,MAAM,OAAO,IAAK,CAAA,IAAA,CAAA;EAClB,IAAM,MAAA,OAAA,GAAU,iBAAiB,CAAG,EAAA,QAAA,CAAA,CAAA;EACpC,IAAA,MAAM,OAAU,GAAA,eAAA,CAAgB,OAAS,EAAA,IAAA,EAAM,IAAS,CAAA,IAAA,IAAA,CAAA;EAExD,IAAA,IAAI,KAAK,EAAO,KAAA,OAAA,CAAQ,EAAM,IAAA,gBAAA,CAAiB,SAAS,MAAQ,EAAA,OAAA,CAAA,EAAA;EAC9D,MAAA,IAAA,CAAK,IAAO,GAAA,OAAA,CAAA;EACZ,MAAK,IAAA,CAAA,aAAA,EAAA,CAAA;EACL,MAAA,OAAA,CAAQ,YAAa,CAAA,CAAA,EAAG,IAAK,CAAA,KAAA,EAAO,IAAK,CAAA,MAAA,CAAA,CAAA;EAAA,KAAA;EAE3C,IAAA,IAAI,IAAK,CAAA,EAAA,MAAY,CAAA,EAAA,GAAA,IAAA,CAAA,MAAA,KAAL,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAA,CAAA,EAAA;EAC3B,MAAK,CAAA,EAAA,GAAA,IAAA,CAAA,IAAA,KAAL,mBAAW,cAAe,CAAA,CAAA,CAAA,CAAA;EAC1B,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA,EAAA,CAAA;EACX,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,EAAA,CAAA;EAAA,KAAA;EAAA,GAAA;EAAA,EAIf,aAAA,GAAA;EApJF,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;EAqJI,IAAA,IAAI,YAAK,MAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,EAAO,OAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAA,CAAA;EAAI,MAAA,OAAA;EACvC,IAAM,MAAA,OAAA,GAAU,CAAK,EAAA,GAAA,IAAA,CAAA,MAAA,KAAL,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAA,EAAA,CAAA;EAC7B,IAAK,CAAA,EAAA,GAAA,IAAA,CAAA,IAAA,KAAL,mBAAW,YAAa,CAAA,OAAA,CAAA,CAAA;EACxB,IAAK,IAAA,CAAA,KAAA,EAAA,CAAA;EAAA,GAAA;EAAA,EAGP,KAAA,GAAA;EACE,IAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;EACd,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;EACZ,IAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;EACd,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAA;EAAA,GAAA;EAAA,EAGf,MAAA,GAAA;EAlKF,IAAA,IAAA,EAAA,CAAA;EAmKI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAA,EAAA,CAAA;EACX,IAAK,IAAA,CAAA,KAAA,EAAA,CAAA;EAAA,GAAA;EAAA;;AChKT,QAAM,MAAiB,GAAA;EAAA,EACrB,OAAQ,CAAA,GAAA,EAAA;EACN,IAAA,GAAA,CAAI,UAAU,aAAe,EAAA,eAAA,CAAA,CAAA;EAC7B,IAAI,GAAA,CAAA,OAAA,CAAQ,gBAAgB,IAAI,YAAA,EAAA,CAAA,CAAA;EAAA,GAAA;EAAA;;;;;;;;;;;;;;;;;"}
|