=Math.round(s/2);){let _=i,N=c;if(i=a,c=d,i.isZero())throw O.getChecksumInstance();a=_;let P=this.field.getZero(),$=i.getCoefficient(i.getDegree()),j=this.field.inverse($);for(;a.getDegree()>=i.getDegree()&&!a.isZero();){let Q=a.getDegree()-i.getDegree(),fe=this.field.multiply(a.getCoefficient(a.getDegree()),j);P=P.add(this.field.buildMonomial(Q,fe)),a=a.subtract(i.multiplyByMonomial(Q,fe))}d=P.multiply(c).subtract(N).negative()}let h=d.getCoefficient(0);if(h===0)throw O.getChecksumInstance();let m=this.field.inverse(h),y=d.multiply(m),b=a.multiply(m);return[y,b]}findErrorLocations(e){let n=e.getDegree(),s=new Int32Array(n),i=0;for(let a=1;a0){let h=s?this.topLeft:this.topRight,m=Math.trunc(h.getY()-e);m<0&&(m=0);let y=new M(h.getX(),m);s?i=y:c=y}if(n>0){let h=s?this.bottomLeft:this.bottomRight,m=Math.trunc(h.getY()+n);m>=this.image.getHeight()&&(m=this.image.getHeight()-1);let y=new M(h.getX(),m);s?a=y:d=y}return new Wr(this.image,i,a,c,d)}getMinX(){return this.minX}getMaxX(){return this.maxX}getMinY(){return this.minY}getMaxY(){return this.maxY}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}getBottomLeft(){return this.bottomLeft}getBottomRight(){return this.bottomRight}}class G1{constructor(e,n,s,i){this.columnCount=e,this.errorCorrectionLevel=i,this.rowCountUpperPart=n,this.rowCountLowerPart=s,this.rowCount=n+s}getColumnCount(){return this.columnCount}getErrorCorrectionLevel(){return this.errorCorrectionLevel}getRowCount(){return this.rowCount}getRowCountUpperPart(){return this.rowCountUpperPart}getRowCountLowerPart(){return this.rowCountLowerPart}}class Ns{constructor(){this.buffer=""}static form(e,n){let s=-1;function i(c,d,h,m,y,b){if(c==="%%")return"%";if(n[++s]===void 0)return;c=m?parseInt(m.substr(1)):void 0;let _=y?parseInt(y.substr(1)):void 0,N;switch(b){case"s":N=n[s];break;case"c":N=n[s][0];break;case"f":N=parseFloat(n[s]).toFixed(c);break;case"p":N=parseFloat(n[s]).toPrecision(c);break;case"e":N=parseFloat(n[s]).toExponential(c);break;case"x":N=parseInt(n[s]).toString(_||16);break;case"d":N=parseFloat(parseInt(n[s],_||10).toPrecision(c)).toFixed(0);break}N=typeof N=="object"?JSON.stringify(N):(+N).toString(_);let P=parseInt(h),$=h&&h[0]+""=="0"?"0":" ";for(;N.length=0&&(n=this.codewords[i],n!=null)||(i=this.imageRowToCodewordIndex(e)+s,is,getValue:()=>i};a.getValue()>e?(e=a.getValue(),n=[],n.push(a.getKey())):a.getValue()===e&&n.push(a.getKey())}return Pe.toIntArray(n)}getConfidence(e){return this.values.get(e)}}class pc extends Rs{constructor(e,n){super(e),this._isLeft=n}setRowNumbers(){for(let e of this.getCodewords())e!=null&&e.setRowNumberAsRowIndicatorColumn()}adjustCompleteIndicatorColumnRowNumbers(e){let n=this.getCodewords();this.setRowNumbers(),this.removeIncorrectCodewords(n,e);let s=this.getBoundingBox(),i=this._isLeft?s.getTopLeft():s.getTopRight(),a=this._isLeft?s.getBottomLeft():s.getBottomRight(),c=this.imageRowToCodewordIndex(Math.trunc(i.getY())),d=this.imageRowToCodewordIndex(Math.trunc(a.getY())),h=-1,m=1,y=0;for(let b=c;b=e.getRowCount()||N>b)n[b]=null;else{let P;m>2?P=(m-2)*N:P=N;let $=P>=b;for(let j=1;j<=P&&!$;j++)$=n[b-j]!=null;$?n[b]=null:(h=_.getRowNumber(),y=1)}}}getRowHeights(){let e=this.getBarcodeMetadata();if(e==null)return null;this.adjustIncompleteIndicatorColumnRowNumbers(e);let n=new Int32Array(e.getRowCount());for(let s of this.getCodewords())if(s!=null){let i=s.getRowNumber();if(i>=n.length)continue;n[i]++}return n}adjustIncompleteIndicatorColumnRowNumbers(e){let n=this.getBoundingBox(),s=this._isLeft?n.getTopLeft():n.getTopRight(),i=this._isLeft?n.getBottomLeft():n.getBottomRight(),a=this.imageRowToCodewordIndex(Math.trunc(s.getY())),c=this.imageRowToCodewordIndex(Math.trunc(i.getY())),d=this.getCodewords(),h=-1;for(let m=a;m=e.getRowCount()?d[m]=null:h=y.getRowNumber())}}getBarcodeMetadata(){let e=this.getCodewords(),n=new Os,s=new Os,i=new Os,a=new Os;for(let d of e){if(d==null)continue;d.setRowNumberAsRowIndicatorColumn();let h=d.getValue()%30,m=d.getRowNumber();switch(this._isLeft||(m+=2),m%3){case 0:s.setValue(h*3+1);break;case 1:a.setValue(h/3),i.setValue(h%3);break;case 2:n.setValue(h+1);break}}if(n.getValue().length===0||s.getValue().length===0||i.getValue().length===0||a.getValue().length===0||n.getValue()[0]<1||s.getValue()[0]+i.getValue()[0]Pe.MAX_ROWS_IN_BARCODE)return null;let c=new G1(n.getValue()[0],s.getValue()[0],i.getValue()[0],a.getValue()[0]);return this.removeIncorrectCodewords(e,c),c}removeIncorrectCodewords(e,n){for(let s=0;sn.getRowCount()){e[s]=null;continue}switch(this._isLeft||(c+=2),c%3){case 0:a*3+1!==n.getRowCountUpperPart()&&(e[s]=null);break;case 1:(Math.trunc(a/3)!==n.getErrorCorrectionLevel()||a%3!==n.getRowCountLowerPart())&&(e[s]=null);break;case 2:a+1!==n.getColumnCount()&&(e[s]=null);break}}}isLeft(){return this._isLeft}toString(){return"IsLeft: "+this._isLeft+`
+`+super.toString()}}class Ds{constructor(e,n){this.ADJUST_ROW_NUMBER_SKIP=2,this.barcodeMetadata=e,this.barcodeColumnCount=e.getColumnCount(),this.boundingBox=n,this.detectionResultColumns=new Array(this.barcodeColumnCount+2)}getDetectionResultColumns(){this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]),this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount+1]);let e=Pe.MAX_CODEWORDS_IN_BARCODE,n;do n=e,e=this.adjustRowNumbersAndGetCount();while(e>0&&e0&&a0&&(d[0]=s[n-1],d[4]=a[n-1],d[5]=c[n-1]),n>1&&(d[8]=s[n-2],d[10]=a[n-2],d[11]=c[n-2]),n>=1;s=n&1,hn.RATIOS_TABLE[e]||(hn.RATIOS_TABLE[e]=new Array(Pe.BARS_IN_MODULE)),hn.RATIOS_TABLE[e][Pe.BARS_IN_MODULE-i-1]=Math.fround(a/Pe.MODULES_IN_CODEWORD)}}this.bSymbolTableReady=!0}static getDecodedValue(e){let n=hn.getDecodedCodewordValue(hn.sampleBitCounts(e));return n!==-1?n:hn.getClosestDecodedValue(e)}static sampleBitCounts(e){let n=T.sum(e),s=new Int32Array(Pe.BARS_IN_MODULE),i=0,a=0;for(let c=0;c1)for(let c=0;c=i)break}dnew Array(Pe.BARS_IN_MODULE));class xc{constructor(){this.segmentCount=-1,this.fileSize=-1,this.timestamp=-1,this.checksum=-1}getSegmentIndex(){return this.segmentIndex}setSegmentIndex(e){this.segmentIndex=e}getFileId(){return this.fileId}setFileId(e){this.fileId=e}getOptionalData(){return this.optionalData}setOptionalData(e){this.optionalData=e}isLastSegment(){return this.lastSegment}setLastSegment(e){this.lastSegment=e}getSegmentCount(){return this.segmentCount}setSegmentCount(e){this.segmentCount=e}getSender(){return this.sender||null}setSender(e){this.sender=e}getAddressee(){return this.addressee||null}setAddressee(e){this.addressee=e}getFileName(){return this.fileName}setFileName(e){this.fileName=e}getFileSize(){return this.fileSize}setFileSize(e){this.fileSize=e}getChecksum(){return this.checksum}setChecksum(e){this.checksum=e}getTimestamp(){return this.timestamp}setTimestamp(e){this.timestamp=e}}class wc{static parseLong(e,n=void 0){return parseInt(e,n)}}class yc extends x{}yc.kind="NullPointerException";class j1{writeBytes(e){this.writeBytesOffset(e,0,e.length)}writeBytesOffset(e,n,s){if(e==null)throw new yc;if(n<0||n>e.length||s<0||n+s>e.length||n+s<0)throw new te;if(s===0)return;for(let i=0;i0&&this.grow(e)}grow(e){let s=this.buf.length<<1;if(s-e<0&&(s=e),s<0){if(e<0)throw new X1;s=V.MAX_VALUE}this.buf=W.copyOfUint8Array(this.buf,s)}write(e){this.ensureCapacity(this.count+1),this.buf[this.count]=e,this.count+=1}writeBytesOffset(e,n,s){if(n<0||n>e.length||s<0||n+s-e.length>0)throw new te;this.ensureCapacity(this.count+s),U.arraycopy(e,n,this.buf,this.count,s),this.count+=s}writeTo(e){e.writeBytesOffset(this.buf,0,this.count)}reset(){this.count=0}toByteArray(){return W.copyOfUint8Array(this.buf,this.count)}size(){return this.count}toString(e){return e?typeof e=="string"?this.toString_string(e):this.toString_number(e):this.toString_void()}toString_void(){return new String(this.buf).toString()}toString_string(e){return new String(this.buf).toString()}toString_number(e){return new String(this.buf).toString()}close(){}}var ft;(function(E){E[E.ALPHA=0]="ALPHA",E[E.LOWER=1]="LOWER",E[E.MIXED=2]="MIXED",E[E.PUNCT=3]="PUNCT",E[E.ALPHA_SHIFT=4]="ALPHA_SHIFT",E[E.PUNCT_SHIFT=5]="PUNCT_SHIFT"})(ft||(ft={}));function Cc(){if(typeof window<"u")return window.BigInt||null;if(typeof Bo<"u")return Bo.BigInt||null;if(typeof self<"u")return self.BigInt||null;throw new Error("Can't search globals for BigInt!")}let To;function Ar(E){if(typeof To>"u"&&(To=Cc()),To===null)throw new Error("BigInt is not supported!");return To(E)}function K1(){let E=[];E[0]=Ar(1);let e=Ar(900);E[1]=e;for(let n=2;n<16;n++)E[n]=E[n-1]*e;return E}class q{static decode(e,n){let s=new Se(""),i=K.ISO8859_1;s.enableDecoding(i);let a=1,c=e[a++],d=new xc;for(;ae[0])throw k.getFormatInstance();let i=new Int32Array(q.NUMBER_OF_SEQUENCE_CODEWORDS);for(let d=0;d0){for(let _=0;_<6;++_)c.write(Number(Ar(h)>>Ar(8*(5-_))));h=0,d=0}break}i===n[0]&&b0){for(let N=0;N<6;++N)c.write(Number(Ar(h)>>Ar(8*(5-N))));h=0,d=0}}break}return a.append(ke.decode(c.toByteArray(),s)),i}static numericCompaction(e,n,s){let i=0,a=!1,c=new Int32Array(q.MAX_NUMERIC_CODEWORDS);for(;n0&&(s.append(q.decodeBase900toBase10(c,i)),i=0)}return n}static decodeBase900toBase10(e,n){let s=Ar(0);for(let a=0;a@[\\]_\`~!\r ,:
+-.$/"|*()?{}'`,q.MIXED_CHARS="0123456789&\r ,:#-.$/+%*=^",q.EXP900=Cc()?K1():[],q.NUMBER_OF_SEQUENCE_CODEWORDS=2;class He{constructor(){}static decode(e,n,s,i,a,c,d){let h=new Wr(e,n,s,i,a),m=null,y=null,b;for(let P=!0;;P=!1){if(n!=null&&(m=He.getRowIndicatorColumn(e,h,n,!0,c,d)),i!=null&&(y=He.getRowIndicatorColumn(e,h,i,!1,c,d)),b=He.merge(m,y),b==null)throw Z.getNotFoundInstance();let $=b.getBoundingBox();if(P&&$!=null&&($.getMinY()h.getMaxY()))h=$;else break}b.setBoundingBox(h);let _=b.getBarcodeColumnCount()+1;b.setDetectionResultColumn(0,m),b.setDetectionResultColumn(_,y);let N=m!=null;for(let P=1;P<=_;P++){let $=N?P:_-P;if(b.getDetectionResultColumn($)!==void 0)continue;let j;$===0||$===_?j=new pc(h,$===0):j=new Rs(h),b.setDetectionResultColumn($,j);let Q=-1,fe=Q;for(let ge=h.getMinY();ge<=h.getMaxY();ge++){if(Q=He.getStartColumn(b,$,ge,N),Q<0||Q>h.getMaxX()){if(fe===-1)continue;Q=fe}let ue=He.detectCodeword(e,h.getMinX(),h.getMaxX(),N,Q,ge,c,d);ue!=null&&(j.setCodeword(ge,ue),fe=Q,c=Math.min(c,ue.getWidth()),d=Math.max(d,ue.getWidth()))}}return He.createDecoderResult(b)}static merge(e,n){if(e==null&&n==null)return null;let s=He.getBarcodeMetadata(e,n);if(s==null)return null;let i=Wr.merge(He.adjustBoundingBox(e),He.adjustBoundingBox(n));return new Ds(s,i)}static adjustBoundingBox(e){if(e==null)return null;let n=e.getRowHeights();if(n==null)return null;let s=He.getMax(n),i=0;for(let d of n)if(i+=s-d,d>0)break;let a=e.getCodewords();for(let d=0;i>0&&a[d]==null;d++)i--;let c=0;for(let d=n.length-1;d>=0&&(c+=s-n[d],!(n[d]>0));d--);for(let d=a.length-1;c>0&&a[d]==null;d--)c--;return e.getBoundingBox().addMissingRows(i,c,e.isLeft())}static getMax(e){let n=-1;for(let s of e)n=Math.max(n,s);return n}static getBarcodeMetadata(e,n){let s;if(e==null||(s=e.getBarcodeMetadata())==null)return n==null?null:n.getBarcodeMetadata();let i;return n==null||(i=n.getBarcodeMetadata())==null?s:s.getColumnCount()!==i.getColumnCount()&&s.getErrorCorrectionLevel()!==i.getErrorCorrectionLevel()&&s.getRowCount()!==i.getRowCount()?null:s}static getRowIndicatorColumn(e,n,s,i,a,c){let d=new pc(n,i);for(let h=0;h<2;h++){let m=h===0?1:-1,y=Math.trunc(Math.trunc(s.getX()));for(let b=Math.trunc(Math.trunc(s.getY()));b<=n.getMaxY()&&b>=n.getMinY();b+=m){let _=He.detectCodeword(e,0,e.getWidth(),i,y,b,a,c);_!=null&&(d.setCodeword(b,_),i?y=_.getStartX():y=_.getEndX())}}return d}static adjustCodewordCount(e,n){let s=n[0][1],i=s.getValue(),a=e.getBarcodeColumnCount()*e.getBarcodeRowCount()-He.getNumberOfECCodeWords(e.getBarcodeECLevel());if(i.length===0){if(a<1||a>Pe.MAX_CODEWORDS_IN_BARCODE)throw Z.getNotFoundInstance();s.setValue(a)}else i[0]!==a&&s.setValue(a)}static createDecoderResult(e){let n=He.createBarcodeMatrix(e);He.adjustCodewordCount(e,n);let s=new Array,i=new Int32Array(e.getBarcodeRowCount()*e.getBarcodeColumnCount()),a=[],c=new Array;for(let h=0;h0;){for(let h=0;hnew Array(e.getBarcodeColumnCount()+2));for(let i=0;i=0){if(c>=n.length)continue;n[c][s].setValue(a.getValue())}}}s++}return n}static isValidBarcodeColumn(e,n){return n>=0&&n<=e.getBarcodeColumnCount()+1}static getStartColumn(e,n,s,i){let a=i?1:-1,c=null;if(He.isValidBarcodeColumn(e,n-a)&&(c=e.getDetectionResultColumn(n-a).getCodeword(s)),c!=null)return i?c.getEndX():c.getStartX();if(c=e.getDetectionResultColumn(n).getCodewordNearby(s),c!=null)return i?c.getStartX():c.getEndX();if(He.isValidBarcodeColumn(e,n-a)&&(c=e.getDetectionResultColumn(n-a).getCodewordNearby(s)),c!=null)return i?c.getEndX():c.getStartX();let d=0;for(;He.isValidBarcodeColumn(e,n-a);){n-=a;for(let h of e.getDetectionResultColumn(n).getCodewords())if(h!=null)return(i?h.getEndX():h.getStartX())+a*d*(h.getEndX()-h.getStartX());d++}return i?e.getBoundingBox().getMinX():e.getBoundingBox().getMaxX()}static detectCodeword(e,n,s,i,a,c,d,h){a=He.adjustCodewordStartColumn(e,n,s,i,a,c);let m=He.getModuleBitCount(e,n,s,i,a,c);if(m==null)return null;let y,b=T.sum(m);if(i)y=a+b;else{for(let P=0;P=n)&&m=n:dHe.CODEWORD_SKEW_SIZE)return a;d+=h}h=-h,i=!i}return d}static checkCodewordSkew(e,n,s){return n-He.CODEWORD_SKEW_SIZE<=e&&e<=s+He.CODEWORD_SKEW_SIZE}static decodeCodewords(e,n,s){if(e.length===0)throw k.getFormatInstance();let i=1<s/2+He.MAX_ERRORS||s<0||s>He.MAX_EC_CODEWORDS)throw O.getChecksumInstance();return He.errorCorrection.decode(e,s,n)}static verifyCodewordCount(e,n){if(e.length<4)throw k.getFormatInstance();let s=e[0];if(s>e.length)throw k.getFormatInstance();if(s===0)if(n>=1;return n}static getCodewordBucketNumber(e){return e instanceof Int32Array?this.getCodewordBucketNumber_Int32Array(e):this.getCodewordBucketNumber_number(e)}static getCodewordBucketNumber_number(e){return He.getCodewordBucketNumber(He.getBitCountForCodeword(e))}static getCodewordBucketNumber_Int32Array(e){return(e[0]-e[2]+e[4]-e[6]+9)%9}static toString(e){let n=new Ns;for(let s=0;sc)}static getMaxWidth(e,n){return e==null||n==null?0:Math.trunc(Math.abs(e.getX()-n.getX()))}static getMinWidth(e,n){return e==null||n==null?V.MAX_VALUE:Math.trunc(Math.abs(e.getX()-n.getX()))}static getMaxCodewordWidth(e){return Math.floor(Math.max(Math.max(zt.getMaxWidth(e[0],e[4]),zt.getMaxWidth(e[6],e[2])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN),Math.max(zt.getMaxWidth(e[1],e[5]),zt.getMaxWidth(e[7],e[3])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN)))}static getMinCodewordWidth(e){return Math.floor(Math.min(Math.min(zt.getMinWidth(e[0],e[4]),zt.getMinWidth(e[6],e[2])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN),Math.min(zt.getMinWidth(e[1],e[5]),zt.getMinWidth(e[7],e[3])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN)))}reset(){}}class vo extends x{}vo.kind="ReaderException";class Ec{constructor(e,n){this.verbose=e===!0,n&&this.setHints(n)}decode(e,n){return n&&this.setHints(n),this.decodeInternal(e)}decodeWithState(e){return(this.readers===null||this.readers===void 0)&&this.setHints(null),this.decodeInternal(e)}setHints(e){this.hints=e;const n=!l(e)&&e.get(se.TRY_HARDER)===!0,s=l(e)?null:e.get(se.POSSIBLE_FORMATS),i=new Array;if(!l(s)){const a=s.some(c=>c===Ee.UPC_A||c===Ee.UPC_E||c===Ee.EAN_13||c===Ee.EAN_8||c===Ee.CODABAR||c===Ee.CODE_39||c===Ee.CODE_93||c===Ee.CODE_128||c===Ee.ITF||c===Ee.RSS_14||c===Ee.RSS_EXPANDED);a&&!n&&i.push(new ns(e,this.verbose)),s.includes(Ee.QR_CODE)&&i.push(new Er),s.includes(Ee.DATA_MATRIX)&&i.push(new Cr),s.includes(Ee.AZTEC)&&i.push(new Yt),s.includes(Ee.PDF_417)&&i.push(new zt),a&&n&&i.push(new ns(e,this.verbose))}i.length===0&&(n||i.push(new ns(e,this.verbose)),i.push(new Er),i.push(new Cr),i.push(new Yt),i.push(new zt),n&&i.push(new ns(e,this.verbose))),this.readers=i}reset(){if(this.readers!==null)for(const e of this.readers)e.reset()}decodeInternal(e){if(this.readers===null)throw new vo("No readers where selected, nothing can be read.");for(const n of this.readers)try{return n.decode(e,this.hints)}catch(s){if(s instanceof vo)continue}throw new Z("No MultiFormat Readers were able to detect the code.")}}class z1 extends Gt{constructor(e=null,n=500){const s=new Ec;s.setHints(e),super(s,n)}decodeBitmap(e){return this.reader.decodeWithState(e)}}class q1 extends Gt{constructor(e=500){super(new zt,e)}}class Q1 extends Gt{constructor(e=500){super(new Er,e)}}var Pi;(function(E){E[E.ERROR_CORRECTION=0]="ERROR_CORRECTION",E[E.CHARACTER_SET=1]="CHARACTER_SET",E[E.DATA_MATRIX_SHAPE=2]="DATA_MATRIX_SHAPE",E[E.MIN_SIZE=3]="MIN_SIZE",E[E.MAX_SIZE=4]="MAX_SIZE",E[E.MARGIN=5]="MARGIN",E[E.PDF417_COMPACT=6]="PDF417_COMPACT",E[E.PDF417_COMPACTION=7]="PDF417_COMPACTION",E[E.PDF417_DIMENSIONS=8]="PDF417_DIMENSIONS",E[E.AZTEC_LAYERS=9]="AZTEC_LAYERS",E[E.QR_VERSION=10]="QR_VERSION"})(Pi||(Pi={}));var Wt=Pi;class Li{constructor(e){this.field=e,this.cachedGenerators=[],this.cachedGenerators.push(new Le(e,Int32Array.from([1])))}buildGenerator(e){const n=this.cachedGenerators;if(e>=n.length){let s=n[n.length-1];const i=this.field;for(let a=n.length;a<=e;a++){const c=s.multiply(new Le(i,Int32Array.from([1,i.exp(a-1+i.getGeneratorBase())])));n.push(c),s=c}}return n[e]}encode(e,n){if(n===0)throw new C("No error correction bytes");const s=e.length-n;if(s<=0)throw new C("No data bytes provided");const i=this.buildGenerator(n),a=new Int32Array(s);U.arraycopy(e,0,a,0,s);let c=new Le(this.field,a);c=c.multiplyByMonomial(n,1);const h=c.divide(i)[1].getCoefficients(),m=n-h.length;for(let y=0;y=5&&(s+=Dt.N1+(h-5)),h=1,m=b)}h>=5&&(s+=Dt.N1+(h-5))}return s}}Dt.N1=3,Dt.N2=3,Dt.N3=40,Dt.N4=10;class ko{constructor(e,n){this.width=e,this.height=n;const s=new Array(n);for(let i=0;i!==n;i++)s[i]=new Uint8Array(e);this.bytes=s}getHeight(){return this.height}getWidth(){return this.width}get(e,n){return this.bytes[n][e]}getArray(){return this.bytes}setNumber(e,n,s){this.bytes[n][e]=s}setBoolean(e,n,s){this.bytes[n][e]=s?1:0}clear(e){for(const n of this.bytes)W.fill(n,e)}equals(e){if(!(e instanceof ko))return!1;const n=e;if(this.width!==n.width||this.height!==n.height)return!1;for(let s=0,i=this.height;s>
+`),e.toString()}setMode(e){this.mode=e}setECLevel(e){this.ecLevel=e}setVersion(e){this.version=e}setMaskPattern(e){this.maskPattern=e}setMatrix(e){this.matrix=e}static isValidMaskPattern(e){return e>=0&&e0;){for(c===6&&(c-=1);d>=0&&d=s;)e^=n<=0)for(let h=0;h!==c;h++){const m=i[h];m>=0&&Oe.isEmpty(n.get(m,d))&&Oe.embedPositionAdjustmentPattern(m-2,d-2,n)}}}}Oe.POSITION_DETECTION_PATTERN=Array.from([Int32Array.from([1,1,1,1,1,1,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,1,1,1,1,1,1])]),Oe.POSITION_ADJUSTMENT_PATTERN=Array.from([Int32Array.from([1,1,1,1,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,0,1,0,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,1,1,1,1])]),Oe.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE=Array.from([Int32Array.from([-1,-1,-1,-1,-1,-1,-1]),Int32Array.from([6,18,-1,-1,-1,-1,-1]),Int32Array.from([6,22,-1,-1,-1,-1,-1]),Int32Array.from([6,26,-1,-1,-1,-1,-1]),Int32Array.from([6,30,-1,-1,-1,-1,-1]),Int32Array.from([6,34,-1,-1,-1,-1,-1]),Int32Array.from([6,22,38,-1,-1,-1,-1]),Int32Array.from([6,24,42,-1,-1,-1,-1]),Int32Array.from([6,26,46,-1,-1,-1,-1]),Int32Array.from([6,28,50,-1,-1,-1,-1]),Int32Array.from([6,30,54,-1,-1,-1,-1]),Int32Array.from([6,32,58,-1,-1,-1,-1]),Int32Array.from([6,34,62,-1,-1,-1,-1]),Int32Array.from([6,26,46,66,-1,-1,-1]),Int32Array.from([6,26,48,70,-1,-1,-1]),Int32Array.from([6,26,50,74,-1,-1,-1]),Int32Array.from([6,30,54,78,-1,-1,-1]),Int32Array.from([6,30,56,82,-1,-1,-1]),Int32Array.from([6,30,58,86,-1,-1,-1]),Int32Array.from([6,34,62,90,-1,-1,-1]),Int32Array.from([6,28,50,72,94,-1,-1]),Int32Array.from([6,26,50,74,98,-1,-1]),Int32Array.from([6,30,54,78,102,-1,-1]),Int32Array.from([6,28,54,80,106,-1,-1]),Int32Array.from([6,32,58,84,110,-1,-1]),Int32Array.from([6,30,58,86,114,-1,-1]),Int32Array.from([6,34,62,90,118,-1,-1]),Int32Array.from([6,26,50,74,98,122,-1]),Int32Array.from([6,30,54,78,102,126,-1]),Int32Array.from([6,26,52,78,104,130,-1]),Int32Array.from([6,30,56,82,108,134,-1]),Int32Array.from([6,34,60,86,112,138,-1]),Int32Array.from([6,30,58,86,114,142,-1]),Int32Array.from([6,34,62,90,118,146,-1]),Int32Array.from([6,30,54,78,102,126,150]),Int32Array.from([6,24,50,76,102,128,154]),Int32Array.from([6,28,54,80,106,132,158]),Int32Array.from([6,32,58,84,110,136,162]),Int32Array.from([6,26,54,82,110,138,166]),Int32Array.from([6,30,58,86,114,142,170])]),Oe.TYPE_INFO_COORDINATES=Array.from([Int32Array.from([8,0]),Int32Array.from([8,1]),Int32Array.from([8,2]),Int32Array.from([8,3]),Int32Array.from([8,4]),Int32Array.from([8,5]),Int32Array.from([8,7]),Int32Array.from([8,8]),Int32Array.from([7,8]),Int32Array.from([5,8]),Int32Array.from([4,8]),Int32Array.from([3,8]),Int32Array.from([2,8]),Int32Array.from([1,8]),Int32Array.from([0,8])]),Oe.VERSION_INFO_POLY=7973,Oe.TYPE_INFO_POLY=1335,Oe.TYPE_INFO_MASK_PATTERN=21522;class Z1{constructor(e,n){this.dataBytes=e,this.errorCorrectionBytes=n}getDataBytes(){return this.dataBytes}getErrorCorrectionBytes(){return this.errorCorrectionBytes}}class It{constructor(){}static calculateMaskPenalty(e){return Dt.applyMaskPenaltyRule1(e)+Dt.applyMaskPenaltyRule2(e)+Dt.applyMaskPenaltyRule3(e)+Dt.applyMaskPenaltyRule4(e)}static encode(e,n,s=null){let i=It.DEFAULT_BYTE_MODE_ENCODING;const a=s!==null&&s.get(Wt.CHARACTER_SET)!==void 0;a&&(i=s.get(Wt.CHARACTER_SET).toString());const c=this.chooseMode(e,i),d=new F;if(c===Ne.BYTE&&(a||It.DEFAULT_BYTE_MODE_ENCODING!==i)){const ge=K.getCharacterSetECIByName(i);ge!==void 0&&this.appendECI(ge,d)}this.appendModeInfo(c,d);const h=new F;this.appendBytes(e,c,h,i);let m;if(s!==null&&s.get(Wt.QR_VERSION)!==void 0){const ge=Number.parseInt(s.get(Wt.QR_VERSION).toString(),10);m=ve.getVersionForNumber(ge);const ue=this.calculateBitsNeeded(c,d,h,m);if(!this.willFit(ue,m,n))throw new pt("Data too big for requested version")}else m=this.recommendVersion(n,c,d,h);const y=new F;y.appendBitArray(d);const b=c===Ne.BYTE?h.getSizeInBytes():e.length;this.appendLengthInfo(b,m,c,y),y.appendBitArray(h);const _=m.getECBlocksForLevel(n),N=m.getTotalCodewords()-_.getTotalECCodewords();this.terminateBits(N,y);const P=this.interleaveWithECBytes(y,m.getTotalCodewords(),N,_.getNumBlocks()),$=new Vr;$.setECLevel(n),$.setMode(c),$.setVersion(m);const j=m.getDimensionForVersion(),Q=new ko(j,j),fe=this.chooseMaskPattern(P,n,m,Q);return $.setMaskPattern(fe),Oe.buildMatrix(P,n,m,fe,Q),$.setMatrix(Q),$}static recommendVersion(e,n,s,i){const a=this.calculateBitsNeeded(n,s,i,ve.getVersionForNumber(1)),c=this.chooseVersion(a,e),d=this.calculateBitsNeeded(n,s,i,c);return this.chooseVersion(d,e)}static calculateBitsNeeded(e,n,s,i){return n.getSize()+e.getCharacterCountBits(i)+s.getSize()}static getAlphanumericCode(e){return e159)&&(a<224||a>235))return!1}return!0}static chooseMaskPattern(e,n,s,i){let a=Number.MAX_SAFE_INTEGER,c=-1;for(let d=0;d=h}static terminateBits(e,n){const s=e*8;if(n.getSize()>s)throw new pt("data bits cannot fit in the QR Code"+n.getSize()+" > "+s);for(let c=0;c<4&&n.getSize()0)for(let c=i;c<8;c++)n.appendBit(!1);const a=e-n.getSizeInBytes();for(let c=0;c=s)throw new pt("Block ID too large");const d=e%s,h=s-d,m=Math.floor(e/s),y=m+1,b=Math.floor(n/s),_=b+1,N=m-b,P=y-_;if(N!==P)throw new pt("EC bytes mismatch");if(s!==h+d)throw new pt("RS blocks mismatch");if(e!==(b+N)*h+(_+P)*d)throw new pt("Total bytes mismatch");i=1<=0&&n<=9}static appendNumericBytes(e,n){const s=e.length;let i=0;for(;i=33088&&h<=40956?m=h-33088:h>=57408&&h<=60351&&(m=h-49472),m===-1)throw new pt("Invalid byte sequence");const y=(m>>8)*192+(m&255);n.appendBits(y,13)}}static appendECI(e,n){n.appendBits(Ne.ECI.getBits(),4),n.appendBits(e.getValue(),8)}}It.ALPHANUMERIC_TABLE=Int32Array.from([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,36,-1,-1,-1,37,38,-1,-1,-1,-1,39,40,-1,41,42,43,0,1,2,3,4,5,6,7,8,9,44,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1]),It.DEFAULT_BYTE_MODE_ENCODING=K.UTF8.getName();class Hr{write(e,n,s,i=null){if(e.length===0)throw new C("Found empty contents");if(n<0||s<0)throw new C("Requested dimensions are too small: "+n+"x"+s);let a=Et.L,c=Hr.QUIET_ZONE_SIZE;i!==null&&(i.get(Wt.ERROR_CORRECTION)!==void 0&&(a=Et.fromString(i.get(Wt.ERROR_CORRECTION).toString())),i.get(Wt.MARGIN)!==void 0&&(c=Number.parseInt(i.get(Wt.MARGIN).toString(),10)));const d=It.encode(e,a,i);return this.renderResult(d,n,s,c)}writeToDom(e,n,s,i,a=null){typeof e=="string"&&(e=document.querySelector(e));const c=this.write(n,s,i,a);e&&e.appendChild(c)}renderResult(e,n,s,i){const a=e.getMatrix();if(a===null)throw new ne;const c=a.getWidth(),d=a.getHeight(),h=c+i*2,m=d+i*2,y=Math.max(n,h),b=Math.max(s,m),_=Math.min(Math.floor(y/h),Math.floor(b/m)),N=Math.floor((y-c*_)/2),P=Math.floor((b-d*_)/2),$=this.createSVGElement(y,b);for(let j=0,Q=P;jn||a+d>s)throw new C("Crop rectangle does not fit within image data.");h&&this.reverseHorizontal(c,d)}getRow(e,n){if(e<0||e>=this.getHeight())throw new C("Requested row is outside the image: "+e);const s=this.getWidth();(n==null||n.length>16&255,N=b>>7&510,P=b&255;m[y]=(_+N+P)/4&255}this.luminances=m}else this.luminances=e;if(i===void 0&&(this.dataWidth=n),a===void 0&&(this.dataHeight=s),c===void 0&&(this.left=0),d===void 0&&(this.top=0),this.left+n>this.dataWidth||this.top+s>this.dataHeight)throw new C("Crop rectangle does not fit within image data.")}getRow(e,n){if(e<0||e>=this.getHeight())throw new C("Requested row is outside the image: "+e);const s=this.getWidth();(n==null||n.length"}}class $i extends os{constructor(e,n,s){super(e,0,0),this.binaryShiftStart=n,this.binaryShiftByteCount=s}appendTo(e,n){for(let s=0;s62?e.appendBits(this.binaryShiftByteCount-31,16):s===0?e.appendBits(Math.min(this.binaryShiftByteCount,31),5):e.appendBits(this.binaryShiftByteCount-31,5)),e.appendBits(n[this.binaryShiftStart+s],8)}addBinaryShift(e,n){return new $i(this,e,n)}toString(){return"<"+this.binaryShiftStart+"::"+(this.binaryShiftStart+this.binaryShiftByteCount-1)+">"}}function tf(E,e,n){return new $i(E,e,n)}function Ls(E,e,n){return new os(E,e,n)}const nf=["UPPER","LOWER","DIGIT","MIXED","PUNCT"],br=0,No=1,Nn=2,Ic=3,Yn=4,rf=new os(null,0,0),Bi=[Int32Array.from([0,(5<<16)+28,(5<<16)+30,(5<<16)+29,656318]),Int32Array.from([(9<<16)+480+14,0,(5<<16)+30,(5<<16)+29,656318]),Int32Array.from([(4<<16)+14,(9<<16)+448+28,0,(9<<16)+448+29,932798]),Int32Array.from([(5<<16)+29,(5<<16)+28,656318,0,(5<<16)+30]),Int32Array.from([(5<<16)+31,656380,656382,656381,0])];function sf(E){for(let e of E)W.fill(e,-1);return E[br][Yn]=0,E[No][Yn]=0,E[No][br]=28,E[Ic][Yn]=0,E[Nn][Yn]=0,E[Nn][br]=15,E}const Sc=sf(W.createInt32Array(6,6));class Kn{constructor(e,n,s,i){this.token=e,this.mode=n,this.binaryShiftByteCount=s,this.bitCount=i}getMode(){return this.mode}getToken(){return this.token}getBinaryShiftByteCount(){return this.binaryShiftByteCount}getBitCount(){return this.bitCount}latchAndAppend(e,n){let s=this.bitCount,i=this.token;if(e!==this.mode){let c=Bi[this.mode][e];i=Ls(i,c&65535,c>>16),s+=c>>16}let a=e===Nn?4:5;return i=Ls(i,n,a),new Kn(i,e,0,s+a)}shiftAndAppend(e,n){let s=this.token,i=this.mode===Nn?4:5;return s=Ls(s,Sc[this.mode][e],i),s=Ls(s,n,5),new Kn(s,this.mode,0,this.bitCount+i+5)}addBinaryShiftChar(e){let n=this.token,s=this.mode,i=this.bitCount;if(this.mode===Yn||this.mode===Nn){let d=Bi[s][br];n=Ls(n,d&65535,d>>16),i+=d>>16,s=br}let a=this.binaryShiftByteCount===0||this.binaryShiftByteCount===31?18:this.binaryShiftByteCount===62?9:8,c=new Kn(n,s,this.binaryShiftByteCount+1,i+a);return c.binaryShiftByteCount===2078&&(c=c.endBinaryShift(e+1)),c}endBinaryShift(e){if(this.binaryShiftByteCount===0)return this;let n=this.token;return n=tf(n,e-this.binaryShiftByteCount,this.binaryShiftByteCount),new Kn(n,this.mode,0,this.bitCount)}isBetterThanOrEqualTo(e){let n=this.bitCount+(Bi[this.mode][e.mode]>>16);return this.binaryShiftByteCounte.binaryShiftByteCount&&e.binaryShiftByteCount>0&&(n+=10),n<=e.bitCount}toBitArray(e){let n=[];for(let i=this.endBinaryShift(e.length).token;i!==null;i=i.getPrevious())n.unshift(i);let s=new F;for(const i of n)i.appendTo(s,e);return s}toString(){return de.format("%s bits=%d bytes=%d",nf[this.mode],this.bitCount,this.binaryShiftByteCount)}static calculateBinaryShiftCost(e){return e.binaryShiftByteCount>62?21:e.binaryShiftByteCount>31?20:e.binaryShiftByteCount>0?10:0}}Kn.INITIAL_STATE=new Kn(rf,br,0,0);function of(E){const e=de.getCharCode(" "),n=de.getCharCode("."),s=de.getCharCode(",");E[br][e]=1;const i=de.getCharCode("Z"),a=de.getCharCode("A");for(let _=a;_<=i;_++)E[br][_]=_-a+2;E[No][e]=1;const c=de.getCharCode("z"),d=de.getCharCode("a");for(let _=d;_<=c;_++)E[No][_]=_-d+2;E[Nn][e]=1;const h=de.getCharCode("9"),m=de.getCharCode("0");for(let _=m;_<=h;_++)E[Nn][_]=_-m+2;E[Nn][s]=12,E[Nn][n]=13;const y=["\0"," ","","","","","","","\x07","\b"," ",`
+`,"\v","\f","\r","\x1B","","","","","@","\\","^","_","`","|","~",""];for(let _=0;_","?","[","]","{","}"];for(let _=0;_0&&(E[Yn][de.getCharCode(b[_])]=_);return E}const Ui=of(W.createInt32Array(5,256));class Ms{constructor(e){this.text=e}encode(){const e=de.getCharCode(" "),n=de.getCharCode(`
+`);let s=_c.singletonList(Kn.INITIAL_STATE);for(let a=0;a0?(s=Ms.updateStateListForPair(s,a,c),a++):s=this.updateStateListForChar(s,a)}return _c.min(s,(a,c)=>a.getBitCount()-c.getBitCount()).toBitArray(this.text)}updateStateListForChar(e,n){const s=[];for(let i of e)this.updateStateForChar(i,n,s);return Ms.simplifyStates(s)}updateStateForChar(e,n,s){let i=this.text[n]&255,a=Ui[e.getMode()][i]>0,c=null;for(let d=0;d<=Yn;d++){let h=Ui[d][i];if(h>0){if(c==null&&(c=e.endBinaryShift(n)),!a||d===e.getMode()||d===Nn){const m=c.latchAndAppend(d,h);s.push(m)}if(!a&&Sc[e.getMode()][d]>=0){const m=c.shiftAndAppend(d,h);s.push(m)}}}if(e.getBinaryShiftByteCount()>0||Ui[e.getMode()][i]===0){let d=e.addBinaryShiftChar(n);s.push(d)}}static updateStateListForPair(e,n,s){const i=[];for(let a of e)this.updateStateForPair(a,n,s,i);return this.simplifyStates(i)}static updateStateForPair(e,n,s,i){let a=e.endBinaryShift(n);if(i.push(a.latchAndAppend(Yn,s)),e.getMode()!==Yn&&i.push(a.shiftAndAppend(Yn,s)),s===3||s===4){let c=a.latchAndAppend(Nn,16-s).latchAndAppend(Nn,1);i.push(c)}if(e.getBinaryShiftByteCount()>0){let c=e.addBinaryShiftChar(n).addBinaryShiftChar(n+1);i.push(c)}}static simplifyStates(e){let n=[];for(const s of e){let i=!0;for(const a of n){if(a.isBetterThanOrEqualTo(s)){i=!1;break}s.isBetterThanOrEqualTo(a)&&(n=n.filter(c=>c!==a))}i&&n.push(s)}return n}}class et{constructor(){}static encodeBytes(e){return et.encode(e,et.DEFAULT_EC_PERCENT,et.DEFAULT_AZTEC_LAYERS)}static encode(e,n,s){let i=new Ms(e).encode(),a=V.truncDivision(i.getSize()*n,100)+11,c=i.getSize()+a,d,h,m,y,b;if(s!==et.DEFAULT_AZTEC_LAYERS){if(d=s<0,h=Math.abs(s),h>(d?et.MAX_NB_BITS_COMPACT:et.MAX_NB_BITS))throw new C(de.format("Illegal value %s for layers",s));m=et.totalBitsInLayer(h,d),y=et.WORD_SIZE[h];let ue=m-m%y;if(b=et.stuffBits(i,y),b.getSize()+a>ue)throw new C("Data to large for user specified layer");if(d&&b.getSize()>y*64)throw new C("Data to large for user specified layer")}else{y=0,b=null;for(let ue=0;;ue++){if(ue>et.MAX_NB_BITS)throw new C("Data too large for an Aztec code");if(d=ue<=3,h=d?ue+1:ue,m=et.totalBitsInLayer(h,d),c>m)continue;(b==null||y!==et.WORD_SIZE[h])&&(y=et.WORD_SIZE[h],b=et.stuffBits(i,y));let ze=m-m%y;if(!(d&&b.getSize()>y*64)&&b.getSize()+a<=ze)break}}let _=et.generateCheckWords(b,m,y),N=b.getSize()/y,P=et.generateModeMessage(d,h,N),$=(d?11:14)+h*4,j=new Int32Array($),Q;if(d){Q=$;for(let ue=0;ue=i||e.get(c+h))&&(d|=1<0&&f[f.length-1])&&(x[0]===6||x[0]===2)){o=0;continue}if(x[0]===3&&(!f||x[1]>f[0]&&x[1]l&&(l=p,o=g)}if(!o)throw"No largest barcode found";return o},t.prototype.createBarcodeDetectorFormats=function(r){for(var o=[],l=0,u=r;l0&&f[f.length-1])&&(x[0]===6||x[0]===2)){o=0;continue}if(x[0]===3&&(!f||x[1]>f[0]&&x[1]0&&f[f.length-1])&&(x[0]===6||x[0]===2)){o=0;continue}if(x[0]===3&&(!f||x[1]>f[0]&&x[1]=f&&(r.isClosed=!0,r.parentElement.removeChild(r.surface),o())})})},t.prototype.getCapabilities=function(){return new Jp(this.getFirstTrackOrFail())},t}(),tx=function(){function t(r){this.mediaStream=r}return t.prototype.render=function(r,o,l){return ri(this,void 0,void 0,function(){return si(this,function(u){return[2,ex.create(r,this.mediaStream,o,l)]})})},t.create=function(r){return ri(this,void 0,void 0,function(){var o,l;return si(this,function(u){switch(u.label){case 0:if(!navigator.mediaDevices)throw"navigator.mediaDevices not supported";return o={audio:!1,video:r},[4,navigator.mediaDevices.getUserMedia(o)];case 1:return l=u.sent(),[2,new t(l)]}})})},t}(),pu=function(t,r,o,l){function u(f){return f instanceof o?f:new o(function(g){g(f)})}return new(o||(o=Promise))(function(f,g){function p(A){try{x(l.next(A))}catch(C){g(C)}}function w(A){try{x(l.throw(A))}catch(C){g(C)}}function x(A){A.done?f(A.value):u(A.value).then(p,w)}x((l=l.apply(t,r||[])).next())})},xu=function(t,r){var o={label:0,sent:function(){if(f[0]&1)throw f[1];return f[1]},trys:[],ops:[]},l,u,f,g;return g={next:p(0),throw:p(1),return:p(2)},typeof Symbol=="function"&&(g[Symbol.iterator]=function(){return this}),g;function p(x){return function(A){return w([x,A])}}function w(x){if(l)throw new TypeError("Generator is already executing.");for(;g&&(g=0,x[0]&&(o=0)),o;)try{if(l=1,u&&(f=x[0]&2?u.return:x[0]?u.throw||((f=u.return)&&f.call(u),0):u.next)&&!(f=f.call(u,x[1])).done)return f;switch(u=0,f&&(x=[x[0]&2,f.value]),x[0]){case 0:case 1:f=x;break;case 4:return o.label++,{value:x[1],done:!1};case 5:o.label++,u=x[1],x=[0];continue;case 7:x=o.ops.pop(),o.trys.pop();continue;default:if(f=o.trys,!(f=f.length>0&&f[f.length-1])&&(x[0]===6||x[0]===2)){o=0;continue}if(x[0]===3&&(!f||x[1]>f[0]&&x[1]0&&f[f.length-1])&&(x[0]===6||x[0]===2)){o=0;continue}if(x[0]===3&&(!f||x[1]>f[0]&&x[1]r&&(u.logger.warn("`qrbox.width` or `qrbox` is larger than the width of the root element. The width will be truncated to the width of root element."),x=r),x};p(g.width),p(g.height),g.width=w(g.width)},t.prototype.validateQrboxConfig=function(r){if(typeof r!="number"&&typeof r!="function"&&(r.width===void 0||r.height===void 0))throw"Invalid instance of QrDimensions passed for 'config.qrbox'. Both 'width' and 'height' should be set."},t.prototype.toQrdimensions=function(r,o,l){if(typeof l=="number")return{width:l,height:l};if(typeof l=="function")try{return l(r,o)}catch(u){throw new Error("qrbox config was passed as a function but it failed with unknown error"+u)}return l},t.prototype.setupUi=function(r,o,l){l.isShadedBoxEnabled()&&this.validateQrboxSize(r,o,l);var u=ar(l.qrbox)?{width:r,height:o}:l.qrbox;this.validateQrboxConfig(u);var f=this.toQrdimensions(r,o,u);f.height>o&&this.logger.warn("[Html5Qrcode] config.qrbox has height that isgreater than the height of the video stream. Shading will be ignored");var g=l.isShadedBoxEnabled()&&f.height<=o,p={x:0,y:0,width:r,height:o},w=g?this.getShadedRegionBounds(r,o,f):p,x=this.createCanvasElement(w.width,w.height),A={willReadFrequently:!0},C=x.getContext("2d",A);C.canvas.width=w.width,C.canvas.height=w.height,this.element.append(x),g&&this.possiblyInsertShadingElement(this.element,r,o,f),this.createScannerPausedUiElement(this.element),this.qrRegion=w,this.context=C,this.canvasElement=x},t.prototype.createScannerPausedUiElement=function(r){var o=document.createElement("div");o.innerText=fs.scannerPaused(),o.style.display="none",o.style.position="absolute",o.style.top="0px",o.style.zIndex="1",o.style.background="rgba(9, 9, 9, 0.46)",o.style.color="#FFECEC",o.style.textAlign="center",o.style.width="100%",r.appendChild(o),this.scannerPausedUiElement=o},t.prototype.scanContext=function(r,o){var l=this;return this.stateManagerProxy.isPaused()?Promise.resolve(!1):this.qrcode.decodeAsync(this.canvasElement).then(function(u){return r(u.text,uu.createFromQrcodeResult(u)),l.possiblyUpdateShaders(!0),!0}).catch(function(u){l.possiblyUpdateShaders(!1);var f=fs.codeParseError(u);return o(f,Up.createFrom(f)),!1})},t.prototype.foreverScan=function(r,o,l){var u=this;if(this.shouldScan&&this.renderedCamera){var f=this.renderedCamera.getSurface(),g=f.videoWidth/f.clientWidth,p=f.videoHeight/f.clientHeight;if(!this.qrRegion)throw"qrRegion undefined when localMediaStream is ready.";var w=this.qrRegion.width*g,x=this.qrRegion.height*p,A=this.qrRegion.x*g,C=this.qrRegion.y*p;this.context.drawImage(f,A,C,w,x,0,0,this.qrRegion.width,this.qrRegion.height);var I=function(){u.foreverScanTimeout=setTimeout(function(){u.foreverScan(r,o,l)},u.getTimeoutFps(r.fps))};this.scanContext(o,l).then(function(O){!O&&r.disableFlip!==!0?(u.context.translate(u.context.canvas.width,0),u.context.scale(-1,1),u.scanContext(o,l).finally(function(){I()})):I()}).catch(function(O){u.logger.logError("Error happend while scanning context",O),I()})}},t.prototype.createVideoConstraints=function(r){if(typeof r=="string")return{deviceId:{exact:r}};if(typeof r=="object"){var o="facingMode",l="deviceId",u={user:!0,environment:!0},f="exact",g=function(z){if(z in u)return!0;throw"config has invalid 'facingMode' value = "+"'".concat(z,"'")},p=Object.keys(r);if(p.length!==1)throw"'cameraIdOrConfig' object should have exactly 1 key,"+" if passed as an object, found ".concat(p.length," keys");var w=Object.keys(r)[0];if(w!==o&&w!==l)throw"Only '".concat(o,"' and '").concat(l,"' ")+" are supported for 'cameraIdOrConfig'";if(w===o){var x=r.facingMode;if(typeof x=="string"){if(g(x))return{facingMode:x}}else if(typeof x=="object")if(f in x){if(g(x["".concat(f)]))return{facingMode:{exact:x["".concat(f)]}}}else throw"'facingMode' should be string or object with"+" ".concat(f," as key.");else{var A=typeof x;throw"Invalid type of 'facingMode' = ".concat(A)}}else{var C=r.deviceId;if(typeof C=="string")return{deviceId:C};if(typeof C=="object"){if(f in C)return{deviceId:{exact:C["".concat(f)]}};throw"'deviceId' should be string or object with"+" ".concat(f," as key.")}else{var I=typeof C;throw"Invalid type of 'deviceId' = ".concat(I)}}}var O=typeof r;throw"Invalid type of 'cameraIdOrConfig' = ".concat(O)},t.prototype.computeCanvasDrawConfig=function(r,o,l,u){if(r<=l&&o<=u){var f=(l-r)/2,g=(u-o)/2;return{x:f,y:g,width:r,height:o}}else{var p=r,w=o;return r>l&&(o=l/r*o,r=l),o>u&&(r=u/o*r,o=u),this.logger.log("Image downsampled from "+"".concat(p,"X").concat(w)+" to ".concat(r,"X").concat(o,".")),this.computeCanvasDrawConfig(r,o,l,u)}},t.prototype.clearElement=function(){if(this.stateManagerProxy.isScanning())throw"Cannot clear while scan is ongoing, close it first.";var r=document.getElementById(this.elementId);r&&(r.innerHTML="")},t.prototype.possiblyUpdateShaders=function(r){this.qrMatch!==r&&(this.hasBorderShaders&&this.borderShaders&&this.borderShaders.length&&this.borderShaders.forEach(function(o){o.style.backgroundColor=r?bn.BORDER_SHADER_MATCH_COLOR:bn.BORDER_SHADER_DEFAULT_COLOR}),this.qrMatch=r)},t.prototype.possiblyCloseLastScanImageFile=function(){this.lastScanImageFile&&(URL.revokeObjectURL(this.lastScanImageFile),this.lastScanImageFile=null)},t.prototype.createCanvasElement=function(r,o,l){var u=r,f=o,g=document.createElement("canvas");return g.style.width="".concat(u,"px"),g.style.height="".concat(f,"px"),g.style.display="none",g.id=ar(l)?"qr-canvas":l,g},t.prototype.getShadedRegionBounds=function(r,o,l){if(l.width>r||l.height>o)throw"'config.qrbox' dimensions should not be greater than the dimensions of the root HTML element.";return{x:(r-l.width)/2,y:(o-l.height)/2,width:l.width,height:l.height}},t.prototype.possiblyInsertShadingElement=function(r,o,l,u){if(!(o-u.width<1||l-u.height<1)){var f=document.createElement("div");f.style.position="absolute";var g=(o-u.width)/2,p=(l-u.height)/2;if(f.style.borderLeft="".concat(g,"px solid rgba(0, 0, 0, 0.48)"),f.style.borderRight="".concat(g,"px solid rgba(0, 0, 0, 0.48)"),f.style.borderTop="".concat(p,"px solid rgba(0, 0, 0, 0.48)"),f.style.borderBottom="".concat(p,"px solid rgba(0, 0, 0, 0.48)"),f.style.boxSizing="border-box",f.style.top="0px",f.style.bottom="0px",f.style.left="0px",f.style.right="0px",f.id="".concat(bn.SHADED_REGION_ELEMENT_ID),o-u.width<11||l-u.height<11)this.hasBorderShaders=!1;else{var w=5,x=40;this.insertShaderBorders(f,x,w,-w,null,0,!0),this.insertShaderBorders(f,x,w,-w,null,0,!1),this.insertShaderBorders(f,x,w,null,-w,0,!0),this.insertShaderBorders(f,x,w,null,-w,0,!1),this.insertShaderBorders(f,w,x+w,-w,null,-w,!0),this.insertShaderBorders(f,w,x+w,null,-w,-w,!0),this.insertShaderBorders(f,w,x+w,-w,null,-w,!1),this.insertShaderBorders(f,w,x+w,null,-w,-w,!1),this.hasBorderShaders=!0}r.append(f)}},t.prototype.insertShaderBorders=function(r,o,l,u,f,g,p){var w=document.createElement("div");w.style.position="absolute",w.style.backgroundColor=bn.BORDER_SHADER_DEFAULT_COLOR,w.style.width="".concat(o,"px"),w.style.height="".concat(l,"px"),u!==null&&(w.style.top="".concat(u,"px")),f!==null&&(w.style.bottom="".concat(f,"px")),p?w.style.left="".concat(g,"px"):w.style.right="".concat(g,"px"),this.borderShaders||(this.borderShaders=[]),this.borderShaders.push(w),r.appendChild(w)},t.prototype.showPausedState=function(){if(!this.scannerPausedUiElement)throw"[internal error] scanner paused UI element not found";this.scannerPausedUiElement.style.display="block"},t.prototype.hidePausedState=function(){if(!this.scannerPausedUiElement)throw"[internal error] scanner paused UI element not found";this.scannerPausedUiElement.style.display="none"},t.prototype.getTimeoutFps=function(r){return 1e3/r},t}(),yu;(function(t){t[t.STATUS_DEFAULT=0]="STATUS_DEFAULT",t[t.STATUS_SUCCESS=1]="STATUS_SUCCESS",t[t.STATUS_WARNING=2]="STATUS_WARNING",t[t.STATUS_REQUESTING_PERMISSION=3]="STATUS_REQUESTING_PERMISSION"})(yu||(yu={}));const dx={class:"mobile-viewport bg-gray-100 dark:bg-gray-900 min-h-screen"},fx={class:"fixed-header-safe bg-blue-600 text-white shadow-lg"},hx={class:"px-4 py-6"},gx={class:"text-3xl font-bold text-center"},mx={class:"main-with-fixed-header px-4 py-8 space-y-8"},px={class:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6 text-center mt-16"},xx={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 mb-2"},wx={class:"text-gray-600 dark:text-gray-400 mb-4"},yx={class:"flex items-center justify-center gap-4 mb-4"},Cx={class:"text-lg text-gray-600 dark:text-gray-400 mb-1"},Ex={key:0,class:"bg-green-100 dark:bg-green-900 border-l-4 border-green-500 text-green-700 dark:text-green-300 p-4 rounded-lg shadow-md"},Ax={key:1,class:"bg-red-100 dark:bg-red-900 border-l-4 border-red-500 text-red-700 dark:text-red-300 p-4 rounded-lg shadow-md"},bx={class:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6"},_x={key:0,class:"space-y-4 text-center"},Ix={class:"text-xl font-semibold text-gray-800 dark:text-gray-200 mb-4"},Sx={id:"qr-reader-container",class:"fixed inset-0 bg-black bg-opacity-90 flex flex-col items-center justify-center z-50 p-4"},Tx={class:"bg-white dark:bg-gray-800 rounded-2xl p-6 w-full max-w-md"},vx={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 text-center mb-4"},kx={__name:"WorkerDashboardView",setup(t){const{t:r}=xr();let o=null;const l=gt(null),u=Qr(),f=gt(!1),g=gt(!1),p=gt(""),w=gt(""),x=gt(""),A=gt("");let C=sessionStorage.getItem("userId");const I=ht(()=>f.value?r("clockedIn"):r("clockedOut")),O=async()=>{try{const k=await Mt.getCachedWorkerData(C);if(k&&k.full_name){x.value=k.full_name;return}}catch(k){console.log("No cached worker data available, fetching from API:",k)}try{const k=await tr(`/api/workers/${C}`);k&&(x.value=k.full_name,await Mt.cacheWorkerData(C,{full_name:k.full_name,username:A.value}))}catch(k){p.value=r("couldNotLoadWorkerInfo")+`: ${k.message}`}},z=async()=>{try{console.log("🔍 DASHBOARD: Fetching current clock status from server...");const k=await tr(`/api/worker/status/${C}`);if(k){const re=k.eventType==="clock_in";f.value=re,console.log("📊 DASHBOARD: Current clock status from server:",re);try{console.log("🔄 DASHBOARD: Syncing clock status with location service..."),await Qt.services.location.setClockedInStatus(re),console.log("✅ DASHBOARD: Clock status synced with location service")}catch(K){console.error("❌ DASHBOARD: Failed to sync clock status with location service:",K)}}}catch(k){p.value=r("couldNotVerifyStatus")+`: ${k.message}`}},U=async(k,re,K)=>{const Te=f.value?"clock_out":"clock_in";try{const ke=await tr("/api/clock",{method:"POST",body:JSON.stringify({userId:C,eventType:Te,qrCodeValue:k,latitude:re,longitude:K})}),de=!f.value;f.value=de;try{console.log("🔄 DASHBOARD: Setting clock status in location service:",de),await Qt.services.location.setClockedInStatus(de),console.log(de?"✅ DASHBOARD: Clock-in successful - background location tracking started":"✅ DASHBOARD: Clock-out successful - background location tracking stopped")}catch(Se){console.error("❌ DASHBOARD: Failed to update background location service:",Se)}w.value=r("successfullyClocked",{action:r(Te)})+` ${ke.location||r("site")}.`}catch(ke){p.value=r("errorOccurred")+`: ${ke.message}`}};qr(async()=>{if(window.addEventListener("user-forced-clock-out",te),C||(C=await Mt.getUserId()),!C){u.push("/");return}try{const re=Qt.getServiceStatus();re.isInitialized||await Qt.initialize(),await Mt.isAuthenticated()&&!re.services.location.tracking&&await Qt.startServices();try{await Qt.services.location.onAppResume(),await Qt.services.location.restoreClockStatus()&&console.log("PRODUCTION: Restored previous clock-in status from app resume")}catch(Te){console.error("PRODUCTION: Failed to handle app resume with location service:",Te)}}catch(re){console.error("Failed to initialize native services:",re)}const k=sessionStorage.getItem("username");k?A.value=k:A.value=r("username"),O(),z()}),ja(()=>{window.removeEventListener("user-forced-clock-out",te),o&&o.isScanning&&V();try{Qt.onAppBackground()}catch(k){console.error("Failed to handle app background:",k)}});const te=()=>{f.value=!1},L=()=>{p.value="",w.value=""},W=()=>{g.value=!0,L(),setTimeout(()=>{try{o=new wu("qr-reader");const k={fps:10,qrbox:{width:250,height:250}};o.start({facingMode:"environment"},k,ce,se)}catch{p.value=r("unableToStartCamera"),g.value=!1}},300)},V=()=>{o&&o.isScanning&&o.stop().catch(k=>console.error("Failed to stop scanner cleanly.",k)),g.value=!1},F=k=>{const re=k.target.files[0];re&&(L(),o||(o=new wu("qr-reader",!1)),o.scanFile(re,!0).then(ce).catch(()=>{se(r("tryAgain"))}))},ce=async k=>{w.value=r("qrDetectedGettingLocation"),V();try{const re=await Gs.getCurrentPosition({enableHighAccuracy:!0,timeout:1e4,maximumAge:36e5});await U(k,re.coords.latitude,re.coords.longitude),setTimeout(()=>{window.scrollTo({top:document.body.scrollHeight,behavior:"smooth"})},300)}catch(re){console.error("Geolocation error:",re),p.value=r("unableToRetrieveLocation",{message:re.message})}},se=()=>{};return(k,re)=>(Fe(),Ge("div",dx,[Y("header",fx,[Y("div",hx,[Y("h1",gx,Ce(k.$t("appTitle")),1)])]),Y("main",mx,[Y("div",px,[Y("h1",xx,Ce(x.value),1),Y("p",wx,Ce(A.value),1),Y("div",yx,[(Fe(),ys(qo(f.value?Xe(sp):Xe(C1)),{class:_n(["w-16 h-16",f.value?"text-green-500 dark:text-green-400":"text-red-500 dark:text-red-400"])},null,8,["class"]))]),Y("p",Cx,Ce(k.$t("yourStatus")),1),Y("h2",{class:_n(["text-3xl font-bold",f.value?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400"])},Ce(I.value),3)]),w.value?(Fe(),Ge("div",Ex,Ce(w.value),1)):xn("",!0),p.value?(Fe(),Ge("div",Ax,Ce(p.value),1)):xn("",!0),Y("div",bx,[g.value?xn("",!0):(Fe(),Ge("div",_x,[Y("h3",Ix,Ce(k.$t("scanToClock",{action:k.$t(f.value?"out":"in")})),1),Y("button",{onClick:W,class:"w-full py-4 text-xl flex items-center justify-center gap-3 bg-blue-600 hover:bg-blue-700 text-white font-bold rounded-xl transition-transform transform hover:scale-105 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 shadow-lg"},[st(Xe(rp),{class:"w-8 h-8"}),Y("span",null,Ce(k.$t("openCamera")),1)]),Y("input",{ref_key:"fileInput",ref:l,type:"file",accept:"image/*",onChange:F,hidden:""},null,544)])),Rr(Y("div",Sx,[Y("div",Tx,[Y("h3",vx,Ce(k.$t("scanQRCode")),1),re[0]||(re[0]=Y("div",{id:"qr-reader",class:"w-full rounded-lg overflow-hidden border-4 border-gray-300 dark:border-gray-600"},null,-1))]),Y("button",{onClick:V,class:"mt-8 bg-red-600 hover:bg-red-700 text-white font-bold px-10 py-4 rounded-xl transition-transform transform hover:scale-105 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 shadow-lg"},Ce(k.$t("cancel")),1)],512),[[oh,g.value]])])])]))}},Nx={class:"mobile-viewport bg-gray-100 dark:bg-gray-900 min-h-screen"},Rx={class:"fixed left-0 right-0 top-0 z-50 bg-blue-600 text-white shadow-lg"},Ox={class:"px-4 py-6",style:{"padding-top":"calc(var(--safe-area-inset-top) + 1.5rem)"}},Dx={class:"flex items-center"},Px={class:"text-3xl font-bold"},Lx={class:"main-with-fixed-header-and-nav px-4 py-8"},Mx={key:0,class:"text-center py-16 mt-8"},Fx={class:"text-2xl font-semibold text-gray-700 dark:text-gray-300"},$x={class:"text-gray-500 dark:text-gray-400 mt-2"},Bx={key:1,class:"space-y-4 mt-8 mb-10"},Ux={class:"flex-grow"},Wx={class:"font-bold text-lg text-gray-900 dark:text-gray-100"},Vx={class:"text-sm text-gray-600 dark:text-gray-400"},Hx={class:"text-right"},Gx={class:"font-medium text-gray-800 dark:text-gray-200"},jx={class:"text-sm text-gray-500 dark:text-gray-400"},Xx={__name:"WorkerHistoryView",setup(t){const{t:r}=xr(),o=Qr(),l=gt([]),u=sessionStorage.getItem("userId");qr(async()=>{if(!u){o.push("/");return}try{const g=await tr(`/api/worker/clock-history/${u}`);g&&(l.value=g.filter(p=>p.event_type!=="failed"))}catch(g){console.error(r("clockHistoryFetchFail"),g)}});const f=()=>{o.back()};return(g,p)=>(Fe(),Ge("div",Nx,[Y("header",Rx,[Y("div",Ox,[Y("div",Dx,[Y("button",{onClick:f,class:"mr-4 p-2 hover:bg-blue-700 rounded-lg transition-colors"},[st(Xe(ac),{class:"w-6 h-6"})]),Y("h1",Px,Ce(g.$t("myClockHistory")),1)])])]),Y("main",Lx,[l.value.length?(Fe(),Ge("div",Bx,[(Fe(!0),Ge(Rn,null,u0(l.value,w=>(Fe(),Ge("div",{key:w.id,class:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-5 flex items-center space-x-4"},[Y("div",{class:_n(["w-12 h-12 rounded-full flex items-center justify-center",w.event_type==="clock_in"?"bg-green-100 dark:bg-green-900/50":"bg-red-100 dark:bg-red-900/50"])},[(Fe(),ys(qo(w.event_type==="clock_in"?Xe(tp):Xe(np)),{class:_n(["w-8 h-8",w.event_type==="clock_in"?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400"])},null,8,["class"]))],2),Y("div",Ux,[Y("div",Wx,Ce(g.$t(w.event_type)),1),Y("div",Vx,Ce(w.qrCodeUsedName),1)]),Y("div",Hx,[Y("div",Gx,Ce(new Date(w.timestamp).toLocaleDateString()),1),Y("div",jx,Ce(new Date(w.timestamp).toLocaleTimeString()),1)])]))),128))])):(Fe(),Ge("div",Mx,[st(Xe(y1),{class:"w-16 h-16 text-gray-400 dark:text-gray-500 mx-auto mb-4"}),Y("h2",Fx,Ce(g.$t("noClockHistory")),1),Y("p",$x,Ce(g.$t("clockHistoryEmptyState")),1)]))])]))}},Yx={class:"mobile-viewport bg-gray-100 dark:bg-gray-900 min-h-screen"},Kx={class:"fixed left-0 right-0 top-0 z-50 bg-blue-600 text-white shadow-lg"},zx={class:"px-4 py-6",style:{"padding-top":"calc(var(--safe-area-inset-top) + 1.5rem)"}},qx={class:"flex items-center"},Qx={class:"text-3xl font-bold"},Zx={class:"main-with-fixed-header-and-nav px-4 py-8"},Jx={class:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-8 w-full max-w-lg mx-auto mt-8"},ew={key:0,class:"bg-green-100 dark:bg-green-900 border-l-4 border-green-500 text-green-700 dark:text-green-300 p-4 rounded-lg"},tw={key:1,class:"bg-red-100 dark:bg-red-900 border-l-4 border-red-500 text-red-700 dark:text-red-300 p-4 rounded-lg"},nw={for:"currentPassword",class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"},rw={for:"newPassword",class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"},sw={for:"confirmPassword",class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"},ow=["disabled"],iw={__name:"ChangePasswordView",setup(t){const r=Qr(),o=gt({currentPassword:"",newPassword:"",confirmPassword:""}),l=gt(!1),u=gt(""),f=gt(""),g=async()=>{if(u.value="",f.value="",o.value.newPassword!==o.value.confirmPassword){u.value="passwordsNoMatch";return}if(o.value.newPassword.length<6){u.value="passwordTooShort";return}l.value=!0;try{const w=await tr("/api/worker/change-password",{method:"PUT",body:JSON.stringify({currentPassword:o.value.currentPassword,newPassword:o.value.newPassword})});if(!w.ok){const x=await w.json();w.status===401?u.value="invalidCurrentPassword":u.value=x.message||"passwordUpdateError";return}f.value="passwordUpdated",o.value={currentPassword:"",newPassword:"",confirmPassword:""}}catch(w){u.value=w.message||"passwordUpdateError"}finally{l.value=!1}},p=()=>{r.back()};return(w,x)=>(Fe(),Ge("div",Yx,[Y("header",Kx,[Y("div",zx,[Y("div",qx,[Y("button",{onClick:p,class:"mr-4 p-2 hover:bg-blue-700 rounded-lg transition-colors"},[st(Xe(ac),{class:"w-6 h-6"})]),Y("h1",Qx,Ce(w.$t("changePasswordTitle")),1)])])]),Y("main",Zx,[Y("div",Jx,[Y("form",{onSubmit:vd(g,["prevent"]),class:"space-y-6"},[f.value?(Fe(),Ge("div",ew,Ce(w.$t(f.value)),1)):xn("",!0),u.value?(Fe(),Ge("div",tw,Ce(w.$t(u.value)),1)):xn("",!0),Y("div",null,[Y("label",nw,Ce(w.$t("currentPassword")),1),Rr(Y("input",{type:"password",id:"currentPassword","onUpdate:modelValue":x[0]||(x[0]=A=>o.value.currentPassword=A),required:"",class:"w-full px-4 py-3 text-gray-700 dark:text-gray-200 bg-gray-50 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"},null,512),[[Js,o.value.currentPassword]])]),Y("div",null,[Y("label",rw,Ce(w.$t("newPassword")),1),Rr(Y("input",{type:"password",id:"newPassword","onUpdate:modelValue":x[1]||(x[1]=A=>o.value.newPassword=A),required:"",class:"w-full px-4 py-3 text-gray-700 dark:text-gray-200 bg-gray-50 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"},null,512),[[Js,o.value.newPassword]])]),Y("div",null,[Y("label",sw,Ce(w.$t("confirmNewPassword")),1),Rr(Y("input",{type:"password",id:"confirmPassword","onUpdate:modelValue":x[2]||(x[2]=A=>o.value.confirmPassword=A),required:"",class:"w-full px-4 py-3 text-gray-700 dark:text-gray-200 bg-gray-50 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"},null,512),[[Js,o.value.confirmPassword]])]),Y("button",{type:"submit",disabled:l.value,class:"w-full py-3 text-lg font-semibold text-white bg-blue-600 rounded-lg hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-transform transform hover:scale-105 disabled:opacity-60 disabled:cursor-not-allowed shadow-md"},Ce(l.value?w.$t("updating"):w.$t("updatePassword")),9,ow)],32)])])]))}},aw={class:"mobile-viewport bg-gray-100 min-h-screen"},cw={class:"fixed-header-safe bg-blue-600 text-white shadow-lg"},lw={class:"px-4 py-6"},uw={class:"text-3xl font-bold text-center"},dw={class:"main-with-fixed-header-and-nav px-4 py-8 space-y-4"},fw={class:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg overflow-hidden mt-8"},hw={class:"w-12 h-12 bg-blue-100 rounded-xl flex items-center justify-center mr-5"},gw={class:"flex-grow"},mw={class:"font-semibold text-lg text-gray-900"},pw={class:"text-sm text-gray-500"},xw={class:"w-12 h-12 bg-orange-100 rounded-xl flex items-center justify-center mr-5"},ww={class:"flex-grow"},yw={class:"font-semibold text-lg text-gray-900"},Cw={class:"text-sm text-gray-500"},Ew={class:"flex items-center p-5"},Aw={class:"w-12 h-12 bg-purple-100 rounded-xl flex items-center justify-center mr-5"},bw={class:"flex-grow"},_w={class:"font-semibold text-lg text-gray-900 mb-2"},Iw={value:"en"},Sw={value:"ms"},Tw={value:"tm"},vw={value:"bd"},kw={value:"my"},Nw={value:"np"},Rw={class:"bg-white rounded-2xl shadow-lg p-6"},Ow={class:"font-semibold text-lg text-gray-900 mb-4"},Dw={class:"space-y-3"},Pw={class:"flex justify-between"},Lw={class:"text-gray-600"},Mw={class:"flex justify-between"},Fw={class:"text-gray-600"},$w={class:"font-medium text-gray-900"},Bw={class:"w-12 h-12 bg-red-100 rounded-xl flex items-center justify-center mr-5"},Uw={class:"flex-grow text-left"},Ww={class:"font-semibold text-lg text-red-600"},Vw={class:"text-sm text-red-500"},Hw={__name:"SettingsView",setup(t){const{locale:r}=xr(),o=Qr(),l=gt(r.value);qr(()=>{const g=localStorage.getItem("lang");g&&(l.value=g)});const u=()=>{r.value=l.value,localStorage.setItem("lang",l.value)},f=async()=>{try{await Mt.logout(),await Qt.onUserLogout(),sessionStorage.removeItem("userId"),sessionStorage.removeItem("userRole"),sessionStorage.removeItem("token"),o.push("/")}catch(g){console.error("Logout error:",g),sessionStorage.clear(),o.push("/")}};return(g,p)=>{const w=td("router-link");return Fe(),Ge("div",aw,[Y("header",cw,[Y("div",lw,[Y("h1",uw,Ce(g.$t("setting")),1)])]),Y("main",dw,[Y("div",fw,[st(w,{to:"/worker/history",class:"flex items-center p-5 border-b border-gray-200 hover:bg-gray-50 transition-colors"},{default:oo(()=>[Y("div",hw,[st(Xe(y1),{class:"w-8 h-8 text-blue-600"})]),Y("div",gw,[Y("h3",mw,Ce(g.$t("clockHistory")),1),Y("p",pw,Ce(g.$t("viewMyClockHistory")),1)]),st(Xe(au),{class:"w-6 h-6 text-gray-400"})]),_:1}),st(w,{to:"/worker/change-password",class:"flex items-center p-5 border-b border-gray-200 hover:bg-gray-50 transition-colors"},{default:oo(()=>[Y("div",xw,[st(Xe(ap),{class:"w-8 h-8 text-orange-600"})]),Y("div",ww,[Y("h3",yw,Ce(g.$t("changePassword")),1),Y("p",Cw,Ce(g.$t("updateYourPassword")),1)]),st(Xe(au),{class:"w-6 h-6 text-gray-400"})]),_:1}),Y("div",Ew,[Y("div",Aw,[st(Xe(ip),{class:"w-8 h-8 text-purple-600"})]),Y("div",bw,[Y("h3",_w,Ce(g.$t("language")),1),Rr(Y("select",{"onUpdate:modelValue":p[0]||(p[0]=x=>l.value=x),onChange:u,class:"w-full px-4 py-3 border border-gray-300 bg-white text-gray-900 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"},[Y("option",Iw,Ce(g.$t("english")),1),Y("option",Sw,Ce(g.$t("malay")),1),Y("option",Tw,Ce(g.$t("tamil")),1),Y("option",vw,Ce(g.$t("bengali")),1),Y("option",kw,Ce(g.$t("burmese")),1),Y("option",Nw,Ce(g.$t("nepali")),1)],544),[[Eh,l.value]])])])]),Y("div",Rw,[Y("h3",Ow,Ce(g.$t("appInformation")),1),Y("div",Dw,[Y("div",Pw,[Y("span",Lw,Ce(g.$t("version")),1),p[1]||(p[1]=Y("span",{class:"font-medium text-gray-900"},"1.0.0",-1))]),Y("div",Mw,[Y("span",Fw,Ce(g.$t("platform")),1),Y("span",$w,Ce(g.$t("android")),1)])])]),Y("button",{onClick:f,class:"w-full flex items-center justify-center p-5 bg-white rounded-2xl shadow-lg hover:bg-red-50 transition-colors"},[Y("div",Bw,[st(Xe(w1),{class:"w-8 h-8 text-red-600"})]),Y("div",Uw,[Y("h3",Ww,Ce(g.$t("logout")),1),Y("p",Vw,Ce(g.$t("signOutOfAccount")),1)])])])])}}},Gw={class:"mobile-viewport bg-gray-100 flex flex-col overflow-hidden"},jw={class:"fixed left-0 right-0 top-0 z-50 bg-blue-600 text-white shadow-lg"},Xw={class:"px-4 py-6",style:{"padding-top":"calc(var(--safe-area-inset-top) + 1.5rem)"}},Yw={class:"flex items-center"},Kw={class:"text-3xl font-bold"},zw={class:"px-4 py-8 space-y-8 mt-[calc(100px+env(safe-area-inset-top))]"},qw={class:"bg-white rounded-2xl shadow-lg p-6 mt-8"},Qw={class:"space-y-2"},Zw={class:"flex items-center justify-between"},Jw={class:"text-sm text-gray-600 dark:text-gray-300"},e3={class:"flex items-center justify-between"},t3={class:"text-sm text-gray-600 dark:text-gray-300"},n3={class:"flex items-center gap-2"},r3={class:"flex items-center justify-between"},s3={class:"text-sm text-gray-600 dark:text-gray-300"},o3={class:"flex items-center justify-between"},i3={class:"text-sm text-gray-600 dark:text-gray-300"},a3={class:"flex items-center gap-2"},c3=["disabled"],l3={key:0,class:"flex items-center justify-between"},u3={class:"text-sm text-gray-600 dark:text-gray-300"},d3={class:"text-xs text-gray-500 dark:text-gray-400"},f3={key:1,class:"flex items-center justify-between"},h3={class:"text-sm text-gray-600 dark:text-gray-300"},g3={class:"text-xs text-gray-500 dark:text-gray-400 font-mono"},m3={class:"mt-6 flex justify-end"},p3=["disabled"],x3={key:0,class:"mt-4 p-4 bg-red-100 text-red-700 rounded-xl text-sm"},w3={key:1,class:"mt-4 p-4 bg-green-100 text-green-700 rounded-xl text-sm"},y3={__name:"NativeServicesStatus",setup(t){const{t:r}=xr(),o=Qr(),l=gt({}),u=gt(!1),f=gt(!1),g=gt(""),p=gt(""),w=sn.isNativePlatform(),x=ht(()=>l.value.isInitialized?"text-green-500 text-sm":"text-red-500 text-sm"),A=ht(()=>l.value.isInitialized?r("ready"):r("notInitialized")),C=ht(()=>{var k,re;return w?(re=(k=l.value.services)==null?void 0:k.location)!=null&&re.tracking?"text-green-500 text-sm":"text-red-500 text-sm":"text-gray-500 text-sm"}),I=ht(()=>{var k,re;return w?(re=(k=l.value.services)==null?void 0:k.location)!=null&&re.tracking?r("active"):r("inactive"):r("webOnly")}),O=ht(()=>{var k,re;return(re=(k=l.value.services)==null?void 0:k.deviceUuid)!=null&&re.uuid?"text-green-500 text-sm":"text-yellow-500 text-sm"}),z=ht(()=>{var k,re;return(re=(k=l.value.services)==null?void 0:k.deviceUuid)!=null&&re.uuid?r("registered"):r("pending")}),U=ht(()=>{var K,Te;const k=(Te=(K=l.value.services)==null?void 0:K.antiSpoofing)==null?void 0:Te.lastCheck;return!k||(Date.now()-new Date(k).getTime())/(1e3*60*60)>24?"text-yellow-500 text-sm":"text-green-500 text-sm"}),te=ht(()=>{var K,Te;const k=(Te=(K=l.value.services)==null?void 0:K.antiSpoofing)==null?void 0:Te.lastCheck;return k?(Date.now()-new Date(k).getTime())/(1e3*60*60)>24?r("outdated"):r("current"):r("notChecked")}),L=async()=>{u.value=!0,g.value="";try{l.value=Qt.getServiceStatus()}catch(k){console.error("Failed to refresh status:",k),g.value=r("failedToRefreshStatus")}finally{u.value=!1}},W=async()=>{try{g.value="",p.value="",await Qt.startServices(),p.value=r("locationTrackingStarted"),await L()}catch(k){console.error("Failed to start location tracking:",k),g.value=r("failedToStartLocationTracking")}},V=async()=>{f.value=!0,g.value="",p.value="";try{await Qt.forceSecurityCheck(),p.value=r("securityCheckComplete"),await L()}catch(k){console.error("Security check failed:",k),g.value=r("securityCheckFailed")}finally{f.value=!1}},F=k=>{if(!k)return r("never");const re=new Date(k),Te=Math.floor((new Date-re)/(1e3*60));if(Te<1)return r("justNow");if(Te<60)return r("minutesAgo",{minutes:Te});const ke=Math.floor(Te/60);if(ke<24)return r("hoursAgo",{hours:ke});const de=Math.floor(ke/24);return r("daysAgo",{days:de})},ce=()=>{g.value="",p.value=""},se=()=>{o.back()};return qr(async()=>{await L(),setInterval(L,3e4),setInterval(ce,5e3)}),(k,re)=>{var K,Te,ke,de,Se,Ke;return Fe(),Ge("div",Gw,[Y("header",jw,[Y("div",Xw,[Y("div",Yw,[Y("button",{onClick:se,class:"mr-4 p-2 hover:bg-blue-700 rounded-lg transition-colors"},[st(Xe(ac),{class:"w-6 h-6"})]),Y("h1",Kw,Ce(k.$t("servicesStatus")),1)])])]),Y("main",zw,[Y("div",qw,[Y("div",Qw,[Y("div",Zw,[Y("span",Jw,Ce(k.$t("overallStatus")),1),Y("span",{class:_n(x.value)},Ce(A.value),3)]),Y("div",e3,[Y("span",t3,Ce(k.$t("locationTracking")),1),Y("div",n3,[Y("span",{class:_n(C.value)},Ce(I.value),3),Xe(w)&&!((Te=(K=l.value.services)==null?void 0:K.location)!=null&&Te.tracking)?(Fe(),Ge("button",{key:0,onClick:W,class:"text-xs bg-blue-500 text-white px-2 py-1 rounded hover:bg-blue-600"},Ce(k.$t("start")),1)):xn("",!0)])]),Y("div",r3,[Y("span",s3,Ce(k.$t("deviceRegistration")),1),Y("span",{class:_n(O.value)},Ce(z.value),3)]),Y("div",o3,[Y("span",i3,Ce(k.$t("securityStatus")),1),Y("div",a3,[Y("span",{class:_n(U.value)},Ce(te.value),3),Y("button",{onClick:V,disabled:f.value,class:"text-xs bg-green-500 text-white px-2 py-1 rounded hover:bg-green-600 disabled:opacity-50"},Ce(f.value?k.$t("checking"):k.$t("check")),9,c3)])]),(de=(ke=l.value.services)==null?void 0:ke.location)!=null&&de.lastUpdate?(Fe(),Ge("div",l3,[Y("span",u3,Ce(k.$t("lastLocationUpdate")),1),Y("span",d3,Ce(F(l.value.services.location.lastUpdate)),1)])):xn("",!0),(Ke=(Se=l.value.services)==null?void 0:Se.deviceUuid)!=null&&Ke.uuid?(Fe(),Ge("div",f3,[Y("span",h3,Ce(k.$t("deviceId")),1),Y("span",g3,Ce(l.value.services.deviceUuid.uuid.substring(0,8))+"... ",1)])):xn("",!0)]),Y("div",m3,[Y("button",{onClick:L,disabled:u.value,class:"bg-blue-600 text-white px-6 py-3 rounded-xl hover:bg-blue-700 disabled:opacity-50 font-medium"},Ce(u.value?k.$t("refreshing"):k.$t("refresh")),9,p3)]),g.value?(Fe(),Ge("div",x3,Ce(g.value),1)):xn("",!0),p.value?(Fe(),Ge("div",w3,Ce(p.value),1)):xn("",!0)])])])}}},C3=Ei(y3,[["__scopeId","data-v-208d910c"]]),_1=Ng({history:ig(),routes:[{path:"/",name:"login",component:Fp},{path:"/worker/dashboard",name:"worker-dashboard",component:kx,meta:{requiresAuth:!0,role:"worker"}},{path:"/worker/history",name:"worker-history",component:Xx,meta:{requiresAuth:!0,role:"worker"}},{path:"/worker/change-password",name:"worker-change-password",component:iw,meta:{requiresAuth:!0,role:"worker"}},{path:"/worker/services-status",name:"worker-services-status",component:C3,meta:{requiresAuth:!0,role:"worker"}},{path:"/worker/settings",name:"worker-settings",component:Hw,meta:{requiresAuth:!0,role:"worker"}}]});_1.beforeEach(async(t,r,o)=>{const l=await Mt.isAuthenticated();let u=await Mt.getUserRole();u||(u=sessionStorage.getItem("userRole")),console.log("🛡️ ROUTER GUARD:",{to:t.path,from:r.path,isAuthenticated:l,userRole:u,requiresAuth:t.meta.requiresAuth,requiredRole:t.meta.role}),t.meta.requiresAuth?l?t.meta.role&&t.meta.role===u?(console.log("✅ ACCESS GRANTED - Correct role"),o()):u==="worker"?(console.log("🔄 REDIRECTING WORKER to dashboard"),o("/worker/dashboard")):(console.log("❌ NON-WORKER ACCESS DENIED - Worker client app only"),o("/")):(console.log("❌ NOT AUTHENTICATED - Redirecting to login"),o("/")):(console.log("✅ PUBLIC ROUTE - Allowing access"),o())});const E3="Attendance System",A3="Logout",b3="Login",_3="Username",I3="Password",S3="Logging in...",T3="Language",v3="Failed to connect to the server.",k3="Invalid token received from server.",N3="Invalid username or password.",R3="English",O3="Malay",D3="Tamil",P3="Bengali",L3="Burmese",M3="Nepali",F3="Status",$3="Clocked In",B3="Clocked Out",U3="Clock In",W3="Clock Out",V3="Clock In",H3="Clock Out",G3="Scan to Clock {action}",j3="Out",X3="Cancel",Y3="View My Clock History",K3="Change My Password",z3="My Clock History",q3="Back to Dashboard",Q3="You have no clocking history.",Z3="Failed to fetch clock history:",J3="View My Clock History",ey="Change My Password",ty="Invalid current password.",ny="Successfully clocked in.",ry="Successfully clocked out.",sy="Could not detect a QR code. Please try again.",oy="Unable to retrieve your location: {message}. Please enable location services.",iy="Successfully clocked at {location}.",ay="Change Password",cy="Current Password",ly="New Password",uy="Confirm New Password",dy="Updating...",fy="Personnel",hy="Attendance",gy="QR Codes",my="Upload QR Image",py="Could not load worker information",xy="Could not verify current status from server",wy="Successfully clocked {action} at",yy="site",Cy="Error occurred",Ey="Unable to start camera.",Ay="Try Again",by="QR Code detected. Getting location...",_y="Geolocation is not supported by your browser.",Iy="Unable to retrieve your location: {message}. Please enable location services.",Sy="Could not detect a QR code. Please try again.",Ty="Update Password",vy="New passwords do not match.",ky="New password must be at least 6 characters long.",Ny="Password updated successfully! You can now use your new password to log in.",Ry="An error occurred while updating the password.",Oy="Attendance Log for",Dy="Add Manual Clock-Out",Py="Use this form if the worker forgot to clock out. The last event must be a clock-in.",Ly="Clock-Out Time",My='Reason (e.g., "Forgot to clock out")',Fy="Enter a brief note",$y="Add Record",By="Start Date",Uy="End Date",Wy="Filter Records",Vy="Event",Hy="Timestamp",Gy="Location Name",jy="Coordinates",Xy="Notes",Yy="No records found for this period.",Ky="Show on map",zy="N/A",qy="Please select a timestamp for the clock-out.",Qy="Please provide a reason/note for the manual entry.",Zy="Manual clock-out recorded successfully!",Jy="An error occurred: {message}",eC="1. Select Workers",tC="Search for a worker...",nC="Select All",rC="Add all workers from a tag",sC="-- Choose a tag --",oC="Add by Tag",iC="Selected for Report ({count})",aC="All Workers ({count}) Selected",cC="No workers selected.",lC="2. Report Settings",uC="Setting",dC="Monthly Salary (RM)",fC="Applied to all selected workers.",hC="e.g., 3000",gC="OT Factors",mC="Weekend Factor",pC="Holiday Factor",xC="Select Public Holidays",wC="Generate Attendance & OT Report",yC="Overtime Pay Summary",CC="Export OT Summary (CSV)",EC="Worker",AC="Total Hours Worked",bC="Total OT Pay (RM)",_C="Raw Attendance Data",IC="Loading Report...",SC="Could not load workers for the selected tag.",TC="Please select workers, set valid date range, and enter a salary.",vC="An error occurred while generating the report.",kC="Add New User",NC="Full Name",RC="e.g. John Smith",OC="e.g. jsmith",DC="e.g. 123456",PC="As Manager",LC="Adding...",MC="Add User",FC="Manage Tags",$C="Create New Tag",BC="e.g. Team",UC="Create Tag",WC="Tags",VC="Worker Roster",HC="Search by name or username",GC="Filter by tag",jC="Clear filter",XC="Date Joined",YC="Actions",KC="Edit Tags",zC="View Records",qC="Loading workers...",QC="No workers found.",ZC="Previous",JC="Next",eE="Page {current} of {total}",tE="No tags available.",nE="Done",rE="Bulk Edit Tags",sE="Clear Selection",oE="For user",iE="Save Password",aE="Saving...",cE="Failed to update tags. Please try again.",lE="Tag deleted successfully.",uE="Failed to fetch workers.",dE="Failed to load page data.",fE="An error occurred while adding the user.",hE="Failed to delete worker.",gE="Are you sure you want to delete this worker account?",mE="Are you sure you want to delete this tag? This will remove it from all workers.",pE="Failed to delete tag.",xE="Passwords do not match.",wE="Create New QR Code",yE="QR Code Name",CE="e.g., 'West Gate Entrance'",EE="Create",AE="New Code Created!",bE="Save this image or use the ID below. This will disappear on refresh.",_E="ID",IE="Existing QR Codes",SE="Name",TE="Status",vE="Deactivate",kE="Activate",NE="Download",RE="No QR codes found. Create one above!",OE="Are you sure you want to delete this QR code? This cannot be undone.",DE="Sorry, the QR code could not be downloaded.",PE="Remember me for auto-login",LE="This device is not authorized for your account. Please contact your administrator.",ME="Location tracking is active in the background",FE="Performing security check...",$E="Security check completed successfully",BE="High security risk detected. Please contact your administrator.",UE="Device registered successfully",WE="Auto-login enabled for this device",VE="Background location tracking enabled",HE="Location permissions are required for attendance tracking",GE="Please disable battery optimization for this app to ensure continuous location tracking",jE="GPS spoofing application detected. This may affect attendance accuracy.",XE="Mock location is enabled. Please disable it for accurate attendance tracking.",YE="Device security warning: Suspicious applications detected",KE="Failed to update location. Will retry automatically.",zE="Initializing native services...",qE="All services are ready",QE="Auto-login failed. Please log in manually.",ZE="Device validation failed. Please contact support.",JE="Services Status",eA="Overall Status",tA="Location Tracking",nA="Device Registration",rA="Security Status",sA="Last Location Update",oA="Device ID",iA="Start",aA="Check",cA="Checking...",lA="Refresh",uA="Refreshing...",dA="Not Initialized",fA="Ready",hA="Web Only",gA="Active",mA="Inactive",pA="Registered",xA="Pending",wA="Not Checked",yA="Outdated",CA="Current",EA="Never",AA="Just now",bA="{minutes}m ago",_A="{hours}h ago",IA="{days}d ago",SA="Failed to refresh status",TA="Location tracking started successfully",vA="Failed to start location tracking",kA="Security check failed",NA="Personal",RA="Clock History",OA="Open Camera",DA="Scan QR Code",PA="Services",LA="System services and security status",MA="Update your account password",FA="Sign out of your account",$A="Work Location Tracking",BA="Location tracking active for work attendance",UA="Monitoring location for work attendance",WA="App Information",VA="Version",HA="Platform",GA="Android",jA="Web",XA="Dark Mode",YA="Enable dark mode",KA="Disable dark mode",I1={appTitle:E3,logout:A3,login:b3,username:_3,password:I3,loggingIn:S3,language:T3,failedConnection:v3,invalidToken:k3,invalidCredentials:N3,english:R3,malay:O3,tamil:D3,bengali:P3,burmese:L3,nepali:M3,yourStatus:F3,clockedIn:$3,clockedOut:B3,clockIn:U3,clockOut:W3,clock_in:V3,clock_out:H3,scanToClock:G3,in:"In",out:j3,cancel:X3,viewMyClockHistory:Y3,changeMyPassword:K3,myClockHistory:z3,backToDashboard:q3,noClockHistory:Q3,clockHistoryFetchFail:Z3,viewClockHistory:J3,changePassword:ey,invalidCurrentPassword:ty,successClockIn:ny,successClockOut:ry,qrFail:sy,geoFail:oy,successClock:iy,changePasswordTitle:ay,currentPassword:cy,newPassword:ly,confirmNewPassword:uy,updating:dy,tabPersonnel:fy,tabAttendance:hy,tabQrCodes:gy,uploadQrImage:my,couldNotLoadWorkerInfo:py,couldNotVerifyStatus:xy,successfullyClocked:wy,site:yy,errorOccurred:Cy,unableToStartCamera:Ey,tryAgain:Ay,qrDetectedGettingLocation:by,geolocationNotSupported:_y,unableToRetrieveLocation:Iy,qrNotDetectedTryAgain:Sy,updatePassword:Ty,passwordsNoMatch:vy,passwordTooShort:ky,passwordUpdated:Ny,passwordUpdateError:Ry,attendanceLogFor:Oy,addManualClockOut:Dy,manualClockOutInstruction:Py,clockOutTime:Ly,reason:My,enterBriefNote:Fy,addRecord:$y,startDate:By,endDate:Uy,filterRecords:Wy,event:Vy,timestamp:Hy,locationName:Gy,coordinates:jy,notes:Xy,noRecordsFound:Yy,showOnMap:Ky,nA:zy,pleaseSelectTimestamp:qy,pleaseProvideReason:Qy,manualClockOutSuccess:Zy,manualClockOutError:Jy,selectWorkers:eC,searchWorkerPlaceholder:tC,selectAll:nC,addWorkersByTag:rC,chooseTag:sC,addByTag:oC,selectedForReport:iC,allWorkersSelected:aC,noWorkersSelected:cC,reportSettings:lC,setting:uC,monthlySalary:dC,salaryAppliedNote:fC,salaryPlaceholder:hC,otFactors:gC,weekendFactor:mC,holidayFactor:pC,selectPublicHolidays:xC,generateReport:wC,overtimePaySummary:yC,exportOtSummary:CC,worker:EC,totalHoursWorked:AC,totalOtPay:bC,rawAttendanceData:_C,loadingReport:IC,tagLoadError:SC,generateReportError:TC,reportGenerationError:vC,addNewUser:kC,fullName:NC,egJohnSmith:RC,egJsmith:OC,eg123456:DC,asManager:PC,adding:LC,addUser:MC,manageTags:FC,createNewTag:$C,egTeam:BC,createTag:UC,tags:WC,workerRoster:VC,searchByNameOrUsername:HC,filterByTag:GC,clearFilter:jC,dateJoined:XC,actions:YC,editTags:KC,viewRecords:zC,delete:"Delete",loadingWorkers:qC,noWorkersFound:QC,previous:ZC,next:JC,pageOf:eE,noTagsAvailable:tE,done:nE,bulkEditTags:rE,clearSelection:sE,forUser:oE,savePassword:iE,saving:aE,failedToUpdateTags:cE,tagDeleted:lE,failedToFetchWorkers:uE,failedToLoadPageData:dE,errorAddingUser:fE,failedToDeleteWorker:hE,areYouSureDeleteWorker:gE,areYouSureDeleteTag:mE,failedToDeleteTag:pE,passwordsDoNotMatch:xE,createQrCode:wE,qrCodeName:yE,qrNamePlaceholder:CE,create:EE,newCodeCreated:AE,saveQrInstruction:bE,id:_E,existingQrCodes:IE,name:SE,status:TE,deactivate:vE,activate:kE,download:NE,noQrCodesFound:RE,deleteQrConfirm:OE,qrDownloadError:DE,rememberMe:PE,deviceNotAuthorized:LE,locationTrackingActive:ME,securityCheckInProgress:FE,securityCheckComplete:$E,highSecurityRisk:BE,deviceRegistered:UE,autoLoginEnabled:WE,backgroundLocationEnabled:VE,permissionsRequired:HE,batteryOptimizationWarning:GE,gpsSpooferDetected:jE,mockLocationEnabled:XE,deviceSecurityWarning:YE,locationUpdateFailed:KE,servicesInitializing:zE,servicesReady:qE,autoLoginFailed:QE,deviceValidationFailed:ZE,servicesStatus:JE,overallStatus:eA,locationTracking:tA,deviceRegistration:nA,securityStatus:rA,lastLocationUpdate:sA,deviceId:oA,start:iA,check:aA,checking:cA,refresh:lA,refreshing:uA,notInitialized:dA,ready:fA,webOnly:hA,active:gA,inactive:mA,registered:pA,pending:xA,notChecked:wA,outdated:yA,current:CA,never:EA,justNow:AA,minutesAgo:bA,hoursAgo:_A,daysAgo:IA,failedToRefreshStatus:SA,locationTrackingStarted:TA,failedToStartLocationTracking:vA,securityCheckFailed:kA,personal:NA,clockHistory:RA,openCamera:OA,scanQRCode:DA,services:PA,systemServicesStatus:LA,updateYourPassword:MA,signOutOfAccount:FA,workLocationTracking:$A,locationTrackingForAttendance:BA,monitoringLocation:UA,appInformation:WA,version:VA,platform:HA,android:GA,web:jA,darkMode:XA,enableDarkMode:YA,disableDarkMode:KA},zA="Sistem Kehadiran",qA="Log Keluar",QA="Log Masuk",ZA="Nama Pengguna",JA="Kata Laluan",eb="Sedang log masuk...",tb="Bahasa",nb="Gagal untuk berhubung dengan pelayan.",rb="Nama pengguna atau kata laluan tidak sah.",sb="Token tidak sah diterima dari pelayan.",ob="Inggeris",ib="Melayu",ab="Tamil",cb="Bengali",lb="Burma",ub="Nepal",db="Status Anda",fb="Sudah Masuk",hb="Sudah Keluar",gb="Masuk Kerja",mb="Keluar Kerja",pb="Masuk Kerja",xb="Keluar Kerja",wb="Imbas untuk {action} Kerja",yb="Keluar",Cb="Batal",Eb="Lihat Sejarah",Ab="Tukar Kata Laluan Saya",bb="Sejarah Kehadiran Saya",_b="Kembali ke Papan Pemuka",Ib="Tiada rekod kehadiran.",Sb="Gagal untuk dapatkan sejarah kehadiran:",Tb="Lihat Sejarah Kehadiran Saya",vb="Tukar Kata Laluan Saya",kb="Kata laluan semasa tidak sah.",Nb="Berjaya masuk kerja.",Rb="Berjaya keluar kerja.",Ob="Kod QR tidak dapat dikesan. Sila cuba lagi.",Db="Tidak dapat mengambil lokasi anda: {message}. Sila benarkan perkhidmatan lokasi.",Pb="Berjaya daftar di {location}.",Lb="Tukar Kata Laluan",Mb="Kata Laluan Semasa",Fb="Kata Laluan Baharu",$b="Sahkan Kata Laluan Baharu",Bb="Mengemaskini...",Ub="Tetapan",Wb="Personel",Vb="Kehadiran",Hb="Kod QR",Gb="Muat Naik Imej QR",jb="Tidak dapat memuatkan maklumat pekerja",Xb="Tidak dapat mengesahkan status semasa dari pelayan",Yb="Berjaya {action} di",Kb="tapak",zb="Ralat telah berlaku",qb="Tidak dapat menghidupkan kamera.",Qb="Cuba Lagi",Zb="Kod QR dikesan. Mengambil lokasi...",Jb="Geolokasi tidak disokong oleh pelayar anda.",e_="Tidak dapat mengambil lokasi anda: {message}. Sila benarkan perkhidmatan lokasi.",t_="Kod QR tidak dapat dikesan. Sila cuba lagi.",n_="Kemaskini Kata Laluan",r_="Kata laluan baharu tidak sepadan.",s_="Kata laluan baharu mesti sekurang-kurangnya 6 aksara.",o_="Kata laluan berjaya dikemaskini! Anda boleh guna kata laluan baharu untuk log masuk.",i_="Ralat semasa mengemaskini kata laluan.",a_="Log Kehadiran untuk",c_="Tambah Clock-Out Manual",l_="Gunakan borang ini jika pekerja lupa untuk clock-out. Acara terakhir mesti clock-in.",u_="Masa Clock-Out",d_='Sebab (cth: "Lupa clock-out")',f_="Masukkan nota ringkas",h_="Tambah Rekod",g_="Tarikh Mula",m_="Tarikh Tamat",p_="Tapis Rekod",x_="Acara",w_="Cap Masa",y_="Nama Lokasi",C_="Koordinat",E_="Nota",A_="Tiada rekod untuk tempoh ini.",b_="Papar di peta",__="Tiada",I_="Sila pilih cap masa untuk clock-out.",S_="Sila berikan sebab/nota untuk kemasukan manual.",T_="Clock-out manual berjaya direkod!",v_="Ralat berlaku: {message}",k_="1. Pilih Pekerja",N_="Cari pekerja...",R_="Pilih Semua",O_="Tambah semua pekerja berdasarkan tag",D_="-- Pilih tag --",P_="Tambah melalui Tag",L_="Dipilih untuk Laporan ({count})",M_="Semua Pekerja ({count}) Dipilih",F_="Tiada pekerja dipilih.",$_="2. Tetapan Laporan",B_="Gaji Bulanan (RM)",U_="Diguna untuk semua pekerja yang dipilih.",W_="cth: 3000",V_="Faktor OT",H_="Faktor Hujung Minggu",G_="Faktor Cuti Umum",j_="Pilih Cuti Umum",X_="Jana Laporan Kehadiran & OT",Y_="Ringkasan Bayaran OT",K_="Eksport Ringkasan OT (CSV)",z_="Pekerja",q_="Jumlah Jam Bekerja",Q_="Jumlah Bayaran OT (RM)",Z_="Data Kehadiran Mentah",J_="Memuatkan Laporan...",e4="Tidak dapat memuatkan pekerja untuk tag yang dipilih.",t4="Sila pilih pekerja, tetapkan tarikh, dan masukkan gaji.",n4="Ralat semasa menjana laporan.",r4="Tambah Pengguna Baharu",s4="Nama Penuh",o4="cth. John Smith",i4="cth. jsmith",a4="cth. 123456",c4="Sebagai Pengurus",l4="Sedang menambah...",u4="Tambah Pengguna",d4="Urus Tag",f4="Cipta Tag Baharu",h4="cth. Pasukan",g4="Cipta Tag",m4="Tag",p4="Senarai Pekerja",x4="Cari mengikut nama atau nama pengguna",w4="Tapis mengikut tag",y4="Padam tapisan",C4="Tarikh Sertai",E4="Tindakan",A4="Sunting Tag",b4="Lihat Rekod",_4="Memuatkan pekerja...",I4="Tiada pekerja dijumpai.",S4="Sebelum",T4="Seterusnya",v4="Halaman {current} daripada {total}",k4="Tiada tag tersedia.",N4="Selesai",R4="Sunting Tag Secara Berkumpulan",O4="Padam Pilihan",D4="Untuk pengguna",P4="Simpan Kata Laluan",L4="Menyimpan...",M4="Gagal mengemas kini tag. Sila cuba lagi.",F4="Tag berjaya dipadam.",$4="Gagal memuatkan pekerja.",B4="Gagal memuatkan data halaman.",U4="Ralat semasa menambah pengguna.",W4="Gagal memadam pekerja.",V4="Adakah anda pasti mahu memadam akaun pekerja ini?",H4="Adakah anda pasti mahu memadam tag ini? Ia akan dikeluarkan daripada semua pekerja.",G4="Gagal memadam tag.",j4="Kata laluan tidak sepadan.",X4="Cipta Kod QR Baharu",Y4="Nama Kod QR",K4="cth: 'Pintu Masuk Barat'",z4="Cipta",q4="Kod Baharu Telah Dicipta!",Q4="Simpan imej ini atau gunakan ID di bawah. Ini akan hilang selepas segar semula.",Z4="ID",J4="Kod QR Sedia Ada",e8="Nama",t8="Status",n8="Aktif",r8="Tidak Aktif",s8="Nyahaktif",o8="Aktifkan",i8="Muat Turun",a8="Tiada kod QR dijumpai. Sila cipta di atas!",c8="Adakah anda pasti ingin memadam kod QR ini? Tindakan ini tidak boleh diundur.",l8="Maaf, kod QR tidak dapat dimuat turun.",u8="Ingat saya untuk log masuk automatik",d8="Peranti ini tidak dibenarkan untuk akaun anda. Sila hubungi pentadbir.",f8="Penjejakan lokasi aktif di latar belakang",h8="Menjalankan pemeriksaan keselamatan...",g8="Pemeriksaan keselamatan selesai dengan jayanya",m8="Risiko keselamatan tinggi dikesan. Sila hubungi pentadbir anda.",p8="Peranti berjaya didaftarkan",x8="Log masuk automatik diaktifkan untuk peranti ini",w8="Penjejakan lokasi latar belakang diaktifkan",y8="Kebenaran lokasi diperlukan untuk penjejakan kehadiran",C8="Sila lumpuhkan pengoptimuman bateri untuk aplikasi ini bagi memastikan penjejakan lokasi berterusan",E8="Aplikasi pemalsuan GPS dikesan. Ini mungkin menjejaskan ketepatan kehadiran.",A8="Lokasi palsu diaktifkan. Sila lumpuhkannya untuk penjejakan kehadiran yang tepat.",b8="Amaran keselamatan peranti: Aplikasi mencurigakan dikesan",_8="Gagal mengemas kini lokasi. Akan cuba semula secara automatik.",I8="Memulakan perkhidmatan asli...",S8="Semua perkhidmatan sedia",T8="Log masuk automatik gagal. Sila log masuk secara manual.",v8="Pengesahan peranti gagal. Sila hubungi sokongan.",k8="Peribadi",N8="Sejarah Kehadiran",R8="Buka Kamera",O8="Imbas Kod QR",D8="Perkhidmatan",P8="Status perkhidmatan sistem dan keselamatan",L8="Kemas Kini Kata Laluan",M8="Keluar Akaun",F8="Status Perkhidmatan",$8="Status Keseluruhan",B8="Penjejakan Lokasi",U8="Pendaftaran Peranti",W8="Status Keselamatan",V8="Kemaskini Lokasi Terakhir",H8="ID Peranti",G8="Mula",j8="Periksa",X8="Memeriksa...",Y8="Segar Semula",K8="Menyegar Semula...",z8="Tidak Dimulakan",q8="Sedia",Q8="Web Sahaja",Z8="Didaftarkan",J8="Menunggu",eI="Tidak Diperiksa",tI="Lapuk",nI="Semasa",rI="Tidak Pernah",sI="Baru Sahaja",oI="{minutes}m lalu",iI="{hours}j lalu",aI="{days}h lalu",cI="Gagal menyegar semula status",lI="Penjejakan lokasi dimulakan dengan jayanya",uI="Gagal memulakan penjejakan lokasi",dI="Pemeriksaan keselamatan gagal",fI="Penjejakan Lokasi Kerja",hI="Penjejakan lokasi aktif untuk kehadiran kerja",gI="Memantau lokasi untuk kehadiran kerja",mI="Gagal untuk mengesahkan status semasa dari pelayan.",pI="Maklumat Aplikasi",xI="Versi",wI="Platform",yI="Android",CI="Web",EI="Mod Gelap",AI="Aktifkan mod gelap",bI="Nyahaktifkan mod gelap",S1={appTitle:zA,logout:qA,login:QA,username:ZA,password:JA,loggingIn:eb,language:tb,failedConnection:nb,invalidCredentials:rb,invalidToken:sb,english:ob,malay:ib,tamil:ab,bengali:cb,burmese:lb,nepali:ub,yourStatus:db,clockedIn:fb,clockedOut:hb,clockIn:gb,clockOut:mb,clock_in:pb,clock_out:xb,scanToClock:wb,in:"Masuk",out:yb,cancel:Cb,viewMyClockHistory:Eb,changeMyPassword:Ab,myClockHistory:bb,backToDashboard:_b,noClockHistory:Ib,clockHistoryFetchFail:Sb,viewClockHistory:Tb,changePassword:vb,invalidCurrentPassword:kb,successClockIn:Nb,successClockOut:Rb,qrFail:Ob,geoFail:Db,successClock:Pb,changePasswordTitle:Lb,currentPassword:Mb,newPassword:Fb,confirmNewPassword:$b,updating:Bb,setting:Ub,tabPersonnel:Wb,tabAttendance:Vb,tabQrCodes:Hb,uploadQrImage:Gb,couldNotLoadWorkerInfo:jb,couldNotVerifyStatus:Xb,successfullyClocked:Yb,site:Kb,errorOccurred:zb,unableToStartCamera:qb,tryAgain:Qb,qrDetectedGettingLocation:Zb,geolocationNotSupported:Jb,unableToRetrieveLocation:e_,qrNotDetectedTryAgain:t_,updatePassword:n_,passwordsNoMatch:r_,passwordTooShort:s_,passwordUpdated:o_,passwordUpdateError:i_,attendanceLogFor:a_,addManualClockOut:c_,manualClockOutInstruction:l_,clockOutTime:u_,reason:d_,enterBriefNote:f_,addRecord:h_,startDate:g_,endDate:m_,filterRecords:p_,event:x_,timestamp:w_,locationName:y_,coordinates:C_,notes:E_,noRecordsFound:A_,showOnMap:b_,nA:__,pleaseSelectTimestamp:I_,pleaseProvideReason:S_,manualClockOutSuccess:T_,manualClockOutError:v_,selectWorkers:k_,searchWorkerPlaceholder:N_,selectAll:R_,addWorkersByTag:O_,chooseTag:D_,addByTag:P_,selectedForReport:L_,allWorkersSelected:M_,noWorkersSelected:F_,reportSettings:$_,monthlySalary:B_,salaryAppliedNote:U_,salaryPlaceholder:W_,otFactors:V_,weekendFactor:H_,holidayFactor:G_,selectPublicHolidays:j_,generateReport:X_,overtimePaySummary:Y_,exportOtSummary:K_,worker:z_,totalHoursWorked:q_,totalOtPay:Q_,rawAttendanceData:Z_,loadingReport:J_,tagLoadError:e4,generateReportError:t4,reportGenerationError:n4,addNewUser:r4,fullName:s4,egJohnSmith:o4,egJsmith:i4,eg123456:a4,asManager:c4,adding:l4,addUser:u4,manageTags:d4,createNewTag:f4,egTeam:h4,createTag:g4,tags:m4,workerRoster:p4,searchByNameOrUsername:x4,filterByTag:w4,clearFilter:y4,dateJoined:C4,actions:E4,editTags:A4,viewRecords:b4,delete:"Padam",loadingWorkers:_4,noWorkersFound:I4,previous:S4,next:T4,pageOf:v4,noTagsAvailable:k4,done:N4,bulkEditTags:R4,clearSelection:O4,forUser:D4,savePassword:P4,saving:L4,failedToUpdateTags:M4,tagDeleted:F4,failedToFetchWorkers:$4,failedToLoadPageData:B4,errorAddingUser:U4,failedToDeleteWorker:W4,areYouSureDeleteWorker:V4,areYouSureDeleteTag:H4,failedToDeleteTag:G4,passwordsDoNotMatch:j4,createQrCode:X4,qrCodeName:Y4,qrNamePlaceholder:K4,create:z4,newCodeCreated:q4,saveQrInstruction:Q4,id:Z4,existingQrCodes:J4,name:e8,status:t8,active:n8,inactive:r8,deactivate:s8,activate:o8,download:i8,noQrCodesFound:a8,deleteQrConfirm:c8,qrDownloadError:l8,rememberMe:u8,deviceNotAuthorized:d8,locationTrackingActive:f8,securityCheckInProgress:h8,securityCheckComplete:g8,highSecurityRisk:m8,deviceRegistered:p8,autoLoginEnabled:x8,backgroundLocationEnabled:w8,permissionsRequired:y8,batteryOptimizationWarning:C8,gpsSpooferDetected:E8,mockLocationEnabled:A8,deviceSecurityWarning:b8,locationUpdateFailed:_8,servicesInitializing:I8,servicesReady:S8,autoLoginFailed:T8,deviceValidationFailed:v8,personal:k8,clockHistory:N8,openCamera:R8,scanQRCode:O8,services:D8,systemServicesStatus:P8,updateYourPassword:L8,signOutOfAccount:M8,servicesStatus:F8,overallStatus:$8,locationTracking:B8,deviceRegistration:U8,securityStatus:W8,lastLocationUpdate:V8,deviceId:H8,start:G8,check:j8,checking:X8,refresh:Y8,refreshing:K8,notInitialized:z8,ready:q8,webOnly:Q8,registered:Z8,pending:J8,notChecked:eI,outdated:tI,current:nI,never:rI,justNow:sI,minutesAgo:oI,hoursAgo:iI,daysAgo:aI,failedToRefreshStatus:cI,locationTrackingStarted:lI,failedToStartLocationTracking:uI,securityCheckFailed:dI,workLocationTracking:fI,locationTrackingForAttendance:hI,monitoringLocation:gI,failedToVerifyStatus:mI,appInformation:pI,version:xI,platform:wI,android:yI,web:CI,darkMode:EI,enableDarkMode:AI,disableDarkMode:bI},_I="வருகை அமைப்பு",II="வெளியேறு",SI="உள்நுழை",TI="பயனர் பெயர்",vI="கடவுச்சொல்",kI="உள்நுழைகிறது...",NI="மொழி",RI="சர்வருடன் இணைக்க முடியவில்லை.",OI="சர்வரிலிருந்து தவறான டோக்கன் பெறப்பட்டது.",DI="தவறான பயனர் பெயர் அல்லது கடவுச்சொல்.",PI="ஆங்கிலம்",LI="மலாய்",MI="தமிழ்",FI="பெங்காலி",$I="பர்மா",BI="நேபாளி",UI="நிலைமை",WI="வருகை பதிவு செய்யப்பட்டது",VI="வெளியேறல் பதிவு செய்யப்பட்டது",HI="வருகை பதிவு",GI="வெளியேறல் பதிவு",jI="வருகை பதிவு",XI="வெளியேறல் பதிவு",YI="{action} பதிவு செய்ய ஸ்கேன் செய்யவும்",KI="வெளியேறல்",zI="ரத்து",qI="என் வருகை வரலாற்றைப் பார்க்கவும்",QI="என் கடவுச்சொல்லை மாற்றவும்",ZI="என் வருகை வரலாறு",JI="டாஷ்போர்டுக்குத் திரும்பு",eS="உங்களுக்கு வருகை வரலாறு இல்லை.",tS="வருகை வரலாற்றை பெற முடியவில்லை:",nS="என் வருகை வரலாற்றைப் பார்க்கவும்",rS="என் கடவுச்சொல்லை மாற்றவும்",sS="தற்போதைய கடவுச்சொல் தவறானது.",oS="வெற்றிகரமாக வருகை பதிவு செய்யப்பட்டது.",iS="வெற்றிகரமாக வெளியேறல் பதிவு செய்யப்பட்டது.",aS="QR கோட்டைக் கண்டறிய முடியவில்லை. தயவுசெய்து மீண்டும் முயற்சிக்கவும்.",cS="உங்கள் இருப்பிடத்தைப் பெற முடியவில்லை: {message}. தயவுசெய்து இருப்பிட சேவைகளை இயக்கவும்.",lS="{location} இல் வெற்றிகரமாக பதிவு செய்யப்பட்டது.",uS="கடவுச்சொல்லை மாற்று",dS="தற்போதைய கடவுச்சொல்",fS="புதிய கடவுச்சொல்",hS="புதிய கடவுச்சொல்லை உறுதிப்படுத்து",gS="புதுப்பிக்கிறது...",mS="பணியாளர்கள்",pS="வருகை",xS="QR கோட்கள்",wS="QR படத்தைப் பதிவேற்று",yS="பணியாளர் தகவலைப் பெற முடியவில்லை",CS="சர்வரிலிருந்து தற்போதைய நிலைமையை சரிபார்க்க முடியவில்லை",ES="வெற்றிகரமாக {action} பதிவு செய்யப்பட்டது",AS="இடத்தில்",bS="பிழை நிகழ்ந்தது",_S="கேமராவைத் தொடங்க முடியவில்லை.",IS="மீண்டும் முயற்சிக்கவும்",SS="QR கோட் கண்டறியப்பட்டது. இருப்பிடத்தைப் பெறுகிறது...",TS="உங்கள் உலாவியால் புவியிருப்பிடம் ஆதரிக்கப்படவில்லை.",vS="உங்கள் இருப்பிடத்தைப் பெற முடியவில்லை: {message}. தயவுசெய்து இருப்பிட சேவைகளை இயக்கவும்.",kS="QR கோட்டைக் கண்டறிய முடியவில்லை. தயவுசெய்து மீண்டும் முயற்சிக்கவும்.",NS="கடவுச்சொல்லைப் புதுப்பிக்கவும்",RS="புதிய கடவுச்சொற்கள் பொருந்தவில்லை.",OS="புதிய கடவுச்சொல் குறைந்தது 6 எழுத்துக்களாக இருக்க வேண்டும்.",DS="கடவுச்சொல் வெற்றிகரமாக புதுப்பிக்கப்பட்டது! நீங்கள் இப்போது உங்கள் புதிய கடவுச்சொல்லை உள்நுழைய பயன்படுத்தலாம்.",PS="கடவுச்சொல்லை புதுப்பிக்கும்போது பிழை ஏற்பட்டது.",LS="வருகை பதிவு -",MS="கைமுறை வெளியேறல் பதிவு சேர்க்கவும்",FS="பணியாளர் வெளியேறல் பதிவு செய்ய மறந்தால் இந்த படிவத்தைப் பயன்படுத்தவும். கடைசி நிகழ்வு வருகை பதிவாக இருக்க வேண்டும்.",$S="வெளியேறல் நேரம்",BS='காரணம் (எ.கா., "வெளியேறல் பதிவு செய்ய மறந்துவிட்டார்")',US="சுருக்கமான குறிப்பை உள்ளிடவும்",WS="பதிவு சேர்க்கவும்",VS="தொடக்க தேதி",HS="இறுதி தேதி",GS="பதிவுகளை வடிகட்டு",jS="நிகழ்வு",XS="நேர முத்திரை",YS="இடத்தின் பெயர்",KS="ஆயத்தொலைவுகள்",zS="குறிப்புகள்",qS="இந்த காலத்திற்கான பதிவுகள் எதுவும் கிடைக்கவில்லை.",QS="வரைபடத்தில் காட்டு",ZS="கிடையாது",JS="தயவுசெய்து வெளியேறலுக்கான நேர முத்திரையைத் தேர்ந்தெடுக்கவும்.",eT="தயவுசெய்து கைமுறை பதிவிற்கான காரணம்/குறிப்பை வழங்கவும்.",tT="கைமுறை வெளியேறல் வெற்றிகரமாக பதிவு செய்யப்பட்டது!",nT="பிழை ஏற்பட்டது: {message}",rT="1. பணியாளர்களைத் தேர்ந்தெடுக்கவும்",sT="ஒரு பணியாளரைத் தேடவும்...",oT="அனைத்தையும் தேர்ந்தெடு",iT="ஒரு டேக்கிலிருந்து அனைத்து பணியாளர்களையும் சேர்க்கவும்",aT="-- ஒரு டேக்கைத் தேர்ந்தெடுக்கவும் --",cT="டேக் மூலம் சேர்க்கவும்",lT="அறிக்கைக்காக தேர்ந்தெடுக்கப்பட்டவை ({count})",uT="அனைத்து பணியாளர்கள் ({count}) தேர்ந்தெடுக்கப்பட்டனர்",dT="பணியாளர்கள் எதுவும் தேர்ந்தெடுக்கப்படவில்லை.",fT="2. அறிக்கை அமைப்புகள்",hT="அமைப்பு",gT="மாதச் சம்பளம் (RM)",mT="தேர்ந்தெடுக்கப்பட்ட அனைத்து பணியாளர்களுக்கும் பயன்படுத்தப்படும்.",pT="எ.கா., 3000",xT="மேல்நேர காரணிகள்",wT="வாரக்கடைசி காரணி",yT="விடுமுறை காரணி",CT="பொது விடுமுறைகளைத் தேர்ந்தெடுக்கவும்",ET="வருகை & மேல்நேர அறிக்கையை உருவாக்கு",AT="மேல்நேர ஊதிய சுருக்கம்",bT="மேல்நேர சுருக்கத்தை ஏற்றுமதி செய் (CSV)",_T="பணியாளர்",IT="மொத்த வேலை நேரங்கள்",ST="மொத்த மேல்நேர ஊதியம் (RM)",TT="மூல வருகை தரவு",vT="அறிக்கை ஏற்றுகிறது...",kT="தேர்ந்தெடுக்கப்பட்ட டேக்கிற்கான பணியாளர்களை ஏற்ற முடியவில்லை.",NT="தயவுசெய்து பணியாளர்களைத் தேர்ந்தெடுத்து, சரியான தேதி வரம்பை அமைத்து, சம்பளத்தை உள்ளிடவும்.",RT="அறிக்கையை உருவாக்கும்போது பிழை ஏற்பட்டது.",OT="புதிய பயனரைச் சேர்க்கவும்",DT="முழு பெயர்",PT="எ.கா. John Smith",LT="எ.கா. jsmith",MT="எ.கா. 123456",FT="மேலாளராக",$T="சேர்க்கிறது...",BT="பயனரைச் சேர்க்கவும்",UT="டேக்குகளை நிர்வகிக்கவும்",WT="புதிய டேக் உருவாக்கவும்",VT="எ.கா. குழு",HT="டேக் உருவாக்கவும்",GT="டேக்குகள்",jT="பணியாளர் பட்டியல்",XT="பெயர் அல்லது பயனர் பெயர் மூலம் தேடவும்",YT="டேக் மூலம் வடிகட்டவும்",KT="வடிகட்டியைத் துடைக்கவும்",zT="சேர்ந்த தேதி",qT="செயல்கள்",QT="டேக்குகளைத் திருத்து",ZT="பதிவுகளைப் பார்க்கவும்",JT="பணியாளர்கள் ஏற்றப்படுகிறது...",ev="பணியாளர்கள் எதுவும் கிடைக்கவில்லை.",tv="முந்தைய",nv="அடுத்த",rv="பக்கம் {current} / {total}",sv="டேக்குகள் எதுவும் கிடைக்கவில்லை.",ov="முடிந்தது",iv="பல டேக்குகளைத் திருத்து",av="தேர்வைத் துடைக்கவும்",cv="பயனருக்கு",lv="கடவுச்சொல்லைச் சேமிக்கவும்",uv="சேமிக்கிறது...",dv="டேக்குகளை புதுப்பிக்க முடியவில்லை. தயவுசெய்து மீண்டும் முயற்சிக்கவும்.",fv="டேக் வெற்றிகரமாக நீக்கப்பட்டது.",hv="பணியாளர்களைப் பெற முடியவில்லை.",gv="பக்க தரவை ஏற்ற முடியவில்லை.",mv="பயனரைச் சேர்க்கும்போது பிழை ஏற்பட்டது.",pv="பணியாளரை நீக்க முடியவில்லை.",xv="இந்த பணியாளர் கணக்கை நீக்க நீங்கள் உறுதியாக உள்ளீர்களா?",wv="இந்த டேக்கை நீக்க நீங்கள் உறுதியாக உள்ளீர்களா? இது அனைத்து பணியாளர்களிடமிருந்தும் அகற்றப்படும்.",yv="டேக்கை நீக்க முடியவில்லை.",Cv="கடவுச்சொற்கள் பொருந்தவில்லை.",Ev="புதிய QR கோட் உருவாக்கவும்",Av="QR கோட்டின் பெயர்",bv="எ.கா., 'மேற்கு வாயில் நுழைவாயில்'",_v="உருவாக்கு",Iv="புதிய கோட் உருவாக்கப்பட்டது!",Sv="இந்த படத்தைச் சேமிக்கவும் அல்லது கீழே உள்ள ID ஐப் பயன்படுத்தவும். இது புதுப்பிப்பில் மறைந்துவிடும்.",Tv="ஐடி",vv="ஏற்கனவே உள்ள QR கோட்கள்",kv="பெயர்",Nv="நிலைமை",Rv="செயலிழக்கச் செய்",Ov="செயல்படுத்து",Dv="பதிவிறக்கு",Pv="QR கோட்கள் எதுவும் கிடைக்கவில்லை. மேலே ஒன்றை உருவாக்கவும்!",Lv="இந்த QR கோட்டை நீக்க நீங்கள் உறுதியாக உள்ளீர்களா? இதை மாற்ற முடியாது.",Mv="மன்னிக்கவும், QR கோட்டைப் பதிவிறக்க முடியவில்லை.",Fv="தானியங்கு உள்நுழைவுக்காக என்னை நினைவில் வைக்கவும்",$v="இந்த சாதனம் உங்கள் கணக்குக்கு அங்கீகரிக்கப்படவில்லை. தயவுசெய்து உங்கள் நிர்வாகியைத் தொடர்பு கொள்ளவும்.",Bv="இருப்பிட கண்காணிப்பு பின்னணியில் செயல்படுகிறது",Uv="பாதுகாப்பு சரிபார்ப்பு நடைபெறுகிறது...",Wv="பாதுகாப்பு சரிபார்ப்பு வெற்றிகரமாக முடிவடைந்தது",Vv="அதிக பாதுகாப்பு அபாயம் கண்டறியப்பட்டது. தயவுசெய்து உங்கள் நிர்வாகியைத் தொடர்பு கொள்ளவும்.",Hv="சாதனம் வெற்றிகரமாக பதிவு செய்யப்பட்டது",Gv="இந்த சாதனத்திற்கு தானியங்கு உள்நுழைவு இயக்கப்பட்டது",jv="பின்னணி இருப்பிட கண்காணிப்பு இயக்கப்பட்டது",Xv="வருகை கண்காணிப்புக்கு இருப்பிட அனுமதிகள் தேவை",Yv="தொடர்ச்சியான இருப்பிட கண்காணிப்பை உறுதிப்படுத்த இந்த பயன்பாட்டிற்கு பேட்டரி மேம்படுத்தலை முடக்கவும்",Kv="GPS போலிப் பயன்பாடு கண்டறியப்பட்டது. இது வருகை துல்லியத்தைப் பாதிக்கலாம்.",zv="போலி இருப்பிடம் இயக்கப்பட்டுள்ளது. துல்லியமான வருகை கண்காணிப்புக்கு அதை முடக்கவும்.",qv="சாதன பாதுகாப்பு எச்சரிக்கை: சந்தேகத்திற்குரிய பயன்பாடுகள் கண்டறியப்பட்டன",Qv="இருப்பிடத்தை புதுப்பிக்க முடியவில்லை. தானாகவே மீண்டும் முயற்சிக்கும்.",Zv="அடிப்படை சேவைகளை துவக்குகிறது...",Jv="அனைத்து சேவைகளும் தயாராக உள்ளன",ek="தானியங்கு உள்நுழைவு தோல்வி. தயவுசெய்து கைமுறையாக உள்நுழைக.",tk="சாதன சரிபார்ப்பு தோல்வி. தயவுசெய்து ஆதரவைத் தொடர்பு கொள்ளவும்.",nk="சேவைகளின் நிலை",rk="ஒட்டுமொத்த நிலை",sk="இருப்பிட கண்காணிப்பு",ok="சாதன பதிவு",ik="பாதுகாப்பு நிலை",ak="கடைசி இருப்பிட புதுப்பிப்பு",ck="சாதன ஐடி",lk="தொடங்கு",uk="சரிபார்க்கவும்",dk="சரிபார்க்கிறது...",fk="புதுப்பிக்கவும்",hk="புதுப்பிக்கிறது...",gk="துவக்கப்படவில்லை",mk="தயார்",pk="வலை மட்டும்",xk="செயலில்",wk="செயலில் இல்லை",yk="பதிவு செய்யப்பட்டது",Ck="நிலுவையில்",Ek="சரிபார்க்கப்படவில்லை",Ak="காலாவதியானது",bk="தற்போதைய",_k="ஒருபோதும் இல்லை",Ik="இப்போதுதான்",Sk="{minutes} நி முன்",Tk="{hours} மணி முன்",vk="{days} நா முன்",kk="நிலையை புதுப்பிக்க முடியவில்லை",Nk="இருப்பிட கண்காணிப்பு வெற்றிகரமாக தொடங்கப்பட்டது",Rk="இருப்பிட கண்காணிப்பைத் தொடங்க முடியவில்லை",Ok="பாதுகாப்பு சரிபார்ப்பு தோல்வி",Dk="தனிப்பட்ட",Pk="வருகை வரலாறு",Lk="கேமராவைத் திற",Mk="QR கோட் ஸ்கேன் செய்",Fk="சேவைகள்",$k="அமைப்பு சேவைகள் மற்றும் பாதுகாப்பு நிலை",Bk="உங்கள் கணக்கு கடவுச்சொல்லை புதுப்பிக்கவும்",Uk="உங்கள் கணக்கிலிருந்து வெளியேறவும்",Wk="பணியிட இருப்பிட கண்காணிப்பு",Vk="பணி வருகைக்காக இருப்பிட கண்காணிப்பு செயலில்",Hk="பணி வருகைக்காக இருப்பிடத்தைக் கண்காணிக்கிறது",T1={appTitle:_I,logout:II,login:SI,username:TI,password:vI,loggingIn:kI,language:NI,failedConnection:RI,invalidToken:OI,invalidCredentials:DI,english:PI,malay:LI,tamil:MI,bengali:FI,burmese:$I,nepali:BI,yourStatus:UI,clockedIn:WI,clockedOut:VI,clockIn:HI,clockOut:GI,clock_in:jI,clock_out:XI,scanToClock:YI,in:"வருகை",out:KI,cancel:zI,viewMyClockHistory:qI,changeMyPassword:QI,myClockHistory:ZI,backToDashboard:JI,noClockHistory:eS,clockHistoryFetchFail:tS,viewClockHistory:nS,changePassword:rS,invalidCurrentPassword:sS,successClockIn:oS,successClockOut:iS,qrFail:aS,geoFail:cS,successClock:lS,changePasswordTitle:uS,currentPassword:dS,newPassword:fS,confirmNewPassword:hS,updating:gS,tabPersonnel:mS,tabAttendance:pS,tabQrCodes:xS,uploadQrImage:wS,couldNotLoadWorkerInfo:yS,couldNotVerifyStatus:CS,successfullyClocked:ES,site:AS,errorOccurred:bS,unableToStartCamera:_S,tryAgain:IS,qrDetectedGettingLocation:SS,geolocationNotSupported:TS,unableToRetrieveLocation:vS,qrNotDetectedTryAgain:kS,updatePassword:NS,passwordsNoMatch:RS,passwordTooShort:OS,passwordUpdated:DS,passwordUpdateError:PS,attendanceLogFor:LS,addManualClockOut:MS,manualClockOutInstruction:FS,clockOutTime:$S,reason:BS,enterBriefNote:US,addRecord:WS,startDate:VS,endDate:HS,filterRecords:GS,event:jS,timestamp:XS,locationName:YS,coordinates:KS,notes:zS,noRecordsFound:qS,showOnMap:QS,nA:ZS,pleaseSelectTimestamp:JS,pleaseProvideReason:eT,manualClockOutSuccess:tT,manualClockOutError:nT,selectWorkers:rT,searchWorkerPlaceholder:sT,selectAll:oT,addWorkersByTag:iT,chooseTag:aT,addByTag:cT,selectedForReport:lT,allWorkersSelected:uT,noWorkersSelected:dT,reportSettings:fT,setting:hT,monthlySalary:gT,salaryAppliedNote:mT,salaryPlaceholder:pT,otFactors:xT,weekendFactor:wT,holidayFactor:yT,selectPublicHolidays:CT,generateReport:ET,overtimePaySummary:AT,exportOtSummary:bT,worker:_T,totalHoursWorked:IT,totalOtPay:ST,rawAttendanceData:TT,loadingReport:vT,tagLoadError:kT,generateReportError:NT,reportGenerationError:RT,addNewUser:OT,fullName:DT,egJohnSmith:PT,egJsmith:LT,eg123456:MT,asManager:FT,adding:$T,addUser:BT,manageTags:UT,createNewTag:WT,egTeam:VT,createTag:HT,tags:GT,workerRoster:jT,searchByNameOrUsername:XT,filterByTag:YT,clearFilter:KT,dateJoined:zT,actions:qT,editTags:QT,viewRecords:ZT,delete:"நீக்கு",loadingWorkers:JT,noWorkersFound:ev,previous:tv,next:nv,pageOf:rv,noTagsAvailable:sv,done:ov,bulkEditTags:iv,clearSelection:av,forUser:cv,savePassword:lv,saving:uv,failedToUpdateTags:dv,tagDeleted:fv,failedToFetchWorkers:hv,failedToLoadPageData:gv,errorAddingUser:mv,failedToDeleteWorker:pv,areYouSureDeleteWorker:xv,areYouSureDeleteTag:wv,failedToDeleteTag:yv,passwordsDoNotMatch:Cv,createQrCode:Ev,qrCodeName:Av,qrNamePlaceholder:bv,create:_v,newCodeCreated:Iv,saveQrInstruction:Sv,id:Tv,existingQrCodes:vv,name:kv,status:Nv,deactivate:Rv,activate:Ov,download:Dv,noQrCodesFound:Pv,deleteQrConfirm:Lv,qrDownloadError:Mv,rememberMe:Fv,deviceNotAuthorized:$v,locationTrackingActive:Bv,securityCheckInProgress:Uv,securityCheckComplete:Wv,highSecurityRisk:Vv,deviceRegistered:Hv,autoLoginEnabled:Gv,backgroundLocationEnabled:jv,permissionsRequired:Xv,batteryOptimizationWarning:Yv,gpsSpooferDetected:Kv,mockLocationEnabled:zv,deviceSecurityWarning:qv,locationUpdateFailed:Qv,servicesInitializing:Zv,servicesReady:Jv,autoLoginFailed:ek,deviceValidationFailed:tk,servicesStatus:nk,overallStatus:rk,locationTracking:sk,deviceRegistration:ok,securityStatus:ik,lastLocationUpdate:ak,deviceId:ck,start:lk,check:uk,checking:dk,refresh:fk,refreshing:hk,notInitialized:gk,ready:mk,webOnly:pk,active:xk,inactive:wk,registered:yk,pending:Ck,notChecked:Ek,outdated:Ak,current:bk,never:_k,justNow:Ik,minutesAgo:Sk,hoursAgo:Tk,daysAgo:vk,failedToRefreshStatus:kk,locationTrackingStarted:Nk,failedToStartLocationTracking:Rk,securityCheckFailed:Ok,personal:Dk,clockHistory:Pk,openCamera:Lk,scanQRCode:Mk,services:Fk,systemServicesStatus:$k,updateYourPassword:Bk,signOutOfAccount:Uk,workLocationTracking:Wk,locationTrackingForAttendance:Vk,monitoringLocation:Hk},Gk="উপস্থিতি ব্যবস্থা",jk="লগ আউট",Xk="লগ ইন",Yk="ইউজারনেম",Kk="পাসওয়ার্ড",zk="লগ ইন করা হচ্ছে...",qk="ভাষা",Qk="সার্ভারের সাথে সংযোগ করতে পারেনি।",Zk="সার্ভার থেকে অবৈধ টোকেন পাওয়া গেছে।",Jk="ভুল ইউজারনেম বা পাসওয়ার্ড।",e6="ইংরেজি",t6="মালয়",n6="তামিল",r6="বাংলা",s6="বর্মী",o6="নেপালি",i6="স্ট্যাটাস",a6="উপস্থিতি রেকর্ড হয়েছে",c6="প্রস্থান রেকর্ড হয়েছে",l6="উপস্থিতি রেকর্ড",u6="প্রস্থান রেকর্ড",d6="উপস্থিতি রেকর্ড",f6="প্রস্থান রেকর্ড",h6="{action} রেকর্ড করতে স্ক্যান করুন",g6="প্রস্থান",m6="বাতিল",p6="আমার উপস্থিতির ইতিহাস দেখুন",x6="আমার পাসওয়ার্ড পরিবর্তন করুন",w6="আমার উপস্থিতির ইতিহাস",y6="ড্যাশবোর্ডে ফিরে যান",C6="আপনার কোনো উপস্থিতির ইতিহাস নেই।",E6="উপস্থিতির ইতিহাস পেতে পারেনি:",A6="আমার উপস্থিতির ইতিহাস দেখুন",b6="আমার পাসওয়ার্ড পরিবর্তন করুন",_6="বর্তমান পাসওয়ার্ড ভুল।",I6="সফলভাবে উপস্থিতি রেকর্ড হয়েছে।",S6="সফলভাবে প্রস্থান রেকর্ড হয়েছে।",T6="QR কোড খুঁজে পাওয়া যায়নি। অনুগ্রহ করে আবার চেষ্টা করুন।",v6="আপনার অবস্থান খুঁজে পাওয়া যায়নি: {message}। অনুগ্রহ করে লোকেশন সার্ভিস চালু করুন।",k6="{location} এ সফলভাবে রেকর্ড হয়েছে।",N6="পাসওয়ার্ড পরিবর্তন করুন",R6="বর্তমান পাসওয়ার্ড",O6="নতুন পাসওয়ার্ড",D6="নতুন পাসওয়ার্ড নিশ্চিত করুন",P6="আপডেট করা হচ্ছে...",L6="কর্মী",M6="উপস্থিতি",F6="QR কোড",$6="QR ছবি আপলোড করুন",B6="কর্মীর তথ্য লোড করতে পারেনি",U6="সার্ভার থেকে বর্তমান স্ট্যাটাস যাচাই করতে পারেনি",W6="সফলভাবে {action} রেকর্ড হয়েছে",V6="স্থানে",H6="একটি ত্রুটি ঘটেছে",G6="ক্যামেরা চালু করতে পারেনি।",j6="আবার চেষ্টা করুন",X6="QR কোড পাওয়া গেছে। অবস্থান খুঁজে বের করা হচ্ছে...",Y6="আপনার ব্রাউজার জিওলোকেশন সাপোর্ট করে না।",K6="আপনার অবস্থান খুঁজে পাওয়া যায়নি: {message}। অনুগ্রহ করে লোকেশন সার্ভিস চালু করুন।",z6="QR কোড খুঁজে পাওয়া যায়নি। অনুগ্রহ করে আবার চেষ্টা করুন।",q6="পাসওয়ার্ড আপডেট করুন",Q6="নতুন পাসওয়ার্ড মিলছে না।",Z6="নতুন পাসওয়ার্ড কমপক্ষে ৬ অক্ষরের হতে হবে।",J6="পাসওয়ার্ড সফলভাবে আপডেট হয়েছে! এখন আপনি নতুন পাসওয়ার্ড দিয়ে লগ ইন করতে পারবেন।",e5="পাসওয়ার্ড আপডেট করার সময় একটি ত্রুটি হয়েছে।",t5="উপস্থিতির রেকর্ড -",n5="ম্যানুয়াল প্রস্থান রেকর্ড যোগ করুন",r5="কর্মী প্রস্থান রেকর্ড করতে ভুলে গেলে এই ফর্মটি ব্যবহার করুন। শেষ ইভেন্ট অবশ্যই উপস্থিতি রেকর্ড হতে হবে।",s5="প্রস্থানের সময়",o5='কারণ (যেমন, "প্রস্থান রেকর্ড করতে ভুলে গেছেন")',i5="সংক্ষিপ্ত নোট লিখুন",a5="রেকর্ড যোগ করুন",c5="শুরুর তারিখ",l5="শেষ তারিখ",u5="রেকর্ড ফিল্টার করুন",d5="ইভেন্ট",f5="সময়ের স্ট্যাম্প",h5="স্থানের নাম",g5="স্থানাঙ্ক",m5="নোট",p5="এই সময়ের জন্য কোনো রেকর্ড পাওয়া যায়নি।",x5="মানচিত্রে দেখুন",w5="নেই",y5="অনুগ্রহ করে প্রস্থানের জন্য সময়ের স্ট্যাম্প নির্বাচন করুন।",C5="অনুগ্রহ করে ম্যানুয়াল এন্ট্রির জন্য কারণ/নোট প্রদান করুন।",E5="ম্যানুয়াল প্রস্থান সফলভাবে রেকর্ড হয়েছে!",A5="একটি ত্রুটি ঘটেছে: {message}",b5="১. কর্মী নির্বাচন করুন",_5="একজন কর্মী খুঁজুন...",I5="সব নির্বাচন করুন",S5="একটি ট্যাগ থেকে সব কর্মী যোগ করুন",T5="-- একটি ট্যাগ বেছে নিন --",v5="ট্যাগ দ্বারা যোগ করুন",k5="রিপোর্টের জন্য নির্বাচিত ({count})",N5="সব কর্মী ({count}) নির্বাচিত",R5="কোনো কর্মী নির্বাচিত নয়।",O5="২. রিপোর্ট সেটিংস",D5="সেটিং",P5="মাসিক বেতন (RM)",L5="নির্বাচিত সব কর্মীর জন্য প্রযোজ্য।",M5="যেমন, ৩০০০",F5="ওভারটাইম ফ্যাক্টর",$5="সাপ্তাহিক ছুটির ফ্যাক্টর",B5="ছুটির দিনের ফ্যাক্টর",U5="সরকারি ছুটির দিন নির্বাচন করুন",W5="উপস্থিতি ও ওভারটাইম রিপোর্ট তৈরি করুন",V5="ওভারটাইম বেতনের সারসংক্ষেপ",H5="ওভারটাইম সারসংক্ষেপ রপ্তানি করুন (CSV)",G5="কর্মী",j5="মোট কাজের ঘন্টা",X5="মোট ওভারটাইম বেতন (RM)",Y5="কাঁচা উপস্থিতির তথ্য",K5="রিপোর্ট লোড করা হচ্ছে...",z5="নির্বাচিত ট্যাগের জন্য কর্মীদের লোড করতে পারেনি।",q5="অনুগ্রহ করে কর্মী নির্বাচন করুন, সঠিক তারিখের সীমা নির্ধারণ করুন এবং বেতন লিখুন।",Q5="রিপোর্ট তৈরি করার সময় একটি ত্রুটি ঘটেছে।",Z5="নতুন ইউজার যোগ করুন",J5="পূর্ণ নাম",eN="যেমন John Smith",tN="যেমন jsmith",nN="যেমন ১২৩৪৫৬",rN="ম্যানেজার হিসেবে",sN="যোগ করা হচ্ছে...",oN="ইউজার যোগ করুন",iN="ট্যাগ পরিচালনা করুন",aN="নতুন ট্যাগ তৈরি করুন",cN="যেমন টিম",lN="ট্যাগ তৈরি করুন",uN="ট্যাগ",dN="কর্মীদের তালিকা",fN="নাম বা ইউজারনেম দিয়ে খুঁজুন",hN="ট্যাগ দিয়ে ফিল্টার করুন",gN="ফিল্টার পরিষ্কার করুন",mN="যোগদানের তারিখ",pN="কার্যক্রম",xN="ট্যাগ সম্পাদনা করুন",wN="রেকর্ড দেখুন",yN="কর্মীরা লোড হচ্ছে...",CN="কোনো কর্মী পাওয়া যায়নি।",EN="পূর্ববর্তী",AN="পরবর্তী",bN="পৃষ্ঠা {current} এর {total}",_N="কোনো ট্যাগ উপলব্ধ নেই।",IN="সম্পন্ন",SN="একাধিক ট্যাগ সম্পাদনা করুন",TN="নির্বাচন পরিষ্কার করুন",vN="ইউজারের জন্য",kN="পাসওয়ার্ড সেভ করুন",NN="সেভ করা হচ্ছে...",RN="ট্যাগ আপডেট করতে পারেনি। অনুগ্রহ করে আবার চেষ্টা করুন।",ON="ট্যাগ সফলভাবে মুছে ফেলা হয়েছে।",DN="কর্মীদের তথ্য পেতে পারেনি।",PN="পেজের তথ্য লোড করতে পারেনি।",LN="ইউজার যোগ করার সময় একটি ত্রুটি ঘটেছে।",MN="কর্মী মুছে ফেলতে পারেনি।",FN="আপনি কি নিশ্চিত এই কর্মীর অ্যাকাউন্ট মুছে ফেলতে চান?",$N="আপনি কি নিশ্চিত এই ট্যাগটি মুছে ফেলতে চান? এটি সব কর্মী থেকে সরিয়ে দেওয়া হবে।",BN="ট্যাগ মুছে ফেলতে পারেনি।",UN="পাসওয়ার্ড মিলছে না।",WN="নতুন QR কোড তৈরি করুন",VN="QR কোডের নাম",HN="যেমন, 'পশ্চিম গেট প্রবেশদ্বার'",GN="তৈরি করুন",jN="নতুন কোড তৈরি হয়েছে!",XN="এই ছবিটি সেভ করুন বা নিচের ID ব্যবহার করুন। এটি রিফ্রেশে অদৃশ্য হয়ে যাবে।",YN="আইডি",KN="বিদ্যমান QR কোড",zN="নাম",qN="স্ট্যাটাস",QN="সক্রিয়",ZN="নিষ্ক্রিয়",JN="নিষ্ক্রিয় করুন",eR="সক্রিয় করুন",tR="ডাউনলোড",nR="কোনো QR কোড পাওয়া যায়নি। উপরে একটি তৈরি করুন!",rR="আপনি কি নিশ্চিত এই QR কোডটি মুছে ফেলতে চান? এটি পূর্বাবস্থায় ফেরানো যাবে না।",sR="দুঃখিত, QR কোড ডাউনলোড করা যায়নি।",oR="অটো লগইনের জন্য আমাকে মনে রাখুন",iR="এই ডিভাইসটি আপনার অ্যাকাউন্টের জন্য অনুমোদিত নয়। অনুগ্রহ করে আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।",aR="লোকেশন ট্র্যাকিং পেছনে চালু আছে",cR="নিরাপত্তা যাচাই চলছে...",lR="নিরাপত্তা যাচাই সফলভাবে সম্পন্ন",uR="উচ্চ নিরাপত্তা ঝুঁকি শনাক্ত। অনুগ্রহ করে আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।",dR="ডিভাইস সফলভাবে নিবন্ধিত হয়েছে",fR="এই ডিভাইসের জন্য অটো লগইন চালু করা হয়েছে",hR="পেছনের লোকেশন ট্র্যাকিং চালু করা হয়েছে",gR="উপস্থিতি ট্র্যাকিংয়ের জন্য লোকেশন অনুমতি প্রয়োজন",mR="অবিরাম লোকেশন ট্র্যাকিং নিশ্চিত করতে এই অ্যাপের জন্য ব্যাটারি অপটিমাইজেশন বন্ধ করুন",pR="GPS স্পুফিং অ্যাপ্লিকেশন শনাক্ত হয়েছে। এটি উপস্থিতির নির্ভুলতা প্রভাবিত করতে পারে।",xR="মক লোকেশন চালু আছে। নির্ভুল উপস্থিতি ট্র্যাকিংয়ের জন্য এটি বন্ধ করুন।",wR="ডিভাইস নিরাপত্তা সতর্কতা: সন্দেহজনক অ্যাপ্লিকেশন শনাক্ত",yR="লোকেশন আপডেট করতে পারেনি। স্বয়ংক্রিয়ভাবে আবার চেষ্টা করা হবে।",CR="নেটিভ সার্ভিস চালু করা হচ্ছে...",ER="সব সার্ভিস প্রস্তুত",AR="অটো লগইন ব্যর্থ। অনুগ্রহ করে ম্যানুয়ালি লগ ইন করুন।",bR="ডিভাইস ভেরিফিকেশন ব্যর্থ। অনুগ্রহ করে সাপোর্টের সাথে যোগাযোগ করুন।",_R="সার্ভিসের স্ট্যাটাস",IR="সামগ্রিক স্ট্যাটাস",SR="লোকেশন ট্র্যাকিং",TR="ডিভাইস নিবন্ধন",vR="নিরাপত্তার স্ট্যাটাস",kR="শেষ লোকেশন আপডেট",NR="ডিভাইস আইডি",RR="শুরু করুন",OR="যাচাই করুন",DR="যাচাই করা হচ্ছে...",PR="রিফ্রেশ করুন",LR="রিফ্রেশ করা হচ্ছে...",MR="চালু করা হয়নি",FR="প্রস্তুত",$R="শুধু ওয়েব",BR="নিবন্ধিত",UR="অপেক্ষমান",WR="যাচাই করা হয়নি",VR="পুরোনো",HR="বর্তমান",GR="কখনো না",jR="এইমাত্র",XR="{minutes} মিনিট আগে",YR="{hours} ঘন্টা আগে",KR="{days} দিন আগে",zR="স্ট্যাটাস রিফ্রেশ করতে পারেনি",qR="লোকেশন ট্র্যাকিং সফলভাবে শুরু হয়েছে",QR="লোকেশন ট্র্যাকিং শুরু করতে পারেনি",ZR="নিরাপত্তা যাচাই ব্যর্থ",JR="ব্যক্তিগত",eO="উপস্থিতির ইতিহাস",tO="ক্যামেরা খুলুন",nO="QR কোড স্ক্যান করুন",rO="সার্ভিস",sO="সিস্টেম সার্ভিস এবং নিরাপত্তার স্ট্যাটাস",oO="আপনার অ্যাকাউন্টের পাসওয়ার্ড আপডেট করুন",iO="আপনার অ্যাকাউন্ট থেকে সাইন আউট করুন",aO="কর্মক্ষেত্রের লোকেশন ট্র্যাকিং",cO="কাজের উপস্থিতির জন্য লোকেশন ট্র্যাকিং সক্রিয়",lO="কাজের উপস্থিতির জন্য লোকেশন নিরীক্ষণ করা হচ্ছে",v1={appTitle:Gk,logout:jk,login:Xk,username:Yk,password:Kk,loggingIn:zk,language:qk,failedConnection:Qk,invalidToken:Zk,invalidCredentials:Jk,english:e6,malay:t6,tamil:n6,bengali:r6,burmese:s6,nepali:o6,yourStatus:i6,clockedIn:a6,clockedOut:c6,clockIn:l6,clockOut:u6,clock_in:d6,clock_out:f6,scanToClock:h6,in:"উপস্থিতি",out:g6,cancel:m6,viewMyClockHistory:p6,changeMyPassword:x6,myClockHistory:w6,backToDashboard:y6,noClockHistory:C6,clockHistoryFetchFail:E6,viewClockHistory:A6,changePassword:b6,invalidCurrentPassword:_6,successClockIn:I6,successClockOut:S6,qrFail:T6,geoFail:v6,successClock:k6,changePasswordTitle:N6,currentPassword:R6,newPassword:O6,confirmNewPassword:D6,updating:P6,tabPersonnel:L6,tabAttendance:M6,tabQrCodes:F6,uploadQrImage:$6,couldNotLoadWorkerInfo:B6,couldNotVerifyStatus:U6,successfullyClocked:W6,site:V6,errorOccurred:H6,unableToStartCamera:G6,tryAgain:j6,qrDetectedGettingLocation:X6,geolocationNotSupported:Y6,unableToRetrieveLocation:K6,qrNotDetectedTryAgain:z6,updatePassword:q6,passwordsNoMatch:Q6,passwordTooShort:Z6,passwordUpdated:J6,passwordUpdateError:e5,attendanceLogFor:t5,addManualClockOut:n5,manualClockOutInstruction:r5,clockOutTime:s5,reason:o5,enterBriefNote:i5,addRecord:a5,startDate:c5,endDate:l5,filterRecords:u5,event:d5,timestamp:f5,locationName:h5,coordinates:g5,notes:m5,noRecordsFound:p5,showOnMap:x5,nA:w5,pleaseSelectTimestamp:y5,pleaseProvideReason:C5,manualClockOutSuccess:E5,manualClockOutError:A5,selectWorkers:b5,searchWorkerPlaceholder:_5,selectAll:I5,addWorkersByTag:S5,chooseTag:T5,addByTag:v5,selectedForReport:k5,allWorkersSelected:N5,noWorkersSelected:R5,reportSettings:O5,setting:D5,monthlySalary:P5,salaryAppliedNote:L5,salaryPlaceholder:M5,otFactors:F5,weekendFactor:$5,holidayFactor:B5,selectPublicHolidays:U5,generateReport:W5,overtimePaySummary:V5,exportOtSummary:H5,worker:G5,totalHoursWorked:j5,totalOtPay:X5,rawAttendanceData:Y5,loadingReport:K5,tagLoadError:z5,generateReportError:q5,reportGenerationError:Q5,addNewUser:Z5,fullName:J5,egJohnSmith:eN,egJsmith:tN,eg123456:nN,asManager:rN,adding:sN,addUser:oN,manageTags:iN,createNewTag:aN,egTeam:cN,createTag:lN,tags:uN,workerRoster:dN,searchByNameOrUsername:fN,filterByTag:hN,clearFilter:gN,dateJoined:mN,actions:pN,editTags:xN,viewRecords:wN,delete:"মুছে ফেলুন",loadingWorkers:yN,noWorkersFound:CN,previous:EN,next:AN,pageOf:bN,noTagsAvailable:_N,done:IN,bulkEditTags:SN,clearSelection:TN,forUser:vN,savePassword:kN,saving:NN,failedToUpdateTags:RN,tagDeleted:ON,failedToFetchWorkers:DN,failedToLoadPageData:PN,errorAddingUser:LN,failedToDeleteWorker:MN,areYouSureDeleteWorker:FN,areYouSureDeleteTag:$N,failedToDeleteTag:BN,passwordsDoNotMatch:UN,createQrCode:WN,qrCodeName:VN,qrNamePlaceholder:HN,create:GN,newCodeCreated:jN,saveQrInstruction:XN,id:YN,existingQrCodes:KN,name:zN,status:qN,active:QN,inactive:ZN,deactivate:JN,activate:eR,download:tR,noQrCodesFound:nR,deleteQrConfirm:rR,qrDownloadError:sR,rememberMe:oR,deviceNotAuthorized:iR,locationTrackingActive:aR,securityCheckInProgress:cR,securityCheckComplete:lR,highSecurityRisk:uR,deviceRegistered:dR,autoLoginEnabled:fR,backgroundLocationEnabled:hR,permissionsRequired:gR,batteryOptimizationWarning:mR,gpsSpooferDetected:pR,mockLocationEnabled:xR,deviceSecurityWarning:wR,locationUpdateFailed:yR,servicesInitializing:CR,servicesReady:ER,autoLoginFailed:AR,deviceValidationFailed:bR,servicesStatus:_R,overallStatus:IR,locationTracking:SR,deviceRegistration:TR,securityStatus:vR,lastLocationUpdate:kR,deviceId:NR,start:RR,check:OR,checking:DR,refresh:PR,refreshing:LR,notInitialized:MR,ready:FR,webOnly:$R,registered:BR,pending:UR,notChecked:WR,outdated:VR,current:HR,never:GR,justNow:jR,minutesAgo:XR,hoursAgo:YR,daysAgo:KR,failedToRefreshStatus:zR,locationTrackingStarted:qR,failedToStartLocationTracking:QR,securityCheckFailed:ZR,personal:JR,clockHistory:eO,openCamera:tO,scanQRCode:nO,services:rO,systemServicesStatus:sO,updateYourPassword:oO,signOutOfAccount:iO,workLocationTracking:aO,locationTrackingForAttendance:cO,monitoringLocation:lO},uO="တက်ရောက်မှု စနစ်",dO="ထွက်ရန်",fO="ဝင်ရောက်ရန်",hO="အသုံးပြုသူအမည်",gO="လျှို့ဝှက်နံပါတ်",mO="ဝင်ရောက်နေသည်...",pO="ဘာသာစကား",xO="ဆာဗာနှင့် ချိတ်ဆက်၍မရပါ။",wO="ဆာဗာမှ မမှန်ကန်သော တိုကင်ရရှိခဲ့သည်။",yO="အသုံးပြုသူအမည် သို့မဟုတ် လျှို့ဝှက်နံပါတ် မမှန်ကန်ပါ။",CO="အင်္ဂလိပ်",EO="မလေး",AO="တမီးလ်",bO="ဘင်္ဂါလီ",_O="မြန်မာ",IO="နီပေါ",SO="သင်၏အခြေအနေ",TO="အချိန်ဝင်ပြီး",vO="အချိန်ထွက်ပြီး",kO="အချိန်ဝင်ရန်",NO="အချိန်ထွက်ရန်",RO="အချိန်ဝင်ရန်",OO="အချိန်ထွက်ရန်",DO="{action} အတွက် စကင်န်ဖတ်ပါ",PO="ထွက်",LO="ပယ်ဖျက်ရန်",MO="ကျွန်ုပ်၏ အချိန်မှတ်တမ်းကြည့်ရန်",FO="ကျွန်ုပ်၏ လျှို့ဝှက်နံပါတ်ပြောင်းရန်",$O="ကျွန်ုပ်၏ အချိန်မှတ်တမ်း",BO="ပင်မစာမျက်နှာသို့ ပြန်ရန်",UO="သင့်တွင် အချိန်မှတ်တမ်း မရှိပါ။",WO="အချိန်မှတ်တမ်း ရယူ၍မရပါ:",VO="ကျွန်ုပ်၏ အချိန်မှတ်တမ်းကြည့်ရန်",HO="လျှို့ဝှက်နံပါတ်ပြောင်းရန်",GO="လက်ရှိလျှို့ဝှက်နံပါတ် မမှန်ကန်ပါ။",jO="အချိန်ဝင်ခြင်း အောင်မြင်ပါသည်။",XO="အချိန်ထွက်ခြင်း အောင်မြင်ပါသည်။",YO="QR ကုဒ်ကို ဖတ်၍မရပါ။ ထပ်မံကြိုးစားပါ။",KO="သင့်တည်နေရာကို ရယူ၍မရပါ: {message}။ တည်နေရာဝန်ဆောင်မှုများကို ဖွင့်ထားပါ။",zO="{location} တွင် အချိန်မှတ်ခြင်း အောင်မြင်ပါသည်။",qO="လျှို့ဝှက်နံပါတ်ပြောင်းရန်",QO="လက်ရှိလျှို့ဝှက်နံပါတ်",ZO="လျှို့ဝှက်နံပါတ်အသစ်",JO="လျှို့ဝှက်နံပါတ်အသစ် အတည်ပြုပါ",e7="အပ်ဒိတ်လုပ်နေသည်...",t7="ဝန်ထမ်းများ",n7="တက်ရောက်မှု",r7="QR ကုဒ်များ",s7="QR ပုံအပ်လုဒ်လုပ်ရန်",o7="အလုပ်သမားအချက်အလက်များ ရယူ၍မရပါ",i7="ဆာဗာမှ လက်ရှိအခြေအနေကို အတည်ပြု၍မရပါ",a7="{action} အချိန်မှတ်ခြင်း အောင်မြင်ပါသည်",c7="နေရာ",l7="အမှားအယွင်း ဖြစ်ပွားခဲ့သည်",u7="ကင်မရာကို ဖွင့်၍မရပါ။",d7="ထပ်မံကြိုးစားပါ",f7="QR ကုဒ် တွေ့ရှိပြီး။ တည်နေရာရယူနေသည်...",h7="သင့်ဘရောက်ဇာတွင် တည်နေရာဝန်ဆောင်မှု မပါဝင်ပါ။",g7="သင့်တည်နေရာကို ရယူ၍မရပါ: {message}။ တည်နေရာဝန်ဆောင်မှုများကို ဖွင့်ထားပါ။",m7="QR ကုဒ်ကို ဖတ်၍မရပါ။ ထပ်မံကြိုးစားပါ။",p7="လျှို့ဝှက်နံပါတ် အပ်ဒိတ်လုပ်ရန်",x7="လျှို့ဝှက်နံပါတ်အသစ်များ မတူညီပါ။",w7="လျှို့ဝှက်နံပါတ်အသစ်သည် အနည်းဆုံး ၆လုံး ရှိရပါမည်။",y7="လျှို့ဝှက်နံပါတ် အပ်ဒိတ်လုပ်ပြီးပါပြီ။ လျှို့ဝှက်နံပါတ်အသစ်ဖြင့် ဝင်ရောက်နိုင်ပါပြီ။",C7="လျှို့ဝှက်နံပါတ် အပ်ဒိတ်လုပ်စဉ် အမှားအယွင်း ဖြစ်ပွားခဲ့သည်။",E7="အတွက် တက်ရောက်မှုမှတ်တမ်း",A7="လက်ဖြင့် အချိန်ထွက် ထည့်သွင်းရန်",b7="အလုပ်သမားက အချိန်ထွက်ရန် မေ့လျော့ပါက ဤပုံစံကို အသုံးပြုပါ။ နောက်ဆုံးဖြစ်ရပ်သည် အချိန်ဝင်ခြင်း ဖြစ်ရပါမည်။",_7="အချိန်ထွက် အချိန်",I7='အကြောင်းပြချက် (ဥပမာ "အချိန်ထွက်ရန် မေ့လျော့ခဲ့သည်")',S7="အကျဉ်းချုပ် မှတ်စုရေးပါ",T7="မှတ်တမ်း ထည့်သွင်းရန်",v7="စတင်ရက်",k7="ပြီးဆုံးရက်",N7="မှတ်တမ်းများ စစ်ထုတ်ရန်",R7="ဖြစ်ရပ်",O7="အချိန်တံဆိပ်",D7="နေရာအမည်",P7="ကိုအော်ဒီနိတ်များ",L7="မှတ်စုများ",M7="ဤကာလအတွင်း မှတ်တမ်းများ မတွေ့ပါ။",F7="မြေပုံပေါ်တွင် ပြရန်",$7="မရှိ",B7="အချိန်ထွက်အတွက် အချိန်တံဆိပ်ကို ရွေးချယ်ပါ။",U7="လက်ဖြင့်ထည့်သွင်းရန်အတွက် အကြောင်းပြချက်/မှတ်စု ပေးပါ။",W7="လက်ဖြင့် အချိန်ထွက် မှတ်တမ်း အောင်မြင်စွာ ပြုလုပ်ပြီးပါပြီ။",V7="အမှားအယွင်း ဖြစ်ပွားခဲ့သည်: {message}",H7="၁။ အလုပ်သမားများ ရွေးချယ်ရန်",G7="အလုပ်သမား ရှာဖွေပါ...",j7="အားလုံး ရွေးချယ်ရန်",X7="တက်မှ အလုပ်သမားအားလုံးကို ထည့်ရန်",Y7="-- တက် ရွေးချယ်ပါ --",K7="တက်ဖြင့် ထည့်ရန်",z7="အစီရင်ခံစာအတွက် ရွေးချယ်ပြီး ({count})",q7="အလုပ်သမားအားလုံး ({count}) ရွေးချယ်ပြီး",Q7="အလုပ်သမား မရွေးချယ်ရသေးပါ။",Z7="၂။ အစီရင်ခံစာ ဆက်တင်များ",J7="ဆက်တင်",eD="လစာ (ရူပီး)",tD="ရွေးချယ်ထားသော အလုပ်သမားအားလုံးအတွက် အသုံးပြုသည်။",nD="ဥပမာ ၃၀၀၀",rD="အပိုအချိန် အချက်များ",sD="စနေတနင်္ဂနွေ အချက်",oD="အားလပ်ရက် အချက်",iD="အများပြည်သူ အားလပ်ရက်များ ရွေးချယ်ရန်",aD="တက်ရောက်မှုနှင့် အပိုအချိန် အစီရင်ခံစာ ထုတ်လုပ်ရန်",cD="အပိုအချိन် လစာအကျဉ်းချုပ်",lD="အပိုအချိန် အကျဉ်းချုပ် ပို့ထုတ်ရန် (CSV)",uD="အလုပ်သမား",dD="စုစုပေါင်း အလုပ်လုပ်ခဲ့သော နာရီများ",fD="စုစုပေါင်း အပိုအချိန် လစာ (ရူပီး)",hD="တက်ရောက်မှု အချက်အလက်များ",gD="အစီရင်ခံစာ ရယူနေသည်...",mD="ရွေးချယ်ထားသော တက်အတွက် အလုပ်သမားများကို ရယူ၍မရပါ။",pD="အလုပ်သမားများ ရွေးချယ်ပါ၊ မှန်ကန်သော ရက်စွဲအပိုင်းအခြား သတ်မှတ်ပါ နှင့် လစာထည့်ပါ။",xD="အစီရင်ခံစာ ထုတ်လုပ်စဉ် အမှားအယွင်း ဖြစ်ပွားခဲ့သည်။",wD="အသုံးပြုသူအသစ် ထည့်သွင်းရန်",yD="အမည်အပြည့်အစုံ",CD="ဥပမာ မောင်ကျော်",ED="ဥပမာ mkyaw",AD="ဥပမာ ၁၂၃၄၅၆",bD="မန်နေဂျာအနေဖြင့်",_D="ထည့်သွင်းနေသည်...",ID="အသုံးပြုသူ ထည့်သွင်းရန်",SD="တက်များ စီမံခန့်ခွဲရန်",TD="တက်အသစ် ဖန်တီးရန်",vD="ဥပမာ အဖွဲ့",kD="တက် ဖန်တီးရန်",ND="တက်များ",RD="အလုပ်သမား စာရင်း",OD="အမည် သို့မဟုတ် အသုံးပြုသူအမည်ဖြင့် ရှာပါ",DD="တက်ဖြင့် စစ်ထုတ်ပါ",PD="စစ်ထုတ်မှု ရှင်းလင်းရန်",LD="ဝင်ရောက်သည့်ရက်",MD="လုပ်ဆောင်ချက်များ",FD="တက်များ တည်းဖြတ်ရန်",$D="မှတ်တမ်းများ ကြည့်ရန်",BD="အလုပ်သမားများ ရယူနေသည်...",UD="အလုပ်သမား မတွေ့ပါ။",WD="ရှေ့သို့",VD="နောက်သို့",HD="စာမျက်နှာ {current} / {total}",GD="အသုံးပြုနိုင်သော တက် မရှိပါ။",jD="ပြီးပါပြီ",XD="တက်များ အစုလိုက် တည်းဖြတ်ရန်",YD="ရွေးချယ်မှု ရှင်းလင်းရန်",KD="အသုံးပြုသူအတွက်",zD="လျှို့ဝှက်နံပါတ် သိမ်းဆည်းရန်",qD="သိမ်းဆည်းနေသည်...",QD="တက်များ အပ်ဒိတ်လုပ်၍မရပါ။ ထပ်မံကြိုးစားပါ။",ZD="တက် ဖျက်ပြီးပါပြီ။",JD="အလုပ်သမားများ ရယူ၍မရပါ။",e9="စာမျက်နှာ အချက်အလက်များ ရယူ၍မရပါ။",t9="အသုံးပြုသူ ထည့်သွင်းစဉ် အမှားအယွင်း ဖြစ်ပွားခဲ့သည်။",n9="အလုပ်သမား ဖျက်၍မရပါ။",r9="ဤအလုပ်သမား အကောင့်ကို ဖျက်မည်မှာ သေချာပါသလား။",s9="ဤတက်ကို ဖျက်မည်မှာ သေချာပါသလား။ ဤသည်က အလုပ်သမားအားလုံးမှ ဖယ်ရှားလိမ့်မည်။",o9="တက် ဖျက်၍မရပါ။",i9="လျှို့ဝှက်နံပါတ်များ မတူညီပါ။",a9="QR ကုဒ်အသစ် ဖန်တီးရန်",c9="QR ကုဒ် အမည်",l9="ဥပမာ 'အနောက်ဂိတ် ဝင်ပေါက်'",u9="ဖန်တီးရန်",d9="ကုဒ်အသစ် ဖန်တီးပြီးပါပြီ။",f9="ဤပုံကို သိမ်းဆည်းပါ သို့မဟုတ် အောက်ပါ ID ကို အသုံးပြုပါ။ ဤသည်က ပြန်လည်ရယူမှုတွင် ပျောက်ကွယ်သွားလိမ့်မည်။",h9="အိုင်ဒီ",g9="ရှိပြီးသား QR ကုဒ်များ",m9="အမည်",p9="အခြေအနေ",x9="ပိတ်ရန်",w9="ဖွင့်ရန်",y9="ဒေါင်းလုဒ်လုပ်ရန်",C9="QR ကုဒ် မတွေ့ပါ။ အထက်တွင် တစ်ခု ဖန်တီးပါ။",E9="ဤ QR ကုဒ်ကို ဖျက်မည်မှာ သေချာပါသလား။ ဤသည်ကို နောက်ပြန်မပြောင်းနိုင်ပါ။",A9="စိတ်မကောင်းပါ၊ QR ကုဒ်ကို ဒေါင်းလုဒ်လုပ်၍မရပါ။",b9="အလိုအလျောက်ဝင်ရောက်ရန် ကျွန်ုပ်ကို မှတ်ထားပါ",_9="ဤစက်ပစ္စည်းသည် သင့်အကောင့်အတွက် ခွင့်ပြုချက် မရှိပါ။ သင့်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။",I9="နောက်ကွယ်တွင် တည်နေရာခြေရာခံမှု အသက်ဝင်နေသည်",S9="လုံခြုံရေးစစ်ဆေးမှု ပြုလုပ်နေသည်...",T9="လုံခြုံရေးစစ်ဆေးမှု အောင်မြင်စွာ ပြီးဆုံးပါပြီ",v9="မြင့်မားသော လုံခြုံရေးအန္တရာယ် တွေ့ရှိရသည်။ သင့်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။",k9="စက်ပစ္စည်း အောင်မြင်စွာ မှတ်ပုံတင်ပြီးပါပြီ",N9="ဤစက်ပစ္စည်းအတွက် အလိုအလျောက်ဝင်ရောက်မှု ဖွင့်ပြီးပါပြီ",R9="နောက်ကွယ် တည်နေရာခြေရာခံမှု ဖွင့်ပြီးပါပြီ",O9="တက်ရောက်မှုခြေရာခံမှုအတွက် တည်နေရာခွင့်ပြုချက်များ လိုအပ်သည်",D9="ဆက်တိုက် တည်နေရာခြေရာခံမှုအတွက် ဤအပ်ပ်အတွက် ဘက်ထရီ အကောင်းဆုံးလုပ်ခြင်းကို ပိတ်ပါ",P9="GPS အတုအပ် အပလီကေးရှင်း တွေ့ရှိရသည်။ ဤသည်က တက်ရောက်မှု တိကျမှုကို ထိခိုက်စေနိုင်သည်။",L9="အတု တည်နေရာ ဖွင့်ထားသည်။ တိကျသော တက်ရောက်မှု ခြေရာခံမှုအတွက် ပိတ်ပါ။",M9="စက်ပစ္စည်း လုံခြုံရေး သတိပေးချက်: သံသယဖြစ်ဖွယ် အပလီကေးရှင်းများ တွေ့ရှိရသည်",F9="တည်နေရာ အပ်ဒိတ်လုပ်၍မရပါ။ အလိုအလျောက် ထပ်မံကြိုးစားလိမ့်မည်။",$9="မူလဝန်ဆောင်မှုများ စတင်နေသည်...",B9="ဝန်ဆောင်မှုများ အားလုံး အဆင်သင့်ပါပြီ",U9="အလိုအလျောက်ဝင်ရောက်မှု မအောင်မြင်ပါ။ လက်ဖြင့် ဝင်ရောက်ပါ။",W9="စက်ပစ္စည်း အတည်ပြုခြင်း မအောင်မြင်ပါ။ ပံ့ပိုးမှုကို ဆက်သွယ်ပါ။",V9="ဝန်ဆောင်မှုများ အခြေအနေ",H9="ခြုံငုံအခြေအနေ",G9="တည်နေရာခြေရာခံမှု",j9="စက်ပစ္စည်း မှတ်ပုံတင်မှု",X9="လုံခြုံရေး အခြေအနေ",Y9="နောက်ဆုံး တည်နေရာ အပ်ဒိတ်",K9="စက်ပစ္စည်း အိုင်ဒီ",z9="စတင်ရန်",q9="စစ်ဆေးရန်",Q9="စစ်ဆေးနေသည်...",Z9="ပြန်လည်ရယူရန်",J9="ပြန်လည်ရယူနေသည်...",eP="မစတင်ရသေးပါ",tP="အဆင်သင့်",nP="ဝက်ဘ်တွင်သာ",rP="လှုပ်ရှားနေသည်",sP="အလုပ်မလုပ်တော့ပါ",oP="မှတ်ပုံတင်ပြီး",iP="ဆိုင်းငံ့နေသည်",aP="စစ်ဆေးထားခြင်း မရှိပါ",cP="အဆန်းပြားသွားပါပြီ",lP="လက်ရှိ",uP="မတိုင်မီ",dP="ယခုတင်",fP="{minutes} မိနစ် အကြာ",hP="{hours} နာရီ အကြာ",gP="{days} ရက် အကြာ",mP="အခြေအနေ ပြန်လည်ရယူ၍မရပါ",pP="တည်နေရာခြေရာခံမှု အောင်မြင်စွာ စတင်သည်",xP="တည်နေရာခြေရာခံမှု စတင်၍မရပါ",wP="လုံခြုံရေး စစ်ဆေးမှု မအောင်မြင်ပါ",yP="ပုဂ္ဂိုလ်ရေး",CP="အချိန်မှတ်တမ်း",EP="ကင်မရာ ဖွင့်ရန်",AP="QR ကုဒ် စကင်ဖတ်ရန်",bP="ဝန်ဆောင်မှုများ",_P="စနစ်ဝန်ဆောင်မှုများနှင့် လုံခြုံရေးအခြေအနေ",IP="သင့်အကောင့် လျှို့ဝှက်နံပါတ် အပ်ဒိတ်လုပ်ပါ",SP="သင့်အကောင့်မှ ထွက်ရန်",TP="အလုပ်တည်နေရာ ခြေရာခံမှု",vP="အလုပ်တက်ရောက်မှုအတွက် တည်နေရာခြေရာခံမှု အသက်ဝင်နေသည်",kP="အလုပ်တက်ရောက်မှုအတွက် တည်နေရာကို ကြည့်ရှုနေသည်",k1={appTitle:uO,logout:dO,login:fO,username:hO,password:gO,loggingIn:mO,language:pO,failedConnection:xO,invalidToken:wO,invalidCredentials:yO,english:CO,malay:EO,tamil:AO,bengali:bO,burmese:_O,nepali:IO,yourStatus:SO,clockedIn:TO,clockedOut:vO,clockIn:kO,clockOut:NO,clock_in:RO,clock_out:OO,scanToClock:DO,in:"ဝင်",out:PO,cancel:LO,viewMyClockHistory:MO,changeMyPassword:FO,myClockHistory:$O,backToDashboard:BO,noClockHistory:UO,clockHistoryFetchFail:WO,viewClockHistory:VO,changePassword:HO,invalidCurrentPassword:GO,successClockIn:jO,successClockOut:XO,qrFail:YO,geoFail:KO,successClock:zO,changePasswordTitle:qO,currentPassword:QO,newPassword:ZO,confirmNewPassword:JO,updating:e7,tabPersonnel:t7,tabAttendance:n7,tabQrCodes:r7,uploadQrImage:s7,couldNotLoadWorkerInfo:o7,couldNotVerifyStatus:i7,successfullyClocked:a7,site:c7,errorOccurred:l7,unableToStartCamera:u7,tryAgain:d7,qrDetectedGettingLocation:f7,geolocationNotSupported:h7,unableToRetrieveLocation:g7,qrNotDetectedTryAgain:m7,updatePassword:p7,passwordsNoMatch:x7,passwordTooShort:w7,passwordUpdated:y7,passwordUpdateError:C7,attendanceLogFor:E7,addManualClockOut:A7,manualClockOutInstruction:b7,clockOutTime:_7,reason:I7,enterBriefNote:S7,addRecord:T7,startDate:v7,endDate:k7,filterRecords:N7,event:R7,timestamp:O7,locationName:D7,coordinates:P7,notes:L7,noRecordsFound:M7,showOnMap:F7,nA:$7,pleaseSelectTimestamp:B7,pleaseProvideReason:U7,manualClockOutSuccess:W7,manualClockOutError:V7,selectWorkers:H7,searchWorkerPlaceholder:G7,selectAll:j7,addWorkersByTag:X7,chooseTag:Y7,addByTag:K7,selectedForReport:z7,allWorkersSelected:q7,noWorkersSelected:Q7,reportSettings:Z7,setting:J7,monthlySalary:eD,salaryAppliedNote:tD,salaryPlaceholder:nD,otFactors:rD,weekendFactor:sD,holidayFactor:oD,selectPublicHolidays:iD,generateReport:aD,overtimePaySummary:cD,exportOtSummary:lD,worker:uD,totalHoursWorked:dD,totalOtPay:fD,rawAttendanceData:hD,loadingReport:gD,tagLoadError:mD,generateReportError:pD,reportGenerationError:xD,addNewUser:wD,fullName:yD,egJohnSmith:CD,egJsmith:ED,eg123456:AD,asManager:bD,adding:_D,addUser:ID,manageTags:SD,createNewTag:TD,egTeam:vD,createTag:kD,tags:ND,workerRoster:RD,searchByNameOrUsername:OD,filterByTag:DD,clearFilter:PD,dateJoined:LD,actions:MD,editTags:FD,viewRecords:$D,delete:"ဖျက်ရန်",loadingWorkers:BD,noWorkersFound:UD,previous:WD,next:VD,pageOf:HD,noTagsAvailable:GD,done:jD,bulkEditTags:XD,clearSelection:YD,forUser:KD,savePassword:zD,saving:qD,failedToUpdateTags:QD,tagDeleted:ZD,failedToFetchWorkers:JD,failedToLoadPageData:e9,errorAddingUser:t9,failedToDeleteWorker:n9,areYouSureDeleteWorker:r9,areYouSureDeleteTag:s9,failedToDeleteTag:o9,passwordsDoNotMatch:i9,createQrCode:a9,qrCodeName:c9,qrNamePlaceholder:l9,create:u9,newCodeCreated:d9,saveQrInstruction:f9,id:h9,existingQrCodes:g9,name:m9,status:p9,deactivate:x9,activate:w9,download:y9,noQrCodesFound:C9,deleteQrConfirm:E9,qrDownloadError:A9,rememberMe:b9,deviceNotAuthorized:_9,locationTrackingActive:I9,securityCheckInProgress:S9,securityCheckComplete:T9,highSecurityRisk:v9,deviceRegistered:k9,autoLoginEnabled:N9,backgroundLocationEnabled:R9,permissionsRequired:O9,batteryOptimizationWarning:D9,gpsSpooferDetected:P9,mockLocationEnabled:L9,deviceSecurityWarning:M9,locationUpdateFailed:F9,servicesInitializing:$9,servicesReady:B9,autoLoginFailed:U9,deviceValidationFailed:W9,servicesStatus:V9,overallStatus:H9,locationTracking:G9,deviceRegistration:j9,securityStatus:X9,lastLocationUpdate:Y9,deviceId:K9,start:z9,check:q9,checking:Q9,refresh:Z9,refreshing:J9,notInitialized:eP,ready:tP,webOnly:nP,active:rP,inactive:sP,registered:oP,pending:iP,notChecked:aP,outdated:cP,current:lP,never:uP,justNow:dP,minutesAgo:fP,hoursAgo:hP,daysAgo:gP,failedToRefreshStatus:mP,locationTrackingStarted:pP,failedToStartLocationTracking:xP,securityCheckFailed:wP,personal:yP,clockHistory:CP,openCamera:EP,scanQRCode:AP,services:bP,systemServicesStatus:_P,updateYourPassword:IP,signOutOfAccount:SP,workLocationTracking:TP,locationTrackingForAttendance:vP,monitoringLocation:kP},NP="उपस्थिति प्रणाली",RP="लगआउट",OP="लगइन",DP="प्रयोगकर्ता नाम",PP="पासवर्ड",LP="लगइन गर्दै...",MP="भाषा",FP="सर्भरसँग जडान गर्न सकिएन।",$P="सर्भरबाट अमान्य टोकन प्राप्त भयो।",BP="गलत प्रयोगकर्ता नाम वा पासवर्ड।",UP="अंग्रेजी",WP="मलय",VP="तामिल",HP="बङ्गाली",GP="बर्मेली",jP="नेपाली",XP="स्थिति",YP="उपस्थित भएको",KP="अनुपस्थित भएको",zP="उपस्थित हुनुहोस्",qP="अनुपस्थित हुनुहोस्",QP="उपस्थित हुनुहोस्",ZP="अनुपस्थित हुनुहोस्",JP="{action} को लागि स्क्यान गर्नुहोस्",eL="बाहिर",tL="रद्द गर्नुहोस्",nL="मेरो उपस्थिति इतिहास हेर्नुहोस्",rL="मेरो पासवर्ड परिवर्तन गर्नुहोस्",sL="मेरो उपस्थिति इतिहास",oL="ड्यासबोर्डमा फर्कनुहोस्",iL="तपाईंको कुनै उपस्थिति इतिहास छैन।",aL="उपस्थिति इतिहास ल्याउन सकिएन:",cL="मेरो उपस्थिति इतिहास हेर्नुहोस्",lL="मेरो पासवर्ड परिवर्तन गर्नुहोस्",uL="गलत वर्तमान पासवर्ड।",dL="सफलतापूर्वक उपस्थित भएको।",fL="सफलतापूर्वक अनुपस्थित भएको।",hL="QR कोड पत्ता लगाउन सकिएन। कृपया पुनः प्रयास गर्नुहोस्।",gL="तपाईंको स्थान पत्ता लगाउन सकिएन: {message}। कृपया स्थान सेवाहरू सक्षम पार्नुहोस्।",mL="{location} मा सफलतापूर्वक उपस्थित भएको।",pL="पासवर्ड परिवर्तन गर्नुहोस्",xL="वर्तमान पासवर्ड",wL="नयाँ पासवर्ड",yL="नयाँ पासवर्ड पुष्टि गर्नुहोस्",CL="अपडेट गर्दै...",EL="कर्मचारी",AL="उपस्थिति",bL="QR कोडहरू",_L="QR छवि अपलोड गर्नुहोस्",IL="कर्मचारी जानकारी लोड गर्न सकिएन",SL="सर्भरबाट वर्तमान स्थिति प्रमाणित गर्न सकिएन",TL="सफलतापूर्वक {action} भएको",vL="साइट",kL="त्रुटि भयो",NL="क्यामेरा सुरु गर्न सकिएन।",RL="पुनः प्रयास गर्नुहोस्",OL="QR कोड पत्ता लाग्यो। स्थान प्राप्त गर्दै...",DL="तपाईंको ब्राउजरले भौगोलिक स्थान समर्थन गर्दैन।",PL="तपाईंको स्थान पत्ता लगाउन सकिएन: {message}। कृपया स्थान सेवाहरू सक्षम पार्नुहोस्।",LL="QR कोड पत्ता लगाउन सकिएन। कृपया पुनः प्रयास गर्नुहोस्।",ML="पासवर्ड अपडेट गर्नुहोस्",FL="नयाँ पासवर्डहरू मेल खाँदैनन्।",$L="नयाँ पासवर्ड कम्तिमा ६ वर्णको हुनुपर्छ।",BL="पासवर्ड सफलतापूर्वक अपडेट भयो! तपाईं अब आफ्नो नयाँ पासवर्ड प्रयोग गरेर लगइन गर्न सक्नुहुन्छ।",UL="पासवर्ड अपडेट गर्दा त्रुटि भयो।",WL="को लागि उपस्थिति लग",VL="म्यानुअल क्लक-आउट थप्नुहोस्",HL="यदि कर्मचारी क्लक आउट गर्न बिर्सिएका छन् भने यो फारम प्रयोग गर्नुहोस्। अन्तिम घटना क्लक-इन हुनुपर्छ।",GL="क्लक-आउट समय",jL='कारण (जस्तै, "क्लक आउट गर्न बिर्सियो")',XL="छोटो टिप्पणी प्रविष्ट गर्नुहोस्",YL="रेकर्ड थप्नुहोस्",KL="सुरु मिति",zL="अन्त्य मिति",qL="रेकर्डहरू फिल्टर गर्नुहोस्",QL="घटना",ZL="समय छाप",JL="स्थानको नाम",eM="निर्देशाङ्क",tM="टिप्पणीहरू",nM="यस अवधिको लागि कुनै रेकर्ड भेटिएन।",rM="नक्सामा देखाउनुहोस्",sM="उपलब्ध छैन",oM="कृपया क्लक-आउटको लागि समय छाप चयन गर्नुहोस्।",iM="कृपया म्यानुअल प्रविष्टिको लागि कारण/टिप्पणी प्रदान गर्नुहोस्।",aM="म्यानुअल क्लक-आउट सफलतापूर्वक रेकर्ड भयो!",cM="त्रुटि भयो: {message}",lM="१. कर्मचारी चयन गर्नुहोस्",uM="कर्मचारी खोज्नुहोस्...",dM="सबै चयन गर्नुहोस्",fM="ट्यागबाट सबै कर्मचारी थप्नुहोस्",hM="-- ट्याग छान्नुहोस् --",gM="ट्यागद्वारा थप्नुहोस्",mM="रिपोर्टको लागि चयनित ({count})",pM="सबै कर्मचारी ({count}) चयनित",xM="कुनै कर्मचारी चयनित छैन।",wM="२. रिपोर्ट सेटिङहरू",yM="सेटिङ",CM="मासिक तलब (RM)",EM="सबै चयनित कर्मचारीहरूमा लागू।",AM="जस्तै, ३०००",bM="OT फ्याक्टरहरू",_M="सप्ताहन्त फ्याक्टर",IM="छुट्टी फ्याक्टर",SM="सार्वजनिक छुट्टीहरू चयन गर्नुहोस्",TM="उपस्थिति र OT रिपोर्ट उत्पन्न गर्नुहोस्",vM="ओभरटाइम भुक्तानी सारांश",kM="OT सारांश निर्यात गर्नुहोस् (CSV)",NM="कर्मचारी",RM="कुल काम गरेको घण्टा",OM="कुल OT भुक्तानी (RM)",DM="कच्चा उपस्थिति डेटा",PM="रिपोर्ट लोड गर्दै...",LM="चयनित ट्यागको लागि कर्मचारी लोड गर्न सकिएन।",MM="कृपया कर्मचारी चयन गर्नुहोस्, मान्य मिति दायरा सेट गर्नुहोस्, र तलब प्रविष्ट गर्नुहोस्।",FM="रिपोर्ट उत्पन्न गर्दा त्रुटि भयो।",$M="नयाँ प्रयोगकर्ता थप्नुहोस्",BM="पूरा नाम",UM="जस्तै जोन स्मिथ",WM="जस्तै jsmith",VM="जस्तै १२३४५६",HM="प्रबन्धकको रूपमा",GM="थप्दै...",jM="प्रयोगकर्ता थप्नुहोस्",XM="ट्यागहरू व्यवस्थापन गर्नुहोस्",YM="नयाँ ट्याग सिर्जना गर्नुहोस्",KM="जस्तै टिम",zM="ट्याग सिर्जना गर्नुहोस्",qM="ट्यागहरू",QM="कर्मचारी सूची",ZM="नाम वा प्रयोगकर्ता नामद्वारा खोज्नुहोस्",JM="ट्यागद्वारा फिल्टर गर्नुहोस्",eF="फिल्टर हटाउनुहोस्",tF="सामेल भएको मिति",nF="कार्यहरू",rF="ट्यागहरू सम्पादन गर्नुहोस्",sF="रेकर्डहरू हेर्नुहोस्",oF="कर्मचारी लोड गर्दै...",iF="कुनै कर्मचारी भेटिएन।",aF="अघिल्लो",cF="अर्को",lF="पृष्ठ {current} को {total}",uF="कुनै ट्याग उपलब्ध छैन।",dF="सकियो",fF="बल्क ट्याग सम्पादन",hF="चयन हटाउनुहोस्",gF="प्रयोगकर्ताको लागि",mF="पासवर्ड सेभ गर्नुहोस्",pF="सेभ गर्दै...",xF="ट्यागहरू अपडेट गर्न सकिएन। कृपया पुनः प्रयास गर्नुहोस्।",wF="ट्याग सफलतापूर्वक मेटाइयो।",yF="कर्मचारी फेच गर्न सकिएन।",CF="पृष्ठ डेटा लोड गर्न सकिएन।",EF="प्रयोगकर्ता थप्दा त्रुटि भयो।",AF="कर्मचारी मेटाउन सकिएन।",bF="के तपाईं यो कर्मचारी खाता मेटाउन निश्चित हुनुहुन्छ?",_F="के तपाईं यो ट्याग मेटाउन निश्चित हुनुहुन्छ? यसले सबै कर्मचारीहरूबाट यसलाई हटाउनेछ।",IF="ट्याग मेटाउन सकिएन।",SF="पासवर्डहरू मेल खाँदैनन्।",TF="नयाँ QR कोड सिर्जना गर्नुहोस्",vF="QR कोड नाम",kF="जस्तै, 'पश्चिम गेट प्रवेश'",NF="सिर्जना गर्नुहोस्",RF="नयाँ कोड सिर्जना भयो!",OF="यो छवि सेभ गर्नुहोस् वा तलको ID प्रयोग गर्नुहोस्। यो रिफ्रेसमा हराउनेछ।",DF="ID",PF="अवस्थित QR कोडहरू",LF="नाम",MF="स्थिति",FF="निष्क्रिय पार्नुहोस्",$F="सक्रिय पार्नुहोस्",BF="डाउनलोड गर्नुहोस्",UF="कुनै QR कोडहरू भेटिएन। माथि एउटा सिर्जना गर्नुहोस्!",WF="के तपाईं यो QR कोड मेटाउन निश्चित हुनुहुन्छ? यो पूर्ववत गर्न सकिँदैन।",VF="माफ गर्नुहोस्, QR कोड डाउनलोड गर्न सकिएन।",HF="अटो-लगइनको लागि मलाई सम्झनुहोस्",GF="यो उपकरण तपाईंको खाताको लागि प्राधिकृत छैन। कृपया आफ्नो व्यवस्थापकलाई सम्पर्क गर्नुहोस्।",jF="पृष्ठभूमिमा स्थान ट्र्याकिङ सक्रिय छ",XF="सुरक्षा जाँच भइरहेको छ...",YF="सुरक्षा जाँच सफलतापूर्वक सम्पन्न भयो",KF="उच्च सुरक्षा जोखिम पत्ता लाग्यो। कृपया आफ्नो व्यवस्थापकलाई सम्पर्क गर्नुहोस्।",zF="उपकरण सफलतापूर्वक दर्ता भयो",qF="यस उपकरणको लागि अटो-लगइन सक्षम पारियो",QF="पृष्ठभूमि स्थान ट्र्याकिङ सक्षम पारियो",ZF="उपस्थिति ट्र्याकिङको लागि स्थान अनुमतिहरू आवश्यक छ",JF="निरन्तर स्थान ट्र्याकिङ सुनिश्चित गर्न कृपया यस एपको लागि ब्याट्री अप्टिमाइजेसन अक्षम पार्नुहोस्",e$="GPS स्पूफिङ एप्लिकेसन पत्ता लाग्यो। यसले उपस्थिति शुद्धतालाई असर गर्न सक्छ।",t$="नक्कली स्थान सक्षम छ। सही उपस्थिति ट्र्याकिङको लागि कृपया यसलाई अक्षम पार्नुहोस्।",n$="उपकरण सुरक्षा चेतावनी: संदिग्ध एप्लिकेसनहरू पत्ता लाग्यो",r$="स्थान अपडेट गर्न सकिएन। स्वचालित रूपमा पुनः प्रयास गर्नेछ।",s$="मूल सेवाहरू प्रारम्भ गर्दै...",o$="सबै सेवाहरू तयार छन्",i$="अटो-लगइन असफल। कृपया म्यानुअल रूपमा लगइन गर्नुहोस्।",a$="उपकरण प्रमाणीकरण असफल। कृपया सहयोगलाई सम्पर्क गर्नुहोस्।",c$="सेवाहरूको स्थिति",l$="समग्र स्थिति",u$="स्थान ट्र्याकिङ",d$="उपकरण दर्ता",f$="सुरक्षा स्थिति",h$="अन्तिम स्थान अपडेट",g$="उपकरण ID",m$="सुरु गर्नुहोस्",p$="जाँच गर्नुहोस्",x$="जाँच गर्दै...",w$="रिफ्रेस गर्नुहोस्",y$="रिफ्रेस गर्दै...",C$="प्रारम्भ गरिएको छैन",E$="तयार",A$="वेब मात्र",b$="सक्रिय",_$="निष्क्रिय",I$="दर्ता गरिएको",S$="पेन्डिङ",T$="जाँच गरिएको छैन",v$="पुरानो",k$="वर्तमान",N$="कहिल्यै छैन",R$="भर्खरै",O$="{minutes} मिनेट अघि",D$="{hours} घण्टा अघि",P$="{days} दिन अघि",L$="स्थिति रिफ्रेस गर्न सकिएन",M$="स्थान ट्र्याकिङ सफलतापूर्वक सुरु भयो",F$="स्थान ट्र्याकिङ सुरु गर्न सकिएन",$$="सुरक्षा जाँच असफल",B$="व्यक्तिगत",U$="उपस्थिति इतिहास",W$="क्यामेरा खोल्नुहोस्",V$="QR कोड स्क्यान गर्नुहोस्",H$="सेवाहरू",G$="प्रणाली सेवाहरू र सुरक्षा स्थिति",j$="तपाईंको खाताको पासवर्ड अपडेट गर्नुहोस्",X$="तपाईंको खाताबाट साइन आउट गर्नुहोस्",Y$="कार्य स्थान ट्र्याकिङ",K$="कार्य उपस्थितिको लागि स्थान ट्र्याकिङ सक्रिय",z$="कार्य उपस्थितिको लागि स्थान निगरानी गर्दै",N1={appTitle:NP,logout:RP,login:OP,username:DP,password:PP,loggingIn:LP,language:MP,failedConnection:FP,invalidToken:$P,invalidCredentials:BP,english:UP,malay:WP,tamil:VP,bengali:HP,burmese:GP,nepali:jP,yourStatus:XP,clockedIn:YP,clockedOut:KP,clockIn:zP,clockOut:qP,clock_in:QP,clock_out:ZP,scanToClock:JP,in:"भित्र",out:eL,cancel:tL,viewMyClockHistory:nL,changeMyPassword:rL,myClockHistory:sL,backToDashboard:oL,noClockHistory:iL,clockHistoryFetchFail:aL,viewClockHistory:cL,changePassword:lL,invalidCurrentPassword:uL,successClockIn:dL,successClockOut:fL,qrFail:hL,geoFail:gL,successClock:mL,changePasswordTitle:pL,currentPassword:xL,newPassword:wL,confirmNewPassword:yL,updating:CL,tabPersonnel:EL,tabAttendance:AL,tabQrCodes:bL,uploadQrImage:_L,couldNotLoadWorkerInfo:IL,couldNotVerifyStatus:SL,successfullyClocked:TL,site:vL,errorOccurred:kL,unableToStartCamera:NL,tryAgain:RL,qrDetectedGettingLocation:OL,geolocationNotSupported:DL,unableToRetrieveLocation:PL,qrNotDetectedTryAgain:LL,updatePassword:ML,passwordsNoMatch:FL,passwordTooShort:$L,passwordUpdated:BL,passwordUpdateError:UL,attendanceLogFor:WL,addManualClockOut:VL,manualClockOutInstruction:HL,clockOutTime:GL,reason:jL,enterBriefNote:XL,addRecord:YL,startDate:KL,endDate:zL,filterRecords:qL,event:QL,timestamp:ZL,locationName:JL,coordinates:eM,notes:tM,noRecordsFound:nM,showOnMap:rM,nA:sM,pleaseSelectTimestamp:oM,pleaseProvideReason:iM,manualClockOutSuccess:aM,manualClockOutError:cM,selectWorkers:lM,searchWorkerPlaceholder:uM,selectAll:dM,addWorkersByTag:fM,chooseTag:hM,addByTag:gM,selectedForReport:mM,allWorkersSelected:pM,noWorkersSelected:xM,reportSettings:wM,setting:yM,monthlySalary:CM,salaryAppliedNote:EM,salaryPlaceholder:AM,otFactors:bM,weekendFactor:_M,holidayFactor:IM,selectPublicHolidays:SM,generateReport:TM,overtimePaySummary:vM,exportOtSummary:kM,worker:NM,totalHoursWorked:RM,totalOtPay:OM,rawAttendanceData:DM,loadingReport:PM,tagLoadError:LM,generateReportError:MM,reportGenerationError:FM,addNewUser:$M,fullName:BM,egJohnSmith:UM,egJsmith:WM,eg123456:VM,asManager:HM,adding:GM,addUser:jM,manageTags:XM,createNewTag:YM,egTeam:KM,createTag:zM,tags:qM,workerRoster:QM,searchByNameOrUsername:ZM,filterByTag:JM,clearFilter:eF,dateJoined:tF,actions:nF,editTags:rF,viewRecords:sF,delete:"मेटाउनुहोस्",loadingWorkers:oF,noWorkersFound:iF,previous:aF,next:cF,pageOf:lF,noTagsAvailable:uF,done:dF,bulkEditTags:fF,clearSelection:hF,forUser:gF,savePassword:mF,saving:pF,failedToUpdateTags:xF,tagDeleted:wF,failedToFetchWorkers:yF,failedToLoadPageData:CF,errorAddingUser:EF,failedToDeleteWorker:AF,areYouSureDeleteWorker:bF,areYouSureDeleteTag:_F,failedToDeleteTag:IF,passwordsDoNotMatch:SF,createQrCode:TF,qrCodeName:vF,qrNamePlaceholder:kF,create:NF,newCodeCreated:RF,saveQrInstruction:OF,id:DF,existingQrCodes:PF,name:LF,status:MF,deactivate:FF,activate:$F,download:BF,noQrCodesFound:UF,deleteQrConfirm:WF,qrDownloadError:VF,rememberMe:HF,deviceNotAuthorized:GF,locationTrackingActive:jF,securityCheckInProgress:XF,securityCheckComplete:YF,highSecurityRisk:KF,deviceRegistered:zF,autoLoginEnabled:qF,backgroundLocationEnabled:QF,permissionsRequired:ZF,batteryOptimizationWarning:JF,gpsSpooferDetected:e$,mockLocationEnabled:t$,deviceSecurityWarning:n$,locationUpdateFailed:r$,servicesInitializing:s$,servicesReady:o$,autoLoginFailed:i$,deviceValidationFailed:a$,servicesStatus:c$,overallStatus:l$,locationTracking:u$,deviceRegistration:d$,securityStatus:f$,lastLocationUpdate:h$,deviceId:g$,start:m$,check:p$,checking:x$,refresh:w$,refreshing:y$,notInitialized:C$,ready:E$,webOnly:A$,active:b$,inactive:_$,registered:I$,pending:S$,notChecked:T$,outdated:v$,current:k$,never:N$,justNow:R$,minutesAgo:O$,hoursAgo:D$,daysAgo:P$,failedToRefreshStatus:L$,locationTrackingStarted:M$,failedToStartLocationTracking:F$,securityCheckFailed:$$,personal:B$,clockHistory:U$,openCamera:W$,scanQRCode:V$,services:H$,systemServicesStatus:G$,updateYourPassword:j$,signOutOfAccount:X$,workLocationTracking:Y$,locationTrackingForAttendance:K$,monitoringLocation:z$};console.log("[DEBUG] i18n.js loaded!");console.log("[DEBUG] en.json:",I1);console.log("[DEBUG] ms.json:",S1);console.log("[DEBUG] tm.json:",T1);console.log("[DEBUG] bd.json:",v1);console.log("[DEBUG] my.json:",k1);console.log("[DEBUG] np.json:",N1);const R1=Cm({legacy:!1,locale:"en",fallbackLocale:"en",messages:{en:I1,ms:S1,tm:T1,bd:v1,np:N1,my:k1}});console.log("[DEBUG] i18n instance created:",R1);console.log("[DEBUG] i18n.js export complete");const lc=Sh(Ap);lc.use(_1);lc.use(R1);lc.mount("#app");export{m1 as W};
diff --git a/dist/assets/index-DnygOJsq.css b/dist/assets/index-DnygOJsq.css
new file mode 100644
index 0000000..0c5c1b9
--- /dev/null
+++ b/dist/assets/index-DnygOJsq.css
@@ -0,0 +1 @@
+*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;touch-action:manipulation}body{overscroll-behavior:none;-webkit-overflow-scrolling:touch;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;margin:0;padding:0}*{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}input,textarea{-webkit-user-select:text;-moz-user-select:text;user-select:text}html.dark{color-scheme:dark}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fixed{position:fixed}.absolute{position:absolute}.inset-0{top:0;right:0;bottom:0;left:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[calc\(100px\+env\(safe-area-inset-top\)\)\]{margin-top:calc(100px + env(safe-area-inset-top))}.block{display:block}.flex{display:flex}.hidden{display:none}.h-12{height:3rem}.h-16{height:4rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.min-h-screen{min-height:100vh}.w-12{width:3rem}.w-16{width:4rem}.w-4{width:1rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-full{width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-l-4{border-left-width:4px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-orange-100{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-opacity-90{--tw-bg-opacity: .9}.p-2{padding:.5rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.safe-top{padding-top:var(--safe-area-inset-top)}.safe-bottom{padding-bottom:var(--safe-area-inset-bottom)}.mobile-viewport{height:100vh;height:100dvh}.fixed-header-safe{position:fixed;top:0;left:0;right:0;z-index:50;padding-top:var(--safe-area-inset-top)}.main-with-fixed-header{padding-top:calc(var(--safe-area-inset-top) + 5rem)}.main-with-fixed-header-and-nav{padding-top:calc(var(--safe-area-inset-top) + 5rem);padding-bottom:calc(var(--safe-area-inset-bottom) + 4rem)}.hover\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus\:ring-red-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}@media (prefers-color-scheme: dark){.dark\:border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900{--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/50{background-color:#14532d80}.dark\:bg-red-900{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/50{background-color:#7f1d1d80}.dark\:text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}}.bottom-nav-container[data-v-0c472705]{position:fixed;bottom:0;left:0;right:0;z-index:1000;transform:translateZ(0);-webkit-transform:translateZ(0);will-change:auto;backface-visibility:hidden;-webkit-backface-visibility:hidden}.bottom-nav-content[data-v-0c472705]{background-color:#fff;border-top:1px solid #e5e7eb;box-shadow:0 -4px 6px -1px #0000001a,0 -2px 4px -1px #0000000f;display:flex;padding-bottom:0;touch-action:manipulation;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottom-nav-container[data-v-0c472705]:before{content:"";position:absolute;top:-50px;left:0;right:0;height:50px;background:transparent;pointer-events:none}@media (max-width: 640px){.bottom-nav-container[data-v-0c472705]{transform:translateZ(0);-webkit-transform:translate3d(0,0,0);position:fixed!important;bottom:0!important}.bottom-nav-content[data-v-0c472705]{padding-bottom:max(var(--safe-area-inset-bottom),8px)}}@supports (-webkit-overflow-scrolling: touch){.bottom-nav-container[data-v-0c472705]{-webkit-overflow-scrolling:auto}}.blocker-overlay[data-v-1669ff40]{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000000e6;display:flex;justify-content:center;align-items:center;z-index:9999;color:#fff;text-align:center;padding:20px}.blocker-content[data-v-1669ff40]{max-width:80%}.blocker-title[data-v-1669ff40]{font-size:1.5rem;font-weight:700;margin-bottom:1rem}.blocker-message[data-v-1669ff40]{font-size:1rem}.safe-area-main[data-v-1669ff40]{min-height:calc(100vh - 4rem)}body[data-v-1669ff40]{overscroll-behavior:none;-webkit-overflow-scrolling:touch}html[data-v-1669ff40],body[data-v-1669ff40]{touch-action:pan-y;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}
diff --git a/dist/assets/web--OeF1eU6.js b/dist/assets/web--OeF1eU6.js
new file mode 100644
index 0000000..ccfa194
--- /dev/null
+++ b/dist/assets/web--OeF1eU6.js
@@ -0,0 +1 @@
+import{W as w}from"./index-B7lrTY2m.js";class y extends w{async getId(){return{identifier:this.getUid()}}async getInfo(){if(typeof navigator>"u"||!navigator.userAgent)throw this.unavailable("Device API not available in this browser");const e=navigator.userAgent,i=this.parseUa(e);return{model:i.model,platform:"web",operatingSystem:i.operatingSystem,osVersion:i.osVersion,manufacturer:navigator.vendor,isVirtual:!1,webViewVersion:i.browserVersion}}async getBatteryInfo(){if(typeof navigator>"u"||!navigator.getBattery)throw this.unavailable("Device API not available in this browser");let e={};try{e=await navigator.getBattery()}catch{}return{batteryLevel:e.level,isCharging:e.charging}}async getLanguageCode(){return{value:navigator.language.split("-")[0].toLowerCase()}}async getLanguageTag(){return{value:navigator.language}}parseUa(e){const i={},r=e.indexOf("(")+1;let a=e.indexOf(") AppleWebKit");e.indexOf(") Gecko")!==-1&&(a=e.indexOf(") Gecko"));const s=e.substring(r,a);if(e.indexOf("Android")!==-1){const t=s.replace("; wv","").split("; ").pop();t&&(i.model=t.split(" Build")[0]),i.osVersion=s.split("; ")[1]}else if(i.model=s.split("; ")[0],typeof navigator<"u"&&navigator.oscpu)i.osVersion=navigator.oscpu;else if(e.indexOf("Windows")!==-1)i.osVersion=s;else{const t=s.split("; ").pop();if(t){const n=t.replace(" like Mac OS X","").split(" ");i.osVersion=n[n.length-1].replace(/_/g,".")}}/android/i.test(e)?i.operatingSystem="android":/iPad|iPhone|iPod/.test(e)&&!window.MSStream?i.operatingSystem="ios":/Win/.test(e)?i.operatingSystem="windows":/Mac/i.test(e)?i.operatingSystem="mac":i.operatingSystem="unknown";const l=!!window.ApplePaySession,x=!!window.chrome,p=/Firefox/.test(e),d=/Edg/.test(e),g=/FxiOS/.test(e),c=/CriOS/.test(e),f=/EdgiOS/.test(e);if(l||x&&!d||g||c||f){let t;g?t="FxiOS":c?t="CriOS":f?t="EdgiOS":l?t="Version":t="Chrome";const n=e.split(" ");for(const o of n)if(o.includes(t)){const v=o.split("/")[1];i.browserVersion=v}}else if(p||d){const o=e.split("").reverse().join("").split("/")[0].split("").reverse().join("");i.browserVersion=o}return i}getUid(){if(typeof window<"u"&&window.localStorage){let e=window.localStorage.getItem("_capuid");return e||(e=this.uuid4(),window.localStorage.setItem("_capuid",e),e)}return this.uuid4()}uuid4(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){const i=Math.random()*16|0;return(e==="x"?i:i&3|8).toString(16)})}}export{y as DeviceWeb};
diff --git a/dist/assets/web-BKuwGLdK.js b/dist/assets/web-BKuwGLdK.js
new file mode 100644
index 0000000..3a1f6cb
--- /dev/null
+++ b/dist/assets/web-BKuwGLdK.js
@@ -0,0 +1 @@
+import{W as p}from"./index-B7lrTY2m.js";class f extends p{constructor(){super(...arguments),this.group="CapacitorStorage"}async configure({group:e}){typeof e=="string"&&(this.group=e)}async get(e){return{value:this.impl.getItem(this.applyPrefix(e.key))}}async set(e){this.impl.setItem(this.applyPrefix(e.key),e.value)}async remove(e){this.impl.removeItem(this.applyPrefix(e.key))}async keys(){return{keys:this.rawKeys().map(t=>t.substring(this.prefix.length))}}async clear(){for(const e of this.rawKeys())this.impl.removeItem(e)}async migrate(){var e;const t=[],s=[],n="_cap_",o=Object.keys(this.impl).filter(i=>i.indexOf(n)===0);for(const i of o){const r=i.substring(n.length),a=(e=this.impl.getItem(i))!==null&&e!==void 0?e:"",{value:l}=await this.get({key:r});typeof l=="string"?s.push(r):(await this.set({key:r,value:a}),t.push(r))}return{migrated:t,existing:s}}async removeOld(){const e="_cap_",t=Object.keys(this.impl).filter(s=>s.indexOf(e)===0);for(const s of t)this.impl.removeItem(s)}get impl(){return window.localStorage}get prefix(){return this.group==="NativeStorage"?"":`${this.group}.`}rawKeys(){return Object.keys(this.impl).filter(e=>e.indexOf(this.prefix)===0)}applyPrefix(e){return this.prefix+e}}export{f as PreferencesWeb};
diff --git a/dist/assets/web-BNgMPRai.js b/dist/assets/web-BNgMPRai.js
new file mode 100644
index 0000000..0403ddf
--- /dev/null
+++ b/dist/assets/web-BNgMPRai.js
@@ -0,0 +1 @@
+import{W as i}from"./index-B7lrTY2m.js";function o(){const t=window.navigator.connection||window.navigator.mozConnection||window.navigator.webkitConnection;let n="unknown";const e=t?t.type||t.effectiveType:null;if(e&&typeof e=="string")switch(e){case"bluetooth":case"cellular":n="cellular";break;case"none":n="none";break;case"ethernet":case"wifi":case"wimax":n="wifi";break;case"other":case"unknown":n="unknown";break;case"slow-2g":case"2g":case"3g":n="cellular";break;case"4g":n="wifi";break}return n}class s extends i{constructor(){super(),this.handleOnline=()=>{const e={connected:!0,connectionType:o()};this.notifyListeners("networkStatusChange",e)},this.handleOffline=()=>{const n={connected:!1,connectionType:"none"};this.notifyListeners("networkStatusChange",n)},typeof window<"u"&&(window.addEventListener("online",this.handleOnline),window.addEventListener("offline",this.handleOffline))}async getStatus(){if(!window.navigator)throw this.unavailable("Browser does not support the Network Information API");const n=window.navigator.onLine,e=o();return{connected:n,connectionType:n?e:"none"}}}const r=new s;export{r as Network,s as NetworkWeb};
diff --git a/dist/assets/web-Bwhg1G08.js b/dist/assets/web-Bwhg1G08.js
new file mode 100644
index 0000000..2d8122f
--- /dev/null
+++ b/dist/assets/web-Bwhg1G08.js
@@ -0,0 +1 @@
+import{W as s}from"./index-B7lrTY2m.js";class c extends s{constructor(){super(...arguments),this.pending=[],this.deliveredNotifications=[],this.hasNotificationSupport=()=>{if(!("Notification"in window)||!Notification.requestPermission)return!1;if(Notification.permission!=="granted")try{new Notification("")}catch(i){if(i.name=="TypeError")return!1}return!0}}async getDeliveredNotifications(){const i=[];for(const t of this.deliveredNotifications){const e={title:t.title,id:parseInt(t.tag),body:t.body};i.push(e)}return{notifications:i}}async removeDeliveredNotifications(i){for(const t of i.notifications){const e=this.deliveredNotifications.find(n=>n.tag===String(t.id));e==null||e.close(),this.deliveredNotifications=this.deliveredNotifications.filter(()=>!e)}}async removeAllDeliveredNotifications(){for(const i of this.deliveredNotifications)i.close();this.deliveredNotifications=[]}async createChannel(){throw this.unimplemented("Not implemented on web.")}async deleteChannel(){throw this.unimplemented("Not implemented on web.")}async listChannels(){throw this.unimplemented("Not implemented on web.")}async schedule(i){if(!this.hasNotificationSupport())throw this.unavailable("Notifications not supported in this browser.");for(const t of i.notifications)this.sendNotification(t);return{notifications:i.notifications.map(t=>({id:t.id}))}}async getPending(){return{notifications:this.pending}}async registerActionTypes(){throw this.unimplemented("Not implemented on web.")}async cancel(i){this.pending=this.pending.filter(t=>!i.notifications.find(e=>e.id===t.id))}async areEnabled(){const{display:i}=await this.checkPermissions();return{value:i==="granted"}}async changeExactNotificationSetting(){throw this.unimplemented("Not implemented on web.")}async checkExactNotificationSetting(){throw this.unimplemented("Not implemented on web.")}async requestPermissions(){if(!this.hasNotificationSupport())throw this.unavailable("Notifications not supported in this browser.");return{display:this.transformNotificationPermission(await Notification.requestPermission())}}async checkPermissions(){if(!this.hasNotificationSupport())throw this.unavailable("Notifications not supported in this browser.");return{display:this.transformNotificationPermission(Notification.permission)}}transformNotificationPermission(i){switch(i){case"granted":return"granted";case"denied":return"denied";default:return"prompt"}}sendPending(){var i;const t=[],e=new Date().getTime();for(const n of this.pending)!((i=n.schedule)===null||i===void 0)&&i.at&&n.schedule.at.getTime()<=e&&(this.buildNotification(n),t.push(n));this.pending=this.pending.filter(n=>!t.find(o=>o===n))}sendNotification(i){var t;if(!((t=i.schedule)===null||t===void 0)&&t.at){const e=i.schedule.at.getTime()-new Date().getTime();this.pending.push(i),setTimeout(()=>{this.sendPending()},e);return}this.buildNotification(i)}buildNotification(i){const t=new Notification(i.title,{body:i.body,tag:String(i.id)});return t.addEventListener("click",this.onClick.bind(this,i),!1),t.addEventListener("show",this.onShow.bind(this,i),!1),t.addEventListener("close",()=>{this.deliveredNotifications=this.deliveredNotifications.filter(()=>!this)},!1),this.deliveredNotifications.push(t),t}onClick(i){const t={actionId:"tap",notification:i};this.notifyListeners("localNotificationActionPerformed",t)}onShow(i){this.notifyListeners("localNotificationReceived",i)}}export{c as LocalNotificationsWeb};
diff --git a/dist/assets/web-CQxMuzG0.js b/dist/assets/web-CQxMuzG0.js
new file mode 100644
index 0000000..f35503b
--- /dev/null
+++ b/dist/assets/web-CQxMuzG0.js
@@ -0,0 +1 @@
+import{W as n}from"./index-B7lrTY2m.js";class r extends n{async enable(e){}async disable(e){}}export{r as SafeAreaWeb};
diff --git a/dist/assets/web-DUFOr-Wj.js b/dist/assets/web-DUFOr-Wj.js
new file mode 100644
index 0000000..82a4cc9
--- /dev/null
+++ b/dist/assets/web-DUFOr-Wj.js
@@ -0,0 +1 @@
+import{W as t}from"./index-B7lrTY2m.js";class s extends t{constructor(){super(),this.handleVisibilityChange=()=>{const e={isActive:document.hidden!==!0};this.notifyListeners("appStateChange",e),document.hidden?this.notifyListeners("pause",null):this.notifyListeners("resume",null)},document.addEventListener("visibilitychange",this.handleVisibilityChange,!1)}exitApp(){throw this.unimplemented("Not implemented on web.")}async getInfo(){throw this.unimplemented("Not implemented on web.")}async getLaunchUrl(){return{url:""}}async getState(){return{isActive:document.hidden!==!0}}async minimizeApp(){throw this.unimplemented("Not implemented on web.")}}export{s as AppWeb};
diff --git a/dist/assets/web-DrxU3ATE.js b/dist/assets/web-DrxU3ATE.js
new file mode 100644
index 0000000..acddb14
--- /dev/null
+++ b/dist/assets/web-DrxU3ATE.js
@@ -0,0 +1 @@
+import{W as o}from"./index-B7lrTY2m.js";class a extends o{async getCurrentPosition(e){return new Promise((t,n)=>{navigator.geolocation.getCurrentPosition(i=>{t(i)},i=>{n(i)},Object.assign({enableHighAccuracy:!1,timeout:1e4,maximumAge:0},e))})}async watchPosition(e,t){return`${navigator.geolocation.watchPosition(i=>{t(i)},i=>{t(null,i)},Object.assign({enableHighAccuracy:!1,timeout:1e4,maximumAge:0,minimumUpdateInterval:5e3},e))}`}async clearWatch(e){navigator.geolocation.clearWatch(parseInt(e.id,10))}async checkPermissions(){if(typeof navigator>"u"||!navigator.permissions)throw this.unavailable("Permissions API not available in this browser");const e=await navigator.permissions.query({name:"geolocation"});return{location:e.state,coarseLocation:e.state}}async requestPermissions(){throw this.unimplemented("Not implemented on web.")}}const c=new a;export{c as Geolocation,a as GeolocationWeb};
diff --git a/dist/favicon.ico b/dist/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2
GIT binary patch
literal 4286
zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj
zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56
zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy
zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei
z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX
zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm
zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp=
zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8
zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO
z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3
z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD
zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6
z={Xwx{T%b6i9IjI)Ls)S{-*mq<@~R{?$}ZKjf;^k75i_}(2MXt}^SEBVg7AI@28
zo_uPg2V)_e-`2Ois=PYoe%9u*n9({PFR)OnHJPi{dNx>KxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S
literal 0
HcmV?d00001
diff --git a/dist/index.html b/dist/index.html
new file mode 100644
index 0000000..f41e7ea
--- /dev/null
+++ b/dist/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ Vite App
+
+
+
+
+
+
+