/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD AND TERSER if you want to view the source, please visit the github repository of this plugin */ "use strict";function Logger(message,level,key3){_logger(message,level,key3)}function __logger(message,baseLevel,flagsOrKey,key3){let level=baseLevel;"string"==typeof flagsOrKey?key3=flagsOrKey:void 0!==flagsOrKey&&(level|=flagsOrKey);_logger(message,level,key3)}function info(message,flagsOrKey,key3){__logger(message,LEVEL_INFO,flagsOrKey,key3)}function isMetaEntry(entry){return"children"in entry}function statusDisplay(status){return status?"EXPERIMENTAL"==status?" (Experimental)":"ALPHA"==status?" (Alpha)":"BETA"==status?" (Beta)":` (${status})`:""}function confName(key3,alt=""){var _a8,_b5;return key3 in configurationNames?`${null==(_a8=configurationNames[key3])?void 0:_a8.name}${statusDisplay(null==(_b5=configurationNames[key3])?void 0:_b5.status)}`:`${alt||""}`}function numeric(str){return isNaN(str)?str.charCodeAt(0):parseInt(str,10)}function escapeBraces(str){return str.replace(slashPattern,escSlash).replace(openPattern,escOpen).replace(closePattern,escClose).replace(commaPattern,escComma).replace(periodPattern,escPeriod)}function unescapeBraces(str){return str.replace(escSlashPattern,"\\").replace(escOpenPattern,"{").replace(escClosePattern,"}").replace(escCommaPattern,",").replace(escPeriodPattern,".")}function parseCommaParts(str){if(!str)return[""];const parts=[],m3=balanced("{","}",str);if(!m3)return str.split(",");const{pre,body,post}=m3,p4=pre.split(",");p4[p4.length-1]+="{"+body+"}";const postParts=parseCommaParts(post);if(post.length){p4[p4.length-1]+=postParts.shift();p4.push.apply(p4,postParts)}parts.push.apply(parts,p4);return parts}function expand(str){if(!str)return[];"{}"===str.slice(0,2)&&(str="\\{\\}"+str.slice(2));return expand_(escapeBraces(str),!0).map(unescapeBraces)}function embrace(str){return"{"+str+"}"}function isPadded(el){return/^-?0\d/.test(el)}function lte(i2,y2){return i2<=y2}function gte(i2,y2){return i2>=y2}function expand_(str,isTop){const expansions=[],m3=balanced("{","}",str);if(!m3)return[str];const pre=m3.pre,post=m3.post.length?expand_(m3.post,!1):[""];if(/\$$/.test(m3.pre))for(let k2=0;k2=0;if(!isSequence&&!isOptions)return m3.post.match(/,(?!,).*\}/)?expand_(str=m3.pre+"{"+m3.body+escClose+m3.post):[str];let n3,N3;if(isSequence)n3=m3.body.split(/\.\./);else{n3=parseCommaParts(m3.body);if(1===n3.length&&void 0!==n3[0]){n3=expand_(n3[0],!1).map(embrace);if(1===n3.length)return post.map((p4=>m3.pre+n3[0]+p4))}}if(isSequence&&void 0!==n3[0]&&void 0!==n3[1]){const x2=numeric(n3[0]),y2=numeric(n3[1]),width=Math.max(n3[0].length,n3[1].length);let incr=3===n3.length&&void 0!==n3[2]?Math.abs(numeric(n3[2])):1,test=lte;if(y20){const z2=new Array(need+1).join("0");c3=i2<0?"-"+z2+c3.slice(1):z2+c3}}}N3.push(c3)}}else{N3=[];for(let j2=0;j2Uint8Array.fromBase64(e3).buffer)),len=bufItems.reduce(((p4,c3)=>p4+c3.byteLength),0),joinedArray=new Uint8Array(len);let offset=0;bufItems.forEach((e3=>{joinedArray.set(new Uint8Array(e3),offset);offset+=e3.byteLength}));return joinedArray.buffer}catch(ex){Logger("Base64 Decode error",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);return new ArrayBuffer(0)}}function base64ToArrayBufferInternalBrowser(base64){try{const binary_string=globalThis.atob(base64),len=binary_string.length,bytes=new Uint8Array(len);for(let i2=0;i2{const blob=new Blob([buffer],{type:"application/octet-binary"}),reader=new FileReader;reader.onload=function(evt){var _a8,_b5;const dataURI=(null==(_b5=null==(_a8=evt.target)?void 0:_a8.result)?void 0:_b5.toString())||"";if(0!=buffer.byteLength&&(""==dataURI||"data:"==dataURI))return rej(new TypeError("Could not parse the encoded string"));const result=dataURI.substring(dataURI.indexOf(",")+1);res2(result)};reader.readAsDataURL(blob)}))}function writeString(string){if(string.length>128)return te.encode(string);const buffer=new Uint8Array(4*string.length),length=string.length;let index6=0,chr=0,idx2=0;for(;idx2>>6;buffer[index6++]=128|63&chr}else if(chr<55296||chr>57343){buffer[index6++]=224|chr>>>12;buffer[index6++]=128|chr>>>6&63;buffer[index6++]=128|63&chr}else{chr=65536+(chr-55296<<10|string.charCodeAt(idx2++)-56320);buffer[index6++]=240|chr>>>18;buffer[index6++]=128|chr>>>12&63;buffer[index6++]=128|chr>>>6&63;buffer[index6++]=128|63&chr}}return buffer.slice(0,index6)}function readString(buffer){const length=buffer.length;if(length>128)return td.decode(buffer);let index6=0;const end=length;let string="";for(;index6>>10),56320+(1023&code))}}}string+=String.fromCharCode(...chunk)}return string}function*arrayToChunkedArray(arr,chunkLength){const source2=[...arr];for(;source2.length;){const s2=source2.splice(0,chunkLength);yield s2}}function unique(arr){return[...new Set(arr)]}function createTypedArrayReader(buffer){let offset=0;return{read(length){const result=buffer.slice(offset,offset+length);offset+=length;return result},readAll(){const result=buffer.slice(offset);offset=buffer.length;return result}}}function concatUInt8Array(arrays){const totalLength=arrays.reduce(((sum2,arr)=>sum2+arr.length),0),result=new Uint8Array(totalLength);let offset=0;for(const array of arrays){result.set(array,offset);offset+=array.length}return result}function decodeToArrayBuffer(src){if(1==src.length)return _decodeToArrayBuffer(src[0]);const bufItems=src.map((e3=>_decodeToArrayBuffer(e3))),len=bufItems.reduce(((p4,c3)=>p4+c3.byteLength),0),joinedArray=new Uint8Array(len);let offset=0;bufItems.forEach((e3=>{joinedArray.set(new Uint8Array(e3),offset);offset+=e3.byteLength}));return joinedArray.buffer}function _decodeToArrayBuffer(src){const out=new Uint8Array(src.length),len=src.length;for(let i2=0;i2=38&&char<=126&&58!=char?char:revTable[char]}return out.buffer}function concatUInt8Array2(arrays){const length=arrays.reduce(((acc,cur)=>acc+cur.length),0),result=new Uint8Array(length);let pos=0;for(const array of arrays){result.set(array,pos);pos+=array.length}return result}function decodeBinary(src){if(0==src.length)return(new Uint8Array).buffer;if("string"==typeof src){if("%"===src[0])return _decodeToArrayBuffer(src.substring(1))}else if("%"===src[0][0]){const[head2,...last]=src;return decodeToArrayBuffer([head2.substring(1),...last])}return base64ToArrayBuffer(src)}function replaceAll(str,search,replace){return"replaceAll"in String.prototype?str.replaceAll(search,replace):str.split(search).join(replace)}function replaceAllPairs(str,...fromTo){let r4=`${str}`;for(const[from,to]of fromTo)r4=replaceAll(r4,from,to);return r4}function escapeStringToHTML(str){return str?str.replace(/[<>&"'`]/g,(match3=>({"<":"<",">":">","&":"&",'"':""","'":"'","`":"`"}[match3]))):""}function versionNumberString2Number(version2){return version2.split(".").reverse().map(((e3,i2)=>e3/1*1e3**i2)).reduce(((prev,current)=>prev+current),0)}function isValidFilenameInWidows(filename){return!/[\u0000-\u001f]|[\\":?<>|*#]/g.test(filename)&&!/(\\|\/)(COM\d|LPT\d|CON|PRN|AUX|NUL|CLOCK$)($|\.)/gi.test(filename)}function isValidFilenameInDarwin(filename){return!/[\u0000-\u001f]|[:]/g.test(filename)}function isValidFilenameInLinux(filename){return!/[\u0000-\u001f]|[:]/g.test(filename)}function isValidFilenameInAndroid(filename){return!/[\u0000-\u001f]|[\\":?<>|*#]/g.test(filename)}function isFilePath(path2){return-1===path2.indexOf(":")}function stripAllPrefixes(prefixedPath){if(isFilePath(prefixedPath))return prefixedPath;const[,body]=expandFilePathPrefix(prefixedPath);return stripAllPrefixes(body)}function addPrefix(path2,prefix){return prefix&&path2.startsWith(prefix)?path2:`${null!=prefix?prefix:""}${path2}`}function expandFilePathPrefix(path2){let[prefix,body]=path2.split(":",2);if(body)prefix+=":";else{body=prefix;prefix=""}return[prefix,body]}function expandDocumentIDPrefix(id){let[prefix,body]=id.split(":",2);if(body)prefix+=":";else{body=prefix;prefix=""}return[prefix,body]}function hashString(key3){return _hashString(key3)}async function path2id_base(filenameSrc,obfuscatePassphrase,caseInsensitive){if(filenameSrc.startsWith(PREFIX_OBFUSCATED))return`${filenameSrc}`;let filename=`${filenameSrc}`;const newPrefix=obfuscatePassphrase?PREFIX_OBFUSCATED:"";caseInsensitive&&(filename=filename.toLowerCase());let x2=filename;x2.startsWith("_")&&(x2="/"+x2);if(!obfuscatePassphrase)return newPrefix+x2;const[prefix,body]=expandFilePathPrefix(x2);if(body.startsWith(PREFIX_OBFUSCATED))return newPrefix+x2;const hashedPassphrase=await hashString(obfuscatePassphrase);return prefix+newPrefix+await hashString(`${hashedPassphrase}:${filename}`)}function id2path_base(id,entry){if(entry&&(null==entry?void 0:entry.path))return id2path_base(entry.path);if(id.startsWith(PREFIX_OBFUSCATED))throw new Error("Entry has been obfuscated!");const[prefix,body]=expandDocumentIDPrefix(id);if(body.startsWith(PREFIX_OBFUSCATED))throw new Error("Entry has been obfuscated!");return body.startsWith("/")?body.substring(1):prefix+body}function getPath(entry){return id2path_base(entry._id,entry)}function stripPrefix(prefixedPath){const[prefix,body]=prefixedPath.split(":",2);return body||prefix}function shouldBeIgnored(filename){return filename==FLAGMD_REDFLAG||filename==FLAGMD_REDFLAG2||filename==FLAGMD_REDFLAG2_HR||filename==FLAGMD_REDFLAG3||filename==FLAGMD_REDFLAG3_HR||!!filename.startsWith(PREFIXMD_LOGFILE)||!!filename.startsWith(PREFIXMD_LOGFILE_UC)}function isPlainText(filename){return!!(filename.endsWith(".md")||filename.endsWith(".txt")||filename.endsWith(".svg")||filename.endsWith(".html")||filename.endsWith(".csv")||filename.endsWith(".css")||filename.endsWith(".js")||filename.endsWith(".xml")||filename.endsWith(".canvas"))}function shouldSplitAsPlainText(filename){return!!filename.endsWith(".md")||!!filename.endsWith(".txt")||!!filename.endsWith(".canvas")}function isAccepted(path2,ignore){if(-1!==path2.indexOf("./")||-1!==path2.indexOf("../"))return!1;const patterns=ignore.map((e3=>e3.trim())).filter((e3=>e3.length>0&&!e3.startsWith("#")));let result;for(const pattern of patterns){if(pattern.endsWith("/")&&minimatch(path2,`${pattern}**`,matchOpts))return!1;const newResult=pattern.startsWith("!");(minimatch(path2,pattern,matchOpts)||!pattern.endsWith("/")&&minimatch(path2,pattern+"/**",matchOpts))&&(result=newResult)}return result}async function isAcceptedAll(path2,ignoreFiles,getList){const intermediatePaths=unique(path2.substring(0,path2.lastIndexOf("/")).split("/").reduce(((p4,c3)=>[...p4,p4[p4.length-1]+"/"+c3]),[""]).map((e3=>e3.substring(1)))).reverse();for(const intermediatePath of intermediatePaths)for(const ignoreFile of ignoreFiles){const ignoreFilePath=intermediatePath+"/"+ignoreFile,list=await getList(ignoreFilePath);if(!1===list)continue;const result=isAccepted(path2.substring(intermediatePath.length?intermediatePath.length+1:0),list);if(void 0!==result)return result}return!0}async function isSomeResolved(promises){return 0!=promises.length&&await Promise.race([...promises,Promise.resolve(UNRESOLVED)])!==UNRESOLVED}function fireAndForget(p4){if("function"==typeof p4)return fireAndForget(p4());p4.then(noop).catch(noop)}function yieldMicrotask(){return new Promise((res2=>queueMicrotask(res2)))}function yieldAnimationFrame(){return new Promise((res2=>requestAnimationFrame(res2)))}function yieldNextAnimationFrame(){return currentYieldingAnimationFrame||(currentYieldingAnimationFrame=(async()=>{const ret=await yieldAnimationFrame();currentYieldingAnimationFrame=void 0;return ret})())}function cancelableDelay(timeout,cancel2=TIMED_OUT_SIGNAL){let timer;const promise=promiseWithResolvers();timer=setTimeout((()=>{timer=void 0;promise.resolve(cancel2)}),timeout);return{promise:promise.promise,cancel(){if(timer){clearTimeout(timer);timer=void 0}}}}function Semaphore(limit){let counter=0;const _limit=limit,queue2=[];return{get waiting(){return queue2.length},async tryAcquire(quantity=1,timeout){if(counter<_limit){counter+=quantity;return()=>{this.release(quantity)}}const d4=cancelableDelay(timeout,TIMED_OUT_SIGNAL),aq2=this.acquire(quantity),p4=await Promise.race([d4.promise,aq2]);if(p4===TIMED_OUT_SIGNAL){fireAndForget((()=>aq2.then((release=>release()))));return!1}return p4},async acquire(quantity=1){if(counter<_limit){counter+=quantity;return()=>this.release()}const n3=promiseWithResolvers();queue2.push(n3);await n3.promise;return()=>{this.release(quantity)}},release(quantity=1){if(queue2.length>0){const next2=queue2.shift();next2&&fireAndForget((async()=>await yieldMicrotask().then((()=>next2.resolve()))))}else counter>0&&(counter-=quantity)}}}function isCloudantURI(uri){return-1!==uri.indexOf(".cloudantnosqldb.")||-1!==uri.indexOf(".cloudant.com")}function isErrorOfMissingDoc(ex){return 404==(ex&&(null==ex?void 0:ex.status))}function isValidLength(len){return len>=1&&len<=5}function encodeObjectAsArray(obj){if(Array.isArray(obj))return ARRAY_MARKER+encodeAnyArray(obj,!0);const objArray=[...Object.entries(obj)].flat();return OBJECT_MARKER+encodeAnyArray(objArray,!0)}function decodeObjectFromArray(str){if(str[0]==ARRAY_MARKER)return decodeAnyArray(str.substring(1));if(str[0]==OBJECT_MARKER){const arr=decodeAnyArray(str.substring(1)),entries2=[];for(let i2=0;i2{if(void 0===v2)return"u";if(null===v2)return"n";if(!1===v2)return"f";if(!0===v2)return"t";if("number"==typeof v2){const isFloat=!Number.isInteger(v2),b36=v2.toString(36),strNum=v2.toString(),expression=isFloat||b36.length>strNum.length?"n":"N",encodedStr="N"==expression?b36:strNum,len=encodedStr.length.toString(36),lenLen2=len.length;if(!isValidLength(lenLen2))throw new Error("Number length exceeds maximum encodable length of 5 in base36.");return prefixMapNumber[expression][lenLen2]+len+encodedStr}let str,prefix;if("string"==typeof v2){str=v2;prefix="s"}else{prefix="o";const objectStr=JSON.stringify(v2),containUndefined=-1!==Object.values(v2).indexOf(void 0);if(!safer||containUndefined){const objectEncoded=encodeObjectAsArray(v2);str=containUndefined||objectEncoded.lengthvoid 0!==(null==a2?void 0:a2[key3])&&void 0!==(null==b3?void 0:b3[key3])&&isObjectDifferent(null==a2?void 0:a2[key3],null==b3?void 0:b3[key3]))).some((e3=>1==e3)):keys3.map((key3=>isObjectDifferent(key3 in a2?a2[key3]:SYMBOL_A,key3 in b3?b3[key3]:SYMBOL_B))).some((e3=>1==e3))}return a2!==b3}async function waitForSignal(id,timeout){return await globalSlipBoard.awaitNext(GENERIC_COMPATIBILITY_SIGNAL,id,{timeout})!==TIMED_OUT_SIGNAL}function sendSignal(id){globalSlipBoard.submit(GENERIC_COMPATIBILITY_SIGNAL,id)}function sendValue(id,result){globalSlipBoard.submit(GENERIC_COMPATIBILITY_VALUE,id,result)}function sizeToHumanReadable(size){const units=["B","KB","MB","GB","TB"];let i2=0;for(;size>=1024&&i2{p4.then(res2).catch((ex=>isErrorOfMissingDoc(ex)?res2(def):rej(ex)))}))}function getDocData(doc){return"string"==typeof doc?doc:doc.join("")}function getDocDataAsArray(doc){return"string"==typeof doc?[doc]:doc}function isTextBlob(blob){return"text/plain"===blob.type}function createTextBlob(data){const d4=Array.isArray(data)?data:[data];return new Blob(d4,{endings:"transparent",type:"text/plain"})}function createBinaryBlob(data){return new Blob([data],{endings:"transparent",type:"application/octet-stream"})}function createBlob(data){return data instanceof Blob?data:data instanceof Uint8Array||data instanceof ArrayBuffer?createBinaryBlob(data):createTextBlob(data)}function isTextDocument(doc){return"plain"==doc.type||"plain"==doc.datatype||!!isPlainText(doc.path)}function readAsBlob(doc){return isTextDocument(doc)?createTextBlob(doc.data):createBinaryBlob(decodeBinary(doc.data))}function readContent(doc){return isTextDocument(doc)?getDocData(doc.data):decodeBinary(doc.data)}async function isDocContentSame(docA,docB){const blob1=createBlob(docA),blob2=createBlob(docB);if(blob1.size!=blob2.size)return!1;if(isIndexDBCmpExist)return 0===globalThis.indexedDB.cmp(await blob1.arrayBuffer(),await blob2.arrayBuffer());const length=blob1.size;let i2=0;for(;i2set2.add(e3)));return set2}function escapeNewLineFromString(str){return-1===str.indexOf("\n")&&-1===str.indexOf("\r")?str:"\\f"+str.replace(/(\n|\r|\\)/g,(m3=>`${map[m3]}`))}function unescapeNewLineFromString(str){return str.startsWith("\\f")?str.substring(2).replace(/(\\n|\\r|\\\\)/g,(m3=>`${revMap2[m3]}`)):str}function escapeMarkdownValue(value){return"string"==typeof value?replaceAllPairs(value,["|","\\|"],["`","\\`"]):value}function timeDeltaToHumanReadable(delta){const sec=delta/1e3;if(sec<60)return`${sec.toFixed(2)}s`;const min=sec/60;if(min<60)return`${min.toFixed(2)}m`;const hour=min/60;if(hour<24)return`${hour.toFixed(2)}h`;const day=hour/24;return day<365?`${day.toFixed(2)}d`:`${(day/365).toFixed(2)}y`}async function wrapException(func){try{return await func()}catch(ex){return ex instanceof Error?ex:new Error(ex)}}function isDirty(key3,value){if(previousValues.get(key3)===value)return!1;previousValues.set(key3,value);return!0}function isSensibleMargeApplicable(path2){return!!path2.endsWith(".md")}function isObjectMargeApplicable(path2){return!!path2.endsWith(".canvas")||!!path2.endsWith(".json")}function tryParseJSON(str,fallbackValue){try{return JSON.parse(str)}catch(e3){return fallbackValue}}function unorderedArrayToObject(obj){return obj.map((e3=>({[e3.id]:e3}))).reduce(((p4,c3)=>({...p4,...c3})),{})}function objectToUnorderedArray(obj){const entries2=Object.entries(obj);if(entries2.some((e3=>{var _a8;return e3[0]!=(null==(_a8=e3[1])?void 0:_a8.id)})))throw new Error("Item looks like not unordered array");return entries2.map((e3=>e3[1]))}function generatePatchUnorderedArray(from,to){if(from.every((e3=>"object"==typeof e3&&"id"in e3))&&to.every((e3=>"object"==typeof e3&&"id"in e3))){const diff=generatePatchObj(unorderedArrayToObject(from),unorderedArrayToObject(to));return Object.keys(diff).length>0?{[MARK_ISARRAY]:diff}:{}}return{[MARK_SWAPPED]:to}}function generatePatchObj(from,to){const entries2=Object.entries(from),tempMap=new Map(entries2),ret={},newEntries=Object.entries(to);for(const[key3,value]of newEntries)if(tempMap.has(key3)){const v2=tempMap.get(key3);if(typeof v2!=typeof value||Array.isArray(v2)!==Array.isArray(value))ret[key3]={[MARK_SWAPPED]:value};else if(null===v2&&null===value);else if(null===v2&&null!==value)ret[key3]={[MARK_SWAPPED]:value};else if(null!==v2&&null===value)ret[key3]={[MARK_SWAPPED]:value};else if("object"!=typeof v2||"object"!=typeof value||Array.isArray(v2)||Array.isArray(value))if("object"==typeof v2&&"object"==typeof value&&Array.isArray(v2)&&Array.isArray(value)){const wk2=generatePatchUnorderedArray(v2,value);Object.keys(wk2).length>0&&(ret[key3]=wk2)}else"object"!=typeof v2&&"object"!=typeof value?JSON.stringify(tempMap.get(key3))!==JSON.stringify(value)&&(ret[key3]=value):JSON.stringify(tempMap.get(key3))!==JSON.stringify(value)&&(ret[key3]={[MARK_SWAPPED]:value});else{const wk2=generatePatchObj(v2,value);Object.keys(wk2).length>0&&(ret[key3]=wk2)}tempMap.delete(key3)}else{ret[key3]=value;tempMap.delete(key3)}for(const[key3]of tempMap)ret[key3]=MARK_DELETED;return ret}function applyPatch(from,patch){const ret=from,patches=Object.entries(patch);for(const[key3,value]of patches)if(value!=MARK_DELETED)if(null!==value)if("object"==typeof value){if(MARK_SWAPPED in value){ret[key3]=value[MARK_SWAPPED];continue}if(MARK_ISARRAY in value){key3 in ret||(ret[key3]=[]);if(!Array.isArray(ret[key3]))throw new Error("Patch target type is mismatched (array to something)");const appliedArray=objectToUnorderedArray(applyPatch(unorderedArrayToObject(ret[key3]),value[MARK_ISARRAY]));ret[key3]=[...appliedArray]}else{if(!(key3 in ret)){ret[key3]=value;continue}ret[key3]=applyPatch(ret[key3],value)}}else ret[key3]=value;else ret[key3]=null;else delete ret[key3];return ret}function mergeObject(objA,objB){const newEntries=Object.entries(objB),ret={...objA};if(typeof objA!=typeof objB||Array.isArray(objA)!==Array.isArray(objB))return objB;for(const[key3,v2]of newEntries)if(key3 in ret){const value=ret[key3];typeof v2!=typeof value||Array.isArray(v2)!==Array.isArray(value)?ret[key3]=v2:"object"!=typeof v2||"object"!=typeof value||Array.isArray(v2)||Array.isArray(value)?"object"==typeof v2&&"object"==typeof value&&Array.isArray(v2)&&Array.isArray(value)?ret[key3]=[...new Set([...v2,...value])]:ret[key3]=v2:ret[key3]=mergeObject(v2,value)}else ret[key3]=v2;const retSorted=Object.fromEntries(Object.entries(ret).sort(((a2,b3)=>a2[0]b3[0]?1:0)));return Array.isArray(objA)&&Array.isArray(objB)?Object.values(retSorted):retSorted}function flattenObject(obj,path2=[]){if("object"!=typeof obj)return[[path2.join("."),obj]];if(null===obj)return[[path2.join("."),null]];if(Array.isArray(obj))return[[path2.join("."),JSON.stringify(obj)]];const e3=Object.entries(obj),ret=[];for(const[key3,value]of e3){const p4=flattenObject(value,[...path2,key3]);ret.push(...p4)}return ret}function parseHeaderValues(strHeader){const headers={},lines=strHeader.split("\n");for(const line of lines){const[key3,value]=line.split(":",2).map((e3=>e3.trim()));key3&&value&&(headers[key3]=value)}return headers}function parseCustomRegExp(regexp){return regexp.startsWith("!!")?[!0,regexp.slice(2)]:[!1,regexp]}function isValidRegExp(regexp){try{const[,exp]=parseCustomRegExp(regexp);new RegExp(exp);return!0}catch(e3){return!1}}function isInvertedRegExp(regexp){const[negate3]=parseCustomRegExp(regexp);return negate3}function parseCustomRegExpList(list,flags2,delimiter){const d4=null!=delimiter?delimiter:",";return list.replace(/\n| /g,"").split(d4).filter((e3=>e3)).map((e3=>new CustomRegExp(e3,flags2)))}function constructCustomRegExpList(items,delimiter){return items.map((e3=>`${e3}`)).join(`${delimiter}`)}function splitCustomRegExpList(list,delimiter){const d4=delimiter;return list.split(d4).filter((e3=>e3))}function getFileRegExp(settings,key3){const flagCase=settings.handleFilenameCaseSensitive?"":"i";return parseCustomRegExpList(settings[key3],flagCase,"syncInternalFilesIgnorePatterns"===key3||"syncInternalFilesTargetPatterns"===key3||"syncInternalFileOverwritePatterns"===key3?",":"|[]|")}function copyTo(source2,target){for(const key3 of Object.keys(target))target[key3]=source2[key3]}function pickBucketSyncSettings(setting){return{bucket:setting.bucket,region:setting.region,endpoint:setting.endpoint,accessKey:setting.accessKey,secretKey:setting.secretKey,bucketPrefix:setting.bucketPrefix,forcePathStyle:setting.forcePathStyle,useCustomRequestHandler:setting.useCustomRequestHandler,bucketCustomHeaders:setting.bucketCustomHeaders}}function pickCouchDBSyncSettings(setting){return{couchDB_URI:setting.couchDB_URI,couchDB_USER:setting.couchDB_USER,couchDB_PASSWORD:setting.couchDB_PASSWORD,couchDB_DBNAME:setting.couchDB_DBNAME,useRequestAPI:setting.useRequestAPI,couchDB_CustomHeaders:setting.couchDB_CustomHeaders,jwtAlgorithm:setting.jwtAlgorithm,jwtExpDuration:setting.jwtExpDuration,jwtKey:setting.jwtKey,jwtKid:setting.jwtKid,jwtSub:setting.jwtSub,useJWT:setting.useJWT}}function pickEncryptionSettings(setting){return{E2EEAlgorithm:setting.E2EEAlgorithm,encrypt:setting.encrypt,passphrase:setting.passphrase,usePathObfuscation:setting.usePathObfuscation}}function pickP2PSyncSettings(setting){return{P2P_Enabled:setting.P2P_Enabled,P2P_AppID:setting.P2P_AppID,P2P_roomID:setting.P2P_roomID,P2P_passphrase:setting.P2P_passphrase,P2P_relays:setting.P2P_relays,P2P_AutoStart:setting.P2P_AutoStart,P2P_AutoBroadcast:setting.P2P_AutoBroadcast,P2P_DevicePeerName:setting.P2P_DevicePeerName||"",P2P_turnServers:setting.P2P_turnServers,P2P_turnUsername:setting.P2P_turnUsername,P2P_turnCredential:setting.P2P_turnCredential}}function buildChunkMap(chunks){const map4=new Map;for(const chunk of chunks)map4.set(chunk._id,chunk);return map4}function withTimeout(proc,timeout,onTimedOut){return new Promise(((resolve,reject)=>{const timer=setTimeout((()=>{resolve(onTimedOut())}),timeout);proc.then(resolve).catch(reject).finally((()=>{clearTimeout(timer)}))}))}function getError(error){return error instanceof Error?error:"error"in error&&error.error instanceof Error?error.error:void 0}function isMissingError(error){return"status"in error&&404===error.status||"error"in error&&"not_found"===error.error||"error"in error&&isMissingError(error.error)}function isChunkDoc(doc){return doc&&"string"==typeof doc._id&&"leaf"===doc.type}function getNoFromRev(rev3){return rev3?parseInt(rev3.split("-")[0]):0}function serialized(key3,proc){var _a8;const prev=serializedMap.get(key3),p4=promiseWithResolvers();queueCount.set(key3,(null!=(_a8=queueCount.get(key3))?_a8:0)+1);const nextTask=async()=>{try{p4.resolve(await proc())}catch(ex){p4.reject(ex)}finally{const count=queueCount.get(key3)-1;if(0===count){serializedMap.delete(key3);queueCount.delete(key3)}else queueCount.set(key3,count)}};if(prev){const newP=prev.then((()=>nextTask()));serializedMap.set(key3,newP)}else serializedMap.set(key3,nextTask());return p4.promise}function shareRunningResult(key3,proc){const prev=shareSerializedMap.get(key3);if(prev)return prev;const p4=promiseWithResolvers();shareSerializedMap.set(key3,p4.promise);const task=async()=>{try{p4.resolve(await proc())}catch(ex){p4.reject(ex)}finally{shareSerializedMap.delete(key3)}};fireAndForget((()=>task()));return p4.promise}function skipIfDuplicated(key3,proc){if(skipDuplicatedMap.get(key3))return Promise.resolve(null);const p4=promiseWithResolvers();skipDuplicatedMap.set(key3,p4.promise);const task=async()=>{try{p4.resolve(await proc())}catch(ex){p4.reject(ex)}finally{skipDuplicatedMap.delete(key3)}};fireAndForget((()=>task()));return p4.promise}async function scheduleOnceIfDuplicated(key3,proc){if(isLockAcquired(key3)){waitingProcessMap.set(key3,proc);return Promise.resolve(void 0)}return await serialized(key3,proc).then((()=>{const nextProc=waitingProcessMap.get(key3);if(nextProc){waitingProcessMap.delete(key3);return scheduleOnceIfDuplicated(key3,nextProc)}}))}function isLockAcquired(key3){var _a8;return(null!=(_a8=queueCount.get(key3))?_a8:0)>0}function unwrapTaskResult(result){if("ok"in result)return result.ok;if("err"in result)return result.err;throw new Error("Argument Exception: Could not unwrap")}function isTaskWaiting(task){if(task instanceof Promise)return!1;if(task instanceof Function)return!0;throw new Error("Invalid state")}async function wrapEachProcess(key3,task){try{return{key:key3,ok:await task}}catch(ex){return{key:key3,err:ex instanceof Error?ex:new Error(`${ex}`)}}}async function*processAllTasksWithConcurrencyLimit(limit,tasks3){const nowProcessing=new Map;let idx2=0;const pendingTasks=tasks3.reverse();for(;pendingTasks.length>0||nowProcessing.size>0;){L2:for(;nowProcessing.size0;){const task=pendingTasks.pop();if(void 0===task)break L2;idx2++;const wrappedPromise=wrapEachProcess(idx2,isTaskWaiting(task)?task():task);nowProcessing.set(idx2,wrappedPromise)}const done=await Promise.race(nowProcessing.values());nowProcessing.delete(done.key);yield done}}async function mapAllTasksWithConcurrencyLimit(limit,tasks3){const results=new Map;for await(const v2 of processAllTasksWithConcurrencyLimit(limit,tasks3))results.set(v2.key,v2);return[...results.entries()].sort(((a2,b3)=>a2[0]-b3[0])).map((e3=>e3[1]))}function scheduleTask(key3,timeout,proc,skipIfTaskExist){if(tasks.has(key3)){if(skipIfTaskExist)return;cancelTask(key3)}const newTask=setTimeout((()=>{tasks.delete(key3);proc()}),timeout);tasks.set(key3,newTask)}function cancelTask(key3){const old=tasks.get(key3);if(old){clearTimeout(old);tasks.delete(key3)}}function cancelAllTasks(){for(const v2 of tasks.keys())cancelTask(v2)}function cancelPeriodicTask(key3){if(key3 in intervals){clearInterval(intervals[key3]);delete intervals[key3]}}function cancelAllPeriodicTask(){for(const v2 in intervals)cancelPeriodicTask(v2)}function isWaitingForTimeout(key3){return waitingItems.has(key3)}function initializeStores(vaultName){sameChangePairs=new PersistentMap(`ls-persist-same-changes-${vaultName}`)}function generateCredentialObject(settings){return settings.useJWT?{jwtAlgorithm:settings.jwtAlgorithm,jwtKey:settings.jwtKey,jwtKid:settings.jwtKid,jwtSub:settings.jwtSub,jwtExpDuration:settings.jwtExpDuration,type:"jwt"}:{username:settings.couchDB_USER,password:settings.couchDB_PASSWORD,type:"basic"}}async function path2id(filename,obfuscatePassphrase,caseInsensitive){const temp=filename.split(":"),path2=temp.pop(),normalizedPath=normalizePath(path2);temp.push(normalizedPath);const fixedPath=temp.join(":");return await path2id_base(fixedPath,obfuscatePassphrase,caseInsensitive)}function id2path(id,entry){const temp=id2path_base(id,entry).split(":"),path2=temp.pop(),normalizedPath=normalizePath(path2);temp.push(normalizedPath);return temp.join(":")}function getPath2(entry){return id2path(entry._id,entry)}function getPathWithoutPrefix2(entry){return stripAllPrefixes(getPath2(entry))}function getPathFromTFile(file){return file.path}function isInternalFile(file){return"string"==typeof file?file.startsWith(ICHeader):!!file.isInternal}function getStoragePathFromUXFileInfo(file){return stripAllPrefixes("string"==typeof file?file:file.path)}function getDatabasePathFromUXFileInfo(file){if("string"==typeof file&&file.startsWith(ICXHeader))return file;const prefix=isInternalFile(file)?ICHeader:"";return"string"==typeof file?prefix+stripAllPrefixes(file):prefix+stripAllPrefixes(file.path)}function memoObject(key3,obj){memos[key3]=obj;return memos[key3]}async function memoIfNotExist(key3,func){if(!(key3 in memos)){const w2=func(),v2=w2 instanceof Promise?await w2:w2;memos[key3]=v2}return memos[key3]}function retrieveMemoObject(key3){return key3 in memos&&memos[key3]}function disposeMemoObject(key3){delete memos[key3]}function isValidPath(filename){if(import_obsidian.Platform.isDesktop)return"darwin"==process.platform?isValidFilenameInDarwin(filename):"linux"==process.platform?isValidFilenameInLinux(filename):isValidFilenameInWidows(filename);if(import_obsidian.Platform.isAndroidApp)return isValidFilenameInAndroid(filename);if(import_obsidian.Platform.isIosApp)return isValidFilenameInDarwin(filename);Logger("Could not determine platform for checking filename",LOG_LEVEL_VERBOSE);return isValidFilenameInWidows(filename)}function isInternalMetadata(id){return id.startsWith(ICHeader)}function stripInternalMetadataPrefix(id){return id.substring(ICHeaderLength)}function isChunk(str){return str.startsWith(CHeader)}function isPluginMetadata(str){return str.startsWith(PSCHeader)}function isCustomisationSyncMetadata(str){return str.startsWith(ICXHeader)}function requestToCouchDBWithCredentials(baseUri,credentials,origin2="",key3,body,method,customHeaders){return _requestToCouchDB(baseUri,credentials,origin2,"_node/_local/_config"+(key3?"/"+key3:""),body,method,customHeaders)}function compareMTime(baseMTime,targetMTime){const truncatedBaseMTime=~~(baseMTime/resolution)*resolution,truncatedTargetMTime=~~(targetMTime/resolution)*resolution;if(truncatedBaseMTime==truncatedTargetMTime)return EVEN;if(truncatedBaseMTime>truncatedTargetMTime)return BASE_IS_NEW;if(truncatedBaseMTimee3==mtime1||e3==mtime2))?sameChangePairs.set(key3,[...new Set([...pairs,mtime1,mtime2])]):sameChangePairs.set(key3,[mtime1,mtime2])}function unmarkChanges(file){const key3=getKey(file);sameChangePairs.delete(key3)}function isMarkedAsSameChanges(file,mtimes){const key3=getKey(file),pairs=sameChangePairs.get(key3,[])||[];if(mtimes.every((e3=>-1!==pairs.indexOf(e3))))return EVEN}function compareFileFreshness(baseFile,checkTarget){var _a8,_b5,_c3,_d2,_e2,_f;if(void 0===baseFile&&null==checkTarget)return EVEN;if(null==baseFile)return TARGET_IS_NEW;if(null==checkTarget)return BASE_IS_NEW;const modifiedBase="stat"in baseFile?null!=(_b5=null==(_a8=null==baseFile?void 0:baseFile.stat)?void 0:_a8.mtime)?_b5:0:null!=(_c3=null==baseFile?void 0:baseFile.mtime)?_c3:0,modifiedTarget="stat"in checkTarget?null!=(_e2=null==(_d2=null==checkTarget?void 0:checkTarget.stat)?void 0:_d2.mtime)?_e2:0:null!=(_f=null==checkTarget?void 0:checkTarget.mtime)?_f:0;return modifiedBase&&modifiedTarget&&isMarkedAsSameChanges(baseFile,[modifiedBase,modifiedTarget])?EVEN:compareMTime(modifiedBase,modifiedTarget)}function useMemo({key:key3,forceUpdate,validator},updateFunc){const cached=_cached.get(key3),context2=(null==cached?void 0:cached.context)||new Map;if(cached&&!forceUpdate&&(!validator||validator&&!validator(context2)))return cached.value;const value=updateFunc(context2,null==cached?void 0:cached.value);value!==(null==cached?void 0:cached.value)&&_cached.set(key3,{value,context:context2});return value}function displayRev(rev3){const[number,hash3]=rev3.split("-");return`${number}-${hash3.substring(0,6)}`}function getDocProps(doc){const id=doc._id,shortenedId=id.substring(0,10),prefixedPath=getPath2(doc),path2=stripAllPrefixes(prefixedPath),rev3=doc._rev,revDisplay=rev3?displayRev(rev3):"0-NOREVS",shortenedPath=path2.substring(0,10);return{id,rev:rev3,revDisplay,prefixedPath,path:path2,isDeleted:doc._deleted||doc.deleted||!1,shortenedId,shortenedPath}}function getLogLevel(showNotice){return showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO}async function autosaveCache(db,mapKey){var _a8;const savedData=null!=(_a8=await db.get(mapKey))?_a8:new Map,_commit2=()=>{try{scheduleTask("commit-map-save-"+mapKey,250,(async()=>{await db.set(mapKey,savedData)}))}catch(e3){}};return{set(key3,value){const modified=savedData.get(key3)!==value,result=savedData.set(key3,value);modified&&_commit2();return result},clear(){savedData.clear();_commit2()},delete(key3){const result=savedData.delete(key3);result&&_commit2();return result},get:key3=>savedData.get(key3),has:key3=>savedData.has(key3),keys:()=>savedData.keys(),get size(){return savedData.size}}}function onlyInNTimes(n3,proc){let counter=0;return function(){counter++%n3==0&&proc(counter)}}function rateLimitedSharedExecution(key3,interval,proc){key3 in waitingTasks||(waitingTasks[key3]={task:void 0,previous:0,leastNext:0});if(waitingTasks[key3].task){waitingTasks[key3].leastNext=Date.now()+interval;return waitingTasks[key3].task.promise}const previous=waitingTasks[key3].previous,delay2=0==previous?0:Math.max(interval-(Date.now()-previous),0),task=promiseWithResolver();task.promise.finally((()=>{if(waitingTasks[key3].task===task){waitingTasks[key3].task=void 0;waitingTasks[key3].previous=Math.max(Date.now(),waitingTasks[key3].leastNext)}}));waitingTasks[key3]={task,previous:Date.now(),leastNext:Date.now()+interval};scheduleTask("thin-out-"+key3,delay2,(async()=>{try{task.resolve(await proc())}catch(ex){task.reject(ex)}}));return task.promise}function updatePreviousExecutionTime(key3,timeDelta=0){key3 in waitingTasks||(waitingTasks[key3]={task:void 0,previous:0,leastNext:0});waitingTasks[key3].leastNext=Math.max(Date.now()+timeDelta,waitingTasks[key3].leastNext)}function reactiveSource(initialValue){return _reactive({initialValue})}function reactive(expression,initialValue){return _reactive({expression,initialValue})}function resetTopologicalSortCacheFor(ids){ids.forEach((id=>topologicalSortCache.delete(id)));topologicalSortCache.forEach(((value,key3)=>{ids.includes(key3)||topologicalSortCache.delete(key3)}))}function topologicalSort(startNode){if(topologicalSortCache.has(startNode.id)){const ref=topologicalSortCache.get(startNode.id);if(ref){const result2=ref.map((e3=>e3.instance.deref())).filter((e3=>e3));if(result2.length===ref.length)return result2}}const visited=new Set,sorted=[],recursionStack=new Set;(function visit(node){if(!visited.has(node)){if(recursionStack.has(node))throw new Error("Circular dependency detected!");visited.add(node);recursionStack.add(node);for(const dependant of node.dependants)visit(dependant);sorted.push(node);recursionStack.delete(node)}})(startNode);const result=sorted.reverse();topologicalSortCache.set(startNode.id,result.map((e3=>({id:e3.id,instance:new FallbackWeakRef(e3)}))));return result}function _reactive({expression,initialValue,isSource}){let value,_isDirty=!1;const id=_reactiveSourceId++,changeHandlers=new Set,instance3={id,dependants:new Set,_markDirty(){_isDirty||(_isDirty=!0)},markDirty(){topologicalSort(instance3).forEach((node=>node._markDirty()))},_rippleChanged(){changeHandlers.forEach((e3=>e3(instance3)))},rippleChanged(){topologicalSort(instance3).forEach((node=>node._rippleChanged()))},markClean(){_isDirty=!1},get isDirty(){return _isDirty},get value(){if(context&&!instance3.dependants.has(context)){instance3.dependants.add(context);resetTopologicalSortCacheFor([instance3.id,context.id])}if(_isDirty){if(expression){const oldValue=value,newValue=expression();isObjectDifferent(oldValue,newValue)&&(value=newValue)}instance3.markClean()}return value},set value(newValue){if(_isDirty&&!expression)value=newValue;else if(isObjectDifferent(value,newValue)){value=newValue;if(!_isDirty){instance3.markDirty();instance3.rippleChanged()}}},onChanged(handler){changeHandlers.add(handler)},offChanged(handler){changeHandlers.delete(handler)}};value=function initialize(){const previousContext=context;context=instance3;const r4=expression?expression(initialValue):initialValue;context=previousContext;return r4}();return instance3}function computed(expression){const v2=reactive(expression);return()=>v2.value}function __$checkInstanceBinding(instance3){const thisName=instance3.constructor.name,functions=[];for(const key3 of Object.getOwnPropertyNames(Object.getPrototypeOf(instance3)))key3.startsWith("_")&&!key3.startsWith("__")&&"function"==typeof instance3[key3]&&functions.push(`${thisName}.${key3}`);const functionsOnBindFunction=[],functionsOnBindFunctionMatch=instance3.onBindFunction.toString().match(/this\.(_[a-zA-Z0-9_]+)/g);functionsOnBindFunctionMatch&&functionsOnBindFunction.push(...functionsOnBindFunctionMatch.map((f4=>`${thisName}.${f4.replace(/this\./,"")}`)));const setOfThisFunctions=new Set(functions),setOfOnBindFunctions=new Set(functionsOnBindFunction),setAll=new Set([...setOfThisFunctions,...setOfOnBindFunctions]),missingInThis=[...setAll].filter((e3=>!setOfThisFunctions.has(e3))),missingInOnBind=[...setAll].filter((e3=>!setOfOnBindFunctions.has(e3)));missingInThis.length>0&&Logger(`[${thisName}] ⚠️ Missing functions in this: ${missingInThis.join(", ")}`);missingInOnBind.length>0&&Logger(`[${thisName}] ⚠️ Missing functions in onBindFunction: ${missingInOnBind.join(", ")}`);0==missingInThis.length&&0==missingInOnBind.length&&Logger(`[${thisName}] All functions are properly bound`,LOG_LEVEL_DEBUG)}function is_function(thing){return"function"==typeof thing}function run(fn){return fn()}function run_all(arr){for(var i2=0;i2{resolve=res2;reject=rej})),resolve,reject}}function to_array(value,n3){if(Array.isArray(value))return value;if(void 0===n3||!(Symbol.iterator in value))return Array.from(value);const array=[];for(const element2 of value){array.push(element2);if(array.length===n3)break}return array}function lifecycle_outside_component(name){if(dev_fallback_default){const error=new Error(`lifecycle_outside_component\n\`${name}(...)\` can only be used during component initialisation\nhttps://svelte.dev/e/lifecycle_outside_component`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function async_derived_orphan(){if(dev_fallback_default){const error=new Error("async_derived_orphan\nCannot create a `$derived(...)` with an `await` expression outside of an effect tree\nhttps://svelte.dev/e/async_derived_orphan");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/async_derived_orphan")}function bind_invalid_checkbox_value(){if(dev_fallback_default){const error=new Error("bind_invalid_checkbox_value\nUsing `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\nhttps://svelte.dev/e/bind_invalid_checkbox_value");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/bind_invalid_checkbox_value")}function derived_references_self(){if(dev_fallback_default){const error=new Error("derived_references_self\nA derived value cannot reference itself recursively\nhttps://svelte.dev/e/derived_references_self");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/derived_references_self")}function effect_in_teardown(rune){if(dev_fallback_default){const error=new Error(`effect_in_teardown\n\`${rune}\` cannot be used inside an effect cleanup function\nhttps://svelte.dev/e/effect_in_teardown`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_in_teardown")}function effect_in_unowned_derived(){if(dev_fallback_default){const error=new Error("effect_in_unowned_derived\nEffect cannot be created inside a `$derived` value that was not itself created inside an effect\nhttps://svelte.dev/e/effect_in_unowned_derived");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function effect_orphan(rune){if(dev_fallback_default){const error=new Error(`effect_orphan\n\`${rune}\` can only be used inside an effect (e.g. during component initialisation)\nhttps://svelte.dev/e/effect_orphan`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_orphan")}function effect_update_depth_exceeded(){if(dev_fallback_default){const error=new Error("effect_update_depth_exceeded\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\nhttps://svelte.dev/e/effect_update_depth_exceeded");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function flush_sync_in_effect(){if(dev_fallback_default){const error=new Error("flush_sync_in_effect\nCannot use `flushSync` inside an effect\nhttps://svelte.dev/e/flush_sync_in_effect");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/flush_sync_in_effect")}function invalid_snippet(){if(dev_fallback_default){const error=new Error("invalid_snippet\nCould not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\nhttps://svelte.dev/e/invalid_snippet");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/invalid_snippet")}function props_invalid_value(key3){if(dev_fallback_default){const error=new Error(`props_invalid_value\nCannot do \`bind:${key3}={undefined}\` when \`${key3}\` has a fallback value\nhttps://svelte.dev/e/props_invalid_value`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/props_invalid_value")}function rune_outside_svelte(rune){if(dev_fallback_default){const error=new Error(`rune_outside_svelte\nThe \`${rune}\` rune is only available inside \`.svelte\` and \`.svelte.js/ts\` files\nhttps://svelte.dev/e/rune_outside_svelte`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/rune_outside_svelte")}function set_context_after_init(){if(dev_fallback_default){const error=new Error("set_context_after_init\n`setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\nhttps://svelte.dev/e/set_context_after_init");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/set_context_after_init")}function state_descriptors_fixed(){if(dev_fallback_default){const error=new Error("state_descriptors_fixed\nProperty descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\nhttps://svelte.dev/e/state_descriptors_fixed");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function state_prototype_fixed(){if(dev_fallback_default){const error=new Error("state_prototype_fixed\nCannot set prototype of `$state` object\nhttps://svelte.dev/e/state_prototype_fixed");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/state_prototype_fixed")}function state_unsafe_mutation(){if(dev_fallback_default){const error=new Error("state_unsafe_mutation\nUpdating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\nhttps://svelte.dev/e/state_unsafe_mutation");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function svelte_boundary_reset_onerror(){if(dev_fallback_default){const error=new Error("svelte_boundary_reset_onerror\nA `` `reset` function cannot be called while an error is still being handled\nhttps://svelte.dev/e/svelte_boundary_reset_onerror");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function await_reactivity_loss(name){dev_fallback_default?console.warn(`%c[svelte] await_reactivity_loss\n%cDetected reactivity loss when reading \`${name}\`. This happens when state is read in an async function after an earlier \`await\`\nhttps://svelte.dev/e/await_reactivity_loss`,bold,normal):console.warn("https://svelte.dev/e/await_reactivity_loss")}function await_waterfall(name,location){dev_fallback_default?console.warn(`%c[svelte] await_waterfall\n%cAn async derived, \`${name}\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\nhttps://svelte.dev/e/await_waterfall`,bold,normal):console.warn("https://svelte.dev/e/await_waterfall")}function hydration_attribute_changed(attribute,html2,value){dev_fallback_default?console.warn(`%c[svelte] hydration_attribute_changed\n%cThe \`${attribute}\` attribute on \`${html2}\` changed its value between server and client renders. The client value, \`${value}\`, will be ignored in favour of the server value\nhttps://svelte.dev/e/hydration_attribute_changed`,bold,normal):console.warn("https://svelte.dev/e/hydration_attribute_changed")}function hydration_mismatch(location){dev_fallback_default?console.warn(`%c[svelte] hydration_mismatch\n%c${location?`Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`:"Hydration failed because the initial UI does not match what was rendered on the server"}\nhttps://svelte.dev/e/hydration_mismatch`,bold,normal):console.warn("https://svelte.dev/e/hydration_mismatch")}function lifecycle_double_unmount(){dev_fallback_default?console.warn("%c[svelte] lifecycle_double_unmount\n%cTried to unmount a component that was not mounted\nhttps://svelte.dev/e/lifecycle_double_unmount",bold,normal):console.warn("https://svelte.dev/e/lifecycle_double_unmount")}function select_multiple_invalid_value(){dev_fallback_default?console.warn("%c[svelte] select_multiple_invalid_value\n%cThe `value` property of a `
');$$css={hash:"svelte-o3lsbg",code:".svelte-o3lsbg {box-sizing:border-box;}.logpane.svelte-o3lsbg {display:flex;height:100%;flex-direction:column;}.log.svelte-o3lsbg {overflow-y:scroll;user-select:text;-webkit-user-select:text;padding-bottom:2em;}.log.svelte-o3lsbg > pre:where(.svelte-o3lsbg) {margin:0;}.log.svelte-o3lsbg > pre.wrap-right:where(.svelte-o3lsbg) {word-break:break-all;max-width:100%;width:100%;white-space:normal;}.row.svelte-o3lsbg {display:flex;flex-direction:row;justify-content:flex-end;}.row.svelte-o3lsbg > label:where(.svelte-o3lsbg) {display:flex;align-items:center;min-width:5em;margin-right:1em;}"};delegate(["click"]);SvelteItemView=class extends import_obsidian.ItemView{async onOpen(){await super.onOpen();this.contentEl.empty();await this._dismountComponent();this.component=await this.instantiateComponent(this.contentEl)}async _dismountComponent(){if(this.component){await unmount(this.component);this.component=void 0}}async onClose(){await super.onClose();if(this.component){await unmount(this.component);this.component=void 0}}};LogPaneView=class extends SvelteItemView{constructor(leaf,plugin3){super(leaf);this.icon="view-log";this.title="";this.navigation=!1;this.plugin=plugin3}instantiateComponent(target){return mount(LogPane,{target,props:{close:()=>{this.leaf.detach()}}})}getIcon(){return"view-log"}getViewType(){return"log-log"}getDisplayText(){return $msg("logPane.title")}};EVENT_PLATFORM_UNLOADED="platform-unloaded";APIBase=class{constructor(){this._isReady=!1;this._isDisposed=!1}get isReady(){return this._isReady}get isDisposed(){return this._isDisposed}async applyOptions(options){var _a8,_b5,_c3,_d2;if(this.isDisposed)throw new Error("Cannot apply options to a disposed API");this.isReady&&await(null==(_a8=this.__teardownCurrentOptions)?void 0:_a8.call(this));await(null==(_b5=this.onApplyOptions)?void 0:_b5.call(this,options));this._options?this._options={...this._options,...options}:this._options=options;await(null==(_c3=this.onOptionsApplied)?void 0:_c3.call(this));await(null==(_d2=this.onReady)?void 0:_d2.call(this))}async init(options){var _a8;await this.applyOptions(options);await(null==(_a8=this.onInit)?void 0:_a8.call(this));return this}async __teardownCurrentOptions(){var _a8,_b5;await(null==(_a8=this.onDisposeCurrentOptions)?void 0:_a8.call(this));await(null==(_b5=this.tearDownCurrentOptions)?void 0:_b5.call(this))}reload(options){return this.applyOptions(options)}async dispose(){var _a8,_b5;await(null==(_a8=this.onDisposeCurrentOptions)?void 0:_a8.call(this));await(null==(_b5=this.onDisposed)?void 0:_b5.call(this))}};secp256k1_CURVE={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt("1"),a:BigInt("0"),b:BigInt("7"),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")};var{p:P,n:N,Gx,Gy,b:_b3}=secp256k1_CURVE;lengths={publicKey:1+(L=32),publicKeyUncompressed:65,signature:64,seed:48};captureTrace=(...args)=>{"captureStackTrace"in Error&&"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(...args)};err=(message="")=>{const e3=new Error(message);captureTrace(e3,err);throw e3};isBig=n3=>"bigint"==typeof n3;isStr=s2=>"string"==typeof s2;isBytes=a2=>a2 instanceof Uint8Array||ArrayBuffer.isView(a2)&&"Uint8Array"===a2.constructor.name;abytes=(value,length,title="")=>{const bytes=isBytes(value),len=null==value?void 0:value.length,needsLen=void 0!==length;(!bytes||needsLen&&len!==length)&&err((title&&`"${title}" `)+"expected Uint8Array"+(needsLen?` of length ${length}`:"")+", got "+(bytes?`length=${len}`:"type="+typeof value));return value};u8n=len=>new Uint8Array(len);padh=(n3,pad2)=>n3.toString(16).padStart(pad2,"0");bytesToHex=b3=>Array.from(abytes(b3)).map((e3=>padh(e3,2))).join("");_ch=ch4=>ch4>=48&&ch4<=57?ch4-48:ch4>=65&&ch4<=70?ch4-55:ch4>=97&&ch4<=102?ch4-87:void 0;hexToBytes=hex=>{const e3="hex invalid";if(!isStr(hex))return err(e3);const hl=hex.length,al2=hl/2;if(hl%2)return err(e3);const array=u8n(al2);for(let ai2=0,hi=0;ai2null==globalThis?void 0:globalThis.crypto;subtle=()=>{var _a8,_b5;return null!=(_b5=null==(_a8=cr())?void 0:_a8.subtle)?_b5:err("crypto.subtle must be defined, consider polyfill")};concatBytes=(...arrs)=>{const r4=u8n(arrs.reduce(((sum2,a2)=>sum2+abytes(a2).length),0));let pad2=0;arrs.forEach((a2=>{r4.set(a2,pad2);pad2+=a2.length}));return r4};randomBytes=(len=L)=>cr().getRandomValues(u8n(len));big=BigInt;arange=(n3,min,max3,msg="bad number: out of range")=>isBig(n3)&&min<=n3&&n3{const r4=a2%b3;return r4>=BigInt("0")?r4:b3+r4};modN=a2=>M(a2,N);invert=(num,md)=>{(num===BigInt("0")||md<=BigInt("0"))&&err("no inverse n="+num+" mod="+md);let a2=M(num,md),b3=md,x2=BigInt("0"),y2=BigInt("1"),u2=BigInt("1"),v2=BigInt("0");for(;a2!==BigInt("0");){const q2=b3/a2,r4=b3%a2,m3=x2-u2*q2,n3=y2-v2*q2;b3=a2,a2=r4,x2=u2,y2=v2,u2=m3,v2=n3}return b3===BigInt("1")?M(x2,md):err("no inverse")};callHash=name=>{const fn=hashes[name];"function"!=typeof fn&&err("hashes."+name+" not set");return fn};apoint=p4=>p4 instanceof Point?p4:err("Point expected");koblitz=x2=>M(M(x2*x2)*x2+_b3);FpIsValid=n3=>arange(n3,BigInt("0"),P);FpIsValidNot0=n3=>arange(n3,BigInt("1"),P);FnIsValidNot0=n3=>arange(n3,BigInt("1"),N);isEven=y2=>(y2&BigInt("1"))===BigInt("0");u8of=n3=>Uint8Array.of(n3);getPrefix=y2=>u8of(isEven(y2)?2:3);lift_x=x2=>{const c3=koblitz(FpIsValidNot0(x2));let r4=BigInt("1");for(let num=c3,e3=(P+BigInt("1"))/BigInt("4");e3>BigInt("0");e3>>=BigInt("1")){e3&BigInt("1")&&(r4=r4*num%P);num=num*num%P}return M(r4*r4)===c3?r4:err("sqrt invalid")};_Point=class _Point{constructor(X2,Y2,Z2){__publicField(this,"X");__publicField(this,"Y");__publicField(this,"Z");this.X=FpIsValid(X2);this.Y=FpIsValidNot0(Y2);this.Z=FpIsValid(Z2);Object.freeze(this)}static CURVE(){return secp256k1_CURVE}static fromAffine(ap2){const{x:x2,y:y2}=ap2;return x2===BigInt("0")&&y2===BigInt("0")?I:new _Point(x2,y2,BigInt("1"))}static fromBytes(bytes){abytes(bytes);const{publicKey:comp,publicKeyUncompressed:uncomp}=lengths;let p4;const length=bytes.length,head2=bytes[0],tail=bytes.subarray(1),x2=sliceBytesNumBE(tail,0,L);if(length===comp&&(2===head2||3===head2)){let y2=lift_x(x2);const evenY=isEven(y2);isEven(big(head2))!==evenY&&(y2=M(-y2));p4=new _Point(x2,y2,BigInt("1"))}length===uncomp&&4===head2&&(p4=new _Point(x2,sliceBytesNumBE(tail,L,64),BigInt("1")));return p4?p4.assertValidity():err("bad point: not on curve")}static fromHex(hex){return _Point.fromBytes(hexToBytes(hex))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}equals(other){const{X:X1,Y:Y1,Z:Z1}=this,{X:X2,Y:Y2,Z:Z2}=apoint(other),X1Z2=M(X1*Z2),X2Z1=M(X2*Z1),Y1Z2=M(Y1*Z2),Y2Z1=M(Y2*Z1);return X1Z2===X2Z1&&Y1Z2===Y2Z1}is0(){return this.equals(I)}negate(){return new _Point(this.X,M(-this.Y),this.Z)}double(){return this.add(this)}add(other){const{X:X1,Y:Y1,Z:Z1}=this,{X:X2,Y:Y2,Z:Z2}=apoint(other),a2=BigInt("0"),b3=_b3;let X3=BigInt("0"),Y3=BigInt("0"),Z3=BigInt("0");const b32=M(b3*BigInt("3"));let t0=M(X1*X2),t1=M(Y1*Y2),t22=M(Z1*Z2),t3=M(X1+Y1),t4=M(X2+Y2);t3=M(t3*t4);t4=M(t0+t1);t3=M(t3-t4);t4=M(X1+Z1);let t5=M(X2+Z2);t4=M(t4*t5);t5=M(t0+t22);t4=M(t4-t5);t5=M(Y1+Z1);X3=M(Y2+Z2);t5=M(t5*X3);X3=M(t1+t22);t5=M(t5-X3);Z3=M(a2*t4);X3=M(b32*t22);Z3=M(X3+Z3);X3=M(t1-Z3);Z3=M(t1+Z3);Y3=M(X3*Z3);t1=M(t0+t0);t1=M(t1+t0);t22=M(a2*t22);t4=M(b32*t4);t1=M(t1+t22);t22=M(t0-t22);t22=M(a2*t22);t4=M(t4+t22);t0=M(t1*t4);Y3=M(Y3+t0);t0=M(t5*t4);X3=M(t3*X3);X3=M(X3-t0);t0=M(t3*t1);Z3=M(t5*Z3);Z3=M(Z3+t0);return new _Point(X3,Y3,Z3)}subtract(other){return this.add(apoint(other).negate())}multiply(n3,safe=!0){if(!safe&&n3===BigInt("0"))return I;FnIsValidNot0(n3);if(n3===BigInt("1"))return this;if(this.equals(G))return wNAF(n3).p;let p4=I,f4=G;for(let d4=this;n3>BigInt("0");d4=d4.double(),n3>>=BigInt("1"))n3&BigInt("1")?p4=p4.add(d4):safe&&(f4=f4.add(d4));return p4}multiplyUnsafe(scalar){return this.multiply(scalar,!1)}toAffine(){const{X:x2,Y:y2,Z:z2}=this;if(this.equals(I))return{x:BigInt("0"),y:BigInt("0")};if(z2===BigInt("1"))return{x:x2,y:y2};const iz=invert(z2,P);M(z2*iz)!==BigInt("1")&&err("inverse invalid");return{x:M(x2*iz),y:M(y2*iz)}}assertValidity(){const{x:x2,y:y2}=this.toAffine();FpIsValidNot0(x2);FpIsValidNot0(y2);return M(y2*y2)===koblitz(x2)?this:err("bad point: not on curve")}toBytes(isCompressed=!0){const{x:x2,y:y2}=this.assertValidity().toAffine(),x32b=numTo32b(x2);return isCompressed?concatBytes(getPrefix(y2),x32b):concatBytes(u8of(4),x32b,numTo32b(y2))}toHex(isCompressed){return bytesToHex(this.toBytes(isCompressed))}};__publicField(_Point,"BASE");__publicField(_Point,"ZERO");G=new(Point=_Point)(Gx,Gy,BigInt("1"));I=new Point(BigInt("0"),BigInt("1"),BigInt("0"));Point.BASE=G;Point.ZERO=I;doubleScalarMulUns=(R2,u1,u2)=>G.multiply(u1,!1).add(R2.multiply(u2,!1)).assertValidity();bytesToNumBE=b3=>big("0x"+(bytesToHex(b3)||"0"));sliceBytesNumBE=(b3,from,to)=>bytesToNumBE(b3.subarray(from,to));B256=BigInt("2")**BigInt("256");numTo32b=num=>hexToBytes(padh(arange(num,BigInt("0"),B256),64));secretKeyToScalar=secretKey2=>{const num=bytesToNumBE(abytes(secretKey2,L,"secret key"));return arange(num,BigInt("1"),N,"invalid secret key: outside of range")};0;getPublicKey=(privKey,isCompressed=!0)=>G.multiply(secretKeyToScalar(privKey)).toBytes(isCompressed);0;assertSigFormat=format=>{null==format||ALL_SIG.includes(format)||err(`Signature format must be one of: ${ALL_SIG.join(", ")}`);format===SIG_DER&&err('Signature format "der" is not supported: switch to noble-curves')};0;0;ALL_SIG=[SIG_COMPACT="compact",SIG_RECOVERED="recovered",SIG_DER="der"];hashes={hmacSha256Async:async(key3,message)=>{const s2=subtle(),k2=await s2.importKey("raw",key3,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]);return u8n(await s2.sign("HMAC",k2,message))},hmacSha256:void 0,sha256Async:async msg=>u8n(await subtle().digest("SHA-256",msg)),sha256:void 0};u8n(0);u8of(0);u8of(1);randomSecretKey=(seed=randomBytes(lengths.seed))=>{abytes(seed);(seed.length1024)&&err("expected 40-1024b");const num=M(bytesToNumBE(seed),N-BigInt("1"));return numTo32b(num+BigInt("1"))};(createKeygen=getPublicKey2=>seed=>{const secretKey2=randomSecretKey(seed);return{secretKey:secretKey2,publicKey:getPublicKey2(secretKey2)}})(getPublicKey);getTag=tag3=>Uint8Array.from("BIP0340/"+tag3,(c3=>c3.charCodeAt(0)));taggedHash=(tag3,...messages)=>{const fn=callHash("sha256"),tagH=fn(getTag(tag3));return fn(concatBytes(tagH,tagH,...messages))};taggedHashAsync=async(tag3,...messages)=>{const fn=hashes.sha256Async,tagH=await fn(getTag(tag3));return await fn(concatBytes(tagH,tagH,...messages))};extpubSchnorr=priv=>{const d_=secretKeyToScalar(priv),p4=G.multiply(d_),{x:x2,y:y2}=p4.assertValidity().toAffine();return{d:isEven(y2)?d_:modN(-d_),px:numTo32b(x2)}};bytesModN=bytes=>modN(bytesToNumBE(bytes));challenge=(...args)=>bytesModN(taggedHash("challenge",...args));challengeAsync=async(...args)=>bytesModN(await taggedHashAsync("challenge",...args));keygenSchnorr=createKeygen(pubSchnorr=secretKey2=>extpubSchnorr(secretKey2).px);prepSigSchnorr=(message,secretKey2,auxRand)=>{const{px,d:d4}=extpubSchnorr(secretKey2);return{m:abytes(message),px,d:d4,a:abytes(auxRand,L)}};extractK=rand=>{const k_=bytesModN(rand);k_===BigInt("0")&&err("sign failed: k is zero");const{px,d:d4}=extpubSchnorr(numTo32b(k_));return{rx:px,k:d4}};createSigSchnorr=(k2,px,e3,d4)=>concatBytes(px,numTo32b(modN(k2+e3*d4)));E_INVSIG="invalid signature produced";callSyncAsyncFn=(res2,later)=>res2 instanceof Promise?res2.then(later):later(res2);_verifSchnorr=(signature,message,publicKey2,challengeFn)=>{const sig=abytes(signature,64,"signature"),msg=abytes(message,void 0,"message"),pub=abytes(publicKey2,L,"publicKey");try{const x2=bytesToNumBE(pub),y2=lift_x(x2),y_=isEven(y2)?y2:M(-y2),P_=new Point(x2,y_,BigInt("1")).assertValidity(),px=numTo32b(P_.toAffine().x),r4=sliceBytesNumBE(sig,0,L);arange(r4,BigInt("1"),P);const s2=sliceBytesNumBE(sig,L,64);arange(s2,BigInt("1"),N);const i2=concatBytes(numTo32b(r4),px,msg);return callSyncAsyncFn(challengeFn(i2),(e3=>{const{x:x3,y:y3}=doubleScalarMulUns(P_,s2,modN(-e3)).toAffine();return!(!isEven(y3)||x3!==r4)}))}catch(error){return!1}};schnorr={keygen:keygenSchnorr,getPublicKey:pubSchnorr,sign:(message,secretKey2,auxRand=randomBytes(L))=>{const{m:m3,px,d:d4,a:a2}=prepSigSchnorr(message,secretKey2,auxRand),aux=taggedHash("aux",a2),t3=numTo32b(d4^bytesToNumBE(aux)),rand=taggedHash("nonce",t3,px,m3),{rx,k:k2}=extractK(rand),e3=challenge(rx,px,m3),sig=createSigSchnorr(k2,rx,e3,d4);verifySchnorr(sig,m3,px)||err(E_INVSIG);return sig},verify:verifySchnorr=(s2,m3,p4)=>_verifSchnorr(s2,m3,p4,challenge),signAsync:async(message,secretKey2,auxRand=randomBytes(L))=>{const{m:m3,px,d:d4,a:a2}=prepSigSchnorr(message,secretKey2,auxRand),aux=await taggedHashAsync("aux",a2),t3=numTo32b(d4^bytesToNumBE(aux)),rand=await taggedHashAsync("nonce",t3,px,m3),{rx,k:k2}=extractK(rand),e3=await challengeAsync(rx,px,m3),sig=createSigSchnorr(k2,rx,e3,d4);await verifySchnorrAsync(sig,m3,px)||err(E_INVSIG);return sig},verifyAsync:verifySchnorrAsync=async(s2,m3,p4)=>_verifSchnorr(s2,m3,p4,challengeAsync)};pwindows=Math.ceil(32)+1;precompute=()=>{const points=[];let p4=G,b3=p4;for(let w2=0;w2{const n3=p4.negate();return cnd?n3:p4};wNAF=n3=>{const comp=Gpows||(Gpows=precompute());let p4=I,f4=G;const mask=big(255),shiftBy=big(8);for(let w2=0;w2>=shiftBy;if(wbits2>128){wbits2-=256;n3+=BigInt("1")}const off=128*w2,offF=off,offP=off+Math.abs(wbits2)-1,isEven2=w2%2!=0,isNeg=wbits2<0;0===wbits2?f4=f4.add(ctneg(isEven2,comp[offF])):p4=p4.add(ctneg(isNeg,comp[offP]))}n3!==BigInt("0")&&err("invalid wnaf");return{p:p4,f:f4}};var{floor,random,sin}=Math;alloc=(n3,f4)=>Array(n3).fill().map(f4);selfId=(genId=n3=>alloc(n3,(()=>"0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"[floor(62*random())])).join(""))(20);all=Promise.all.bind(Promise);isBrowser="undefined"!=typeof window;var{entries,fromEntries,keys}=Object;noOp=()=>{};mkErr=msg=>new Error(`Trystero: ${msg}`);encoder=new TextEncoder;decoder=new TextDecoder;encodeBytes=txt=>encoder.encode(txt);decodeBytes=buffer=>decoder.decode(buffer);toHex=buffer=>buffer.reduce(((a2,c3)=>a2+c3.toString(16).padStart(2,"0")),"");topicPath=(...parts)=>parts.join("@");shuffle=(xs,seed)=>{const a2=[...xs],rand=()=>{const x2=1e4*sin(seed++);return x2-floor(x2)};let i2=a2.length;for(;i2;){const j2=floor(rand()*i2--);[a2[i2],a2[j2]]=[a2[j2],a2[i2]]}return a2};getRelays=(config,defaults2,defaultN,deriveFromAppId)=>(config.relayUrls||(deriveFromAppId?shuffle(defaults2,strToNum(config.appId)):defaults2)).slice(0,config.relayUrls?config.relayUrls.length:config.relayRedundancy||defaultN);toJson=JSON.stringify;fromJson=JSON.parse;strToNum=(str,limit=Number.MAX_SAFE_INTEGER)=>str.split("").reduce(((a2,c3)=>a2+c3.charCodeAt(0)),0)%limit;socketRetryPeriods={};reconnectionLockingPromise=null;resolver=null;pauseRelayReconnection=()=>{reconnectionLockingPromise||(reconnectionLockingPromise=new Promise((resolve=>{resolver=resolve})).finally((()=>{resolver=null;reconnectionLockingPromise=null})))};resumeRelayReconnection=()=>null==resolver?void 0:resolver();makeSocket=(url,onMessage)=>{const client={},init3=()=>{const socket=new WebSocket(url);socket.onclose=()=>{if(reconnectionLockingPromise)reconnectionLockingPromise.then(init3);else{null!=socketRetryPeriods[url]||(socketRetryPeriods[url]=3333);setTimeout(init3,socketRetryPeriods[url]);socketRetryPeriods[url]*=2}};socket.onmessage=e3=>onMessage(e3.data);client.socket=socket;client.url=socket.url;client.ready=new Promise((res2=>socket.onopen=()=>{res2(client);socketRetryPeriods[url]=3333}));client.send=data=>{1===socket.readyState&&socket.send(data)}};init3();return client};socketGetter=clientMap=>()=>fromEntries(entries(clientMap).map((([url,client])=>[url,client.socket])));watchOnline=()=>{if(isBrowser){const controller=new AbortController;addEventListener("online",resumeRelayReconnection,{signal:controller.signal});addEventListener("offline",pauseRelayReconnection,{signal:controller.signal});return()=>controller.abort()}return noOp};strToSha1={};pack=buff=>btoa(String.fromCharCode.apply(null,new Uint8Array(buff)));unpack=packed=>{const str=atob(packed);return new Uint8Array(str.length).map(((_,i2)=>str.charCodeAt(i2))).buffer};hashWith=async(algo2,str)=>new Uint8Array(await crypto.subtle.digest(algo2,encodeBytes(str)));sha1=async str=>strToSha1[str]||(strToSha1[str]=Array.from(await hashWith("SHA-1",str)).map((b3=>b3.toString(36))).join(""));genKey=async(secret,appId,roomId)=>crypto.subtle.importKey("raw",await crypto.subtle.digest({name:"SHA-256"},encodeBytes(`${secret}:${appId}:${roomId}`)),{name:"AES-GCM"},!1,["encrypt","decrypt"]);encrypt=async(keyP,plaintext)=>{const iv=crypto.getRandomValues(new Uint8Array(16));return iv.join(",")+"$"+pack(await crypto.subtle.encrypt({name:"AES-GCM",iv},await keyP,encodeBytes(plaintext)))};decrypt=async(keyP,raw)=>{const[iv,c3]=raw.split("$");return decodeBytes(await crypto.subtle.decrypt({name:"AES-GCM",iv:new Uint8Array(iv.split(","))},await keyP,unpack(c3)))};peer_default=(initiator,{rtcConfig,rtcPolyfill,turnConfig})=>{const pc=new(rtcPolyfill||RTCPeerConnection)({iceServers:defaultIceServers.concat(turnConfig||[]),...rtcConfig}),handlers2={};let makingOffer=!1,isSettingRemoteAnswerPending=!1,dataChannel=null;const setupDataChannel=channel=>{channel.binaryType="arraybuffer";channel.bufferedAmountLowThreshold=65535;channel.onmessage=e3=>{var _a8;return null==(_a8=handlers2.data)?void 0:_a8.call(handlers2,e3.data)};channel.onopen=()=>{var _a8;return null==(_a8=handlers2.connect)?void 0:_a8.call(handlers2)};channel.onclose=()=>{var _a8;return null==(_a8=handlers2.close)?void 0:_a8.call(handlers2)};channel.onerror=err3=>{var _a8;return null==(_a8=handlers2.error)?void 0:_a8.call(handlers2,err3)}},waitForIceGathering=pc2=>Promise.race([new Promise((res2=>{const checkState=()=>{if("complete"===pc2.iceGatheringState){pc2.removeEventListener("icegatheringstatechange",checkState);res2()}};pc2.addEventListener("icegatheringstatechange",checkState);checkState()})),new Promise((res2=>setTimeout(res2,5e3)))]).then((()=>({type:pc2.localDescription.type,sdp:pc2.localDescription.sdp.replace(/a=ice-options:trickle\s\n/g,"")})));if(initiator){dataChannel=pc.createDataChannel("data");setupDataChannel(dataChannel)}else pc.ondatachannel=({channel})=>{dataChannel=channel;setupDataChannel(channel)};pc.onnegotiationneeded=async()=>{var _a8,_b5;try{makingOffer=!0;await pc.setLocalDescription();const offer=await waitForIceGathering(pc);null==(_a8=handlers2.signal)||_a8.call(handlers2,offer)}catch(err3){null==(_b5=handlers2.error)||_b5.call(handlers2,err3)}finally{makingOffer=!1}};pc.onconnectionstatechange=()=>{var _a8;["disconnected","failed","closed"].includes(pc.connectionState)&&(null==(_a8=handlers2.close)||_a8.call(handlers2))};pc.ontrack=e3=>{var _a8,_b5;null==(_a8=handlers2.track)||_a8.call(handlers2,e3.track,e3.streams[0]);null==(_b5=handlers2.stream)||_b5.call(handlers2,e3.streams[0])};pc.onremovestream=e3=>{var _a8;return null==(_a8=handlers2.stream)?void 0:_a8.call(handlers2,e3.stream)};initiator&&(pc.canTrickleIceCandidates||pc.onnegotiationneeded());return{created:Date.now(),connection:pc,get channel(){return dataChannel},get isDead(){return"closed"===pc.connectionState},async signal(sdp){var _a8,_b5,_c3;if("open"!==(null==dataChannel?void 0:dataChannel.readyState)||(null==(_a8=sdp.sdp)?void 0:_a8.includes("a=rtpmap")))try{if("offer"===sdp.type){if(makingOffer||"stable"!==pc.signalingState&&!isSettingRemoteAnswerPending){if(initiator)return;await all([pc.setLocalDescription({type:"rollback"}),pc.setRemoteDescription(sdp)])}else await pc.setRemoteDescription(sdp);await pc.setLocalDescription();const answer=await waitForIceGathering(pc);null==(_b5=handlers2.signal)||_b5.call(handlers2,answer);return answer}if("answer"===sdp.type){isSettingRemoteAnswerPending=!0;try{await pc.setRemoteDescription(sdp)}finally{isSettingRemoteAnswerPending=!1}}}catch(err3){null==(_c3=handlers2.error)||_c3.call(handlers2,err3)}},sendData:data=>dataChannel.send(data),destroy:()=>{null==dataChannel||dataChannel.close();pc.close();makingOffer=!1;isSettingRemoteAnswerPending=!1},setHandlers:newHandlers=>Object.assign(handlers2,newHandlers),offerPromise:initiator?new Promise((res2=>handlers2.signal=sdp=>{"offer"===sdp.type&&res2(sdp)})):Promise.resolve(),addStream:stream=>stream.getTracks().forEach((track=>pc.addTrack(track,stream))),removeStream:stream=>pc.getSenders().filter((sender=>stream.getTracks().includes(sender.track))).forEach((sender=>pc.removeTrack(sender))),addTrack:(track,stream)=>pc.addTrack(track,stream),removeTrack:track=>{const sender=pc.getSenders().find((s2=>s2.track===track));sender&&pc.removeTrack(sender)},replaceTrack:(oldTrack,newTrack)=>{const sender=pc.getSenders().find((s2=>s2.track===oldTrack));if(sender)return sender.replaceTrack(newTrack)}}};defaultIceServers=[...alloc(3,((_,i2)=>`stun:stun${i2||""}.l.google.com:19302`)),"stun:stun.cloudflare.com:3478"].map((url=>({urls:url})));TypedArray=Object.getPrototypeOf(Uint8Array);chunkSize=16384-(payloadIndex=1+(progressIndex=1+13));internalNs=ns=>"@_"+ns;room_default=(onPeer,onPeerLeave,onSelfLeave)=>{const peerMap={},actions={},actionsCache={},pendingTransmissions={},pendingPongs={},pendingStreamMetas={},pendingTrackMetas={},listeners={onPeerJoin:noOp,onPeerLeave:noOp,onPeerStream:noOp,onPeerTrack:noOp},iterate2=(targets,f4)=>(targets?Array.isArray(targets)?targets:[targets]:keys(peerMap)).flatMap((id=>{const peer=peerMap[id];if(!peer){console.warn(`Trystero: no peer with id ${id} found`);return[]}return f4(id,peer)})),exitPeer=id=>{if(peerMap[id]){peerMap[id].destroy();delete peerMap[id];delete pendingTransmissions[id];delete pendingPongs[id];listeners.onPeerLeave(id);onPeerLeave(id)}},makeAction=type=>{if(actions[type])return actionsCache[type];if(!type)throw mkErr("action type argument is required");const typeBytes=encodeBytes(type);if(typeBytes.byteLength>12)throw mkErr(`action type string "${type}" (${typeBytes.byteLength}b) exceeds byte limit (12). Hint: choose a shorter name.`);const typeBytesPadded=new Uint8Array(12);typeBytesPadded.set(typeBytes);let nonce=0;actions[type]={onComplete:noOp,onProgress:noOp,setOnComplete:f4=>actions[type]={...actions[type],onComplete:f4},setOnProgress:f4=>actions[type]={...actions[type],onProgress:f4},send:async(data,targets,meta,onProgress)=>{if(meta&&"object"!=typeof meta)throw mkErr("action meta argument must be an object");const dataType=typeof data;if("undefined"===dataType)throw mkErr("action data cannot be undefined");const isJson="string"!==dataType,isBlob2=data instanceof Blob,isBinary=isBlob2||data instanceof ArrayBuffer||data instanceof TypedArray;if(meta&&!isBinary)throw mkErr("action meta argument can only be used with binary data");const buffer=isBinary?new Uint8Array(isBlob2?await data.arrayBuffer():data):encodeBytes(isJson?toJson(data):data),metaEncoded=meta?encodeBytes(toJson(meta)):null,chunkTotal=Math.ceil(buffer.byteLength/chunkSize)+(meta?1:0)||1,chunks=alloc(chunkTotal,((_,i2)=>{const isLast=i2===chunkTotal-1,isMeta=meta&&0===i2,chunk=new Uint8Array(payloadIndex+(isMeta?metaEncoded.byteLength:isLast?buffer.byteLength-chunkSize*(chunkTotal-(meta?2:1)):chunkSize));chunk.set(typeBytesPadded);chunk.set([nonce],12);chunk.set([isLast|isMeta<<1|isBinary<<2|isJson<<3],13);chunk.set([Math.round((i2+1)/chunkTotal*255)],progressIndex);chunk.set(meta?isMeta?metaEncoded:buffer.subarray((i2-1)*chunkSize,i2*chunkSize):buffer.subarray(i2*chunkSize,(i2+1)*chunkSize),payloadIndex);return chunk}));nonce=nonce+1&255;return all(iterate2(targets,(async(id,peer)=>{const{channel}=peer;let chunkN=0;for(;chunkNchannel.bufferedAmountLowThreshold&&await new Promise((res2=>{const next2=()=>{channel.removeEventListener("bufferedamountlow",next2);res2()};channel.addEventListener("bufferedamountlow",next2)}));if(!peerMap[id])break;peer.sendData(chunk);chunkN++;null==onProgress||onProgress(chunk[progressIndex]/255,id,meta)}})))}};return actionsCache[type]||(actionsCache[type]=[actions[type].send,actions[type].setOnComplete,actions[type].setOnProgress])},handleData=(id,data)=>{var _a8,_b5;const buffer=new Uint8Array(data),type=decodeBytes(buffer.subarray(0,12)).replaceAll("\0",""),[nonce]=buffer.subarray(12,13),[tag3]=buffer.subarray(13,progressIndex),[progress]=buffer.subarray(progressIndex,payloadIndex),payload=buffer.subarray(payloadIndex),isLast=!!(1&tag3),isMeta=!!(2&tag3),isBinary=!!(4&tag3),isJson=!!(8&tag3);if(!actions[type]){console.warn(`Trystero: received message with unregistered type (${type})`);return}pendingTransmissions[id]||(pendingTransmissions[id]={});(_a8=pendingTransmissions[id])[type]||(_a8[type]={});const target=(_b5=pendingTransmissions[id][type])[nonce]||(_b5[nonce]={chunks:[]});isMeta?target.meta=fromJson(decodeBytes(payload)):target.chunks.push(payload);actions[type].onProgress(progress/255,id,target.meta);if(!isLast)return;const full=new Uint8Array(target.chunks.reduce(((a2,c3)=>a2+c3.byteLength),0));target.chunks.reduce(((a2,c3)=>{full.set(c3,a2);return a2+c3.byteLength}),0);delete pendingTransmissions[id][type][nonce];if(isBinary)actions[type].onComplete(full,id,target.meta);else{const text2=decodeBytes(full);actions[type].onComplete(isJson?fromJson(text2):text2,id)}},leave=async()=>{await sendLeave("");await new Promise((res2=>setTimeout(res2,99)));entries(peerMap).forEach((([id,peer])=>{peer.destroy();delete peerMap[id]}));onSelfLeave()},[sendPing,getPing]=makeAction(internalNs("ping")),[sendPong,getPong]=makeAction(internalNs("pong")),[sendSignal2,getSignal]=makeAction(internalNs("signal")),[sendStreamMeta,getStreamMeta]=makeAction(internalNs("stream")),[sendTrackMeta,getTrackMeta]=makeAction(internalNs("track")),[sendLeave,getLeave]=makeAction(internalNs("leave"));onPeer(((peer,id)=>{if(!peerMap[id]){peerMap[id]=peer;peer.setHandlers({data:d4=>handleData(id,d4),stream:stream=>{listeners.onPeerStream(stream,id,pendingStreamMetas[id]);delete pendingStreamMetas[id]},track:(track,stream)=>{listeners.onPeerTrack(track,stream,id,pendingTrackMetas[id]);delete pendingTrackMetas[id]},signal:sdp=>sendSignal2(sdp,id),close:()=>exitPeer(id),error:err3=>{console.error(err3);exitPeer(id)}});listeners.onPeerJoin(id)}}));getPing(((_,id)=>sendPong("",id)));getPong(((_,id)=>{var _a8;null==(_a8=pendingPongs[id])||_a8.call(pendingPongs);delete pendingPongs[id]}));getSignal(((sdp,id)=>{var _a8;return null==(_a8=peerMap[id])?void 0:_a8.signal(sdp)}));getStreamMeta(((meta,id)=>pendingStreamMetas[id]=meta));getTrackMeta(((meta,id)=>pendingTrackMetas[id]=meta));getLeave(((_,id)=>exitPeer(id)));isBrowser&&addEventListener("beforeunload",leave);return{makeAction,leave,ping:async id=>{if(!id)throw mkErr("ping() must be called with target peer ID");const start=Date.now();sendPing("",id);await new Promise((res2=>pendingPongs[id]=res2));return Date.now()-start},getPeers:()=>fromEntries(entries(peerMap).map((([id,peer])=>[id,peer.connection]))),addStream:(stream,targets,meta)=>iterate2(targets,(async(id,peer)=>{meta&&await sendStreamMeta(meta,id);peer.addStream(stream)})),removeStream:(stream,targets)=>iterate2(targets,((_,peer)=>peer.removeStream(stream))),addTrack:(track,stream,targets,meta)=>iterate2(targets,(async(id,peer)=>{meta&&await sendTrackMeta(meta,id);peer.addTrack(track,stream)})),removeTrack:(track,targets)=>iterate2(targets,((_,peer)=>peer.removeTrack(track))),replaceTrack:(oldTrack,newTrack,targets,meta)=>iterate2(targets,(async(id,peer)=>{meta&&await sendTrackMeta(meta,id);peer.replaceTrack(oldTrack,newTrack)})),onPeerJoin:f4=>listeners.onPeerJoin=f4,onPeerLeave:f4=>listeners.onPeerLeave=f4,onPeerStream:f4=>listeners.onPeerStream=f4,onPeerTrack:f4=>listeners.onPeerTrack=f4}};strategy_default=({init:init3,subscribe:subscribe2,announce})=>{const occupiedRooms={};let initPromises,offerPool,offerCleanupTimer,cleanupWatchOnline,didInit=!1;return(config,roomId,onJoinError)=>{var _a8;const{appId}=config;if(null==(_a8=occupiedRooms[appId])?void 0:_a8[roomId])return occupiedRooms[appId][roomId];const pendingOffers={},connectedPeers={},rootTopicPlaintext=topicPath("Trystero",appId,roomId),rootTopicP=sha1(rootTopicPlaintext),selfTopicP=sha1(topicPath(rootTopicPlaintext,selfId)),key3=genKey(config.password||"",appId,roomId),withKey=f4=>async signal=>({type:signal.type,sdp:await f4(key3,signal.sdp)}),toPlain=withKey(decrypt),toCipher=withKey(encrypt),makeOffer=()=>peer_default(!0,config),connectPeer=(peer,peerId,relayId)=>{var _a9;if(connectedPeers[peerId])connectedPeers[peerId]!==peer&&peer.destroy();else{connectedPeers[peerId]=peer;onPeerConnect(peer,peerId);null==(_a9=pendingOffers[peerId])||_a9.forEach(((peer2,i2)=>{i2!==relayId&&peer2.destroy()}));delete pendingOffers[peerId]}},disconnectPeer=(peer,peerId)=>{connectedPeers[peerId]===peer&&delete connectedPeers[peerId]},prunePendingOffer=(peerId,relayId)=>{var _a9;if(connectedPeers[peerId])return;const offer=null==(_a9=pendingOffers[peerId])?void 0:_a9[relayId];if(offer){delete pendingOffers[peerId][relayId];offer.destroy()}},getOffers=n3=>{offerPool.push(...alloc(n3,makeOffer));return all(offerPool.splice(0,n3).map((peer=>peer.offerPromise.then(toCipher).then((offer=>({peer,offer}))))))},handleJoinError=(peerId,sdpType)=>null==onJoinError?void 0:onJoinError({error:`incorrect password (${config.password}) when decrypting ${sdpType}`,appId,peerId,roomId}),handleMessage=relayId=>async(topic,msg,signalPeer)=>{var _a9,_b5,_c3;const[rootTopic,selfTopic]=await all([rootTopicP,selfTopicP]);if(topic!==rootTopic&&topic!==selfTopic)return;const{peerId,offer,answer,peer}="string"==typeof msg?fromJson(msg):msg;if(peerId!==selfId&&!connectedPeers[peerId])if(!peerId||offer||answer){if(offer){if((null==(_b5=pendingOffers[peerId])?void 0:_b5[relayId])&&selfId>peerId)return;const peer2=peer_default(!1,config);peer2.setHandlers({connect:()=>connectPeer(peer2,peerId,relayId),close:()=>disconnectPeer(peer2,peerId)});let plainOffer;try{plainOffer=await toPlain(offer)}catch(e3){handleJoinError(peerId,"offer");return}if(peer2.isDead)return;const[topic2,answer2]=await all([sha1(topicPath(rootTopicPlaintext,peerId)),peer2.signal(plainOffer)]);signalPeer(topic2,toJson({peerId:selfId,answer:await toCipher(answer2)}))}else if(answer){let plainAnswer;try{plainAnswer=await toPlain(answer)}catch(e3){handleJoinError(peerId,"answer");return}if(peer){peer.setHandlers({connect:()=>connectPeer(peer,peerId,relayId),close:()=>disconnectPeer(peer,peerId)});peer.signal(plainAnswer)}else{const peer2=null==(_c3=pendingOffers[peerId])?void 0:_c3[relayId];peer2&&!peer2.isDead&&peer2.signal(plainAnswer)}}}else{if(null==(_a9=pendingOffers[peerId])?void 0:_a9[relayId])return;const[[{peer:peer2,offer:offer2}],topic2]=await all([getOffers(1),sha1(topicPath(rootTopicPlaintext,peerId))]);pendingOffers[peerId]||(pendingOffers[peerId]=[]);pendingOffers[peerId][relayId]=peer2;setTimeout((()=>prunePendingOffer(peerId,relayId)),.9*announceIntervals[relayId]);peer2.setHandlers({connect:()=>connectPeer(peer2,peerId,relayId),close:()=>disconnectPeer(peer2,peerId)});signalPeer(topic2,toJson({peerId:selfId,offer:offer2}))}};if(!config)throw mkErr("requires a config map as the first argument");if(!appId&&!config.firebaseApp)throw mkErr("config map is missing appId field");if(!roomId)throw mkErr("roomId argument required");if(!didInit){const initRes=init3(config);offerPool=alloc(20,makeOffer);initPromises=Array.isArray(initRes)?initRes:[initRes];didInit=!0;offerCleanupTimer=setInterval((()=>offerPool=offerPool.filter((peer=>{const shouldLive=Date.now()-peer.created<57333;shouldLive||peer.destroy();return shouldLive}))),59052.99);cleanupWatchOnline=config.manualRelayReconnection?noOp:watchOnline()}const announceIntervals=initPromises.map((()=>5333)),announceTimeouts=[],unsubFns=initPromises.map((async(relayP,i2)=>subscribe2(await relayP,await rootTopicP,await selfTopicP,handleMessage(i2),getOffers)));all([rootTopicP,selfTopicP]).then((([rootTopic,selfTopic])=>{const queueAnnounce=async(relay,i2)=>{const ms=await announce(relay,rootTopic,selfTopic);"number"==typeof ms&&(announceIntervals[i2]=ms);announceTimeouts[i2]=setTimeout((()=>queueAnnounce(relay,i2)),announceIntervals[i2])};unsubFns.forEach((async(didSub,i2)=>{await didSub;queueAnnounce(await initPromises[i2],i2)}))}));let onPeerConnect=noOp;occupiedRooms[appId]||(occupiedRooms[appId]={});return occupiedRooms[appId][roomId]=room_default((f4=>onPeerConnect=f4),(id=>delete connectedPeers[id]),(()=>{delete occupiedRooms[appId][roomId];announceTimeouts.forEach(clearTimeout);unsubFns.forEach((async f4=>(await f4)()));clearInterval(offerCleanupTimer);cleanupWatchOnline();didInit=!1}))}};clients={};var{secretKey,publicKey}=schnorr.keygen();pubkey=toHex(publicKey);subIdToTopic={};msgHandlers={};kindCache={};now2=()=>Math.floor(Date.now()/1e3);topicToKind=topic=>{var _a8;return null!=(_a8=kindCache[topic])?_a8:kindCache[topic]=strToNum(topic,1e4)+2e4};createEvent=async(topic,content)=>{const payload={kind:topicToKind(topic),tags:[["x",topic]],created_at:now2(),content,pubkey},id=await hashWith("SHA-256",toJson([0,payload.pubkey,payload.created_at,payload.kind,payload.tags,payload.content]));return toJson(["EVENT",{...payload,id:toHex(id),sig:toHex(await schnorr.signAsync(id,secretKey))}])};subscribe=(subId,topic)=>{subIdToTopic[subId]=topic;return toJson(["REQ",subId,{kinds:[topicToKind(topic)],since:now2(),["#x"]:[topic]}])};unsubscribe=subId=>{delete subIdToTopic[subId];return toJson(["CLOSE",subId])};joinRoom=strategy_default({init:config=>getRelays(config,defaultRelayUrls,5,!0).map((url=>{const client=makeSocket(url,(data=>{var _a8;const[msgType,subId,payload,relayMsg]=fromJson(data);if("EVENT"===msgType)null==(_a8=msgHandlers[subId])||_a8.call(msgHandlers,subIdToTopic[subId],payload.content);else{const prefix=`Trystero: relay failure from ${client.url} - `;"NOTICE"===msgType?console.warn(prefix+subId):"OK"!==msgType||payload||console.warn(prefix+relayMsg)}}));clients[url]=client;return client.ready})),subscribe:(client,rootTopic,selfTopic,onMessage)=>{const rootSubId=genId(64),selfSubId=genId(64);msgHandlers[rootSubId]=msgHandlers[selfSubId]=(topic,data)=>onMessage(topic,data,(async(peerTopic,signal)=>client.send(await createEvent(peerTopic,signal))));client.send(subscribe(rootSubId,rootTopic));client.send(subscribe(selfSubId,selfTopic));return()=>{client.send(unsubscribe(rootSubId));client.send(unsubscribe(selfSubId));delete msgHandlers[rootSubId];delete msgHandlers[selfSubId]}},announce:async(client,rootTopic)=>client.send(await createEvent(rootTopic,toJson({peerId:selfId})))});getRelaySockets=socketGetter(clients);defaultRelayUrls=["black.nostrcity.club","ftp.halifax.rwth-aachen.de/nostr","nos.lol","nostr.cool110.xyz","nostr.data.haus","nostr.sathoarder.com","nostr.vulpem.com","relay.agorist.space","relay.binaryrobot.com","relay.damus.io","relay.fountain.fm","relay.mostro.network","relay.nostraddress.com","relay.nostrdice.com","relay.nostromo.social","relay.oldenburg.cool","relay.verified-nostr.com","yabu.me/v2"].map((url=>"wss://"+url));ResponsePreventedError=class extends Error{constructor(message){super(`Response prevented: ${message}`)}};DeviceDecisions=(DeviceDecisions2=>{DeviceDecisions2.ACCEPT="accepted";DeviceDecisions2.REJECT="rejected";DeviceDecisions2.IGNORE="ignore";return DeviceDecisions2})(DeviceDecisions||{});StoredMapLike=class{constructor(store,prefix=""){this._cache=new Map;this._prefix="";this._store=store}addPrefix(key3){return`${this._prefix}-${key3}`}async get(key3){if(this._cache.has(key3))return this._cache.get(key3);const value=await this._store.get(this.addPrefix(key3));void 0!==value&&this._cache.set(key3,value);return value}async set(key3,value){try{const ret=await this._store.set(this.addPrefix(key3),value);this._cache.set(key3,value);return ret}catch(e3){this._cache.delete(key3);throw e3}}async delete(key3){try{const ret=await this._store.delete(this.addPrefix(key3));this._cache.delete(key3);return ret}catch(e3){this._cache.delete(key3);throw e3}}async has(key3){return!!this._cache.has(key3)||(await this._store.keys(this.addPrefix(key3),key3)).length>0}};TrysteroReplicatorP2PClient=class{constructor(server,connectedPeerId){this._prevSeq=0;this.waitingInvocations=new Map;this.invocationTimeouts=new Map;this._server=server;this._connectedPeerId=connectedPeerId;this._remoteDB=this._bindRemoteDB()}get remoteDB(){return this._remoteDB}_bindRemoteDB(){return{info:this.bindRemoteFunction("info"),changes:this.bindRemoteFunction("changes"),revsDiff:this.bindRemoteFunction("revsDiff"),bulkDocs:this.bindRemoteFunction("bulkDocs"),bulkGet:this.bindRemoteFunction("bulkGet"),put:this.bindRemoteFunction("put"),get:this.bindRemoteFunction("get")}}get __send(){var _a8;return null==(_a8=this._server)?void 0:_a8.__send.bind(this._server)}generateNewSeq(){const seq=Math.floor(115*Math.random())+1+this._prevSeq;if(!this.waitingInvocations.has(seq)){this._prevSeq=seq%~~(Number.MAX_SAFE_INTEGER/2);return seq}return this.generateNewSeq()}_sendRPC(type,args,timeout=3e4){if(!this.__send)throw new Error("Not connected to any room");const seq=this.generateNewSeq(),p4=promiseWithResolver();this.waitingInvocations.set(seq,p4);const request2={type,direction:"request",seq,args};timeout&&timeout>0&&this.invocationTimeouts.set(seq,setTimeout((()=>{if(this.waitingInvocations.has(seq)){this.waitingInvocations.delete(seq);p4.reject(new Error(`Invocation Timed out: ${type} (${seq}) (Timeout: ${timeout}ms)`))}this.invocationTimeouts.delete(seq)}),timeout));this.__send(request2,this._connectedPeerId);return p4.promise}__onResponse(data){const seq=data.seq,type=data.type;if(this.invocationTimeouts.has(seq)){clearTimeout(this.invocationTimeouts.get(seq));this.invocationTimeouts.delete(seq)}const p4=this.waitingInvocations.get(seq);if(p4){this.waitingInvocations.delete(seq);if(data.error){p4.reject(data.error);Logger(`Invoking remote function [ DONE] : ${type} (${seq}) : (Error)`,LOG_LEVEL_VERBOSE)}else p4.resolve(data.data)}else Logger(`Invoking remote function [ERROR] : ${type} (${seq}) : No Handler left. Possibly timed out`,LOG_LEVEL_VERBOSE)}bindRemoteFunction(type,timeout=3e4){return async(...args)=>{if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(type,args,timeout)}}async invokeRemoteFunction(type,args,timeout=3e4){if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(type,args,timeout)}bindRemoteObjectFunctions(key3,timeout=3e4){return async(...args)=>{if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(`${key3.toString()}`,args,timeout)}}async invokeRemoteObjectFunction(key3,args,timeout=3e4){if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(`${key3.toString()}`,args,timeout)}close(){this._remoteDB=void 0;this._server=void 0}};epochFNV1a=2166136261;c1=3432918353;c2=461845907;r1=15;r2=13;m=5;n=3864292196;new TextEncoder;EVENT_SERVER_STATUS="p2p-server-status";EVENT_ADVERTISEMENT_RECEIVED="p2p-advertisement-received";EVENT_DEVICE_LEAVED="p2p-device-leaved";EVENT_REQUEST_STATUS="p2p-request-status";EVENT_P2P_REQUEST_FORCE_OPEN="p2p-request-force-open";EVENT_P2P_REPLICATOR_STATUS="p2p-replicator-status";TrysteroReplicatorP2PServer=class{constructor(env,_serverPeerId=selfId){this.assignedFunctions=new Map;this.clients=new Map;this._bindingObjects=[];this._knownAdvertisements=new Map;this.temporaryAcceptedPeers=new Map;this._acceptablePeers=new Computed({evaluation:settings=>{var _a8;return`${null!=(_a8=null==settings?void 0:settings.P2P_AutoAcceptingPeers)?_a8:""}`.split(",").map((e3=>e3.trim())).filter((e3=>!!e3)).map((e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i")))}});this._shouldDenyPeers=new Computed({evaluation:settings=>{var _a8;return`${null!=(_a8=null==settings?void 0:settings.P2P_AutoDenyingPeers)?_a8:""}`.split(",").map((e3=>e3.trim())).filter((e3=>!!e3)).map((e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i")))}});this.activePeer=new Map;this._env=env;this._serverPeerId=_serverPeerId;eventHub.onEvent(EVENT_PLATFORM_UNLOADED,(()=>{this.shutdown()}));this.acceptedPeers=new StoredMapLike(this._env.simpleStore,"p2p-device-decisions")}get isDisposed(){return!this._room}get isServing(){return void 0!==this._room}async ensureLeaved(){var _a8;if(this._room){try{await(null==(_a8=this._room)?void 0:_a8.leave())}catch(ex){Logger("Some error has been occurred while leaving the room, but possibly can be ignored",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE)}this._room=void 0;eventHub.emitEvent("p2p-disconnected")}}async setRoom(room){var _a8;await(null==(_a8=this._room)?void 0:_a8.leave());this._room=room}async shutdown(){try{await this.close();await this.ensureLeaved()}catch(ex){Logger("Some error has been occurred while shutting down the server",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE)}}async dispatchConnectionStatus(){const adsTasks=[...this.knownAdvertisements].map((async e3=>{const isAccepted2=await this.acceptedPeers.get(e3.name),isTemporaryAccepted=this.temporaryAcceptedPeers.get(e3.peerId);return{...e3,isAccepted:isAccepted2,isTemporaryAccepted}})),ads=await Promise.all(adsTasks);eventHub.emitEvent(EVENT_SERVER_STATUS,{isConnected:this.isServing,knownAdvertisements:ads,serverPeerId:this.serverPeerId})}async makeDecision(decision){decision.decision?decision.isTemporary?this.temporaryAcceptedPeers.set(decision.peerId,!0):await this.acceptedPeers.set(decision.name,!0):decision.isTemporary?this.temporaryAcceptedPeers.set(decision.peerId,!1):await this.acceptedPeers.set(decision.name,!1);await this.dispatchConnectionStatus()}async revokeDecision(decision){this.temporaryAcceptedPeers.delete(decision.peerId);await this.acceptedPeers.delete(decision.name);await this.dispatchConnectionStatus()}get room(){return this._room}get serverPeerId(){return this._serverPeerId}get db(){return this._env.db}get confirm(){return this._env.confirm}get settings(){return this._env.settings}get isEnabled(){return this.settings.P2P_Enabled}get deviceInfo(){return{currentPeerId:this._serverPeerId,name:this._env.deviceName,platform:this._env.platform,version:"0.0.0"}}sendAdvertisement(peerId){if(!this.isEnabled)return;const devInfo=this.deviceInfo,data={peerId:devInfo.currentPeerId,name:devInfo.name,platform:devInfo.platform};if(this._sendAdvertisement){Logger(`peerId: ${this.serverPeerId} Sending Advertisement to ${null!=peerId?peerId:"All"}`,LOG_LEVEL_VERBOSE);this._sendAdvertisement(data,peerId)}}get knownAdvertisements(){return[...this._knownAdvertisements.values()]}onAdvertisement(data,peerId){if(this.isEnabled){Logger(`Advertisement from ${peerId}`,LOG_LEVEL_VERBOSE);if(peerId!==this.serverPeerId&&data.peerId!==this.serverPeerId&&data.name!==this.deviceInfo.name&&data.peerId===peerId){this._knownAdvertisements.set(peerId,data);this.dispatchConnectionStatus();eventHub.emitEvent(EVENT_ADVERTISEMENT_RECEIVED,data)}}}confirmUserToAccept(peerId){return shareRunningResult(`confirmUserToAccept-${peerId}`,(()=>this._confirmUserToAccept(peerId)))}_confirmUserToAccept(peerId){const peerInfo=this._knownAdvertisements.get(peerId);if(!peerInfo)throw new Error("Unknown Peer");const peerName=peerInfo.name,message=`Are you sure to establish connection to ${peerName} (${peerId})?\nYou can chose as follows:\n- Accept: Accept all connections from this peer.\n- Ignore: Reject all connections from this peer.\n- Accept Temporarily: Accept the connection for this session only.\n- Ignore Temporarily: Reject the connection for this session only.\n\n>[!INFO] You can revoke your decision from the Peer-to-Peer Replicator Pane.`;return this.confirm.askSelectStringDialogue(message,["Accept","Ignore","Accept Temporarily","Ignore Temporarily"],{title:"P2P Connection Request",defaultAction:"Ignore Temporarily",timeout:30}).then((decision=>{if("Accept Temporarily"===decision){this.temporaryAcceptedPeers.set(peerId,!0);this.dispatchConnectionStatus();return!0}if("Ignore Temporarily"===decision){this.temporaryAcceptedPeers.set(peerId,!1);this.dispatchConnectionStatus();return!1}if("Accept"===decision){this.temporaryAcceptedPeers.delete(peerId);this.acceptedPeers.set(peerName,!0);this.dispatchConnectionStatus();return!0}if("Ignore"===decision){this.temporaryAcceptedPeers.delete(peerId);this.acceptedPeers.set(peerName,!1);this.dispatchConnectionStatus();return!1}throw new ResponsePreventedError("User Accepting failed")}))}async isAcceptablePeer(peerId){if(!this.isEnabled)return;const peerInfo=this._knownAdvertisements.get(peerId);if(!peerInfo)return!1;const peerName=peerInfo.name;if(this.temporaryAcceptedPeers.has(peerId))return this.temporaryAcceptedPeers.get(peerId);const accepted=await this.acceptedPeers.get(peerName);if(null!=accepted)return accepted;const isAcceptable=(await this._acceptablePeers.update(this.settings)).value.some((e3=>e3.test(peerName))),isDeny=(await this._shouldDenyPeers.update(this.settings)).value.some((e3=>e3.test(peerName)));if(isAcceptable){if(isDeny)return!1;this.temporaryAcceptedPeers.set(peerId,!0);this.dispatchConnectionStatus();return!0}return!this.settings.P2P_IsHeadless&&await this.confirmUserToAccept(peerId)}async __send(data,peerId){if(this.isEnabled)if(await this.isAcceptablePeer(peerId)){if(this.___send)return await this.___send(data,peerId);Logger("Cannot send response, no send function")}else{Logger(`Invalid Message to ${peerId}`,LOG_LEVEL_VERBOSE);Logger(data,LOG_LEVEL_VERBOSE)}}async processArrivedRPC(data,peerId){if(this.isEnabled){if(!data.type.startsWith("!")&&!await this.isAcceptablePeer(peerId))throw new Error(`Not acceptable peer ${peerId}`);if("response"===data.direction)this.__onResponse(data,peerId);else{if("request"!==data.direction)throw new Error(`Invalid Message from ${peerId}`);await this.__onRequest(data,peerId)}}}onAfterJoinRoom(){Logger("Initializing...",LOG_LEVEL_VERBOSE);const room=this.room;if(!room)throw new Error("This server has been already disconnected");const[send,arrived]=room.makeAction("rpc");this.___send=send;arrived(((data,peerId)=>{this.processArrivedRPC(data,peerId).catch((e3=>{Logger(e3.message,LOG_LEVEL_INFO);Logger(e3,LOG_LEVEL_VERBOSE)}))}));const[adSend,adArrived]=room.makeAction("ad");this._sendAdvertisement=adSend;adArrived(((data,peerId)=>{this.onAdvertisement(data,peerId)}));room.onPeerJoin((peerId=>{const peer=room.getPeers()[peerId];this.activePeer.set(peerId,peer);this.sendAdvertisement(peerId)}));room.onPeerLeave((peerId=>{this._knownAdvertisements.delete(peerId);const peerConn=this.activePeer.get(peerId);if(peerConn){peerConn.close();this.activePeer.delete(peerId)}eventHub.emitEvent(EVENT_DEVICE_LEAVED,peerId);this.dispatchConnectionStatus()}));eventHub.emitEvent("p2p-connected");this.dispatchConnectionStatus()}async startService(bindings=[]){if(!this.isEnabled){Logger($msg("P2P.NotEnabled"),LOG_LEVEL_NOTICE);return}const servingDB=createHostingDB(this._env);this._bindingObjects=[...bindings,servingDB];this._bindingObjects.forEach((b3=>{this.serveObject(b3)}));await this.sendAdvertisement()}async start(bindings=[]){const passphraseNumbers=mixedHash(this.settings.P2P_passphrase,0),passphrase=passphraseNumbers[0].toString(36)+passphraseNumbers[1].toString(36);await this.shutdown();if(!this.settings.P2P_Enabled){Logger($msg("P2P.NotEnabled"),LOG_LEVEL_NOTICE);return}const relays=this.settings.P2P_relays.split(",").filter((e3=>e3.trim().length>0)),turnServers=this.settings.P2P_turnServers.split(",").map((e3=>e3.trim())).filter((e3=>e3.length>0)),options={relayUrls:relays,appId:this.settings.P2P_AppID,password:passphrase,turnConfig:turnServers.length>0?[{urls:turnServers,username:this.settings.P2P_turnUsername,credential:this.settings.P2P_turnCredential}]:[]},room=joinRoom(options,this.settings.P2P_roomID,!0);await this.setRoom(room);this.onAfterJoinRoom();this.dispatchConnectionStatus();await this.startService(bindings)}serveFunction(type,func){this.assignedFunctions.set(type,func)}serveObject(obj){Object.keys(obj).forEach((key3=>{if(key3.toString().startsWith("_"))return;const func=obj[key3].bind(obj);this.assignedFunctions.set(key3.toString(),func)}))}__onResponse(data,peerId){const peer=this.clients.get(peerId);peer?peer.__onResponse(data):Logger(`Response from unknown peer ${peerId}`,LOG_LEVEL_VERBOSE)}async __onRequest(data,peerId){try{const func=this.assignedFunctions.get(data.type);if("function"!=typeof func)throw new Error(`Cannot serve function ${data.type}, no function provided or I am only a client`);const r4=await Promise.resolve(func.apply(this,data.args));await this.__send({type:data.type,seq:data.seq,direction:"response",data:r4},peerId)}catch(e3){if(e3 instanceof ResponsePreventedError){Logger(`Serving function: [FAILED] ${data.type}: Response prevented.`,LOG_LEVEL_VERBOSE);return}Logger(`Serving function: [FAILED] ${data.type} sending back the failure information`,LOG_LEVEL_VERBOSE);Logger(e3 instanceof Error?e3.message:e3,LOG_LEVEL_VERBOSE);await this.__send({type:data.type,seq:data.seq,direction:"response",data:void 0,error:e3},peerId)}}async close(){var _a8,_b5;this.assignedFunctions.clear();const peers=null!=(_b5=null==(_a8=this.room)?void 0:_a8.getPeers())?_b5:{};this.clients.forEach((client=>client.close()));this.clients.clear();for(const[,peer]of Object.entries(peers))peer.close();await this.ensureLeaved();this._knownAdvertisements.clear();await this.dispatchConnectionStatus()}getConnection(peerId){if(this.clients.has(peerId))return this.clients.get(peerId);if(!this._knownAdvertisements.has(peerId))throw new Error(`Unknown Peer ${peerId}`);const client=new TrysteroReplicatorP2PClient(this,peerId);this.clients.set(peerId,client);return client}};p=promiseWithResolver();instance=void 0;eventHub.onceEvent(EVENT_PLATFORM_UNLOADED,(()=>{instance=void 0;p.resolve(void 0)}));replicatorInstanceGetter=()=>{};LiveSyncTrysteroReplicator=class extends LiveSyncAbstractReplicator{getReplicationPBKDF2Salt(setting,refresh){return Promise.resolve(new Uint8Array(32))}terminateSync(){}async openReplication(setting,keepAlive,showResult,ignoreCleanLock){const logLevel=showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,r4=await this.getP2PConnection(logLevel);if(!r4)return!1;await r4.replicateFromCommand(showResult)}tryConnectRemote(setting,showResult){return Promise.resolve(!1)}replicateAllToServer(setting,showingNotice,sendChunksInBulkDisabled){return Promise.resolve(!1)}async openP2P(logLevel){const r4=getReplicatorInstance();if(!r4){Logger($msg("P2P.ReplicatorInstanceMissing"),logLevel);return!1}await r4.open();return r4}async getP2PConnection(logLevel){const r4=getReplicatorInstance();if(!r4){Logger($msg("P2P.ReplicatorInstanceMissing"),logLevel);return!1}await r4.makeSureOpened();return r4}async selectPeer(settingPeerName,r4,logLevel){var _a8,_b5,_c3,_d2,_e2;const knownPeersOrg=null!=(_b5=null==(_a8=r4.server)?void 0:_a8.knownAdvertisements)?_b5:[];let knownPeers;if(0!=knownPeersOrg.length)knownPeers=knownPeersOrg;else{Logger($msg("P2P.NoKnownPeers"),logLevel);await Promise.race([delay(5e3),eventHub.waitFor(EVENT_ADVERTISEMENT_RECEIVED)]);knownPeers=null!=(_d2=null==(_c3=r4.server)?void 0:_c3.knownAdvertisements)?_d2:[]}const message="Rebuild from which peer?"+(settingPeerName?"\n [*] indicates the peer you have selected before.":""),confirm=await getConfirmInstance(),options=[...knownPeers.map((e3=>`${e3.name} ${e3.name==settingPeerName?"[*]":""} (${e3.peerId})`)),"Refresh List","Cancel"],selected=await confirm.askSelectStringDialogue(message,options,{title:"Select a peer to fetch from",defaultAction:"Refresh List"});if(!selected||"Cancel"==selected)return!1;if("Refresh List"==selected){await Promise.race([delay(1e3),eventHub.waitFor(EVENT_ADVERTISEMENT_RECEIVED)]);return this.selectPeer(settingPeerName,r4,logLevel)}const selectedPeerName=selected.split(" ")[0],peerId=null==(_e2=knownPeers.find((e3=>e3.name==selectedPeerName)))?void 0:_e2.peerId;if(!peerId){Logger(`Failed to find peerId for ${selectedPeerName}`,logLevel);return!1}return peerId}async tryUntilSuccess(func,repeat,logLevel){if(!await getConfirmInstance()){Logger("Cannot find confirm instance.",logLevel);return Promise.reject("Cannot find confirm instance.")}let result;for(;!result;)for(let i2=0;i2this.openP2P(logLevel)),10,logLevel);if(!1===r4){Logger("Failed to open P2P connection.",logLevel);return!1}const peerId=await this.selectPeer(peerFrom,r4,logLevel);if(!1===peerId){Logger("Failed to connect peer.",logLevel);return!1}this.env.settings.P2P_RebuildFrom="";Logger(`Fetching from peer ${peerId}.`,logLevel);const rep=await r4.replicateFrom(peerId,showingNotice);if(rep.ok){Logger(`P2P Fetching has been succeed from ${peerId}.`,logLevel);return!0}Logger(`Failed to fetch from peer ${peerId}.`,logLevel);Logger(rep.error,LOG_LEVEL_VERBOSE);return!1}finally{instance3.clearOnSetup()}}closeReplication(){const r4=getReplicatorInstance();null==r4||r4.disconnectFromServer()}tryResetRemoteDatabase(setting){throw new Error("P2P replication does not support database reset.")}tryCreateRemoteDatabase(setting){throw new Error("P2P replication does not support database reset.")}markRemoteLocked(setting,locked,lockByClean){throw new Error("P2P replication does not support database lock.")}markRemoteResolved(setting){Logger("Trying resolving remote-database-lock but P2P replication does not support database lock. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve()}resetRemoteTweakSettings(setting){throw new Error("P2P replication does not support resetting tweaks.")}setPreferredRemoteTweakSettings(setting){Logger("Trying setting tweak values but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve()}fetchRemoteChunks(missingChunks,showResult){return Promise.resolve(!1)}getRemoteStatus(setting){Logger("Trying to get remote status but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve(!1)}getRemotePreferredTweakValues(setting){Logger("Trying to get tweak values but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve(!1)}countCompromisedChunks(){Logger("P2P Replicator cannot count compromised chunks",LOG_LEVEL_VERBOSE);return Promise.resolve(0)}getConnectedDeviceList(setting){Logger("Trying to get connected device list but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve(!1)}constructor(env){super(env);this.env=env}};UNDEFINED=Symbol("undefined");webcrypto2=globalThis.crypto;IV_LENGTH=12;HKDF_SALT_LENGTH=32;PBKDF2_SALT_LENGTH=32;gcmTagLength=128;HKDF_ENCRYPTED_PREFIX="%=";HKDF_SALTED_ENCRYPTED_PREFIX="%$";deriveMasterKey=function memoWithMap(bufferLength,fn,keyFunction){if(bufferLength<=0)throw new Error("Buffer length must be greater than 0");const cache2=new Map,getKey3=args=>args.length>0&&"string"==typeof args[0]?args[0]:JSON.stringify(args,((key3,value)=>void 0===value?UNDEFINED:value));return function(...args){const key3=keyFunction?keyFunction(args):getKey3(args);if(cache2.has(key3)){const hitPromise=cache2.get(key3);cache2.delete(key3);cache2.set(key3,hitPromise);return hitPromise}const newPromise=fn(...args);cache2.set(key3,newPromise);newPromise.catch((()=>{cache2.get(key3)===newPromise&&cache2.delete(key3)}));if(cache2.size>bufferLength){const oldestKey=cache2.keys().next().value;oldestKey&&cache2.delete(oldestKey)}return newPromise}}(10,(async(passphrase,pbkdf2Salt)=>{const binaryPassphrase=writeString(passphrase),keyMaterial=await webcrypto2.subtle.importKey("raw",binaryPassphrase,{name:"PBKDF2",length:256},!1,["deriveKey"]),masterKeyRaw=await webcrypto2.subtle.deriveKey({name:"PBKDF2",salt:pbkdf2Salt,iterations:31e4,hash:"SHA-256"},keyMaterial,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),masterKeyBuffer=await webcrypto2.subtle.exportKey("raw",masterKeyRaw);return await webcrypto2.subtle.importKey("raw",masterKeyBuffer,{name:"HKDF"},!1,["deriveKey"])}),(([passphrase,salt])=>`${passphrase}-${uint8ArrayToHexString(salt)}`));TrysteroReplicator=class{constructor(env){this._onSetup=!1;this.lastSeq="";this._isBroadcasting=!1;this.availableReplicationPairs=new Set;this._replicateToPeers=new Set;this._replicateFromPeers=new Set;this._watchingPeers=new Set;this._env=env;try{if(!this.settings.P2P_Enabled){Logger("P2P is not enabled",LOG_LEVEL_VERBOSE);return}if(!this.settings.P2P_AppID)throw new Error("P2P App ID is not provided. We need it to establish the P2P connection");if(!this.settings.P2P_roomID||!this.settings.P2P_passphrase)throw new Error("Room ID and/or P2P Passphrase have not provided. We need them to establish the P2P connection");if(!this.settings.P2P_relays||0===this.settings.P2P_relays.length)throw new Error("No relay URIs provided. We need them to establish the P2P connection");this.server=new TrysteroReplicatorP2PServer(env)}catch(e3){Logger(e3 instanceof Error?e3.message:"Error while creating TrysteroReplicator",LOG_LEVEL_NOTICE);Logger(e3,LOG_LEVEL_VERBOSE);throw e3}}replicationStatus(){return{}}get settings(){return this._env.settings}get db(){return this._env.db}get deviceName(){return this._env.deviceName}get platform(){return this._env.platform}get confirm(){return this._env.confirm}async close(){var _a8;this.requestStatus();await(null==(_a8=this.server)?void 0:_a8.shutdown());this._replicateFromPeers.clear();this._replicateToPeers.clear();this._watchingPeers.clear();this.requestStatus();this.disconnectFromServer()}async open(){var _a8;this.allowReconnection();await(null==(_a8=this.server)?void 0:_a8.start([this.getCommands()]));this.dispatchStatus();this.settings.P2P_AutoBroadcast&&this.enableBroadcastChanges()}async makeSureOpened(){var _a8;(null==(_a8=this.server)?void 0:_a8.isServing)||await this.open()}get autoSyncPeers(){return this.settings.P2P_AutoSyncPeers.split(",").map((e3=>e3.trim())).filter((e3=>e3.length>0)).map((e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i")))}get autoWatchPeers(){return this.settings.P2P_AutoWatchPeers.split(",").map((e3=>e3.trim())).filter((e3=>e3.length>0)).map((e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i")))}async onNewPeer(peer){const peerName=peer.name;this.autoSyncPeers.some((e3=>e3.test(peerName)))&&await this.sync(peer.peerId);this.autoWatchPeers.some((e3=>e3.test(peerName)))&&this.watchPeer(peer.peerId)}onPeerLeaved(peerId){this.unwatchPeer(peerId)}setOnSetup(){this._onSetup=!0}clearOnSetup(){this._onSetup=!1}async getTweakSettings(fromPeerId){var _a8;const allSettings=JSON.parse(JSON.stringify(this.settings));for(const key3 in allSettings)"encrypt"!=key3&&("passphrase"!=key3?key3 in TweakValuesShouldMatchedTemplate||delete allSettings[key3]:allSettings[key3]=await getHashedStringWithCurrentTime(null!=(_a8=allSettings[key3])?_a8:""));return allSettings}getCommands(){return{reqSync:async fromPeerId=>this._onSetup?{error:new Error("The setup is in progress")}:await this.replicateFrom(fromPeerId),"!reqAuth":async fromPeerId=>{var _a8;return await(null==(_a8=this.server)?void 0:_a8.isAcceptablePeer(fromPeerId))},getTweakSettings:async fromPeerId=>await this.getTweakSettings(fromPeerId),onProgress:async fromPeerId=>{if(this._onSetup)return{error:new Error("The setup is in progress")};await this.onUpdateDatabase(fromPeerId)},getAllConfig:async fromPeerId=>{if(this._onSetup)return{error:new Error("The setup is in progress")};const passphrase=await skipIfDuplicated(`getAllConfig-${fromPeerId}`,(async()=>await this.confirm.askString("Passphrase required",$msg("P2P.AskPassphraseForShare"),"something you only know",!0))),setting={...this.settings,configPassphraseStore:"",encryptedCouchDBConnection:"",encryptedPassphrase:"",pluginSyncExtendedSetting:{}};if(!passphrase||""==passphrase.trim()){Logger("Passphrase is required to transfer the configuration. The peer cannot be decrypt the config\nIf you repeatedly receive unintended configuration-sharing requests, change the RPC channel immediately. It allows you to leave the connection and disappear, while they are trying brute force attack for the decoy on their local.",LOG_LEVEL_NOTICE);return encrypt3(JSON.stringify(Object.fromEntries(Object.entries(setting).map((([key3,value])=>[key3,"******".repeat(Math.ceil(10*Math.random())+2)])))),Math.random().toString(36).substring(7))}return encrypt3(JSON.stringify(setting),passphrase.trim())},onProgressAcknowledged:async(fromPeerId,info3)=>{try{await this.onProgressAcknowledged(fromPeerId,info3)}catch(e3){Logger("Error while acknowledging the progress",LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE)}},getIsBroadcasting:()=>Promise.resolve(this._isBroadcasting),requestBroadcasting:async peerId=>{if(this._onSetup)return{error:new Error("The setup is in progress")};if(this._isBroadcasting)return!0;"yes"===await skipIfDuplicated(`requested-${peerId}`,(async()=>await this.confirm.askYesNoDialog("The remote peer requested to broadcast the changes. Do you want to allow it?",{defaultOption:"No"})))&&this.enableBroadcastChanges()}}}async requestAuthenticate(peerId){if(!this.server)return!1;try{const connection=this.server.getConnection(peerId),selfPeerId=this.server.serverPeerId;return await connection.invokeRemoteObjectFunction("!reqAuth",[selfPeerId],2e4)}catch(e3){Logger("Error while requesting authentication",LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE);return!1}}async selectPeer(){if(!this.server)return!1;const knownPeers=this.server.knownAdvertisements;if(0===knownPeers.length){Logger("No known peers",LOG_LEVEL_VERBOSE);return!1}const peers=[...Object.entries(knownPeers)].map((([peerId,info3])=>`${info3.peerId} : (${info3.name})`)),selectedPeer=await this.confirm.askSelectString("Select a peer to replicate",peers);return!!selectedPeer&&selectedPeer.split(" ")[0]}async requestSynchroniseToPeer(peerId){await delay(25);if(!this.server)throw new Error("Server is not available");const conn=this.server.getConnection(peerId);return await conn.invokeRemoteFunction("reqSync",[this.server.serverPeerId],0)}async requestSynchroniseToAllAvailablePeers(){await scheduleOnceIfDuplicated("requestSynchroniseToAllAvailablePeers",(async()=>{await delay(25);const replications=[...this.availableReplicationPairs].map((peerId=>this.requestSynchroniseToPeer(peerId)));await Promise.all(replications)}))}dispatchStatus(){eventHub.emitEvent(EVENT_P2P_REPLICATOR_STATUS,{isBroadcasting:this._isBroadcasting,replicatingTo:[...this._replicateToPeers],replicatingFrom:[...this._replicateFromPeers],watchingPeers:[...this._watchingPeers]})}requestStatus(){var _a8;this.dispatchStatus();null==(_a8=this.server)||_a8.dispatchConnectionStatus()}disableBroadcastChanges(){var _a8;null==(_a8=this.changes)||_a8.cancel();this._isBroadcasting=!1;this.dispatchStatus()}enableBroadcastChanges(){if(this._isBroadcasting)return;this._isBroadcasting=!0;this.dispatchStatus();if(this.changes){this.changes.cancel();this.changes.removeAllListeners()}this.changes=this.db.changes({since:"now",live:!0,include_docs:!1,selector:{_id:{$gt:"_local/"}}});this.changes.on("change",(async change=>{this.lastSeq=change.seq;await this.notifyProgress()}));const closeChanges=reason=>{var _a8,_b5;if(reason)if(reason instanceof Error){Logger("Error while broadcasting the changes",LOG_LEVEL_INFO);Logger(reason,LOG_LEVEL_VERBOSE)}else{Logger("Broadcasting the changes has been finished",LOG_LEVEL_INFO);Logger(reason,LOG_LEVEL_VERBOSE)}null==(_a8=this.changes)||_a8.cancel();null==(_b5=this.changes)||_b5.removeAllListeners();this.changes=void 0;this._isBroadcasting=!1;this.dispatchStatus()};this.changes.on("error",closeChanges);this.changes.on("complete",closeChanges);fireAndForget((async()=>await this.notifyProgress()))}get knownAdvertisements(){var _a8,_b5;return null!=(_b5=null==(_a8=this.server)?void 0:_a8.knownAdvertisements)?_b5:[]}async sync(remotePeer,showNotice=!1){const from=await this.replicateFrom(remotePeer,showNotice);if(!from||from.error){Logger("Error while replicating from the remote",LOG_LEVEL_VERBOSE);Logger(from.error,LOG_LEVEL_VERBOSE);return from}const logLevel=showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;Logger(`P2P Replication has been requested to ${remotePeer}`,logLevel,"p2p-replicator");const res2=await this.requestSynchroniseToPeer(remotePeer);res2.ok&&Logger("P2P Replication has been done",logLevel,"p2p-replicator");if(res2.error){Logger("Error while syncing from the remote",logLevel,"p2p-replicator");Logger(res2.error,LOG_LEVEL_VERBOSE)}}async replicateTo(){await this.makeSureOpened();const remotePeer=await this.selectPeer();if(remotePeer){Logger(`P2P Replicating to ${remotePeer}`,LOG_LEVEL_INFO);try{if(this._replicateToPeers.has(remotePeer)){Logger(`Replication to ${remotePeer} is already in progress`,LOG_LEVEL_VERBOSE);return}this._replicateToPeers.add(remotePeer);this.dispatchStatus();return await this.requestSynchroniseToPeer(remotePeer)}finally{this._replicateToPeers.delete(remotePeer);this.dispatchStatus()}}else Logger("No peer selected",LOG_LEVEL_VERBOSE)}dispatchReplicationProgress(peerId,info3){this.onReplicationProgress(peerId,info3)}onReplicationProgress(peerId,info3){var _a8,_b5;const stat={peerId,peerName:(null==(_b5=null==(_a8=this.server)?void 0:_a8._knownAdvertisements.get(peerId))?void 0:_b5.name)||peerId,fetching:{max:0,current:0,isActive:!1}};info3&&(stat.fetching={max:info3.maxSeqInBatch,current:info3.lastSeq,isActive:!0});eventHub.emitEvent("p2p-replicator-progress",stat);return!0}onProgressAcknowledged(peerId,info3){var _a8,_b5;const ack={peerId,peerName:(null==(_b5=null==(_a8=this.server)?void 0:_a8._knownAdvertisements.get(peerId))?void 0:_b5.name)||peerId,sending:{max:0,current:0,isActive:!1}};info3&&(ack.sending={max:info3.maxSeqInBatch,current:info3.lastSeq,isActive:!0});eventHub.emitEvent("p2p-replicator-progress",ack);return!0}acknowledgeProgress(remotePeerId,info3){if(!this.server)return;const connection=this.server.getConnection(remotePeerId);try{connection.invokeRemoteFunction("onProgressAcknowledged",[this.server.serverPeerId,info3],500)}catch(ex){Logger("Error while acknowledging the progress",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE)}}async replicateFrom(remotePeer,showNotice=!1,fromStart=!1){const logLevel=showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;Logger(`P2P Requesting Authentication to ${remotePeer}`,logLevel,"p2p-replicator");if(!0!==await this.requestAuthenticate(remotePeer)){Logger("Peer rejected the connection",LOG_LEVEL_NOTICE,"p2p-replicator");return{error:new Error("Peer rejected the connection")}}if(!0!==await this.checkTweakValues(remotePeer)){Logger("Tweak values are not matched",LOG_LEVEL_NOTICE,"p2p-replicator");return{error:new Error("Tweak values are not matched")}}Logger(`P2P Replicating from ${remotePeer}`,logLevel,"p2p-replicator");if(this._replicateFromPeers.has(remotePeer)){Logger(`Replication from ${remotePeer} is already in progress`,LOG_LEVEL_NOTICE,"p2p-replicator");return{error:new Error("Replication from this peer is already in progress")}}this._replicateFromPeers.add(remotePeer);this.dispatchStatus();try{if(!this.server)throw new Error("Server is not available");const remoteDB=this.server.getConnection(remotePeer).remoteDB;await replicateShim(this.db,remoteDB,(async(docs,info3)=>{await this._env.processReplicatedDocs(docs);this.dispatchReplicationProgress(remotePeer,info3);this.acknowledgeProgress(remotePeer,info3);this.notifyProgress(remotePeer);Logger(`P2P Replication from ${remotePeer}\n${info3.lastSeq} / ${info3.maxSeqInBatch})`,logLevel,"p2p-replicator")}),{live:!1,rewind:fromStart});this.acknowledgeProgress(remotePeer,void 0);Logger(`P2P Replication from ${remotePeer} has been completed`,logLevel,"p2p-replicator")}catch(e3){Logger("Error while P2P replicating",logLevel,"p2p-replicator");Logger(e3,LOG_LEVEL_VERBOSE);return{error:e3}}finally{this._replicateFromPeers.delete(remotePeer);this.dispatchStatus()}return{ok:!0}}notifyProgress(excludePeerId){if(this._isBroadcasting&&this.server){for(const peer of this.server.knownAdvertisements){const peerId=peer.peerId;peerId!==excludePeerId&&serialized(`notifyProgress-${peerId}`,(async()=>{var _a8,_b5,_c3;if(await(null==(_a8=this.server)?void 0:_a8.isAcceptablePeer(peerId)))try{return await(null==(_c3=this.server)?void 0:_c3.getConnection(peerId).invokeRemoteFunction("onProgress",[null==(_b5=this.server)?void 0:_b5.serverPeerId],0))}catch(e3){Logger(`Error while notifying progress to ${peerId}`,LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE)}else Logger(`Peer ${peerId} is not acceptable to notify progress`,LOG_LEVEL_VERBOSE)}))}return Promise.resolve()}}async requestBroadcastChanges(peerId){var _a8;return await(null==(_a8=this.server)?void 0:_a8.getConnection(peerId).invokeRemoteFunction("requestBroadcasting",[this.server.serverPeerId],0))}async getRemoteIsBroadcasting(peerId){var _a8;try{return await(null==(_a8=this.server)?void 0:_a8.getConnection(peerId).invokeRemoteFunction("getIsBroadcasting",[],0))}catch(e3){Logger("Error while getting remote is broadcasting",LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE)}}watchPeer(peerId){this._watchingPeers.add(peerId);this.dispatchStatus()}unwatchPeer(peerId){this._watchingPeers.delete(peerId);this.dispatchStatus()}async onUpdateDatabase(fromPeerId){if(this._watchingPeers.has(fromPeerId)){Logger(`Progress notification from ${fromPeerId}`,LOG_LEVEL_VERBOSE);return await serialized(`onProgress-${fromPeerId}`,(async()=>await this.replicateFrom(fromPeerId)))}return!1}async getRemoteConfig(peerId){if(!this.server){Logger("Server is not available",LOG_LEVEL_NOTICE);return!1}const connection=this.server.getConnection(peerId),encryptedConfig=await connection.invokeRemoteFunction("getAllConfig",[this.server.serverPeerId],0),passphrase=await this.confirm.askString("Passphrase required",$msg("P2P.AskPassphraseForDecrypt"),"something you only know",!0);if(!passphrase||""==passphrase.trim()){Logger("Passphrase is required to decrypt the configuration. The config cannot be decrypted",LOG_LEVEL_NOTICE);return!1}try{return JSON.parse(await decrypt3(encryptedConfig,passphrase))}catch(e3){Logger("Error while decrypting the configuration",LOG_LEVEL_NOTICE);Logger(e3,LOG_LEVEL_VERBOSE);return!1}}async checkTweakValues(peerId){var _a8;if(!this.server){Logger("Server is not available",LOG_LEVEL_NOTICE);return!1}const peerPlatform=null==(_a8=this.server.knownAdvertisements.find((e3=>e3.peerId==peerId)))?void 0:_a8.platform;if(null==peerPlatform){Logger("Peer is not found",LOG_LEVEL_NOTICE);return!1}if("pseudo-replicator"===this.platform)return!0;if("pseudo-replicator"===peerPlatform)return!0;const connection=this.server.getConnection(peerId),tweakValues=await connection.invokeRemoteObjectFunction("getTweakSettings",[this.server.serverPeerId],5e3),thisTweakValues=await this.getTweakSettings("");if(!isObjectDifferent(thisTweakValues,tweakValues))return!0;if(thisTweakValues.passphrase!==tweakValues.passphrase){Logger("Replication cancelled: Passphrase is not matched\nCannot replicate to a remote database until the problem is resolved.",LOG_LEVEL_NOTICE);return!1}Logger("Some mismatched configuration have been detected... Please check settings for efficient replication.",LOG_LEVEL_NOTICE);return!0}async replicateFromCommand(showResult=!1){null===await skipIfDuplicated("replicateFromCommand",(async()=>{var _a8;const logLevel=showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;if(!this._env.settings.P2P_Enabled){Logger($msg("P2P.NotEnabled"),logLevel);return Promise.resolve(!1)}const peers=this._env.settings.P2P_SyncOnReplication.split(",").map((e3=>e3.trim())).filter((e3=>e3));if(0==peers.length){Logger($msg("P2P.NoAutoSyncPeers"),logLevel);return Promise.resolve(!1)}for(const peer of peers){const peerId=null==(_a8=this.knownAdvertisements.find((e3=>e3.name==peer)))?void 0:_a8.peerId;if(peerId){Logger($msg("P2P.SyncStartedWith",{name:peer}),logLevel);await this.sync(peerId,showResult)}else Logger($msg("P2P.SeemsOffline",{name:peer}),logLevel)}Logger($msg("P2P.SyncCompleted"),logLevel);return Promise.resolve(!0)}))&&Logger($msg("P2P.SyncAlreadyRunning"),LOG_LEVEL_NOTICE)}disconnectFromServer(){const connections=getRelaySockets(),sockets=Object.entries(connections);pauseRelayReconnection();sockets.forEach((([,s2])=>{s2.close();s2.onclose=()=>{var _a8;null==(_a8=this.server)||_a8.dispatchConnectionStatus()}}));this.pauseServe()}async pauseServe(){var _a8,_b5;await(null==(_a8=this.server)?void 0:_a8.close());await(null==(_b5=this.server)?void 0:_b5.dispatchConnectionStatus())}allowReconnection(){resumeRelayReconnection()}};P2PLogCollector=class{constructor(){this.p2pReplicationResult=new Map;this.p2pReplicationLine=reactiveSource("");eventHub.onEvent(EVENT_ADVERTISEMENT_RECEIVED,(data=>{this.p2pReplicationResult.set(data.peerId,{peerId:data.peerId,peerName:data.name,fetching:{current:0,max:0,isActive:!1},sending:{current:0,max:0,isActive:!1}});this.updateP2PReplicationLine()}));eventHub.onEvent("p2p-connected",(()=>{this.p2pReplicationResult.clear();this.updateP2PReplicationLine()}));eventHub.onEvent("p2p-disconnected",(()=>{this.p2pReplicationResult.clear();this.updateP2PReplicationLine()}));eventHub.onEvent(EVENT_DEVICE_LEAVED,(peerId=>{this.p2pReplicationResult.delete(peerId);this.updateP2PReplicationLine()}));eventHub.onEvent("p2p-replicator-progress",(data=>{const prev=this.p2pReplicationResult.get(data.peerId)||{peerId:data.peerId,peerName:data.peerName,fetching:{current:0,max:0,isActive:!1},sending:{current:0,max:0,isActive:!1}};"fetching"in data&&(data.fetching.isActive?prev.fetching=data.fetching:prev.fetching.isActive=!1);"sending"in data&&(data.sending.isActive?prev.sending=data.sending:prev.sending.isActive=!1);this.p2pReplicationResult.set(data.peerId,prev);this.updateP2PReplicationLine()}))}updateP2PReplicationLine(){const p2pReplicationResultX=[...this.p2pReplicationResult.values()].sort(((a2,b3)=>a2.peerId.localeCompare(b3.peerId))),renderProgress=(current,max3)=>current==max3?`${current}`:`${current} (${max3})`,line=p2pReplicationResultX.map((e3=>`${e3.fetching.isActive||e3.sending.isActive?"⚡":"💤"} ${e3.peerName} ↑ ${renderProgress(e3.sending.current,e3.sending.max)} ↓ ${renderProgress(e3.fetching.current,e3.fetching.max)} `)).join("\n");this.p2pReplicationLine.value=line}};recentLogEntries=reactiveSource([]);(function setGlobalLogFunction(logger2){_logger=logger2})(((message,level,key3)=>{const entry={message:message instanceof Error?new LiveSyncError("[Error Logged]: "+message.message,{cause:message}):message,level,key:key3};recentLogEntries.value=[...recentLogEntries.value,entry]}));recentLogs=[];ModuleLog=class extends AbstractObsidianModule{constructor(){super(...arguments);this.registerView=this.plugin.registerView.bind(this.plugin);this.statusLog=reactiveSource("");this.activeFileStatus=reactiveSource("");this.notifies={};this.p2pLogCollector=new P2PLogCollector;this.nextFrameQueue=void 0;this.logLines=[]}observeForLogs(){function padLeftSpComputed(numI,mark){const formatted=reactiveSource("");let timer,maxLen=1;numI.onChanged((numX=>{const num=numX.value,numLen=`${Math.abs(num)}`.length+1;maxLen=maxLen{formatted.value="";maxLen=1}),3e3));formatted.value=` ${mark}${`${padSpaces}${num}`.slice(-maxLen)}`}));return computed((()=>formatted.value))}const padSpaces=" ".repeat(10),labelReplication=padLeftSpComputed(this.core.replicationResultCount,"📥"),labelDBCount=padLeftSpComputed(this.core.databaseQueueCount,"📄"),labelStorageCount=padLeftSpComputed(this.core.storageApplyingCount,"💾"),labelChunkCount=padLeftSpComputed(collectingChunks,"🧩"),labelPluginScanCount=padLeftSpComputed(pluginScanningCount,"🔌"),labelConflictProcessCount=padLeftSpComputed(this.core.conflictProcessQueueCount,"🔩"),labelHiddenFilesCount=padLeftSpComputed(reactive((()=>hiddenFilesEventCount.value-hiddenFilesProcessingCount.value)),"⚙️"),queueCountLabelX=reactive((()=>`${labelReplication()}${labelDBCount()}${labelStorageCount()}${labelChunkCount()}${labelPluginScanCount()}${labelHiddenFilesCount()}${labelConflictProcessCount()}`)),queueCountLabel=()=>queueCountLabelX.value,requestingStatLabel=computed((()=>0!=this.core.requestCount.value-this.core.responseCount.value?"📲 ":"")),replicationStatLabel=computed((()=>{const e3=this.core.replicationStat.value,sent=e3.sent,arrived=e3.arrived,maxPullSeq=e3.maxPullSeq,maxPushSeq=e3.maxPushSeq,lastSyncPullSeq=e3.lastSyncPullSeq,lastSyncPushSeq=e3.lastSyncPushSeq;let pushLast="",pullLast="",w2="";const labels={CONNECTED:"⚡",JOURNAL_SEND:"📦↑",JOURNAL_RECEIVE:"📦↓"};switch(e3.syncStatus){case"CLOSED":case"COMPLETED":case"NOT_CONNECTED":w2="⏹";break;case"STARTED":w2="🌀";break;case"PAUSED":w2="💤";break;case"CONNECTED":case"JOURNAL_SEND":case"JOURNAL_RECEIVE":w2=labels[e3.syncStatus]||"⚡";pushLast=0==lastSyncPushSeq?"":lastSyncPushSeq>=maxPushSeq?" (LIVE)":` (${maxPushSeq-lastSyncPushSeq})`;pullLast=0==lastSyncPullSeq?"":lastSyncPullSeq>=maxPullSeq?" (LIVE)":` (${maxPullSeq-lastSyncPullSeq})`;break;case"ERRORED":w2="⚠";break;default:w2="?"}return{w:w2,sent,pushLast,arrived,pullLast}})),labelProc=padLeftSpComputed(this.core.processing,"⏳"),labelPend=padLeftSpComputed(this.core.totalQueued,"🛫"),labelInBatchDelay=padLeftSpComputed(this.core.batched,"📬"),waitingLabel=computed((()=>`${labelProc()}${labelPend()}${labelInBatchDelay()}`)),statusLineLabel=computed((()=>{const{w:w2,sent,pushLast,arrived,pullLast}=replicationStatLabel(),queued=queueCountLabel(),waiting=waitingLabel(),networkActivity=requestingStatLabel(),p2p=this.p2pLogCollector.p2pReplicationLine.value;return{message:`${networkActivity}Sync: ${w2} ↑ ${sent}${pushLast} ↓ ${arrived}${pullLast}${waiting}${queued}${""==p2p?"":"\n"+p2p}`}})),statusBarLabels=reactive((()=>{const scheduleMessage=this.services.appLifecycle.isReloadingScheduled()?"WARNING! RESTARTING OBSIDIAN IS SCHEDULED!\n":"",{message}=statusLineLabel(),fileStatus=this.activeFileStatus.value,status=scheduleMessage+this.statusLog.value;return{message:`${message}${fileStatus&&this.settings.hideFileWarningNotice?" ⛔ SKIP":""}`,status}}));this.statusBarLabels=statusBarLabels;const applyToDisplay=throttle((label2=>{this.applyStatusBarText()}),20);statusBarLabels.onChanged((label2=>applyToDisplay(label2.value)));this.activeFileStatus.onChanged((()=>this.updateMessageArea()))}_everyOnload(){eventHub.onEvent("leaf-active-changed",(()=>this.onActiveLeafChange()));eventHub.onceEvent(EVENT_LAYOUT_READY,(()=>this.onActiveLeafChange()));eventHub.onEvent("on-unresolved-error",(()=>this.updateMessageArea()));return Promise.resolve(!0)}adjustStatusDivPosition(){const mdv=this.app.workspace.getMostRecentLeaf();if(mdv&&this.statusDiv){this.statusDiv.remove();const container=mdv.view.containerEl;container.insertBefore(this.statusDiv,container.lastChild)}}async getActiveFileStatus(){const reason=[],reasonWarn=[],thisFile=this.app.workspace.getActiveFile();if(!thisFile)return"";if(isValidPath(thisFile.path)){const validOnWindows=isValidFilenameInWidows(thisFile.name),validOnDarwin=isValidFilenameInDarwin(thisFile.name),validOnAndroid=isValidFilenameInAndroid(thisFile.name),labels=[];validOnWindows||labels.push("🪟");validOnDarwin||labels.push("🍎");validOnAndroid||labels.push("🤖");labels.length>0&&reasonWarn.push("Some platforms may be unable to process this file correctly: "+labels.join(" "))}else reason.push("This file has an invalid path under the current settings");this.services.setting.shouldCheckCaseInsensitively()&&this.core.storageAccess.getFiles().map((e3=>e3.path)).filter((e3=>e3.toLowerCase()==thisFile.path.toLowerCase())).length>1&&reason.push("There are multiple files with the same name (case-insensitive match)");await this.services.vault.isTargetFile(thisFile.path)||reason.push("This file is ignored by the ignore rules");this.services.vault.isFileSizeTooLarge(thisFile.stat.size)&&reason.push("This file size exceeds the configured limit");return[reason.length>0?"Not synchronised: "+reason.join(", "):"",reasonWarn.length>0?"Warning: "+reasonWarn.join(", "):""].filter((e3=>e3)).join("\n")}async setFileStatus(){const fileStatus=await this.getActiveFileStatus();this.activeFileStatus.value=fileStatus}async updateMessageArea(){if(this.messageArea){const messageLines=[],fileStatus=this.activeFileStatus.value;fileStatus&&!this.settings.hideFileWarningNotice&&messageLines.push(fileStatus);const messages=(await this.services.appLifecycle.getUnresolvedMessages()).flat().filter((e3=>e3));messageLines.push(...messages);this.messageArea.innerText=messageLines.map((e3=>`⚠️ ${e3}`)).join("\n")}}onActiveLeafChange(){fireAndForget((async()=>{this.adjustStatusDivPosition();await this.setFileStatus()}))}applyStatusBarText(){if(!this.nextFrameQueue){this.nextFrameQueue=requestAnimationFrame((()=>{var _a8,_b5,_c3;this.nextFrameQueue=void 0;const{message,status}=this.statusBarLabels.value,newMsg=message;let newLog=(null==(_a8=this.settings)?void 0:_a8.showOnlyIconsOnEditor)?"":status;const moduleTagEnd=newLog.indexOf("] ");-1!=moduleTagEnd&&(newLog=newLog.substring(moduleTagEnd+2));null==(_b5=this.statusBar)||_b5.setText(newMsg.split("\n")[0]);if((null==(_c3=this.settings)?void 0:_c3.showStatusOnEditor)&&this.statusDiv){if(this.settings.showLongerLogInsideEditor){const now3=(new Date).getTime();this.logLines=this.logLines.filter((e3=>e3.ttl>now3));const minimumNext=this.logLines.reduce(((a2,b3)=>a20&&setTimeout((()=>this.applyStatusBarText()),minimumNext-now3);const recentLogs2=this.logLines.map((e3=>e3.message)).reverse().join("\n");isDirty("recentLogs",recentLogs2)&&(this.logHistory.innerText=recentLogs2)}isDirty("newMsg",newMsg)&&(this.statusLine.innerText=newMsg);isDirty("newLog",newLog)&&(this.logMessage.innerText=newLog)}}));scheduleTask("log-hide",3e3,(()=>{this.statusLog.value=""}))}}_allStartOnUnload(){var _a8;this.statusDiv&&this.statusDiv.remove();null==(_a8=document.querySelectorAll(".livesync-status"))||_a8.forEach((e3=>e3.remove()));return Promise.resolve(!0)}_everyOnloadStart(){(0,import_obsidian.addIcon)("view-log",'\n \n \n ');this.addRibbonIcon("view-log",$msg("moduleLog.showLog"),(()=>{this.services.API.showWindow("log-log")})).addClass("livesync-ribbon-showlog");this.addCommand({id:"view-log",name:"Show log",callback:()=>{this.services.API.showWindow("log-log")}});this.registerView("log-log",(leaf=>new LogPaneView(leaf,this.plugin)));return Promise.resolve(!0)}_everyOnloadAfterLoadSettings(){var _a8;recentLogEntries.onChanged((entries2=>{if(0===entries2.value.length)return;const newEntries=[...entries2.value];recentLogEntries.value=[];newEntries.forEach((e3=>this.__addLog(e3.message,e3.level,e3.key)))}));eventHub.onEvent("file-renamed",(data=>{this.setFileStatus()}));document.querySelectorAll(".livesync-status").forEach((e3=>e3.remove()));this.observeForLogs();this.statusDiv=this.app.workspace.containerEl.createDiv({cls:"livesync-status"});this.statusLine=this.statusDiv.createDiv({cls:"livesync-status-statusline"});this.messageArea=this.statusDiv.createDiv({cls:"livesync-status-messagearea"});this.logMessage=this.statusDiv.createDiv({cls:"livesync-status-logmessage"});this.logHistory=this.statusDiv.createDiv({cls:"livesync-status-loghistory"});eventHub.onEvent(EVENT_LAYOUT_READY,(()=>this.adjustStatusDivPosition()));if(null==(_a8=this.settings)?void 0:_a8.showStatusOnStatusbar){this.statusBar=this.core.addStatusBarItem();this.statusBar.addClass("syncstatusbar")}this.adjustStatusDivPosition();return Promise.resolve(!0)}writeLogToTheFile(now3,vaultName,newMessage){fireAndForget((()=>serialized("writeLog",(async()=>{const time=now3.toISOString().split("T")[0],logDate=`${PREFIXMD_LOGFILE}${time}.md`;await this.core.storageAccess.isExists(normalizePath(logDate))||await this.core.storageAccess.appendHiddenFile(normalizePath(logDate),"```\n");await this.core.storageAccess.appendHiddenFile(normalizePath(logDate),vaultName+":"+newMessage+"\n")}))))}__addLog(message,level=LOG_LEVEL_INFO,key3=""){var _a8,_b5,_c3,_d2,_e2,_f;if(level==LOG_LEVEL_DEBUG)return;if(level<=LOG_LEVEL_INFO&&this.settings&&this.settings.lessInformationInLog)return;if(this.settings&&!this.settings.showVerboseLog&&level==LOG_LEVEL_VERBOSE)return;const vaultName=this.services.vault.getVaultName(),now3=new Date,timestamp=now3.toLocaleString();let errorInfo="";if(message instanceof Error)if(message instanceof LiveSyncError)errorInfo=`${null==(_a8=message.cause)?void 0:_a8.name}:${null==(_b5=message.cause)?void 0:_b5.message}\n[StackTrace]: ${message.stack}\n[CausedBy]: ${null==(_c3=message.cause)?void 0:_c3.stack}`;else{const thisStack=(new Error).stack;errorInfo=`${message.name}:${message.message}\n[StackTrace]: ${message.stack}\n[LogCallStack]: ${thisStack}`}const messageContent="string"==typeof message?message:message instanceof Error?`${errorInfo}`:JSON.stringify(message,null,2),newMessage=timestamp+"->"+messageContent;message instanceof Error?console.error(vaultName+":"+newMessage):level>=LOG_LEVEL_INFO?console.log(vaultName+":"+newMessage):console.debug(vaultName+":"+newMessage);(null==(_d2=this.settings)?void 0:_d2.showOnlyIconsOnEditor)||(this.statusLog.value=messageContent);(null==(_e2=this.settings)?void 0:_e2.writeLogToTheFile)&&this.writeLogToTheFile(now3,vaultName,newMessage);addLog(newMessage);this.logLines.push({ttl:now3.getTime()+3e3,message:newMessage});if(level>=LOG_LEVEL_NOTICE){key3||(key3=messageContent);if(key3 in this.notifies){(null==(_f=this.notifies[key3].notice.noticeEl)?void 0:_f.isShown())||(this.notifies[key3].notice=new import_obsidian.Notice(messageContent,0));cancelTask(`notify-${key3}`);if(key3==messageContent){this.notifies[key3].count++;this.notifies[key3].notice.setMessage(`(${this.notifies[key3].count}):${messageContent}`)}else this.notifies[key3].notice.setMessage(`${messageContent}`)}else{const notify=new import_obsidian.Notice(messageContent,0);this.notifies[key3]={count:0,notice:notify}}const timeout=5e3;key3.startsWith("keepalive-")&&-1===messageContent.indexOf("  ")||scheduleTask(`notify-${key3}`,timeout,(()=>{const notify=this.notifies[key3].notice;delete this.notifies[key3];try{notify.hide()}catch(e3){}}))}}onBindFunction(core,services){services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this));services.appLifecycle.handleOnSettingLoaded(this._everyOnloadAfterLoadSettings.bind(this));services.appLifecycle.handleOnLoaded(this._everyOnload.bind(this));services.appLifecycle.handleOnBeforeUnload(this._allStartOnUnload.bind(this))}};noticeIndex=0;LiveSyncCommands=class{constructor(plugin3){this._log=(msg,level=LOG_LEVEL_INFO,key3)=>{"string"==typeof msg&&level!==LOG_LEVEL_NOTICE&&(msg=`[${this.constructor.name}]  ${msg}`);Logger(msg,level,key3)};this._verbose=(msg,key3)=>{this._log(msg,LOG_LEVEL_VERBOSE,key3)};this._info=(msg,key3)=>{this._log(msg,LOG_LEVEL_INFO,key3)};this._notice=(msg,key3)=>{this._log(msg,LOG_LEVEL_NOTICE,key3)};this._progress=(prefix="",level=LOG_LEVEL_NOTICE)=>{const key3="keepalive-progress-"+noticeIndex++;return{log:msg=>{this._log(prefix+msg,level,key3)},once:msg=>{this._log(prefix+msg,level)},done:(msg="Done")=>{this._log(prefix+msg+"  ",level,key3)}}};this._debug=(msg,key3)=>{this._log(msg,LOG_LEVEL_VERBOSE,key3)};this.plugin=plugin3;this.onBindFunction(plugin3,plugin3.services);__$checkInstanceBinding(this)}get app(){return this.plugin.app}get settings(){return this.plugin.settings}get localDatabase(){return this.plugin.localDatabase}get services(){return this.plugin.services}async path2id(filename,prefix){return await this.services.path.path2id(filename,prefix)}getPath(entry){return getPath2(entry)}_isMainReady(){return this.plugin.services.appLifecycle.isReady()}_isMainSuspended(){return this.services.appLifecycle.isSuspended()}_isDatabaseReady(){return this.services.database.isDatabaseReady()}onBindFunction(core,services){}};root_12=from_html('
Just for a minute, please!
',1);root_4=from_html('');root_6=from_html(" ");root_5=from_html('
');root_10=from_html('');root_2=from_html('
',1);root2=from_html('

',1);$$css2={hash:"svelte-1ah3y1j",code:".spacer.svelte-1ah3y1j {flex-grow:1;}.infos.svelte-1ah3y1j {display:flex;justify-content:space-between;margin:4px 0.5em;}.deleted.svelte-1ah3y1j {text-decoration:line-through;}.svelte-1ah3y1j {box-sizing:border-box;}.scroller.svelte-1ah3y1j {display:flex;flex-direction:column;overflow-y:scroll;max-height:60vh;user-select:text;-webkit-user-select:text;}.json-source.svelte-1ah3y1j {white-space:pre;height:auto;overflow:auto;min-height:var(--font-ui-medium);flex-grow:1;}"};delegate(["click"]);JsonResolveModal=class extends import_obsidian.Modal{constructor(app,filename,docs,callback,nameA,nameB,defaultSelect,keepOrder,hideLocal,title="Conflicted Setting"){super(app);this.title="Conflicted Setting";this.callback=callback;this.filename=filename;this.docs=docs;this.nameA=nameA||"";this.nameB=nameB||"";this.keepOrder=keepOrder||!1;this.defaultSelect=defaultSelect||"";this.title=title;this.hideLocal=null!=hideLocal&&hideLocal;waitForSignal(`cancel-internal-conflict:${filename}`).then((()=>this.close()))}async UICallback(keepRev,mergedStr){this.callback&&await this.callback(keepRev,mergedStr);this.close();this.callback=void 0}onOpen(){const{contentEl}=this;this.titleEl.setText(this.title);contentEl.empty();null==this.component&&(this.component=mount(JsonResolvePane,{target:contentEl,props:{docs:this.docs,filename:this.filename,nameA:this.nameA,nameB:this.nameB,defaultSelect:this.defaultSelect,keepOrder:this.keepOrder,hideLocal:this.hideLocal,callback:(keepRev,mergedStr)=>this.UICallback(keepRev,mergedStr)}}))}onClose(){const{contentEl}=this;contentEl.empty();null!=this.callback&&this.callback(void 0);if(null!=this.component){unmount(this.component);this.component=void 0}}};PaceMaker=class{constructor(interval){Object.defineProperty(this,"_interval",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_minimumNext",{enumerable:!0,configurable:!0,writable:!0,value:void 0});this._interval=interval}changeInterval(interval){if(interval!==this._interval){this._interval=interval;this._minimumNext=void 0}}mark(now3=Date.now()){void 0===this._minimumNext?this._minimumNext=now3+this._interval:this._minimumNext=Math.max(this._minimumNext+this._interval,now3+this._interval)}_getPaced(doMark){const now3=Date.now(),prevMinimum=this._minimumNext;doMark&&this.mark(now3);if(void 0!==prevMinimum){const shouldWait=prevMinimum-now3;if(shouldWait>0)return new Promise((resolve=>setTimeout((()=>{resolve()}),shouldWait)))}return Promise.resolve()}get paced(){return this._getPaced(!0)}get pacedSinceMark(){return this._getPaced(!1)}};NOT_AVAILABLE=Symbol("NotAvailable");READY_PICK_SIGNAL=Symbol("lockReady");READY_POST_SIGNAL=Symbol("lockFull");DISPOSE_ERROR="Inbox has been disposed";SyncInbox=class{constructor(capacity){Object.defineProperty(this,"_capacity",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_buffer",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_writeIdx",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_readIdx",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_wrapAroundCount",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_isDisposed",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_disposedPromise",{enumerable:!0,configurable:!0,writable:!0,value:promiseWithResolvers()});if(capacity<=0)throw new Error("Capacity must be greater than 0");this._capacity=~~capacity;let i2=256;for(;i20}get isDisposed(){return this._isDisposed}get onDisposed(){return this._disposedPromise.promise}__fixIdx(){if(this._readIdx>this._wrapAroundCount){this._readIdx=this._readIdx&this._wrapAroundCount;this._writeIdx=this._writeIdx&this._wrapAroundCount}}get state(){return{processed:this._writeIdx,size:this.size,free:this.free,isFull:this.isFull,isRunningOut:this.isRunningOut,isReady:this.isReady}}dispose(){this._readIdx=0;this._writeIdx=0;this._capacity=0;this._buffer.length=1;this._buffer[0]=void 0;this._wrapAroundCount=1;this._isDisposed=!0;this._disposedPromise.resolve()}__onPosted(){this.__onProgress()}__onPicked(){this.__onProgress()}__onProgress(){this.__fixIdx()}tryPost(item){if(this.isFull)return!1;this._writeIdx++;this._buffer[this._writeIdx&this._wrapAroundCount]=item;this.__onPosted();return!0}tryCancelPost(){if(0==this.size)return NOT_AVAILABLE;const pointingIdx=this._writeIdx&this._wrapAroundCount,item=this._buffer[pointingIdx];this._buffer[pointingIdx]=void 0;this._writeIdx--;this.__fixIdx();return item}tryPick(){if(this.isRunningOut)return NOT_AVAILABLE;this._readIdx++;const pointingIdx=this._readIdx&this._wrapAroundCount,item=this._buffer[pointingIdx];this._buffer[pointingIdx]=void 0;this.__onPicked();return item}};Inbox=class extends SyncInbox{constructor(capacity){super(capacity);Object.defineProperty(this,"_lockFull",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_lockReady",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _waitForFree(){for(;0==this.free;){this._lockFull||(this._lockFull=promiseWithResolvers());return await this._lockFull.promise}return READY_POST_SIGNAL}_notifyFree(){var _a8;null==(_a8=this._lockFull)||_a8.resolve(READY_POST_SIGNAL);this._lockFull=void 0}async _waitForReady(){for(;this.isRunningOut;){this._lockReady||(this._lockReady=promiseWithResolvers());return await this._lockReady.promise}return READY_PICK_SIGNAL}_notifyReady(){var _a8;null==(_a8=this._lockReady)||_a8.resolve(READY_PICK_SIGNAL);this._lockReady=void 0}__onPosted(){super.__onPosted();this._notifyReady()}__onPicked(){super.__onPicked();this._notifyFree()}dispose(){super.dispose();if(this._lockFull){this._lockFull.reject(new Error(DISPOSE_ERROR));this._lockFull=void 0}if(this._lockReady){this._lockReady.reject(new Error(DISPOSE_ERROR));this._lockReady=void 0}}async post(item,timeout,cancellation){if(this._isDisposed)throw new Error(DISPOSE_ERROR);do{if(cancellation&&cancellation.length>0&&await isSomeResolved(cancellation))return!1;if(this.tryPost(item))return!0;let p4;const tasks3=[this._waitForFree(),...timeout?[(p4=cancelableDelay(timeout)).promise]:[],...cancellation||[]],r4=await Promise.race(tasks3);null==p4||p4.cancel();if(r4!==READY_POST_SIGNAL)return!1}while(!this._isDisposed);return!1}async pick(timeout,cancellation){if(this._isDisposed)throw new Error(DISPOSE_ERROR);do{if(cancellation&&cancellation.length>0&&await isSomeResolved(cancellation))return NOT_AVAILABLE;const item=this.tryPick();if(item!==NOT_AVAILABLE)return item;let p4;const tasks3=[this._waitForReady(),...timeout?[(p4=cancelableDelay(timeout)).promise]:[],...cancellation||[]],r4=await Promise.race(tasks3);null==p4||p4.cancel();if(r4!==READY_PICK_SIGNAL)return NOT_AVAILABLE}while(!this.isDisposed);return NOT_AVAILABLE}};(function(ClerkState2){ClerkState2.IDLE="idle";ClerkState2.DISPOSED="disposed";ClerkState2.WORKING="working";ClerkState2.STALLED="not-started"})(ClerkState||(ClerkState={}));SENTINEL_FINISHED=Symbol("finished");SENTINEL_FLUSH=Symbol("flush");ClerkBase=class{get state(){return this._state}constructor(params){Object.defineProperty(this,"_inbox",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_name",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_state",{enumerable:!0,configurable:!0,writable:!0,value:ClerkState.STALLED});Object.defineProperty(this,"_totalProcessed",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_totalSuccess",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_totalFailed",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_totalFetched",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_disposed",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_disposePromise",{enumerable:!0,configurable:!0,writable:!0,value:promiseWithResolvers()});Object.defineProperty(this,"_onProgress",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const{name,assigned}=params;this._inbox=assigned;this._name=null!=name?name:this.constructor.name;yieldMicrotask().then((()=>this._mainLoop()));this._inbox.onDisposed.then((()=>this.dispose()))}get stateDetail(){const hasStarted=0!=this._totalFetched,hasAnyUnprocessed=this._totalFetched!=this._totalProcessed,isBusy=0!=this._inbox.state.size||hasAnyUnprocessed;return{totalFetched:this._totalFetched,inboxDetail:this._inbox.state,totalProcessed:this._totalProcessed,state:this._state,hasStarted,isBusy}}onProgress(){var _a8;try{null==(_a8=this._onProgress)||_a8.call(this,this.stateDetail)}catch(e3){}}setOnProgress(callback){this._onProgress=callback}async _mainLoop(){var _a8;this._state=ClerkState.STALLED;this.onProgress();await yieldMicrotask();do{this._state=ClerkState.IDLE;this.onProgress();try{const item=await this._inbox.pick(void 0,[this._disposePromise.promise]);if(item===SENTINEL_FLUSH||item===SENTINEL_FINISHED){await(null==(_a8=this._onSentinel)?void 0:_a8.call(this,item));continue}if(item===NOT_AVAILABLE){if(this._inbox.isDisposed){this._state=ClerkState.DISPOSED;break}continue}this._totalFetched++;this._state=ClerkState.WORKING;this.onProgress();try{await this._onPick(item);this._totalSuccess++}catch(ex){this._totalFailed++;Logger("Error on processing job on clerk");Logger(ex,LOG_LEVEL_VERBOSE)}this._totalProcessed++;this.onProgress()}catch(ex){if(ex instanceof Error&&ex.message!==DISPOSE_ERROR){Logger("Error on picking item on clerk");Logger(ex,LOG_LEVEL_VERBOSE)}}}while(!this._inbox.isDisposed&&!this._disposed);this._state=ClerkState.IDLE;this._disposed?this._state=ClerkState.DISPOSED:this.dispose();this.onProgress()}dispose(){this._disposePromise.resolve();this._disposed=!0;this._state=ClerkState.DISPOSED}get onDisposed(){return this._disposePromise.promise}};Clerk=class extends ClerkBase{async _onPick(item){return await this._job(item)}constructor(params){super(params);Object.defineProperty(this,"_job",{enumerable:!0,configurable:!0,writable:!0,value:void 0});this._job=params.job}};ClerkGroup=class{constructor(params){var _a8;Object.defineProperty(this,"_clerks",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_nameBase",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_assigned",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_hiredCount",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_job",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_instantiate",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const{assigned,job,instantiate,initialMemberCount}=params;this._assigned=assigned;this._instantiate=instantiate;this._job=job;this._nameBase=null!=(_a8=params.name)?_a8:this.constructor.name;this._clerks=[];for(let i2=0;i20)for(let i2=0;i2clerk.stateDetail)),totalFetched=states.reduce(((acc,state2)=>acc+state2.totalFetched),0),totalProcessed=states.reduce(((acc,state2)=>acc+state2.totalProcessed),0),isBusy=states.some((state2=>state2.isBusy)),hasStarted=states.some((state2=>state2.hasStarted));return{totalFetched,totalProcessed,inboxDetail:this._assigned.state,isBusy,hasStarted,state:ClerkState.IDLE}}get freeMembers(){return this._clerks.filter((clerk=>clerk.state===ClerkState.IDLE)).length}dispose(){this._clerks.forEach((clerk=>clerk.dispose()))}};Notifier=class{constructor(){Object.defineProperty(this,"_p",{enumerable:!0,configurable:!0,writable:!0,value:promiseWithResolvers()});Object.defineProperty(this,"isUsed",{enumerable:!0,configurable:!0,writable:!0,value:!1})}notify(){if(this.isUsed){this.isUsed=!1;this._p.promise.finally(noop);this._p.resolve();this._p=promiseWithResolvers()}}get nextNotify(){this.isUsed=!0;return this._p.promise}};allRunningProcessors=new Set([]);QueueProcessor=class{get nowProcessing(){return this.processingEntities}get totalNowProcessing(){var _a8;return this.nowProcessing+((null==(_a8=this._pipeTo)?void 0:_a8.totalNowProcessing)||0)}get remaining(){return this._queue.length+this.processingEntities+this.waitingEntries}get totalRemaining(){var _a8;return this.remaining+((null==(_a8=this._pipeTo)?void 0:_a8.totalRemaining)||0)}updateStatus(setFunc){setFunc();this._updateReactiveSource()}suspend(){this._isSuspended=!0;this._hub.emitEvent("tickSuspended");return this}resume(){this._isSuspended=!1;this._hub.emitEvent("tickResumed");return this}resumePipeLine(){var _a8;null==(_a8=this._pipeTo)||_a8.resumePipeLine();this.resume();return this}startPipeline(){this.root.resumePipeLine();return this}get root(){return void 0===this._root?this:this._root}_initEventHub(){this._hub.onEvent("tickResumed",(()=>this._run()))}async _waitFor(keys3,timeout){const items=keys3.map((key3=>{const p4=promiseWithResolvers(),releaser=this._hub.onEvent(key3,(()=>{p4.resolve(key3)}));p4.promise=p4.promise.finally((()=>{releaser()}));return p4})),timer=timeout?cancelableDelay(timeout):void 0,tasks3=[...items.map((i2=>i2.promise)),...timer?[timer.promise]:[]],ret=await Promise.race(tasks3);items.forEach((i2=>i2.resolve(void 0)));return ret}_triggerTickDelay(){this._delayTimer||(this._delayTimer=setTimeout((()=>{this._hub.emitEvent("tickDelayTimeout");this._delayTimer=void 0})))}_clearTickDelay(){if(this._delayTimer){clearTimeout(this._delayTimer);this._delayTimer=void 0}}_notifyIfIdle(){return this.root.__notifyIfIdle()}__notifyIfIdle(){0!=this._processCount||this._canCollectBatch()||this._hub.emitEvent("idle");this._pipeTo&&this._pipeTo.__notifyIfIdle()}_onTick(){if(this._canCollectBatch())if(this._nextProcessNeedsImmediate){this._clearTickDelay();this._nextProcessNeedsImmediate=!1;this._hub.emitEvent("tickImmediate")}else if(this._queue.length>this.yieldThreshold){this._clearTickDelay();this._hub.emitEvent("yielded")}else{if(!this.delay){this._clearTickDelay();this._hub.emitEvent("tickDelayTimeout");return}this._delayTimer||this._triggerTickDelay()}else{this._notifyIfIdle();this._clearTickDelay();this._hub.emitEvent("tickEmpty")}}constructor(processor,params,items,enqueueProcessor){var _a8,_b5,_c3,_d2,_e2,_f,_g;Object.defineProperty(this,"_queue",{enumerable:!0,configurable:!0,writable:!0,value:[]});Object.defineProperty(this,"_processor",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_enqueueProcessor",{enumerable:!0,configurable:!0,writable:!0,value:(queue2,entity)=>(queue2.push(entity),queue2)});Object.defineProperty(this,"_isSuspended",{enumerable:!0,configurable:!0,writable:!0,value:!0});Object.defineProperty(this,"_nextProcessNeedsImmediate",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_pipeTo",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_root",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_remainingReactiveSource",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_totalRemainingReactiveSource",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_processingEntitiesReactiveSource",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_keepResultUntilDownstreamConnected",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_keptResult",{enumerable:!0,configurable:!0,writable:!0,value:[]});Object.defineProperty(this,"_runOnUpdateBatch",{enumerable:!0,configurable:!0,writable:!0,value:()=>{}});Object.defineProperty(this,"concurrentLimit",{enumerable:!0,configurable:!0,writable:!0,value:1});Object.defineProperty(this,"batchSize",{enumerable:!0,configurable:!0,writable:!0,value:1});Object.defineProperty(this,"yieldThreshold",{enumerable:!0,configurable:!0,writable:!0,value:1});Object.defineProperty(this,"delay",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"maintainDelay",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"interval",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"processingEntities",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"waitingEntries",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_hub",{enumerable:!0,configurable:!0,writable:!0,value:new EventHub});Object.defineProperty(this,"_delayTimer",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_intervalPaceMaker",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_processingBatches",{enumerable:!0,configurable:!0,writable:!0,value:new Set});Object.defineProperty(this,"addProcessingBatch",{enumerable:!0,configurable:!0,writable:!0,value:value=>{const r4=this._processingBatches.add(value);this._updateBatchProcessStatus();return r4}});Object.defineProperty(this,"deleteProcessingBatch",{enumerable:!0,configurable:!0,writable:!0,value:value=>{const r4=this._processingBatches.delete(value);this._updateBatchProcessStatus();return r4}});Object.defineProperty(this,"_processing",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_collected",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_clerks",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_processCount",{enumerable:!0,configurable:!0,writable:!0,value:0});this._root=this;this._processor=processor;this.batchSize=null!=(_a8=null==params?void 0:params.batchSize)?_a8:1;this.yieldThreshold=null!=(_c3=null!=(_b5=null==params?void 0:params.yieldThreshold)?_b5:null==params?void 0:params.batchSize)?_c3:0;this.concurrentLimit=null!=(_d2=null==params?void 0:params.concurrentLimit)?_d2:1;this.delay=null!=(_e2=null==params?void 0:params.delay)?_e2:0;this.maintainDelay=null!=(_f=null==params?void 0:params.maintainDelay)&&_f;this.interval=null!=(_g=null==params?void 0:params.interval)?_g:0;(null==params?void 0:params.keepResultUntilDownstreamConnected)&&(this._keepResultUntilDownstreamConnected=params.keepResultUntilDownstreamConnected);(null==params?void 0:params.remainingReactiveSource)&&(this._remainingReactiveSource=null==params?void 0:params.remainingReactiveSource);(null==params?void 0:params.totalRemainingReactiveSource)&&(this._totalRemainingReactiveSource=null==params?void 0:params.totalRemainingReactiveSource);(null==params?void 0:params.processingEntitiesReactiveSource)&&(this._processingEntitiesReactiveSource=null==params?void 0:params.processingEntitiesReactiveSource);void 0!==(null==params?void 0:params.suspended)&&(this._isSuspended=null==params?void 0:params.suspended);enqueueProcessor&&this.replaceEnqueueProcessor(enqueueProcessor);void 0!==(null==params?void 0:params.pipeTo)&&this.pipeTo(params.pipeTo);this._intervalPaceMaker=new PaceMaker(this.interval);items&&this.enqueueAll(items);allRunningProcessors.add(this);this._initClerks();this._initEventHub();this.resume()}replaceEnqueueProcessor(processor){this._enqueueProcessor=processor;return this}modifyQueue(processor){this._queue=processor(this._queue);this._onTick()}clearQueue(){this._queue=[];this._onTick()}onUpdateProgress(proc){this._runOnUpdateBatch=proc;return this}pipeTo(pipeTo){this._pipeTo=pipeTo;this._pipeTo._root=this.root;if(this._keptResult.length>0){const temp=[...this._keptResult];this._keptResult=[];this._pipeTo.enqueueAll(temp)}return pipeTo}isIdle(){return this._isIdle()&&(!this._pipeTo||this._pipeTo.isIdle())}_isIdle(){return 0==this.totalRemaining}async _waitForIdle(){if(this._isSuspended)return Promise.resolve();if(this._isIdle())return Promise.resolve();do{const r4=await this._waitFor(["tickEmpty","tick","tickSuspended","suspended","idle"]);if("tickSuspended"===r4)break;if("suspended"==r4)break;if("tickEmpty"==r4)break;if("idle"==r4)break}while(!this._isIdle());return Promise.resolve()}idleDetectors(){const thisPromise=this._waitForIdle();return this._pipeTo?[thisPromise,...this._pipeTo.idleDetectors()]:[thisPromise]}get isSuspended(){var _a8;return this._isSuspended||(null==(_a8=this._pipeTo)?void 0:_a8.isSuspended)||!1}_updateReactiveSource(){this.root.updateReactiveSource()}updateReactiveSource(){this._pipeTo&&this._pipeTo.updateReactiveSource();this._remainingReactiveSource&&(this._remainingReactiveSource.value=this.remaining);this._totalRemainingReactiveSource&&(this._totalRemainingReactiveSource.value=this.totalRemaining);this._processingEntitiesReactiveSource&&(this._processingEntitiesReactiveSource.value=this.nowProcessing)}_updateBatchProcessStatus(){this._updateReactiveSource();this._runOnUpdateBatch()}_collectBatch(){return this._queue.splice(0,this.batchSize)}_canCollectBatch(){return 0!==this._queue.length}enqueue(entity){this._queue=this._enqueueProcessor(this._queue,entity);this._updateBatchProcessStatus();this._onTick();return this}enqueueAll(entities){let queue2=this._queue;for(const v2 of entities)queue2=this._enqueueProcessor(queue2,v2);this._queue=queue2;this._updateBatchProcessStatus();this._onTick();return this}requestNextFlush(){this._nextProcessNeedsImmediate=!0;this._onTick()}async _waitForSuspended(){}flush(){if(this._isSuspended)return Promise.resolve(!1);this.requestNextFlush();return this.waitForAllDownstream()}async waitForAllDownstream(timeout){const baseTasks=[];timeout&&baseTasks.push(delay(timeout,RESULT_TIMED_OUT));do{const idleTasks=this.idleDetectors(),tasks3=[...baseTasks,Promise.all(idleTasks)];if(await Promise.race(tasks3)===RESULT_TIMED_OUT)return!1}while(!this.isIdle());return!0}waitForAllProcessed(timeout){this.root.startPipeline();return this.root.waitForAllDownstream(timeout)}async waitForAllDoneAndTerminate(timeout){this.root.startPipeline();const r4=await this.root.waitForAllDownstream(timeout);this.terminateAll();return r4}async _runProcessor(items){const ret=await this._processor(items);ret&&(this._pipeTo?this._pipeTo.enqueueAll(ret):this._keepResultUntilDownstreamConnected&&this._keptResult.push(...ret))}async*pump(){do{const ticked=await this._waitFor(["tickImmediate","yielded","tickSuspended","tickDelayTimeout","tickSuspended"]);L2:do{const items=this._collectBatch();if(0==items.length)break L2;yield items}while(this._canCollectBatch());if("tickSuspended"==ticked)break}while(!this._isSuspended)}_initClerks(){this._collected=new Inbox(2*this.concurrentLimit);this._clerks=new ClerkGroup({assigned:this._collected,job:async items=>{const batchLength=items.length;this.updateStatus((()=>{this.processingEntities+=batchLength;this.waitingEntries-=batchLength}));await this._intervalPaceMaker.paced;this._processCount++;try{await this._runProcessor(items)}catch(ex){Logger("Processor error!");Logger(ex,LOG_LEVEL_VERBOSE)}this.updateStatus((()=>{this.processingEntities-=batchLength}));this._processCount--;0==this._processCount&&this._notifyIfIdle()},initialMemberCount:this.concurrentLimit,instantiate:params=>new Clerk(params)})}async _process(){if(!this._processing&&!this._isSuspended)try{this._processing=!0;do{const batchPump=this.pump();for await(const batch of batchPump){if(!batch||0===batch.length){this._hub.emitEvent("tickEmpty");continue}const batchLength=batch.length;this.updateStatus((()=>{this.waitingEntries+=batchLength}));await this._collected.post(batch)}}while(!this._isSuspended);this._hub.emitEvent("suspended")}finally{this._processing=!1}}_run(){this._isSuspended||this._processing||fireAndForget((()=>this._process()))}terminateAll(){this.root.terminate()}terminate(){if(this._pipeTo){this._pipeTo.terminate();this._pipeTo=void 0}this._isSuspended=!0;this._enqueueProcessor=()=>[];this._processor=()=>Promise.resolve([]);this.clearQueue();this._hub.emitEvent("tickSuspended");this._hub.emitEvent("tickSuspended");this._hub.emitEvent("tickSuspended");this._collected.dispose();this._clerks.dispose();this._queue.length=0;allRunningProcessors.delete(this)}};HiddenFileSync=class extends LiveSyncCommands{constructor(){super(...arguments);this.periodicInternalFileScanProcessor=new PeriodicProcessor(this.plugin,(async()=>this.isThisModuleEnabled()&&this._isDatabaseReady()&&await this.scanAllStorageChanges(!1)));this.semaphore=Semaphore(10);this.conflictResolutionProcessor=new QueueProcessor((async paths=>{var _a8,_b5,_c3;const path2=paths[0];sendSignal(`cancel-internal-conflict:${path2}`);try{const id=await this.path2id(path2,ICHeader),doc=await this.localDatabase.getRaw(id,{conflicts:!0});if(void 0===doc._conflicts)return[];if(0==doc._conflicts.length)return[];this._log(`Hidden file conflicted:${path2}`);const conflicts=doc._conflicts.sort(((a2,b3)=>Number(a2.split("-")[0])-Number(b3.split("-")[0]))),revA=doc._rev,revB=conflicts[0];if(path2.endsWith(".json")){const conflictedRev=conflicts[0],conflictedRevNo=Number(conflictedRev.split("-")[0]),commonBase=null!=(_c3=null==(_b5=null==(_a8=(await this.localDatabase.getRaw(id,{revs_info:!0}))._revs_info)?void 0:_a8.filter((e3=>"available"==e3.status&&Number(e3.rev.split("-")[0])r4.test(stripAllPrefixes(path2))))){this._log(`Overwrite rule applied for conflicted hidden file: ${path2}`,LOG_LEVEL_INFO);await this.resolveByNewerEntry(id,path2,doc,revA,revB);return[]}return[{path:path2,revA,revB,id,doc}]}await this.resolveByNewerEntry(id,path2,doc,revA,revB);return[]}catch(ex){this._log(`Failed to resolve conflict (Hidden): ${path2}`);this._log(ex,LOG_LEVEL_VERBOSE);return[]}}),{suspended:!1,batchSize:1,concurrentLimit:5,delay:10,keepResultUntilDownstreamConnected:!0,yieldThreshold:10,pipeTo:new QueueProcessor((async results=>{const{id,doc,path:path2,revA,revB}=results[0],prefixedPath=addPrefix(path2,ICHeader),docAMerge=await this.localDatabase.getDBEntry(prefixedPath,{rev:revA}),docBMerge=await this.localDatabase.getDBEntry(prefixedPath,{rev:revB});0==docAMerge||0==docBMerge?await this.resolveByNewerEntry(id,path2,doc,revA,revB):await this.showJSONMergeDialogAndMerge(docAMerge,docBMerge)&&this.conflictResolutionProcessor.enqueue(path2)}),{suspended:!1,batchSize:1,concurrentLimit:1,delay:10,keepResultUntilDownstreamConnected:!1,yieldThreshold:10})});this.cacheFileRegExps=new Map;this.cacheCustomisationSyncIgnoredFiles=new Map;this.queuedNotificationFiles=new Set}isThisModuleEnabled(){return this.plugin.settings.syncInternalFiles}get kvDB(){return this.plugin.kvDB}getConflictedDoc(path2,rev3){return this.plugin.managers.conflictManager.getConflictedDoc(path2,rev3)}onunload(){var _a8;null==(_a8=this.periodicInternalFileScanProcessor)||_a8.disable()}onload(){this.plugin.addCommand({id:"livesync-sync-internal",name:"(re)initialise hidden files between storage and database",callback:()=>{this.isReady()&&this.initialiseInternalFileSync("safe",!0)}});this.plugin.addCommand({id:"livesync-scaninternal-storage",name:"Scan hidden file changes on the storage",callback:()=>{this.isReady()&&this.scanAllStorageChanges(!0)}});this.plugin.addCommand({id:"livesync-scaninternal-database",name:"Scan hidden file changes on the local database",callback:()=>{this.isReady()&&this.scanAllDatabaseChanges(!0)}});this.plugin.addCommand({id:"livesync-internal-scan-offline-changes",name:"Scan and apply all offline hidden-file changes",callback:()=>{this.isReady()&&this.applyOfflineChanges(!0)}});eventHub.onEvent(EVENT_SETTING_SAVED,(()=>{this.updateSettingCache()}))}async _everyOnDatabaseInitialized(showNotice){this._fileInfoLastProcessed=await autosaveCache(this.kvDB,"hidden-file-lastProcessed");this._databaseInfoLastProcessed=await autosaveCache(this.kvDB,"hidden-file-lastProcessed-database");this._fileInfoLastKnown=await autosaveCache(this.kvDB,"hidden-file-lastKnown");if(this.isThisModuleEnabled())if(0==this._fileInfoLastProcessed.size&&0==this._fileInfoLastProcessed.size){this._log("No cache found. Performing startup scan.",LOG_LEVEL_VERBOSE);await this.performStartupScan(!0)}else await this.performStartupScan(showNotice);return!0}async _everyBeforeReplicate(showNotice){this.isThisModuleEnabled()&&this._isDatabaseReady()&&this.settings.syncInternalFilesBeforeReplication&&!this.settings.watchInternalFileChanges&&await this.scanAllStorageChanges(showNotice);return!0}_everyOnloadAfterLoadSettings(){this.updateSettingCache();return Promise.resolve(!0)}updateSettingCache(){this.cacheCustomisationSyncIgnoredFiles.clear();this.cacheFileRegExps.clear()}isReady(){return!!this._isMainReady&&!this._isMainSuspended()&&!!this.isThisModuleEnabled()}async performStartupScan(showNotice){await this.applyOfflineChanges(showNotice)}async _everyOnResumeProcess(){var _a8;null==(_a8=this.periodicInternalFileScanProcessor)||_a8.disable();if(this._isMainSuspended())return!0;this.isThisModuleEnabled()&&await this.performStartupScan(!1);this.periodicInternalFileScanProcessor.enable(this.isThisModuleEnabled()&&this.settings.syncInternalFilesInterval?1e3*this.settings.syncInternalFilesInterval:0);return!0}_everyRealizeSettingSyncMode(){var _a8;null==(_a8=this.periodicInternalFileScanProcessor)||_a8.disable();if(this._isMainSuspended())return Promise.resolve(!0);if(!this.services.appLifecycle.isReady())return Promise.resolve(!0);this.periodicInternalFileScanProcessor.enable(this.isThisModuleEnabled()&&this.settings.syncInternalFilesInterval?1e3*this.settings.syncInternalFilesInterval:0);this.cacheFileRegExps.clear();return Promise.resolve(!0)}async _anyProcessOptionalFileEvent(path2){return this.isReady()&&await this.trackStorageFileModification(path2)||!1}_anyGetOptionalConflictCheckMethod(path2){if(isInternalMetadata(path2)){this.queueConflictCheck(path2);return Promise.resolve(!0)}return Promise.resolve(!1)}async _anyProcessOptionalSyncFiles(doc){if(isInternalMetadata(doc._id)){if(this.isThisModuleEnabled()){const filename=getPath2(doc);if(await this.services.vault.isTargetFile(filename)){await this.processReplicationResult(doc);return!0}this._log(`Skipped (Not target:${filename})`,LOG_LEVEL_VERBOSE);return!1}return!0}return!1}async loadFileWithInfo(path2){var _a8,_b5;const stat=await this.plugin.storageAccess.statHidden(path2);if(!stat)return{name:null!=(_a8=path2.split("/").pop())?_a8:"",path:path2,stat:{size:0,mtime:0,ctime:0,type:"file"},isInternal:!0,deleted:!0,body:createBlob(new Uint8Array(0))};const content=await this.plugin.storageAccess.readHiddenFileAuto(path2);return{name:null!=(_b5=path2.split("/").pop())?_b5:"",path:path2,stat,isInternal:!0,deleted:!1,body:createBlob(content)}}statToKey(stat){var _a8,_b5;return`${null!=(_a8=null==stat?void 0:stat.mtime)?_a8:0}-${null!=(_b5=null==stat?void 0:stat.size)?_b5:0}`}docToKey(doc){return`${doc.mtime}-${doc.size}-${doc._rev}-${doc._deleted||doc.deleted?"-0":"-1"}`}async fileToStatKey(file,stat=null){stat||(stat=await this.plugin.storageAccess.statHidden(file));return this.statToKey(stat)}updateLastProcessedFile(file,keySrc){const key3="string"==typeof keySrc?keySrc:this.statToKey(keySrc),splitted=key3.split("-");"0"!=splitted[0]&&this._fileInfoLastKnown.set(file,Number(splitted[0]));this._fileInfoLastProcessed.set(file,key3)}async updateLastProcessedAsActualFile(file,stat){stat||(stat=await this.plugin.storageAccess.statHidden(file));this._fileInfoLastProcessed.set(file,this.statToKey(stat))}resetLastProcessedFile(targetFiles){if(targetFiles)for(const key3 of targetFiles)this._fileInfoLastProcessed.delete(key3);else{this._log("Delete all processed mark.",LOG_LEVEL_VERBOSE);this._fileInfoLastProcessed.clear()}}getLastProcessedFileMTime(file){return this._fileInfoLastKnown.get(file)||0}getLastProcessedFileKey(file){return this._fileInfoLastProcessed.get(file)}getLastProcessedDatabaseKey(file){return this._databaseInfoLastProcessed.get(file)}updateLastProcessedDatabase(file,keySrc){const key3="string"==typeof keySrc?keySrc:this.docToKey(keySrc);this._databaseInfoLastProcessed.set(file,key3)}updateLastProcessed(path2,db,stat){this.updateLastProcessedDatabase(path2,db);this.updateLastProcessedFile(path2,this.statToKey(stat));const dbMTime=getComparingMTime(db),storageMTime=getComparingMTime(stat);0==dbMTime||0==storageMTime?unmarkChanges(path2):markChangesAreSame(path2,getComparingMTime(db),getComparingMTime(stat))}updateLastProcessedDeletion(path2,db){unmarkChanges(path2);db&&this.updateLastProcessedDatabase(path2,db);this.updateLastProcessedFile(path2,this.statToKey(null))}async ensureDir(path2){await this.plugin.storageAccess.isExistsIncludeHidden(path2)||await this.plugin.storageAccess.ensureDir(path2)}async writeFile(path2,data,opt){await this.plugin.storageAccess.writeHiddenFileAuto(path2,data,opt);return await this.plugin.storageAccess.statHidden(path2)}async __removeFile(path2){try{if(!await this.plugin.storageAccess.isExistsIncludeHidden(path2))return"ALREADY";if(await this.plugin.storageAccess.removeHidden(path2))return"OK"}catch(ex){this._log(`Failed to remove file:${path2}`);this._log(ex,LOG_LEVEL_VERBOSE)}return!1}async triggerEvent(path2){try{await this.plugin.storageAccess.triggerHiddenFile(path2)}catch(ex){this._log("Failed to call internal API(reconcileInternalFile)",LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}}async updateLastProcessedAsActualDatabase(file,doc){const dbPath=addPrefix(file,ICHeader);doc||(doc=await this.localDatabase.getDBEntryMeta(dbPath));doc&&this._databaseInfoLastProcessed.set(file,this.docToKey(doc))}resetLastProcessedDatabase(targetFiles){if(targetFiles)for(const key3 of targetFiles)this._databaseInfoLastProcessed.delete(key3);else{this._log("Delete all processed mark.",LOG_LEVEL_VERBOSE);this._databaseInfoLastProcessed.clear()}}async adoptCurrentStorageFilesAsProcessed(targetFiles){const allFiles=await this.scanInternalFileNames(),files=targetFiles?allFiles.filter((e3=>targetFiles.some((t3=>-1!==e3.indexOf(t3))))):allFiles;for(const file of files)await this.updateLastProcessedAsActualFile(file)}async adoptCurrentDatabaseFilesAsProcessed(targetFiles){const allFiles=await this.getAllDatabaseFiles(),files=targetFiles?allFiles.filter((e3=>targetFiles.some((t3=>-1!==e3.path.indexOf(t3))))):allFiles;for(const file of files){const path2=stripAllPrefixes(this.getPath(file));await this.updateLastProcessedAsActualDatabase(path2,file)}}async serializedForEvent(file,fn){hiddenFilesEventCount.value++;const rel=await this.semaphore.acquire();try{return await serialized(`hidden-file-event:${file}`,(async()=>{hiddenFilesProcessingCount.value++;try{return await fn()}finally{hiddenFilesProcessingCount.value--}}))}finally{rel();hiddenFilesEventCount.value--}}async useStorageFiles(files,showNotice=!1,onlyNew=!1){return await this.trackScannedStorageChanges(files,showNotice,onlyNew,!0)}async trackScannedStorageChanges(processFiles,showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeleted=!0){const logLevel=getLogLevel(showNotice),p4=this._progress("[⚙ Storage -> DB ]\n",logLevel),notifyProgress=onlyInNTimes(100,(progress=>p4.log(`${progress}/${processFiles.length}`))),processes=processFiles.map((async(file,i2)=>{try{await this.trackStorageFileModification(file,onlyNew,forceWriteAll,includeDeleted);notifyProgress()}catch(ex){p4.once(`Failed to process storage change file:${file}`);this._log(ex,LOG_LEVEL_VERBOSE)}}));await Promise.all(processes);p4.done()}async scanAllStorageChanges(showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeleted=!0){return await skipIfDuplicated("scanAllStorageChanges",(async()=>{const logLevel=getLogLevel(showNotice),p4=this._progress("[⚙ Scanning Storage -> DB ]\n",logLevel);p4.log("Scanning storage files...");const knownNames=[...this._fileInfoLastProcessed.keys()],existNames=await this.scanInternalFileNames(),files=new Set([...knownNames,...existNames]);this._log(`Known/Exist ${knownNames.length}/${existNames.length}, Totally ${files.size} files.`,LOG_LEVEL_VERBOSE);const taskNameAndMeta=[...files].map((async e3=>[e3,await this.plugin.storageAccess.statHidden(e3)])),processFiles=(await Promise.all(taskNameAndMeta)).filter((([path2,stat])=>!!forceWriteAll||this.getLastProcessedFileKey(path2)!=this.statToKey(stat))).map((([path2,stat])=>path2)),staticsMessage=`[Storage hidden file statics]\nKnown files: ${knownNames.length}\nActual files: ${existNames.length}\nAll files: ${files.size}\nOffline Changed files: ${processFiles.length}`;p4.once(staticsMessage);await this.trackScannedStorageChanges(processFiles,showNotice,onlyNew,forceWriteAll,includeDeleted);p4.done()}))}async trackStorageFileModification(path2,onlyNew=!1,forceWrite=!1,includeDeleted=!0){if(!await this.isTargetFile(path2)){this._log(`Storage file tracking: Hidden file skipped: ${path2} is filtered out by the defined patterns.`,LOG_LEVEL_VERBOSE);return!1}try{return await this.serializedForEvent(path2,(async()=>{let stat=await this.plugin.storageAccess.statHidden(path2);if(null!=stat&&"file"!=stat.type)return!1;const key3=await this.fileToStatKey(path2,stat),lastKey=this.getLastProcessedFileKey(path2);if(lastKey==key3){this._log(`${path2} Already processed.`,LOG_LEVEL_DEBUG);return!0}const cache2=await this.loadFileWithInfo(path2);if(getComparingMTime(cache2.stat)!=getComparingMTime(stat)){this._log(`Hidden file:${path2} is changed.`,LOG_LEVEL_VERBOSE);stat=cache2.stat}this.updateLastProcessedFile(path2,stat);const lastIsNotFound=!lastKey||lastKey.endsWith("-0-0"),nowIsNotFound=cache2.deleted,type=lastIsNotFound&&nowIsNotFound?"invalid":nowIsNotFound?"delete":"modified";if("invalid"==type)return!1;const storageMTimeActual=getComparingMTime(stat),storageMTime=0==storageMTimeActual?this.getLastProcessedFileMTime(path2):storageMTimeActual;if(onlyNew){const prefixedFileName=addPrefix(path2,ICHeader),filesOnDB=await this.localDatabase.getDBEntryMeta(prefixedFileName);if(compareMTime(storageMTime,getComparingMTime(filesOnDB,includeDeleted))!=TARGET_IS_NEW){this._log(`Hidden file:${path2} is not new.`,LOG_LEVEL_VERBOSE);filesOnDB&&stat&&this.updateLastProcessed(path2,filesOnDB,stat);return!0}}if("delete"==type){this._log(`Deletion detected: ${path2}`);return await this.deleteInternalFileOnDatabase(path2,forceWrite)}if("modified"==type){this._log(`Modification detected:${path2}`,LOG_LEVEL_VERBOSE);const result=await this.storeInternalFileToDatabase(cache2,forceWrite),resultText=void 0===result?"Nothing changed":result?"Updated":"Failed";this._log(`${resultText}: ${path2} ${resultText}`,LOG_LEVEL_VERBOSE);return result}}))}catch(ex){this._log(`Failed to process hidden file:${path2}`);this._log(ex,LOG_LEVEL_VERBOSE)}return!0}queueConflictCheck(path2){this.conflictResolutionProcessor.enqueue(path2)}async resolveConflictOnInternalFiles(){const conflicted=this.localDatabase.findEntries(ICHeader,"i;",{conflicts:!0});this.conflictResolutionProcessor.suspend();try{for await(const doc of conflicted)"_conflicts"in doc&&isInternalMetadata(doc._id)&&this.conflictResolutionProcessor.enqueue(doc.path)}catch(ex){this._log("something went wrong on resolving all conflicted internal files");this._log(ex,LOG_LEVEL_VERBOSE)}await this.conflictResolutionProcessor.startPipeline().waitForAllProcessed()}async resolveByNewerEntry(id,path2,currentDoc,currentRev,conflictedRev){var _a8;const conflictedDoc=await this.localDatabase.getRaw(id,{rev:conflictedRev}),delRev=getComparingMTime(currentDoc,!0){this._log("Opening data-merging dialog",LOG_LEVEL_VERBOSE);const docs=[docA,docB],strippedPath=stripAllPrefixes(docA.path),storageFilePath=strippedPath,storeFilePath=strippedPath,displayFilename=`${storeFilePath}`;new JsonResolveModal(this.app,storageFilePath,[docA,docB],(async(keep,result)=>{var _a8,_b5;try{let needFlush=!1;if(!result&&!keep){this._log(`Skipped merging: ${displayFilename}`);res2(!1);return}if(result||keep)for(const doc of docs)if(doc._rev!=keep&&await this.localDatabase.deleteDBEntry(this.getPath(doc),{rev:doc._rev})){this._log(`Conflicted revision has been deleted: ${displayFilename}`);needFlush=!0}if(!keep&&result){await this.plugin.storageAccess.isExistsIncludeHidden(storageFilePath)||await this.plugin.storageAccess.ensureDir(storageFilePath);const stat=await this.writeFile(storageFilePath,result);if(!stat)throw new Error("Stat failed");const mtime=getComparingMTime(stat);await this.storeInternalFileToDatabase({path:storageFilePath,mtime,ctime:null!=(_a8=null==stat?void 0:stat.ctime)?_a8:mtime,size:null!=(_b5=null==stat?void 0:stat.size)?_b5:0},!0);await this.triggerEvent(storageFilePath);this._log(`STORAGE <-- DB:${displayFilename}: written (hidden,merged)`)}needFlush&&(await this.extractInternalFileFromDatabase(storeFilePath,!1)?this._log(`STORAGE --\x3e DB:${displayFilename}: extracted (hidden,merged)`):this._log(`STORAGE --\x3e DB:${displayFilename}: extracted (hidden,merged) Failed`));res2(!0)}catch(ex){this._log("Could not merge conflicted json");this._log(ex,LOG_LEVEL_VERBOSE);res2(!1)}})).open()}))}async processReplicationResult(doc){const info3=getDocProps(doc),path2=info3.path,headerLine=`Tracking DB ${info3.path} (${info3.revDisplay}) :`,ret=await this.trackDatabaseFileModification(path2,headerLine);this._log(`${headerLine} Done: ${info3.shortenedId})`,LOG_LEVEL_VERBOSE);return ret}parseRegExpSettings(){const regExpKey=`${this.plugin.settings.syncInternalFilesTargetPatterns}||${this.plugin.settings.syncInternalFilesIgnorePatterns}`;let ignoreFilter,targetFilter;if(this.cacheFileRegExps.has(regExpKey)){const cached=this.cacheFileRegExps.get(regExpKey);ignoreFilter=cached[1];targetFilter=cached[0]}else{ignoreFilter=getFileRegExp(this.plugin.settings,"syncInternalFilesIgnorePatterns");targetFilter=getFileRegExp(this.plugin.settings,"syncInternalFilesTargetPatterns");this.cacheFileRegExps.clear();this.cacheFileRegExps.set(regExpKey,[targetFilter,ignoreFilter])}return{ignoreFilter,targetFilter}}isTargetFileInPatterns(path2){const{ignoreFilter,targetFilter}=this.parseRegExpSettings();if(ignoreFilter&&ignoreFilter.length>0)for(const pattern of ignoreFilter)if(pattern.test(path2))return!1;if(targetFilter&&targetFilter.length>0){for(const pattern of targetFilter)if(pattern.test(path2))return!0;return!1}return!0}getCustomisationSynchronizationIgnoredFiles(){const configDir=this.plugin.app.vault.configDir,key3=JSON.stringify(this.settings.pluginSyncExtendedSetting)+`||${this.settings.usePluginSync}||${configDir}`;if(this.cacheCustomisationSyncIgnoredFiles.has(key3))return this.cacheCustomisationSyncIgnoredFiles.get(key3);this.cacheCustomisationSyncIgnoredFiles.clear();const synchronisedInConfigSync=this.settings.usePluginSync?Object.values(this.settings.pluginSyncExtendedSetting).filter((e3=>e3.mode==MODE_SELECTIVE||e3.mode==MODE_PAUSED)).map((e3=>e3.files)).flat().map((e3=>`${configDir}/${e3}`.toLowerCase())):[];this.cacheCustomisationSyncIgnoredFiles.set(key3,synchronisedInConfigSync);return synchronisedInConfigSync}isNotIgnoredByCustomisationSync(path2){return!this.getCustomisationSynchronizationIgnoredFiles().some((e3=>path2.startsWith(e3)))}isHiddenFileSyncHandlingPath(path2){return path2.startsWith(".")&&!path2.startsWith(".trash")}async isTargetFile(path2){return!!(this.isTargetFileInPatterns(path2)&&this.isNotIgnoredByCustomisationSync(path2)&&this.isHiddenFileSyncHandlingPath(path2))&&!await this.services.vault.isIgnoredByIgnoreFile(path2)}async trackScannedDatabaseChange(processFiles,showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeletion=!0){const logLevel=getLogLevel(showNotice),p4=this._progress("[⚙ DB -> Storage ]\n",logLevel),notifyProgress=onlyInNTimes(100,(progress=>p4.log(`${progress}/${processFiles.length}`))),processes=processFiles.map((async file=>{try{const path2=stripAllPrefixes(this.getPath(file));await this.isTargetFile(path2)?await this.trackDatabaseFileModification(path2,"[Hidden file scan]",!forceWriteAll,onlyNew,file,includeDeletion):this._log(`Database file tracking: Hidden file skipped: ${path2} is filtered out by the defined patterns.`,LOG_LEVEL_VERBOSE);notifyProgress()}catch(ex){this._log(`Failed to process storage change file:${file}`,logLevel);this._log(ex,LOG_LEVEL_VERBOSE)}}));await Promise.all(processes);p4.done()}async applyOfflineChanges(showNotice){const logLevel=getLogLevel(showNotice);return await serialized("applyOfflineChanges",(async()=>{const p4=this._progress("[⚙ Apply untracked changes ]\n",logLevel);this._log("Track changes.",logLevel);p4.log("Enumerating local files...");const currentStorageFiles=await this.scanInternalFileNames();p4.log("Enumerating database files...");const currentDatabaseFiles=await this.getAllDatabaseFiles(),allDatabaseMap=Object.fromEntries(currentDatabaseFiles.map((e3=>[stripAllPrefixes(getPath2(e3)),e3]))),currentDatabaseFileNames=[...Object.keys(allDatabaseMap)],untrackedLocal=currentStorageFiles.filter((e3=>!this._fileInfoLastProcessed.has(e3))),untrackedDatabase=currentDatabaseFileNames.filter((e3=>!this._databaseInfoLastProcessed.has(e3))),bothUntracked=untrackedLocal.filter((e3=>-1!==untrackedDatabase.indexOf(e3)));p4.log("Applying untracked changes...");const stat=`Tracking statics:\nLocal files: ${currentStorageFiles.length}\nDatabase files: ${currentDatabaseFileNames.length}\nUntracked local files: ${untrackedLocal.length}\nUntracked database files: ${untrackedDatabase.length}\nCommon untracked files: ${bothUntracked.length}`;p4.once(stat);const semaphores2=Semaphore(10),notifyProgress=onlyInNTimes(25,(progress=>p4.log(`${progress}/${bothUntracked.length}`))),allProcesses=bothUntracked.map((async file=>{notifyProgress();const rel=await semaphores2.acquire();try{const fileStat=await this.plugin.storageAccess.statHidden(file);if(null==fileStat){this._log(`Unexpected error: Failed to stat file during applyOfflineChange :${file}`);return}const dbInfo=allDatabaseMap[file];if(dbInfo.deleted||dbInfo._deleted)return;const diff=compareMTime(getComparingMTime(fileStat),getComparingMTime(dbInfo));diff==BASE_IS_NEW?await this.trackStorageFileModification(file,!0):diff==TARGET_IS_NEW?await this.trackDatabaseFileModification(file,"[Apply]",!0,!0,dbInfo):diff==EVEN&&this.updateLastProcessed(file,dbInfo,fileStat)}finally{rel()}}));await Promise.all(allProcesses);await this.scanAllStorageChanges(showNotice);await this.scanAllDatabaseChanges(showNotice);p4.done()}))}async scanAllDatabaseChanges(showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeletion=!0){return await skipIfDuplicated("scanAllDatabaseChanges",(async()=>{const databaseFiles=await this.getAllDatabaseFiles(),files=databaseFiles.filter((e3=>{const doc=e3,key3=this.docToKey(doc),path2=stripAllPrefixes(this.getPath(doc));return this.getLastProcessedDatabaseKey(path2)!=key3})),logLevel=getLogLevel(showNotice),staticsMessage=`[Database hidden file statics]\nAll files: ${databaseFiles.length}\nOffline Changed files: ${files.length}`;this._log(staticsMessage,logLevel,"scan-changes");return await this.trackScannedDatabaseChange(files,showNotice,onlyNew,forceWriteAll,includeDeletion)}))}async useDatabaseFiles(files,showNotice=!1,onlyNew=!1){const logLevel=getLogLevel(showNotice),p4=this._progress("[⚙ Scanning DB -> Storage ]\n",logLevel);p4.log("Scanning database files...");const notifyProgress=onlyInNTimes(25,(progress=>p4.log(`${progress}/${files.length}`))),processFiles=files.map((async file=>{try{const path2=stripAllPrefixes(this.getPath(file));await this.trackDatabaseFileModification(path2,"[Scanning]",!0,onlyNew,file);notifyProgress()}catch(ex){this._log(`Failed to process database changes:${file}`);this._log(ex,LOG_LEVEL_VERBOSE)}}));await Promise.all(processFiles);p4.done();return!0}async trackDatabaseFileModification(path2,headerLine,preventDoubleProcess=!1,onlyNew=!1,meta=!1,includeDeletion=!0){return await this.serializedForEvent(path2,(async()=>{try{const prefixedPath=addPrefix(path2,ICHeader),docMeta=meta||await this.localDatabase.getDBEntryMeta(prefixedPath,{conflicts:!0},!0);if(!1===docMeta){this._log(`${headerLine}: Failed to read detail of ${path2}`);throw new Error(`Failed to read detail ${path2}`)}if(docMeta._conflicts&&docMeta._conflicts.length>0){this.conflictResolutionProcessor.enqueue(path2);this._log(`${headerLine} Hidden file conflicted, enqueued to resolve`);return!0}await this.extractInternalFileFromDatabase(path2,!1,docMeta,preventDoubleProcess,onlyNew,includeDeletion)&&this._log(`${headerLine} Hidden file processed`)}catch(ex){this._log(`${headerLine} Failed to process hidden file`);this._log(ex,LOG_LEVEL_VERBOSE)}return!0}))}notifyConfigChange(){const updatedFolders=[...this.queuedNotificationFiles];this.queuedNotificationFiles.clear();try{const manifests=Object.values(this.app.plugins.manifests),enabledPlugins=this.app.plugins.enabledPlugins,modifiedManifests=manifests.filter((e3=>enabledPlugins.has(e3.id))).filter((e3=>{var _a8;return updatedFolders.indexOf(null!=(_a8=null==e3?void 0:e3.dir)?_a8:"")>=0}));for(const manifest of modifiedManifests){const updatePluginId=manifest.id,updatePluginName=manifest.name;this.plugin.confirm.askInPopup(`updated-${updatePluginId}`,`Files in ${updatePluginName} has been updated!\nPress {HERE} to reload ${updatePluginName}, or press elsewhere to dismiss this message.`,(anchor=>{anchor.text="HERE";anchor.addEventListener("click",(()=>{fireAndForget((async()=>{this._log(`Unloading plugin: ${updatePluginName}`,LOG_LEVEL_NOTICE,"plugin-reload-"+updatePluginId);await this.app.plugins.unloadPlugin(updatePluginId);await this.app.plugins.loadPlugin(updatePluginId);this._log(`Plugin reloaded: ${updatePluginName}`,LOG_LEVEL_NOTICE,"plugin-reload-"+updatePluginId)}))}))}))}}catch(ex){this._log("Error on checking plugin status.");this._log(ex,LOG_LEVEL_VERBOSE)}updatedFolders.indexOf(this.plugin.app.vault.configDir)>=0&&(this.services.appLifecycle.isReloadingScheduled()||this.plugin.confirm.askInPopup("updated-any-hidden","Some setting files have been modified\nPress {HERE} to schedule a reload of Obsidian, or press elsewhere to dismiss this message.",(anchor=>{anchor.text="HERE";anchor.addEventListener("click",(()=>{this.services.appLifecycle.scheduleRestart()}))})))}queueNotification(key3){if(this.settings.suppressNotifyHiddenFilesChange)return;const configDir=this.plugin.app.vault.configDir;if(!key3.startsWith(configDir))return;const dirName=key3.split("/").slice(0,-1).join("/");this.queuedNotificationFiles.add(dirName);scheduleTask("notify-config-change",1e3,(()=>{this.notifyConfigChange()}))}async rebuildMerging(showNotice,targetFiles=!1){const logLevel=getLogLevel(showNotice),p4=this._progress("[⚙ Rebuild by Merge ]\n",logLevel);this._log("Rebuilding hidden files from the storage and the local database.",logLevel);p4.log("Enumerating local files...");const currentStorageFilesAll=await this.scanInternalFileNames(),currentStorageFiles=targetFiles?currentStorageFilesAll.filter((e3=>targetFiles.some((f4=>f4==e3)))):currentStorageFilesAll;p4.log("Enumerating database files...");const allDatabaseFiles=await this.getAllDatabaseFiles(),allDatabaseMap=new Map(allDatabaseFiles.map((e3=>[stripAllPrefixes(getPath2(e3)),e3]))),currentDatabaseFiles=targetFiles?allDatabaseFiles.filter((e3=>targetFiles.some((f4=>f4==stripAllPrefixes(getPath2(e3)))))):allDatabaseFiles,allFileNames=new Set([...currentStorageFiles,...currentDatabaseFiles.map((e3=>stripAllPrefixes(getPath2(e3))))]),storageToDatabase=[],databaseToStorage=[],eachProgress=onlyInNTimes(100,(progress=>p4.log(`Checking ${progress}/${allFileNames.size}`)));for(const file of allFileNames){eachProgress();const mtimeStorage=getComparingMTime(await this.plugin.storageAccess.statHidden(file)),dbEntry=allDatabaseMap.get(file),diff=compareMTime(mtimeStorage,getComparingMTime(dbEntry));diff==BASE_IS_NEW?storageToDatabase.push(file):diff==TARGET_IS_NEW?databaseToStorage.push(dbEntry):diff==EVEN&&storageToDatabase.push(file)}p4.once(`Storage to Database: ${storageToDatabase.length} files\n Database to Storage: ${databaseToStorage.length} files`);this.resetLastProcessedDatabase(targetFiles);this.resetLastProcessedFile(targetFiles);const processes=[this.useStorageFiles(storageToDatabase,showNotice,!1),this.useDatabaseFiles(databaseToStorage,showNotice,!1)];p4.log("Start processing...");await Promise.all(processes);p4.done();return[...allFileNames]}async rebuildFromStorage(showNotice,targetFiles=!1,onlyNew=!1){const logLevel=getLogLevel(showNotice);this._verbose("Rebuilding hidden files from the storage.");this._log("Rebuilding hidden files from the storage.",logLevel);const p4=this._progress("[⚙ Rebuild by Storage ]\n",logLevel);p4.log("Enumerating local files...");const currentFilesAll=await this.scanInternalFileNames(),currentFiles=targetFiles?currentFilesAll.filter((e3=>targetFiles.some((f4=>f4==e3)))):currentFilesAll;p4.once(`Storage to Database: ${currentFiles.length} files.`);p4.log("Start processing...");this.resetLastProcessedFile(targetFiles);await this.useStorageFiles(currentFiles,showNotice,onlyNew);p4.done();return currentFiles}async getAllDatabaseFiles(){const allFiles=(await this.localDatabase.allDocsRaw({startkey:ICHeader,endkey:"i;",include_docs:!0})).rows.filter((e3=>isInternalMetadata(e3.id))).map((e3=>e3.doc)),files=[];for(const file of allFiles)await this.isTargetFile(stripAllPrefixes(this.getPath(file)))&&files.push(file);return files}async rebuildFromDatabase(showNotice,targetFiles=!1,onlyNew=!1){const logLevel=getLogLevel(showNotice);this._verbose("Rebuilding hidden files from the local database.");const p4=this._progress("[⚙ Rebuild by Database ]\n",logLevel);p4.log("Enumerating database files...");const allFiles=await this.getAllDatabaseFiles(),currentFiles=targetFiles?allFiles.filter((e3=>targetFiles.some((f4=>f4==stripAllPrefixes(getPath2(e3)))))):allFiles;p4.once(`Database to Storage: ${currentFiles.length} files.`);this.resetLastProcessedDatabase(targetFiles);p4.log("Start processing...");await this.useDatabaseFiles(currentFiles,showNotice,onlyNew);p4.done();return currentFiles}async initialiseInternalFileSync(direction,showMessage,targetFilesSrc=!1){const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,p4=this._progress("[⚙ Initialise]\n",logLevel);p4.log("Initialising hidden files sync...");const targetFiles=!!targetFilesSrc&&targetFilesSrc.map((e3=>stripAllPrefixes(e3)));if("pushForce"==direction||"push"==direction){const onlyNew="push"==direction;p4.log("Started: Storage --\x3e Database "+(onlyNew?"(Only New)":""));const updatedFiles=await this.rebuildFromStorage(showMessage,targetFiles,onlyNew);await this.adoptCurrentStorageFilesAsProcessed(updatedFiles);await this.adoptCurrentDatabaseFilesAsProcessed(updatedFiles);await this.scanAllStorageChanges(showMessage,!0,!1);await this.scanAllDatabaseChanges(showMessage,!0,!1)}if("pullForce"==direction||"pull"==direction){const onlyNew="pull"==direction;p4.log("Started: Database --\x3e Storage "+(onlyNew?"(Only New)":""));const updatedFiles=(await this.rebuildFromDatabase(showMessage,targetFiles,onlyNew)).map((e3=>stripAllPrefixes(getPath2(e3))));await this.adoptCurrentStorageFilesAsProcessed(updatedFiles);await this.adoptCurrentDatabaseFilesAsProcessed(updatedFiles);await this.scanAllDatabaseChanges(showMessage,!0,!1);await this.scanAllStorageChanges(showMessage,!0,!1)}if("safe"==direction){p4.log("Started: Database <--\x3e Storage (by modified date)");const updatedFiles=await this.rebuildMerging(showMessage,targetFiles);await this.adoptCurrentStorageFilesAsProcessed(updatedFiles);await this.adoptCurrentDatabaseFilesAsProcessed(updatedFiles);await this.scanAllStorageChanges(showMessage,!0,!1);await this.scanAllDatabaseChanges(showMessage,!0,!1)}p4.done()}async __loadBaseSaveData(file,includeContent=!0){const prefixedFileName=addPrefix(file,ICHeader),id=await this.path2id(prefixedFileName,ICHeader);try{const old=includeContent?await this.localDatabase.getDBEntry(prefixedFileName,void 0,!1,!0):await this.localDatabase.getDBEntryMeta(prefixedFileName,{conflicts:!0},!0);return!1===old?{_id:id,data:[],path:prefixedFileName,mtime:0,ctime:0,datatype:"newnote",children:[],size:0,deleted:!1,type:"newnote",eden:{}}:old}catch(ex){this._log("Getting base save data failed");this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async storeInternalFileToDatabase(file,forceWrite=!1){const storeFilePath=stripAllPrefixes(file.path),storageFilePath=file.path;if(await this.services.vault.isIgnoredByIgnoreFile(storageFilePath))return;const prefixedFileName=addPrefix(storeFilePath,ICHeader);return await serialized("file-"+prefixedFileName,(async()=>{try{const fileInfo="stat"in file&&"body"in file?file:await this.loadFileWithInfo(storeFilePath);if(fileInfo.deleted)throw new Error(`Hidden file:${storeFilePath} is deleted. This should not be occurred.`);const baseData=await this.__loadBaseSaveData(storeFilePath,!0);if(!1===baseData)throw new Error("Failed to load base data");if(baseData._rev&&!forceWrite&&await isDocContentSame(readAsBlob(baseData),fileInfo.body)){this.updateLastProcessed(storeFilePath,baseData,fileInfo.stat);return}const saveData={...baseData,data:fileInfo.body,mtime:fileInfo.stat.mtime,size:fileInfo.stat.size,children:[],deleted:!1,type:baseData.datatype},ret=await this.localDatabase.putDBEntry(saveData);if(ret&&ret.ok){saveData._rev=ret.rev;this.updateLastProcessed(storeFilePath,saveData,fileInfo.stat)}const success=ret&&ret.ok;this._log(`STORAGE --\x3e DB:${storageFilePath}: (hidden) ${success?"Done":"Failed"}`);return success}catch(ex){this._log(`STORAGE --\x3e DB:${storageFilePath}: (hidden) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}))}async deleteInternalFileOnDatabase(filenameSrc,forceWrite=!1){const storeFilePath=filenameSrc,storageFilePath=filenameSrc,displayFileName=filenameSrc,prefixedFileName=addPrefix(storeFilePath,ICHeader),mtime=(new Date).getTime();if(!await this.services.vault.isIgnoredByIgnoreFile(storageFilePath))return await serialized("file-"+prefixedFileName,(async()=>{try{const baseData=await this.__loadBaseSaveData(storeFilePath,!1);if(!1===baseData)throw new Error("Failed to load base data during deleting");if(void 0!==baseData._conflicts)for(const conflictRev of baseData._conflicts){await this.localDatabase.removeRevision(baseData._id,conflictRev);this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) conflict removed ${baseData._rev} => ${conflictRev}`,LOG_LEVEL_VERBOSE)}if(baseData.deleted){this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) already deleted`,LOG_LEVEL_VERBOSE);this.updateLastProcessedDeletion(storeFilePath,baseData);return!0}const saveData={...baseData,mtime,size:0,children:[],deleted:!0,type:baseData.datatype},ret=await this.localDatabase.putRaw(saveData);if(ret&&ret.ok){this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) Done`);saveData._rev=ret.rev;this.updateLastProcessedDeletion(storeFilePath,saveData);return!0}this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) Failed`);return!1}catch(ex){this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}))}async extractInternalFileFromDatabase(storageFilePath,force=!1,metaEntry,preventDoubleProcess=!0,onlyNew=!1,includeDeletion=!0){const prefixedFileName=addPrefix(storageFilePath,ICHeader);if(!await this.services.vault.isIgnoredByIgnoreFile(storageFilePath))return await serialized("file-"+prefixedFileName,(async()=>{var _a8,_b5;try{const metaOnDB=metaEntry||await this.localDatabase.getDBEntryMeta(prefixedFileName,{conflicts:!0},!0);if(!1===metaOnDB)throw new Error(`File not found on database.:${storageFilePath}`);if(null==(_a8=null==metaOnDB?void 0:metaOnDB._conflicts)?void 0:_a8.length){this._log(`Hidden file ${storageFilePath} has conflicted revisions, to keep in safe, writing to storage has been prevented`,LOG_LEVEL_INFO);return!1}if(preventDoubleProcess){const key3=this.docToKey(metaOnDB);if(this.getLastProcessedDatabaseKey(storageFilePath)==key3&&!force){this._log(`STORAGE <-- DB: ${storageFilePath}: skipped (hidden, overwrite${force?", force":""}) (Previously processed)`);return}}if(onlyNew){const dbMTime=getComparingMTime(metaOnDB,includeDeletion),storageStat=await this.plugin.storageAccess.statHidden(storageFilePath),storageMTimeActual=null!=(_b5=null==storageStat?void 0:storageStat.mtime)?_b5:0;if(compareMTime(0==storageMTimeActual?this.getLastProcessedFileMTime(storageFilePath):storageMTimeActual,dbMTime)!=TARGET_IS_NEW){this._log(`STORAGE <-- DB: ${storageFilePath}: skipped (hidden, overwrite${force?", force":""}) (Not new)`);this.updateLastProcessedDatabase(storageFilePath,metaOnDB);storageStat&&this.updateLastProcessedFile(storageFilePath,storageStat);return}}if(metaOnDB.deleted||metaOnDB._deleted){const result=await this.__deleteFile(storageFilePath);if("OK"==result){this.updateLastProcessedDeletion(storageFilePath,metaOnDB);return!0}if("ALREADY"==result){this.updateLastProcessedDatabase(storageFilePath,metaOnDB);return!0}return!1}{const fileOnDB=await this.localDatabase.getDBEntryFromMeta(metaOnDB,!1,!0);if(!1===fileOnDB)throw new Error(`Failed to read file from database:${storageFilePath}`);const resultStat=await this.__writeFile(storageFilePath,fileOnDB,force);if(resultStat){this.updateLastProcessed(storageFilePath,metaOnDB,resultStat);this.queueNotification(storageFilePath);this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""}) Done`);return!0}}return!1}catch(ex){this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""}) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}))}async __checkIsNeedToWriteFile(storageFilePath,content){try{const storageContent=await this.plugin.storageAccess.readHiddenFileAuto(storageFilePath);return!await isDocContentSame(storageContent,content)}catch(ex){this._log(`Cannot check the content of ${storageFilePath}`);this._log(ex,LOG_LEVEL_VERBOSE);return!0}}async __writeFile(storageFilePath,fileOnDB,force){try{const statBefore=await this.plugin.storageAccess.statHidden(storageFilePath),isExist=null!=statBefore,writeContent=readContent(fileOnDB);await this.ensureDir(storageFilePath);if(!(force||!isExist||isExist&&await this.__checkIsNeedToWriteFile(storageFilePath,writeContent))){this._log(`STORAGE <-- DB: ${storageFilePath}: skipped (hidden) Not changed`,LOG_LEVEL_DEBUG);return statBefore}const writeResultStat=await this.writeFile(storageFilePath,writeContent,{mtime:fileOnDB.mtime,ctime:fileOnDB.ctime});if(null==writeResultStat){this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden,new${force?", force":""}) Failed (writeResult)`);return!1}this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""})`);return writeResultStat}catch(ex){this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""}) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async __deleteFile(storageFilePath){const result=await this.__removeFile(storageFilePath);if(!1===result){this._log(`STORAGE [!DETAILS]-\n> This feature allows you to synchronize all hidden files without any user interaction.\n> To enable this feature, you should choose one of the following options:\n${opt.enableFetch?"> - Fetch: Use the files stored from other devices. Choose this option if you have already configured hidden file synchronization on those devices and wish to accept their files.\n":""}${opt.enableOverwrite?"> - Overwrite: Use the files from this device. Select this option if you want to overwrite the files stored on other devices.\n":""}> - Merge: Merge the files from this device with those on other devices. Choose this option if you wish to combine files from multiple sources.\n> However, please be reminded that merging may cause conflicts if the files are not identical. Additionally, this process may occur within the same folder, potentially breaking your plug-in or theme settings that comprise multiple files.\n\n\n> [!IMPORTANT]\n> Please keep in mind that enabling this feature alongside customisation sync may override certain behaviors.`,choices=[];(null==opt?void 0:opt.enableFetch)&&choices.push("Fetch");(null==opt?void 0:opt.enableOverwrite)&&choices.push("Overwrite");choices.push("Merge");choices.push("Disable");const ret=await this.plugin.confirm.confirmWithMessage("Hidden file sync",message,choices,"Disable",40);"Fetch"==ret?await this.configureHiddenFileSync("FETCH"):"Overwrite"==ret?await this.configureHiddenFileSync("OVERWRITE"):"Merge"==ret?await this.configureHiddenFileSync("MERGE"):"Disable"==ret&&await this.configureHiddenFileSync("DISABLE_HIDDEN")}_allSuspendExtraSync(){if(this.plugin.settings.syncInternalFiles){this._log("Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.",LOG_LEVEL_NOTICE);this.plugin.settings.syncInternalFiles=!1}return Promise.resolve(!0)}async _allConfigureOptionalSyncFeature(mode){await this.configureHiddenFileSync(mode);return!0}async configureHiddenFileSync(mode){if("FETCH"==mode||"OVERWRITE"==mode||"MERGE"==mode||"DISABLE"==mode||"DISABLE_HIDDEN"==mode)if("DISABLE"!=mode&&"DISABLE_HIDDEN"!=mode){this._log("Gathering files for enabling Hidden File Sync",LOG_LEVEL_NOTICE);"FETCH"==mode?await this.initialiseInternalFileSync("pullForce",!0):"OVERWRITE"==mode?await this.initialiseInternalFileSync("pushForce",!0):"MERGE"==mode&&await this.initialiseInternalFileSync("safe",!0);this.plugin.settings.useAdvancedMode=!0;this.plugin.settings.syncInternalFiles=!0;await this.plugin.saveSettings();this._log("Done! Restarting the app is strongly recommended!",LOG_LEVEL_NOTICE)}else{this.plugin.settings.syncInternalFiles=!1;await this.plugin.saveSettings()}}async scanInternalFileNames(){const findRoot=this.app.vault.getRoot().path;return await this.getFiles(findRoot,(path2=>this.isTargetFile(path2)))}async scanInternalFiles(){var _a8,_b5,_c3,_d2,_e2,_f;const files=(await this.scanInternalFileNames()).map((async e3=>({path:e3,stat:await this.plugin.storageAccess.statHidden(e3)}))),result=[];for(const f4 of files){const w2=await f4;if(await this.services.vault.isIgnoredByIgnoreFile(w2.path))continue;const mtime=null!=(_b5=null==(_a8=w2.stat)?void 0:_a8.mtime)?_b5:0,ctime=null!=(_d2=null==(_c3=w2.stat)?void 0:_c3.ctime)?_d2:mtime,size=null!=(_f=null==(_e2=w2.stat)?void 0:_e2.size)?_f:0;result.push({...w2,mtime,ctime,size})}return result}async getFiles(path2,checkFunction){let w2;try{w2=await this.app.vault.adapter.list(path2)}catch(ex){this._log(`Could not traverse(HiddenSync):${path2}`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE);return[]}let files=[];for(const file of w2.files)await checkFunction(file)&&files.push(file);for(const v2 of w2.folders)await checkFunction(v2)&&(files=files.concat(await this.getFiles(v2,checkFunction)));return files}onBindFunction(core,services){services.appLifecycle.handleOnSettingLoaded(this._everyOnloadAfterLoadSettings.bind(this));services.fileProcessing.handleOptionalFileEvent(this._anyProcessOptionalFileEvent.bind(this));services.conflict.handleGetOptionalConflictCheckMethod(this._anyGetOptionalConflictCheckMethod.bind(this));services.replication.handleProcessOptionalSynchroniseResult(this._anyProcessOptionalSyncFiles.bind(this));services.setting.handleOnRealiseSetting(this._everyRealizeSettingSyncMode.bind(this));services.appLifecycle.handleOnResuming(this._everyOnResumeProcess.bind(this));services.replication.handleBeforeReplicate(this._everyBeforeReplicate.bind(this));services.databaseEvents.handleDatabaseInitialised(this._everyOnDatabaseInitialized.bind(this));services.setting.handleSuspendExtraSync(this._allSuspendExtraSync.bind(this));services.setting.handleSuggestOptionalFeatures(this._allAskUsingOptionalSyncFeature.bind(this));services.setting.handleEnableOptionalFeature(this._allConfigureOptionalSyncFeature.bind(this))}};t=new Uint8Array([0,97,115,109,1,0,0,0,1,48,8,96,3,127,127,127,0,96,3,127,127,127,1,127,96,2,127,127,0,96,2,127,126,0,96,1,127,1,127,96,1,127,1,126,96,3,127,127,126,1,126,96,3,126,127,127,1,126,3,11,10,1,1,2,0,4,6,7,3,0,5,5,3,1,0,1,7,85,9,3,109,101,109,2,0,5,120,120,104,51,50,0,0,6,105,110,105,116,51,50,0,2,8,117,112,100,97,116,101,51,50,0,3,8,100,105,103,101,115,116,51,50,0,4,5,120,120,104,54,52,0,5,6,105,110,105,116,54,52,0,7,8,117,112,100,97,116,101,54,52,0,8,8,100,105,103,101,115,116,54,52,0,9,10,211,23,10,242,1,1,4,127,32,0,32,1,106,33,3,32,1,65,16,79,4,127,32,3,65,16,107,33,6,32,2,65,168,136,141,161,2,106,33,3,32,2,65,247,148,175,175,120,106,33,4,32,2,65,177,243,221,241,121,107,33,5,3,64,32,0,40,2,0,65,247,148,175,175,120,108,32,3,106,65,13,119,65,177,243,221,241,121,108,33,3,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,32,4,106,65,13,119,65,177,243,221,241,121,108,33,4,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,32,2,106,65,13,119,65,177,243,221,241,121,108,33,2,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,32,5,106,65,13,119,65,177,243,221,241,121,108,33,5,32,0,65,4,106,34,0,32,6,77,13,0,11,32,2,65,12,119,32,5,65,18,119,106,32,4,65,7,119,106,32,3,65,1,119,106,5,32,2,65,177,207,217,178,1,106,11,32,1,106,32,0,32,1,65,15,113,16,1,11,146,1,0,32,1,32,2,106,33,2,3,64,32,1,65,4,106,32,2,75,69,4,64,32,1,40,2,0,65,189,220,202,149,124,108,32,0,106,65,17,119,65,175,214,211,190,2,108,33,0,32,1,65,4,106,33,1,12,1,11,11,3,64,32,1,32,2,79,69,4,64,32,1,45,0,0,65,177,207,217,178,1,108,32,0,106,65,11,119,65,177,243,221,241,121,108,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,65,15,118,32,0,115,65,247,148,175,175,120,108,34,0,32,0,65,13,118,115,65,189,220,202,149,124,108,34,0,32,0,65,16,118,115,11,63,0,32,0,65,8,106,32,1,65,168,136,141,161,2,106,54,2,0,32,0,65,12,106,32,1,65,247,148,175,175,120,106,54,2,0,32,0,65,16,106,32,1,54,2,0,32,0,65,20,106,32,1,65,177,243,221,241,121,107,54,2,0,11,211,4,1,6,127,32,1,32,2,106,33,6,32,0,65,24,106,33,5,32,0,65,40,106,40,2,0,33,3,32,0,32,0,40,2,0,32,2,106,54,2,0,32,0,65,4,106,34,4,32,4,40,2,0,32,2,65,16,79,32,0,40,2,0,65,16,79,114,114,54,2,0,32,2,32,3,106,65,16,73,4,64,32,3,32,5,106,32,1,32,2,252,10,0,0,32,0,65,40,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,5,106,32,1,65,16,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,40,2,0,32,5,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,12,106,34,3,40,2,0,32,5,65,4,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,16,106,34,3,40,2,0,32,5,65,8,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,20,106,34,3,40,2,0,32,5,65,12,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,40,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,32,6,65,16,107,77,4,64,32,6,65,16,107,33,8,32,0,65,8,106,40,2,0,33,2,32,0,65,12,106,40,2,0,33,3,32,0,65,16,106,40,2,0,33,4,32,0,65,20,106,40,2,0,33,7,3,64,32,1,40,2,0,65,247,148,175,175,120,108,32,2,106,65,13,119,65,177,243,221,241,121,108,33,2,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,32,3,106,65,13,119,65,177,243,221,241,121,108,33,3,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,32,4,106,65,13,119,65,177,243,221,241,121,108,33,4,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,32,7,106,65,13,119,65,177,243,221,241,121,108,33,7,32,1,65,4,106,34,1,32,8,77,13,0,11,32,0,65,8,106,32,2,54,2,0,32,0,65,12,106,32,3,54,2,0,32,0,65,16,106,32,4,54,2,0,32,0,65,20,106,32,7,54,2,0,11,32,1,32,6,73,4,64,32,5,32,1,32,6,32,1,107,34,1,252,10,0,0,32,0,65,40,106,32,1,54,2,0,11,11,97,1,1,127,32,0,65,16,106,40,2,0,33,1,32,0,65,4,106,40,2,0,4,127,32,1,65,12,119,32,0,65,20,106,40,2,0,65,18,119,106,32,0,65,12,106,40,2,0,65,7,119,106,32,0,65,8,106,40,2,0,65,1,119,106,5,32,1,65,177,207,217,178,1,106,11,32,0,40,2,0,106,32,0,65,24,106,32,0,65,40,106,40,2,0,16,1,11,157,4,2,1,127,3,126,32,0,32,1,106,33,3,32,1,65,32,79,4,126,32,3,65,32,107,33,3,32,2,66,135,149,175,175,152,182,222,155,158,127,124,66,207,214,211,190,210,199,171,217,66,124,33,4,32,2,66,207,214,211,190,210,199,171,217,66,124,33,5,32,2,66,0,124,33,6,32,2,66,135,149,175,175,152,182,222,155,158,127,125,33,2,3,64,32,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,4,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,4,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,5,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,5,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,6,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,2,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,2,32,0,65,8,106,34,0,32,3,77,13,0,11,32,6,66,12,137,32,2,66,18,137,124,32,5,66,7,137,124,32,4,66,1,137,124,32,4,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,5,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,6,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,2,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,5,32,2,66,197,207,217,178,241,229,186,234,39,124,11,32,1,173,124,32,0,32,1,65,31,113,16,6,11,137,2,0,32,1,32,2,106,33,2,3,64,32,1,65,8,106,32,2,77,4,64,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,32,0,133,66,27,137,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,33,0,32,1,65,8,106,33,1,12,1,11,11,32,1,65,4,106,32,2,77,4,64,32,1,53,2,0,66,135,149,175,175,152,182,222,155,158,127,126,32,0,133,66,23,137,66,207,214,211,190,210,199,171,217,66,126,66,249,243,221,241,153,246,153,171,22,124,33,0,32,1,65,4,106,33,1,11,3,64,32,1,32,2,73,4,64,32,1,49,0,0,66,197,207,217,178,241,229,186,234,39,126,32,0,133,66,11,137,66,135,149,175,175,152,182,222,155,158,127,126,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,66,33,136,32,0,133,66,207,214,211,190,210,199,171,217,66,126,34,0,32,0,66,29,136,133,66,249,243,221,241,153,246,153,171,22,126,34,0,32,0,66,32,136,133,11,88,0,32,0,65,8,106,32,1,66,135,149,175,175,152,182,222,155,158,127,124,66,207,214,211,190,210,199,171,217,66,124,55,3,0,32,0,65,16,106,32,1,66,207,214,211,190,210,199,171,217,66,124,55,3,0,32,0,65,24,106,32,1,55,3,0,32,0,65,32,106,32,1,66,135,149,175,175,152,182,222,155,158,127,125,55,3,0,11,132,5,2,3,127,4,126,32,1,32,2,106,33,5,32,0,65,40,106,33,4,32,0,65,200,0,106,40,2,0,33,3,32,0,32,0,41,3,0,32,2,173,124,55,3,0,32,2,32,3,106,65,32,73,4,64,32,3,32,4,106,32,1,32,2,252,10,0,0,32,0,65,200,0,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,4,106,32,1,65,32,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,41,3,0,32,4,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,16,106,34,3,41,3,0,32,4,65,8,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,24,106,34,3,41,3,0,32,4,65,16,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,32,106,34,3,41,3,0,32,4,65,24,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,200,0,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,65,32,106,32,5,77,4,64,32,5,65,32,107,33,2,32,0,65,8,106,41,3,0,33,6,32,0,65,16,106,41,3,0,33,7,32,0,65,24,106,41,3,0,33,8,32,0,65,32,106,41,3,0,33,9,3,64,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,6,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,7,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,7,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,8,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,8,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,9,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,9,32,1,65,8,106,34,1,32,2,77,13,0,11,32,0,65,8,106,32,6,55,3,0,32,0,65,16,106,32,7,55,3,0,32,0,65,24,106,32,8,55,3,0,32,0,65,32,106,32,9,55,3,0,11,32,1,32,5,73,4,64,32,4,32,1,32,5,32,1,107,34,1,252,10,0,0,32,0,65,200,0,106,32,1,54,2,0,11,11,200,2,1,5,126,32,0,65,24,106,41,3,0,33,1,32,0,41,3,0,34,2,66,32,90,4,126,32,0,65,8,106,41,3,0,34,3,66,1,137,32,0,65,16,106,41,3,0,34,4,66,7,137,124,32,1,66,12,137,32,0,65,32,106,41,3,0,34,5,66,18,137,124,124,32,3,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,4,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,1,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,5,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,5,32,1,66,197,207,217,178,241,229,186,234,39,124,11,32,2,124,32,0,65,40,106,32,2,66,31,131,167,16,6,11]);hashFunc=str=>fallbackMixedHashEach(str);!async function initHashFunc(){try{const{h32ToString}=await e();hashFunc=h32ToString;Logger("xxhash for plugin initialised",LOG_LEVEL_VERBOSE)}catch(ex){Logger("Could not initialise xxhash. fallback...",LOG_LEVEL_VERBOSE);Logger(ex);hashFunc=str=>fallbackMixedHashEach(str)}}();globalSlipBoard2=globalSlipBoard;import_diff_match_patch2=__toESM(require_diff_match_patch(),1);ConflictResolveModal=class extends import_obsidian.Modal{constructor(app,filename,diff,pluginPickMode,remoteName){super(app);this.response=CANCELLED;this.isClosed=!1;this.consumed=!1;this.title="Conflicting changes";this.pluginPickMode=!1;this.localName="Base";this.remoteName="Conflicted";this.result=diff;this.filename=filename;this.pluginPickMode=pluginPickMode||!1;if(this.pluginPickMode){this.title="Pick a version";this.remoteName=`${remoteName||"Remote"}`;this.localName="Local"}}onOpen(){const{contentEl}=this;globalSlipBoard2.submit("conflict-resolved",this.filename,CANCELLED);this.offEvent&&this.offEvent();this.offEvent=eventHub.onEvent("conflict-cancelled",(path2=>{path2===this.filename&&this.sendResponse(CANCELLED)}));this.titleEl.setText(this.title);contentEl.empty();contentEl.createEl("span",{text:this.filename});const div=contentEl.createDiv("");div.addClass("op-scrollable");let diff="";for(const v2 of this.result.diff){const x1=v2[0],x2=v2[1];x1==import_diff_match_patch2.DIFF_DELETE?diff+=""+escapeStringToHTML(x2).replace(/\n/g,"\n")+"":x1==import_diff_match_patch2.DIFF_EQUAL?diff+=""+escapeStringToHTML(x2).replace(/\n/g,"\n")+"":x1==import_diff_match_patch2.DIFF_INSERT&&(diff+=""+escapeStringToHTML(x2).replace(/\n/g,"\n")+"")}const div2=contentEl.createDiv(""),date1=new Date(this.result.left.mtime).toLocaleString()+(this.result.left.deleted?" (Deleted)":""),date2=new Date(this.result.right.mtime).toLocaleString()+(this.result.right.deleted?" (Deleted)":"");div2.innerHTML=`${this.localName}: ${date1}
\n${this.remoteName}: ${date2}
`;contentEl.createEl("button",{text:`Use ${this.localName}`},(e3=>e3.addEventListener("click",(()=>this.sendResponse(this.result.right.rev))))).style.marginRight="4px";contentEl.createEl("button",{text:`Use ${this.remoteName}`},(e3=>e3.addEventListener("click",(()=>this.sendResponse(this.result.left.rev))))).style.marginRight="4px";this.pluginPickMode||(contentEl.createEl("button",{text:"Concat both"},(e3=>e3.addEventListener("click",(()=>this.sendResponse(LEAVE_TO_SUBSEQUENT))))).style.marginRight="4px");contentEl.createEl("button",{text:this.pluginPickMode?"Cancel":"Not now"},(e3=>e3.addEventListener("click",(()=>this.sendResponse(CANCELLED))))).style.marginRight="4px";diff=diff.replace(/\n/g,"
");diff.length>102400?div.innerText="(Too large diff to display)":div.innerHTML=diff}sendResponse(result){this.response=result;this.close()}onClose(){const{contentEl}=this;contentEl.empty();this.offEvent&&this.offEvent();if(!this.consumed){this.consumed=!0;globalSlipBoard2.submit("conflict-resolved",this.filename,this.response)}}async waitForResult(){await delay(100);return await globalSlipBoard2.awaitNext("conflict-resolved",this.filename)}};(function enable_legacy_mode_flag(){legacy_mode_flag=!0})();root_3=from_html("");root_62=from_html('');root_7=from_html('');root_8=from_html('');root_42=from_html(' ',1);root_9=from_html(' ',1);root_11=from_html('');root_122=from_html('');root_22=from_html(' ',1);root_13=from_html(' ',1);root_132=from_html(' All the same or non-existent ',1);$$css3={hash:"svelte-14nm4oc",code:'.spacer.svelte-14nm4oc {min-width:1px;flex-grow:1;}button.svelte-14nm4oc {margin:2px 4px;min-width:3em;max-width:4em;}button.svelte-14nm4oc:disabled {border:none;box-shadow:none;background-color:transparent;visibility:collapse;}button.svelte-14nm4oc:disabled:hover {border:none;box-shadow:none;background-color:transparent;visibility:collapse;}span.message.svelte-14nm4oc {color:var(--text-muted);font-size:var(--font-ui-smaller);padding:0 1em;line-height:var(--line-height-tight);}\n /* span.messages {\n display: flex;\n flex-direction: column;\n align-items: center;\n } */.is-mobile .spacer.svelte-14nm4oc {margin-left:auto;}.chip-wrap.svelte-14nm4oc {display:flex;gap:2px;flex-direction:column;justify-content:center;align-items:flex-start;}.chip.svelte-14nm4oc {display:inline-block;border-radius:2px;font-size:0.8em;padding:0 4px;margin:0 2px;border-color:var(--tag-border-color);background-color:var(--tag-background);color:var(--tag-color);}.chip.svelte-14nm4oc:empty {display:none;}.chip.svelte-14nm4oc:not(:empty)::before {min-width:1.8em;display:inline-block;}.chip.content.svelte-14nm4oc:not(:empty)::before {content:"📄: ";}.chip.version.svelte-14nm4oc:not(:empty)::before {content:"🏷️: ";}.chip.modified.svelte-14nm4oc:not(:empty)::before {content:"📅: ";}'};root_14=from_html('');root_23=from_html(" ");root_32=from_html('
No Items.
');root_82=from_html('
');root_63=from_html('
');root_52=from_html('

');root_133=from_html('
');root_15=from_html('
');root_18=from_html('
');root_16=from_html('
Other files
');root_112=from_html('
MAIN
DATA
',1);root_19=from_html('
');root_92=from_html('
',1);root_43=from_html('

Plugins

',1);root_21=from_html("");root_20=from_html('

Maintenance Commands

');root3=from_html('
',1);$$css4={hash:"svelte-10jah2g",code:".buttonsWrap.svelte-10jah2g {padding-bottom:4px;}h3.svelte-10jah2g {position:sticky;top:0;background-color:var(--modal-background);}.labelrow.svelte-10jah2g {margin-left:0.4em;display:flex;justify-content:flex-start;align-items:center;border-top:1px solid var(--background-modifier-border);padding:4px;flex-wrap:wrap;}.filerow.svelte-10jah2g {margin-left:1.25em;display:flex;justify-content:flex-start;align-items:center;padding-right:4px;flex-wrap:wrap;}.filerow.hideeven.svelte-10jah2g:has(.even),\n .labelrow.hideeven.svelte-10jah2g:has(.even) {display:none;}.noterow.svelte-10jah2g {min-height:2em;display:flex;}button.status.svelte-10jah2g {flex-grow:0;margin:2px 4px;min-width:3em;max-width:4em;}.statusnote.svelte-10jah2g {display:flex;justify-content:flex-end;padding-right:var(--size-4-12);align-items:center;min-width:10em;flex-grow:1;}.list.svelte-10jah2g {overflow-y:auto;}.title.svelte-10jah2g {color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto;}.body.svelte-10jah2g {\n /* margin-left: 0.4em; */margin-left:auto;display:flex;justify-content:flex-start;align-items:center;\n /* flex-wrap: wrap; */}.filetitle.svelte-10jah2g {color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto;}.buttons.svelte-10jah2g {display:flex;flex-direction:row;justify-content:flex-end;margin-top:8px;flex-wrap:wrap;}.buttons.svelte-10jah2g > button:where(.svelte-10jah2g) {margin-left:4px;width:auto;}label.svelte-10jah2g {display:flex;justify-content:center;align-items:center;}label.svelte-10jah2g > span:where(.svelte-10jah2g) {margin-right:0.25em;}.is-mobile .title.svelte-10jah2g,\n .is-mobile .filetitle.svelte-10jah2g {width:100%;}.center.svelte-10jah2g {display:flex;justify-content:center;align-items:center;min-height:3em;}.maintenancerow.svelte-10jah2g {display:flex;justify-content:flex-end;align-items:center;}.maintenancerow.svelte-10jah2g label:where(.svelte-10jah2g) {margin-right:0.5em;margin-left:0.5em;}.loading.svelte-10jah2g {transition:height 0.25s ease-in-out;transition-delay:4ms;overflow-y:hidden;flex-shrink:0;display:flex;justify-content:flex-start;align-items:center;}.loading.svelte-10jah2g:empty {height:0px;transition:height 0.25s ease-in-out;transition-delay:1s;}.loading.svelte-10jah2g:not(:empty) {height:2em;transition:height 0.25s ease-in-out;transition-delay:0;}"};PluginDialogModal=class extends import_obsidian.Modal{isOpened(){return null!=this.component}constructor(app,plugin3){super(app);this.plugin=plugin3}onOpen(){const{contentEl}=this;this.contentEl.style.overflow="auto";this.contentEl.style.display="flex";this.contentEl.style.flexDirection="column";this.titleEl.setText("Customization Sync (Beta3)");this.component||(this.component=mount(PluginPane,{target:contentEl,props:{plugin:this.plugin}}))}onClose(){if(this.component){unmount(this.component);this.component=void 0}}};d="​";d2="\n";DUMMY_HEAD=serialize({category:"CONFIG",name:"migrated",files:[],mtime:0,term:"-",displayName:"MIRAGED"});DUMMY_END=d+d2+"‌";pluginList=writable([]);pluginIsEnumerating=writable(!1);pluginV2Progress=writable(0);pluginManifestStore=writable(pluginManifests=new Map);PluginDataExDisplayV2=class{constructor(data){this.files=[];this.documentPath=`${data.documentPath}`;this.category=`${data.category}`;this.name=`${data.name}`;this.term=`${data.term}`;this.files=[...data.files];this.confKey=`${categoryToFolder(this.category,this.term)}${this.name}`;this.applyLoadedManifest()}async setFile(file){const old=this.files.find((e3=>e3.filename==file.filename));if(old){if(old.mtime==file.mtime&&await isDocContentSame(old.data,file.data))return;this.files=this.files.filter((e3=>e3.filename!=file.filename))}this.files.push(file);"manifest.json"==file.filename&&this.applyLoadedManifest()}deleteFile(filename){this.files=this.files.filter((e3=>e3.filename!=filename))}applyLoadedManifest(){const manifest=pluginManifests.get(this.confKey);if(manifest){this._displayName=manifest.name;"PLUGIN_MAIN"!=this.category&&"THEME"!=this.category||(this._version=null==manifest?void 0:manifest.version)}}get displayName(){return this._displayName||this.name}get version(){return this._version}get mtime(){return~~this.files.reduce(((a2,b3)=>a2+b3.mtime),0)/this.files.length}};ConfigSync=class extends LiveSyncCommands{constructor(plugin3){super(plugin3);this.pluginDialog=void 0;this.periodicPluginSweepProcessor=new PeriodicProcessor(this.plugin,(async()=>await this.scanAllConfigFiles(!1)));this.pluginList=[];this.addRibbonIcon=this.plugin.addRibbonIcon.bind(this.plugin);this.pluginScanProcessor=new QueueProcessor((async v2=>{const plugin3=v2[0];if(this.useV2){await this.migrateV1ToV2(!1,plugin3);return[]}const path2=plugin3.path||this.getPath(plugin3),oldEntry=this.pluginList.find((e3=>e3.documentPath==path2));if(oldEntry&&oldEntry.mtime==plugin3.mtime)return[];try{const pluginData=await this.loadPluginData(path2);if(pluginData){let newList=[...this.pluginList];newList=newList.filter((x2=>x2.documentPath!=pluginData.documentPath));newList.push(pluginData);this.pluginList=newList;pluginList.set(newList)}return[]}catch(ex){this._log(`Something happened at enumerating customization :${path2}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}return[]}),{suspended:!1,batchSize:1,concurrentLimit:10,delay:100,yieldThreshold:10,maintainDelay:!1,totalRemainingReactiveSource:pluginScanningCount}).startPipeline();this.pluginScanProcessorV2=new QueueProcessor((async v2=>{const plugin3=v2[0],path2=plugin3.path||this.getPath(plugin3),oldEntry=this.pluginList.find((e3=>e3.documentPath==path2));if(oldEntry&&oldEntry.mtime==plugin3.mtime)return[];try{const pluginData=await this.loadPluginData(path2);if(pluginData){let newList=[...this.pluginList];newList=newList.filter((x2=>x2.documentPath!=pluginData.documentPath));newList.push(pluginData);this.pluginList=newList;pluginList.set(newList)}return[]}catch(ex){this._log(`Something happened at enumerating customization :${path2}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}return[]}),{suspended:!1,batchSize:1,concurrentLimit:10,delay:100,yieldThreshold:10,maintainDelay:!1,totalRemainingReactiveSource:pluginScanningCount}).startPipeline();this.loadedManifest_mTime=new Map;this.updatingV2Count=0;this.recentProcessedInternalFiles=[];pluginScanningCount.onChanged((e3=>{const total=e3.value;pluginIsEnumerating.set(0!=total)}))}get kvDB(){return this.plugin.kvDB}get useV2(){return this.plugin.settings.usePluginSyncV2}get useSyncPluginEtc(){return this.plugin.settings.usePluginEtc}isThisModuleEnabled(){return this.plugin.settings.usePluginSync}showPluginSyncModal(){if(this.isThisModuleEnabled())if(this.pluginDialog)this.pluginDialog.open();else{this.pluginDialog=new PluginDialogModal(this.app,this.plugin);this.pluginDialog.open()}}hidePluginSyncModal(){if(null!=this.pluginDialog){this.pluginDialog.close();this.pluginDialog=void 0}}onunload(){var _a8;this.hidePluginSyncModal();null==(_a8=this.periodicPluginSweepProcessor)||_a8.disable()}onload(){(0,import_obsidian.addIcon)("custom-sync",'\n \n ');this.plugin.addCommand({id:"livesync-plugin-dialog-ex",name:"Show customization sync dialog",callback:()=>{this.showPluginSyncModal()}});this.addRibbonIcon("custom-sync",$msg("cmdConfigSync.showCustomizationSync"),(()=>{this.showPluginSyncModal()})).addClass("livesync-ribbon-showcustom");eventHub.onEvent(EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG2,(()=>this.showPluginSyncModal()))}getFileCategory(filePath){return 2==filePath.split("/").length&&filePath.endsWith(".json")?"CONFIG":4==filePath.split("/").length&&filePath.startsWith(`${this.app.vault.configDir}/themes/`)?"THEME":filePath.startsWith(`${this.app.vault.configDir}/snippets/`)&&filePath.endsWith(".css")?"SNIPPET":filePath.startsWith(`${this.app.vault.configDir}/plugins/`)?filePath.endsWith("/styles.css")||filePath.endsWith("/manifest.json")||filePath.endsWith("/main.js")?"PLUGIN_MAIN":filePath.endsWith("/data.json")?"PLUGIN_DATA":this.useV2&&this.useSyncPluginEtc?"PLUGIN_ETC":"":""}isTargetPath(filePath){return!!filePath.startsWith(this.app.vault.configDir)&&""!=this.getFileCategory(filePath)}async _everyOnDatabaseInitialized(showNotice){if(!this.isThisModuleEnabled())return!0;try{this._log("Scanning customizations...");await this.scanAllConfigFiles(showNotice);this._log("Scanning customizations : done")}catch(ex){this._log("Scanning customizations : failed");this._log(ex,LOG_LEVEL_VERBOSE)}return!0}async _everyBeforeReplicate(showNotice){if(!this.isThisModuleEnabled())return!0;if(this.settings.autoSweepPlugins){await this.scanAllConfigFiles(showNotice);return!0}return!0}async _everyOnResumeProcess(){if(!this.isThisModuleEnabled())return!0;if(this._isMainSuspended())return!0;this.settings.autoSweepPlugins&&await this.scanAllConfigFiles(!1);this.periodicPluginSweepProcessor.enable(this.settings.autoSweepPluginsPeriodic&&!this.settings.watchInternalFileChanges?6e4:0);return!0}_everyAfterResumeProcess(){const q2=activeDocument.querySelector(".livesync-ribbon-showcustom");null==q2||q2.toggleClass("sls-hidden",!this.isThisModuleEnabled());return Promise.resolve(!0)}async reloadPluginList(showMessage){this.pluginList=[];this.loadedManifest_mTime.clear();pluginList.set(this.pluginList);await this.updatePluginList(showMessage)}async loadPluginData(path2){const wx=await this.localDatabase.getDBEntry(path2,void 0,!1,!1);if(wx){const data=deserialize(getDocDataAsArray(wx.data),{}),xFiles=[];let missingHash=!1;for(const file of data.files){const work={...file,data:[]};if(!file.hash){const hash3=digestHash(getDocDataAsArray(work.data));file.hash=hash3;missingHash=!0}work.data=[file.hash];xFiles.push(work)}if(missingHash){this._log(`Digest created for ${path2} to improve checking`,LOG_LEVEL_VERBOSE);wx.data=serialize(data);fireAndForget((()=>this.localDatabase.putDBEntry(createSavingEntryFromLoadedEntry(wx))))}return{...data,documentPath:this.getPath(wx),files:xFiles}}return!1}filenameToUnifiedKey(path2,termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName(),category=this.getFileCategory(path2),name="CONFIG"==category||"SNIPPET"==category?path2.split("/").slice(-1)[0]:"PLUGIN_ETC"==category?path2.split("/").slice(-2).join("/"):path2.split("/").slice(-2)[0];return`${ICXHeader}${term}/${category}/${name}.md`}filenameWithUnifiedKey(path2,termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName(),category=this.getFileCategory(path2),name="CONFIG"==category||"SNIPPET"==category?path2.split("/").slice(-1)[0]:path2.split("/").slice(-2)[0],baseName="CONFIG"==category||"SNIPPET"==category?name:path2.split("/").slice(3).join("/");return`${ICXHeader}${term}/${category}/${name}%${baseName}`}unifiedKeyPrefixOfTerminal(termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName();return`${ICXHeader}${term}/`}parseUnifiedPath(unifiedPath){const[device,category,...rest]=stripAllPrefixes(unifiedPath).split("/"),relativePath=rest.join("/"),[key3,filename]=relativePath.split("%");return{device,category,key:key3,filename,pathV1:unifiedPath.split("%")[0]+".md"}}async createPluginDataExFileV2(unifiedPathV2,loaded){const{category,key:key3,filename,device}=this.parseUnifiedPath(unifiedPathV2);if(!loaded){const d4=await this.localDatabase.getDBEntry(unifiedPathV2);if(!d4){this._log(`The file ${unifiedPathV2} is not found`,LOG_LEVEL_VERBOSE);return!1}if(!isLoadedEntry(d4)){this._log(`The file ${unifiedPathV2} is not a note`,LOG_LEVEL_VERBOSE);return!1}loaded=d4}const confKey=`${categoryToFolder(category,device)}${key3}`,relativeFilename=`${categoryToFolder(category,"")}${"CONFIG"==category||"SNIPPET"==category?"":key3+"/"}${filename}`.substring(1),dataSrc=getDocData(loaded.data),dataStart=dataSrc.indexOf(DUMMY_END),data=dataSrc.substring(dataStart+DUMMY_END.length),file={...loaded,hash:"",data:[base64ToString(data)],filename:relativeFilename,displayName:filename};if("manifest.json"==filename)if(this.loadedManifest_mTime.get(confKey)!=file.mtime&&null==pluginManifests.get(confKey)){try{const parsedManifest=JSON.parse(base64ToString(data));setManifest(confKey,parsedManifest);this.pluginList.filter((e3=>e3 instanceof PluginDataExDisplayV2&&e3.confKey==confKey)).forEach((e3=>e3.applyLoadedManifest()));pluginList.set(this.pluginList)}catch(ex){this._log(`The file ${loaded.path} seems to manifest, but could not be decoded as JSON`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}this.loadedManifest_mTime.set(confKey,file.mtime)}else{this.pluginList.filter((e3=>e3 instanceof PluginDataExDisplayV2&&e3.confKey==confKey)).forEach((e3=>e3.applyLoadedManifest()));pluginList.set(this.pluginList)}return file}createPluginDataFromV2(unifiedPathV2){const{category,device,key:key3,pathV1}=this.parseUnifiedPath(unifiedPathV2);if(""!=category)return new PluginDataExDisplayV2({documentPath:pathV1,category,name:key3,term:`${device}`,files:[],mtime:0})}async updatePluginListV2(showMessage,unifiedFilenameWithKey){try{this.updatingV2Count++;pluginV2Progress.set(this.updatingV2Count);const{pathV1}=this.parseUnifiedPath(unifiedFilenameWithKey),oldEntry=this.pluginList.find((e3=>e3.documentPath==pathV1));let entry;if(oldEntry&&oldEntry instanceof PluginDataExDisplayV2)oldEntry instanceof PluginDataExDisplayV2&&(entry=oldEntry);else{const newEntry=this.createPluginDataFromV2(unifiedFilenameWithKey);newEntry&&(entry=newEntry)}if(!entry)return;const file=await this.createPluginDataExFileV2(unifiedFilenameWithKey);if(file)await entry.setFile(file);else{entry.deleteFile(unifiedFilenameWithKey);0==entry.files.length&&(this.pluginList=this.pluginList.filter((e3=>e3.documentPath!=pathV1)))}const newList=this.pluginList.filter((e3=>e3.documentPath!=entry.documentPath));newList.push(entry);this.pluginList=newList;scheduleTask("updatePluginListV2",100,(()=>{pluginList.set(this.pluginList)}))}finally{this.updatingV2Count--;pluginV2Progress.set(this.updatingV2Count)}}async migrateV1ToV2(showMessage,entry){var _a8;const v1Path=entry.path;this._log(`Migrating ${entry.path} to V2`,showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);if(entry.deleted){this._log(`The entry ${v1Path} is already deleted`,LOG_LEVEL_VERBOSE);return}if(!v1Path.endsWith(".md")&&!v1Path.startsWith(ICXHeader)){this._log(`The entry ${v1Path} is not a customisation sync binder`,LOG_LEVEL_VERBOSE);return}if(-1!==v1Path.indexOf("%")){this._log(`The entry ${v1Path} is already migrated`,LOG_LEVEL_VERBOSE);return}const loadedEntry=await this.localDatabase.getDBEntry(v1Path);if(!loadedEntry){this._log(`The entry ${v1Path} is not found`,LOG_LEVEL_VERBOSE);return}const pluginData=deserialize(getDocDataAsArray(loadedEntry.data),{}),prefixPath=v1Path.slice(0,-3)+"%",category=pluginData.category;for(const f4 of pluginData.files){const stripTable={CONFIG:0,THEME:2,SNIPPET:1,PLUGIN_MAIN:2,PLUGIN_DATA:2,PLUGIN_ETC:2},deletePrefixCount=null!=(_a8=null==stripTable?void 0:stripTable[category])?_a8:1,relativeFilename=f4.filename.split("/").slice(deletePrefixCount).join("/"),v2Path=prefixPath+relativeFilename;this._log(`Migrating ${v1Path} / ${relativeFilename} to ${v2Path}`,LOG_LEVEL_VERBOSE);const newId=await this.services.path.path2id(v2Path),data=createBlob([DUMMY_HEAD,DUMMY_END,...getDocDataAsArray(f4.data)]),saving={...loadedEntry,_rev:void 0,_id:newId,path:v2Path,data,datatype:"plain",type:"plain",children:[],eden:{}},r4=await this.plugin.localDatabase.putDBEntry(saving);if(r4&&r4.ok){this._log(`Migrated ${v1Path} / ${f4.filename} to ${v2Path}`,LOG_LEVEL_INFO);await this.deleteConfigOnDatabase(v1Path)?this._log(`Deleted ${v1Path} successfully`,LOG_LEVEL_INFO):this._log(`Failed to delete ${v1Path}`,LOG_LEVEL_NOTICE)}}}async updatePluginList(showMessage,updatedDocumentPath){if(this.isThisModuleEnabled()){try{this.updatingV2Count++;pluginV2Progress.set(this.updatingV2Count);const updatedDocumentId=updatedDocumentPath?await this.path2id(updatedDocumentPath):"",plugins=updatedDocumentPath?this.localDatabase.findEntries(updatedDocumentId,updatedDocumentId+"􏿿",{include_docs:!0,key:updatedDocumentId,limit:1}):this.localDatabase.findEntries(ICXHeader+"",`${ICXHeader}􏿿`,{include_docs:!0});for await(const v2 of plugins){if(v2.deleted||v2._deleted)continue;if(-1!==v2.path.indexOf("%")){fireAndForget((()=>this.updatePluginListV2(showMessage,v2.path)));continue}const path2=v2.path||this.getPath(v2);updatedDocumentPath&&updatedDocumentPath!=path2||this.pluginScanProcessor.enqueue(v2)}}finally{pluginIsEnumerating.set(!1);this.updatingV2Count--;pluginV2Progress.set(this.updatingV2Count)}pluginIsEnumerating.set(!1)}else{this.pluginScanProcessor.clearQueue();this.pluginList=[];pluginList.set(this.pluginList)}}async compareUsingDisplayData(dataA,dataB,compareEach=!1){const loadFile=async data=>{if(data instanceof PluginDataExDisplayV2||compareEach)return data.files[0];const loadDoc=await this.localDatabase.getDBEntry(data.documentPath);if(!loadDoc)return!1;const pluginData=deserialize(getDocDataAsArray(loadDoc.data),{});pluginData.documentPath=data.documentPath;const file=pluginData.files[0];return{...loadDoc,...file,datatype:"newnote"}},fileA=await loadFile(dataA),fileB=await loadFile(dataB);this._log(`Comparing: ${dataA.documentPath} <-> ${dataB.documentPath}`,LOG_LEVEL_VERBOSE);if(!fileA||!fileB){this._log(`Could not load ${dataA.name} for comparison: ${fileA?"":dataA.term}${fileB?"":dataB.term}`,LOG_LEVEL_NOTICE);return!1}let path2=stripAllPrefixes(fileA.path.split("/").slice(-1).join("/"));-1!==path2.indexOf("%")&&(path2=path2.split("%")[1]);if(fileA.path.endsWith(".json"))return serialized("config:merge-data",(()=>new Promise((res2=>{this._log("Opening data-merging dialog",LOG_LEVEL_VERBOSE);new JsonResolveModal(this.app,path2,[fileA,fileB],(async(keep,result)=>{if(null==result)return res2(!1);try{res2(await this.applyData(dataA,result))}catch(ex){this._log("Could not apply merged file");this._log(ex,LOG_LEVEL_VERBOSE);res2(!1)}}),"Local",`${dataB.term}`,"B",!0,!0,"Difference between local and remote").open()}))));{const dmp=new import_diff_match_patch.diff_match_patch;let docAData=getDocData(fileA.data),docBData=getDocData(fileB.data);"plain"!=(null==fileA?void 0:fileA.datatype)&&(docAData=base64ToString(docAData));"plain"!=(null==fileB?void 0:fileB.datatype)&&(docBData=base64ToString(docBData));const diffMap=dmp.diff_linesToChars_(docAData,docBData),diff=dmp.diff_main(diffMap.chars1,diffMap.chars2,!1);dmp.diff_charsToLines_(diff,diffMap.lineArray);dmp.diff_cleanupSemantic(diff);const diffResult={left:{rev:"A",...fileA,data:docAData},right:{rev:"B",...fileB,data:docBData},diff},d4=new ConflictResolveModal(this.app,path2,diffResult,!0,dataB.term);d4.open();const ret=await d4.waitForResult();if(ret===CANCELLED)return!1;if(ret===LEAVE_TO_SUBSEQUENT)return!1;const resultContent="A"==ret?docAData:"B"==ret?docBData:void 0;return!!resultContent&&await this.applyData(dataA,resultContent)}}async applyDataV2(data,content){const baseDir=this.app.vault.configDir;try{if(content){const filename=data.files[0].filename;this._log(`Applying ${filename} of ${data.displayName||data.name}..`);const path2=`${baseDir}/${filename}`;await this.plugin.storageAccess.ensureDir(path2);await this.plugin.storageAccess.writeHiddenFileAuto(path2,content);await this.storeCustomisationFileV2(path2,this.services.setting.getDeviceAndVaultName())}else{const files=data.files;for(const f4 of files){const stat={mtime:f4.mtime,ctime:f4.ctime},path2=`${baseDir}/${f4.filename}`;this._log(`Applying ${f4.filename} of ${data.displayName||data.name}..`);await this.plugin.storageAccess.ensureDir(path2);if("newnote"==f4.datatype){let oldData;try{oldData=await this.plugin.storageAccess.readHiddenFileBinary(path2)}catch(ex){this._log(`Could not read the file ${f4.filename}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE);oldData=new ArrayBuffer(0)}const content2=base64ToArrayBuffer(f4.data);if(await isDocContentSame(oldData,content2)){this._log(`The file ${f4.filename} is already up-to-date`,LOG_LEVEL_VERBOSE);continue}await this.plugin.storageAccess.writeHiddenFileAuto(path2,content2,stat)}else{let oldData;try{oldData=await this.plugin.storageAccess.readHiddenFileText(path2)}catch(ex){this._log(`Could not read the file ${f4.filename}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE);oldData=""}const content2=getDocData(f4.data);if(await isDocContentSame(oldData,content2)){this._log(`The file ${f4.filename} is already up-to-date`,LOG_LEVEL_VERBOSE);continue}await this.plugin.storageAccess.writeHiddenFileAuto(path2,content2,stat)}this._log(`Applied ${f4.filename} of ${data.displayName||data.name}..`);await this.storeCustomisationFileV2(path2,this.services.setting.getDeviceAndVaultName())}}}catch(ex){this._log(`Applying ${data.displayName||data.name}.. Failed`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return!1}return!0}async applyData(data,content){this._log(`Applying ${data.displayName||data.name}..`);if(data instanceof PluginDataExDisplayV2)return this.applyDataV2(data,content);const baseDir=this.app.vault.configDir;try{if(!data.documentPath)throw"InternalError: Document path not exist";const dx=await this.localDatabase.getDBEntry(data.documentPath);if(0==dx)throw"Not found on database";const loadedData=deserialize(getDocDataAsArray(dx.data),{});for(const f4 of loadedData.files){this._log(`Applying ${f4.filename} of ${data.displayName||data.name}..`);try{const path2=`${baseDir}/${f4.filename}`;await this.plugin.storageAccess.ensureDir(path2);if(content)await this.plugin.storageAccess.writeHiddenFileAuto(path2,content);else{const dt=decodeBinary(f4.data);await this.plugin.storageAccess.writeHiddenFileAuto(path2,dt)}this._log(`Applying ${f4.filename} of ${data.displayName||data.name}.. Done`)}catch(ex){this._log(`Applying ${f4.filename} of ${data.displayName||data.name}.. Failed`);this._log(ex,LOG_LEVEL_VERBOSE)}}const uPath=`${baseDir}/${loadedData.files[0].filename}`;await this.storeCustomizationFiles(uPath);await this.updatePluginList(!0,uPath);await delay(100);this._log(`Config ${data.displayName||data.name} has been applied`,LOG_LEVEL_NOTICE);if("PLUGIN_DATA"==data.category||"PLUGIN_MAIN"==data.category){const manifests=Object.values(this.app.plugins.manifests),enabledPlugins=this.app.plugins.enabledPlugins,pluginManifest=manifests.find((manifest=>enabledPlugins.has(manifest.id)&&manifest.dir==`${baseDir}/plugins/${data.name}`));if(pluginManifest){this._log(`Unloading plugin: ${pluginManifest.name}`,LOG_LEVEL_NOTICE,"plugin-reload-"+pluginManifest.id);await this.app.plugins.unloadPlugin(pluginManifest.id);await this.app.plugins.loadPlugin(pluginManifest.id);this._log(`Plugin reloaded: ${pluginManifest.name}`,LOG_LEVEL_NOTICE,"plugin-reload-"+pluginManifest.id)}}else"CONFIG"==data.category&&this.services.appLifecycle.askRestart();return!0}catch(ex){this._log(`Applying ${data.displayName||data.name}.. Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async deleteData(data){try{if(data.documentPath){const delList=[];if(this.useV2){const deleteList=this.pluginList.filter((e3=>e3.documentPath==data.documentPath)).filter((e3=>e3 instanceof PluginDataExDisplayV2)).map((e3=>e3.files)).flat();for(const e3 of deleteList)delList.push(e3.path)}delList.push(data.documentPath);const p4=delList.map((async e3=>{await this.deleteConfigOnDatabase(e3);await this.updatePluginList(!1,e3)}));await Promise.allSettled(p4);this._log(`Deleted: ${data.category}/${data.name} of ${data.category} (${delList.length} items)`,LOG_LEVEL_NOTICE)}return!0}catch(ex){this._log(`Failed to delete: ${data.documentPath}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async _anyModuleParsedReplicationResultItem(docs){if(!docs._id.startsWith(ICXHeader))return!1;this.isThisModuleEnabled()&&await this.updatePluginList(!1,docs.path?docs.path:this.getPath(docs));if(this.isThisModuleEnabled()&&this.plugin.settings.notifyPluginOrSettingUpdated&&(!this.pluginDialog||this.pluginDialog&&!this.pluginDialog.isOpened())){const fragment=createFragment((doc=>{doc.createEl("span",void 0,(a2=>{a2.appendText("Some configuration has been arrived, Press ");a2.appendChild(a2.createEl("a",void 0,(anchor=>{anchor.text="HERE";anchor.addEventListener("click",(()=>{this.showPluginSyncModal()}))})));a2.appendText(" to open the config sync dialog , or press elsewhere to dismiss this message.")}))})),updatedPluginKey="popupUpdated-plugins";scheduleTask(updatedPluginKey,1e3,(async()=>{var _a8;const popup=await memoIfNotExist(updatedPluginKey,(()=>new import_obsidian.Notice(fragment,0)));(null==(_a8=null==popup?void 0:popup.noticeEl)?void 0:_a8.isShown())||memoObject(updatedPluginKey,new import_obsidian.Notice(fragment,0));scheduleTask(updatedPluginKey+"-close",2e4,(()=>{var _a9;const popup2=retrieveMemoObject(updatedPluginKey);if(popup2){(null==(_a9=null==popup2?void 0:popup2.noticeEl)?void 0:_a9.isShown())&&popup2.hide();disposeMemoObject(updatedPluginKey)}}))}))}return!0}async _everyRealizeSettingSyncMode(){var _a8;null==(_a8=this.periodicPluginSweepProcessor)||_a8.disable();if(!this._isMainReady)return!0;if(!this._isMainSuspended())return!0;if(!this.isThisModuleEnabled())return!0;this.settings.autoSweepPlugins&&await this.scanAllConfigFiles(!1);this.periodicPluginSweepProcessor.enable(this.settings.autoSweepPluginsPeriodic&&!this.settings.watchInternalFileChanges?6e4:0);return!0}async makeEntryFromFile(path2){const stat=await this.plugin.storageAccess.statHidden(path2);let version2,displayName;if(!stat)return!1;const contentBin=await this.plugin.storageAccess.readHiddenFileBinary(path2);let content;try{content=await arrayBufferToBase64(contentBin);if(path2.toLowerCase().endsWith("/manifest.json")){const v2=readString(new Uint8Array(contentBin));try{const json=JSON.parse(v2);"version"in json&&(version2=`${json.version}`);"name"in json&&(displayName=`${json.name}`)}catch(ex){this._log(`Configuration sync data: ${path2} looks like manifest, but could not read the version`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE)}}}catch(ex){this._log(`The file ${path2} could not be encoded`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}const mtime=stat.mtime;return{filename:path2.substring(this.app.vault.configDir.length+1),data:content,mtime,size:stat.size,version:version2,displayName}}async storeCustomisationFileV2(path2,term,force=!1){const vf=this.filenameWithUnifiedKey(path2,term);return await serialized(`plugin-${vf}`,(async()=>{const prefixedFileName=vf,id=await this.path2id(prefixedFileName),stat=await this.plugin.storageAccess.statHidden(path2);if(!stat)return!1;const mtime=stat.mtime,content=await this.plugin.storageAccess.readHiddenFileBinary(path2),contentBlob=createBlob([DUMMY_HEAD,DUMMY_END,...await arrayBufferToBase64(content)]);try{const old=await this.localDatabase.getDBEntryMeta(prefixedFileName,void 0,!1);let saveData;if(!1===old)saveData={_id:id,path:prefixedFileName,data:contentBlob,mtime,ctime:mtime,datatype:"plain",size:contentBlob.size,children:[],deleted:!1,type:"plain",eden:{}};else{if(isMarkedAsSameChanges(prefixedFileName,[old.mtime,mtime+1])==EVEN){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Skipped (Already checked the same)`,LOG_LEVEL_DEBUG);return}const docXDoc=await this.localDatabase.getDBEntryFromMeta(old,!1,!1);if(0==docXDoc)throw"Could not load the document";const dataSrc=getDocData(docXDoc.data),dataStart=dataSrc.indexOf(DUMMY_END),oldContent=dataSrc.substring(dataStart+DUMMY_END.length),oldContentArray=base64ToArrayBuffer(oldContent);if(await isDocContentSame(oldContentArray,content)){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Skipped (the same content)`,LOG_LEVEL_VERBOSE);markChangesAreSame(prefixedFileName,old.mtime,mtime+1);return!0}saveData={...old,data:contentBlob,mtime,size:contentBlob.size,datatype:"plain",children:[],deleted:!1,type:"plain"}}const ret=await this.localDatabase.putDBEntry(saveData);this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Done`);fireAndForget((()=>this.updatePluginListV2(!1,this.filenameWithUnifiedKey(path2))));return ret}catch(ex){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}))}async storeCustomizationFiles(path2,termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName();if(""==term){this._log("We have to configure the device name",LOG_LEVEL_NOTICE);return}if(this.useV2)return await this.storeCustomisationFileV2(path2,term);const vf=this.filenameToUnifiedKey(path2,term);return await serialized(`plugin-${vf}`,(async()=>{const category=this.getFileCategory(path2);let mtime=0,fileTargets=[];const name="CONFIG"==category||"SNIPPET"==category?path2.split("/").reverse()[0]:path2.split("/").reverse()[1],parentPath=path2.split("/").slice(0,-1).join("/"),prefixedFileName=this.filenameToUnifiedKey(path2,term),id=await this.path2id(prefixedFileName),dt={category,files:[],name,mtime:0,term};if("CONFIG"==category||"SNIPPET"==category||"PLUGIN_ETC"==category||"PLUGIN_DATA"==category){fileTargets=[path2];"PLUGIN_ETC"==category&&(dt.displayName=path2.split("/").slice(-1).join("/"))}else"PLUGIN_MAIN"==category?fileTargets=["manifest.json","main.js","styles.css"].map((e3=>`${parentPath}/${e3}`)):"THEME"==category&&(fileTargets=["manifest.json","theme.css"].map((e3=>`${parentPath}/${e3}`)));for(const target of fileTargets){const data=await this.makeEntryFromFile(target);if(0!=data){data.version&&(dt.version=data.version);data.displayName&&(dt.displayName=data.displayName);mtime=0==mtime?data.mtime:(data.mtime+mtime)/2;dt.files.push(data)}else this._log(`Config: skipped (Possibly is not exist): ${target} `,LOG_LEVEL_VERBOSE)}dt.mtime=mtime;if(0==dt.files.length){this._log(`Nothing left: deleting.. ${path2}`);await this.deleteConfigOnDatabase(prefixedFileName);await this.updatePluginList(!1,prefixedFileName);return}const content=createTextBlob(serialize(dt));try{const old=await this.localDatabase.getDBEntryMeta(prefixedFileName,void 0,!1);let saveData;if(!1===old)saveData={_id:id,path:prefixedFileName,data:content,mtime,ctime:mtime,datatype:"newnote",size:content.size,children:[],deleted:!1,type:"newnote",eden:{}};else{if(old.mtime==mtime)return!0;const oldC=await this.localDatabase.getDBEntryFromMeta(old,!1,!1);if(oldC){const d4=await deserialize(getDocDataAsArray(oldC.data),{});if(d4.files.length==dt.files.length){const diffs=d4.files.map((previous=>({prev:previous,curr:dt.files.find((e3=>e3.filename==previous.filename))}))).map((async e3=>{var _a8,_b5;try{return await isDocContentSame(null!=(_b5=null==(_a8=e3.curr)?void 0:_a8.data)?_b5:[],e3.prev.data)}catch(e4){return!1}}));if((await Promise.all(diffs)).every((e3=>1==e3))){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Skipped (Same content)`,LOG_LEVEL_VERBOSE);return!0}}}saveData={...old,data:content,mtime,size:content.size,datatype:"newnote",children:[],deleted:!1,type:"newnote"}}const ret=await this.localDatabase.putDBEntry(saveData);await this.updatePluginList(!1,saveData.path);this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Done`);return ret}catch(ex){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}))}async _anyProcessOptionalFileEvent(path2){return await this.watchVaultRawEventsAsync(path2)}async watchVaultRawEventsAsync(path2){if(!this._isMainReady)return!1;if(this._isMainSuspended())return!1;if(!this.isThisModuleEnabled())return!1;const stat=await this.plugin.storageAccess.statHidden(path2);if(stat&&"file"!=stat.type)return!1;const configDir=normalizePath(this.app.vault.configDir);if(Object.values(this.settings.pluginSyncExtendedSetting).filter((e3=>e3.mode!=MODE_SELECTIVE&&e3.mode!=MODE_SHINY)).map((e3=>e3.files)).flat().map((e3=>`${configDir}/${e3}`.toLowerCase())).some((e3=>e3.startsWith(path2.toLowerCase())))){this._log(`Customization file skipped: ${path2}`,LOG_LEVEL_VERBOSE);return!1}const storageMTime=~~((stat&&stat.mtime||0)/1e3),key3=`${path2}-${storageMTime}`;if(this.recentProcessedInternalFiles.contains(key3))return!0;this.recentProcessedInternalFiles=[key3,...this.recentProcessedInternalFiles].slice(0,100);scheduleTask(this.filenameToUnifiedKey(path2),100,(async()=>{await this.storeCustomizationFiles(path2)}));return!0}async scanAllConfigFiles(showMessage){await shareRunningResult("scanAllConfigFiles",(async()=>{var _a8;const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;this._log("Scanning customizing files.",logLevel,"scan-all-config");const term=this.services.setting.getDeviceAndVaultName();if(""==term){this._log("We have to configure the device name",LOG_LEVEL_NOTICE);return}const filesAll=await this.scanInternalFiles();if(this.useV2){const filesAllUnified=filesAll.filter((e3=>this.isTargetPath(e3))).map((e3=>[this.filenameWithUnifiedKey(e3,term),e3])),localFileMap=new Map(filesAllUnified.map((e3=>[e3[0],e3[1]]))),prefix=this.unifiedKeyPrefixOfTerminal(term),entries2=this.localDatabase.findEntries(prefix+"",`${prefix}􏿿`,{include_docs:!0}),tasks3=[],semaphore=Semaphore(10);for await(const item of entries2)-1===item.path.indexOf("%")&&tasks3.push((async()=>{const releaser=await semaphore.acquire();try{const unifiedFilenameWithKey=`${item._id}`,localPath=localFileMap.get(unifiedFilenameWithKey);if(localPath){await this.storeCustomisationFileV2(localPath,term);localFileMap.delete(unifiedFilenameWithKey)}else await this.deleteConfigOnDatabase(unifiedFilenameWithKey)}catch(ex){this._log(`scanAllConfigFiles - Error: ${item._id}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}finally{releaser()}}));await Promise.all(tasks3.map((e3=>e3())));const taskExtra=[];for(const[,filePath]of localFileMap)taskExtra.push((async()=>{const releaser=await semaphore.acquire();try{await this.storeCustomisationFileV2(filePath,term)}catch(ex){this._log(`scanAllConfigFiles - Error: ${filePath}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}finally{releaser()}}));await Promise.all(taskExtra.map((e3=>e3())));fireAndForget((()=>this.updatePluginList(!1)))}else{const files=filesAll.filter((e3=>this.isTargetPath(e3))).map((e3=>({key:this.filenameToUnifiedKey(e3),file:e3}))),virtualPathsOfLocalFiles=[...new Set(files.map((e3=>e3.key)))];let deleteCandidate=(await this.localDatabase.allDocsRaw({startkey:ICXHeader+"",endkey:`${ICXHeader}􏿿`,include_docs:!0})).rows.map((e3=>e3.doc)).filter((e3=>!e3.deleted)).map((e3=>this.getPath(e3))).filter((e3=>e3.startsWith(`${ICXHeader}${term}/`)));for(const vp of virtualPathsOfLocalFiles){const p4=null==(_a8=files.find((e3=>e3.key==vp)))?void 0:_a8.file;if(p4){await this.storeCustomizationFiles(p4);deleteCandidate=deleteCandidate.filter((e3=>e3!=vp))}else this._log(`scanAllConfigFiles - File not found: ${vp}`,LOG_LEVEL_VERBOSE)}for(const vp of deleteCandidate)await this.deleteConfigOnDatabase(vp);fireAndForget((()=>this.updatePluginList(!1)))}}))}async deleteConfigOnDatabase(prefixedFileName,forceWrite=!1){const mtime=(new Date).getTime();return await serialized("file-x-"+prefixedFileName,(async()=>{try{const old=await this.localDatabase.getDBEntryMeta(prefixedFileName,void 0,!1);let saveData;if(!1===old){this._log(`STORAGE -x> DB:${prefixedFileName}: (config) already deleted (Not found on database)`);return!0}if(old.deleted){this._log(`STORAGE -x> DB:${prefixedFileName}: (config) already deleted`);return!0}saveData={...old,mtime,size:0,children:[],deleted:!0,type:"newnote"};await this.localDatabase.putRaw(saveData);await this.updatePluginList(!1,prefixedFileName);this._log(`STORAGE -x> DB:${prefixedFileName}: (config) Done`);return!0}catch(ex){this._log(`STORAGE -x> DB:${prefixedFileName}: (config) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}))}async scanInternalFiles(){return(await this.getFiles(this.app.vault.configDir,2)).filter((e3=>e3.startsWith("."))).filter((e3=>!e3.startsWith(".trash")))}async _allAskUsingOptionalSyncFeature(opt){await this.__askHiddenFileConfiguration(opt);return!0}async __askHiddenFileConfiguration(opt){const choices=[];choices.push("Yes, Enable it");choices.push("No, Disable it");choices.push("Later");const ret=await this.plugin.confirm.askSelectStringDialogue("Would you like to enable **Customization sync**?\n\n> [!DETAILS]-\n> This feature allows you to sync your customisations -- such as configurations, themes, snippets, and plugins -- across your devices in a fully controlled manner, unlike the fully automatic behaviour of hidden file synchronisation.\n> \n> You may use this feature alongside hidden file synchronisation. When both features are enabled, items configured as `Automatic` in this feature will be managed by **hidden file synchronisation**.\n> Do not worry, you will be prompted to enable or keep disabled **hidden file synchronisation** after this dialogue.\n",choices,{defaultAction:"Later",timeout:40,title:"Customisation sync"});"Yes, Enable it"==ret?await this.configureHiddenFileSync("CUSTOMIZE"):"No, Disable it"==ret&&await this.configureHiddenFileSync("DISABLE_CUSTOM")}_anyGetOptionalConflictCheckMethod(path2){return isPluginMetadata(path2)||isCustomisationSyncMetadata(path2)?Promise.resolve("newer"):Promise.resolve(!1)}_allSuspendExtraSync(){if(this.plugin.settings.usePluginSync||this.plugin.settings.autoSweepPlugins){this._log("Customisation sync have been temporarily disabled. Please enable them after the fetching, if you need them.",LOG_LEVEL_NOTICE);this.plugin.settings.usePluginSync=!1;this.plugin.settings.autoSweepPlugins=!1}return Promise.resolve(!0)}async _allConfigureOptionalSyncFeature(mode){await this.configureHiddenFileSync(mode);return!0}async configureHiddenFileSync(mode){if("DISABLE"!=mode){if("CUSTOMIZE"==mode){if(!this.services.setting.getDeviceAndVaultName()){let name=await this.plugin.confirm.askString("Device name","Please set this device name","desktop");if(!name){name=import_obsidian.Platform.isAndroidApp?"android-app":import_obsidian.Platform.isIosApp?"ios":import_obsidian.Platform.isMacOS?"macos":import_obsidian.Platform.isMobileApp?"mobile-app":import_obsidian.Platform.isMobile?"mobile":import_obsidian.Platform.isSafari?"safari":import_obsidian.Platform.isDesktop?"desktop":import_obsidian.Platform.isDesktopApp?"desktop-app":"unknown";name+=Math.random().toString(36).slice(-4)}this.services.setting.setDeviceAndVaultName(name)}this.plugin.settings.usePluginSync=!0;this.plugin.settings.useAdvancedMode=!0;await this.plugin.saveSettings();await this.scanAllConfigFiles(!0)}}else{this.plugin.settings.usePluginSync=!1;await this.plugin.saveSettings()}}async getFiles(path2,lastDepth){if(-1==lastDepth)return[];let w2;try{w2=await this.app.vault.adapter.list(path2)}catch(ex){this._log(`Could not traverse(ConfigSync):${path2}`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE);return[]}let files=[...w2.files];for(const v2 of w2.folders)files=files.concat(await this.getFiles(v2,lastDepth-1));return files}onBindFunction(core,services){services.fileProcessing.handleOptionalFileEvent(this._anyProcessOptionalFileEvent.bind(this));services.conflict.handleGetOptionalConflictCheckMethod(this._anyGetOptionalConflictCheckMethod.bind(this));services.replication.handleProcessVirtualDocuments(this._anyModuleParsedReplicationResultItem.bind(this));services.setting.handleOnRealiseSetting(this._everyRealizeSettingSyncMode.bind(this));services.appLifecycle.handleOnResuming(this._everyOnResumeProcess.bind(this));services.appLifecycle.handleOnResumed(this._everyAfterResumeProcess.bind(this));services.replication.handleBeforeReplicate(this._everyBeforeReplicate.bind(this));services.databaseEvents.handleDatabaseInitialised(this._everyOnDatabaseInitialized.bind(this));services.setting.handleSuspendExtraSync(this._allSuspendExtraSync.bind(this));services.setting.handleSuggestOptionalFeatures(this._allAskUsingOptionalSyncFeature.bind(this));services.setting.handleEnableOptionalFeature(this._allConfigureOptionalSyncFeature.bind(this))}};getHttpHandlerExtensionConfiguration=runtimeConfig=>({setHttpHandler(handler){runtimeConfig.httpHandler=handler},httpHandler:()=>runtimeConfig.httpHandler,updateHttpClientConfig(key3,value){var _a8;null==(_a8=runtimeConfig.httpHandler)||_a8.updateHttpClientConfig(key3,value)},httpHandlerConfigs:()=>runtimeConfig.httpHandler.httpHandlerConfigs()});resolveHttpHandlerRuntimeConfig=httpHandlerExtensionConfiguration=>({httpHandler:httpHandlerExtensionConfiguration.httpHandler()});(function(HttpAuthLocation2){HttpAuthLocation2.HEADER="header";HttpAuthLocation2.QUERY="query"})(HttpAuthLocation||(HttpAuthLocation={}));(function(HttpApiKeyAuthLocation2){HttpApiKeyAuthLocation2.HEADER="header";HttpApiKeyAuthLocation2.QUERY="query"})(HttpApiKeyAuthLocation||(HttpApiKeyAuthLocation={}));(function(EndpointURLScheme2){EndpointURLScheme2.HTTP="http";EndpointURLScheme2.HTTPS="https"})(EndpointURLScheme||(EndpointURLScheme={}));(function(AlgorithmId2){AlgorithmId2.MD5="md5";AlgorithmId2.CRC32="crc32";AlgorithmId2.CRC32C="crc32c";AlgorithmId2.SHA1="sha1";AlgorithmId2.SHA256="sha256"})(AlgorithmId||(AlgorithmId={}));(function(FieldPosition2){FieldPosition2[FieldPosition2.HEADER=0]="HEADER";FieldPosition2[FieldPosition2.TRAILER=1]="TRAILER"})(FieldPosition||(FieldPosition={}));SMITHY_CONTEXT_KEY="__smithy_context";(function(IniSectionType2){IniSectionType2.PROFILE="profile";IniSectionType2.SSO_SESSION="sso-session";IniSectionType2.SERVICES="services"})(IniSectionType||(IniSectionType={}));(function(RequestHandlerProtocol2){RequestHandlerProtocol2.HTTP_0_9="http/0.9";RequestHandlerProtocol2.HTTP_1_0="http/1.0";RequestHandlerProtocol2.TDS_8_0="tds/8.0"})(RequestHandlerProtocol||(RequestHandlerProtocol={}));HttpRequest=class _HttpRequest{constructor(options){this.method=options.method||"GET";this.hostname=options.hostname||"localhost";this.port=options.port;this.query=options.query||{};this.headers=options.headers||{};this.body=options.body;this.protocol=options.protocol?":"!==options.protocol.slice(-1)?`${options.protocol}:`:options.protocol:"https:";this.path=options.path?"/"!==options.path.charAt(0)?`/${options.path}`:options.path:"/";this.username=options.username;this.password=options.password;this.fragment=options.fragment}static clone(request2){const cloned=new _HttpRequest({...request2,headers:{...request2.headers}});cloned.query&&(cloned.query=cloneQuery(cloned.query));return cloned}static isInstance(request2){if(!request2)return!1;const req=request2;return"method"in req&&"protocol"in req&&"hostname"in req&&"path"in req&&"object"==typeof req.query&&"object"==typeof req.headers}clone(){return _HttpRequest.clone(this)}};HttpResponse=class{constructor(options){this.statusCode=options.statusCode;this.reason=options.reason;this.headers=options.headers||{};this.body=options.body}static isInstance(response){if(!response)return!1;const resp=response;return"number"==typeof resp.statusCode&&"object"==typeof resp.headers}};addExpectContinueMiddlewareOptions={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0};getAddExpectContinuePlugin=options=>({applyToStack:clientStack=>{clientStack.add(addExpectContinueMiddleware(options),addExpectContinueMiddlewareOptions)}});DEFAULT_REQUEST_CHECKSUM_CALCULATION=(RequestChecksumCalculation={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"}).WHEN_SUPPORTED;ResponseChecksumValidation={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"};DEFAULT_RESPONSE_CHECKSUM_VALIDATION=RequestChecksumCalculation.WHEN_SUPPORTED;(function(ChecksumAlgorithm3){ChecksumAlgorithm3.MD5="MD5";ChecksumAlgorithm3.CRC32="CRC32";ChecksumAlgorithm3.CRC32C="CRC32C";ChecksumAlgorithm3.CRC64NVME="CRC64NVME";ChecksumAlgorithm3.SHA1="SHA1";ChecksumAlgorithm3.SHA256="SHA256"})(ChecksumAlgorithm||(ChecksumAlgorithm={}));(function(ChecksumLocation2){ChecksumLocation2.HEADER="header";ChecksumLocation2.TRAILER="trailer"})(ChecksumLocation||(ChecksumLocation={}));DEFAULT_CHECKSUM_ALGORITHM=ChecksumAlgorithm.CRC32;(function(SelectorType3){SelectorType3.ENV="env";SelectorType3.CONFIG="shared config entry"})(SelectorType||(SelectorType={}));getDateHeader=response=>{var _a8,_b5,_c3;return HttpResponse.isInstance(response)?null!=(_c3=null==(_a8=response.headers)?void 0:_a8.date)?_c3:null==(_b5=response.headers)?void 0:_b5.Date:void 0};getSkewCorrectedDate=systemClockOffset=>new Date(Date.now()+systemClockOffset);isClockSkewed=(clockTime,systemClockOffset)=>Math.abs(getSkewCorrectedDate(systemClockOffset).getTime()-clockTime)>=3e5;getUpdatedSystemClockOffset=(clockTime,currentSystemClockOffset)=>{const clockTimeInMs=Date.parse(clockTime);return isClockSkewed(clockTimeInMs,currentSystemClockOffset)?clockTimeInMs-Date.now():currentSystemClockOffset};throwSigningPropertyError=(name,property)=>{if(!property)throw new Error(`Property \`${name}\` is not resolved for AWS SDK SigV4Auth`);return property};validateSigningProperties=async signingProperties=>{var _a8,_b5,_c3;const context2=throwSigningPropertyError("context",signingProperties.context),config=throwSigningPropertyError("config",signingProperties.config),authScheme=null==(_c3=null==(_b5=null==(_a8=context2.endpointV2)?void 0:_a8.properties)?void 0:_b5.authSchemes)?void 0:_c3[0],signerFunction=throwSigningPropertyError("signer",config.signer);return{config,signer:await signerFunction(authScheme),signingRegion:null==signingProperties?void 0:signingProperties.signingRegion,signingRegionSet:null==signingProperties?void 0:signingProperties.signingRegionSet,signingName:null==signingProperties?void 0:signingProperties.signingName}};AwsSdkSigV4Signer=class{async sign(httpRequest,identity,signingProperties){var _a8,_b5,_c3,_d2;if(!HttpRequest.isInstance(httpRequest))throw new Error("The request is not an instance of `HttpRequest` and cannot be signed");const validatedProps=await validateSigningProperties(signingProperties),{config,signer}=validatedProps;let{signingRegion,signingName}=validatedProps;const handlerExecutionContext=signingProperties.context;if(null!=(_b5=null==(_a8=null==handlerExecutionContext?void 0:handlerExecutionContext.authSchemes)?void 0:_a8.length)&&_b5){const[first,second]=handlerExecutionContext.authSchemes;if("sigv4a"===(null==first?void 0:first.name)&&"sigv4"===(null==second?void 0:second.name)){signingRegion=null!=(_c3=null==second?void 0:second.signingRegion)?_c3:signingRegion;signingName=null!=(_d2=null==second?void 0:second.signingName)?_d2:signingName}}return await signer.sign(httpRequest,{signingDate:getSkewCorrectedDate(config.systemClockOffset),signingRegion,signingService:signingName})}errorHandler(signingProperties){return error=>{var _a8;const serverTime=null!=(_a8=error.ServerTime)?_a8:getDateHeader(error.$response);if(serverTime){const config=throwSigningPropertyError("config",signingProperties.config),initialSystemClockOffset=config.systemClockOffset;config.systemClockOffset=getUpdatedSystemClockOffset(serverTime,config.systemClockOffset);config.systemClockOffset!==initialSystemClockOffset&&error.$metadata&&(error.$metadata.clockSkewCorrected=!0)}throw error}}successHandler(httpResponse,signingProperties){const dateHeader=getDateHeader(httpResponse);if(dateHeader){const config=throwSigningPropertyError("config",signingProperties.config);config.systemClockOffset=getUpdatedSystemClockOffset(dateHeader,config.systemClockOffset)}}};AwsSdkSigV4ASigner=class extends AwsSdkSigV4Signer{async sign(httpRequest,identity,signingProperties){var _a8,_b5;if(!HttpRequest.isInstance(httpRequest))throw new Error("The request is not an instance of `HttpRequest` and cannot be signed");const{config,signer,signingRegion,signingRegionSet,signingName}=await validateSigningProperties(signingProperties),configResolvedSigningRegionSet=await(null==(_a8=config.sigv4aSigningRegionSet)?void 0:_a8.call(config)),multiRegionOverride=(null!=(_b5=null!=configResolvedSigningRegionSet?configResolvedSigningRegionSet:signingRegionSet)?_b5:[signingRegion]).join(",");return await signer.sign(httpRequest,{signingDate:getSkewCorrectedDate(config.systemClockOffset),signingRegion:multiRegionOverride,signingService:signingName})}};getSmithyContext2=context2=>context2.__smithy_context||(context2.__smithy_context={});normalizeProvider=input=>{if("function"==typeof input)return input;const promisified=Promise.resolve(input);return()=>promisified};resolveAuthOptions=(candidateAuthOptions,authSchemePreference)=>{if(!authSchemePreference||0===authSchemePreference.length)return candidateAuthOptions;const preferredAuthOptions=[];for(const preferredSchemeName of authSchemePreference)for(const candidateAuthOption of candidateAuthOptions)candidateAuthOption.schemeId.split("#")[1]===preferredSchemeName&&preferredAuthOptions.push(candidateAuthOption);for(const candidateAuthOption of candidateAuthOptions)preferredAuthOptions.find((({schemeId})=>schemeId===candidateAuthOption.schemeId))||preferredAuthOptions.push(candidateAuthOption);return preferredAuthOptions};httpAuthSchemeMiddleware=(config,mwOptions)=>(next2,context2)=>async args=>{var _a8;const options=config.httpAuthSchemeProvider(await mwOptions.httpAuthSchemeParametersProvider(config,context2,args.input)),authSchemePreference=config.authSchemePreference?await config.authSchemePreference():[],resolvedOptions=resolveAuthOptions(options,authSchemePreference),authSchemes=convertHttpAuthSchemesToMap(config.httpAuthSchemes),smithyContext=getSmithyContext2(context2),failureReasons=[];for(const option of resolvedOptions){const scheme=authSchemes.get(option.schemeId);if(!scheme){failureReasons.push(`HttpAuthScheme \`${option.schemeId}\` was not enabled for this service.`);continue}const identityProvider=scheme.identityProvider(await mwOptions.identityProviderConfigProvider(config));if(!identityProvider){failureReasons.push(`HttpAuthScheme \`${option.schemeId}\` did not have an IdentityProvider configured.`);continue}const{identityProperties={},signingProperties={}}=(null==(_a8=option.propertiesExtractor)?void 0:_a8.call(option,config,context2))||{};option.identityProperties=Object.assign(option.identityProperties||{},identityProperties);option.signingProperties=Object.assign(option.signingProperties||{},signingProperties);smithyContext.selectedHttpAuthScheme={httpAuthOption:option,identity:await identityProvider(option.identityProperties),signer:scheme.signer};break}if(!smithyContext.selectedHttpAuthScheme)throw new Error(failureReasons.join("\n"));return next2(args)};httpAuthSchemeEndpointRuleSetMiddlewareOptions={step:"serialize",tags:["HTTP_AUTH_SCHEME"],name:"httpAuthSchemeMiddleware",override:!0,relation:"before",toMiddleware:"endpointV2Middleware"};getHttpAuthSchemeEndpointRuleSetPlugin=(config,{httpAuthSchemeParametersProvider,identityProviderConfigProvider})=>({applyToStack:clientStack=>{clientStack.addRelativeTo(httpAuthSchemeMiddleware(config,{httpAuthSchemeParametersProvider,identityProviderConfigProvider}),httpAuthSchemeEndpointRuleSetMiddlewareOptions)}});deserializerMiddleware=(options,deserializer)=>(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2;const{response}=await next2(args);try{return{response,output:await deserializer(response,options)}}catch(error){Object.defineProperty(error,"$response",{value:response});if(!("$metadata"in error)){const hint="Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.";try{error.message+="\n "+hint}catch(e3){context2.logger&&"NoOpLogger"!==(null==(_b5=null==(_a8=context2.logger)?void 0:_a8.constructor)?void 0:_b5.name)?null==(_d2=null==(_c3=context2.logger)?void 0:_c3.warn)||_d2.call(_c3,hint):console.warn(hint)}void 0!==error.$responseBodyText&&error.$response&&(error.$response.body=error.$responseBodyText);try{if(HttpResponse.isInstance(response)){const{headers={}}=response,headerEntries=Object.entries(headers);error.$metadata={httpStatusCode:response.statusCode,requestId:findHeader(/^x-[\w-]+-request-?id$/,headerEntries),extendedRequestId:findHeader(/^x-[\w-]+-id-2$/,headerEntries),cfId:findHeader(/^x-[\w-]+-cf-id$/,headerEntries)}}}catch(e3){}}throw error}};findHeader=(pattern,headers)=>(headers.find((([k2])=>k2.match(pattern)))||[void 0,void 0])[1];serializerMiddleware=(options,serializer)=>(next2,context2)=>async args=>{var _a8;const endpoint=(null==(_a8=context2.endpointV2)?void 0:_a8.url)&&options.urlParser?async()=>options.urlParser(context2.endpointV2.url):options.endpoint;if(!endpoint)throw new Error("No valid endpoint provider available.");const request2=await serializer(args.input,{...options,endpoint});return next2({...args,request:request2})};deserializerMiddlewareOption={name:"deserializerMiddleware",step:"deserialize",tags:["DESERIALIZER"],override:!0};(serializerMiddlewareOption={name:"serializerMiddleware",step:"serialize",tags:["SERIALIZER"],override:!0}).name;defaultErrorHandler=signingProperties=>error=>{throw error};defaultSuccessHandler=(httpResponse,signingProperties)=>{};httpSigningMiddleware=config=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const scheme=getSmithyContext2(context2).selectedHttpAuthScheme;if(!scheme)throw new Error("No HttpAuthScheme was selected: unable to sign request");const{httpAuthOption:{signingProperties={}},identity,signer}=scheme,output=await next2({...args,request:await signer.sign(args.request,identity,signingProperties)}).catch((signer.errorHandler||defaultErrorHandler)(signingProperties));(signer.successHandler||defaultSuccessHandler)(output.response,signingProperties);return output};httpSigningMiddlewareOptions={step:"finalizeRequest",tags:["HTTP_SIGNING"],name:"httpSigningMiddleware",aliases:["apiKeyMiddleware","tokenMiddleware","awsAuthMiddleware"],override:!0,relation:"after",toMiddleware:"retryMiddleware"};getHttpSigningPlugin=config=>({applyToStack:clientStack=>{clientStack.addRelativeTo(httpSigningMiddleware(),httpSigningMiddlewareOptions)}});normalizeProvider2=input=>{if("function"==typeof input)return input;const promisified=Promise.resolve(input);return()=>promisified};alphabetByEncoding={};alphabetByValue=new Array(64);for(let i2=0,start="A".charCodeAt(0),limit="Z".charCodeAt(0);i2+start<=limit;i2++){const char=String.fromCharCode(i2+start);alphabetByEncoding[char]=i2;alphabetByValue[i2]=char}for(let i2=0,start="a".charCodeAt(0),limit="z".charCodeAt(0);i2+start<=limit;i2++){const char=String.fromCharCode(i2+start),index6=i2+26;alphabetByEncoding[char]=index6;alphabetByValue[index6]=char}for(let i2=0;i2<10;i2++){alphabetByEncoding[i2.toString(10)]=i2+52;const char=i2.toString(10),index6=i2+52;alphabetByEncoding[char]=index6;alphabetByValue[index6]=char}alphabetByEncoding["+"]=62;alphabetByValue[62]="+";alphabetByEncoding["/"]=63;alphabetByValue[63]="/";bitsPerLetter=6;bitsPerByte=8;maxLetterValue=63;fromBase64=input=>{let totalByteLength=input.length/4*3;"=="===input.slice(-2)?totalByteLength-=2:"="===input.slice(-1)&&totalByteLength--;const out=new ArrayBuffer(totalByteLength),dataView=new DataView(out);for(let i2=0;i2>=bitsPerLetter;const chunkOffset=i2/4*3;bits2>>=bitLength%bitsPerByte;const byteLength=Math.floor(bitLength/bitsPerByte);for(let k2=0;k2>offset)}}return new Uint8Array(out)};fromUtf8=input=>(new TextEncoder).encode(input);toUint8Array=data=>"string"==typeof data?fromUtf8(data):ArrayBuffer.isView(data)?new Uint8Array(data.buffer,data.byteOffset,data.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(data);toUtf8=input=>{if("string"==typeof input)return input;if("object"!=typeof input||"number"!=typeof input.byteOffset||"number"!=typeof input.byteLength)throw new Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return new TextDecoder("utf-8").decode(input)};Uint8ArrayBlobAdapter=class _Uint8ArrayBlobAdapter extends Uint8Array{static fromString(source2,encoding="utf-8"){switch(typeof source2){case"string":return transformFromString(source2,encoding);default:throw new Error(`Unsupported conversion from ${typeof source2} to Uint8ArrayBlobAdapter.`)}}static mutate(source2){Object.setPrototypeOf(source2,_Uint8ArrayBlobAdapter.prototype);return source2}transformToString(encoding="utf-8"){return transformToString(this,encoding)}};ReadableStreamRef="function"==typeof ReadableStream?ReadableStream:function(){};ChecksumStream=class extends ReadableStreamRef{};isReadableStream=stream=>{var _a8;return"function"==typeof ReadableStream&&((null==(_a8=null==stream?void 0:stream.constructor)?void 0:_a8.name)===ReadableStream.name||stream instanceof ReadableStream)};createChecksumStream=({expectedChecksum,checksum,source:source2,checksumSourceLocation,base64Encoder})=>{var _a8,_b5;if(!isReadableStream(source2))throw new Error(`@smithy/util-stream: unsupported source type ${null!=(_b5=null==(_a8=null==source2?void 0:source2.constructor)?void 0:_a8.name)?_b5:source2} in ChecksumStream.`);const encoder2=null!=base64Encoder?base64Encoder:toBase64;if("function"!=typeof TransformStream)throw new Error("@smithy/util-stream: unable to instantiate ChecksumStream because API unavailable: ReadableStream/TransformStream.");const transform2=new TransformStream({start(){},async transform(chunk,controller){checksum.update(chunk);controller.enqueue(chunk)},async flush(controller){const digest=await checksum.digest(),received=encoder2(digest);if(expectedChecksum!==received){const error=new Error(`Checksum mismatch: expected "${expectedChecksum}" but received "${received}" in response header "${checksumSourceLocation}".`);controller.error(error)}else controller.terminate()}});source2.pipeThrough(transform2);const readable2=transform2.readable;Object.setPrototypeOf(readable2,ChecksumStream.prototype);return readable2};ByteArrayCollector=class{constructor(allocByteArray){this.allocByteArray=allocByteArray;this.byteLength=0;this.byteArrays=[]}push(byteArray){this.byteArrays.push(byteArray);this.byteLength+=byteArray.byteLength}flush(){if(1===this.byteArrays.length){const bytes=this.byteArrays[0];this.reset();return bytes}const aggregation=this.allocByteArray(this.byteLength);let cursor=0;for(let i2=0;i2new Uint8Array(size2)))];let mode=-1;const pull=async controller=>{const{value,done}=await reader.read(),chunk=value;if(done){if(-1!==mode){const remainder=flush(buffers,mode);sizeOf(remainder)>0&&controller.enqueue(remainder)}controller.close()}else{const chunkMode=modeOf(chunk,!1);if(mode!==chunkMode){mode>=0&&controller.enqueue(flush(buffers,mode));mode=chunkMode}if(-1===mode){controller.enqueue(chunk);return}const chunkSize2=sizeOf(chunk);bytesSeen+=chunkSize2;const bufferSize=sizeOf(buffers[mode]);if(chunkSize2>=size&&0===bufferSize)controller.enqueue(chunk);else{const newSize=merge(buffers,mode,chunk);if(!streamBufferingLoggedWarning&&bytesSeen>2*size){streamBufferingLoggedWarning=!0;null==logger2||logger2.warn(`@smithy/util-stream - stream chunk size ${chunkSize2} is below threshold of ${size}, automatically buffering.`)}newSize>=size?controller.enqueue(flush(buffers,mode)):await pull(controller)}}};return new ReadableStream({pull})};getAwsChunkedEncodingStream=(readableStream,options)=>{const{base64Encoder,bodyLengthChecker,checksumAlgorithmFn,checksumLocationName,streamHasher}=options,checksumRequired=void 0!==base64Encoder&&void 0!==bodyLengthChecker&&void 0!==checksumAlgorithmFn&&void 0!==checksumLocationName&&void 0!==streamHasher,digest=checksumRequired?streamHasher(checksumAlgorithmFn,readableStream):void 0,reader=readableStream.getReader();return new ReadableStream({async pull(controller){const{value,done}=await reader.read();if(done){controller.enqueue("0\r\n");if(checksumRequired){const checksum=base64Encoder(await digest);controller.enqueue(`${checksumLocationName}:${checksum}\r\n`);controller.enqueue("\r\n")}controller.close()}else controller.enqueue(`${(bodyLengthChecker(value)||0).toString(16)}\r\n${value}\r\n`)}})};escapeUri=uri=>encodeURIComponent(uri).replace(/[!'()*]/g,hexEncode);hexEncode=c3=>`%${c3.charCodeAt(0).toString(16).toUpperCase()}`;keepAliveSupport={supported:void 0};FetchHttpHandler=class _FetchHttpHandler{static create(instanceOrOptions){return"function"==typeof(null==instanceOrOptions?void 0:instanceOrOptions.handle)?instanceOrOptions:new _FetchHttpHandler(instanceOrOptions)}constructor(options){if("function"==typeof options)this.configProvider=options().then((opts=>opts||{}));else{this.config=null!=options?options:{};this.configProvider=Promise.resolve(this.config)}void 0===keepAliveSupport.supported&&(keepAliveSupport.supported=Boolean("undefined"!=typeof Request&&"keepalive"in createRequest("https://[::1]")))}destroy(){}async handle(request2,{abortSignal}={}){var _a8,_b5,_c3;this.config||(this.config=await this.configProvider);const requestTimeoutInMs=this.config.requestTimeout,keepAlive=!0===this.config.keepAlive,credentials=this.config.credentials;if(null==abortSignal?void 0:abortSignal.aborted){const abortError=new Error("Request aborted");abortError.name="AbortError";return Promise.reject(abortError)}let path2=request2.path;const queryString=buildQueryString(request2.query||{});queryString&&(path2+=`?${queryString}`);request2.fragment&&(path2+=`#${request2.fragment}`);let auth="";null==request2.username&&null==request2.password||(auth=`${null!=(_a8=request2.username)?_a8:""}:${null!=(_b5=request2.password)?_b5:""}@`);const{port,method}=request2,url=`${request2.protocol}//${auth}${request2.hostname}${port?`:${port}`:""}${path2}`,body="GET"===method||"HEAD"===method?void 0:request2.body,requestOptions={body,headers:new Headers(request2.headers),method,credentials};(null==(_c3=this.config)?void 0:_c3.cache)&&(requestOptions.cache=this.config.cache);body&&(requestOptions.duplex="half");"undefined"!=typeof AbortController&&(requestOptions.signal=abortSignal);keepAliveSupport.supported&&(requestOptions.keepalive=keepAlive);"function"==typeof this.config.requestInit&&Object.assign(requestOptions,this.config.requestInit(request2));let removeSignalEventListener=()=>{};const fetchRequest=createRequest(url,requestOptions),raceOfPromises=[fetch(fetchRequest).then((response=>{const fetchHeaders=response.headers,transformedHeaders={};for(const pair of fetchHeaders.entries())transformedHeaders[pair[0]]=pair[1];return null!=response.body?{response:new HttpResponse({headers:transformedHeaders,reason:response.statusText,statusCode:response.status,body:response.body})}:response.blob().then((body2=>({response:new HttpResponse({headers:transformedHeaders,reason:response.statusText,statusCode:response.status,body:body2})})))})),requestTimeout(requestTimeoutInMs)];abortSignal&&raceOfPromises.push(new Promise(((resolve,reject)=>{const onAbort=()=>{const abortError=new Error("Request aborted");abortError.name="AbortError";reject(abortError)};if("function"==typeof abortSignal.addEventListener){const signal=abortSignal;signal.addEventListener("abort",onAbort,{once:!0});removeSignalEventListener=()=>signal.removeEventListener("abort",onAbort)}else abortSignal.onabort=onAbort})));return Promise.race(raceOfPromises).finally(removeSignalEventListener)}updateHttpClientConfig(key3,value){this.config=void 0;this.configProvider=this.configProvider.then((config=>{config[key3]=value;return config}))}httpHandlerConfigs(){var _a8;return null!=(_a8=this.config)?_a8:{}}};streamCollector=async stream=>{var _a8;return"function"==typeof Blob&&stream instanceof Blob||"Blob"===(null==(_a8=stream.constructor)?void 0:_a8.name)?void 0!==Blob.prototype.arrayBuffer?new Uint8Array(await stream.arrayBuffer()):collectBlob(stream):collectStream(stream)};SHORT_TO_HEX={};HEX_TO_SHORT={};for(let i2=0;i2<256;i2++){let encodedByte=i2.toString(16).toLowerCase();1===encodedByte.length&&(encodedByte=`0${encodedByte}`);SHORT_TO_HEX[i2]=encodedByte;HEX_TO_SHORT[encodedByte]=i2}sdkStreamMixin=stream=>{var _a8,_b5;if(!isBlobInstance(stream)&&!isReadableStream(stream)){const name=(null==(_b5=null==(_a8=null==stream?void 0:stream.__proto__)?void 0:_a8.constructor)?void 0:_b5.name)||stream;throw new Error(`Unexpected stream implementation, expect Blob or ReadableStream, got ${name}`)}let transformed=!1;const transformToByteArray=async()=>{if(transformed)throw new Error("The stream has already been transformed.");transformed=!0;return await streamCollector(stream)},blobToWebStream=blob=>{if("function"!=typeof blob.stream)throw new Error("Cannot transform payload Blob to web stream. Please make sure the Blob.stream() is polyfilled.\nIf you are using React Native, this API is not yet supported, see: https://react-native.canny.io/feature-requests/p/fetch-streaming-body");return blob.stream()};return Object.assign(stream,{transformToByteArray,transformToString:async encoding=>{const buf=await transformToByteArray();if("base64"===encoding)return toBase64(buf);if("hex"===encoding)return toHex2(buf);if(void 0===encoding||"utf8"===encoding||"utf-8"===encoding)return toUtf8(buf);if("function"==typeof TextDecoder)return new TextDecoder(encoding).decode(buf);throw new Error("TextDecoder is not available, please make sure polyfill is provided.")},transformToWebStream:()=>{if(transformed)throw new Error("The stream has already been transformed.");transformed=!0;if(isBlobInstance(stream))return blobToWebStream(stream);if(isReadableStream(stream))return stream;throw new Error(`Cannot transform payload to web stream, got ${stream}`)}})};isBlobInstance=stream=>"function"==typeof Blob&&stream instanceof Blob;collectBody=async(streamBody=new Uint8Array,context2)=>{if(streamBody instanceof Uint8Array)return Uint8ArrayBlobAdapter.mutate(streamBody);if(!streamBody)return Uint8ArrayBlobAdapter.mutate(new Uint8Array);const fromContext=context2.streamCollector(streamBody);return Uint8ArrayBlobAdapter.mutate(await fromContext)};resolvedPath=(resolvedPath2,input,memberName,labelValueProvider,uriLabel,isGreedyLabel)=>{if(null==input||void 0===input[memberName])throw new Error("No value provided for input HTTP label: "+memberName+".");{const labelValue=labelValueProvider();if(labelValue.length<=0)throw new Error("Empty value provided for input HTTP label: "+memberName+".");resolvedPath2=resolvedPath2.replace(uriLabel,isGreedyLabel?labelValue.split("/").map((segment=>extendedEncodeURIComponent(segment))).join("/"):extendedEncodeURIComponent(labelValue))}return resolvedPath2};RequestBuilder=class{constructor(input,context2){this.input=input;this.context=context2;this.query={};this.method="";this.headers={};this.path="";this.body=null;this.hostname="";this.resolvePathStack=[]}async build(){const{hostname,protocol="https",port,path:basePath}=await this.context.endpoint();this.path=basePath;for(const resolvePath of this.resolvePathStack)resolvePath(this.path);return new HttpRequest({protocol,hostname:this.hostname||hostname,port,method:this.method,path:this.path,query:this.query,body:this.body,headers:this.headers})}hn(hostname){this.hostname=hostname;return this}bp(uriLabel){this.resolvePathStack.push((basePath=>{this.path=`${(null==basePath?void 0:basePath.endsWith("/"))?basePath.slice(0,-1):basePath||""}`+uriLabel}));return this}p(memberName,labelValueProvider,uriLabel,isGreedyLabel){this.resolvePathStack.push((path2=>{this.path=resolvedPath(path2,this.input,memberName,labelValueProvider,uriLabel,isGreedyLabel)}));return this}h(headers){this.headers=headers;return this}q(query3){this.query=query3;return this}b(body){this.body=body;return this}m(method){this.method=method;return this}};DefaultIdentityProviderConfig=class{constructor(config){this.authSchemes=new Map;for(const[key3,value]of Object.entries(config))void 0!==value&&this.authSchemes.set(key3,value)}getIdentityProvider(schemeId){return this.authSchemes.get(schemeId)}};isIdentityExpired=(()=>identity=>doesIdentityRequireRefresh(identity)&&identity.expiration.getTime()-Date.now()<3e5)();doesIdentityRequireRefresh=identity=>void 0!==identity.expiration;memoizeIdentityProvider=(provider,isExpired,requiresRefresh)=>{if(void 0===provider)return;const normalizedProvider="function"!=typeof provider?async()=>Promise.resolve(provider):provider;let resolved,pending3,hasResult,isConstant=!1;const coalesceProvider=async options=>{pending3||(pending3=normalizedProvider(options));try{resolved=await pending3;hasResult=!0;isConstant=!1}finally{pending3=void 0}return resolved};return void 0===isExpired?async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider(options));return resolved}:async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider(options));if(isConstant)return resolved;if(!requiresRefresh(resolved)){isConstant=!0;return resolved}if(isExpired(resolved)){await coalesceProvider(options);return resolved}return resolved}};Error;memoize=(provider,isExpired,requiresRefresh)=>{let resolved,pending3,hasResult,isConstant=!1;const coalesceProvider=async()=>{pending3||(pending3=provider());try{resolved=await pending3;hasResult=!0;isConstant=!1}finally{pending3=void 0}return resolved};return void 0===isExpired?async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider());return resolved}:async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider());if(isConstant)return resolved;if(requiresRefresh&&!requiresRefresh(resolved)){isConstant=!0;return resolved}if(isExpired(resolved)){await coalesceProvider();return resolved}return resolved}};resolveAwsSdkSigV4AConfig=config=>{config.sigv4aSigningRegionSet=normalizeProvider2(config.sigv4aSigningRegionSet);return config};AMZ_DATE_HEADER=(AMZ_DATE_QUERY_PARAM="X-Amz-Date").toLowerCase();GENERATED_HEADERS=["authorization",AMZ_DATE_HEADER,"date"];SIGNATURE_HEADER="X-Amz-Signature".toLowerCase();TOKEN_HEADER="X-Amz-Security-Token".toLowerCase();ALWAYS_UNSIGNABLE_HEADERS={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0};PROXY_HEADER_PATTERN=/^proxy-/;SEC_HEADER_PATTERN=/^sec-/;EVENT_ALGORITHM_IDENTIFIER="AWS4-HMAC-SHA256-PAYLOAD";signingKeyCache={};cacheQueue=[];createScope=(shortDate,region,service)=>`${shortDate}/${region}/${service}/aws4_request`;getSigningKey=async(sha256Constructor,credentials,shortDate,region,service)=>{const cacheKey=`${shortDate}:${region}:${service}:${toHex2(await hmac(sha256Constructor,credentials.secretAccessKey,credentials.accessKeyId))}:${credentials.sessionToken}`;if(cacheKey in signingKeyCache)return signingKeyCache[cacheKey];cacheQueue.push(cacheKey);for(;cacheQueue.length>50;)delete signingKeyCache[cacheQueue.shift()];let key3=`AWS4${credentials.secretAccessKey}`;for(const signable of[shortDate,region,service,"aws4_request"])key3=await hmac(sha256Constructor,key3,signable);return signingKeyCache[cacheKey]=key3};hmac=(ctor,secret,data)=>{const hash3=new ctor(secret);hash3.update(toUint8Array(data));return hash3.digest()};getCanonicalHeaders=({headers},unsignableHeaders,signableHeaders)=>{const canonical={};for(const headerName of Object.keys(headers).sort()){if(null==headers[headerName])continue;const canonicalHeaderName=headerName.toLowerCase();(canonicalHeaderName in ALWAYS_UNSIGNABLE_HEADERS||(null==unsignableHeaders?void 0:unsignableHeaders.has(canonicalHeaderName))||PROXY_HEADER_PATTERN.test(canonicalHeaderName)||SEC_HEADER_PATTERN.test(canonicalHeaderName))&&(!signableHeaders||signableHeaders&&!signableHeaders.has(canonicalHeaderName))||(canonical[canonicalHeaderName]=headers[headerName].trim().replace(/\s+/g," "))}return canonical};isArrayBuffer=arg=>"function"==typeof ArrayBuffer&&arg instanceof ArrayBuffer||"[object ArrayBuffer]"===Object.prototype.toString.call(arg);getPayloadHash=async({headers,body},hashConstructor)=>{for(const headerName of Object.keys(headers))if("x-amz-content-sha256"===headerName.toLowerCase())return headers[headerName];if(null==body)return"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";if("string"==typeof body||ArrayBuffer.isView(body)||isArrayBuffer(body)){const hashCtor=new hashConstructor;hashCtor.update(toUint8Array(body));return toHex2(await hashCtor.digest())}return"UNSIGNED-PAYLOAD"};HeaderFormatter=class{format(headers){const chunks=[];for(const headerName of Object.keys(headers)){const bytes=fromUtf8(headerName);chunks.push(Uint8Array.from([bytes.byteLength]),bytes,this.formatHeaderValue(headers[headerName]))}const out=new Uint8Array(chunks.reduce(((carry,bytes)=>carry+bytes.byteLength),0));let position=0;for(const chunk of chunks){out.set(chunk,position);position+=chunk.byteLength}return out}formatHeaderValue(header){switch(header.type){case"boolean":return Uint8Array.from([header.value?0:1]);case"byte":return Uint8Array.from([2,header.value]);case"short":const shortView=new DataView(new ArrayBuffer(3));shortView.setUint8(0,3);shortView.setInt16(1,header.value,!1);return new Uint8Array(shortView.buffer);case"integer":const intView=new DataView(new ArrayBuffer(5));intView.setUint8(0,4);intView.setInt32(1,header.value,!1);return new Uint8Array(intView.buffer);case"long":const longBytes=new Uint8Array(9);longBytes[0]=5;longBytes.set(header.value.bytes,1);return longBytes;case"binary":const binView=new DataView(new ArrayBuffer(3+header.value.byteLength));binView.setUint8(0,6);binView.setUint16(1,header.value.byteLength,!1);const binBytes=new Uint8Array(binView.buffer);binBytes.set(header.value,3);return binBytes;case"string":const utf8Bytes=fromUtf8(header.value),strView=new DataView(new ArrayBuffer(3+utf8Bytes.byteLength));strView.setUint8(0,7);strView.setUint16(1,utf8Bytes.byteLength,!1);const strBytes=new Uint8Array(strView.buffer);strBytes.set(utf8Bytes,3);return strBytes;case"timestamp":const tsBytes=new Uint8Array(9);tsBytes[0]=8;tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes,1);return tsBytes;case"uuid":if(!UUID_PATTERN.test(header.value))throw new Error(`Invalid UUID received: ${header.value}`);const uuidBytes=new Uint8Array(17);uuidBytes[0]=9;uuidBytes.set(fromHex(header.value.replace(/\-/g,"")),1);return uuidBytes}}};(function(HEADER_VALUE_TYPE3){HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.boolTrue=0]="boolTrue";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.boolFalse=1]="boolFalse";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.byte=2]="byte";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.short=3]="short";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.integer=4]="integer";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.long=5]="long";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.byteArray=6]="byteArray";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.string=7]="string";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.timestamp=8]="timestamp";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.uuid=9]="uuid"})(HEADER_VALUE_TYPE||(HEADER_VALUE_TYPE={}));UUID_PATTERN=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;Int64=class _Int64{constructor(bytes){this.bytes=bytes;if(8!==bytes.byteLength)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(number){if(number>0x8000000000000000||number<-0x8000000000000000)throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);const bytes=new Uint8Array(8);for(let i2=7,remaining=Math.abs(Math.round(number));i2>-1&&remaining>0;i2--,remaining/=256)bytes[i2]=remaining;number<0&&negate(bytes);return new _Int64(bytes)}valueOf(){const bytes=this.bytes.slice(0),negative=128&bytes[0];negative&&negate(bytes);return parseInt(toHex2(bytes),16)*(negative?-1:1)}toString(){return String(this.valueOf())}};hasHeader=(soughtHeader,headers)=>{soughtHeader=soughtHeader.toLowerCase();for(const headerName of Object.keys(headers))if(soughtHeader===headerName.toLowerCase())return!0;return!1};moveHeadersToQuery=(request2,options={})=>{var _a8,_b5;const{headers,query:query3={}}=HttpRequest.clone(request2);for(const name of Object.keys(headers)){const lname=name.toLowerCase();if("x-amz-"===lname.slice(0,6)&&!(null==(_a8=options.unhoistableHeaders)?void 0:_a8.has(lname))||(null==(_b5=options.hoistableHeaders)?void 0:_b5.has(lname))){query3[name]=headers[name];delete headers[name]}}return{...request2,headers,query:query3}};prepareRequest=request2=>{request2=HttpRequest.clone(request2);for(const headerName of Object.keys(request2.headers))GENERATED_HEADERS.indexOf(headerName.toLowerCase())>-1&&delete request2.headers[headerName];return request2};getCanonicalQuery=({query:query3={}})=>{const keys3=[],serialized2={};for(const key3 of Object.keys(query3)){if(key3.toLowerCase()===SIGNATURE_HEADER)continue;const encodedKey=escapeUri(key3);keys3.push(encodedKey);const value=query3[key3];"string"==typeof value?serialized2[encodedKey]=`${encodedKey}=${escapeUri(value)}`:Array.isArray(value)&&(serialized2[encodedKey]=value.slice(0).reduce(((encoded,value2)=>encoded.concat([`${encodedKey}=${escapeUri(value2)}`])),[]).sort().join("&"))}return keys3.sort().map((key3=>serialized2[key3])).filter((serialized3=>serialized3)).join("&")};iso8601=time=>toDate(time).toISOString().replace(/\.\d{3}Z$/,"Z");toDate=time=>"number"==typeof time?new Date(1e3*time):"string"==typeof time?Number(time)?new Date(1e3*Number(time)):new Date(time):time;SignatureV4Base=class{constructor({applyChecksum,credentials,region,service,sha256,uriEscapePath=!0}){this.service=service;this.sha256=sha256;this.uriEscapePath=uriEscapePath;this.applyChecksum="boolean"!=typeof applyChecksum||applyChecksum;this.regionProvider=normalizeProvider(region);this.credentialProvider=normalizeProvider(credentials)}createCanonicalRequest(request2,canonicalHeaders,payloadHash){const sortedHeaders=Object.keys(canonicalHeaders).sort();return`${request2.method}\n${this.getCanonicalPath(request2)}\n${getCanonicalQuery(request2)}\n${sortedHeaders.map((name=>`${name}:${canonicalHeaders[name]}`)).join("\n")}\n\n${sortedHeaders.join(";")}\n${payloadHash}`}async createStringToSign(longDate,credentialScope,canonicalRequest,algorithmIdentifier){const hash3=new this.sha256;hash3.update(toUint8Array(canonicalRequest));return`${algorithmIdentifier}\n${longDate}\n${credentialScope}\n${toHex2(await hash3.digest())}`}getCanonicalPath({path:path2}){if(this.uriEscapePath){const normalizedPathSegments=[];for(const pathSegment of path2.split("/"))0!==(null==pathSegment?void 0:pathSegment.length)&&"."!==pathSegment&&(".."===pathSegment?normalizedPathSegments.pop():normalizedPathSegments.push(pathSegment));const normalizedPath=`${(null==path2?void 0:path2.startsWith("/"))?"/":""}${normalizedPathSegments.join("/")}${normalizedPathSegments.length>0&&(null==path2?void 0:path2.endsWith("/"))?"/":""}`;return escapeUri(normalizedPath).replace(/%2F/g,"/")}return path2}validateResolvedCredentials(credentials){if("object"!=typeof credentials||"string"!=typeof credentials.accessKeyId||"string"!=typeof credentials.secretAccessKey)throw new Error("Resolved credential object is not valid")}formatDate(now3){const longDate=iso8601(now3).replace(/[\-:]/g,"");return{longDate,shortDate:longDate.slice(0,8)}}getCanonicalHeaderList(headers){return Object.keys(headers).sort().join(";")}};SignatureV4=class extends SignatureV4Base{constructor({applyChecksum,credentials,region,service,sha256,uriEscapePath=!0}){super({applyChecksum,credentials,region,service,sha256,uriEscapePath});this.headerFormatter=new HeaderFormatter}async presign(originalRequest,options={}){const{signingDate=new Date,expiresIn=3600,unsignableHeaders,unhoistableHeaders,signableHeaders,hoistableHeaders,signingRegion,signingService}=options,credentials=await this.credentialProvider();this.validateResolvedCredentials(credentials);const region=null!=signingRegion?signingRegion:await this.regionProvider(),{longDate,shortDate}=this.formatDate(signingDate);if(expiresIn>604800)return Promise.reject("Signature version 4 presigned URLs must have an expiration date less than one week in the future");const scope=createScope(shortDate,region,null!=signingService?signingService:this.service),request2=moveHeadersToQuery(prepareRequest(originalRequest),{unhoistableHeaders,hoistableHeaders});credentials.sessionToken&&(request2.query["X-Amz-Security-Token"]=credentials.sessionToken);request2.query["X-Amz-Algorithm"]="AWS4-HMAC-SHA256";request2.query["X-Amz-Credential"]=`${credentials.accessKeyId}/${scope}`;request2.query[AMZ_DATE_QUERY_PARAM]=longDate;request2.query["X-Amz-Expires"]=expiresIn.toString(10);const canonicalHeaders=getCanonicalHeaders(request2,unsignableHeaders,signableHeaders);request2.query["X-Amz-SignedHeaders"]=this.getCanonicalHeaderList(canonicalHeaders);request2.query["X-Amz-Signature"]=await this.getSignature(longDate,scope,this.getSigningKey(credentials,region,shortDate,signingService),this.createCanonicalRequest(request2,canonicalHeaders,await getPayloadHash(originalRequest,this.sha256)));return request2}async sign(toSign,options){return"string"==typeof toSign?this.signString(toSign,options):toSign.headers&&toSign.payload?this.signEvent(toSign,options):toSign.message?this.signMessage(toSign,options):this.signRequest(toSign,options)}async signEvent({headers,payload},{signingDate=new Date,priorSignature,signingRegion,signingService}){const region=null!=signingRegion?signingRegion:await this.regionProvider(),{shortDate,longDate}=this.formatDate(signingDate),scope=createScope(shortDate,region,null!=signingService?signingService:this.service),hashedPayload=await getPayloadHash({headers:{},body:payload},this.sha256),hash3=new this.sha256;hash3.update(headers);const hashedHeaders=toHex2(await hash3.digest()),stringToSign=[EVENT_ALGORITHM_IDENTIFIER,longDate,scope,priorSignature,hashedHeaders,hashedPayload].join("\n");return this.signString(stringToSign,{signingDate,signingRegion:region,signingService})}async signMessage(signableMessage,{signingDate=new Date,signingRegion,signingService}){return this.signEvent({headers:this.headerFormatter.format(signableMessage.message.headers),payload:signableMessage.message.body},{signingDate,signingRegion,signingService,priorSignature:signableMessage.priorSignature}).then((signature=>({message:signableMessage.message,signature})))}async signString(stringToSign,{signingDate=new Date,signingRegion,signingService}={}){const credentials=await this.credentialProvider();this.validateResolvedCredentials(credentials);const region=null!=signingRegion?signingRegion:await this.regionProvider(),{shortDate}=this.formatDate(signingDate),hash3=new this.sha256(await this.getSigningKey(credentials,region,shortDate,signingService));hash3.update(toUint8Array(stringToSign));return toHex2(await hash3.digest())}async signRequest(requestToSign,{signingDate=new Date,signableHeaders,unsignableHeaders,signingRegion,signingService}={}){const credentials=await this.credentialProvider();this.validateResolvedCredentials(credentials);const region=null!=signingRegion?signingRegion:await this.regionProvider(),request2=prepareRequest(requestToSign),{longDate,shortDate}=this.formatDate(signingDate),scope=createScope(shortDate,region,null!=signingService?signingService:this.service);request2.headers[AMZ_DATE_HEADER]=longDate;credentials.sessionToken&&(request2.headers[TOKEN_HEADER]=credentials.sessionToken);const payloadHash=await getPayloadHash(request2,this.sha256);!hasHeader("x-amz-content-sha256",request2.headers)&&this.applyChecksum&&(request2.headers["x-amz-content-sha256"]=payloadHash);const canonicalHeaders=getCanonicalHeaders(request2,unsignableHeaders,signableHeaders),signature=await this.getSignature(longDate,scope,this.getSigningKey(credentials,region,shortDate,signingService),this.createCanonicalRequest(request2,canonicalHeaders,payloadHash));request2.headers.authorization=`AWS4-HMAC-SHA256 Credential=${credentials.accessKeyId}/${scope}, SignedHeaders=${this.getCanonicalHeaderList(canonicalHeaders)}, Signature=${signature}`;return request2}async getSignature(longDate,credentialScope,keyPromise,canonicalRequest){const stringToSign=await this.createStringToSign(longDate,credentialScope,canonicalRequest,"AWS4-HMAC-SHA256"),hash3=new this.sha256(await keyPromise);hash3.update(toUint8Array(stringToSign));return toHex2(await hash3.digest())}getSigningKey(credentials,region,shortDate,service){return getSigningKey(this.sha256,credentials,shortDate,region,service||this.service)}};resolveAwsSdkSigV4Config=config=>{let resolvedCredentials,inputCredentials=config.credentials,isUserSupplied=!!config.credentials;Object.defineProperty(config,"credentials",{set(credentials){credentials&&credentials!==inputCredentials&&credentials!==resolvedCredentials&&(isUserSupplied=!0);inputCredentials=credentials;const memoizedProvider=normalizeCredentialProvider(config,{credentials:inputCredentials,credentialDefaultProvider:config.credentialDefaultProvider}),boundProvider=bindCallerConfig(config,memoizedProvider);if(isUserSupplied&&!boundProvider.attributed){resolvedCredentials=async options=>boundProvider(options).then((creds=>setCredentialFeature(creds,"CREDENTIALS_CODE","e")));resolvedCredentials.memoized=boundProvider.memoized;resolvedCredentials.configBound=boundProvider.configBound;resolvedCredentials.attributed=!0}else resolvedCredentials=boundProvider},get:()=>resolvedCredentials,enumerable:!0,configurable:!0});config.credentials=inputCredentials;const{signingEscapePath=!0,systemClockOffset=config.systemClockOffset||0,sha256}=config;let signer;signer=config.signer?normalizeProvider2(config.signer):config.regionInfoProvider?()=>normalizeProvider2(config.region)().then((async region=>[await config.regionInfoProvider(region,{useFipsEndpoint:await config.useFipsEndpoint(),useDualstackEndpoint:await config.useDualstackEndpoint()})||{},region])).then((([regionInfo,region])=>{const{signingRegion,signingService}=regionInfo;config.signingRegion=config.signingRegion||signingRegion||region;config.signingName=config.signingName||signingService||config.serviceId;const params={...config,credentials:config.credentials,region:config.signingRegion,service:config.signingName,sha256,uriEscapePath:signingEscapePath};return new(config.signerConstructor||SignatureV4)(params)})):async authScheme=>{const signingRegion=(authScheme=Object.assign({},{name:"sigv4",signingName:config.signingName||config.defaultSigningName,signingRegion:await normalizeProvider2(config.region)(),properties:{}},authScheme)).signingRegion,signingService=authScheme.signingName;config.signingRegion=config.signingRegion||signingRegion;config.signingName=config.signingName||signingService||config.serviceId;const params={...config,credentials:config.credentials,region:config.signingRegion,service:config.signingName,sha256,uriEscapePath:signingEscapePath};return new(config.signerConstructor||SignatureV4)(params)};return Object.assign(config,{systemClockOffset,signingEscapePath,signer})};getAllAliases=(name,aliases)=>{const _aliases=[];name&&_aliases.push(name);if(aliases)for(const alias of aliases)_aliases.push(alias);return _aliases};getMiddlewareNameWithAliases=(name,aliases)=>`${name||"anonymous"}${aliases&&aliases.length>0?` (a.k.a. ${aliases.join(",")})`:""}`;constructStack=()=>{let absoluteEntries=[],relativeEntries=[],identifyOnResolve=!1;const entriesNameSet=new Set,sort=entries2=>entries2.sort(((a2,b3)=>stepWeights[b3.step]-stepWeights[a2.step]||priorityWeights[b3.priority||"normal"]-priorityWeights[a2.priority||"normal"])),removeByName=toRemove=>{let isRemoved=!1;const filterCb=entry=>{const aliases=getAllAliases(entry.name,entry.aliases);if(aliases.includes(toRemove)){isRemoved=!0;for(const alias of aliases)entriesNameSet.delete(alias);return!1}return!0};absoluteEntries=absoluteEntries.filter(filterCb);relativeEntries=relativeEntries.filter(filterCb);return isRemoved},removeByReference=toRemove=>{let isRemoved=!1;const filterCb=entry=>{if(entry.middleware===toRemove){isRemoved=!0;for(const alias of getAllAliases(entry.name,entry.aliases))entriesNameSet.delete(alias);return!1}return!0};absoluteEntries=absoluteEntries.filter(filterCb);relativeEntries=relativeEntries.filter(filterCb);return isRemoved},cloneTo=toStack=>{var _a8;absoluteEntries.forEach((entry=>{toStack.add(entry.middleware,{...entry})}));relativeEntries.forEach((entry=>{toStack.addRelativeTo(entry.middleware,{...entry})}));null==(_a8=toStack.identifyOnResolve)||_a8.call(toStack,stack2.identifyOnResolve());return toStack},expandRelativeMiddlewareList=from=>{const expandedMiddlewareList=[];from.before.forEach((entry=>{0===entry.before.length&&0===entry.after.length?expandedMiddlewareList.push(entry):expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry))}));expandedMiddlewareList.push(from);from.after.reverse().forEach((entry=>{0===entry.before.length&&0===entry.after.length?expandedMiddlewareList.push(entry):expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry))}));return expandedMiddlewareList},getMiddlewareList=(debug2=!1)=>{const normalizedAbsoluteEntries=[],normalizedRelativeEntries=[],normalizedEntriesNameMap={};absoluteEntries.forEach((entry=>{const normalizedEntry={...entry,before:[],after:[]};for(const alias of getAllAliases(normalizedEntry.name,normalizedEntry.aliases))normalizedEntriesNameMap[alias]=normalizedEntry;normalizedAbsoluteEntries.push(normalizedEntry)}));relativeEntries.forEach((entry=>{const normalizedEntry={...entry,before:[],after:[]};for(const alias of getAllAliases(normalizedEntry.name,normalizedEntry.aliases))normalizedEntriesNameMap[alias]=normalizedEntry;normalizedRelativeEntries.push(normalizedEntry)}));normalizedRelativeEntries.forEach((entry=>{if(entry.toMiddleware){const toMiddleware=normalizedEntriesNameMap[entry.toMiddleware];if(void 0===toMiddleware){if(debug2)return;throw new Error(`${entry.toMiddleware} is not found when adding ${getMiddlewareNameWithAliases(entry.name,entry.aliases)} middleware ${entry.relation} ${entry.toMiddleware}`)}"after"===entry.relation&&toMiddleware.after.push(entry);"before"===entry.relation&&toMiddleware.before.push(entry)}}));return sort(normalizedAbsoluteEntries).map(expandRelativeMiddlewareList).reduce(((wholeList,expandedMiddlewareList)=>{wholeList.push(...expandedMiddlewareList);return wholeList}),[])},stack2={add:(middleware,options={})=>{const{name,override,aliases:_aliases}=options,entry={step:"initialize",priority:"normal",middleware,...options},aliases=getAllAliases(name,_aliases);if(aliases.length>0){if(aliases.some((alias=>entriesNameSet.has(alias)))){if(!override)throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name,_aliases)}'`);for(const alias of aliases){const toOverrideIndex=absoluteEntries.findIndex((entry2=>{var _a8;return entry2.name===alias||(null==(_a8=entry2.aliases)?void 0:_a8.some((a2=>a2===alias)))}));if(-1===toOverrideIndex)continue;const toOverride=absoluteEntries[toOverrideIndex];if(toOverride.step!==entry.step||entry.priority!==toOverride.priority)throw new Error(`"${getMiddlewareNameWithAliases(toOverride.name,toOverride.aliases)}" middleware with ${toOverride.priority} priority in ${toOverride.step} step cannot be overridden by "${getMiddlewareNameWithAliases(name,_aliases)}" middleware with ${entry.priority} priority in ${entry.step} step.`);absoluteEntries.splice(toOverrideIndex,1)}}for(const alias of aliases)entriesNameSet.add(alias)}absoluteEntries.push(entry)},addRelativeTo:(middleware,options)=>{const{name,override,aliases:_aliases}=options,entry={middleware,...options},aliases=getAllAliases(name,_aliases);if(aliases.length>0){if(aliases.some((alias=>entriesNameSet.has(alias)))){if(!override)throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name,_aliases)}'`);for(const alias of aliases){const toOverrideIndex=relativeEntries.findIndex((entry2=>{var _a8;return entry2.name===alias||(null==(_a8=entry2.aliases)?void 0:_a8.some((a2=>a2===alias)))}));if(-1===toOverrideIndex)continue;const toOverride=relativeEntries[toOverrideIndex];if(toOverride.toMiddleware!==entry.toMiddleware||toOverride.relation!==entry.relation)throw new Error(`"${getMiddlewareNameWithAliases(toOverride.name,toOverride.aliases)}" middleware ${toOverride.relation} "${toOverride.toMiddleware}" middleware cannot be overridden by "${getMiddlewareNameWithAliases(name,_aliases)}" middleware ${entry.relation} "${entry.toMiddleware}" middleware.`);relativeEntries.splice(toOverrideIndex,1)}}for(const alias of aliases)entriesNameSet.add(alias)}relativeEntries.push(entry)},clone:()=>cloneTo(constructStack()),use:plugin3=>{plugin3.applyToStack(stack2)},remove:toRemove=>"string"==typeof toRemove?removeByName(toRemove):removeByReference(toRemove),removeByTag:toRemove=>{let isRemoved=!1;const filterCb=entry=>{const{tags,name,aliases:_aliases}=entry;if(tags&&tags.includes(toRemove)){const aliases=getAllAliases(name,_aliases);for(const alias of aliases)entriesNameSet.delete(alias);isRemoved=!0;return!1}return!0};absoluteEntries=absoluteEntries.filter(filterCb);relativeEntries=relativeEntries.filter(filterCb);return isRemoved},concat:from=>{var _a8,_b5;const cloned=cloneTo(constructStack());cloned.use(from);cloned.identifyOnResolve(identifyOnResolve||cloned.identifyOnResolve()||null!=(_b5=null==(_a8=from.identifyOnResolve)?void 0:_a8.call(from))&&_b5);return cloned},applyToStack:cloneTo,identify:()=>getMiddlewareList(!0).map((mw=>{var _a8;const step=null!=(_a8=mw.step)?_a8:mw.relation+" "+mw.toMiddleware;return getMiddlewareNameWithAliases(mw.name,mw.aliases)+" - "+step})),identifyOnResolve(toggle){"boolean"==typeof toggle&&(identifyOnResolve=toggle);return identifyOnResolve},resolve:(handler,context2)=>{for(const middleware of getMiddlewareList().map((entry=>entry.middleware)).reverse())handler=middleware(handler,context2);identifyOnResolve&&console.log(stack2.identify());return handler}};return stack2};stepWeights={initialize:5,serialize:4,build:3,finalizeRequest:2,deserialize:1};priorityWeights={high:3,normal:2,low:1};Client=class{constructor(config){this.config=config;this.middlewareStack=constructStack()}send(command,optionsOrCb,cb2){const options="function"!=typeof optionsOrCb?optionsOrCb:void 0,callback="function"==typeof optionsOrCb?optionsOrCb:cb2;let handler;if(void 0===options&&!0===this.config.cacheMiddleware){this.handlers||(this.handlers=new WeakMap);const handlers2=this.handlers;if(handlers2.has(command.constructor))handler=handlers2.get(command.constructor);else{handler=command.resolveMiddleware(this.middlewareStack,this.config,options);handlers2.set(command.constructor,handler)}}else{delete this.handlers;handler=command.resolveMiddleware(this.middlewareStack,this.config,options)}if(!callback)return handler(command).then((result=>result.output));handler(command).then((result=>callback(null,result.output)),(err3=>callback(err3))).catch((()=>{}))}destroy(){var _a8,_b5,_c3;null==(_c3=null==(_b5=null==(_a8=this.config)?void 0:_a8.requestHandler)?void 0:_b5.destroy)||_c3.call(_b5);delete this.handlers}};Command=class{constructor(){this.middlewareStack=constructStack()}static classBuilder(){return new ClassBuilder}resolveMiddlewareWithContext(clientStack,configuration,options,{middlewareFn,clientName,commandName,inputFilterSensitiveLog,outputFilterSensitiveLog,smithyContext,additionalContext,CommandCtor}){for(const mw of middlewareFn.bind(this)(CommandCtor,clientStack,configuration,options))this.middlewareStack.use(mw);const stack2=clientStack.concat(this.middlewareStack),{logger:logger2}=configuration,handlerExecutionContext={logger:logger2,clientName,commandName,inputFilterSensitiveLog,outputFilterSensitiveLog,[SMITHY_CONTEXT_KEY]:{commandInstance:this,...smithyContext},...additionalContext},{requestHandler}=configuration;return stack2.resolve((request2=>requestHandler.handle(request2.request,options||{})),handlerExecutionContext)}};ClassBuilder=class{constructor(){this._init=()=>{};this._ep={};this._middlewareFn=()=>[];this._commandName="";this._clientName="";this._additionalContext={};this._smithyContext={};this._inputFilterSensitiveLog=_=>_;this._outputFilterSensitiveLog=_=>_;this._serializer=null;this._deserializer=null}init(cb2){this._init=cb2}ep(endpointParameterInstructions){this._ep=endpointParameterInstructions;return this}m(middlewareSupplier){this._middlewareFn=middlewareSupplier;return this}s(service,operation,smithyContext={}){this._smithyContext={service,operation,...smithyContext};return this}c(additionalContext={}){this._additionalContext=additionalContext;return this}n(clientName,commandName){this._clientName=clientName;this._commandName=commandName;return this}f(inputFilter=_=>_,outputFilter=_=>_){this._inputFilterSensitiveLog=inputFilter;this._outputFilterSensitiveLog=outputFilter;return this}ser(serializer){this._serializer=serializer;return this}de(deserializer){this._deserializer=deserializer;return this}build(){const closure=this;let CommandRef;return CommandRef=class extends Command{static getEndpointParameterInstructions(){return closure._ep}constructor(...[input]){super();this.serialize=closure._serializer;this.deserialize=closure._deserializer;this.input=null!=input?input:{};closure._init(this)}resolveMiddleware(stack2,configuration,options){return this.resolveMiddlewareWithContext(stack2,configuration,options,{CommandCtor:CommandRef,middlewareFn:closure._middlewareFn,clientName:closure._clientName,commandName:closure._commandName,inputFilterSensitiveLog:closure._inputFilterSensitiveLog,outputFilterSensitiveLog:closure._outputFilterSensitiveLog,smithyContext:closure._smithyContext,additionalContext:closure._additionalContext})}}}};SENSITIVE_STRING="***SensitiveInformation***";createAggregatedClient=(commands2,Client2)=>{for(const command of Object.keys(commands2)){const CommandCtor=commands2[command],methodImpl=async function(args,optionsOrCb,cb2){const command2=new CommandCtor(args);if("function"==typeof optionsOrCb)this.send(command2,optionsOrCb);else{if("function"!=typeof cb2)return this.send(command2,optionsOrCb);if("object"!=typeof optionsOrCb)throw new Error("Expected http options but got "+typeof optionsOrCb);this.send(command2,optionsOrCb||{},cb2)}},methodName=(command[0].toLowerCase()+command.slice(1)).replace(/Command$/,"");Client2.prototype[methodName]=methodImpl}};parseBoolean=value=>{switch(value){case"true":return!0;case"false":return!1;default:throw new Error(`Unable to parse boolean value "${value}"`)}};expectNumber=value=>{if(null!=value){if("string"==typeof value){const parsed=parseFloat(value);if(!Number.isNaN(parsed)){String(parsed)!==String(value)&&logger.warn(stackTraceWarning(`Expected number but observed string: ${value}`));return parsed}}if("number"==typeof value)return value;throw new TypeError(`Expected number, got ${typeof value}: ${value}`)}};MAX_FLOAT=Math.ceil(2**127*(2-2**-23));expectFloat32=value=>{const expected=expectNumber(value);if(void 0!==expected&&!Number.isNaN(expected)&&expected!==1/0&&expected!==-1/0&&Math.abs(expected)>MAX_FLOAT)throw new TypeError(`Expected 32-bit float, got ${value}`);return expected};expectLong=value=>{if(null!=value){if(Number.isInteger(value)&&!Number.isNaN(value))return value;throw new TypeError(`Expected integer, got ${typeof value}: ${value}`)}};expectInt32=value=>expectSizedInt(value,32);expectShort=value=>expectSizedInt(value,16);expectByte=value=>expectSizedInt(value,8);expectSizedInt=(value,size)=>{const expected=expectLong(value);if(void 0!==expected&&castInt(expected,size)!==expected)throw new TypeError(`Expected ${size}-bit integer, got ${value}`);return expected};castInt=(value,size)=>{switch(size){case 32:return Int32Array.of(value)[0];case 16:return Int16Array.of(value)[0];case 8:return Int8Array.of(value)[0]}};expectNonNull=(value,location)=>{if(null==value){if(location)throw new TypeError(`Expected a non-null value for ${location}`);throw new TypeError("Expected a non-null value")}return value};expectObject=value=>{if(null==value)return;if("object"==typeof value&&!Array.isArray(value))return value;const receivedType=Array.isArray(value)?"array":typeof value;throw new TypeError(`Expected object, got ${receivedType}: ${value}`)};expectString=value=>{if(null!=value){if("string"==typeof value)return value;if(["boolean","number","bigint"].includes(typeof value)){logger.warn(stackTraceWarning(`Expected string, got ${typeof value}: ${value}`));return String(value)}throw new TypeError(`Expected string, got ${typeof value}: ${value}`)}};expectUnion=value=>{if(null==value)return;const asObject=expectObject(value),setKeys=Object.entries(asObject).filter((([,v2])=>null!=v2)).map((([k2])=>k2));if(0===setKeys.length)throw new TypeError("Unions must have exactly one non-null member. None were found.");if(setKeys.length>1)throw new TypeError(`Unions must have exactly one non-null member. Keys ${setKeys} were not null.`);return asObject};strictParseFloat32=value=>expectFloat32("string"==typeof value?parseNumber(value):value);NUMBER_REGEX=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g;parseNumber=value=>{const matches=value.match(NUMBER_REGEX);if(null===matches||matches[0].length!==value.length)throw new TypeError("Expected real number, got implicit NaN");return parseFloat(value)};strictParseLong=value=>expectLong("string"==typeof value?parseNumber(value):value);strictParseInt32=value=>expectInt32("string"==typeof value?parseNumber(value):value);strictParseShort=value=>expectShort("string"==typeof value?parseNumber(value):value);strictParseByte=value=>expectByte("string"==typeof value?parseNumber(value):value);stackTraceWarning=message=>String(new TypeError(message).stack||message).split("\n").slice(0,5).filter((s2=>!s2.includes("stackTraceWarning"))).join("\n");logger={warn:console.warn};DAYS=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];MONTHS=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/);RFC3339_WITH_OFFSET=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}\:\d{2})|[zZ])$/);parseRfc3339DateTimeWithOffset=value=>{if(null==value)return;if("string"!=typeof value)throw new TypeError("RFC-3339 date-times must be expressed as strings");const match3=RFC3339_WITH_OFFSET.exec(value);if(!match3)throw new TypeError("Invalid RFC-3339 date-time value");const[_,yearStr,monthStr,dayStr,hours,minutes,seconds,fractionalMilliseconds,offsetStr]=match3,year=strictParseShort(stripLeadingZeroes(yearStr)),month=parseDateValue(monthStr,"month",1,12),day=parseDateValue(dayStr,"day",1,31),date=buildDate(year,month,day,{hours,minutes,seconds,fractionalMilliseconds});"Z"!=offsetStr.toUpperCase()&&date.setTime(date.getTime()-parseOffsetToMilliseconds(offsetStr));return date};IMF_FIXDATE=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/);RFC_850_DATE=new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/);ASC_TIME=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/);parseRfc7231DateTime=value=>{if(null==value)return;if("string"!=typeof value)throw new TypeError("RFC-7231 date-times must be expressed as strings");let match3=IMF_FIXDATE.exec(value);if(match3){const[_,dayStr,monthStr,yearStr,hours,minutes,seconds,fractionalMilliseconds]=match3;return buildDate(strictParseShort(stripLeadingZeroes(yearStr)),parseMonthByShortName(monthStr),parseDateValue(dayStr,"day",1,31),{hours,minutes,seconds,fractionalMilliseconds})}match3=RFC_850_DATE.exec(value);if(match3){const[_,dayStr,monthStr,yearStr,hours,minutes,seconds,fractionalMilliseconds]=match3;return adjustRfc850Year(buildDate(parseTwoDigitYear(yearStr),parseMonthByShortName(monthStr),parseDateValue(dayStr,"day",1,31),{hours,minutes,seconds,fractionalMilliseconds}))}match3=ASC_TIME.exec(value);if(match3){const[_,monthStr,dayStr,hours,minutes,seconds,fractionalMilliseconds,yearStr]=match3;return buildDate(strictParseShort(stripLeadingZeroes(yearStr)),parseMonthByShortName(monthStr),parseDateValue(dayStr.trimLeft(),"day",1,31),{hours,minutes,seconds,fractionalMilliseconds})}throw new TypeError("Invalid RFC-7231 date-time value")};buildDate=(year,month,day,time)=>{const adjustedMonth=month-1;validateDayOfMonth(year,adjustedMonth,day);return new Date(Date.UTC(year,adjustedMonth,day,parseDateValue(time.hours,"hour",0,23),parseDateValue(time.minutes,"minute",0,59),parseDateValue(time.seconds,"seconds",0,60),parseMilliseconds(time.fractionalMilliseconds)))};parseTwoDigitYear=value=>{const thisYear=(new Date).getUTCFullYear(),valueInThisCentury=100*Math.floor(thisYear/100)+strictParseShort(stripLeadingZeroes(value));return valueInThisCenturyinput.getTime()-(new Date).getTime()>15768e8?new Date(Date.UTC(input.getUTCFullYear()-100,input.getUTCMonth(),input.getUTCDate(),input.getUTCHours(),input.getUTCMinutes(),input.getUTCSeconds(),input.getUTCMilliseconds())):input;parseMonthByShortName=value=>{const monthIdx=MONTHS.indexOf(value);if(monthIdx<0)throw new TypeError(`Invalid month: ${value}`);return monthIdx+1};DAYS_IN_MONTH=[31,28,31,30,31,30,31,31,30,31,30,31];validateDayOfMonth=(year,month,day)=>{let maxDays=DAYS_IN_MONTH[month];1===month&&isLeapYear(year)&&(maxDays=29);if(day>maxDays)throw new TypeError(`Invalid day for ${MONTHS[month]} in ${year}: ${day}`)};isLeapYear=year=>year%4==0&&(year%100!=0||year%400==0);parseDateValue=(value,type,lower,upper)=>{const dateVal=strictParseByte(stripLeadingZeroes(value));if(dateValupper)throw new TypeError(`${type} must be between ${lower} and ${upper}, inclusive`);return dateVal};parseMilliseconds=value=>null==value?0:1e3*strictParseFloat32("0."+value);parseOffsetToMilliseconds=value=>{const directionStr=value[0];let direction=1;if("+"==directionStr)direction=1;else{if("-"!=directionStr)throw new TypeError(`Offset direction, ${directionStr}, must be "+" or "-"`);direction=-1}return direction*(60*Number(value.substring(1,3))+Number(value.substring(4,6)))*60*1e3};stripLeadingZeroes=value=>{let idx2=0;for(;idx2{Object.entries(additions).filter((([,v2])=>void 0!==v2)).forEach((([k2,v2])=>{null!=exception[k2]&&""!==exception[k2]||(exception[k2]=v2)}));const message=exception.message||exception.Message||"UnknownError";exception.message=message;delete exception.Message;return exception};throwDefaultError=({output,parsedBody,exceptionCtor,errorCode})=>{const $metadata=deserializeMetadata(output),statusCode=$metadata.httpStatusCode?$metadata.httpStatusCode+"":void 0,response=new exceptionCtor({name:(null==parsedBody?void 0:parsedBody.code)||(null==parsedBody?void 0:parsedBody.Code)||errorCode||statusCode||"UnknownError",$fault:"client",$metadata});throw decorateServiceException(response,parsedBody)};withBaseException=ExceptionCtor=>({output,parsedBody,errorCode})=>{throwDefaultError({output,parsedBody,exceptionCtor:ExceptionCtor,errorCode})};deserializeMetadata=output=>{var _a8,_b5;return{httpStatusCode:output.statusCode,requestId:null!=(_b5=null!=(_a8=output.headers["x-amzn-requestid"])?_a8:output.headers["x-amzn-request-id"])?_b5:output.headers["x-amz-request-id"],extendedRequestId:output.headers["x-amz-id-2"],cfId:output.headers["x-amz-cf-id"]}};loadConfigsForDefaultMode=mode=>{switch(mode){case"standard":return{retryMode:"standard",connectionTimeout:3100};case"in-region":return{retryMode:"standard",connectionTimeout:1100};case"cross-region":return{retryMode:"standard",connectionTimeout:3100};case"mobile":return{retryMode:"standard",connectionTimeout:3e4};default:return{}}};getChecksumConfiguration2=runtimeConfig=>{const checksumAlgorithms=[];for(const id in AlgorithmId){const algorithmId=AlgorithmId[id];void 0!==runtimeConfig[algorithmId]&&checksumAlgorithms.push({algorithmId:()=>algorithmId,checksumConstructor:()=>runtimeConfig[algorithmId]})}return{addChecksumAlgorithm(algo2){checksumAlgorithms.push(algo2)},checksumAlgorithms:()=>checksumAlgorithms}};resolveChecksumRuntimeConfig2=clientConfig=>{const runtimeConfig={};clientConfig.checksumAlgorithms().forEach((checksumAlgorithm=>{runtimeConfig[checksumAlgorithm.algorithmId()]=checksumAlgorithm.checksumConstructor()}));return runtimeConfig};getRetryConfiguration=runtimeConfig=>({setRetryStrategy(retryStrategy){runtimeConfig.retryStrategy=retryStrategy},retryStrategy:()=>runtimeConfig.retryStrategy});resolveRetryRuntimeConfig=retryStrategyConfiguration=>{const runtimeConfig={};runtimeConfig.retryStrategy=retryStrategyConfiguration.retryStrategy();return runtimeConfig};getDefaultExtensionConfiguration=runtimeConfig=>Object.assign(getChecksumConfiguration2(runtimeConfig),getRetryConfiguration(runtimeConfig));resolveDefaultRuntimeConfig2=config=>Object.assign(resolveChecksumRuntimeConfig2(config),resolveRetryRuntimeConfig(config));getArrayIfSingleItem=mayBeArray=>Array.isArray(mayBeArray)?mayBeArray:[mayBeArray];getValueFromTextNode=obj=>{for(const key3 in obj)obj.hasOwnProperty(key3)&&void 0!==obj[key3]["#text"]?obj[key3]=obj[key3]["#text"]:"object"==typeof obj[key3]&&null!==obj[key3]&&(obj[key3]=getValueFromTextNode(obj[key3]));return obj};isSerializableHeaderValue=value=>null!=value;(LazyJsonString=function LazyJsonString2(val2){return Object.assign(new String(val2),{deserializeJSON:()=>JSON.parse(String(val2)),toString:()=>String(val2),toJSON:()=>String(val2)})}).from=object=>object&&"object"==typeof object&&(object instanceof LazyJsonString||"deserializeJSON"in object)?object:"string"==typeof object||Object.getPrototypeOf(object)===String.prototype?LazyJsonString(String(object)):LazyJsonString(JSON.stringify(object));LazyJsonString.fromObject=LazyJsonString.from;NoOpLogger=class{trace(){}debug(){}info(){}warn(){}error(){}};mapWithFilter=(target,filter4,instructions)=>map2(target,Object.entries(instructions).reduce(((_instructions,[key3,value])=>{Array.isArray(value)?_instructions[key3]=value:_instructions[key3]="function"==typeof value?[filter4,value()]:[filter4,value];return _instructions}),{}));applyInstruction=(target,source2,instructions,targetKey)=>{if(null!==source2){let instruction=instructions[targetKey];"function"==typeof instruction&&(instruction=[,instruction]);const[filter5=nonNullish,valueFn=pass,sourceKey=targetKey]=instruction;("function"==typeof filter5&&filter5(source2[sourceKey])||"function"!=typeof filter5&&filter5)&&(target[targetKey]=valueFn(source2[sourceKey]));return}let[filter4,value]=instructions[targetKey];if("function"==typeof value){let _value;const defaultFilterPassed=void 0===filter4&&null!=(_value=value()),customFilterPassed="function"==typeof filter4&&!!filter4(void 0)||"function"!=typeof filter4&&!!filter4;defaultFilterPassed?target[targetKey]=_value:customFilterPassed&&(target[targetKey]=value())}else{const defaultFilterPassed=void 0===filter4&&null!=value,customFilterPassed="function"==typeof filter4&&!!filter4(value)||"function"!=typeof filter4&&!!filter4;(defaultFilterPassed||customFilterPassed)&&(target[targetKey]=value)}};nonNullish=_=>null!=_;pass=_=>_;serializeDateTime=date=>date.toISOString().replace(".000Z","Z");collectBodyString=(streamBody,context2)=>collectBody(streamBody,context2).then((body=>context2.utf8Encoder(body)));import_fast_xml_parser=__toESM(require_fxp());parseXmlBody=(streamBody,context2)=>collectBodyString(streamBody,context2).then((encoded=>{if(encoded.length){const parser2=new import_fast_xml_parser.XMLParser({attributeNamePrefix:"",htmlEntities:!0,ignoreAttributes:!1,ignoreDeclaration:!0,parseTagValue:!1,trimValues:!1,tagValueProcessor:(_,val2)=>""===val2.trim()&&val2.includes("\n")?"":void 0});parser2.addEntity("#xD","\r");parser2.addEntity("#10","\n");let parsedObj;try{parsedObj=parser2.parse(encoded,!0)}catch(e3){e3&&"object"==typeof e3&&Object.defineProperty(e3,"$responseBodyText",{value:encoded});throw e3}const textNodeName="#text",key3=Object.keys(parsedObj)[0],parsedObjToReturn=parsedObj[key3];if(parsedObjToReturn[textNodeName]){parsedObjToReturn[key3]=parsedObjToReturn[textNodeName];delete parsedObjToReturn[textNodeName]}return getValueFromTextNode(parsedObjToReturn)}return{}}));parseXmlErrorBody=async(errorBody,context2)=>{var _a8;const value=await parseXmlBody(errorBody,context2);value.Error&&(value.Error.message=null!=(_a8=value.Error.message)?_a8:value.Error.Message);return value};loadRestXmlErrorCode=(output,data)=>{var _a8;return void 0!==(null==(_a8=null==data?void 0:data.Error)?void 0:_a8.Code)?data.Error.Code:void 0!==(null==data?void 0:data.Code)?data.Code:404==output.statusCode?"NotFound":void 0};CLIENT_SUPPORTED_ALGORITHMS=[ChecksumAlgorithm.CRC32,ChecksumAlgorithm.CRC32C,ChecksumAlgorithm.CRC64NVME,ChecksumAlgorithm.SHA1,ChecksumAlgorithm.SHA256];PRIORITY_ORDER_ALGORITHMS=[ChecksumAlgorithm.SHA256,ChecksumAlgorithm.SHA1,ChecksumAlgorithm.CRC32,ChecksumAlgorithm.CRC32C,ChecksumAlgorithm.CRC64NVME];getChecksumAlgorithmForRequest=(input,{requestChecksumRequired,requestAlgorithmMember,requestChecksumCalculation})=>{if(!requestAlgorithmMember)return requestChecksumCalculation===RequestChecksumCalculation.WHEN_SUPPORTED||requestChecksumRequired?DEFAULT_CHECKSUM_ALGORITHM:void 0;if(!input[requestAlgorithmMember])return;const checksumAlgorithm=input[requestAlgorithmMember];if(!CLIENT_SUPPORTED_ALGORITHMS.includes(checksumAlgorithm))throw new Error(`The checksum algorithm "${checksumAlgorithm}" is not supported by the client. Select one of ${CLIENT_SUPPORTED_ALGORITHMS}.`);return checksumAlgorithm};getChecksumLocationName=algorithm=>algorithm===ChecksumAlgorithm.MD5?"content-md5":`x-amz-checksum-${algorithm.toLowerCase()}`;hasHeader2=(header,headers)=>{const soughtHeader=header.toLowerCase();for(const headerName of Object.keys(headers))if(soughtHeader===headerName.toLowerCase())return!0;return!1};hasHeaderWithPrefix=(headerPrefix,headers)=>{const soughtHeaderPrefix=headerPrefix.toLowerCase();for(const headerName of Object.keys(headers))if(headerName.toLowerCase().startsWith(soughtHeaderPrefix))return!0;return!1};isStreaming=body=>void 0!==body&&"string"!=typeof body&&!ArrayBuffer.isView(body)&&!isArrayBuffer(body);__assign=function(){__assign=Object.assign||function __assign2(t3){var s2,i2,n3,p4;for(i2=1,n3=arguments.length;i2(new TextEncoder).encode(input);fromUtf83="undefined"!=typeof Buffer&&Buffer.from?function(input){return Buffer.from(input,"utf8")}:fromUtf82;AwsCrc32c=function(){function AwsCrc32c2(){this.crc32c=new Crc32c}AwsCrc32c2.prototype.update=function(toHash){isEmptyData(toHash)||this.crc32c.update(convertToBuffer(toHash))};AwsCrc32c2.prototype.digest=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(_a8){return[2,numToUint8(this.crc32c.digest())]}))}))};AwsCrc32c2.prototype.reset=function(){this.crc32c=new Crc32c};return AwsCrc32c2}();Crc32c=function(){function Crc32c2(){this.checksum=4294967295}Crc32c2.prototype.update=function(data){var e_1,_a8,data_1,data_1_1,byte;try{for(data_1_1=(data_1=__values(data)).next();!data_1_1.done;data_1_1=data_1.next()){byte=data_1_1.value;this.checksum=this.checksum>>>8^lookupTable[255&(this.checksum^byte)]}}catch(e_1_1){e_1={error:e_1_1}}finally{try{data_1_1&&!data_1_1.done&&(_a8=data_1.return)&&_a8.call(data_1)}finally{if(e_1)throw e_1.error}}return this};Crc32c2.prototype.digest=function(){return(4294967295^this.checksum)>>>0};return Crc32c2}();lookupTable=uint32ArrayFrom([0,4067132163,3778769143,324072436,3348797215,904991772,648144872,3570033899,2329499855,2024987596,1809983544,2575936315,1296289744,3207089363,2893594407,1578318884,274646895,3795141740,4049975192,51262619,3619967088,632279923,922689671,3298075524,2592579488,1760304291,2075979607,2312596564,1562183871,2943781820,3156637768,1313733451,549293790,3537243613,3246849577,871202090,3878099393,357341890,102525238,4101499445,2858735121,1477399826,1264559846,3107202533,1845379342,2677391885,2361733625,2125378298,820201905,3263744690,3520608582,598981189,4151959214,85089709,373468761,3827903834,3124367742,1213305469,1526817161,2842354314,2107672161,2412447074,2627466902,1861252501,1098587580,3004210879,2688576843,1378610760,2262928035,1955203488,1742404180,2511436119,3416409459,969524848,714683780,3639785095,205050476,4266873199,3976438427,526918040,1361435347,2739821008,2954799652,1114974503,2529119692,1691668175,2005155131,2247081528,3690758684,697762079,986182379,3366744552,476452099,3993867776,4250756596,255256311,1640403810,2477592673,2164122517,1922457750,2791048317,1412925310,1197962378,3037525897,3944729517,427051182,170179418,4165941337,746937522,3740196785,3451792453,1070968646,1905808397,2213795598,2426610938,1657317369,3053634322,1147748369,1463399397,2773627110,4215344322,153784257,444234805,3893493558,1021025245,3467647198,3722505002,797665321,2197175160,1889384571,1674398607,2443626636,1164749927,3070701412,2757221520,1446797203,137323447,4198817972,3910406976,461344835,3484808360,1037989803,781091935,3705997148,2460548119,1623424788,1939049696,2180517859,1429367560,2807687179,3020495871,1180866812,410100952,3927582683,4182430767,186734380,3756733383,763408580,1053836080,3434856499,2722870694,1344288421,1131464017,2971354706,1708204729,2545590714,2229949006,1988219213,680717673,3673779818,3383336350,1002577565,4010310262,493091189,238226049,4233660802,2987750089,1082061258,1395524158,2705686845,1972364758,2279892693,2494862625,1725896226,952904198,3399985413,3656866545,731699698,4283874585,222117402,510512622,3959836397,3280807620,837199303,582374963,3504198960,68661723,4135334616,3844915500,390545967,1230274059,3141532936,2825850620,1510247935,2395924756,2091215383,1878366691,2644384480,3553878443,565732008,854102364,3229815391,340358836,3861050807,4117890627,119113024,1493875044,2875275879,3090270611,1247431312,2660249211,1828433272,2141937292,2378227087,3811616794,291187481,34330861,4032846830,615137029,3603020806,3314634738,939183345,1776939221,2609017814,2295496738,2058945313,2926798794,1545135305,1330124605,3173225534,4084100981,17165430,307568514,3762199681,888469610,3332340585,3587147933,665062302,2042050490,2346497209,2559330125,1793573966,3190661285,1279665062,1595330642,2910671697]);AwsCrc32=function(){function AwsCrc322(){this.crc32=new Crc32}AwsCrc322.prototype.update=function(toHash){isEmptyData(toHash)||this.crc32.update(convertToBuffer(toHash))};AwsCrc322.prototype.digest=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(_a8){return[2,numToUint8(this.crc32.digest())]}))}))};AwsCrc322.prototype.reset=function(){this.crc32=new Crc32};return AwsCrc322}();Crc32=function(){function Crc322(){this.checksum=4294967295}Crc322.prototype.update=function(data){var e_1,_a8,data_1,data_1_1,byte;try{for(data_1_1=(data_1=__values(data)).next();!data_1_1.done;data_1_1=data_1.next()){byte=data_1_1.value;this.checksum=this.checksum>>>8^lookupTable2[255&(this.checksum^byte)]}}catch(e_1_1){e_1={error:e_1_1}}finally{try{data_1_1&&!data_1_1.done&&(_a8=data_1.return)&&_a8.call(data_1)}finally{if(e_1)throw e_1.error}}return this};Crc322.prototype.digest=function(){return(4294967295^this.checksum)>>>0};return Crc322}();lookupTable2=uint32ArrayFrom([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);getCrc32ChecksumAlgorithmFunction=()=>AwsCrc32;selectChecksumAlgorithmFunction=(checksumAlgorithm,config)=>{switch(checksumAlgorithm){case ChecksumAlgorithm.MD5:return config.md5;case ChecksumAlgorithm.CRC32:return getCrc32ChecksumAlgorithmFunction();case ChecksumAlgorithm.CRC32C:return AwsCrc32c;case ChecksumAlgorithm.CRC64NVME:throw new Error('Please check whether you have installed the "@aws-sdk/crc64-nvme-crt" package explicitly. \nYou must also register the package by calling [require("@aws-sdk/crc64-nvme-crt");] or an ESM equivalent such as [import "@aws-sdk/crc64-nvme-crt";]. \nFor more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt');case ChecksumAlgorithm.SHA1:return config.sha1;case ChecksumAlgorithm.SHA256:return config.sha256;default:throw new Error(`Unsupported checksum algorithm: ${checksumAlgorithm}`)}};stringHasher=(checksumAlgorithmFn,body)=>{const hash3=new checksumAlgorithmFn;hash3.update(toUint8Array(body||""));return hash3.digest()};flexibleChecksumsMiddlewareOptions={name:"flexibleChecksumsMiddleware",step:"build",tags:["BODY_CHECKSUM"],override:!0};flexibleChecksumsMiddleware=(config,middlewareConfig)=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);if(hasHeaderWithPrefix("x-amz-checksum-",args.request.headers))return next2(args);const{request:request2,input}=args,{body:requestBody,headers}=request2,{base64Encoder,streamHasher}=config,{requestChecksumRequired,requestAlgorithmMember}=middlewareConfig,requestChecksumCalculation=await config.requestChecksumCalculation(),requestAlgorithmMemberName=null==requestAlgorithmMember?void 0:requestAlgorithmMember.name,requestAlgorithmMemberHttpHeader=null==requestAlgorithmMember?void 0:requestAlgorithmMember.httpHeader;if(requestAlgorithmMemberName&&!input[requestAlgorithmMemberName]&&(requestChecksumCalculation===RequestChecksumCalculation.WHEN_SUPPORTED||requestChecksumRequired)){input[requestAlgorithmMemberName]=DEFAULT_CHECKSUM_ALGORITHM;requestAlgorithmMemberHttpHeader&&(headers[requestAlgorithmMemberHttpHeader]=DEFAULT_CHECKSUM_ALGORITHM)}const checksumAlgorithm=getChecksumAlgorithmForRequest(input,{requestChecksumRequired,requestAlgorithmMember:null==requestAlgorithmMember?void 0:requestAlgorithmMember.name,requestChecksumCalculation});let updatedBody=requestBody,updatedHeaders=headers;if(checksumAlgorithm){switch(checksumAlgorithm){case ChecksumAlgorithm.CRC32:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_CRC32","U");break;case ChecksumAlgorithm.CRC32C:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_CRC32C","V");break;case ChecksumAlgorithm.CRC64NVME:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_CRC64","W");break;case ChecksumAlgorithm.SHA1:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_SHA1","X");break;case ChecksumAlgorithm.SHA256:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_SHA256","Y");break}const checksumLocationName=getChecksumLocationName(checksumAlgorithm),checksumAlgorithmFn=selectChecksumAlgorithmFunction(checksumAlgorithm,config);if(isStreaming(requestBody)){const{getAwsChunkedEncodingStream:getAwsChunkedEncodingStream2,bodyLengthChecker}=config;updatedBody=getAwsChunkedEncodingStream2("number"==typeof config.requestStreamBufferSize&&config.requestStreamBufferSize>=8192?createBufferedReadable(requestBody,config.requestStreamBufferSize,context2.logger):requestBody,{base64Encoder,bodyLengthChecker,checksumLocationName,checksumAlgorithmFn,streamHasher});updatedHeaders={...headers,"content-encoding":headers["content-encoding"]?`${headers["content-encoding"]},aws-chunked`:"aws-chunked","transfer-encoding":"chunked","x-amz-decoded-content-length":headers["content-length"],"x-amz-content-sha256":"STREAMING-UNSIGNED-PAYLOAD-TRAILER","x-amz-trailer":checksumLocationName};delete updatedHeaders["content-length"]}else if(!hasHeader2(checksumLocationName,headers)){const rawChecksum=await stringHasher(checksumAlgorithmFn,requestBody);updatedHeaders={...headers,[checksumLocationName]:base64Encoder(rawChecksum)}}}return await next2({...args,request:{...request2,headers:updatedHeaders,body:updatedBody}})};flexibleChecksumsInputMiddlewareOptions={name:"flexibleChecksumsInputMiddleware",toMiddleware:"serializerMiddleware",relation:"before",tags:["BODY_CHECKSUM"],override:!0};flexibleChecksumsInputMiddleware=(config,middlewareConfig)=>(next2,context2)=>async args=>{const input=args.input,{requestValidationModeMember}=middlewareConfig,requestChecksumCalculation=await config.requestChecksumCalculation(),responseChecksumValidation=await config.responseChecksumValidation();switch(requestChecksumCalculation){case RequestChecksumCalculation.WHEN_REQUIRED:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED","a");break;case RequestChecksumCalculation.WHEN_SUPPORTED:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED","Z");break}switch(responseChecksumValidation){case ResponseChecksumValidation.WHEN_REQUIRED:setFeature(context2,"FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED","c");break;case ResponseChecksumValidation.WHEN_SUPPORTED:setFeature(context2,"FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED","b");break}requestValidationModeMember&&!input[requestValidationModeMember]&&responseChecksumValidation===ResponseChecksumValidation.WHEN_SUPPORTED&&(input[requestValidationModeMember]="ENABLED");return next2(args)};getChecksumAlgorithmListForResponse=(responseAlgorithms=[])=>{const validChecksumAlgorithms=[];for(const algorithm of PRIORITY_ORDER_ALGORITHMS)responseAlgorithms.includes(algorithm)&&CLIENT_SUPPORTED_ALGORITHMS.includes(algorithm)&&validChecksumAlgorithms.push(algorithm);return validChecksumAlgorithms};isChecksumWithPartNumber=checksum=>{const lastHyphenIndex=checksum.lastIndexOf("-");if(-1!==lastHyphenIndex){const numberPart=checksum.slice(lastHyphenIndex+1);if(!numberPart.startsWith("0")){const number=parseInt(numberPart,10);if(!isNaN(number)&&number>=1&&number<=1e4)return!0}}return!1};getChecksum=async(body,{checksumAlgorithmFn,base64Encoder})=>base64Encoder(await stringHasher(checksumAlgorithmFn,body));validateChecksumFromResponse=async(response,{config,responseAlgorithms,logger:logger2})=>{const checksumAlgorithms=getChecksumAlgorithmListForResponse(responseAlgorithms),{body:responseBody,headers:responseHeaders}=response;for(const algorithm of checksumAlgorithms){const responseHeader=getChecksumLocationName(algorithm),checksumFromResponse=responseHeaders[responseHeader];if(checksumFromResponse){let checksumAlgorithmFn;try{checksumAlgorithmFn=selectChecksumAlgorithmFunction(algorithm,config)}catch(error){if(algorithm===ChecksumAlgorithm.CRC64NVME){null==logger2||logger2.warn(`Skipping ${ChecksumAlgorithm.CRC64NVME} checksum validation: ${error.message}`);continue}throw error}const{base64Encoder}=config;if(isStreaming(responseBody)){response.body=createChecksumStream({expectedChecksum:checksumFromResponse,checksumSourceLocation:responseHeader,checksum:new checksumAlgorithmFn,source:responseBody,base64Encoder});return}const checksum=await getChecksum(responseBody,{checksumAlgorithmFn,base64Encoder});if(checksum===checksumFromResponse)break;throw new Error(`Checksum mismatch: expected "${checksum}" but received "${checksumFromResponse}" in response header "${responseHeader}".`)}}};flexibleChecksumsResponseMiddlewareOptions={name:"flexibleChecksumsResponseMiddleware",toMiddleware:"deserializerMiddleware",relation:"after",tags:["BODY_CHECKSUM"],override:!0};flexibleChecksumsResponseMiddleware=(config,middlewareConfig)=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const input=args.input,result=await next2(args),response=result.response,{requestValidationModeMember,responseAlgorithms}=middlewareConfig;if(requestValidationModeMember&&"ENABLED"===input[requestValidationModeMember]){const{clientName,commandName}=context2;if("S3Client"===clientName&&"GetObjectCommand"===commandName&&getChecksumAlgorithmListForResponse(responseAlgorithms).every((algorithm=>{const responseHeader=getChecksumLocationName(algorithm),checksumFromResponse=response.headers[responseHeader];return!checksumFromResponse||isChecksumWithPartNumber(checksumFromResponse)})))return result;await validateChecksumFromResponse(response,{config,responseAlgorithms,logger:context2.logger})}return result};getFlexibleChecksumsPlugin=(config,middlewareConfig)=>({applyToStack:clientStack=>{clientStack.add(flexibleChecksumsMiddleware(config,middlewareConfig),flexibleChecksumsMiddlewareOptions);clientStack.addRelativeTo(flexibleChecksumsInputMiddleware(config,middlewareConfig),flexibleChecksumsInputMiddlewareOptions);clientStack.addRelativeTo(flexibleChecksumsResponseMiddleware(config,middlewareConfig),flexibleChecksumsResponseMiddlewareOptions)}});resolveFlexibleChecksumsConfig=input=>{const{requestChecksumCalculation,responseChecksumValidation,requestStreamBufferSize}=input;return Object.assign(input,{requestChecksumCalculation:normalizeProvider(null!=requestChecksumCalculation?requestChecksumCalculation:DEFAULT_REQUEST_CHECKSUM_CALCULATION),responseChecksumValidation:normalizeProvider(null!=responseChecksumValidation?responseChecksumValidation:DEFAULT_RESPONSE_CHECKSUM_VALIDATION),requestStreamBufferSize:Number(null!=requestStreamBufferSize?requestStreamBufferSize:0)})};hostHeaderMiddleware=options=>next2=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const{request:request2}=args,{handlerProtocol=""}=options.requestHandler.metadata||{};if(handlerProtocol.indexOf("h2")>=0&&!request2.headers[":authority"]){delete request2.headers.host;request2.headers[":authority"]=request2.hostname+(request2.port?":"+request2.port:"")}else if(!request2.headers.host){let host=request2.hostname;null!=request2.port&&(host+=`:${request2.port}`);request2.headers.host=host}return next2(args)};hostHeaderMiddlewareOptions={name:"hostHeaderMiddleware",step:"build",priority:"low",tags:["HOST"],override:!0};getHostHeaderPlugin=options=>({applyToStack:clientStack=>{clientStack.add(hostHeaderMiddleware(options),hostHeaderMiddlewareOptions)}});loggerMiddleware=()=>(next2,context2)=>async args=>{var _a8,_b5;try{const response=await next2(args),{clientName,commandName,logger:logger2,dynamoDbDocumentClientOptions={}}=context2,{overrideInputFilterSensitiveLog,overrideOutputFilterSensitiveLog}=dynamoDbDocumentClientOptions,inputFilterSensitiveLog=null!=overrideInputFilterSensitiveLog?overrideInputFilterSensitiveLog:context2.inputFilterSensitiveLog,outputFilterSensitiveLog=null!=overrideOutputFilterSensitiveLog?overrideOutputFilterSensitiveLog:context2.outputFilterSensitiveLog,{$metadata,...outputWithoutMetadata}=response.output;null==(_a8=null==logger2?void 0:logger2.info)||_a8.call(logger2,{clientName,commandName,input:inputFilterSensitiveLog(args.input),output:outputFilterSensitiveLog(outputWithoutMetadata),metadata:$metadata});return response}catch(error){const{clientName,commandName,logger:logger2,dynamoDbDocumentClientOptions={}}=context2,{overrideInputFilterSensitiveLog}=dynamoDbDocumentClientOptions,inputFilterSensitiveLog=null!=overrideInputFilterSensitiveLog?overrideInputFilterSensitiveLog:context2.inputFilterSensitiveLog;null==(_b5=null==logger2?void 0:logger2.error)||_b5.call(logger2,{clientName,commandName,input:inputFilterSensitiveLog(args.input),error,metadata:error.$metadata});throw error}};loggerMiddlewareOptions={name:"loggerMiddleware",tags:["LOGGER"],step:"initialize",override:!0};getLoggerPlugin=options=>({applyToStack:clientStack=>{clientStack.add(loggerMiddleware(),loggerMiddlewareOptions)}});recursionDetectionMiddleware=options=>next2=>async args=>{var _a8,_b5;const{request:request2}=args;if(!HttpRequest.isInstance(request2)||"node"!==options.runtime)return next2(args);const traceIdHeader=null!=(_b5=Object.keys(null!=(_a8=request2.headers)?_a8:{}).find((h3=>h3.toLowerCase()==="X-Amzn-Trace-Id".toLowerCase())))?_b5:"X-Amzn-Trace-Id";if(request2.headers.hasOwnProperty(traceIdHeader))return next2(args);const functionName=process.env.AWS_LAMBDA_FUNCTION_NAME,traceId=process.env._X_AMZN_TRACE_ID,nonEmptyString=str=>"string"==typeof str&&str.length>0;nonEmptyString(functionName)&&nonEmptyString(traceId)&&(request2.headers["X-Amzn-Trace-Id"]=traceId);return next2({...args,request:request2})};addRecursionDetectionMiddlewareOptions={step:"build",tags:["RECURSION_DETECTION"],name:"recursionDetectionMiddleware",override:!0,priority:"low"};getRecursionDetectionPlugin=options=>({applyToStack:clientStack=>{clientStack.add(recursionDetectionMiddleware(options),addRecursionDetectionMiddlewareOptions)}});CONTENT_LENGTH_HEADER="content-length";DECODED_CONTENT_LENGTH_HEADER="x-amz-decoded-content-length";checkContentLengthHeaderMiddlewareOptions={step:"finalizeRequest",tags:["CHECK_CONTENT_LENGTH_HEADER"],name:"getCheckContentLengthHeaderPlugin",override:!0};getCheckContentLengthHeaderPlugin=unused=>({applyToStack:clientStack=>{clientStack.add(checkContentLengthHeader(),checkContentLengthHeaderMiddlewareOptions)}});regionRedirectEndpointMiddleware=config=>(next2,context2)=>async args=>{const originalRegion=await config.region(),regionProviderRef=config.region;let unlock=()=>{};if(context2.__s3RegionRedirect){Object.defineProperty(config,"region",{writable:!1,value:async()=>context2.__s3RegionRedirect});unlock=()=>Object.defineProperty(config,"region",{writable:!0,value:regionProviderRef})}try{const result=await next2(args);if(context2.__s3RegionRedirect){unlock();if(originalRegion!==await config.region())throw new Error("Region was not restored following S3 region redirect.")}return result}catch(e3){unlock();throw e3}};regionRedirectEndpointMiddlewareOptions={tags:["REGION_REDIRECT","S3"],name:"regionRedirectEndpointMiddleware",override:!0,relation:"before",toMiddleware:"endpointV2Middleware"};regionRedirectMiddlewareOptions={step:"initialize",tags:["REGION_REDIRECT","S3"],name:"regionRedirectMiddleware",override:!0};getRegionRedirectMiddlewarePlugin=clientConfig=>({applyToStack:clientStack=>{clientStack.add(regionRedirectMiddleware(clientConfig),regionRedirectMiddlewareOptions);clientStack.addRelativeTo(regionRedirectEndpointMiddleware(clientConfig),regionRedirectEndpointMiddlewareOptions)}});s3ExpiresMiddleware=config=>(next2,context2)=>async args=>{var _a8;const result=await next2(args),{response}=result;if(HttpResponse.isInstance(response)&&response.headers.expires){response.headers.expiresstring=response.headers.expires;try{parseRfc7231DateTime(response.headers.expires)}catch(e3){null==(_a8=context2.logger)||_a8.warn(`AWS SDK Warning for ${context2.clientName}::${context2.commandName} response parsing (${response.headers.expires}): ${e3}`);delete response.headers.expires}}return result};s3ExpiresMiddlewareOptions={tags:["S3"],name:"s3ExpiresMiddleware",override:!0,relation:"after",toMiddleware:"deserializerMiddleware"};getS3ExpiresMiddlewarePlugin=clientConfig=>({applyToStack:clientStack=>{clientStack.addRelativeTo(s3ExpiresMiddleware(),s3ExpiresMiddlewareOptions)}});_S3ExpressIdentityCache=class _S3ExpressIdentityCache{constructor(data={}){__publicField(this,"data");__publicField(this,"lastPurgeTime",Date.now());this.data=data}get(key3){const entry=this.data[key3];if(entry)return entry}set(key3,entry){this.data[key3]=entry;return entry}delete(key3){delete this.data[key3]}async purgeExpired(){const now3=Date.now();if(!(this.lastPurgeTime+_S3ExpressIdentityCache.EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS>now3))for(const key3 in this.data){const entry=this.data[key3];if(!entry.isRefreshing){const credential=await entry.identity;credential.expiration&&credential.expiration.getTime(){var _a8,_b5,_c3,_d2;if((null!=(_b5=null==(_a8=identity.expiration)?void 0:_a8.getTime())?_b5:0){cache2.set(key3,new S3ExpressIdentityCacheEntry(Promise.resolve(id)))}))}return identity})):cache2.set(key3,new S3ExpressIdentityCacheEntry(this.getIdentity(key3))).identity}async getIdentity(key3){var _a8,_b5;await this.cache.purgeExpired().catch((error=>{console.warn("Error while clearing expired entries in S3ExpressIdentityCache: \n"+error)}));const session=await this.createSessionFn(key3);if(!(null==(_a8=session.Credentials)?void 0:_a8.AccessKeyId)||!(null==(_b5=session.Credentials)?void 0:_b5.SecretAccessKey))throw new Error("s3#createSession response credential missing AccessKeyId or SecretAccessKey.");return{accessKeyId:session.Credentials.AccessKeyId,secretAccessKey:session.Credentials.SecretAccessKey,sessionToken:session.Credentials.SessionToken,expiration:session.Credentials.Expiration?new Date(session.Credentials.Expiration):void 0}}};__publicField(_S3ExpressIdentityProviderImpl,"REFRESH_WINDOW_MS",6e4);S3ExpressIdentityProviderImpl=_S3ExpressIdentityProviderImpl;(function(SelectorType3){SelectorType3.ENV="env";SelectorType3.CONFIG="shared config entry"})(SelectorType2||(SelectorType2={}));SESSION_TOKEN_HEADER=(SESSION_TOKEN_QUERY_PARAM="X-Amz-S3session-Token").toLowerCase();SignatureV4S3Express=class extends SignatureV4{async signWithCredentials(requestToSign,credentials,options){const credentialsWithoutSessionToken=getCredentialsWithoutSessionToken(credentials);requestToSign.headers[SESSION_TOKEN_HEADER]=credentials.sessionToken;setSingleOverride(this,credentialsWithoutSessionToken);return this.signRequest(requestToSign,null!=options?options:{})}async presignWithCredentials(requestToSign,credentials,options){var _a8;const credentialsWithoutSessionToken=getCredentialsWithoutSessionToken(credentials);delete requestToSign.headers[SESSION_TOKEN_HEADER];requestToSign.headers[SESSION_TOKEN_QUERY_PARAM]=credentials.sessionToken;requestToSign.query=null!=(_a8=requestToSign.query)?_a8:{};requestToSign.query[SESSION_TOKEN_QUERY_PARAM]=credentials.sessionToken;setSingleOverride(this,credentialsWithoutSessionToken);return this.presign(requestToSign,options)}};s3ExpressMiddleware=options=>(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2,_e2;if(context2.endpointV2){const endpoint=context2.endpointV2,isS3ExpressAuth="sigv4-s3express"===(null==(_c3=null==(_b5=null==(_a8=endpoint.properties)?void 0:_a8.authSchemes)?void 0:_b5[0])?void 0:_c3.name);if("S3Express"===(null==(_d2=endpoint.properties)?void 0:_d2.backend)||"Directory"===(null==(_e2=endpoint.properties)?void 0:_e2.bucketType)){setFeature(context2,"S3_EXPRESS_BUCKET","J");context2.isS3ExpressBucket=!0}if(isS3ExpressAuth){const requestBucket=args.input.Bucket;if(requestBucket){const s3ExpressIdentity=await options.s3ExpressIdentityProvider.getS3ExpressIdentity(await options.credentials(),{Bucket:requestBucket});context2.s3ExpressIdentity=s3ExpressIdentity;HttpRequest.isInstance(args.request)&&s3ExpressIdentity.sessionToken&&(args.request.headers[SESSION_TOKEN_HEADER]=s3ExpressIdentity.sessionToken)}}}return next2(args)};s3ExpressMiddlewareOptions={name:"s3ExpressMiddleware",step:"build",tags:["S3","S3_EXPRESS"],override:!0};getS3ExpressPlugin=options=>({applyToStack:clientStack=>{clientStack.add(s3ExpressMiddleware(options),s3ExpressMiddlewareOptions)}});signS3Express=async(s3ExpressIdentity,signingOptions,request2,sigV4MultiRegionSigner)=>{const signedRequest=await sigV4MultiRegionSigner.signWithCredentials(request2,s3ExpressIdentity,{});if(signedRequest.headers["X-Amz-Security-Token"]||signedRequest.headers["x-amz-security-token"])throw new Error("X-Amz-Security-Token must not be set for s3-express requests.");return signedRequest};defaultErrorHandler2=signingProperties=>error=>{throw error};defaultSuccessHandler2=(httpResponse,signingProperties)=>{};s3ExpressHttpSigningMiddleware=config=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const scheme=getSmithyContext2(context2).selectedHttpAuthScheme;if(!scheme)throw new Error("No HttpAuthScheme was selected: unable to sign request");const{httpAuthOption:{signingProperties={}},identity,signer}=scheme;let request2;request2=context2.s3ExpressIdentity?await signS3Express(context2.s3ExpressIdentity,0,args.request,await config.signer()):await signer.sign(args.request,identity,signingProperties);const output=await next2({...args,request:request2}).catch((signer.errorHandler||defaultErrorHandler2)(signingProperties));(signer.successHandler||defaultSuccessHandler2)(output.response,signingProperties);return output};getS3ExpressHttpSigningPlugin=config=>({applyToStack:clientStack=>{clientStack.addRelativeTo(s3ExpressHttpSigningMiddleware(config),httpSigningMiddlewareOptions)}});resolveS3Config=(input,{session})=>{const[s3ClientProvider,CreateSessionCommandCtor]=session,{forcePathStyle,useAccelerateEndpoint,disableMultiregionAccessPoints,followRegionRedirects,s3ExpressIdentityProvider,bucketEndpoint}=input;return Object.assign(input,{forcePathStyle:null!=forcePathStyle&&forcePathStyle,useAccelerateEndpoint:null!=useAccelerateEndpoint&&useAccelerateEndpoint,disableMultiregionAccessPoints:null!=disableMultiregionAccessPoints&&disableMultiregionAccessPoints,followRegionRedirects:null!=followRegionRedirects&&followRegionRedirects,s3ExpressIdentityProvider:null!=s3ExpressIdentityProvider?s3ExpressIdentityProvider:new S3ExpressIdentityProviderImpl((async key3=>s3ClientProvider().send(new CreateSessionCommandCtor({Bucket:key3})))),bucketEndpoint:null!=bucketEndpoint&&bucketEndpoint})};THROW_IF_EMPTY_BODY={CopyObjectCommand:!0,UploadPartCopyCommand:!0,CompleteMultipartUploadCommand:!0};throw200ExceptionsMiddleware=config=>(next2,context2)=>async args=>{const result=await next2(args),{response}=result;if(!HttpResponse.isInstance(response))return result;const{statusCode,body:sourceBody}=response;if(statusCode<200||statusCode>=300)return result;if("function"!=typeof(null==sourceBody?void 0:sourceBody.stream)&&"function"!=typeof(null==sourceBody?void 0:sourceBody.pipe)&&"function"!=typeof(null==sourceBody?void 0:sourceBody.tee))return result;let bodyCopy=sourceBody,body=sourceBody;!sourceBody||"object"!=typeof sourceBody||sourceBody instanceof Uint8Array||([bodyCopy,body]=await splitStream(sourceBody));response.body=body;const bodyBytes=await collectBody2(bodyCopy,{streamCollector:async stream=>headStream(stream,3e3)});"function"==typeof(null==bodyCopy?void 0:bodyCopy.destroy)&&bodyCopy.destroy();const bodyStringTail=config.utf8Encoder(bodyBytes.subarray(bodyBytes.length-16));if(0===bodyBytes.length&&THROW_IF_EMPTY_BODY[context2.commandName]){const err3=new Error("S3 aborted request");err3.name="InternalError";throw err3}bodyStringTail&&bodyStringTail.endsWith("")&&(response.statusCode=400);return result};collectBody2=(streamBody=new Uint8Array,context2)=>streamBody instanceof Uint8Array?Promise.resolve(streamBody):context2.streamCollector(streamBody)||Promise.resolve(new Uint8Array);throw200ExceptionsMiddlewareOptions={relation:"after",toMiddleware:"deserializerMiddleware",tags:["THROW_200_EXCEPTIONS","S3"],name:"throw200ExceptionsMiddleware",override:!0};getThrow200ExceptionsPlugin=config=>({applyToStack:clientStack=>{clientStack.addRelativeTo(throw200ExceptionsMiddleware(config),throw200ExceptionsMiddlewareOptions)}});validate=str=>"string"==typeof str&&0===str.indexOf("arn:")&&str.split(":").length>=6;bucketEndpointMiddlewareOptions={name:"bucketEndpointMiddleware",override:!0,relation:"after",toMiddleware:"endpointV2Middleware"};validateBucketNameMiddlewareOptions={step:"initialize",tags:["VALIDATE_BUCKET_NAME"],name:"validateBucketNameMiddleware",override:!0};getValidateBucketNamePlugin=options=>({applyToStack:clientStack=>{clientStack.add(validateBucketNameMiddleware(options),validateBucketNameMiddlewareOptions);clientStack.addRelativeTo(bucketEndpointMiddleware(options),bucketEndpointMiddlewareOptions)}});DEFAULT_UA_APP_ID=void 0;EndpointCache=class{constructor({size,params}){this.data=new Map;this.parameters=[];this.capacity=null!=size?size:50;params&&(this.parameters=params)}get(endpointParams,resolver2){const key3=this.hash(endpointParams);if(!1===key3)return resolver2();if(!this.data.has(key3)){if(this.data.size>this.capacity+10){const keys3=this.data.keys();let i2=0;for(;;){const{value,done}=keys3.next();this.data.delete(value);if(done||++i2>10)break}}this.data.set(key3,resolver2())}return this.data.get(key3)}size(){return this.data.size}hash(endpointParams){var _a8;let buffer="";const{parameters}=this;if(0===parameters.length)return!1;for(const param of parameters){const val2=String(null!=(_a8=endpointParams[param])?_a8:"");if(val2.includes("|;"))return!1;buffer+=val2+"|;"}return buffer}};IP_V4_REGEX=new RegExp("^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$");isIpAddress=value=>IP_V4_REGEX.test(value)||value.startsWith("[")&&value.endsWith("]");VALID_HOST_LABEL_REGEX=new RegExp("^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$");isValidHostLabel=(value,allowSubDomains=!1)=>{if(!allowSubDomains)return VALID_HOST_LABEL_REGEX.test(value);const labels=value.split(".");for(const label2 of labels)if(!isValidHostLabel(label2))return!1;return!0};customEndpointFunctions={};EndpointError=class extends Error{constructor(message){super(message);this.name="EndpointError"}};booleanEquals=(value1,value2)=>value1===value2;getAttrPathList=path2=>{const parts=path2.split("."),pathList=[];for(const part of parts){const squareBracketIndex=part.indexOf("[");if(-1!==squareBracketIndex){if(part.indexOf("]")!==part.length-1)throw new EndpointError(`Path: '${path2}' does not end with ']'`);const arrayIndex=part.slice(squareBracketIndex+1,-1);if(Number.isNaN(parseInt(arrayIndex)))throw new EndpointError(`Invalid array index: '${arrayIndex}' in path: '${path2}'`);0!==squareBracketIndex&&pathList.push(part.slice(0,squareBracketIndex));pathList.push(arrayIndex)}else pathList.push(part)}return pathList};getAttr=(value,path2)=>getAttrPathList(path2).reduce(((acc,index6)=>{if("object"!=typeof acc)throw new EndpointError(`Index '${index6}' in '${path2}' not found in '${JSON.stringify(value)}'`);return Array.isArray(acc)?acc[parseInt(index6)]:acc[index6]}),value);isSet=value=>null!=value;not=value=>!value;DEFAULT_PORTS={[EndpointURLScheme.HTTP]:80,[EndpointURLScheme.HTTPS]:443};endpointFunctions={booleanEquals,getAttr,isSet,isValidHostLabel,not,parseURL:value=>{const whatwgURL=(()=>{try{if(value instanceof URL)return value;if("object"==typeof value&&"hostname"in value){const{hostname:hostname2,port,protocol:protocol2="",path:path2="",query:query3={}}=value,url=new URL(`${protocol2}//${hostname2}${port?`:${port}`:""}${path2}`);url.search=Object.entries(query3).map((([k2,v2])=>`${k2}=${v2}`)).join("&");return url}return new URL(value)}catch(error){return null}})();if(!whatwgURL){console.error(`Unable to parse ${JSON.stringify(value)} as a whatwg URL.`);return null}const urlString=whatwgURL.href,{host,hostname,pathname,protocol,search}=whatwgURL;if(search)return null;const scheme=protocol.slice(0,-1);if(!Object.values(EndpointURLScheme).includes(scheme))return null;const isIp=isIpAddress(hostname);return{scheme,authority:`${host}${urlString.includes(`${host}:${DEFAULT_PORTS[scheme]}`)||"string"==typeof value&&value.includes(`${host}:${DEFAULT_PORTS[scheme]}`)?`:${DEFAULT_PORTS[scheme]}`:""}`,path:pathname,normalizedPath:pathname.endsWith("/")?pathname:`${pathname}/`,isIp}},stringEquals:(value1,value2)=>value1===value2,substring:(input,start,stop,reverse)=>start>=stop||input.lengthencodeURIComponent(value).replace(/[!*'()]/g,(c3=>`%${c3.charCodeAt(0).toString(16).toUpperCase()}`))};evaluateTemplate=(template,options)=>{const evaluatedTemplateArr=[],templateContext={...options.endpointParams,...options.referenceRecord};let currentIndex=0;for(;currentIndex({...options.endpointParams,...options.referenceRecord}[ref]);evaluateExpression=(obj,keyName,options)=>{if("string"==typeof obj)return evaluateTemplate(obj,options);if(obj.fn)return callFunction(obj,options);if(obj.ref)return getReferenceValue(obj,options);throw new EndpointError(`'${keyName}': ${String(obj)} is not a string, function or reference.`)};callFunction=({fn,argv},options)=>{const evaluatedArgs=argv.map((arg=>["boolean","number"].includes(typeof arg)?arg:evaluateExpression(arg,"arg",options))),fnSegments=fn.split(".");return fnSegments[0]in customEndpointFunctions&&null!=fnSegments[1]?customEndpointFunctions[fnSegments[0]][fnSegments[1]](...evaluatedArgs):endpointFunctions[fn](...evaluatedArgs)};evaluateCondition=({assign:assign2,...fnArgs},options)=>{var _a8,_b5;if(assign2&&assign2 in options.referenceRecord)throw new EndpointError(`'${assign2}' is already defined in Reference Record.`);const value=callFunction(fnArgs,options);null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints evaluateCondition: ${toDebugString(fnArgs)} = ${toDebugString(value)}`);return{result:""===value||!!value,...null!=assign2&&{toAssign:{name:assign2,value}}}};evaluateConditions=(conditions=[],options)=>{var _a8,_b5;const conditionsReferenceRecord={};for(const condition of conditions){const{result,toAssign}=evaluateCondition(condition,{...options,referenceRecord:{...options.referenceRecord,...conditionsReferenceRecord}});if(!result)return{result};if(toAssign){conditionsReferenceRecord[toAssign.name]=toAssign.value;null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints assign: ${toAssign.name} := ${toDebugString(toAssign.value)}`)}}return{result:!0,referenceRecord:conditionsReferenceRecord}};getEndpointHeaders=(headers,options)=>Object.entries(headers).reduce(((acc,[headerKey,headerVal])=>({...acc,[headerKey]:headerVal.map((headerValEntry=>{const processedExpr=evaluateExpression(headerValEntry,"Header value entry",options);if("string"!=typeof processedExpr)throw new EndpointError(`Header '${headerKey}' value '${processedExpr}' is not a string`);return processedExpr}))})),{});getEndpointProperty=(property,options)=>{if(Array.isArray(property))return property.map((propertyEntry=>getEndpointProperty(propertyEntry,options)));switch(typeof property){case"string":return evaluateTemplate(property,options);case"object":if(null===property)throw new EndpointError(`Unexpected endpoint property: ${property}`);return getEndpointProperties(property,options);case"boolean":return property;default:throw new EndpointError("Unexpected endpoint property type: "+typeof property)}};getEndpointProperties=(properties,options)=>Object.entries(properties).reduce(((acc,[propertyKey,propertyVal])=>({...acc,[propertyKey]:getEndpointProperty(propertyVal,options)})),{});getEndpointUrl=(endpointUrl,options)=>{const expression=evaluateExpression(endpointUrl,"Endpoint URL",options);if("string"==typeof expression)try{return new URL(expression)}catch(error){console.error(`Failed to construct URL with ${expression}`,error);throw error}throw new EndpointError("Endpoint URL must be a string, got "+typeof expression)};evaluateEndpointRule=(endpointRule,options)=>{var _a8,_b5;const{conditions,endpoint}=endpointRule,{result,referenceRecord}=evaluateConditions(conditions,options);if(!result)return;const endpointRuleOptions={...options,referenceRecord:{...options.referenceRecord,...referenceRecord}},{url,properties,headers}=endpoint;null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints Resolving endpoint from template: ${toDebugString(endpoint)}`);return{...null!=headers&&{headers:getEndpointHeaders(headers,endpointRuleOptions)},...null!=properties&&{properties:getEndpointProperties(properties,endpointRuleOptions)},url:getEndpointUrl(url,endpointRuleOptions)}};evaluateErrorRule=(errorRule,options)=>{const{conditions,error}=errorRule,{result,referenceRecord}=evaluateConditions(conditions,options);if(result)throw new EndpointError(evaluateExpression(error,"Error",{...options,referenceRecord:{...options.referenceRecord,...referenceRecord}}))};evaluateTreeRule=(treeRule,options)=>{const{conditions,rules}=treeRule,{result,referenceRecord}=evaluateConditions(conditions,options);if(result)return evaluateRules(rules,{...options,referenceRecord:{...options.referenceRecord,...referenceRecord}})};evaluateRules=(rules,options)=>{for(const rule of rules)if("endpoint"===rule.type){const endpointOrUndefined=evaluateEndpointRule(rule,options);if(endpointOrUndefined)return endpointOrUndefined}else if("error"===rule.type)evaluateErrorRule(rule,options);else{if("tree"!==rule.type)throw new EndpointError(`Unknown endpoint rule: ${rule}`);{const endpointOrUndefined=evaluateTreeRule(rule,options);if(endpointOrUndefined)return endpointOrUndefined}}throw new EndpointError("Rules evaluation failed")};resolveEndpoint=(ruleSetObject,options)=>{var _a8,_b5,_c3,_d2,_e2;const{endpointParams,logger:logger2}=options,{parameters,rules}=ruleSetObject;null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints Initial EndpointParams: ${toDebugString(endpointParams)}`);const paramsWithDefault=Object.entries(parameters).filter((([,v2])=>null!=v2.default)).map((([k2,v2])=>[k2,v2.default]));if(paramsWithDefault.length>0)for(const[paramKey,paramDefaultValue]of paramsWithDefault)endpointParams[paramKey]=null!=(_c3=endpointParams[paramKey])?_c3:paramDefaultValue;const requiredParams=Object.entries(parameters).filter((([,v2])=>v2.required)).map((([k2])=>k2));for(const requiredParam of requiredParams)if(null==endpointParams[requiredParam])throw new EndpointError(`Missing required parameter: '${requiredParam}'`);const endpoint=evaluateRules(rules,{endpointParams,logger:logger2,referenceRecord:{}});null==(_e2=null==(_d2=options.logger)?void 0:_d2.debug)||_e2.call(_d2,`endpoints Resolved endpoint: ${toDebugString(endpoint)}`);return endpoint};selectedPartitionsInfo={partitions:[{id:"aws",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",implicitGlobalRegion:"us-east-1",name:"aws",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$",regions:{"af-south-1":{description:"Africa (Cape Town)"},"ap-east-1":{description:"Asia Pacific (Hong Kong)"},"ap-northeast-1":{description:"Asia Pacific (Tokyo)"},"ap-northeast-2":{description:"Asia Pacific (Seoul)"},"ap-northeast-3":{description:"Asia Pacific (Osaka)"},"ap-south-1":{description:"Asia Pacific (Mumbai)"},"ap-south-2":{description:"Asia Pacific (Hyderabad)"},"ap-southeast-1":{description:"Asia Pacific (Singapore)"},"ap-southeast-2":{description:"Asia Pacific (Sydney)"},"ap-southeast-3":{description:"Asia Pacific (Jakarta)"},"ap-southeast-4":{description:"Asia Pacific (Melbourne)"},"ap-southeast-5":{description:"Asia Pacific (Malaysia)"},"ap-southeast-7":{description:"Asia Pacific (Thailand)"},"aws-global":{description:"AWS Standard global region"},"ca-central-1":{description:"Canada (Central)"},"ca-west-1":{description:"Canada West (Calgary)"},"eu-central-1":{description:"Europe (Frankfurt)"},"eu-central-2":{description:"Europe (Zurich)"},"eu-north-1":{description:"Europe (Stockholm)"},"eu-south-1":{description:"Europe (Milan)"},"eu-south-2":{description:"Europe (Spain)"},"eu-west-1":{description:"Europe (Ireland)"},"eu-west-2":{description:"Europe (London)"},"eu-west-3":{description:"Europe (Paris)"},"il-central-1":{description:"Israel (Tel Aviv)"},"me-central-1":{description:"Middle East (UAE)"},"me-south-1":{description:"Middle East (Bahrain)"},"mx-central-1":{description:"Mexico (Central)"},"sa-east-1":{description:"South America (Sao Paulo)"},"us-east-1":{description:"US East (N. Virginia)"},"us-east-2":{description:"US East (Ohio)"},"us-west-1":{description:"US West (N. California)"},"us-west-2":{description:"US West (Oregon)"}}},{id:"aws-cn",outputs:{dnsSuffix:"amazonaws.com.cn",dualStackDnsSuffix:"api.amazonwebservices.com.cn",implicitGlobalRegion:"cn-northwest-1",name:"aws-cn",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^cn\\-\\w+\\-\\d+$",regions:{"aws-cn-global":{description:"AWS China global region"},"cn-north-1":{description:"China (Beijing)"},"cn-northwest-1":{description:"China (Ningxia)"}}},{id:"aws-us-gov",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",implicitGlobalRegion:"us-gov-west-1",name:"aws-us-gov",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-gov\\-\\w+\\-\\d+$",regions:{"aws-us-gov-global":{description:"AWS GovCloud (US) global region"},"us-gov-east-1":{description:"AWS GovCloud (US-East)"},"us-gov-west-1":{description:"AWS GovCloud (US-West)"}}},{id:"aws-iso",outputs:{dnsSuffix:"c2s.ic.gov",dualStackDnsSuffix:"c2s.ic.gov",implicitGlobalRegion:"us-iso-east-1",name:"aws-iso",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-iso\\-\\w+\\-\\d+$",regions:{"aws-iso-global":{description:"AWS ISO (US) global region"},"us-iso-east-1":{description:"US ISO East"},"us-iso-west-1":{description:"US ISO WEST"}}},{id:"aws-iso-b",outputs:{dnsSuffix:"sc2s.sgov.gov",dualStackDnsSuffix:"sc2s.sgov.gov",implicitGlobalRegion:"us-isob-east-1",name:"aws-iso-b",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-isob\\-\\w+\\-\\d+$",regions:{"aws-iso-b-global":{description:"AWS ISOB (US) global region"},"us-isob-east-1":{description:"US ISOB East (Ohio)"}}},{id:"aws-iso-e",outputs:{dnsSuffix:"cloud.adc-e.uk",dualStackDnsSuffix:"cloud.adc-e.uk",implicitGlobalRegion:"eu-isoe-west-1",name:"aws-iso-e",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^eu\\-isoe\\-\\w+\\-\\d+$",regions:{"aws-iso-e-global":{description:"AWS ISOE (Europe) global region"},"eu-isoe-west-1":{description:"EU ISOE West"}}},{id:"aws-iso-f",outputs:{dnsSuffix:"csp.hci.ic.gov",dualStackDnsSuffix:"csp.hci.ic.gov",implicitGlobalRegion:"us-isof-south-1",name:"aws-iso-f",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^us\\-isof\\-\\w+\\-\\d+$",regions:{"aws-iso-f-global":{description:"AWS ISOF global region"},"us-isof-east-1":{description:"US ISOF EAST"},"us-isof-south-1":{description:"US ISOF SOUTH"}}},{id:"aws-eusc",outputs:{dnsSuffix:"amazonaws.eu",dualStackDnsSuffix:"amazonaws.eu",implicitGlobalRegion:"eusc-de-east-1",name:"aws-eusc",supportsDualStack:!1,supportsFIPS:!0},regionRegex:"^eusc\\-(de)\\-\\w+\\-\\d+$",regions:{"eusc-de-east-1":{description:"EU (Germany)"}}}],version:"1.1"};getUserAgentPrefix=()=>"";awsEndpointFunctions={isVirtualHostableS3Bucket:isVirtualHostableS3Bucket=(value,allowSubDomains=!1)=>{if(allowSubDomains){for(const label2 of value.split("."))if(!isVirtualHostableS3Bucket(label2))return!1;return!0}return!(!isValidHostLabel(value)||value.length<3||value.length>63||value!==value.toLowerCase()||isIpAddress(value))},parseArn:value=>{const segments=value.split(":");if(segments.length<6)return null;const[arn,partition2,service,region,accountId,...resourcePath]=segments;return"arn"!==arn||""===partition2||""===service||""===resourcePath.join(":")?null:{partition:partition2,service,region,accountId,resourceId:resourcePath.map((resource=>resource.split("/"))).flat()}},partition:value=>{const{partitions}=selectedPartitionsInfo;for(const partition2 of partitions){const{regions,outputs}=partition2;for(const[region,regionData]of Object.entries(regions))if(region===value)return{...outputs,...regionData}}for(const partition2 of partitions){const{regionRegex,outputs}=partition2;if(new RegExp(regionRegex).test(value))return{...outputs}}const DEFAULT_PARTITION=partitions.find((partition2=>"aws"===partition2.id));if(!DEFAULT_PARTITION)throw new Error("Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist.");return{...DEFAULT_PARTITION.outputs}}};customEndpointFunctions.aws=awsEndpointFunctions;ACCOUNT_ID_ENDPOINT_REGEX=/\d{12}\.ddb/;UA_NAME_ESCAPE_REGEX=/[^\!\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w]/g;UA_VALUE_ESCAPE_REGEX=/[^\!\$\%\&\'\*\+\-\.\^\_\`\|\~\d\w\#]/g;BYTE_LIMIT=1024;userAgentMiddleware=options=>(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2;const{request:request2}=args;if(!HttpRequest.isInstance(request2))return next2(args);const{headers}=request2,userAgent=(null==(_a8=null==context2?void 0:context2.userAgent)?void 0:_a8.map(escapeUserAgent))||[],defaultUserAgent2=(await options.defaultUserAgentProvider()).map(escapeUserAgent);await checkFeatures(context2,options,args);const awsContext=context2;defaultUserAgent2.push(`m/${encodeFeatures(Object.assign({},null==(_b5=context2.__smithy_context)?void 0:_b5.features,null==(_c3=awsContext.__aws_sdk_context)?void 0:_c3.features))}`);const customUserAgent=(null==(_d2=null==options?void 0:options.customUserAgent)?void 0:_d2.map(escapeUserAgent))||[],appId=await options.userAgentAppId();appId&&defaultUserAgent2.push(escapeUserAgent([`app/${appId}`]));const prefix=getUserAgentPrefix(),sdkUserAgentValue=(prefix?[prefix]:[]).concat([...defaultUserAgent2,...userAgent,...customUserAgent]).join(" "),normalUAValue=[...defaultUserAgent2.filter((section=>section.startsWith("aws-sdk-"))),...customUserAgent].join(" ");if("browser"!==options.runtime){normalUAValue&&(headers["x-amz-user-agent"]=headers["x-amz-user-agent"]?`${headers["user-agent"]} ${normalUAValue}`:normalUAValue);headers["user-agent"]=sdkUserAgentValue}else headers["x-amz-user-agent"]=sdkUserAgentValue;return next2({...args,request:request2})};escapeUserAgent=userAgentPair=>{var _a8;const name=userAgentPair[0].split("/").map((part=>part.replace(UA_NAME_ESCAPE_REGEX,"-"))).join("/"),version2=null==(_a8=userAgentPair[1])?void 0:_a8.replace(UA_VALUE_ESCAPE_REGEX,"-"),prefixSeparatorIndex=name.indexOf("/"),prefix=name.substring(0,prefixSeparatorIndex);let uaName=name.substring(prefixSeparatorIndex+1);"api"===prefix&&(uaName=uaName.toLowerCase());return[prefix,uaName,version2].filter((item=>item&&item.length>0)).reduce(((acc,item,index6)=>{switch(index6){case 0:return item;case 1:return`${acc}/${item}`;default:return`${acc}#${item}`}}),"")};getUserAgentMiddlewareOptions={name:"getUserAgentMiddleware",step:"build",priority:"low",tags:["SET_USER_AGENT","USER_AGENT"],override:!0};getUserAgentPlugin=config=>({applyToStack:clientStack=>{clientStack.add(userAgentMiddleware(config),getUserAgentMiddlewareOptions)}});isFipsRegion=region=>"string"==typeof region&&(region.startsWith("fips-")||region.endsWith("-fips"));getRealRegion=region=>isFipsRegion(region)?["fips-aws-global","aws-fips"].includes(region)?"us-east-1":region.replace(/fips-(dkr-|prod-)?|-fips/,""):region;resolveRegionConfig=input=>{const{region,useFipsEndpoint}=input;if(!region)throw new Error("Region is missing");return Object.assign(input,{region:async()=>{if("string"==typeof region)return getRealRegion(region);const providedRegion=await region();return getRealRegion(providedRegion)},useFipsEndpoint:async()=>{const providedRegion="string"==typeof region?region:await region();return!!isFipsRegion(providedRegion)||("function"!=typeof useFipsEndpoint?Promise.resolve(!!useFipsEndpoint):useFipsEndpoint())}})};resolveEventStreamSerdeConfig=input=>Object.assign(input,{eventStreamMarshaller:input.eventStreamSerdeProvider(input)});CONTENT_LENGTH_HEADER2="content-length";contentLengthMiddlewareOptions={step:"build",tags:["SET_CONTENT_LENGTH","CONTENT_LENGTH"],name:"contentLengthMiddleware",override:!0};getContentLengthPlugin=options=>({applyToStack:clientStack=>{clientStack.add(contentLengthMiddleware(options.bodyLengthChecker),contentLengthMiddlewareOptions)}});resolveParamsForS3=async endpointParams=>{const bucket=(null==endpointParams?void 0:endpointParams.Bucket)||"";"string"==typeof endpointParams.Bucket&&(endpointParams.Bucket=bucket.replace(/#/g,encodeURIComponent("#")).replace(/\?/g,encodeURIComponent("?")));if(isArnBucketName(bucket)){if(!0===endpointParams.ForcePathStyle)throw new Error("Path-style addressing cannot be used with ARN buckets")}else(!isDnsCompatibleBucketName(bucket)||-1!==bucket.indexOf(".")&&!String(endpointParams.Endpoint).startsWith("http:")||bucket.toLowerCase()!==bucket||bucket.length<3)&&(endpointParams.ForcePathStyle=!0);if(endpointParams.DisableMultiRegionAccessPoints){endpointParams.disableMultiRegionAccessPoints=!0;endpointParams.DisableMRAP=!0}return endpointParams};DOMAIN_PATTERN=/^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/;IP_ADDRESS_PATTERN=/(\d+\.){3}\d+/;DOTS_PATTERN=/\.\./;isDnsCompatibleBucketName=bucketName=>DOMAIN_PATTERN.test(bucketName)&&!IP_ADDRESS_PATTERN.test(bucketName)&&!DOTS_PATTERN.test(bucketName);isArnBucketName=bucketName=>{const[arn,partition2,service,,,bucket]=bucketName.split(":"),isArn="arn"===arn&&bucketName.split(":").length>=6,isValidArn=Boolean(isArn&&partition2&&service&&bucket);if(isArn&&!isValidArn)throw new Error(`Invalid ARN: ${bucketName} was an invalid ARN.`);return isValidArn};createConfigValueProvider=(configKey,canonicalEndpointParamKey,config)=>{const configProvider=async()=>{var _a8;const configValue=null!=(_a8=config[configKey])?_a8:config[canonicalEndpointParamKey];return"function"==typeof configValue?configValue():configValue};return"credentialScope"===configKey||"CredentialScope"===canonicalEndpointParamKey?async()=>{var _a8;const credentials="function"==typeof config.credentials?await config.credentials():config.credentials;return null!=(_a8=null==credentials?void 0:credentials.credentialScope)?_a8:null==credentials?void 0:credentials.CredentialScope}:"accountId"===configKey||"AccountId"===canonicalEndpointParamKey?async()=>{var _a8;const credentials="function"==typeof config.credentials?await config.credentials():config.credentials;return null!=(_a8=null==credentials?void 0:credentials.accountId)?_a8:null==credentials?void 0:credentials.AccountId}:"endpoint"===configKey||"endpoint"===canonicalEndpointParamKey?async()=>{const endpoint=await configProvider();if(endpoint&&"object"==typeof endpoint){if("url"in endpoint)return endpoint.url.href;if("hostname"in endpoint){const{protocol,hostname,port,path:path2}=endpoint;return`${protocol}//${hostname}${port?":"+port:""}${path2}`}}return endpoint}:configProvider};getEndpointFromConfig=async serviceId=>{};parseUrl=url=>{if("string"==typeof url)return parseUrl(new URL(url));const{hostname,pathname,port,protocol,search}=url;let query3;search&&(query3=parseQueryString(search));return{hostname,port:port?parseInt(port):void 0,protocol,path:pathname,query:query3}};toEndpointV1=endpoint=>"object"==typeof endpoint?"url"in endpoint?parseUrl(endpoint.url):endpoint:parseUrl(endpoint);getEndpointFromInstructions=async(commandInput,instructionsSupplier,clientConfig,context2)=>{if(!clientConfig.endpoint){let endpointFromConfig;endpointFromConfig=clientConfig.serviceConfiguredEndpoint?await clientConfig.serviceConfiguredEndpoint():await getEndpointFromConfig(clientConfig.serviceId);endpointFromConfig&&(clientConfig.endpoint=()=>Promise.resolve(toEndpointV1(endpointFromConfig)))}const endpointParams=await resolveParams(commandInput,instructionsSupplier,clientConfig);if("function"!=typeof clientConfig.endpointProvider)throw new Error("config.endpointProvider is not set.");return clientConfig.endpointProvider(endpointParams,context2)};resolveParams=async(commandInput,instructionsSupplier,clientConfig)=>{var _a8;const endpointParams={},instructions=(null==(_a8=null==instructionsSupplier?void 0:instructionsSupplier.getEndpointParameterInstructions)?void 0:_a8.call(instructionsSupplier))||{};for(const[name,instruction]of Object.entries(instructions))switch(instruction.type){case"staticContextParams":endpointParams[name]=instruction.value;break;case"contextParams":endpointParams[name]=commandInput[instruction.name];break;case"clientContextParams":case"builtInParams":endpointParams[name]=await createConfigValueProvider(instruction.name,name,clientConfig)();break;case"operationContextParams":endpointParams[name]=instruction.get(commandInput);break;default:throw new Error("Unrecognized endpoint parameter instruction: "+JSON.stringify(instruction))}0===Object.keys(instructions).length&&Object.assign(endpointParams,clientConfig);"s3"===String(clientConfig.serviceId).toLowerCase()&&await resolveParamsForS3(endpointParams);return endpointParams};endpointMiddleware=({config,instructions})=>(next2,context2)=>async args=>{var _a8,_b5,_c3;config.endpoint&&setFeature2(context2,"ENDPOINT_OVERRIDE","N");const endpoint=await getEndpointFromInstructions(args.input,{getEndpointParameterInstructions:()=>instructions},{...config},context2);context2.endpointV2=endpoint;context2.authSchemes=null==(_a8=endpoint.properties)?void 0:_a8.authSchemes;const authScheme=null==(_b5=context2.authSchemes)?void 0:_b5[0];if(authScheme){context2.signing_region=authScheme.signingRegion;context2.signing_service=authScheme.signingName;const smithyContext=getSmithyContext2(context2),httpAuthOption=null==(_c3=null==smithyContext?void 0:smithyContext.selectedHttpAuthScheme)?void 0:_c3.httpAuthOption;httpAuthOption&&(httpAuthOption.signingProperties=Object.assign(httpAuthOption.signingProperties||{},{signing_region:authScheme.signingRegion,signingRegion:authScheme.signingRegion,signing_service:authScheme.signingName,signingName:authScheme.signingName,signingRegionSet:authScheme.signingRegionSet},authScheme.properties))}return next2({...args})};endpointMiddlewareOptions={step:"serialize",tags:["ENDPOINT_PARAMETERS","ENDPOINT_V2","ENDPOINT"],name:"endpointV2Middleware",override:!0,relation:"before",toMiddleware:serializerMiddlewareOption.name};getEndpointPlugin=(config,instructions)=>({applyToStack:clientStack=>{clientStack.addRelativeTo(endpointMiddleware({config,instructions}),endpointMiddlewareOptions)}});resolveEndpointConfig=input=>{var _a8;const tls=null==(_a8=input.tls)||_a8,{endpoint,useDualstackEndpoint,useFipsEndpoint}=input,customEndpointProvider=null!=endpoint?async()=>toEndpointV1(await normalizeProvider(endpoint)()):void 0,isCustomEndpoint=!!endpoint,resolvedConfig=Object.assign(input,{endpoint:customEndpointProvider,tls,isCustomEndpoint,useDualstackEndpoint:normalizeProvider(null!=useDualstackEndpoint&&useDualstackEndpoint),useFipsEndpoint:normalizeProvider(null!=useFipsEndpoint&&useFipsEndpoint)});let configuredEndpointPromise;resolvedConfig.serviceConfiguredEndpoint=async()=>{input.serviceId&&!configuredEndpointPromise&&(configuredEndpointPromise=getEndpointFromConfig(input.serviceId));return configuredEndpointPromise};return resolvedConfig};(function(RETRY_MODES2){RETRY_MODES2.STANDARD="standard";RETRY_MODES2.ADAPTIVE="adaptive"})(RETRY_MODES||(RETRY_MODES={}));DEFAULT_RETRY_MODE=RETRY_MODES.STANDARD;CLOCK_SKEW_ERROR_CODES=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"];THROTTLING_ERROR_CODES=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"];TRANSIENT_ERROR_CODES=["TimeoutError","RequestTimeout","RequestTimeoutException"];TRANSIENT_ERROR_STATUS_CODES=[500,502,503,504];NODEJS_TIMEOUT_ERROR_CODES=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"];0;0;isClockSkewCorrectedError=error=>{var _a8;return null==(_a8=error.$metadata)?void 0:_a8.clockSkewCorrected};isBrowserNetworkError=error=>!!(error&&error instanceof TypeError)&&new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]).has(error.message);isThrottlingError=error=>{var _a8,_b5;return 429===(null==(_a8=error.$metadata)?void 0:_a8.httpStatusCode)||THROTTLING_ERROR_CODES.includes(error.name)||1==(null==(_b5=error.$retryable)?void 0:_b5.throttling)};isTransientError=(error,depth=0)=>{var _a8;return isClockSkewCorrectedError(error)||TRANSIENT_ERROR_CODES.includes(error.name)||NODEJS_TIMEOUT_ERROR_CODES.includes((null==error?void 0:error.code)||"")||TRANSIENT_ERROR_STATUS_CODES.includes((null==(_a8=error.$metadata)?void 0:_a8.httpStatusCode)||0)||isBrowserNetworkError(error)||void 0!==error.cause&&depth<=10&&isTransientError(error.cause,depth+1)};isServerError=error=>{var _a8;if(void 0!==(null==(_a8=error.$metadata)?void 0:_a8.httpStatusCode)){const statusCode=error.$metadata.httpStatusCode;return 500<=statusCode&&statusCode<=599&&!isTransientError(error)}return!1};(DefaultRateLimiter=class _DefaultRateLimiter{constructor(options){var _a8,_b5,_c3,_d2,_e2;this.currentCapacity=0;this.enabled=!1;this.lastMaxRate=0;this.measuredTxRate=0;this.requestCount=0;this.lastTimestamp=0;this.timeWindow=0;this.beta=null!=(_a8=null==options?void 0:options.beta)?_a8:.7;this.minCapacity=null!=(_b5=null==options?void 0:options.minCapacity)?_b5:1;this.minFillRate=null!=(_c3=null==options?void 0:options.minFillRate)?_c3:.5;this.scaleConstant=null!=(_d2=null==options?void 0:options.scaleConstant)?_d2:.4;this.smooth=null!=(_e2=null==options?void 0:options.smooth)?_e2:.8;const currentTimeInSeconds=this.getCurrentTimeInSeconds();this.lastThrottleTime=currentTimeInSeconds;this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds());this.fillRate=this.minFillRate;this.maxCapacity=this.minCapacity}getCurrentTimeInSeconds(){return Date.now()/1e3}async getSendToken(){return this.acquireTokenBucket(1)}async acquireTokenBucket(amount){if(this.enabled){this.refillTokenBucket();if(amount>this.currentCapacity){const delay2=(amount-this.currentCapacity)/this.fillRate*1e3;await new Promise((resolve=>_DefaultRateLimiter.setTimeoutFn(resolve,delay2)))}this.currentCapacity=this.currentCapacity-amount}}refillTokenBucket(){const timestamp=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=timestamp;return}const fillAmount=(timestamp-this.lastTimestamp)*this.fillRate;this.currentCapacity=Math.min(this.maxCapacity,this.currentCapacity+fillAmount);this.lastTimestamp=timestamp}updateClientSendingRate(response){let calculatedRate;this.updateMeasuredRate();if(isThrottlingError(response)){const rateToUse=this.enabled?Math.min(this.measuredTxRate,this.fillRate):this.measuredTxRate;this.lastMaxRate=rateToUse;this.calculateTimeWindow();this.lastThrottleTime=this.getCurrentTimeInSeconds();calculatedRate=this.cubicThrottle(rateToUse);this.enableTokenBucket()}else{this.calculateTimeWindow();calculatedRate=this.cubicSuccess(this.getCurrentTimeInSeconds())}const newRate=Math.min(calculatedRate,2*this.measuredTxRate);this.updateTokenBucketRate(newRate)}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,1/3))}cubicThrottle(rateToUse){return this.getPrecise(rateToUse*this.beta)}cubicSuccess(timestamp){return this.getPrecise(this.scaleConstant*Math.pow(timestamp-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(newRate){this.refillTokenBucket();this.fillRate=Math.max(newRate,this.minFillRate);this.maxCapacity=Math.max(newRate,this.minCapacity);this.currentCapacity=Math.min(this.currentCapacity,this.maxCapacity)}updateMeasuredRate(){const t3=this.getCurrentTimeInSeconds(),timeBucket=Math.floor(2*t3)/2;this.requestCount++;if(timeBucket>this.lastTxRateBucket){const currentRate=this.requestCount/(timeBucket-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(currentRate*this.smooth+this.measuredTxRate*(1-this.smooth));this.requestCount=0;this.lastTxRateBucket=timeBucket}}getPrecise(num){return parseFloat(num.toFixed(8))}}).setTimeoutFn=setTimeout;getDefaultRetryBackoffStrategy=()=>{let delayBase=100;return{computeNextBackoffDelay:attempts=>Math.floor(Math.min(2e4,Math.random()*2**attempts*delayBase)),setDelayBase:delay2=>{delayBase=delay2}}};createDefaultRetryToken=({retryDelay,retryCount,retryCost})=>({getRetryCount:()=>retryCount,getRetryDelay:()=>Math.min(2e4,retryDelay),getRetryCost:()=>retryCost});StandardRetryStrategy=class{constructor(maxAttempts){this.maxAttempts=maxAttempts;this.mode=RETRY_MODES.STANDARD;this.capacity=500;this.retryBackoffStrategy=getDefaultRetryBackoffStrategy();this.maxAttemptsProvider="function"==typeof maxAttempts?maxAttempts:async()=>maxAttempts}async acquireInitialRetryToken(retryTokenScope){return createDefaultRetryToken({retryDelay:100,retryCount:0})}async refreshRetryTokenForRetry(token,errorInfo){const maxAttempts=await this.getMaxAttempts();if(this.shouldRetry(token,errorInfo,maxAttempts)){const errorType=errorInfo.errorType;this.retryBackoffStrategy.setDelayBase("THROTTLING"===errorType?500:100);const delayFromErrorType=this.retryBackoffStrategy.computeNextBackoffDelay(token.getRetryCount()),retryDelay=errorInfo.retryAfterHint?Math.max(errorInfo.retryAfterHint.getTime()-Date.now()||0,delayFromErrorType):delayFromErrorType,capacityCost=this.getCapacityCost(errorType);this.capacity-=capacityCost;return createDefaultRetryToken({retryDelay,retryCount:token.getRetryCount()+1,retryCost:capacityCost})}throw new Error("No retry token available")}recordSuccess(token){var _a8;this.capacity=Math.max(500,this.capacity+(null!=(_a8=token.getRetryCost())?_a8:1))}getCapacity(){return this.capacity}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(error){console.warn("Max attempts provider could not resolve. Using default of 3");return 3}}shouldRetry(tokenToRenew,errorInfo,maxAttempts){return tokenToRenew.getRetryCount()+1=this.getCapacityCost(errorInfo.errorType)&&this.isRetryableError(errorInfo.errorType)}getCapacityCost(errorType){return"TRANSIENT"===errorType?10:5}isRetryableError(errorType){return"THROTTLING"===errorType||"TRANSIENT"===errorType}};AdaptiveRetryStrategy=class{constructor(maxAttemptsProvider,options){this.maxAttemptsProvider=maxAttemptsProvider;this.mode=RETRY_MODES.ADAPTIVE;const{rateLimiter}=null!=options?options:{};this.rateLimiter=null!=rateLimiter?rateLimiter:new DefaultRateLimiter;this.standardRetryStrategy=new StandardRetryStrategy(maxAttemptsProvider)}async acquireInitialRetryToken(retryTokenScope){await this.rateLimiter.getSendToken();return this.standardRetryStrategy.acquireInitialRetryToken(retryTokenScope)}async refreshRetryTokenForRetry(tokenToRenew,errorInfo){this.rateLimiter.updateClientSendingRate(errorInfo);return this.standardRetryStrategy.refreshRetryTokenForRetry(tokenToRenew,errorInfo)}recordSuccess(token){this.rateLimiter.updateClientSendingRate({});this.standardRetryStrategy.recordSuccess(token)}};ConfiguredRetryStrategy=class extends StandardRetryStrategy{constructor(maxAttempts,computeNextBackoffDelay=100){super("function"==typeof maxAttempts?maxAttempts:async()=>maxAttempts);this.computeNextBackoffDelay="number"==typeof computeNextBackoffDelay?()=>computeNextBackoffDelay:computeNextBackoffDelay}async refreshRetryTokenForRetry(tokenToRenew,errorInfo){const token=await super.refreshRetryTokenForRetry(tokenToRenew,errorInfo);token.getRetryDelay=()=>this.computeNextBackoffDelay(token.getRetryCount());return token}};rnds8=new Uint8Array(16);byteToHex=[];for(let i2=0;i2<256;++i2)byteToHex.push((i2+256).toString(16).slice(1));randomUUID="undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);native_default={randomUUID};v4_default=function v4(options,buf,offset){if(native_default.randomUUID&&!buf&&!options)return native_default.randomUUID();const rnds=(options=options||{}).random||(options.rng||rng)();rnds[6]=15&rnds[6]|64;rnds[8]=63&rnds[8]|128;if(buf){offset=offset||0;for(let i2=0;i2<16;++i2)buf[offset+i2]=rnds[i2];return buf}return unsafeStringify(rnds)};asSdkError=error=>error instanceof Error?error:error instanceof Object?Object.assign(new Error,error):"string"==typeof error?new Error(error):new Error(`AWS SDK error wrapper for ${error}`);resolveRetryConfig=input=>{const{retryStrategy,retryMode:_retryMode,maxAttempts:_maxAttempts}=input,maxAttempts=normalizeProvider(null!=_maxAttempts?_maxAttempts:3);return Object.assign(input,{maxAttempts,retryStrategy:async()=>retryStrategy||(await normalizeProvider(_retryMode)()===RETRY_MODES.ADAPTIVE?new AdaptiveRetryStrategy(maxAttempts):new StandardRetryStrategy(maxAttempts))})};isStreamingPayload=request2=>(null==request2?void 0:request2.body)instanceof ReadableStream;retryMiddleware=options=>(next2,context2)=>async args=>{var _a8;let retryStrategy=await options.retryStrategy();const maxAttempts=await options.maxAttempts();if(!isRetryStrategyV2(retryStrategy)){(null==retryStrategy?void 0:retryStrategy.mode)&&(context2.userAgent=[...context2.userAgent||[],["cfg/retry-mode",retryStrategy.mode]]);return retryStrategy.retry(next2,args)}{let retryToken=await retryStrategy.acquireInitialRetryToken(context2.partition_id),lastError=new Error,attempts=0,totalRetryDelay=0;const{request:request2}=args,isRequest=HttpRequest.isInstance(request2);isRequest&&(request2.headers["amz-sdk-invocation-id"]=v4_default());for(;;)try{isRequest&&(request2.headers["amz-sdk-request"]=`attempt=${attempts+1}; max=${maxAttempts}`);const{response,output}=await next2(args);retryStrategy.recordSuccess(retryToken);output.$metadata.attempts=attempts+1;output.$metadata.totalRetryDelay=totalRetryDelay;return{response,output}}catch(e3){const retryErrorInfo=getRetryErrorInfo(e3);lastError=asSdkError(e3);if(isRequest&&isStreamingPayload(request2)){null==(_a8=context2.logger instanceof NoOpLogger?console:context2.logger)||_a8.warn("An error was encountered in a non-retryable streaming request.");throw lastError}try{retryToken=await retryStrategy.refreshRetryTokenForRetry(retryToken,retryErrorInfo)}catch(refreshError){lastError.$metadata||(lastError.$metadata={});lastError.$metadata.attempts=attempts+1;lastError.$metadata.totalRetryDelay=totalRetryDelay;throw lastError}attempts=retryToken.getRetryCount();const delay2=retryToken.getRetryDelay();totalRetryDelay+=delay2;await new Promise((resolve=>setTimeout(resolve,delay2)))}}};isRetryStrategyV2=retryStrategy=>void 0!==retryStrategy.acquireInitialRetryToken&&void 0!==retryStrategy.refreshRetryTokenForRetry&&void 0!==retryStrategy.recordSuccess;getRetryErrorInfo=error=>{const errorInfo={error,errorType:getRetryErrorType(error)},retryAfterHint=getRetryAfterHint(error.$response);retryAfterHint&&(errorInfo.retryAfterHint=retryAfterHint);return errorInfo};getRetryErrorType=error=>isThrottlingError(error)?"THROTTLING":isTransientError(error)?"TRANSIENT":isServerError(error)?"SERVER_ERROR":"CLIENT_ERROR";retryMiddlewareOptions={name:"retryMiddleware",tags:["RETRY"],step:"finalizeRequest",priority:"high",override:!0};getRetryPlugin=options=>({applyToStack:clientStack=>{clientStack.add(retryMiddleware(options),retryMiddlewareOptions)}});getRetryAfterHint=response=>{if(!HttpResponse.isInstance(response))return;const retryAfterHeaderName=Object.keys(response.headers).find((key3=>"retry-after"===key3.toLowerCase()));if(!retryAfterHeaderName)return;const retryAfter=response.headers[retryAfterHeaderName],retryAfterSeconds=Number(retryAfter);return Number.isNaN(retryAfterSeconds)?new Date(retryAfter):new Date(1e3*retryAfterSeconds)};SignatureV4MultiRegion=class{constructor(options){__publicField(this,"sigv4aSigner");__publicField(this,"sigv4Signer");__publicField(this,"signerOptions");this.sigv4Signer=new SignatureV4S3Express(options);this.signerOptions=options}async sign(requestToSign,options={}){return"*"===options.signingRegion?this.getSigv4aSigner().sign(requestToSign,options):this.sigv4Signer.sign(requestToSign,options)}async signWithCredentials(requestToSign,credentials,options={}){if("*"===options.signingRegion){this.getSigv4aSigner();throw new Error('signWithCredentials with signingRegion \'*\' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt')}return this.sigv4Signer.signWithCredentials(requestToSign,credentials,options)}async presign(originalRequest,options={}){if("*"===options.signingRegion){this.getSigv4aSigner();throw new Error('presign with signingRegion \'*\' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt')}return this.sigv4Signer.presign(originalRequest,options)}async presignWithCredentials(originalRequest,credentials,options={}){if("*"===options.signingRegion)throw new Error("Method presignWithCredentials is not supported for [signingRegion=*].");return this.sigv4Signer.presignWithCredentials(originalRequest,credentials,options)}getSigv4aSigner(){if(!this.sigv4aSigner){const CrtSignerV4=null,JsSigV4aSigner=null;if("node"===this.signerOptions.runtime){if(!CrtSignerV4&&!JsSigV4aSigner)throw new Error("Neither CRT nor JS SigV4a implementation is available. Please load either @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");if(CrtSignerV4&&"function"==typeof CrtSignerV4)this.sigv4aSigner=new CrtSignerV4({...this.signerOptions,signingAlgorithm:1});else{if(!JsSigV4aSigner||"function"!=typeof JsSigV4aSigner)throw new Error("Available SigV4a implementation is not a valid constructor. Please ensure you've properly imported @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a.For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");this.sigv4aSigner=new JsSigV4aSigner({...this.signerOptions})}}else{if(!JsSigV4aSigner||"function"!=typeof JsSigV4aSigner)throw new Error("JS SigV4a implementation is not available or not a valid constructor. Please check whether you have installed the @aws-sdk/signature-v4a package explicitly. The CRT implementation is not available for browsers. You must also register the package by calling [require('@aws-sdk/signature-v4a');] or an ESM equivalent such as [import '@aws-sdk/signature-v4a';]. For more information please go to https://github.com/aws/aws-sdk-js-v3#using-javascript-non-crt-implementation-of-sigv4a");this.sigv4aSigner=new JsSigV4aSigner({...this.signerOptions})}}return this.sigv4aSigner}};cp="required",cq="type",cr2="rules",cs="conditions",ct="fn",cu="argv",cv="ref",cw="assign",cx="url",cy="properties",cz="backend",cA="authSchemes",cB="disableDoubleEncoding",cC="signingName",cD="signingRegion",cE="headers",cF="signingRegionSet";c=!0,d3="isSet",e2="booleanEquals",f="error",g="aws.partition",h="stringEquals",i="getAttr",j="name",k="substring",l="bucketSuffix",m2="parseURL",n2="endpoint",o="tree",p2="aws.isVirtualHostableS3Bucket",q="{url#scheme}://{Bucket}.{url#authority}{url#path}",r3="not",s="accessPointSuffix",t2="{url#scheme}://{url#authority}{url#path}",u="hardwareType",v="regionPrefix",w="bucketAliasSuffix",x="outpostId",y="isValidHostLabel",z="sigv4a",A="s3-outposts",B="s3",C2="{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}",D="https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}",E="https://{Bucket}.s3.{partitionResult#dnsSuffix}",F="aws.parseArn",G2="bucketArn",H="arnType",J="s3-object-lambda",K="accesspoint",L3="accessPointName",M2="{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}",N2="mrapPartition",O="outpostType",P2="arnPrefix",Q="{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}",R="https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",S="https://s3.{partitionResult#dnsSuffix}",T={[cp]:!1,[cq]:"String"},U={[cp]:!0,default:!1,[cq]:"Boolean"},V={[cp]:!1,[cq]:"Boolean"},W2={[ct]:e2,[cu]:[{[cv]:"Accelerate"},!0]},X={[ct]:e2,[cu]:[{[cv]:"UseFIPS"},!0]},Y={[ct]:e2,[cu]:[{[cv]:"UseDualStack"},!0]},Z={[ct]:d3,[cu]:[{[cv]:"Endpoint"}]},aa={[ct]:g,[cu]:[{[cv]:"Region"}],[cw]:"partitionResult"},ab={[ct]:h,[cu]:[{[ct]:i,[cu]:[{[cv]:"partitionResult"},j]},"aws-cn"]},ac={[ct]:d3,[cu]:[{[cv]:"Bucket"}]},ad={[cv]:"Bucket"},ae={[cs]:[Y],[f]:"S3Express does not support Dual-stack.",[cq]:f},af={[cs]:[W2],[f]:"S3Express does not support S3 Accelerate.",[cq]:f},ag={[cs]:[Z,{[ct]:m2,[cu]:[{[cv]:"Endpoint"}],[cw]:"url"}],[cr2]:[{[cs]:[{[ct]:d3,[cu]:[{[cv]:"DisableS3ExpressSessionAuth"}]},{[ct]:e2,[cu]:[{[cv]:"DisableS3ExpressSessionAuth"},!0]}],[cr2]:[{[cs]:[{[ct]:e2,[cu]:[{[ct]:i,[cu]:[{[cv]:"url"},"isIp"]},!0]}],[cr2]:[{[cs]:[{[ct]:"uriEncode",[cu]:[ad],[cw]:"uri_encoded_bucket"}],[cr2]:[{[n2]:{[cx]:"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}",[cy]:{[cz]:"S3Express",[cA]:[{[cB]:!0,[j]:"sigv4",[cC]:"s3express",[cD]:"{Region}"}]},[cE]:{}},[cq]:n2}],[cq]:o}],[cq]:o},{[cs]:[{[ct]:p2,[cu]:[ad,!1]}],[cr2]:[{[n2]:{[cx]:q,[cy]:{[cz]:"S3Express",[cA]:[{[cB]:!0,[j]:"sigv4",[cC]:"s3express",[cD]:"{Region}"}]},[cE]:{}},[cq]:n2}],[cq]:o},{[f]:"S3Express bucket name is not a valid virtual hostable name.",[cq]:f}],[cq]:o},{[cs]:[{[ct]:e2,[cu]:[{[ct]:i,[cu]:[{[cv]:"url"},"isIp"]},!0]}],[cr2]:[{[cs]:[{[ct]:"uriEncode",[cu]:[ad],[cw]:"uri_encoded_bucket"}],[cr2]:[{[n2]:{[cx]:"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}",[cy]:{[cz]:"S3Express",[cA]:[{[cB]:!0,[j]:"sigv4-s3express",[cC]:"s3express",[cD]:"{Region}"}]},[cE]:{}},[cq]:n2}],[cq]:o}],[cq]:o},{[cs]:[{[ct]:p2,[cu]:[ad,!1]}],[cr2]:[{[n2]:{[cx]:q,[cy]:{[cz]:"S3Express",[cA]:[{[cB]:!0,[j]:"sigv4-s3express",[cC]:"s3express",[cD]:"{Region}"}]},[cE]:{}},[cq]:n2}],[cq]:o},{[f]:"S3Express bucket name is not a valid virtual hostable name.",[cq]:f}],[cq]:o},ah={[ct]:m2,[cu]:[{[cv]:"Endpoint"}],[cw]:"url"},ai={[ct]:e2,[cu]:[{[ct]:i,[cu]:[{[cv]:"url"},"isIp"]},!0]},aj={[cv]:"url"},ak={[ct]:"uriEncode",[cu]:[ad],[cw]:"uri_encoded_bucket"},al={[cz]:"S3Express",[cA]:[{[cB]:!0,[j]:"sigv4",[cC]:"s3express",[cD]:"{Region}"}]},am={},an={[ct]:p2,[cu]:[ad,!1]},ao={[f]:"S3Express bucket name is not a valid virtual hostable name.",[cq]:f},ap={[ct]:d3,[cu]:[{[cv]:"UseS3ExpressControlEndpoint"}]},aq={[ct]:e2,[cu]:[{[cv]:"UseS3ExpressControlEndpoint"},!0]},ar={[ct]:r3,[cu]:[Z]},as={[f]:"Unrecognized S3Express bucket name format.",[cq]:f},at={[ct]:r3,[cu]:[ac]},au={[cv]:u},av={[cs]:[ar],[f]:"Expected a endpoint to be specified but no endpoint was found",[cq]:f},aw={[cA]:[{[cB]:!0,[j]:z,[cC]:A,[cF]:["*"]},{[cB]:!0,[j]:"sigv4",[cC]:A,[cD]:"{Region}"}]},ax={[ct]:e2,[cu]:[{[cv]:"ForcePathStyle"},!1]},ay={[cv]:"ForcePathStyle"},az={[ct]:e2,[cu]:[{[cv]:"Accelerate"},!1]},aA={[ct]:h,[cu]:[{[cv]:"Region"},"aws-global"]},aB={[cA]:[{[cB]:!0,[j]:"sigv4",[cC]:B,[cD]:"us-east-1"}]},aC={[ct]:r3,[cu]:[aA]},aD={[ct]:e2,[cu]:[{[cv]:"UseGlobalEndpoint"},!0]},aE={[cx]:"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}",[cy]:{[cA]:[{[cB]:!0,[j]:"sigv4",[cC]:B,[cD]:"{Region}"}]},[cE]:{}},aF={[cA]:[{[cB]:!0,[j]:"sigv4",[cC]:B,[cD]:"{Region}"}]},aG={[ct]:e2,[cu]:[{[cv]:"UseGlobalEndpoint"},!1]},aH={[ct]:e2,[cu]:[{[cv]:"UseDualStack"},!1]},aI={[cx]:"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}",[cy]:aF,[cE]:{}},aJ={[ct]:e2,[cu]:[{[cv]:"UseFIPS"},!1]},aK={[cx]:"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}",[cy]:aF,[cE]:{}},aL={[cx]:"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}",[cy]:aF,[cE]:{}},aM={[ct]:e2,[cu]:[{[ct]:i,[cu]:[aj,"isIp"]},!1]},aN={[cx]:C2,[cy]:aF,[cE]:{}},aO={[cx]:q,[cy]:aF,[cE]:{}},aP={[n2]:aO,[cq]:n2},aQ={[cx]:D,[cy]:aF,[cE]:{}},aR={[cx]:"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}",[cy]:aF,[cE]:{}},aS={[f]:"Invalid region: region was not a valid DNS name.",[cq]:f},aT={[cv]:G2},aU={[cv]:H},aV={[ct]:i,[cu]:[aT,"service"]},aW={[cv]:L3},aX={[cs]:[Y],[f]:"S3 Object Lambda does not support Dual-stack",[cq]:f},aY={[cs]:[W2],[f]:"S3 Object Lambda does not support S3 Accelerate",[cq]:f},aZ={[cs]:[{[ct]:d3,[cu]:[{[cv]:"DisableAccessPoints"}]},{[ct]:e2,[cu]:[{[cv]:"DisableAccessPoints"},!0]}],[f]:"Access points are not supported for this operation",[cq]:f},ba={[cs]:[{[ct]:d3,[cu]:[{[cv]:"UseArnRegion"}]},{[ct]:e2,[cu]:[{[cv]:"UseArnRegion"},!1]},{[ct]:r3,[cu]:[{[ct]:h,[cu]:[{[ct]:i,[cu]:[aT,"region"]},"{Region}"]}]}],[f]:"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`",[cq]:f},bb={[ct]:i,[cu]:[{[cv]:"bucketPartition"},j]},bc={[ct]:i,[cu]:[aT,"accountId"]},bd={[cA]:[{[cB]:!0,[j]:"sigv4",[cC]:J,[cD]:"{bucketArn#region}"}]},be={[f]:"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`",[cq]:f},bf={[f]:"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`",[cq]:f},bg={[f]:"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)",[cq]:f},bh={[f]:"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`",[cq]:f},bi={[f]:"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.",[cq]:f},bj={[f]:"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided",[cq]:f},bk={[cA]:[{[cB]:!0,[j]:"sigv4",[cC]:B,[cD]:"{bucketArn#region}"}]},bl={[cA]:[{[cB]:!0,[j]:z,[cC]:A,[cF]:["*"]},{[cB]:!0,[j]:"sigv4",[cC]:A,[cD]:"{bucketArn#region}"}]},bm={[ct]:F,[cu]:[ad]},bn={[cx]:"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cy]:aF,[cE]:{}},bo={[cx]:"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cy]:aF,[cE]:{}},bp={[cx]:"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cy]:aF,[cE]:{}},bq={[cx]:Q,[cy]:aF,[cE]:{}},br={[cx]:"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cy]:aF,[cE]:{}},bs={[cv]:"UseObjectLambdaEndpoint"},bt={[cA]:[{[cB]:!0,[j]:"sigv4",[cC]:J,[cD]:"{Region}"}]},bu={[cx]:"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}",[cy]:aF,[cE]:{}},bv={[cx]:"https://s3-fips.{Region}.{partitionResult#dnsSuffix}",[cy]:aF,[cE]:{}},bw={[cx]:"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}",[cy]:aF,[cE]:{}},bx={[cx]:t2,[cy]:aF,[cE]:{}},by={[cx]:"https://s3.{Region}.{partitionResult#dnsSuffix}",[cy]:aF,[cE]:{}},bz=[{[cv]:"Region"}],bA=[{[cv]:"Endpoint"}],bB=[ad],bC=[Y],bD=[W2],bE=[Z,ah],bF=[{[ct]:d3,[cu]:[{[cv]:"DisableS3ExpressSessionAuth"}]},{[ct]:e2,[cu]:[{[cv]:"DisableS3ExpressSessionAuth"},!0]}],bG=[ak],bH=[an],bI=[aa],bJ=[X],bK=[{[ct]:k,[cu]:[ad,6,14,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,14,16,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bL=[{[cs]:[X],[n2]:{[cx]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cy]:al,[cE]:{}},[cq]:n2},{[n2]:{[cx]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cy]:al,[cE]:{}},[cq]:n2}],bM=[{[ct]:k,[cu]:[ad,6,15,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,15,17,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bN=[{[ct]:k,[cu]:[ad,6,19,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,19,21,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bO=[{[ct]:k,[cu]:[ad,6,20,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,20,22,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bP=[{[ct]:k,[cu]:[ad,6,26,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,26,28,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bQ=[{[cs]:[X],[n2]:{[cx]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cy]:{[cz]:"S3Express",[cA]:[{[cB]:!0,[j]:"sigv4-s3express",[cC]:"s3express",[cD]:"{Region}"}]},[cE]:{}},[cq]:n2},{[n2]:{[cx]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cy]:{[cz]:"S3Express",[cA]:[{[cB]:!0,[j]:"sigv4-s3express",[cC]:"s3express",[cD]:"{Region}"}]},[cE]:{}},[cq]:n2}],bR=[ad,0,7,!0],bS=[{[ct]:k,[cu]:[ad,7,15,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,15,17,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bT=[{[ct]:k,[cu]:[ad,7,16,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,16,18,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bU=[{[ct]:k,[cu]:[ad,7,20,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,20,22,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bV=[{[ct]:k,[cu]:[ad,7,21,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,21,23,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bW=[{[ct]:k,[cu]:[ad,7,27,!0],[cw]:"s3expressAvailabilityZoneId"},{[ct]:k,[cu]:[ad,27,29,!0],[cw]:"s3expressAvailabilityZoneDelim"},{[ct]:h,[cu]:[{[cv]:"s3expressAvailabilityZoneDelim"},"--"]}],bX=[ac],bY=[{[ct]:y,[cu]:[{[cv]:x},!1]}],bZ=[{[ct]:h,[cu]:[{[cv]:v},"beta"]}],ca=["*"],cb=[{[ct]:y,[cu]:[{[cv]:"Region"},!1]}],cc=[{[ct]:h,[cu]:[{[cv]:"Region"},"us-east-1"]}],cd=[{[ct]:h,[cu]:[aU,K]}],ce=[{[ct]:i,[cu]:[aT,"resourceId[1]"],[cw]:L3},{[ct]:r3,[cu]:[{[ct]:h,[cu]:[aW,""]}]}],cf=[aT,"resourceId[1]"],cg=[{[ct]:r3,[cu]:[{[ct]:h,[cu]:[{[ct]:i,[cu]:[aT,"region"]},""]}]}],ch=[{[ct]:r3,[cu]:[{[ct]:d3,[cu]:[{[ct]:i,[cu]:[aT,"resourceId[2]"]}]}]}],ci=[aT,"resourceId[2]"],cj=[{[ct]:g,[cu]:[{[ct]:i,[cu]:[aT,"region"]}],[cw]:"bucketPartition"}],ck=[{[ct]:h,[cu]:[bb,{[ct]:i,[cu]:[{[cv]:"partitionResult"},j]}]}],cl=[{[ct]:y,[cu]:[{[ct]:i,[cu]:[aT,"region"]},!0]}],cm=[{[ct]:y,[cu]:[bc,!1]}],cn=[{[ct]:y,[cu]:[aW,!1]}],co=[{[ct]:y,[cu]:[{[cv]:"Region"},!0]}];ruleSet={version:"1.0",parameters:{Bucket:T,Region:T,UseFIPS:U,UseDualStack:U,Endpoint:T,ForcePathStyle:U,Accelerate:U,UseGlobalEndpoint:U,UseObjectLambdaEndpoint:V,Key:T,Prefix:T,CopySource:T,DisableAccessPoints:V,DisableMultiRegionAccessPoints:U,UseArnRegion:V,UseS3ExpressControlEndpoint:V,DisableS3ExpressSessionAuth:V},[cr2]:[{[cs]:[{[ct]:d3,[cu]:bz}],[cr2]:[{[cs]:[W2,X],error:"Accelerate cannot be used with FIPS",[cq]:f},{[cs]:[Y,Z],error:"Cannot set dual-stack in combination with a custom endpoint.",[cq]:f},{[cs]:[Z,X],error:"A custom endpoint cannot be combined with FIPS",[cq]:f},{[cs]:[Z,W2],error:"A custom endpoint cannot be combined with S3 Accelerate",[cq]:f},{[cs]:[X,aa,ab],error:"Partition does not support FIPS",[cq]:f},{[cs]:[ac,{[ct]:k,[cu]:[ad,0,6,c],[cw]:l},{[ct]:h,[cu]:[{[cv]:l},"--x-s3"]}],[cr2]:[ae,af,ag,{[cs]:[ap,aq],[cr2]:[{[cs]:bI,[cr2]:[{[cs]:[ak,ar],[cr2]:[{[cs]:bJ,endpoint:{[cx]:"https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cy]:al,[cE]:am},[cq]:n2},{endpoint:{[cx]:"https://s3express-control.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cy]:al,[cE]:am},[cq]:n2}],[cq]:o}],[cq]:o}],[cq]:o},{[cs]:bH,[cr2]:[{[cs]:bI,[cr2]:[{[cs]:bF,[cr2]:[{[cs]:bK,[cr2]:bL,[cq]:o},{[cs]:bM,[cr2]:bL,[cq]:o},{[cs]:bN,[cr2]:bL,[cq]:o},{[cs]:bO,[cr2]:bL,[cq]:o},{[cs]:bP,[cr2]:bL,[cq]:o},as],[cq]:o},{[cs]:bK,[cr2]:bQ,[cq]:o},{[cs]:bM,[cr2]:bQ,[cq]:o},{[cs]:bN,[cr2]:bQ,[cq]:o},{[cs]:bO,[cr2]:bQ,[cq]:o},{[cs]:bP,[cr2]:bQ,[cq]:o},as],[cq]:o}],[cq]:o},ao],[cq]:o},{[cs]:[ac,{[ct]:k,[cu]:bR,[cw]:s},{[ct]:h,[cu]:[{[cv]:s},"--xa-s3"]}],[cr2]:[ae,af,ag,{[cs]:bH,[cr2]:[{[cs]:bI,[cr2]:[{[cs]:bF,[cr2]:[{[cs]:bS,[cr2]:bL,[cq]:o},{[cs]:bT,[cr2]:bL,[cq]:o},{[cs]:bU,[cr2]:bL,[cq]:o},{[cs]:bV,[cr2]:bL,[cq]:o},{[cs]:bW,[cr2]:bL,[cq]:o},as],[cq]:o},{[cs]:bS,[cr2]:bQ,[cq]:o},{[cs]:bT,[cr2]:bQ,[cq]:o},{[cs]:bU,[cr2]:bQ,[cq]:o},{[cs]:bV,[cr2]:bQ,[cq]:o},{[cs]:bW,[cr2]:bQ,[cq]:o},as],[cq]:o}],[cq]:o},ao],[cq]:o},{[cs]:[at,ap,aq],[cr2]:[{[cs]:bI,[cr2]:[{[cs]:bE,endpoint:{[cx]:t2,[cy]:al,[cE]:am},[cq]:n2},{[cs]:bJ,endpoint:{[cx]:"https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",[cy]:al,[cE]:am},[cq]:n2},{endpoint:{[cx]:"https://s3express-control.{Region}.{partitionResult#dnsSuffix}",[cy]:al,[cE]:am},[cq]:n2}],[cq]:o}],[cq]:o},{[cs]:[ac,{[ct]:k,[cu]:[ad,49,50,c],[cw]:u},{[ct]:k,[cu]:[ad,8,12,c],[cw]:v},{[ct]:k,[cu]:bR,[cw]:w},{[ct]:k,[cu]:[ad,32,49,c],[cw]:x},{[ct]:g,[cu]:bz,[cw]:"regionPartition"},{[ct]:h,[cu]:[{[cv]:w},"--op-s3"]}],[cr2]:[{[cs]:bY,[cr2]:[{[cs]:[{[ct]:h,[cu]:[au,"e"]}],[cr2]:[{[cs]:bZ,[cr2]:[av,{[cs]:bE,endpoint:{[cx]:"https://{Bucket}.ec2.{url#authority}",[cy]:aw,[cE]:am},[cq]:n2}],[cq]:o},{endpoint:{[cx]:"https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}",[cy]:aw,[cE]:am},[cq]:n2}],[cq]:o},{[cs]:[{[ct]:h,[cu]:[au,"o"]}],[cr2]:[{[cs]:bZ,[cr2]:[av,{[cs]:bE,endpoint:{[cx]:"https://{Bucket}.op-{outpostId}.{url#authority}",[cy]:aw,[cE]:am},[cq]:n2}],[cq]:o},{endpoint:{[cx]:"https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}",[cy]:aw,[cE]:am},[cq]:n2}],[cq]:o},{error:'Unrecognized hardware type: "Expected hardware type o or e but got {hardwareType}"',[cq]:f}],[cq]:o},{error:"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.",[cq]:f}],[cq]:o},{[cs]:bX,[cr2]:[{[cs]:[Z,{[ct]:r3,[cu]:[{[ct]:d3,[cu]:[{[ct]:m2,[cu]:bA}]}]}],error:"Custom endpoint `{Endpoint}` was not a valid URI",[cq]:f},{[cs]:[ax,an],[cr2]:[{[cs]:bI,[cr2]:[{[cs]:cb,[cr2]:[{[cs]:[W2,ab],error:"S3 Accelerate cannot be used in this region",[cq]:f},{[cs]:[Y,X,az,ar,aA],endpoint:{[cx]:"https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[Y,X,az,ar,aC,aD],[cr2]:[{endpoint:aE,[cq]:n2}],[cq]:o},{[cs]:[Y,X,az,ar,aC,aG],endpoint:aE,[cq]:n2},{[cs]:[aH,X,az,ar,aA],endpoint:{[cx]:"https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aH,X,az,ar,aC,aD],[cr2]:[{endpoint:aI,[cq]:n2}],[cq]:o},{[cs]:[aH,X,az,ar,aC,aG],endpoint:aI,[cq]:n2},{[cs]:[Y,aJ,W2,ar,aA],endpoint:{[cx]:"https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[Y,aJ,W2,ar,aC,aD],[cr2]:[{endpoint:aK,[cq]:n2}],[cq]:o},{[cs]:[Y,aJ,W2,ar,aC,aG],endpoint:aK,[cq]:n2},{[cs]:[Y,aJ,az,ar,aA],endpoint:{[cx]:"https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[Y,aJ,az,ar,aC,aD],[cr2]:[{endpoint:aL,[cq]:n2}],[cq]:o},{[cs]:[Y,aJ,az,ar,aC,aG],endpoint:aL,[cq]:n2},{[cs]:[aH,aJ,az,Z,ah,ai,aA],endpoint:{[cx]:C2,[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aH,aJ,az,Z,ah,aM,aA],endpoint:{[cx]:q,[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aH,aJ,az,Z,ah,ai,aC,aD],[cr2]:[{[cs]:cc,endpoint:aN,[cq]:n2},{endpoint:aN,[cq]:n2}],[cq]:o},{[cs]:[aH,aJ,az,Z,ah,aM,aC,aD],[cr2]:[{[cs]:cc,endpoint:aO,[cq]:n2},aP],[cq]:o},{[cs]:[aH,aJ,az,Z,ah,ai,aC,aG],endpoint:aN,[cq]:n2},{[cs]:[aH,aJ,az,Z,ah,aM,aC,aG],endpoint:aO,[cq]:n2},{[cs]:[aH,aJ,W2,ar,aA],endpoint:{[cx]:D,[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aH,aJ,W2,ar,aC,aD],[cr2]:[{[cs]:cc,endpoint:aQ,[cq]:n2},{endpoint:aQ,[cq]:n2}],[cq]:o},{[cs]:[aH,aJ,W2,ar,aC,aG],endpoint:aQ,[cq]:n2},{[cs]:[aH,aJ,az,ar,aA],endpoint:{[cx]:E,[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aH,aJ,az,ar,aC,aD],[cr2]:[{[cs]:cc,endpoint:{[cx]:E,[cy]:aF,[cE]:am},[cq]:n2},{endpoint:aR,[cq]:n2}],[cq]:o},{[cs]:[aH,aJ,az,ar,aC,aG],endpoint:aR,[cq]:n2}],[cq]:o},aS],[cq]:o}],[cq]:o},{[cs]:[Z,ah,{[ct]:h,[cu]:[{[ct]:i,[cu]:[aj,"scheme"]},"http"]},{[ct]:p2,[cu]:[ad,c]},ax,aJ,aH,az],[cr2]:[{[cs]:bI,[cr2]:[{[cs]:cb,[cr2]:[aP],[cq]:o},aS],[cq]:o}],[cq]:o},{[cs]:[ax,{[ct]:F,[cu]:bB,[cw]:G2}],[cr2]:[{[cs]:[{[ct]:i,[cu]:[aT,"resourceId[0]"],[cw]:H},{[ct]:r3,[cu]:[{[ct]:h,[cu]:[aU,""]}]}],[cr2]:[{[cs]:[{[ct]:h,[cu]:[aV,J]}],[cr2]:[{[cs]:cd,[cr2]:[{[cs]:ce,[cr2]:[aX,aY,{[cs]:cg,[cr2]:[aZ,{[cs]:ch,[cr2]:[ba,{[cs]:cj,[cr2]:[{[cs]:bI,[cr2]:[{[cs]:ck,[cr2]:[{[cs]:cl,[cr2]:[{[cs]:[{[ct]:h,[cu]:[bc,""]}],error:"Invalid ARN: Missing account id",[cq]:f},{[cs]:cm,[cr2]:[{[cs]:cn,[cr2]:[{[cs]:bE,endpoint:{[cx]:M2,[cy]:bd,[cE]:am},[cq]:n2},{[cs]:bJ,endpoint:{[cx]:"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cy]:bd,[cE]:am},[cq]:n2},{endpoint:{[cx]:"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cy]:bd,[cE]:am},[cq]:n2}],[cq]:o},be],[cq]:o},bf],[cq]:o},bg],[cq]:o},bh],[cq]:o}],[cq]:o}],[cq]:o},bi],[cq]:o},{error:"Invalid ARN: bucket ARN is missing a region",[cq]:f}],[cq]:o},bj],[cq]:o},{error:"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`",[cq]:f}],[cq]:o},{[cs]:cd,[cr2]:[{[cs]:ce,[cr2]:[{[cs]:cg,[cr2]:[{[cs]:cd,[cr2]:[{[cs]:cg,[cr2]:[aZ,{[cs]:ch,[cr2]:[ba,{[cs]:cj,[cr2]:[{[cs]:bI,[cr2]:[{[cs]:[{[ct]:h,[cu]:[bb,"{partitionResult#name}"]}],[cr2]:[{[cs]:cl,[cr2]:[{[cs]:[{[ct]:h,[cu]:[aV,B]}],[cr2]:[{[cs]:cm,[cr2]:[{[cs]:cn,[cr2]:[{[cs]:bD,error:"Access Points do not support S3 Accelerate",[cq]:f},{[cs]:[X,Y],endpoint:{[cx]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cy]:bk,[cE]:am},[cq]:n2},{[cs]:[X,aH],endpoint:{[cx]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cy]:bk,[cE]:am},[cq]:n2},{[cs]:[aJ,Y],endpoint:{[cx]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cy]:bk,[cE]:am},[cq]:n2},{[cs]:[aJ,aH,Z,ah],endpoint:{[cx]:M2,[cy]:bk,[cE]:am},[cq]:n2},{[cs]:[aJ,aH],endpoint:{[cx]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cy]:bk,[cE]:am},[cq]:n2}],[cq]:o},be],[cq]:o},bf],[cq]:o},{error:"Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}",[cq]:f}],[cq]:o},bg],[cq]:o},bh],[cq]:o}],[cq]:o}],[cq]:o},bi],[cq]:o}],[cq]:o}],[cq]:o},{[cs]:[{[ct]:y,[cu]:[aW,c]}],[cr2]:[{[cs]:bC,error:"S3 MRAP does not support dual-stack",[cq]:f},{[cs]:bJ,error:"S3 MRAP does not support FIPS",[cq]:f},{[cs]:bD,error:"S3 MRAP does not support S3 Accelerate",[cq]:f},{[cs]:[{[ct]:e2,[cu]:[{[cv]:"DisableMultiRegionAccessPoints"},c]}],error:"Invalid configuration: Multi-Region Access Point ARNs are disabled.",[cq]:f},{[cs]:[{[ct]:g,[cu]:bz,[cw]:N2}],[cr2]:[{[cs]:[{[ct]:h,[cu]:[{[ct]:i,[cu]:[{[cv]:N2},j]},{[ct]:i,[cu]:[aT,"partition"]}]}],[cr2]:[{endpoint:{[cx]:"https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}",[cy]:{[cA]:[{[cB]:c,name:z,[cC]:B,[cF]:ca}]},[cE]:am},[cq]:n2}],[cq]:o},{error:"Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`",[cq]:f}],[cq]:o}],[cq]:o},{error:"Invalid Access Point Name",[cq]:f}],[cq]:o},bj],[cq]:o},{[cs]:[{[ct]:h,[cu]:[aV,A]}],[cr2]:[{[cs]:bC,error:"S3 Outposts does not support Dual-stack",[cq]:f},{[cs]:bJ,error:"S3 Outposts does not support FIPS",[cq]:f},{[cs]:bD,error:"S3 Outposts does not support S3 Accelerate",[cq]:f},{[cs]:[{[ct]:d3,[cu]:[{[ct]:i,[cu]:[aT,"resourceId[4]"]}]}],error:"Invalid Arn: Outpost Access Point ARN contains sub resources",[cq]:f},{[cs]:[{[ct]:i,[cu]:cf,[cw]:x}],[cr2]:[{[cs]:bY,[cr2]:[ba,{[cs]:cj,[cr2]:[{[cs]:bI,[cr2]:[{[cs]:ck,[cr2]:[{[cs]:cl,[cr2]:[{[cs]:cm,[cr2]:[{[cs]:[{[ct]:i,[cu]:ci,[cw]:O}],[cr2]:[{[cs]:[{[ct]:i,[cu]:[aT,"resourceId[3]"],[cw]:L3}],[cr2]:[{[cs]:[{[ct]:h,[cu]:[{[cv]:O},K]}],[cr2]:[{[cs]:bE,endpoint:{[cx]:"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.{url#authority}",[cy]:bl,[cE]:am},[cq]:n2},{endpoint:{[cx]:"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cy]:bl,[cE]:am},[cq]:n2}],[cq]:o},{error:"Expected an outpost type `accesspoint`, found {outpostType}",[cq]:f}],[cq]:o},{error:"Invalid ARN: expected an access point name",[cq]:f}],[cq]:o},{error:"Invalid ARN: Expected a 4-component resource",[cq]:f}],[cq]:o},bf],[cq]:o},bg],[cq]:o},bh],[cq]:o}],[cq]:o}],[cq]:o},{error:"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`",[cq]:f}],[cq]:o},{error:"Invalid ARN: The Outpost Id was not set",[cq]:f}],[cq]:o},{error:"Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})",[cq]:f}],[cq]:o},{error:"Invalid ARN: No ARN type specified",[cq]:f}],[cq]:o},{[cs]:[{[ct]:k,[cu]:[ad,0,4,!1],[cw]:P2},{[ct]:h,[cu]:[{[cv]:P2},"arn:"]},{[ct]:r3,[cu]:[{[ct]:d3,[cu]:[bm]}]}],error:"Invalid ARN: `{Bucket}` was not a valid ARN",[cq]:f},{[cs]:[{[ct]:e2,[cu]:[ay,c]},bm],error:"Path-style addressing cannot be used with ARN buckets",[cq]:f},{[cs]:bG,[cr2]:[{[cs]:bI,[cr2]:[{[cs]:[az],[cr2]:[{[cs]:[Y,ar,X,aA],endpoint:{[cx]:"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[Y,ar,X,aC,aD],[cr2]:[{endpoint:bn,[cq]:n2}],[cq]:o},{[cs]:[Y,ar,X,aC,aG],endpoint:bn,[cq]:n2},{[cs]:[aH,ar,X,aA],endpoint:{[cx]:"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aH,ar,X,aC,aD],[cr2]:[{endpoint:bo,[cq]:n2}],[cq]:o},{[cs]:[aH,ar,X,aC,aG],endpoint:bo,[cq]:n2},{[cs]:[Y,ar,aJ,aA],endpoint:{[cx]:"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[Y,ar,aJ,aC,aD],[cr2]:[{endpoint:bp,[cq]:n2}],[cq]:o},{[cs]:[Y,ar,aJ,aC,aG],endpoint:bp,[cq]:n2},{[cs]:[aH,Z,ah,aJ,aA],endpoint:{[cx]:Q,[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aH,Z,ah,aJ,aC,aD],[cr2]:[{[cs]:cc,endpoint:bq,[cq]:n2},{endpoint:bq,[cq]:n2}],[cq]:o},{[cs]:[aH,Z,ah,aJ,aC,aG],endpoint:bq,[cq]:n2},{[cs]:[aH,ar,aJ,aA],endpoint:{[cx]:R,[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aH,ar,aJ,aC,aD],[cr2]:[{[cs]:cc,endpoint:{[cx]:R,[cy]:aF,[cE]:am},[cq]:n2},{endpoint:br,[cq]:n2}],[cq]:o},{[cs]:[aH,ar,aJ,aC,aG],endpoint:br,[cq]:n2}],[cq]:o},{error:"Path-style addressing cannot be used with S3 Accelerate",[cq]:f}],[cq]:o}],[cq]:o}],[cq]:o},{[cs]:[{[ct]:d3,[cu]:[bs]},{[ct]:e2,[cu]:[bs,c]}],[cr2]:[{[cs]:bI,[cr2]:[{[cs]:co,[cr2]:[aX,aY,{[cs]:bE,endpoint:{[cx]:t2,[cy]:bt,[cE]:am},[cq]:n2},{[cs]:bJ,endpoint:{[cx]:"https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}",[cy]:bt,[cE]:am},[cq]:n2},{endpoint:{[cx]:"https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}",[cy]:bt,[cE]:am},[cq]:n2}],[cq]:o},aS],[cq]:o}],[cq]:o},{[cs]:[at],[cr2]:[{[cs]:bI,[cr2]:[{[cs]:co,[cr2]:[{[cs]:[X,Y,ar,aA],endpoint:{[cx]:"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[X,Y,ar,aC,aD],[cr2]:[{endpoint:bu,[cq]:n2}],[cq]:o},{[cs]:[X,Y,ar,aC,aG],endpoint:bu,[cq]:n2},{[cs]:[X,aH,ar,aA],endpoint:{[cx]:"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[X,aH,ar,aC,aD],[cr2]:[{endpoint:bv,[cq]:n2}],[cq]:o},{[cs]:[X,aH,ar,aC,aG],endpoint:bv,[cq]:n2},{[cs]:[aJ,Y,ar,aA],endpoint:{[cx]:"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aJ,Y,ar,aC,aD],[cr2]:[{endpoint:bw,[cq]:n2}],[cq]:o},{[cs]:[aJ,Y,ar,aC,aG],endpoint:bw,[cq]:n2},{[cs]:[aJ,aH,Z,ah,aA],endpoint:{[cx]:t2,[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aJ,aH,Z,ah,aC,aD],[cr2]:[{[cs]:cc,endpoint:bx,[cq]:n2},{endpoint:bx,[cq]:n2}],[cq]:o},{[cs]:[aJ,aH,Z,ah,aC,aG],endpoint:bx,[cq]:n2},{[cs]:[aJ,aH,ar,aA],endpoint:{[cx]:S,[cy]:aB,[cE]:am},[cq]:n2},{[cs]:[aJ,aH,ar,aC,aD],[cr2]:[{[cs]:cc,endpoint:{[cx]:S,[cy]:aF,[cE]:am},[cq]:n2},{endpoint:by,[cq]:n2}],[cq]:o},{[cs]:[aJ,aH,ar,aC,aG],endpoint:by,[cq]:n2}],[cq]:o},aS],[cq]:o}],[cq]:o}],[cq]:o},{error:"A region must be set when sending requests to S3.",[cq]:f}]};cache=new EndpointCache({size:50,params:["Accelerate","Bucket","DisableAccessPoints","DisableMultiRegionAccessPoints","DisableS3ExpressSessionAuth","Endpoint","ForcePathStyle","Region","UseArnRegion","UseDualStack","UseFIPS","UseGlobalEndpoint","UseObjectLambdaEndpoint","UseS3ExpressControlEndpoint"]});defaultEndpointResolver=(endpointParams,context2={})=>cache.get(endpointParams,(()=>resolveEndpoint(ruleSet,{endpointParams,logger:context2.logger})));customEndpointFunctions.aws=awsEndpointFunctions;defaultS3HttpAuthSchemeParametersProvider=(defaultHttpAuthSchemeParametersProvider=>async(config,context2,input)=>{var _a8,_b5,_c3;if(!input)throw new Error("Could not find `input` for `defaultEndpointRuleSetHttpAuthSchemeParametersProvider`");const defaultParameters=await defaultHttpAuthSchemeParametersProvider(config,context2),instructionsFn=null==(_c3=null==(_b5=null==(_a8=getSmithyContext2(context2))?void 0:_a8.commandInstance)?void 0:_b5.constructor)?void 0:_c3.getEndpointParameterInstructions;if(!instructionsFn)throw new Error(`getEndpointParameterInstructions() is not defined on \`${context2.commandName}\``);const endpointParameters=await resolveParams(input,{getEndpointParameterInstructions:instructionsFn},config);return Object.assign(defaultParameters,endpointParameters)})((async(config,context2,input)=>({operation:getSmithyContext2(context2).operation,region:await normalizeProvider(config.region)()||(()=>{throw new Error("expected `region` to be configured for `aws.auth#sigv4`")})()})));defaultS3HttpAuthSchemeProvider=((defaultEndpointResolver2,defaultHttpAuthSchemeResolver,createHttpAuthOptionFunctions)=>authParameters=>{var _a8;const authSchemes=null==(_a8=defaultEndpointResolver2(authParameters).properties)?void 0:_a8.authSchemes;if(!authSchemes)return defaultHttpAuthSchemeResolver(authParameters);const options=[];for(const scheme of authSchemes){const{name:resolvedName,properties={},...rest}=scheme,name=resolvedName.toLowerCase();resolvedName!==name&&console.warn(`HttpAuthScheme has been normalized with lowercasing: \`${resolvedName}\` to \`${name}\``);let schemeId;if("sigv4a"===name){schemeId="aws.auth#sigv4a";if(authSchemes.find((s2=>{const name2=s2.name.toLowerCase();return"sigv4a"!==name2&&name2.startsWith("sigv4")})))continue}else{if(!name.startsWith("sigv4"))throw new Error(`Unknown HttpAuthScheme found in \`@smithy.rules#endpointRuleSet\`: \`${name}\``);schemeId="aws.auth#sigv4"}const createOption=createHttpAuthOptionFunctions[schemeId];if(!createOption)throw new Error(`Could not find HttpAuthOption create function for \`${schemeId}\``);const option=createOption(authParameters);option.schemeId=schemeId;option.signingProperties={...option.signingProperties||{},...rest,...properties};options.push(option)}return options})(defaultEndpointResolver,(authParameters=>{const options=[];switch(authParameters.operation){default:options.push(createAwsAuthSigv4HttpAuthOption(authParameters));options.push(createAwsAuthSigv4aHttpAuthOption(authParameters))}return options}),{"aws.auth#sigv4":createAwsAuthSigv4HttpAuthOption,"aws.auth#sigv4a":createAwsAuthSigv4aHttpAuthOption});resolveHttpAuthSchemeConfig=config=>{var _a8;const config_0=resolveAwsSdkSigV4Config(config),config_1=resolveAwsSdkSigV4AConfig(config_0);return Object.assign(config_1,{authSchemePreference:normalizeProvider(null!=(_a8=config.authSchemePreference)?_a8:[])})};resolveClientEndpointParameters=options=>{var _a8,_b5,_c3,_d2,_e2,_f;return Object.assign(options,{useFipsEndpoint:null!=(_a8=options.useFipsEndpoint)&&_a8,useDualstackEndpoint:null!=(_b5=options.useDualstackEndpoint)&&_b5,forcePathStyle:null!=(_c3=options.forcePathStyle)&&_c3,useAccelerateEndpoint:null!=(_d2=options.useAccelerateEndpoint)&&_d2,useGlobalEndpoint:null!=(_e2=options.useGlobalEndpoint)&&_e2,disableMultiregionAccessPoints:null!=(_f=options.disableMultiregionAccessPoints)&&_f,defaultSigningName:"s3"})};commonParams={ForcePathStyle:{type:"clientContextParams",name:"forcePathStyle"},UseArnRegion:{type:"clientContextParams",name:"useArnRegion"},DisableMultiRegionAccessPoints:{type:"clientContextParams",name:"disableMultiregionAccessPoints"},Accelerate:{type:"clientContextParams",name:"useAccelerateEndpoint"},DisableS3ExpressSessionAuth:{type:"clientContextParams",name:"disableS3ExpressSessionAuth"},UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}};S3ServiceException=class _S3ServiceException extends ServiceException{constructor(options){super(options);Object.setPrototypeOf(this,_S3ServiceException.prototype)}};NoSuchUpload=class _NoSuchUpload extends S3ServiceException{constructor(opts){super({name:"NoSuchUpload",$fault:"client",...opts});__publicField(this,"name","NoSuchUpload");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NoSuchUpload.prototype)}};ObjectNotInActiveTierError=class _ObjectNotInActiveTierError extends S3ServiceException{constructor(opts){super({name:"ObjectNotInActiveTierError",$fault:"client",...opts});__publicField(this,"name","ObjectNotInActiveTierError");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_ObjectNotInActiveTierError.prototype)}};BucketAlreadyExists=class _BucketAlreadyExists extends S3ServiceException{constructor(opts){super({name:"BucketAlreadyExists",$fault:"client",...opts});__publicField(this,"name","BucketAlreadyExists");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_BucketAlreadyExists.prototype)}};BucketAlreadyOwnedByYou=class _BucketAlreadyOwnedByYou extends S3ServiceException{constructor(opts){super({name:"BucketAlreadyOwnedByYou",$fault:"client",...opts});__publicField(this,"name","BucketAlreadyOwnedByYou");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_BucketAlreadyOwnedByYou.prototype)}};NoSuchBucket=class _NoSuchBucket extends S3ServiceException{constructor(opts){super({name:"NoSuchBucket",$fault:"client",...opts});__publicField(this,"name","NoSuchBucket");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NoSuchBucket.prototype)}};(function(){(AnalyticsFilter||(AnalyticsFilter={})).visit=(value,visitor)=>void 0!==value.Prefix?visitor.Prefix(value.Prefix):void 0!==value.Tag?visitor.Tag(value.Tag):void 0!==value.And?visitor.And(value.And):visitor._(value.$unknown[0],value.$unknown[1])})();(function(){(MetricsFilter||(MetricsFilter={})).visit=(value,visitor)=>void 0!==value.Prefix?visitor.Prefix(value.Prefix):void 0!==value.Tag?visitor.Tag(value.Tag):void 0!==value.AccessPointArn?visitor.AccessPointArn(value.AccessPointArn):void 0!==value.And?visitor.And(value.And):visitor._(value.$unknown[0],value.$unknown[1])})();InvalidObjectState=class _InvalidObjectState extends S3ServiceException{constructor(opts){super({name:"InvalidObjectState",$fault:"client",...opts});__publicField(this,"name","InvalidObjectState");__publicField(this,"$fault","client");__publicField(this,"StorageClass");__publicField(this,"AccessTier");Object.setPrototypeOf(this,_InvalidObjectState.prototype);this.StorageClass=opts.StorageClass;this.AccessTier=opts.AccessTier}};NoSuchKey=class _NoSuchKey extends S3ServiceException{constructor(opts){super({name:"NoSuchKey",$fault:"client",...opts});__publicField(this,"name","NoSuchKey");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NoSuchKey.prototype)}};NotFound=class _NotFound extends S3ServiceException{constructor(opts){super({name:"NotFound",$fault:"client",...opts});__publicField(this,"name","NotFound");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NotFound.prototype)}};CompleteMultipartUploadOutputFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING}});CompleteMultipartUploadRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING}});CopyObjectOutputFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING},...obj.SSEKMSEncryptionContext&&{SSEKMSEncryptionContext:SENSITIVE_STRING}});CopyObjectRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING},...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING},...obj.SSEKMSEncryptionContext&&{SSEKMSEncryptionContext:SENSITIVE_STRING},...obj.CopySourceSSECustomerKey&&{CopySourceSSECustomerKey:SENSITIVE_STRING}});CreateMultipartUploadOutputFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING},...obj.SSEKMSEncryptionContext&&{SSEKMSEncryptionContext:SENSITIVE_STRING}});CreateMultipartUploadRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING},...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING},...obj.SSEKMSEncryptionContext&&{SSEKMSEncryptionContext:SENSITIVE_STRING}});SessionCredentialsFilterSensitiveLog=obj=>({...obj,...obj.SecretAccessKey&&{SecretAccessKey:SENSITIVE_STRING},...obj.SessionToken&&{SessionToken:SENSITIVE_STRING}});CreateSessionOutputFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING},...obj.SSEKMSEncryptionContext&&{SSEKMSEncryptionContext:SENSITIVE_STRING},...obj.Credentials&&{Credentials:SessionCredentialsFilterSensitiveLog(obj.Credentials)}});CreateSessionRequestFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING},...obj.SSEKMSEncryptionContext&&{SSEKMSEncryptionContext:SENSITIVE_STRING}});ServerSideEncryptionByDefaultFilterSensitiveLog=obj=>({...obj,...obj.KMSMasterKeyID&&{KMSMasterKeyID:SENSITIVE_STRING}});ServerSideEncryptionRuleFilterSensitiveLog=obj=>({...obj,...obj.ApplyServerSideEncryptionByDefault&&{ApplyServerSideEncryptionByDefault:ServerSideEncryptionByDefaultFilterSensitiveLog(obj.ApplyServerSideEncryptionByDefault)}});ServerSideEncryptionConfigurationFilterSensitiveLog=obj=>({...obj,...obj.Rules&&{Rules:obj.Rules.map((item=>ServerSideEncryptionRuleFilterSensitiveLog(item)))}});GetBucketEncryptionOutputFilterSensitiveLog=obj=>({...obj,...obj.ServerSideEncryptionConfiguration&&{ServerSideEncryptionConfiguration:ServerSideEncryptionConfigurationFilterSensitiveLog(obj.ServerSideEncryptionConfiguration)}});SSEKMSFilterSensitiveLog=obj=>({...obj,...obj.KeyId&&{KeyId:SENSITIVE_STRING}});InventoryEncryptionFilterSensitiveLog=obj=>({...obj,...obj.SSEKMS&&{SSEKMS:SSEKMSFilterSensitiveLog(obj.SSEKMS)}});InventoryS3BucketDestinationFilterSensitiveLog=obj=>({...obj,...obj.Encryption&&{Encryption:InventoryEncryptionFilterSensitiveLog(obj.Encryption)}});InventoryDestinationFilterSensitiveLog=obj=>({...obj,...obj.S3BucketDestination&&{S3BucketDestination:InventoryS3BucketDestinationFilterSensitiveLog(obj.S3BucketDestination)}});InventoryConfigurationFilterSensitiveLog=obj=>({...obj,...obj.Destination&&{Destination:InventoryDestinationFilterSensitiveLog(obj.Destination)}});GetBucketInventoryConfigurationOutputFilterSensitiveLog=obj=>({...obj,...obj.InventoryConfiguration&&{InventoryConfiguration:InventoryConfigurationFilterSensitiveLog(obj.InventoryConfiguration)}});GetObjectOutputFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING}});GetObjectRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING}});GetObjectAttributesRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING}});GetObjectTorrentOutputFilterSensitiveLog=obj=>({...obj});HeadObjectOutputFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING}});HeadObjectRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING}});ListBucketInventoryConfigurationsOutputFilterSensitiveLog=obj=>({...obj,...obj.InventoryConfigurationList&&{InventoryConfigurationList:obj.InventoryConfigurationList.map((item=>InventoryConfigurationFilterSensitiveLog(item)))}});ListPartsRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING}});XmlText=class{constructor(value){__publicField(this,"value");this.value=value}toString(){return escapeElement(""+this.value)}};XmlNode=class _XmlNode{constructor(name,children=[]){__publicField(this,"name");__publicField(this,"children");__publicField(this,"attributes",{});this.name=name;this.children=children}static of(name,childText,withName){const node=new _XmlNode(name);void 0!==childText&&node.addChildNode(new XmlText(childText));void 0!==withName&&node.withName(withName);return node}withName(name){this.name=name;return this}addAttribute(name,value){this.attributes[name]=value;return this}addChildNode(child2){this.children.push(child2);return this}removeAttribute(name){delete this.attributes[name];return this}n(name){this.name=name;return this}c(child2){this.children.push(child2);return this}a(name,value){null!=value&&(this.attributes[name]=value);return this}cc(input,field,withName=field){if(null!=input[field]){const node=_XmlNode.of(field,input[field]).withName(withName);this.c(node)}}l(input,listName,memberName,valueProvider){null!=input[listName]&&valueProvider().map((node=>{node.withName(memberName);this.c(node)}))}lc(input,listName,memberName,valueProvider){if(null!=input[listName]){const nodes=valueProvider(),containerNode=new _XmlNode(memberName);nodes.map((node=>{containerNode.c(node)}));this.c(containerNode)}}toString(){const hasChildren=Boolean(this.children.length);let xmlText=`<${this.name}`;const attributes=this.attributes;for(const attributeName of Object.keys(attributes)){const attribute=attributes[attributeName];null!=attribute&&(xmlText+=` ${attributeName}="${escapeAttribute(""+attribute)}"`)}return xmlText+(hasChildren?`>${this.children.map((c3=>c3.toString())).join("")}`:"/>")}};EncryptionTypeMismatch=class _EncryptionTypeMismatch extends S3ServiceException{constructor(opts){super({name:"EncryptionTypeMismatch",$fault:"client",...opts});__publicField(this,"name","EncryptionTypeMismatch");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_EncryptionTypeMismatch.prototype)}};InvalidRequest=class _InvalidRequest extends S3ServiceException{constructor(opts){super({name:"InvalidRequest",$fault:"client",...opts});__publicField(this,"name","InvalidRequest");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_InvalidRequest.prototype)}};InvalidWriteOffset=class _InvalidWriteOffset extends S3ServiceException{constructor(opts){super({name:"InvalidWriteOffset",$fault:"client",...opts});__publicField(this,"name","InvalidWriteOffset");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_InvalidWriteOffset.prototype)}};TooManyParts=class _TooManyParts extends S3ServiceException{constructor(opts){super({name:"TooManyParts",$fault:"client",...opts});__publicField(this,"name","TooManyParts");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_TooManyParts.prototype)}};ObjectAlreadyInActiveTierError=class _ObjectAlreadyInActiveTierError extends S3ServiceException{constructor(opts){super({name:"ObjectAlreadyInActiveTierError",$fault:"client",...opts});__publicField(this,"name","ObjectAlreadyInActiveTierError");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_ObjectAlreadyInActiveTierError.prototype)}};(function(){(SelectObjectContentEventStream||(SelectObjectContentEventStream={})).visit=(value,visitor)=>void 0!==value.Records?visitor.Records(value.Records):void 0!==value.Stats?visitor.Stats(value.Stats):void 0!==value.Progress?visitor.Progress(value.Progress):void 0!==value.Cont?visitor.Cont(value.Cont):void 0!==value.End?visitor.End(value.End):visitor._(value.$unknown[0],value.$unknown[1])})();PutBucketEncryptionRequestFilterSensitiveLog=obj=>({...obj,...obj.ServerSideEncryptionConfiguration&&{ServerSideEncryptionConfiguration:ServerSideEncryptionConfigurationFilterSensitiveLog(obj.ServerSideEncryptionConfiguration)}});PutBucketInventoryConfigurationRequestFilterSensitiveLog=obj=>({...obj,...obj.InventoryConfiguration&&{InventoryConfiguration:InventoryConfigurationFilterSensitiveLog(obj.InventoryConfiguration)}});PutObjectOutputFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING},...obj.SSEKMSEncryptionContext&&{SSEKMSEncryptionContext:SENSITIVE_STRING}});PutObjectRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING},...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING},...obj.SSEKMSEncryptionContext&&{SSEKMSEncryptionContext:SENSITIVE_STRING}});EncryptionFilterSensitiveLog=obj=>({...obj,...obj.KMSKeyId&&{KMSKeyId:SENSITIVE_STRING}});S3LocationFilterSensitiveLog=obj=>({...obj,...obj.Encryption&&{Encryption:EncryptionFilterSensitiveLog(obj.Encryption)}});OutputLocationFilterSensitiveLog=obj=>({...obj,...obj.S3&&{S3:S3LocationFilterSensitiveLog(obj.S3)}});RestoreRequestFilterSensitiveLog=obj=>({...obj,...obj.OutputLocation&&{OutputLocation:OutputLocationFilterSensitiveLog(obj.OutputLocation)}});RestoreObjectRequestFilterSensitiveLog=obj=>({...obj,...obj.RestoreRequest&&{RestoreRequest:RestoreRequestFilterSensitiveLog(obj.RestoreRequest)}});SelectObjectContentOutputFilterSensitiveLog=obj=>({...obj,...obj.Payload&&{Payload:"STREAMING_CONTENT"}});SelectObjectContentRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING}});UploadPartOutputFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING}});UploadPartRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING}});UploadPartCopyOutputFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING}});UploadPartCopyRequestFilterSensitiveLog=obj=>({...obj,...obj.SSECustomerKey&&{SSECustomerKey:SENSITIVE_STRING},...obj.CopySourceSSECustomerKey&&{CopySourceSSECustomerKey:SENSITIVE_STRING}});WriteGetObjectResponseRequestFilterSensitiveLog=obj=>({...obj,...obj.SSEKMSKeyId&&{SSEKMSKeyId:SENSITIVE_STRING}});se_AbortMultipartUploadCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xarp]:input[_RP],[_xaebo]:input[_EBO],[_xaimit]:[()=>isSerializableHeaderValue(input[_IMIT]),()=>dateToUtcString(input[_IMIT]).toString()]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_xi]:[,"AbortMultipartUpload"],[_uI]:[,expectNonNull(input[_UI],"UploadId")]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_CompleteMultipartUploadCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xacc]:input[_CCRC],[_xacc_]:input[_CCRCC],[_xacc__]:input[_CCRCNVME],[_xacs]:input[_CSHA],[_xacs_]:input[_CSHAh],[_xact]:input[_CT],[_xamos]:[()=>isSerializableHeaderValue(input[_MOS]),()=>input[_MOS].toString()],[_xarp]:input[_RP],[_xaebo]:input[_EBO],[_im]:input[_IM],[_inm]:input[_INM],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_uI]:[,expectNonNull(input[_UI],"UploadId")]});let body,contents;if(void 0!==input.MultipartUpload){contents=se_CompletedMultipartUpload(input.MultipartUpload,context2);contents=contents.n("CompleteMultipartUpload");body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("POST").h(headers).q(query3).b(body);return b3.build()};se_CopyObjectCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{...void 0!==input.Metadata&&Object.keys(input.Metadata).reduce(((acc,suffix)=>{acc[`x-amz-meta-${suffix.toLowerCase()}`]=input.Metadata[suffix];return acc}),{}),[_xaa]:input[_ACL],[_cc]:input[_CC],[_xaca]:input[_CA],[_cd]:input[_CD],[_ce]:input[_CE],[_cl]:input[_CL],[_ct]:input[_CTo],[_xacs__]:input[_CS],[_xacsim]:input[_CSIM],[_xacsims]:[()=>isSerializableHeaderValue(input[_CSIMS]),()=>dateToUtcString(input[_CSIMS]).toString()],[_xacsinm]:input[_CSINM],[_xacsius]:[()=>isSerializableHeaderValue(input[_CSIUS]),()=>dateToUtcString(input[_CSIUS]).toString()],[_e]:[()=>isSerializableHeaderValue(input[_E]),()=>dateToUtcString(input[_E]).toString()],[_xagfc]:input[_GFC],[_xagr]:input[_GR],[_xagra]:input[_GRACP],[_xagwa]:input[_GWACP],[_xamd]:input[_MD],[_xatd]:input[_TD],[_xasse]:input[_SSE],[_xasc]:input[_SC],[_xawrl]:input[_WRL],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD],[_xasseakki]:input[_SSEKMSKI],[_xassec]:input[_SSEKMSEC],[_xassebke]:[()=>isSerializableHeaderValue(input[_BKE]),()=>input[_BKE].toString()],[_xacssseca]:input[_CSSSECA],[_xacssseck]:input[_CSSSECK],[_xacssseckm]:input[_CSSSECKMD],[_xarp]:input[_RP],[_xat]:input[_T],[_xaolm]:input[_OLM],[_xaolrud]:[()=>isSerializableHeaderValue(input[_OLRUD]),()=>serializeDateTime(input[_OLRUD]).toString()],[_xaollh]:input[_OLLHS],[_xaebo]:input[_EBO],[_xasebo]:input[_ESBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_xi]:[,"CopyObject"]});b3.m("PUT").h(headers).q(query3).b(void 0);return b3.build()};se_CreateBucketCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xaa]:input[_ACL],[_xagfc]:input[_GFC],[_xagr]:input[_GR],[_xagra]:input[_GRACP],[_xagw]:input[_GW],[_xagwa]:input[_GWACP],[_xabole]:[()=>isSerializableHeaderValue(input[_OLEFB]),()=>input[_OLEFB].toString()],[_xaoo]:input[_OO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);let body,contents;if(void 0!==input.CreateBucketConfiguration){contents=se_CreateBucketConfiguration(input.CreateBucketConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).b(body);return b3.build()};se_CreateBucketMetadataTableConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_mT]:[,""]});let body,contents;if(void 0!==input.MetadataTableConfiguration){contents=se_MetadataTableConfiguration(input.MetadataTableConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("POST").h(headers).q(query3).b(body);return b3.build()};se_CreateMultipartUploadCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{...void 0!==input.Metadata&&Object.keys(input.Metadata).reduce(((acc,suffix)=>{acc[`x-amz-meta-${suffix.toLowerCase()}`]=input.Metadata[suffix];return acc}),{}),[_xaa]:input[_ACL],[_cc]:input[_CC],[_cd]:input[_CD],[_ce]:input[_CE],[_cl]:input[_CL],[_ct]:input[_CTo],[_e]:[()=>isSerializableHeaderValue(input[_E]),()=>dateToUtcString(input[_E]).toString()],[_xagfc]:input[_GFC],[_xagr]:input[_GR],[_xagra]:input[_GRACP],[_xagwa]:input[_GWACP],[_xasse]:input[_SSE],[_xasc]:input[_SC],[_xawrl]:input[_WRL],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD],[_xasseakki]:input[_SSEKMSKI],[_xassec]:input[_SSEKMSEC],[_xassebke]:[()=>isSerializableHeaderValue(input[_BKE]),()=>input[_BKE].toString()],[_xarp]:input[_RP],[_xat]:input[_T],[_xaolm]:input[_OLM],[_xaolrud]:[()=>isSerializableHeaderValue(input[_OLRUD]),()=>serializeDateTime(input[_OLRUD]).toString()],[_xaollh]:input[_OLLHS],[_xaebo]:input[_EBO],[_xaca]:input[_CA],[_xact]:input[_CT]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_u]:[,""]});b3.m("POST").h(headers).q(query3).b(void 0);return b3.build()};se_CreateSessionCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xacsm]:input[_SM],[_xasse]:input[_SSE],[_xasseakki]:input[_SSEKMSKI],[_xassec]:input[_SSEKMSEC],[_xassebke]:[()=>isSerializableHeaderValue(input[_BKE]),()=>input[_BKE].toString()]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_s]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.m("DELETE").h(headers).b(void 0);return b3.build()};se_DeleteBucketAnalyticsConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_a5]:[,""],[_i]:[,expectNonNull(input[_I],"Id")]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketCorsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_c2]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketEncryptionCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_en]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketIntelligentTieringConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2);b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_it]:[,""],[_i]:[,expectNonNull(input[_I],"Id")]});b3.m("DELETE").h({}).q(query3).b(void 0);return b3.build()};se_DeleteBucketInventoryConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_in]:[,""],[_i]:[,expectNonNull(input[_I],"Id")]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketLifecycleCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_l]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketMetadataTableConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_mT]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketMetricsConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_m]:[,""],[_i]:[,expectNonNull(input[_I],"Id")]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketOwnershipControlsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_oC]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketPolicyCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_p]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketReplicationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_r]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketTaggingCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_t]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteBucketWebsiteCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_w]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteObjectCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xam]:input[_MFA],[_xarp]:input[_RP],[_xabgr]:[()=>isSerializableHeaderValue(input[_BGR]),()=>input[_BGR].toString()],[_xaebo]:input[_EBO],[_im]:input[_IM],[_xaimlmt]:[()=>isSerializableHeaderValue(input[_IMLMT]),()=>dateToUtcString(input[_IMLMT]).toString()],[_xaims]:[()=>isSerializableHeaderValue(input[_IMS]),()=>input[_IMS].toString()]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_xi]:[,"DeleteObject"],[_vI]:[,input[_VI]]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeleteObjectsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xam]:input[_MFA],[_xarp]:input[_RP],[_xabgr]:[()=>isSerializableHeaderValue(input[_BGR]),()=>input[_BGR].toString()],[_xaebo]:input[_EBO],[_xasca]:input[_CA]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_d]:[,""]});let body,contents;if(void 0!==input.Delete){contents=se_Delete(input.Delete,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("POST").h(headers).q(query3).b(body);return b3.build()};se_DeleteObjectTaggingCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_t]:[,""],[_vI]:[,input[_VI]]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_DeletePublicAccessBlockCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_pAB]:[,""]});b3.m("DELETE").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketAccelerateConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO],[_xarp]:input[_RP]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_ac]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketAclCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_acl]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketAnalyticsConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_a5]:[,""],[_xi]:[,"GetBucketAnalyticsConfiguration"],[_i]:[,expectNonNull(input[_I],"Id")]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketCorsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_c2]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketEncryptionCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_en]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketIntelligentTieringConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2);b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_it]:[,""],[_xi]:[,"GetBucketIntelligentTieringConfiguration"],[_i]:[,expectNonNull(input[_I],"Id")]});b3.m("GET").h({}).q(query3).b(void 0);return b3.build()};se_GetBucketInventoryConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_in]:[,""],[_xi]:[,"GetBucketInventoryConfiguration"],[_i]:[,expectNonNull(input[_I],"Id")]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketLifecycleConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_l]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketLocationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_lo]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketLoggingCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_log]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketMetadataTableConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_mT]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketMetricsConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_m]:[,""],[_xi]:[,"GetBucketMetricsConfiguration"],[_i]:[,expectNonNull(input[_I],"Id")]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketNotificationConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_n]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketOwnershipControlsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_oC]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketPolicyCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_p]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketPolicyStatusCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_pS]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketReplicationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_r]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketRequestPaymentCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_rP]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketTaggingCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_t]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketVersioningCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_v]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetBucketWebsiteCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_w]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetObjectCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_im]:input[_IM],[_ims]:[()=>isSerializableHeaderValue(input[_IMSf]),()=>dateToUtcString(input[_IMSf]).toString()],[_inm]:input[_INM],[_ius]:[()=>isSerializableHeaderValue(input[_IUS]),()=>dateToUtcString(input[_IUS]).toString()],[_ra]:input[_R],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD],[_xarp]:input[_RP],[_xaebo]:input[_EBO],[_xacm]:input[_CM]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_xi]:[,"GetObject"],[_rcc]:[,input[_RCC]],[_rcd]:[,input[_RCD]],[_rce]:[,input[_RCE]],[_rcl]:[,input[_RCL]],[_rct]:[,input[_RCT]],[_re]:[()=>void 0!==input.ResponseExpires,()=>dateToUtcString(input[_RE]).toString()],[_vI]:[,input[_VI]],[_pN]:[()=>void 0!==input.PartNumber,()=>input[_PN].toString()]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetObjectAclCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xarp]:input[_RP],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_acl]:[,""],[_vI]:[,input[_VI]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetObjectAttributesCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xamp]:[()=>isSerializableHeaderValue(input[_MP]),()=>input[_MP].toString()],[_xapnm]:input[_PNM],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD],[_xarp]:input[_RP],[_xaebo]:input[_EBO],[_xaoa]:[()=>isSerializableHeaderValue(input[_OA]),()=>(input[_OA]||[]).map(quoteHeader).join(", ")]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_at]:[,""],[_vI]:[,input[_VI]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetObjectLegalHoldCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xarp]:input[_RP],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_lh]:[,""],[_vI]:[,input[_VI]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetObjectLockConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_ol]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetObjectRetentionCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xarp]:input[_RP],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_ret]:[,""],[_vI]:[,input[_VI]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetObjectTaggingCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO],[_xarp]:input[_RP]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_t]:[,""],[_vI]:[,input[_VI]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetObjectTorrentCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xarp]:input[_RP],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_to]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_GetPublicAccessBlockCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_pAB]:[,""]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_HeadBucketCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.m("HEAD").h(headers).b(void 0);return b3.build()};se_HeadObjectCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_im]:input[_IM],[_ims]:[()=>isSerializableHeaderValue(input[_IMSf]),()=>dateToUtcString(input[_IMSf]).toString()],[_inm]:input[_INM],[_ius]:[()=>isSerializableHeaderValue(input[_IUS]),()=>dateToUtcString(input[_IUS]).toString()],[_ra]:input[_R],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD],[_xarp]:input[_RP],[_xaebo]:input[_EBO],[_xacm]:input[_CM]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_rcc]:[,input[_RCC]],[_rcd]:[,input[_RCD]],[_rce]:[,input[_RCE]],[_rcl]:[,input[_RCL]],[_rct]:[,input[_RCT]],[_re]:[()=>void 0!==input.ResponseExpires,()=>dateToUtcString(input[_RE]).toString()],[_vI]:[,input[_VI]],[_pN]:[()=>void 0!==input.PartNumber,()=>input[_PN].toString()]});b3.m("HEAD").h(headers).q(query3).b(void 0);return b3.build()};se_ListBucketAnalyticsConfigurationsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_a5]:[,""],[_xi]:[,"ListBucketAnalyticsConfigurations"],[_ct_]:[,input[_CTon]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_ListBucketIntelligentTieringConfigurationsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2);b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_it]:[,""],[_xi]:[,"ListBucketIntelligentTieringConfigurations"],[_ct_]:[,input[_CTon]]});b3.m("GET").h({}).q(query3).b(void 0);return b3.build()};se_ListBucketInventoryConfigurationsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_in]:[,""],[_xi]:[,"ListBucketInventoryConfigurations"],[_ct_]:[,input[_CTon]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_ListBucketMetricsConfigurationsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_m]:[,""],[_xi]:[,"ListBucketMetricsConfigurations"],[_ct_]:[,input[_CTon]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_ListBucketsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2);b3.bp("/");const query3=map2({[_xi]:[,"ListBuckets"],[_mb]:[()=>void 0!==input.MaxBuckets,()=>input[_MB].toString()],[_ct_]:[,input[_CTon]],[_pr]:[,input[_P]],[_br]:[,input[_BR]]});b3.m("GET").h({}).q(query3).b(void 0);return b3.build()};se_ListDirectoryBucketsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2);b3.bp("/");const query3=map2({[_xi]:[,"ListDirectoryBuckets"],[_ct_]:[,input[_CTon]],[_mdb]:[()=>void 0!==input.MaxDirectoryBuckets,()=>input[_MDB].toString()]});b3.m("GET").h({}).q(query3).b(void 0);return b3.build()};se_ListMultipartUploadsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO],[_xarp]:input[_RP]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_u]:[,""],[_de]:[,input[_D]],[_et]:[,input[_ET]],[_km]:[,input[_KM]],[_mu]:[()=>void 0!==input.MaxUploads,()=>input[_MU].toString()],[_pr]:[,input[_P]],[_uim]:[,input[_UIM]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_ListObjectsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xarp]:input[_RP],[_xaebo]:input[_EBO],[_xaooa]:[()=>isSerializableHeaderValue(input[_OOA]),()=>(input[_OOA]||[]).map(quoteHeader).join(", ")]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_de]:[,input[_D]],[_et]:[,input[_ET]],[_ma]:[,input[_M]],[_mk]:[()=>void 0!==input.MaxKeys,()=>input[_MK].toString()],[_pr]:[,input[_P]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_ListObjectsV2Command=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xarp]:input[_RP],[_xaebo]:input[_EBO],[_xaooa]:[()=>isSerializableHeaderValue(input[_OOA]),()=>(input[_OOA]||[]).map(quoteHeader).join(", ")]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_lt]:[,"2"],[_de]:[,input[_D]],[_et]:[,input[_ET]],[_mk]:[()=>void 0!==input.MaxKeys,()=>input[_MK].toString()],[_pr]:[,input[_P]],[_ct_]:[,input[_CTon]],[_fo]:[()=>void 0!==input.FetchOwner,()=>input[_FO].toString()],[_sa]:[,input[_SA]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_ListObjectVersionsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xaebo]:input[_EBO],[_xarp]:input[_RP],[_xaooa]:[()=>isSerializableHeaderValue(input[_OOA]),()=>(input[_OOA]||[]).map(quoteHeader).join(", ")]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_ver]:[,""],[_de]:[,input[_D]],[_et]:[,input[_ET]],[_km]:[,input[_KM]],[_mk]:[()=>void 0!==input.MaxKeys,()=>input[_MK].toString()],[_pr]:[,input[_P]],[_vim]:[,input[_VIM]]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_ListPartsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xarp]:input[_RP],[_xaebo]:input[_EBO],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_xi]:[,"ListParts"],[_mp]:[()=>void 0!==input.MaxParts,()=>input[_MP].toString()],[_pnm]:[,input[_PNM]],[_uI]:[,expectNonNull(input[_UI],"UploadId")]});b3.m("GET").h(headers).q(query3).b(void 0);return b3.build()};se_PutBucketAccelerateConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xaebo]:input[_EBO],[_xasca]:input[_CA]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_ac]:[,""]});let body,contents;if(void 0!==input.AccelerateConfiguration){contents=se_AccelerateConfiguration(input.AccelerateConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketAclCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xaa]:input[_ACL],[_cm]:input[_CMD],[_xasca]:input[_CA],[_xagfc]:input[_GFC],[_xagr]:input[_GR],[_xagra]:input[_GRACP],[_xagw]:input[_GW],[_xagwa]:input[_GWACP],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_acl]:[,""]});let body,contents;if(void 0!==input.AccessControlPolicy){contents=se_AccessControlPolicy(input.AccessControlPolicy,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketAnalyticsConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_a5]:[,""],[_i]:[,expectNonNull(input[_I],"Id")]});let body,contents;if(void 0!==input.AnalyticsConfiguration){contents=se_AnalyticsConfiguration(input.AnalyticsConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketCorsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_c2]:[,""]});let body,contents;if(void 0!==input.CORSConfiguration){contents=se_CORSConfiguration(input.CORSConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketEncryptionCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_en]:[,""]});let body,contents;if(void 0!==input.ServerSideEncryptionConfiguration){contents=se_ServerSideEncryptionConfiguration(input.ServerSideEncryptionConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketIntelligentTieringConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2);b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_it]:[,""],[_i]:[,expectNonNull(input[_I],"Id")]});let body,contents;if(void 0!==input.IntelligentTieringConfiguration){contents=se_IntelligentTieringConfiguration(input.IntelligentTieringConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h({"content-type":"application/xml"}).q(query3).b(body);return b3.build()};se_PutBucketInventoryConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_in]:[,""],[_i]:[,expectNonNull(input[_I],"Id")]});let body,contents;if(void 0!==input.InventoryConfiguration){contents=se_InventoryConfiguration(input.InventoryConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketLifecycleConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xasca]:input[_CA],[_xaebo]:input[_EBO],[_xatdmos]:input[_TDMOS]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_l]:[,""]});let body,contents;if(void 0!==input.LifecycleConfiguration){contents=se_BucketLifecycleConfiguration(input.LifecycleConfiguration,context2);contents=contents.n("LifecycleConfiguration");body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketLoggingCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_log]:[,""]});let body,contents;if(void 0!==input.BucketLoggingStatus){contents=se_BucketLoggingStatus(input.BucketLoggingStatus,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketMetricsConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_m]:[,""],[_i]:[,expectNonNull(input[_I],"Id")]});let body,contents;if(void 0!==input.MetricsConfiguration){contents=se_MetricsConfiguration(input.MetricsConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketNotificationConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xaebo]:input[_EBO],[_xasdv]:[()=>isSerializableHeaderValue(input[_SDV]),()=>input[_SDV].toString()]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_n]:[,""]});let body,contents;if(void 0!==input.NotificationConfiguration){contents=se_NotificationConfiguration(input.NotificationConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketOwnershipControlsCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_oC]:[,""]});let body,contents;if(void 0!==input.OwnershipControls){contents=se_OwnershipControls(input.OwnershipControls,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketPolicyCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"text/plain",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xacrsba]:[()=>isSerializableHeaderValue(input[_CRSBA]),()=>input[_CRSBA].toString()],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_p]:[,""]});let body,contents;if(void 0!==input.Policy){contents=input.Policy;body=contents}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketReplicationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xabolt]:input[_To],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_r]:[,""]});let body,contents;if(void 0!==input.ReplicationConfiguration){contents=se_ReplicationConfiguration(input.ReplicationConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketRequestPaymentCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_rP]:[,""]});let body,contents;if(void 0!==input.RequestPaymentConfiguration){contents=se_RequestPaymentConfiguration(input.RequestPaymentConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketTaggingCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_t]:[,""]});let body,contents;if(void 0!==input.Tagging){contents=se_Tagging(input.Tagging,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketVersioningCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xam]:input[_MFA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_v]:[,""]});let body,contents;if(void 0!==input.VersioningConfiguration){contents=se_VersioningConfiguration(input.VersioningConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutBucketWebsiteCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_w]:[,""]});let body,contents;if(void 0!==input.WebsiteConfiguration){contents=se_WebsiteConfiguration(input.WebsiteConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutObjectCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{...void 0!==input.Metadata&&Object.keys(input.Metadata).reduce(((acc,suffix)=>{acc[`x-amz-meta-${suffix.toLowerCase()}`]=input.Metadata[suffix];return acc}),{}),[_ct]:input[_CTo]||"application/octet-stream",[_xaa]:input[_ACL],[_cc]:input[_CC],[_cd]:input[_CD],[_ce]:input[_CE],[_cl]:input[_CL],[_cl_]:[()=>isSerializableHeaderValue(input[_CLo]),()=>input[_CLo].toString()],[_cm]:input[_CMD],[_xasca]:input[_CA],[_xacc]:input[_CCRC],[_xacc_]:input[_CCRCC],[_xacc__]:input[_CCRCNVME],[_xacs]:input[_CSHA],[_xacs_]:input[_CSHAh],[_e]:[()=>isSerializableHeaderValue(input[_E]),()=>dateToUtcString(input[_E]).toString()],[_im]:input[_IM],[_inm]:input[_INM],[_xagfc]:input[_GFC],[_xagr]:input[_GR],[_xagra]:input[_GRACP],[_xagwa]:input[_GWACP],[_xawob]:[()=>isSerializableHeaderValue(input[_WOB]),()=>input[_WOB].toString()],[_xasse]:input[_SSE],[_xasc]:input[_SC],[_xawrl]:input[_WRL],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD],[_xasseakki]:input[_SSEKMSKI],[_xassec]:input[_SSEKMSEC],[_xassebke]:[()=>isSerializableHeaderValue(input[_BKE]),()=>input[_BKE].toString()],[_xarp]:input[_RP],[_xat]:input[_T],[_xaolm]:input[_OLM],[_xaolrud]:[()=>isSerializableHeaderValue(input[_OLRUD]),()=>serializeDateTime(input[_OLRUD]).toString()],[_xaollh]:input[_OLLHS],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_xi]:[,"PutObject"]});let body,contents;if(void 0!==input.Body){contents=input.Body;body=contents}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutObjectAclCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xaa]:input[_ACL],[_cm]:input[_CMD],[_xasca]:input[_CA],[_xagfc]:input[_GFC],[_xagr]:input[_GR],[_xagra]:input[_GRACP],[_xagw]:input[_GW],[_xagwa]:input[_GWACP],[_xarp]:input[_RP],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_acl]:[,""],[_vI]:[,input[_VI]]});let body,contents;if(void 0!==input.AccessControlPolicy){contents=se_AccessControlPolicy(input.AccessControlPolicy,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutObjectLegalHoldCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xarp]:input[_RP],[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_lh]:[,""],[_vI]:[,input[_VI]]});let body,contents;if(void 0!==input.LegalHold){contents=se_ObjectLockLegalHold(input.LegalHold,context2);contents=contents.n("LegalHold");body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutObjectLockConfigurationCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xarp]:input[_RP],[_xabolt]:input[_To],[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_ol]:[,""]});let body,contents;if(void 0!==input.ObjectLockConfiguration){contents=se_ObjectLockConfiguration(input.ObjectLockConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutObjectRetentionCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xarp]:input[_RP],[_xabgr]:[()=>isSerializableHeaderValue(input[_BGR]),()=>input[_BGR].toString()],[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_ret]:[,""],[_vI]:[,input[_VI]]});let body,contents;if(void 0!==input.Retention){contents=se_ObjectLockRetention(input.Retention,context2);contents=contents.n("Retention");body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutObjectTaggingCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO],[_xarp]:input[_RP]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_t]:[,""],[_vI]:[,input[_VI]]});let body,contents;if(void 0!==input.Tagging){contents=se_Tagging(input.Tagging,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_PutPublicAccessBlockCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_cm]:input[_CMD],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);const query3=map2({[_pAB]:[,""]});let body,contents;if(void 0!==input.PublicAccessBlockConfiguration){contents=se_PublicAccessBlockConfiguration(input.PublicAccessBlockConfiguration,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_RestoreObjectCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xarp]:input[_RP],[_xasca]:input[_CA],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_res]:[,""],[_vI]:[,input[_VI]]});let body,contents;if(void 0!==input.RestoreRequest){contents=se_RestoreRequest(input.RestoreRequest,context2);body=_ve;contents.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");body+=contents.toString()}b3.m("POST").h(headers).q(query3).b(body);return b3.build()};se_SelectObjectContentCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/xml",[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_se]:[,""],[_st]:[,"2"]});let body;body=_ve;const bn2=new XmlNode(_SOCR);bn2.a("xmlns","http://s3.amazonaws.com/doc/2006-03-01/");bn2.cc(input,_Ex);bn2.cc(input,_ETx);null!=input[_IS]&&bn2.c(se_InputSerialization(input[_IS],context2).n(_IS));null!=input[_OS]&&bn2.c(se_OutputSerialization(input[_OS],context2).n(_OS));null!=input[_RPe]&&bn2.c(se_RequestProgress(input[_RPe],context2).n(_RPe));null!=input[_SR]&&bn2.c(se_ScanRange(input[_SR],context2).n(_SR));body+=bn2.toString();b3.m("POST").h(headers).q(query3).b(body);return b3.build()};se_UploadPartCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"content-type":"application/octet-stream",[_cl_]:[()=>isSerializableHeaderValue(input[_CLo]),()=>input[_CLo].toString()],[_cm]:input[_CMD],[_xasca]:input[_CA],[_xacc]:input[_CCRC],[_xacc_]:input[_CCRCC],[_xacc__]:input[_CCRCNVME],[_xacs]:input[_CSHA],[_xacs_]:input[_CSHAh],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD],[_xarp]:input[_RP],[_xaebo]:input[_EBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_xi]:[,"UploadPart"],[_pN]:[null!=expectNonNull(input.PartNumber,"PartNumber"),()=>input[_PN].toString()],[_uI]:[,expectNonNull(input[_UI],"UploadId")]});let body,contents;if(void 0!==input.Body){contents=input.Body;body=contents}b3.m("PUT").h(headers).q(query3).b(body);return b3.build()};se_UploadPartCopyCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{[_xacs__]:input[_CS],[_xacsim]:input[_CSIM],[_xacsims]:[()=>isSerializableHeaderValue(input[_CSIMS]),()=>dateToUtcString(input[_CSIMS]).toString()],[_xacsinm]:input[_CSINM],[_xacsius]:[()=>isSerializableHeaderValue(input[_CSIUS]),()=>dateToUtcString(input[_CSIUS]).toString()],[_xacsr]:input[_CSR],[_xasseca]:input[_SSECA],[_xasseck]:input[_SSECK],[_xasseckm]:input[_SSECKMD],[_xacssseca]:input[_CSSSECA],[_xacssseck]:input[_CSSSECK],[_xacssseckm]:input[_CSSSECKMD],[_xarp]:input[_RP],[_xaebo]:input[_EBO],[_xasebo]:input[_ESBO]});b3.bp("/{Key+}");b3.p("Bucket",(()=>input.Bucket),"{Bucket}",!1);b3.p("Key",(()=>input.Key),"{Key+}",!0);const query3=map2({[_xi]:[,"UploadPartCopy"],[_pN]:[null!=expectNonNull(input.PartNumber,"PartNumber"),()=>input[_PN].toString()],[_uI]:[,expectNonNull(input[_UI],"UploadId")]});b3.m("PUT").h(headers).q(query3).b(void 0);return b3.build()};se_WriteGetObjectResponseCommand=async(input,context2)=>{const b3=requestBuilder(input,context2),headers=map2({},isSerializableHeaderValue,{"x-amz-content-sha256":"UNSIGNED-PAYLOAD",...void 0!==input.Metadata&&Object.keys(input.Metadata).reduce(((acc,suffix)=>{acc[`x-amz-meta-${suffix.toLowerCase()}`]=input.Metadata[suffix];return acc}),{}),"content-type":"application/octet-stream",[_xarr]:input[_RR],[_xart]:input[_RT],[_xafs]:[()=>isSerializableHeaderValue(input[_SCt]),()=>input[_SCt].toString()],[_xafec]:input[_EC],[_xafem]:input[_EM],[_xafhar]:input[_AR],[_xafhcc]:input[_CC],[_xafhcd]:input[_CD],[_xafhce]:input[_CE],[_xafhcl]:input[_CL],[_cl_]:[()=>isSerializableHeaderValue(input[_CLo]),()=>input[_CLo].toString()],[_xafhcr]:input[_CR],[_xafhct]:input[_CTo],[_xafhxacc]:input[_CCRC],[_xafhxacc_]:input[_CCRCC],[_xafhxacc__]:input[_CCRCNVME],[_xafhxacs]:input[_CSHA],[_xafhxacs_]:input[_CSHAh],[_xafhxadm]:[()=>isSerializableHeaderValue(input[_DM]),()=>input[_DM].toString()],[_xafhe]:input[_ETa],[_xafhe_]:[()=>isSerializableHeaderValue(input[_E]),()=>dateToUtcString(input[_E]).toString()],[_xafhxae]:input[_Exp],[_xafhlm]:[()=>isSerializableHeaderValue(input[_LM]),()=>dateToUtcString(input[_LM]).toString()],[_xafhxamm]:[()=>isSerializableHeaderValue(input[_MM]),()=>input[_MM].toString()],[_xafhxaolm]:input[_OLM],[_xafhxaollh]:input[_OLLHS],[_xafhxaolrud]:[()=>isSerializableHeaderValue(input[_OLRUD]),()=>serializeDateTime(input[_OLRUD]).toString()],[_xafhxampc]:[()=>isSerializableHeaderValue(input[_PC]),()=>input[_PC].toString()],[_xafhxars]:input[_RS],[_xafhxarc]:input[_RC],[_xafhxar]:input[_Re],[_xafhxasse]:input[_SSE],[_xafhxasseca]:input[_SSECA],[_xafhxasseakki]:input[_SSEKMSKI],[_xafhxasseckm]:input[_SSECKMD],[_xafhxasc]:input[_SC],[_xafhxatc]:[()=>isSerializableHeaderValue(input[_TC]),()=>input[_TC].toString()],[_xafhxavi]:input[_VI],[_xafhxassebke]:[()=>isSerializableHeaderValue(input[_BKE]),()=>input[_BKE].toString()]});b3.bp("/WriteGetObjectResponse");let body,contents;if(void 0!==input.Body){contents=input.Body;body=contents}let{hostname:resolvedHostname}=await context2.endpoint();if(!0!==context2.disableHostPrefix){resolvedHostname="{RequestRoute}."+resolvedHostname;if(void 0===input.RequestRoute)throw new Error("Empty value provided for input host prefix: RequestRoute.");resolvedHostname=resolvedHostname.replace("{RequestRoute}",input.RequestRoute);if(!isValidHostname(resolvedHostname))throw new Error("ValidationError: prefixed hostname must be hostname compatible.")}b3.hn(resolvedHostname);b3.m("POST").h(headers).b(body);return b3.build()};de_AbortMultipartUploadCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]});await collectBody(output.body,context2);return contents};de_CompleteMultipartUploadCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_Exp]:[,output.headers[_xae]],[_SSE]:[,output.headers[_xasse]],[_VI]:[,output.headers[_xavi]],[_SSEKMSKI]:[,output.headers[_xasseakki]],[_BKE]:[()=>void 0!==output.headers[_xassebke],()=>parseBoolean(output.headers[_xassebke])],[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_B]&&(contents[_B]=expectString(data[_B]));null!=data[_CCRC]&&(contents[_CCRC]=expectString(data[_CCRC]));null!=data[_CCRCC]&&(contents[_CCRCC]=expectString(data[_CCRCC]));null!=data[_CCRCNVME]&&(contents[_CCRCNVME]=expectString(data[_CCRCNVME]));null!=data[_CSHA]&&(contents[_CSHA]=expectString(data[_CSHA]));null!=data[_CSHAh]&&(contents[_CSHAh]=expectString(data[_CSHAh]));null!=data[_CT]&&(contents[_CT]=expectString(data[_CT]));null!=data[_ETa]&&(contents[_ETa]=expectString(data[_ETa]));null!=data[_K]&&(contents[_K]=expectString(data[_K]));null!=data[_L]&&(contents[_L]=expectString(data[_L]));return contents};de_CopyObjectCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_Exp]:[,output.headers[_xae]],[_CSVI]:[,output.headers[_xacsvi]],[_VI]:[,output.headers[_xavi]],[_SSE]:[,output.headers[_xasse]],[_SSECA]:[,output.headers[_xasseca]],[_SSECKMD]:[,output.headers[_xasseckm]],[_SSEKMSKI]:[,output.headers[_xasseakki]],[_SSEKMSEC]:[,output.headers[_xassec]],[_BKE]:[()=>void 0!==output.headers[_xassebke],()=>parseBoolean(output.headers[_xassebke])],[_RC]:[,output.headers[_xarc]]}),data=expectObject(await parseXmlBody(output.body,context2));contents.CopyObjectResult=de_CopyObjectResult(data,context2);return contents};de_CreateBucketCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_L]:[,output.headers[_lo]]});await collectBody(output.body,context2);return contents};de_CreateBucketMetadataTableConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_CreateMultipartUploadCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_AD]:[()=>void 0!==output.headers[_xaad],()=>expectNonNull(parseRfc7231DateTime(output.headers[_xaad]))],[_ARI]:[,output.headers[_xaari]],[_SSE]:[,output.headers[_xasse]],[_SSECA]:[,output.headers[_xasseca]],[_SSECKMD]:[,output.headers[_xasseckm]],[_SSEKMSKI]:[,output.headers[_xasseakki]],[_SSEKMSEC]:[,output.headers[_xassec]],[_BKE]:[()=>void 0!==output.headers[_xassebke],()=>parseBoolean(output.headers[_xassebke])],[_RC]:[,output.headers[_xarc]],[_CA]:[,output.headers[_xaca]],[_CT]:[,output.headers[_xact]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_B]&&(contents[_B]=expectString(data[_B]));null!=data[_K]&&(contents[_K]=expectString(data[_K]));null!=data[_UI]&&(contents[_UI]=expectString(data[_UI]));return contents};de_CreateSessionCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_SSE]:[,output.headers[_xasse]],[_SSEKMSKI]:[,output.headers[_xasseakki]],[_SSEKMSEC]:[,output.headers[_xassec]],[_BKE]:[()=>void 0!==output.headers[_xassebke],()=>parseBoolean(output.headers[_xassebke])]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_C]&&(contents[_C]=de_SessionCredentials(data[_C],context2));return contents};de_DeleteBucketCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketAnalyticsConfigurationCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketCorsCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketEncryptionCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketIntelligentTieringConfigurationCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketInventoryConfigurationCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketLifecycleCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketMetadataTableConfigurationCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketMetricsConfigurationCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketOwnershipControlsCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketPolicyCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketReplicationCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketTaggingCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteBucketWebsiteCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_DeleteObjectCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_DM]:[()=>void 0!==output.headers[_xadm],()=>parseBoolean(output.headers[_xadm])],[_VI]:[,output.headers[_xavi]],[_RC]:[,output.headers[_xarc]]});await collectBody(output.body,context2);return contents};de_DeleteObjectsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.Deleted?contents[_De]=[]:null!=data[_De]&&(contents[_De]=de_DeletedObjects(getArrayIfSingleItem(data[_De]),context2));""===data.Error?contents[_Err]=[]:null!=data[_Er]&&(contents[_Err]=de_Errors(getArrayIfSingleItem(data[_Er]),context2));return contents};de_DeleteObjectTaggingCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_VI]:[,output.headers[_xavi]]});await collectBody(output.body,context2);return contents};de_DeletePublicAccessBlockCommand=async(output,context2)=>{if(204!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_GetBucketAccelerateConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_S]&&(contents[_S]=expectString(data[_S]));return contents};de_GetBucketAclCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.AccessControlList?contents[_Gr]=[]:null!=data[_ACLc]&&null!=data[_ACLc][_G]&&(contents[_Gr]=de_Grants(getArrayIfSingleItem(data[_ACLc][_G]),context2));null!=data[_O]&&(contents[_O]=de_Owner(data[_O],context2));return contents};de_GetBucketAnalyticsConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.AnalyticsConfiguration=de_AnalyticsConfiguration(data,context2);return contents};de_GetBucketCorsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.CORSRule?contents[_CORSRu]=[]:null!=data[_CORSR]&&(contents[_CORSRu]=de_CORSRules(getArrayIfSingleItem(data[_CORSR]),context2));return contents};de_GetBucketEncryptionCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.ServerSideEncryptionConfiguration=de_ServerSideEncryptionConfiguration(data,context2);return contents};de_GetBucketIntelligentTieringConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.IntelligentTieringConfiguration=de_IntelligentTieringConfiguration(data,context2);return contents};de_GetBucketInventoryConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.InventoryConfiguration=de_InventoryConfiguration(data,context2);return contents};de_GetBucketLifecycleConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_TDMOS]:[,output.headers[_xatdmos]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.Rule?contents[_Rul]=[]:null!=data[_Ru]&&(contents[_Rul]=de_LifecycleRules(getArrayIfSingleItem(data[_Ru]),context2));return contents};de_GetBucketLocationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_LC]&&(contents[_LC]=expectString(data[_LC]));return contents};de_GetBucketLoggingCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_LE]&&(contents[_LE]=de_LoggingEnabled(data[_LE],context2));return contents};de_GetBucketMetadataTableConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.GetBucketMetadataTableConfigurationResult=de_GetBucketMetadataTableConfigurationResult(data,context2);return contents};de_GetBucketMetricsConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.MetricsConfiguration=de_MetricsConfiguration(data,context2);return contents};de_GetBucketNotificationConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_EBC]&&(contents[_EBC]=de_EventBridgeConfiguration(data[_EBC],context2));""===data.CloudFunctionConfiguration?contents[_LFC]=[]:null!=data[_CFC]&&(contents[_LFC]=de_LambdaFunctionConfigurationList(getArrayIfSingleItem(data[_CFC]),context2));""===data.QueueConfiguration?contents[_QCu]=[]:null!=data[_QC]&&(contents[_QCu]=de_QueueConfigurationList(getArrayIfSingleItem(data[_QC]),context2));""===data.TopicConfiguration?contents[_TCop]=[]:null!=data[_TCo]&&(contents[_TCop]=de_TopicConfigurationList(getArrayIfSingleItem(data[_TCo]),context2));return contents};de_GetBucketOwnershipControlsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.OwnershipControls=de_OwnershipControls(data,context2);return contents};de_GetBucketPolicyCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=await collectBodyString2(output.body,context2);contents.Policy=expectString(data);return contents};de_GetBucketPolicyStatusCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.PolicyStatus=de_PolicyStatus(data,context2);return contents};de_GetBucketReplicationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.ReplicationConfiguration=de_ReplicationConfiguration(data,context2);return contents};de_GetBucketRequestPaymentCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_Pa]&&(contents[_Pa]=expectString(data[_Pa]));return contents};de_GetBucketTaggingCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.TagSet?contents[_TS]=[]:null!=data[_TS]&&null!=data[_TS][_Ta]&&(contents[_TS]=de_TagSet(getArrayIfSingleItem(data[_TS][_Ta]),context2));return contents};de_GetBucketVersioningCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_MDf]&&(contents[_MFAD]=expectString(data[_MDf]));null!=data[_S]&&(contents[_S]=expectString(data[_S]));return contents};de_GetBucketWebsiteCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_ED]&&(contents[_ED]=de_ErrorDocument(data[_ED],context2));null!=data[_ID]&&(contents[_ID]=de_IndexDocument(data[_ID],context2));null!=data[_RART]&&(contents[_RART]=de_RedirectAllRequestsTo(data[_RART],context2));""===data.RoutingRules?contents[_RRo]=[]:null!=data[_RRo]&&null!=data[_RRo][_RRou]&&(contents[_RRo]=de_RoutingRules(getArrayIfSingleItem(data[_RRo][_RRou]),context2));return contents};de_GetObjectCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_DM]:[()=>void 0!==output.headers[_xadm],()=>parseBoolean(output.headers[_xadm])],[_AR]:[,output.headers[_ar]],[_Exp]:[,output.headers[_xae]],[_Re]:[,output.headers[_xar]],[_LM]:[()=>void 0!==output.headers[_lm],()=>expectNonNull(parseRfc7231DateTime(output.headers[_lm]))],[_CLo]:[()=>void 0!==output.headers[_cl_],()=>strictParseLong(output.headers[_cl_])],[_ETa]:[,output.headers[_eta]],[_CCRC]:[,output.headers[_xacc]],[_CCRCC]:[,output.headers[_xacc_]],[_CCRCNVME]:[,output.headers[_xacc__]],[_CSHA]:[,output.headers[_xacs]],[_CSHAh]:[,output.headers[_xacs_]],[_CT]:[,output.headers[_xact]],[_MM]:[()=>void 0!==output.headers[_xamm],()=>strictParseInt32(output.headers[_xamm])],[_VI]:[,output.headers[_xavi]],[_CC]:[,output.headers[_cc]],[_CD]:[,output.headers[_cd]],[_CE]:[,output.headers[_ce]],[_CL]:[,output.headers[_cl]],[_CR]:[,output.headers[_cr]],[_CTo]:[,output.headers[_ct]],[_E]:[()=>void 0!==output.headers[_e],()=>expectNonNull(parseRfc7231DateTime(output.headers[_e]))],[_ES]:[,output.headers[_ex]],[_WRL]:[,output.headers[_xawrl]],[_SSE]:[,output.headers[_xasse]],[_SSECA]:[,output.headers[_xasseca]],[_SSECKMD]:[,output.headers[_xasseckm]],[_SSEKMSKI]:[,output.headers[_xasseakki]],[_BKE]:[()=>void 0!==output.headers[_xassebke],()=>parseBoolean(output.headers[_xassebke])],[_SC]:[,output.headers[_xasc]],[_RC]:[,output.headers[_xarc]],[_RS]:[,output.headers[_xars]],[_PC]:[()=>void 0!==output.headers[_xampc],()=>strictParseInt32(output.headers[_xampc])],[_TC]:[()=>void 0!==output.headers[_xatc],()=>strictParseInt32(output.headers[_xatc])],[_OLM]:[,output.headers[_xaolm]],[_OLRUD]:[()=>void 0!==output.headers[_xaolrud],()=>expectNonNull(parseRfc3339DateTimeWithOffset(output.headers[_xaolrud]))],[_OLLHS]:[,output.headers[_xaollh]],Metadata:[,Object.keys(output.headers).filter((header=>header.startsWith("x-amz-meta-"))).reduce(((acc,header)=>{acc[header.substring(11)]=output.headers[header];return acc}),{})]}),data=output.body;context2.sdkStreamMixin(data);contents.Body=data;return contents};de_GetObjectAclCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.AccessControlList?contents[_Gr]=[]:null!=data[_ACLc]&&null!=data[_ACLc][_G]&&(contents[_Gr]=de_Grants(getArrayIfSingleItem(data[_ACLc][_G]),context2));null!=data[_O]&&(contents[_O]=de_Owner(data[_O],context2));return contents};de_GetObjectAttributesCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_DM]:[()=>void 0!==output.headers[_xadm],()=>parseBoolean(output.headers[_xadm])],[_LM]:[()=>void 0!==output.headers[_lm],()=>expectNonNull(parseRfc7231DateTime(output.headers[_lm]))],[_VI]:[,output.headers[_xavi]],[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_Ch]&&(contents[_Ch]=de_Checksum(data[_Ch],context2));null!=data[_ETa]&&(contents[_ETa]=expectString(data[_ETa]));null!=data[_OP]&&(contents[_OP]=de_GetObjectAttributesParts(data[_OP],context2));null!=data[_OSb]&&(contents[_OSb]=strictParseLong(data[_OSb]));null!=data[_SC]&&(contents[_SC]=expectString(data[_SC]));return contents};de_GetObjectLegalHoldCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.LegalHold=de_ObjectLockLegalHold(data,context2);return contents};de_GetObjectLockConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.ObjectLockConfiguration=de_ObjectLockConfiguration(data,context2);return contents};de_GetObjectRetentionCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.Retention=de_ObjectLockRetention(data,context2);return contents};de_GetObjectTaggingCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_VI]:[,output.headers[_xavi]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.TagSet?contents[_TS]=[]:null!=data[_TS]&&null!=data[_TS][_Ta]&&(contents[_TS]=de_TagSet(getArrayIfSingleItem(data[_TS][_Ta]),context2));return contents};de_GetObjectTorrentCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]}),data=output.body;context2.sdkStreamMixin(data);contents.Body=data;return contents};de_GetPublicAccessBlockCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectObject(await parseXmlBody(output.body,context2));contents.PublicAccessBlockConfiguration=de_PublicAccessBlockConfiguration(data,context2);return contents};de_HeadBucketCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_BLT]:[,output.headers[_xablt]],[_BLN]:[,output.headers[_xabln]],[_BR]:[,output.headers[_xabr]],[_APA]:[()=>void 0!==output.headers[_xaapa],()=>parseBoolean(output.headers[_xaapa])]});await collectBody(output.body,context2);return contents};de_HeadObjectCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_DM]:[()=>void 0!==output.headers[_xadm],()=>parseBoolean(output.headers[_xadm])],[_AR]:[,output.headers[_ar]],[_Exp]:[,output.headers[_xae]],[_Re]:[,output.headers[_xar]],[_AS]:[,output.headers[_xaas]],[_LM]:[()=>void 0!==output.headers[_lm],()=>expectNonNull(parseRfc7231DateTime(output.headers[_lm]))],[_CLo]:[()=>void 0!==output.headers[_cl_],()=>strictParseLong(output.headers[_cl_])],[_CCRC]:[,output.headers[_xacc]],[_CCRCC]:[,output.headers[_xacc_]],[_CCRCNVME]:[,output.headers[_xacc__]],[_CSHA]:[,output.headers[_xacs]],[_CSHAh]:[,output.headers[_xacs_]],[_CT]:[,output.headers[_xact]],[_ETa]:[,output.headers[_eta]],[_MM]:[()=>void 0!==output.headers[_xamm],()=>strictParseInt32(output.headers[_xamm])],[_VI]:[,output.headers[_xavi]],[_CC]:[,output.headers[_cc]],[_CD]:[,output.headers[_cd]],[_CE]:[,output.headers[_ce]],[_CL]:[,output.headers[_cl]],[_CTo]:[,output.headers[_ct]],[_CR]:[,output.headers[_cr]],[_E]:[()=>void 0!==output.headers[_e],()=>expectNonNull(parseRfc7231DateTime(output.headers[_e]))],[_ES]:[,output.headers[_ex]],[_WRL]:[,output.headers[_xawrl]],[_SSE]:[,output.headers[_xasse]],[_SSECA]:[,output.headers[_xasseca]],[_SSECKMD]:[,output.headers[_xasseckm]],[_SSEKMSKI]:[,output.headers[_xasseakki]],[_BKE]:[()=>void 0!==output.headers[_xassebke],()=>parseBoolean(output.headers[_xassebke])],[_SC]:[,output.headers[_xasc]],[_RC]:[,output.headers[_xarc]],[_RS]:[,output.headers[_xars]],[_PC]:[()=>void 0!==output.headers[_xampc],()=>strictParseInt32(output.headers[_xampc])],[_OLM]:[,output.headers[_xaolm]],[_OLRUD]:[()=>void 0!==output.headers[_xaolrud],()=>expectNonNull(parseRfc3339DateTimeWithOffset(output.headers[_xaolrud]))],[_OLLHS]:[,output.headers[_xaollh]],Metadata:[,Object.keys(output.headers).filter((header=>header.startsWith("x-amz-meta-"))).reduce(((acc,header)=>{acc[header.substring(11)]=output.headers[header];return acc}),{})]});await collectBody(output.body,context2);return contents};de_ListBucketAnalyticsConfigurationsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.AnalyticsConfiguration?contents[_ACLn]=[]:null!=data[_AC]&&(contents[_ACLn]=de_AnalyticsConfigurationList(getArrayIfSingleItem(data[_AC]),context2));null!=data[_CTon]&&(contents[_CTon]=expectString(data[_CTon]));null!=data[_IT]&&(contents[_IT]=parseBoolean(data[_IT]));null!=data[_NCT]&&(contents[_NCT]=expectString(data[_NCT]));return contents};de_ListBucketIntelligentTieringConfigurationsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_CTon]&&(contents[_CTon]=expectString(data[_CTon]));""===data.IntelligentTieringConfiguration?contents[_ITCL]=[]:null!=data[_ITC]&&(contents[_ITCL]=de_IntelligentTieringConfigurationList(getArrayIfSingleItem(data[_ITC]),context2));null!=data[_IT]&&(contents[_IT]=parseBoolean(data[_IT]));null!=data[_NCT]&&(contents[_NCT]=expectString(data[_NCT]));return contents};de_ListBucketInventoryConfigurationsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_CTon]&&(contents[_CTon]=expectString(data[_CTon]));""===data.InventoryConfiguration?contents[_ICL]=[]:null!=data[_IC]&&(contents[_ICL]=de_InventoryConfigurationList(getArrayIfSingleItem(data[_IC]),context2));null!=data[_IT]&&(contents[_IT]=parseBoolean(data[_IT]));null!=data[_NCT]&&(contents[_NCT]=expectString(data[_NCT]));return contents};de_ListBucketMetricsConfigurationsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_CTon]&&(contents[_CTon]=expectString(data[_CTon]));null!=data[_IT]&&(contents[_IT]=parseBoolean(data[_IT]));""===data.MetricsConfiguration?contents[_MCL]=[]:null!=data[_MC]&&(contents[_MCL]=de_MetricsConfigurationList(getArrayIfSingleItem(data[_MC]),context2));null!=data[_NCT]&&(contents[_NCT]=expectString(data[_NCT]));return contents};de_ListBucketsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.Buckets?contents[_Bu]=[]:null!=data[_Bu]&&null!=data[_Bu][_B]&&(contents[_Bu]=de_Buckets(getArrayIfSingleItem(data[_Bu][_B]),context2));null!=data[_CTon]&&(contents[_CTon]=expectString(data[_CTon]));null!=data[_O]&&(contents[_O]=de_Owner(data[_O],context2));null!=data[_P]&&(contents[_P]=expectString(data[_P]));return contents};de_ListDirectoryBucketsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.Buckets?contents[_Bu]=[]:null!=data[_Bu]&&null!=data[_Bu][_B]&&(contents[_Bu]=de_Buckets(getArrayIfSingleItem(data[_Bu][_B]),context2));null!=data[_CTon]&&(contents[_CTon]=expectString(data[_CTon]));return contents};de_ListMultipartUploadsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_B]&&(contents[_B]=expectString(data[_B]));""===data.CommonPrefixes?contents[_CP]=[]:null!=data[_CP]&&(contents[_CP]=de_CommonPrefixList(getArrayIfSingleItem(data[_CP]),context2));null!=data[_D]&&(contents[_D]=expectString(data[_D]));null!=data[_ET]&&(contents[_ET]=expectString(data[_ET]));null!=data[_IT]&&(contents[_IT]=parseBoolean(data[_IT]));null!=data[_KM]&&(contents[_KM]=expectString(data[_KM]));null!=data[_MU]&&(contents[_MU]=strictParseInt32(data[_MU]));null!=data[_NKM]&&(contents[_NKM]=expectString(data[_NKM]));null!=data[_NUIM]&&(contents[_NUIM]=expectString(data[_NUIM]));null!=data[_P]&&(contents[_P]=expectString(data[_P]));null!=data[_UIM]&&(contents[_UIM]=expectString(data[_UIM]));""===data.Upload?contents[_Up]=[]:null!=data[_U]&&(contents[_Up]=de_MultipartUploadList(getArrayIfSingleItem(data[_U]),context2));return contents};de_ListObjectsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.CommonPrefixes?contents[_CP]=[]:null!=data[_CP]&&(contents[_CP]=de_CommonPrefixList(getArrayIfSingleItem(data[_CP]),context2));""===data.Contents?contents[_Co]=[]:null!=data[_Co]&&(contents[_Co]=de_ObjectList(getArrayIfSingleItem(data[_Co]),context2));null!=data[_D]&&(contents[_D]=expectString(data[_D]));null!=data[_ET]&&(contents[_ET]=expectString(data[_ET]));null!=data[_IT]&&(contents[_IT]=parseBoolean(data[_IT]));null!=data[_M]&&(contents[_M]=expectString(data[_M]));null!=data[_MK]&&(contents[_MK]=strictParseInt32(data[_MK]));null!=data[_N]&&(contents[_N]=expectString(data[_N]));null!=data[_NM]&&(contents[_NM]=expectString(data[_NM]));null!=data[_P]&&(contents[_P]=expectString(data[_P]));return contents};de_ListObjectsV2Command=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.CommonPrefixes?contents[_CP]=[]:null!=data[_CP]&&(contents[_CP]=de_CommonPrefixList(getArrayIfSingleItem(data[_CP]),context2));""===data.Contents?contents[_Co]=[]:null!=data[_Co]&&(contents[_Co]=de_ObjectList(getArrayIfSingleItem(data[_Co]),context2));null!=data[_CTon]&&(contents[_CTon]=expectString(data[_CTon]));null!=data[_D]&&(contents[_D]=expectString(data[_D]));null!=data[_ET]&&(contents[_ET]=expectString(data[_ET]));null!=data[_IT]&&(contents[_IT]=parseBoolean(data[_IT]));null!=data[_KC]&&(contents[_KC]=strictParseInt32(data[_KC]));null!=data[_MK]&&(contents[_MK]=strictParseInt32(data[_MK]));null!=data[_N]&&(contents[_N]=expectString(data[_N]));null!=data[_NCT]&&(contents[_NCT]=expectString(data[_NCT]));null!=data[_P]&&(contents[_P]=expectString(data[_P]));null!=data[_SA]&&(contents[_SA]=expectString(data[_SA]));return contents};de_ListObjectVersionsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");""===data.CommonPrefixes?contents[_CP]=[]:null!=data[_CP]&&(contents[_CP]=de_CommonPrefixList(getArrayIfSingleItem(data[_CP]),context2));""===data.DeleteMarker?contents[_DMe]=[]:null!=data[_DM]&&(contents[_DMe]=de_DeleteMarkers(getArrayIfSingleItem(data[_DM]),context2));null!=data[_D]&&(contents[_D]=expectString(data[_D]));null!=data[_ET]&&(contents[_ET]=expectString(data[_ET]));null!=data[_IT]&&(contents[_IT]=parseBoolean(data[_IT]));null!=data[_KM]&&(contents[_KM]=expectString(data[_KM]));null!=data[_MK]&&(contents[_MK]=strictParseInt32(data[_MK]));null!=data[_N]&&(contents[_N]=expectString(data[_N]));null!=data[_NKM]&&(contents[_NKM]=expectString(data[_NKM]));null!=data[_NVIM]&&(contents[_NVIM]=expectString(data[_NVIM]));null!=data[_P]&&(contents[_P]=expectString(data[_P]));null!=data[_VIM]&&(contents[_VIM]=expectString(data[_VIM]));""===data.Version?contents[_Ve]=[]:null!=data[_V]&&(contents[_Ve]=de_ObjectVersionList(getArrayIfSingleItem(data[_V]),context2));return contents};de_ListPartsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_AD]:[()=>void 0!==output.headers[_xaad],()=>expectNonNull(parseRfc7231DateTime(output.headers[_xaad]))],[_ARI]:[,output.headers[_xaari]],[_RC]:[,output.headers[_xarc]]}),data=expectNonNull(expectObject(await parseXmlBody(output.body,context2)),"body");null!=data[_B]&&(contents[_B]=expectString(data[_B]));null!=data[_CA]&&(contents[_CA]=expectString(data[_CA]));null!=data[_CT]&&(contents[_CT]=expectString(data[_CT]));null!=data[_In]&&(contents[_In]=de_Initiator(data[_In],context2));null!=data[_IT]&&(contents[_IT]=parseBoolean(data[_IT]));null!=data[_K]&&(contents[_K]=expectString(data[_K]));null!=data[_MP]&&(contents[_MP]=strictParseInt32(data[_MP]));null!=data[_NPNM]&&(contents[_NPNM]=expectString(data[_NPNM]));null!=data[_O]&&(contents[_O]=de_Owner(data[_O],context2));null!=data[_PNM]&&(contents[_PNM]=expectString(data[_PNM]));""===data.Part?contents[_Part]=[]:null!=data[_Par]&&(contents[_Part]=de_Parts(getArrayIfSingleItem(data[_Par]),context2));null!=data[_SC]&&(contents[_SC]=expectString(data[_SC]));null!=data[_UI]&&(contents[_UI]=expectString(data[_UI]));return contents};de_PutBucketAccelerateConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketAclCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketAnalyticsConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketCorsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketEncryptionCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketIntelligentTieringConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketInventoryConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketLifecycleConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_TDMOS]:[,output.headers[_xatdmos]]});await collectBody(output.body,context2);return contents};de_PutBucketLoggingCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketMetricsConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketNotificationConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketOwnershipControlsCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketPolicyCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketReplicationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketRequestPaymentCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketTaggingCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketVersioningCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutBucketWebsiteCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_PutObjectCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_Exp]:[,output.headers[_xae]],[_ETa]:[,output.headers[_eta]],[_CCRC]:[,output.headers[_xacc]],[_CCRCC]:[,output.headers[_xacc_]],[_CCRCNVME]:[,output.headers[_xacc__]],[_CSHA]:[,output.headers[_xacs]],[_CSHAh]:[,output.headers[_xacs_]],[_CT]:[,output.headers[_xact]],[_SSE]:[,output.headers[_xasse]],[_VI]:[,output.headers[_xavi]],[_SSECA]:[,output.headers[_xasseca]],[_SSECKMD]:[,output.headers[_xasseckm]],[_SSEKMSKI]:[,output.headers[_xasseakki]],[_SSEKMSEC]:[,output.headers[_xassec]],[_BKE]:[()=>void 0!==output.headers[_xassebke],()=>parseBoolean(output.headers[_xassebke])],[_Si]:[()=>void 0!==output.headers[_xaos],()=>strictParseLong(output.headers[_xaos])],[_RC]:[,output.headers[_xarc]]});await collectBody(output.body,context2);return contents};de_PutObjectAclCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]});await collectBody(output.body,context2);return contents};de_PutObjectLegalHoldCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]});await collectBody(output.body,context2);return contents};de_PutObjectLockConfigurationCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]});await collectBody(output.body,context2);return contents};de_PutObjectRetentionCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]]});await collectBody(output.body,context2);return contents};de_PutObjectTaggingCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_VI]:[,output.headers[_xavi]]});await collectBody(output.body,context2);return contents};de_PutPublicAccessBlockCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_RestoreObjectCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_RC]:[,output.headers[_xarc]],[_ROP]:[,output.headers[_xarop]]});await collectBody(output.body,context2);return contents};de_SelectObjectContentCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)}),data=output.body;contents.Payload=de_SelectObjectContentEventStream(data,context2);return contents};de_UploadPartCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_SSE]:[,output.headers[_xasse]],[_ETa]:[,output.headers[_eta]],[_CCRC]:[,output.headers[_xacc]],[_CCRCC]:[,output.headers[_xacc_]],[_CCRCNVME]:[,output.headers[_xacc__]],[_CSHA]:[,output.headers[_xacs]],[_CSHAh]:[,output.headers[_xacs_]],[_SSECA]:[,output.headers[_xasseca]],[_SSECKMD]:[,output.headers[_xasseckm]],[_SSEKMSKI]:[,output.headers[_xasseakki]],[_BKE]:[()=>void 0!==output.headers[_xassebke],()=>parseBoolean(output.headers[_xassebke])],[_RC]:[,output.headers[_xarc]]});await collectBody(output.body,context2);return contents};de_UploadPartCopyCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output),[_CSVI]:[,output.headers[_xacsvi]],[_SSE]:[,output.headers[_xasse]],[_SSECA]:[,output.headers[_xasseca]],[_SSECKMD]:[,output.headers[_xasseckm]],[_SSEKMSKI]:[,output.headers[_xasseakki]],[_BKE]:[()=>void 0!==output.headers[_xassebke],()=>parseBoolean(output.headers[_xassebke])],[_RC]:[,output.headers[_xarc]]}),data=expectObject(await parseXmlBody(output.body,context2));contents.CopyPartResult=de_CopyPartResult(data,context2);return contents};de_WriteGetObjectResponseCommand=async(output,context2)=>{if(200!==output.statusCode&&output.statusCode>=300)return de_CommandError(output,context2);const contents=map2({$metadata:deserializeMetadata2(output)});await collectBody(output.body,context2);return contents};de_CommandError=async(output,context2)=>{const parsedOutput={...output,body:await parseXmlErrorBody(output.body,context2)},errorCode=loadRestXmlErrorCode(output,parsedOutput.body);switch(errorCode){case"NoSuchUpload":case"com.amazonaws.s3#NoSuchUpload":throw await de_NoSuchUploadRes(parsedOutput,context2);case"ObjectNotInActiveTierError":case"com.amazonaws.s3#ObjectNotInActiveTierError":throw await de_ObjectNotInActiveTierErrorRes(parsedOutput,context2);case"BucketAlreadyExists":case"com.amazonaws.s3#BucketAlreadyExists":throw await de_BucketAlreadyExistsRes(parsedOutput,context2);case"BucketAlreadyOwnedByYou":case"com.amazonaws.s3#BucketAlreadyOwnedByYou":throw await de_BucketAlreadyOwnedByYouRes(parsedOutput,context2);case"NoSuchBucket":case"com.amazonaws.s3#NoSuchBucket":throw await de_NoSuchBucketRes(parsedOutput,context2);case"InvalidObjectState":case"com.amazonaws.s3#InvalidObjectState":throw await de_InvalidObjectStateRes(parsedOutput,context2);case"NoSuchKey":case"com.amazonaws.s3#NoSuchKey":throw await de_NoSuchKeyRes(parsedOutput,context2);case"NotFound":case"com.amazonaws.s3#NotFound":throw await de_NotFoundRes(parsedOutput,context2);case"EncryptionTypeMismatch":case"com.amazonaws.s3#EncryptionTypeMismatch":throw await de_EncryptionTypeMismatchRes(parsedOutput,context2);case"InvalidRequest":case"com.amazonaws.s3#InvalidRequest":throw await de_InvalidRequestRes(parsedOutput,context2);case"InvalidWriteOffset":case"com.amazonaws.s3#InvalidWriteOffset":throw await de_InvalidWriteOffsetRes(parsedOutput,context2);case"TooManyParts":case"com.amazonaws.s3#TooManyParts":throw await de_TooManyPartsRes(parsedOutput,context2);case"ObjectAlreadyInActiveTierError":case"com.amazonaws.s3#ObjectAlreadyInActiveTierError":throw await de_ObjectAlreadyInActiveTierErrorRes(parsedOutput,context2);default:const parsedBody=parsedOutput.body;return throwDefaultError2({output,parsedBody,errorCode})}};throwDefaultError2=withBaseException(S3ServiceException);de_BucketAlreadyExistsRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new BucketAlreadyExists({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_BucketAlreadyOwnedByYouRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new BucketAlreadyOwnedByYou({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_EncryptionTypeMismatchRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new EncryptionTypeMismatch({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_InvalidObjectStateRes=async(parsedOutput,context2)=>{const contents=map2({}),data=parsedOutput.body;null!=data[_AT]&&(contents[_AT]=expectString(data[_AT]));null!=data[_SC]&&(contents[_SC]=expectString(data[_SC]));const exception=new InvalidObjectState({$metadata:deserializeMetadata2(parsedOutput),...contents});return decorateServiceException(exception,parsedOutput.body)};de_InvalidRequestRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new InvalidRequest({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_InvalidWriteOffsetRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new InvalidWriteOffset({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_NoSuchBucketRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new NoSuchBucket({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_NoSuchKeyRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new NoSuchKey({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_NoSuchUploadRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new NoSuchUpload({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_NotFoundRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new NotFound({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_ObjectAlreadyInActiveTierErrorRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new ObjectAlreadyInActiveTierError({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_ObjectNotInActiveTierErrorRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new ObjectNotInActiveTierError({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_TooManyPartsRes=async(parsedOutput,context2)=>{const contents=map2({}),exception=(parsedOutput.body,new TooManyParts({$metadata:deserializeMetadata2(parsedOutput),...contents}));return decorateServiceException(exception,parsedOutput.body)};de_SelectObjectContentEventStream=(output,context2)=>context2.eventStreamMarshaller.deserialize(output,(async event2=>null!=event2.Records?{Records:await de_RecordsEvent_event(event2.Records,context2)}:null!=event2.Stats?{Stats:await de_StatsEvent_event(event2.Stats,context2)}:null!=event2.Progress?{Progress:await de_ProgressEvent_event(event2.Progress,context2)}:null!=event2.Cont?{Cont:await de_ContinuationEvent_event(event2.Cont,context2)}:null!=event2.End?{End:await de_EndEvent_event(event2.End,context2)}:{$unknown:output}));de_ContinuationEvent_event=async(output,context2)=>{const contents={},data=await parseXmlBody(output.body,context2);Object.assign(contents,de_ContinuationEvent(data,context2));return contents};de_EndEvent_event=async(output,context2)=>{const contents={},data=await parseXmlBody(output.body,context2);Object.assign(contents,de_EndEvent(data,context2));return contents};de_ProgressEvent_event=async(output,context2)=>{const contents={},data=await parseXmlBody(output.body,context2);contents.Details=de_Progress(data,context2);return contents};de_RecordsEvent_event=async(output,context2)=>{const contents={};contents.Payload=output.body;return contents};de_StatsEvent_event=async(output,context2)=>{const contents={},data=await parseXmlBody(output.body,context2);contents.Details=de_Stats(data,context2);return contents};se_AbortIncompleteMultipartUpload=(input,context2)=>{const bn2=new XmlNode(_AIMU);null!=input[_DAI]&&bn2.c(XmlNode.of(_DAI,String(input[_DAI])).n(_DAI));return bn2};se_AccelerateConfiguration=(input,context2)=>{const bn2=new XmlNode(_ACc);null!=input[_S]&&bn2.c(XmlNode.of(_BAS,input[_S]).n(_S));return bn2};se_AccessControlPolicy=(input,context2)=>{const bn2=new XmlNode(_ACP);bn2.lc(input,"Grants","AccessControlList",(()=>se_Grants(input[_Gr],context2)));null!=input[_O]&&bn2.c(se_Owner(input[_O],context2).n(_O));return bn2};se_AccessControlTranslation=(input,context2)=>{const bn2=new XmlNode(_ACT);null!=input[_O]&&bn2.c(XmlNode.of(_OOw,input[_O]).n(_O));return bn2};se_AllowedHeaders=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>XmlNode.of(_AH,entry).n(_me)));se_AllowedMethods=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>XmlNode.of(_AM,entry).n(_me)));se_AllowedOrigins=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>XmlNode.of(_AO,entry).n(_me)));se_AnalyticsAndOperator=(input,context2)=>{const bn2=new XmlNode(_AAO);bn2.cc(input,_P);bn2.l(input,"Tags","Tag",(()=>se_TagSet(input[_Tag],context2)));return bn2};se_AnalyticsConfiguration=(input,context2)=>{const bn2=new XmlNode(_AC);null!=input[_I]&&bn2.c(XmlNode.of(_AI,input[_I]).n(_I));null!=input[_F]&&bn2.c(se_AnalyticsFilter(input[_F],context2).n(_F));null!=input[_SCA]&&bn2.c(se_StorageClassAnalysis(input[_SCA],context2).n(_SCA));return bn2};se_AnalyticsExportDestination=(input,context2)=>{const bn2=new XmlNode(_AED);null!=input[_SBD]&&bn2.c(se_AnalyticsS3BucketDestination(input[_SBD],context2).n(_SBD));return bn2};se_AnalyticsFilter=(input,context2)=>{const bn2=new XmlNode(_AF);AnalyticsFilter.visit(input,{Prefix:value=>{null!=input[_P]&&bn2.c(XmlNode.of(_P,value).n(_P))},Tag:value=>{null!=input[_Ta]&&bn2.c(se_Tag(value,context2).n(_Ta))},And:value=>{null!=input[_A]&&bn2.c(se_AnalyticsAndOperator(value,context2).n(_A))},_:(name,value)=>{if(!(value instanceof XmlNode||value instanceof XmlText))throw new Error("Unable to serialize unknown union members in XML.");bn2.c(new XmlNode(name).c(value))}});return bn2};se_AnalyticsS3BucketDestination=(input,context2)=>{const bn2=new XmlNode(_ASBD);null!=input[_Fo]&&bn2.c(XmlNode.of(_ASEFF,input[_Fo]).n(_Fo));null!=input[_BAI]&&bn2.c(XmlNode.of(_AIc,input[_BAI]).n(_BAI));null!=input[_B]&&bn2.c(XmlNode.of(_BN,input[_B]).n(_B));bn2.cc(input,_P);return bn2};se_BucketInfo=(input,context2)=>{const bn2=new XmlNode(_BI);bn2.cc(input,_DR);null!=input[_Ty]&&bn2.c(XmlNode.of(_BT,input[_Ty]).n(_Ty));return bn2};se_BucketLifecycleConfiguration=(input,context2)=>{const bn2=new XmlNode(_BLC);bn2.l(input,"Rules","Rule",(()=>se_LifecycleRules(input[_Rul],context2)));return bn2};se_BucketLoggingStatus=(input,context2)=>{const bn2=new XmlNode(_BLS);null!=input[_LE]&&bn2.c(se_LoggingEnabled(input[_LE],context2).n(_LE));return bn2};se_CompletedMultipartUpload=(input,context2)=>{const bn2=new XmlNode(_CMU);bn2.l(input,"Parts","Part",(()=>se_CompletedPartList(input[_Part],context2)));return bn2};se_CompletedPart=(input,context2)=>{const bn2=new XmlNode(_CPo);bn2.cc(input,_ETa);bn2.cc(input,_CCRC);bn2.cc(input,_CCRCC);bn2.cc(input,_CCRCNVME);bn2.cc(input,_CSHA);bn2.cc(input,_CSHAh);null!=input[_PN]&&bn2.c(XmlNode.of(_PN,String(input[_PN])).n(_PN));return bn2};se_CompletedPartList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_CompletedPart(entry).n(_me)));se_Condition=(input,context2)=>{const bn2=new XmlNode(_Con);bn2.cc(input,_HECRE);bn2.cc(input,_KPE);return bn2};se_CORSConfiguration=(input,context2)=>{const bn2=new XmlNode(_CORSC);bn2.l(input,"CORSRules","CORSRule",(()=>se_CORSRules(input[_CORSRu],context2)));return bn2};se_CORSRule=(input,context2)=>{const bn2=new XmlNode(_CORSR);bn2.cc(input,_ID_);bn2.l(input,"AllowedHeaders","AllowedHeader",(()=>se_AllowedHeaders(input[_AHl])));bn2.l(input,"AllowedMethods","AllowedMethod",(()=>se_AllowedMethods(input[_AMl])));bn2.l(input,"AllowedOrigins","AllowedOrigin",(()=>se_AllowedOrigins(input[_AOl])));bn2.l(input,"ExposeHeaders","ExposeHeader",(()=>se_ExposeHeaders(input[_EH],context2)));null!=input[_MAS]&&bn2.c(XmlNode.of(_MAS,String(input[_MAS])).n(_MAS));return bn2};se_CORSRules=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_CORSRule(entry,context2).n(_me)));se_CreateBucketConfiguration=(input,context2)=>{const bn2=new XmlNode(_CBC);null!=input[_LC]&&bn2.c(XmlNode.of(_BLCu,input[_LC]).n(_LC));null!=input[_L]&&bn2.c(se_LocationInfo(input[_L],context2).n(_L));null!=input[_B]&&bn2.c(se_BucketInfo(input[_B]).n(_B));return bn2};se_CSVInput=(input,context2)=>{const bn2=new XmlNode(_CSVIn);bn2.cc(input,_FHI);bn2.cc(input,_Com);bn2.cc(input,_QEC);bn2.cc(input,_RD);bn2.cc(input,_FD);bn2.cc(input,_QCuo);null!=input[_AQRD]&&bn2.c(XmlNode.of(_AQRD,String(input[_AQRD])).n(_AQRD));return bn2};se_CSVOutput=(input,context2)=>{const bn2=new XmlNode(_CSVO);bn2.cc(input,_QF);bn2.cc(input,_QEC);bn2.cc(input,_RD);bn2.cc(input,_FD);bn2.cc(input,_QCuo);return bn2};se_DefaultRetention=(input,context2)=>{const bn2=new XmlNode(_DRe);null!=input[_Mo]&&bn2.c(XmlNode.of(_OLRM,input[_Mo]).n(_Mo));null!=input[_Da]&&bn2.c(XmlNode.of(_Da,String(input[_Da])).n(_Da));null!=input[_Y]&&bn2.c(XmlNode.of(_Y,String(input[_Y])).n(_Y));return bn2};se_Delete=(input,context2)=>{const bn2=new XmlNode(_Del);bn2.l(input,"Objects","Object",(()=>se_ObjectIdentifierList(input[_Ob],context2)));null!=input[_Q]&&bn2.c(XmlNode.of(_Q,String(input[_Q])).n(_Q));return bn2};se_DeleteMarkerReplication=(input,context2)=>{const bn2=new XmlNode(_DMR);null!=input[_S]&&bn2.c(XmlNode.of(_DMRS,input[_S]).n(_S));return bn2};se_Destination=(input,context2)=>{const bn2=new XmlNode(_Des);null!=input[_B]&&bn2.c(XmlNode.of(_BN,input[_B]).n(_B));null!=input[_Ac]&&bn2.c(XmlNode.of(_AIc,input[_Ac]).n(_Ac));bn2.cc(input,_SC);null!=input[_ACT]&&bn2.c(se_AccessControlTranslation(input[_ACT]).n(_ACT));null!=input[_ECn]&&bn2.c(se_EncryptionConfiguration(input[_ECn],context2).n(_ECn));null!=input[_RTe]&&bn2.c(se_ReplicationTime(input[_RTe],context2).n(_RTe));null!=input[_Me]&&bn2.c(se_Metrics(input[_Me],context2).n(_Me));return bn2};se_Encryption=(input,context2)=>{const bn2=new XmlNode(_En);null!=input[_ETn]&&bn2.c(XmlNode.of(_SSE,input[_ETn]).n(_ETn));null!=input[_KMSKI]&&bn2.c(XmlNode.of(_SSEKMSKI,input[_KMSKI]).n(_KMSKI));bn2.cc(input,_KMSC);return bn2};se_EncryptionConfiguration=(input,context2)=>{const bn2=new XmlNode(_ECn);bn2.cc(input,_RKKID);return bn2};se_ErrorDocument=(input,context2)=>{const bn2=new XmlNode(_ED);null!=input[_K]&&bn2.c(XmlNode.of(_OK,input[_K]).n(_K));return bn2};se_EventBridgeConfiguration=(input,context2)=>new XmlNode(_EBC);se_EventList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>XmlNode.of(_Ev,entry).n(_me)));se_ExistingObjectReplication=(input,context2)=>{const bn2=new XmlNode(_EOR);null!=input[_S]&&bn2.c(XmlNode.of(_EORS,input[_S]).n(_S));return bn2};se_ExposeHeaders=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>XmlNode.of(_EHx,entry).n(_me)));se_FilterRule=(input,context2)=>{const bn2=new XmlNode(_FR);null!=input[_N]&&bn2.c(XmlNode.of(_FRN,input[_N]).n(_N));null!=input[_Va]&&bn2.c(XmlNode.of(_FRV,input[_Va]).n(_Va));return bn2};se_FilterRuleList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_FilterRule(entry).n(_me)));se_GlacierJobParameters=(input,context2)=>{const bn2=new XmlNode(_GJP);bn2.cc(input,_Ti);return bn2};se_Grant=(input,context2)=>{const bn2=new XmlNode(_G);if(null!=input[_Gra]){const n3=se_Grantee(input[_Gra],context2).n(_Gra);n3.a("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");bn2.c(n3)}bn2.cc(input,_Pe);return bn2};se_Grantee=(input,context2)=>{const bn2=new XmlNode(_Gra);bn2.cc(input,_DN);bn2.cc(input,_EA);bn2.cc(input,_ID_);bn2.cc(input,_URI);bn2.a("xsi:type",input[_Ty]);return bn2};se_Grants=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_Grant(entry,context2).n(_G)));se_IndexDocument=(input,context2)=>{const bn2=new XmlNode(_ID);bn2.cc(input,_Su);return bn2};se_InputSerialization=(input,context2)=>{const bn2=new XmlNode(_IS);null!=input[_CSV]&&bn2.c(se_CSVInput(input[_CSV]).n(_CSV));bn2.cc(input,_CTom);null!=input[_JSON]&&bn2.c(se_JSONInput(input[_JSON],context2).n(_JSON));null!=input[_Parq]&&bn2.c(se_ParquetInput(input[_Parq],context2).n(_Parq));return bn2};se_IntelligentTieringAndOperator=(input,context2)=>{const bn2=new XmlNode(_ITAO);bn2.cc(input,_P);bn2.l(input,"Tags","Tag",(()=>se_TagSet(input[_Tag],context2)));return bn2};se_IntelligentTieringConfiguration=(input,context2)=>{const bn2=new XmlNode(_ITC);null!=input[_I]&&bn2.c(XmlNode.of(_ITI,input[_I]).n(_I));null!=input[_F]&&bn2.c(se_IntelligentTieringFilter(input[_F],context2).n(_F));null!=input[_S]&&bn2.c(XmlNode.of(_ITS,input[_S]).n(_S));bn2.l(input,"Tierings","Tiering",(()=>se_TieringList(input[_Tie],context2)));return bn2};se_IntelligentTieringFilter=(input,context2)=>{const bn2=new XmlNode(_ITF);bn2.cc(input,_P);null!=input[_Ta]&&bn2.c(se_Tag(input[_Ta],context2).n(_Ta));null!=input[_A]&&bn2.c(se_IntelligentTieringAndOperator(input[_A],context2).n(_A));return bn2};se_InventoryConfiguration=(input,context2)=>{const bn2=new XmlNode(_IC);null!=input[_Des]&&bn2.c(se_InventoryDestination(input[_Des],context2).n(_Des));null!=input[_IE]&&bn2.c(XmlNode.of(_IE,String(input[_IE])).n(_IE));null!=input[_F]&&bn2.c(se_InventoryFilter(input[_F],context2).n(_F));null!=input[_I]&&bn2.c(XmlNode.of(_II,input[_I]).n(_I));null!=input[_IOV]&&bn2.c(XmlNode.of(_IIOV,input[_IOV]).n(_IOV));bn2.lc(input,"OptionalFields","OptionalFields",(()=>se_InventoryOptionalFields(input[_OF],context2)));null!=input[_Sc]&&bn2.c(se_InventorySchedule(input[_Sc],context2).n(_Sc));return bn2};se_InventoryDestination=(input,context2)=>{const bn2=new XmlNode(_IDn);null!=input[_SBD]&&bn2.c(se_InventoryS3BucketDestination(input[_SBD],context2).n(_SBD));return bn2};se_InventoryEncryption=(input,context2)=>{const bn2=new XmlNode(_IEn);null!=input[_SSES]&&bn2.c(se_SSES3(input[_SSES],context2).n(_SS));null!=input[_SSEKMS]&&bn2.c(se_SSEKMS(input[_SSEKMS],context2).n(_SK));return bn2};se_InventoryFilter=(input,context2)=>{const bn2=new XmlNode(_IF);bn2.cc(input,_P);return bn2};se_InventoryOptionalFields=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>XmlNode.of(_IOF,entry).n(_Fi)));se_InventoryS3BucketDestination=(input,context2)=>{const bn2=new XmlNode(_ISBD);bn2.cc(input,_AIc);null!=input[_B]&&bn2.c(XmlNode.of(_BN,input[_B]).n(_B));null!=input[_Fo]&&bn2.c(XmlNode.of(_IFn,input[_Fo]).n(_Fo));bn2.cc(input,_P);null!=input[_En]&&bn2.c(se_InventoryEncryption(input[_En],context2).n(_En));return bn2};se_InventorySchedule=(input,context2)=>{const bn2=new XmlNode(_ISn);null!=input[_Fr]&&bn2.c(XmlNode.of(_IFnv,input[_Fr]).n(_Fr));return bn2};se_JSONInput=(input,context2)=>{const bn2=new XmlNode(_JSONI);null!=input[_Ty]&&bn2.c(XmlNode.of(_JSONT,input[_Ty]).n(_Ty));return bn2};se_JSONOutput=(input,context2)=>{const bn2=new XmlNode(_JSONO);bn2.cc(input,_RD);return bn2};se_LambdaFunctionConfiguration=(input,context2)=>{const bn2=new XmlNode(_LFCa);null!=input[_I]&&bn2.c(XmlNode.of(_NI,input[_I]).n(_I));null!=input[_LFA]&&bn2.c(XmlNode.of(_LFA,input[_LFA]).n(_CF));bn2.l(input,"Events","Event",(()=>se_EventList(input[_Eve])));null!=input[_F]&&bn2.c(se_NotificationConfigurationFilter(input[_F],context2).n(_F));return bn2};se_LambdaFunctionConfigurationList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_LambdaFunctionConfiguration(entry,context2).n(_me)));se_LifecycleExpiration=(input,context2)=>{const bn2=new XmlNode(_LEi);null!=input[_Dat]&&bn2.c(XmlNode.of(_Dat,serializeDateTime(input[_Dat]).toString()).n(_Dat));null!=input[_Da]&&bn2.c(XmlNode.of(_Da,String(input[_Da])).n(_Da));null!=input[_EODM]&&bn2.c(XmlNode.of(_EODM,String(input[_EODM])).n(_EODM));return bn2};se_LifecycleRule=(input,context2)=>{const bn2=new XmlNode(_LR);null!=input[_Exp]&&bn2.c(se_LifecycleExpiration(input[_Exp]).n(_Exp));bn2.cc(input,_ID_);bn2.cc(input,_P);null!=input[_F]&&bn2.c(se_LifecycleRuleFilter(input[_F],context2).n(_F));null!=input[_S]&&bn2.c(XmlNode.of(_ESx,input[_S]).n(_S));bn2.l(input,"Transitions","Transition",(()=>se_TransitionList(input[_Tr],context2)));bn2.l(input,"NoncurrentVersionTransitions","NoncurrentVersionTransition",(()=>se_NoncurrentVersionTransitionList(input[_NVT],context2)));null!=input[_NVE]&&bn2.c(se_NoncurrentVersionExpiration(input[_NVE],context2).n(_NVE));null!=input[_AIMU]&&bn2.c(se_AbortIncompleteMultipartUpload(input[_AIMU]).n(_AIMU));return bn2};se_LifecycleRuleAndOperator=(input,context2)=>{const bn2=new XmlNode(_LRAO);bn2.cc(input,_P);bn2.l(input,"Tags","Tag",(()=>se_TagSet(input[_Tag],context2)));null!=input[_OSGT]&&bn2.c(XmlNode.of(_OSGTB,String(input[_OSGT])).n(_OSGT));null!=input[_OSLT]&&bn2.c(XmlNode.of(_OSLTB,String(input[_OSLT])).n(_OSLT));return bn2};se_LifecycleRuleFilter=(input,context2)=>{const bn2=new XmlNode(_LRF);bn2.cc(input,_P);null!=input[_Ta]&&bn2.c(se_Tag(input[_Ta],context2).n(_Ta));null!=input[_OSGT]&&bn2.c(XmlNode.of(_OSGTB,String(input[_OSGT])).n(_OSGT));null!=input[_OSLT]&&bn2.c(XmlNode.of(_OSLTB,String(input[_OSLT])).n(_OSLT));null!=input[_A]&&bn2.c(se_LifecycleRuleAndOperator(input[_A],context2).n(_A));return bn2};se_LifecycleRules=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_LifecycleRule(entry,context2).n(_me)));se_LocationInfo=(input,context2)=>{const bn2=new XmlNode(_LI);null!=input[_Ty]&&bn2.c(XmlNode.of(_LT,input[_Ty]).n(_Ty));null!=input[_N]&&bn2.c(XmlNode.of(_LNAS,input[_N]).n(_N));return bn2};se_LoggingEnabled=(input,context2)=>{const bn2=new XmlNode(_LE);bn2.cc(input,_TB);bn2.lc(input,"TargetGrants","TargetGrants",(()=>se_TargetGrants(input[_TG],context2)));bn2.cc(input,_TP);null!=input[_TOKF]&&bn2.c(se_TargetObjectKeyFormat(input[_TOKF],context2).n(_TOKF));return bn2};se_MetadataEntry=(input,context2)=>{const bn2=new XmlNode(_ME);null!=input[_N]&&bn2.c(XmlNode.of(_MKe,input[_N]).n(_N));null!=input[_Va]&&bn2.c(XmlNode.of(_MV,input[_Va]).n(_Va));return bn2};se_MetadataTableConfiguration=(input,context2)=>{const bn2=new XmlNode(_MTC);null!=input[_STD]&&bn2.c(se_S3TablesDestination(input[_STD],context2).n(_STD));return bn2};se_Metrics=(input,context2)=>{const bn2=new XmlNode(_Me);null!=input[_S]&&bn2.c(XmlNode.of(_MS,input[_S]).n(_S));null!=input[_ETv]&&bn2.c(se_ReplicationTimeValue(input[_ETv],context2).n(_ETv));return bn2};se_MetricsAndOperator=(input,context2)=>{const bn2=new XmlNode(_MAO);bn2.cc(input,_P);bn2.l(input,"Tags","Tag",(()=>se_TagSet(input[_Tag],context2)));bn2.cc(input,_APAc);return bn2};se_MetricsConfiguration=(input,context2)=>{const bn2=new XmlNode(_MC);null!=input[_I]&&bn2.c(XmlNode.of(_MI,input[_I]).n(_I));null!=input[_F]&&bn2.c(se_MetricsFilter(input[_F],context2).n(_F));return bn2};se_MetricsFilter=(input,context2)=>{const bn2=new XmlNode(_MF);MetricsFilter.visit(input,{Prefix:value=>{null!=input[_P]&&bn2.c(XmlNode.of(_P,value).n(_P))},Tag:value=>{null!=input[_Ta]&&bn2.c(se_Tag(value,context2).n(_Ta))},AccessPointArn:value=>{null!=input[_APAc]&&bn2.c(XmlNode.of(_APAc,value).n(_APAc))},And:value=>{null!=input[_A]&&bn2.c(se_MetricsAndOperator(value,context2).n(_A))},_:(name,value)=>{if(!(value instanceof XmlNode||value instanceof XmlText))throw new Error("Unable to serialize unknown union members in XML.");bn2.c(new XmlNode(name).c(value))}});return bn2};se_NoncurrentVersionExpiration=(input,context2)=>{const bn2=new XmlNode(_NVE);null!=input[_ND]&&bn2.c(XmlNode.of(_Da,String(input[_ND])).n(_ND));null!=input[_NNV]&&bn2.c(XmlNode.of(_VC,String(input[_NNV])).n(_NNV));return bn2};se_NoncurrentVersionTransition=(input,context2)=>{const bn2=new XmlNode(_NVTo);null!=input[_ND]&&bn2.c(XmlNode.of(_Da,String(input[_ND])).n(_ND));null!=input[_SC]&&bn2.c(XmlNode.of(_TSC,input[_SC]).n(_SC));null!=input[_NNV]&&bn2.c(XmlNode.of(_VC,String(input[_NNV])).n(_NNV));return bn2};se_NoncurrentVersionTransitionList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_NoncurrentVersionTransition(entry).n(_me)));se_NotificationConfiguration=(input,context2)=>{const bn2=new XmlNode(_NC);bn2.l(input,"TopicConfigurations","TopicConfiguration",(()=>se_TopicConfigurationList(input[_TCop],context2)));bn2.l(input,"QueueConfigurations","QueueConfiguration",(()=>se_QueueConfigurationList(input[_QCu],context2)));bn2.l(input,"LambdaFunctionConfigurations","CloudFunctionConfiguration",(()=>se_LambdaFunctionConfigurationList(input[_LFC],context2)));null!=input[_EBC]&&bn2.c(se_EventBridgeConfiguration(input[_EBC]).n(_EBC));return bn2};se_NotificationConfigurationFilter=(input,context2)=>{const bn2=new XmlNode(_NCF);null!=input[_K]&&bn2.c(se_S3KeyFilter(input[_K],context2).n(_SKe));return bn2};se_ObjectIdentifier=(input,context2)=>{const bn2=new XmlNode(_OI);null!=input[_K]&&bn2.c(XmlNode.of(_OK,input[_K]).n(_K));null!=input[_VI]&&bn2.c(XmlNode.of(_OVI,input[_VI]).n(_VI));bn2.cc(input,_ETa);null!=input[_LMT]&&bn2.c(XmlNode.of(_LMT,dateToUtcString(input[_LMT]).toString()).n(_LMT));null!=input[_Si]&&bn2.c(XmlNode.of(_Si,String(input[_Si])).n(_Si));return bn2};se_ObjectIdentifierList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_ObjectIdentifier(entry).n(_me)));se_ObjectLockConfiguration=(input,context2)=>{const bn2=new XmlNode(_OLC);bn2.cc(input,_OLE);null!=input[_Ru]&&bn2.c(se_ObjectLockRule(input[_Ru],context2).n(_Ru));return bn2};se_ObjectLockLegalHold=(input,context2)=>{const bn2=new XmlNode(_OLLH);null!=input[_S]&&bn2.c(XmlNode.of(_OLLHS,input[_S]).n(_S));return bn2};se_ObjectLockRetention=(input,context2)=>{const bn2=new XmlNode(_OLR);null!=input[_Mo]&&bn2.c(XmlNode.of(_OLRM,input[_Mo]).n(_Mo));null!=input[_RUD]&&bn2.c(XmlNode.of(_Dat,serializeDateTime(input[_RUD]).toString()).n(_RUD));return bn2};se_ObjectLockRule=(input,context2)=>{const bn2=new XmlNode(_OLRb);null!=input[_DRe]&&bn2.c(se_DefaultRetention(input[_DRe]).n(_DRe));return bn2};se_OutputLocation=(input,context2)=>{const bn2=new XmlNode(_OL);null!=input[_S_]&&bn2.c(se_S3Location(input[_S_],context2).n(_S_));return bn2};se_OutputSerialization=(input,context2)=>{const bn2=new XmlNode(_OS);null!=input[_CSV]&&bn2.c(se_CSVOutput(input[_CSV]).n(_CSV));null!=input[_JSON]&&bn2.c(se_JSONOutput(input[_JSON]).n(_JSON));return bn2};se_Owner=(input,context2)=>{const bn2=new XmlNode(_O);bn2.cc(input,_DN);bn2.cc(input,_ID_);return bn2};se_OwnershipControls=(input,context2)=>{const bn2=new XmlNode(_OC);bn2.l(input,"Rules","Rule",(()=>se_OwnershipControlsRules(input[_Rul],context2)));return bn2};se_OwnershipControlsRule=(input,context2)=>{const bn2=new XmlNode(_OCR);bn2.cc(input,_OO);return bn2};se_OwnershipControlsRules=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_OwnershipControlsRule(entry).n(_me)));se_ParquetInput=(input,context2)=>new XmlNode(_PI);se_PartitionedPrefix=(input,context2)=>{const bn2=new XmlNode(_PP);bn2.cc(input,_PDS);return bn2};se_PublicAccessBlockConfiguration=(input,context2)=>{const bn2=new XmlNode(_PABC);null!=input[_BPA]&&bn2.c(XmlNode.of(_Se,String(input[_BPA])).n(_BPA));null!=input[_IPA]&&bn2.c(XmlNode.of(_Se,String(input[_IPA])).n(_IPA));null!=input[_BPP]&&bn2.c(XmlNode.of(_Se,String(input[_BPP])).n(_BPP));null!=input[_RPB]&&bn2.c(XmlNode.of(_Se,String(input[_RPB])).n(_RPB));return bn2};se_QueueConfiguration=(input,context2)=>{const bn2=new XmlNode(_QC);null!=input[_I]&&bn2.c(XmlNode.of(_NI,input[_I]).n(_I));null!=input[_QA]&&bn2.c(XmlNode.of(_QA,input[_QA]).n(_Qu));bn2.l(input,"Events","Event",(()=>se_EventList(input[_Eve])));null!=input[_F]&&bn2.c(se_NotificationConfigurationFilter(input[_F],context2).n(_F));return bn2};se_QueueConfigurationList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_QueueConfiguration(entry,context2).n(_me)));se_Redirect=(input,context2)=>{const bn2=new XmlNode(_Red);bn2.cc(input,_HN);bn2.cc(input,_HRC);bn2.cc(input,_Pr);bn2.cc(input,_RKPW);bn2.cc(input,_RKW);return bn2};se_RedirectAllRequestsTo=(input,context2)=>{const bn2=new XmlNode(_RART);bn2.cc(input,_HN);bn2.cc(input,_Pr);return bn2};se_ReplicaModifications=(input,context2)=>{const bn2=new XmlNode(_RM);null!=input[_S]&&bn2.c(XmlNode.of(_RMS,input[_S]).n(_S));return bn2};se_ReplicationConfiguration=(input,context2)=>{const bn2=new XmlNode(_RCe);bn2.cc(input,_Ro);bn2.l(input,"Rules","Rule",(()=>se_ReplicationRules(input[_Rul],context2)));return bn2};se_ReplicationRule=(input,context2)=>{const bn2=new XmlNode(_RRe);bn2.cc(input,_ID_);null!=input[_Pri]&&bn2.c(XmlNode.of(_Pri,String(input[_Pri])).n(_Pri));bn2.cc(input,_P);null!=input[_F]&&bn2.c(se_ReplicationRuleFilter(input[_F],context2).n(_F));null!=input[_S]&&bn2.c(XmlNode.of(_RRS,input[_S]).n(_S));null!=input[_SSC]&&bn2.c(se_SourceSelectionCriteria(input[_SSC],context2).n(_SSC));null!=input[_EOR]&&bn2.c(se_ExistingObjectReplication(input[_EOR]).n(_EOR));null!=input[_Des]&&bn2.c(se_Destination(input[_Des],context2).n(_Des));null!=input[_DMR]&&bn2.c(se_DeleteMarkerReplication(input[_DMR]).n(_DMR));return bn2};se_ReplicationRuleAndOperator=(input,context2)=>{const bn2=new XmlNode(_RRAO);bn2.cc(input,_P);bn2.l(input,"Tags","Tag",(()=>se_TagSet(input[_Tag],context2)));return bn2};se_ReplicationRuleFilter=(input,context2)=>{const bn2=new XmlNode(_RRF);bn2.cc(input,_P);null!=input[_Ta]&&bn2.c(se_Tag(input[_Ta],context2).n(_Ta));null!=input[_A]&&bn2.c(se_ReplicationRuleAndOperator(input[_A],context2).n(_A));return bn2};se_ReplicationRules=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_ReplicationRule(entry,context2).n(_me)));se_ReplicationTime=(input,context2)=>{const bn2=new XmlNode(_RTe);null!=input[_S]&&bn2.c(XmlNode.of(_RTS,input[_S]).n(_S));null!=input[_Tim]&&bn2.c(se_ReplicationTimeValue(input[_Tim],context2).n(_Tim));return bn2};se_ReplicationTimeValue=(input,context2)=>{const bn2=new XmlNode(_RTV);null!=input[_Mi]&&bn2.c(XmlNode.of(_Mi,String(input[_Mi])).n(_Mi));return bn2};se_RequestPaymentConfiguration=(input,context2)=>{const bn2=new XmlNode(_RPC);bn2.cc(input,_Pa);return bn2};se_RequestProgress=(input,context2)=>{const bn2=new XmlNode(_RPe);null!=input[_Ena]&&bn2.c(XmlNode.of(_ERP,String(input[_Ena])).n(_Ena));return bn2};se_RestoreRequest=(input,context2)=>{const bn2=new XmlNode(_RRes);null!=input[_Da]&&bn2.c(XmlNode.of(_Da,String(input[_Da])).n(_Da));null!=input[_GJP]&&bn2.c(se_GlacierJobParameters(input[_GJP]).n(_GJP));null!=input[_Ty]&&bn2.c(XmlNode.of(_RRT,input[_Ty]).n(_Ty));bn2.cc(input,_Ti);bn2.cc(input,_Desc);null!=input[_SP]&&bn2.c(se_SelectParameters(input[_SP],context2).n(_SP));null!=input[_OL]&&bn2.c(se_OutputLocation(input[_OL],context2).n(_OL));return bn2};se_RoutingRule=(input,context2)=>{const bn2=new XmlNode(_RRou);null!=input[_Con]&&bn2.c(se_Condition(input[_Con]).n(_Con));null!=input[_Red]&&bn2.c(se_Redirect(input[_Red]).n(_Red));return bn2};se_RoutingRules=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_RoutingRule(entry).n(_RRou)));se_S3KeyFilter=(input,context2)=>{const bn2=new XmlNode(_SKF);bn2.l(input,"FilterRules","FilterRule",(()=>se_FilterRuleList(input[_FRi])));return bn2};se_S3Location=(input,context2)=>{const bn2=new XmlNode(_SL);bn2.cc(input,_BN);null!=input[_P]&&bn2.c(XmlNode.of(_LP,input[_P]).n(_P));null!=input[_En]&&bn2.c(se_Encryption(input[_En]).n(_En));null!=input[_CACL]&&bn2.c(XmlNode.of(_OCACL,input[_CACL]).n(_CACL));bn2.lc(input,"AccessControlList","AccessControlList",(()=>se_Grants(input[_ACLc],context2)));null!=input[_T]&&bn2.c(se_Tagging(input[_T],context2).n(_T));bn2.lc(input,"UserMetadata","UserMetadata",(()=>se_UserMetadata(input[_UM],context2)));bn2.cc(input,_SC);return bn2};se_S3TablesDestination=(input,context2)=>{const bn2=new XmlNode(_STD);null!=input[_TBA]&&bn2.c(XmlNode.of(_STBA,input[_TBA]).n(_TBA));null!=input[_TN]&&bn2.c(XmlNode.of(_STN,input[_TN]).n(_TN));return bn2};se_ScanRange=(input,context2)=>{const bn2=new XmlNode(_SR);null!=input[_St]&&bn2.c(XmlNode.of(_St,String(input[_St])).n(_St));null!=input[_End]&&bn2.c(XmlNode.of(_End,String(input[_End])).n(_End));return bn2};se_SelectParameters=(input,context2)=>{const bn2=new XmlNode(_SP);null!=input[_IS]&&bn2.c(se_InputSerialization(input[_IS],context2).n(_IS));bn2.cc(input,_ETx);bn2.cc(input,_Ex);null!=input[_OS]&&bn2.c(se_OutputSerialization(input[_OS],context2).n(_OS));return bn2};se_ServerSideEncryptionByDefault=(input,context2)=>{const bn2=new XmlNode(_SSEBD);null!=input[_SSEA]&&bn2.c(XmlNode.of(_SSE,input[_SSEA]).n(_SSEA));null!=input[_KMSMKID]&&bn2.c(XmlNode.of(_SSEKMSKI,input[_KMSMKID]).n(_KMSMKID));return bn2};se_ServerSideEncryptionConfiguration=(input,context2)=>{const bn2=new XmlNode(_SSEC);bn2.l(input,"Rules","Rule",(()=>se_ServerSideEncryptionRules(input[_Rul],context2)));return bn2};se_ServerSideEncryptionRule=(input,context2)=>{const bn2=new XmlNode(_SSER);null!=input[_ASSEBD]&&bn2.c(se_ServerSideEncryptionByDefault(input[_ASSEBD]).n(_ASSEBD));null!=input[_BKE]&&bn2.c(XmlNode.of(_BKE,String(input[_BKE])).n(_BKE));return bn2};se_ServerSideEncryptionRules=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_ServerSideEncryptionRule(entry).n(_me)));se_SimplePrefix=(input,context2)=>new XmlNode(_SPi);se_SourceSelectionCriteria=(input,context2)=>{const bn2=new XmlNode(_SSC);null!=input[_SKEO]&&bn2.c(se_SseKmsEncryptedObjects(input[_SKEO],context2).n(_SKEO));null!=input[_RM]&&bn2.c(se_ReplicaModifications(input[_RM]).n(_RM));return bn2};se_SSEKMS=(input,context2)=>{const bn2=new XmlNode(_SK);null!=input[_KI]&&bn2.c(XmlNode.of(_SSEKMSKI,input[_KI]).n(_KI));return bn2};se_SseKmsEncryptedObjects=(input,context2)=>{const bn2=new XmlNode(_SKEO);null!=input[_S]&&bn2.c(XmlNode.of(_SKEOS,input[_S]).n(_S));return bn2};se_SSES3=(input,context2)=>new XmlNode(_SS);se_StorageClassAnalysis=(input,context2)=>{const bn2=new XmlNode(_SCA);null!=input[_DE]&&bn2.c(se_StorageClassAnalysisDataExport(input[_DE],context2).n(_DE));return bn2};se_StorageClassAnalysisDataExport=(input,context2)=>{const bn2=new XmlNode(_SCADE);null!=input[_OSV]&&bn2.c(XmlNode.of(_SCASV,input[_OSV]).n(_OSV));null!=input[_Des]&&bn2.c(se_AnalyticsExportDestination(input[_Des],context2).n(_Des));return bn2};se_Tag=(input,context2)=>{const bn2=new XmlNode(_Ta);null!=input[_K]&&bn2.c(XmlNode.of(_OK,input[_K]).n(_K));bn2.cc(input,_Va);return bn2};se_Tagging=(input,context2)=>{const bn2=new XmlNode(_T);bn2.lc(input,"TagSet","TagSet",(()=>se_TagSet(input[_TS],context2)));return bn2};se_TagSet=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_Tag(entry,context2).n(_Ta)));se_TargetGrant=(input,context2)=>{const bn2=new XmlNode(_TGa);if(null!=input[_Gra]){const n3=se_Grantee(input[_Gra],context2).n(_Gra);n3.a("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");bn2.c(n3)}null!=input[_Pe]&&bn2.c(XmlNode.of(_BLP,input[_Pe]).n(_Pe));return bn2};se_TargetGrants=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_TargetGrant(entry,context2).n(_G)));se_TargetObjectKeyFormat=(input,context2)=>{const bn2=new XmlNode(_TOKF);null!=input[_SPi]&&bn2.c(se_SimplePrefix(input[_SPi]).n(_SPi));null!=input[_PP]&&bn2.c(se_PartitionedPrefix(input[_PP]).n(_PP));return bn2};se_Tiering=(input,context2)=>{const bn2=new XmlNode(_Tier);null!=input[_Da]&&bn2.c(XmlNode.of(_ITD,String(input[_Da])).n(_Da));null!=input[_AT]&&bn2.c(XmlNode.of(_ITAT,input[_AT]).n(_AT));return bn2};se_TieringList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_Tiering(entry).n(_me)));se_TopicConfiguration=(input,context2)=>{const bn2=new XmlNode(_TCo);null!=input[_I]&&bn2.c(XmlNode.of(_NI,input[_I]).n(_I));null!=input[_TA]&&bn2.c(XmlNode.of(_TA,input[_TA]).n(_Top));bn2.l(input,"Events","Event",(()=>se_EventList(input[_Eve])));null!=input[_F]&&bn2.c(se_NotificationConfigurationFilter(input[_F],context2).n(_F));return bn2};se_TopicConfigurationList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_TopicConfiguration(entry,context2).n(_me)));se_Transition=(input,context2)=>{const bn2=new XmlNode(_Tra);null!=input[_Dat]&&bn2.c(XmlNode.of(_Dat,serializeDateTime(input[_Dat]).toString()).n(_Dat));null!=input[_Da]&&bn2.c(XmlNode.of(_Da,String(input[_Da])).n(_Da));null!=input[_SC]&&bn2.c(XmlNode.of(_TSC,input[_SC]).n(_SC));return bn2};se_TransitionList=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_Transition(entry).n(_me)));se_UserMetadata=(input,context2)=>input.filter((e3=>null!=e3)).map((entry=>se_MetadataEntry(entry).n(_ME)));se_VersioningConfiguration=(input,context2)=>{const bn2=new XmlNode(_VCe);null!=input[_MFAD]&&bn2.c(XmlNode.of(_MFAD,input[_MFAD]).n(_MDf));null!=input[_S]&&bn2.c(XmlNode.of(_BVS,input[_S]).n(_S));return bn2};se_WebsiteConfiguration=(input,context2)=>{const bn2=new XmlNode(_WC);null!=input[_ED]&&bn2.c(se_ErrorDocument(input[_ED]).n(_ED));null!=input[_ID]&&bn2.c(se_IndexDocument(input[_ID]).n(_ID));null!=input[_RART]&&bn2.c(se_RedirectAllRequestsTo(input[_RART]).n(_RART));bn2.lc(input,"RoutingRules","RoutingRules",(()=>se_RoutingRules(input[_RRo])));return bn2};de_AbortIncompleteMultipartUpload=(output,context2)=>{const contents={};null!=output[_DAI]&&(contents[_DAI]=strictParseInt32(output[_DAI]));return contents};de_AccessControlTranslation=(output,context2)=>{const contents={};null!=output[_O]&&(contents[_O]=expectString(output[_O]));return contents};de_AllowedHeaders=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>expectString(entry)));de_AllowedMethods=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>expectString(entry)));de_AllowedOrigins=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>expectString(entry)));de_AnalyticsAndOperator=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));""===output.Tag?contents[_Tag]=[]:null!=output[_Ta]&&(contents[_Tag]=de_TagSet(getArrayIfSingleItem(output[_Ta]),context2));return contents};de_AnalyticsConfiguration=(output,context2)=>{const contents={};null!=output[_I]&&(contents[_I]=expectString(output[_I]));""===output.Filter||null!=output[_F]&&(contents[_F]=de_AnalyticsFilter(expectUnion(output[_F]),context2));null!=output[_SCA]&&(contents[_SCA]=de_StorageClassAnalysis(output[_SCA],context2));return contents};de_AnalyticsConfigurationList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_AnalyticsConfiguration(entry,context2)));de_AnalyticsExportDestination=(output,context2)=>{const contents={};null!=output[_SBD]&&(contents[_SBD]=de_AnalyticsS3BucketDestination(output[_SBD],context2));return contents};de_AnalyticsFilter=(output,context2)=>null!=output[_P]?{Prefix:expectString(output[_P])}:null!=output[_Ta]?{Tag:de_Tag(output[_Ta],context2)}:null!=output[_A]?{And:de_AnalyticsAndOperator(output[_A],context2)}:{$unknown:Object.entries(output)[0]};de_AnalyticsS3BucketDestination=(output,context2)=>{const contents={};null!=output[_Fo]&&(contents[_Fo]=expectString(output[_Fo]));null!=output[_BAI]&&(contents[_BAI]=expectString(output[_BAI]));null!=output[_B]&&(contents[_B]=expectString(output[_B]));null!=output[_P]&&(contents[_P]=expectString(output[_P]));return contents};de_Bucket=(output,context2)=>{const contents={};null!=output[_N]&&(contents[_N]=expectString(output[_N]));null!=output[_CDr]&&(contents[_CDr]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_CDr])));null!=output[_BR]&&(contents[_BR]=expectString(output[_BR]));return contents};de_Buckets=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_Bucket(entry)));de_Checksum=(output,context2)=>{const contents={};null!=output[_CCRC]&&(contents[_CCRC]=expectString(output[_CCRC]));null!=output[_CCRCC]&&(contents[_CCRCC]=expectString(output[_CCRCC]));null!=output[_CCRCNVME]&&(contents[_CCRCNVME]=expectString(output[_CCRCNVME]));null!=output[_CSHA]&&(contents[_CSHA]=expectString(output[_CSHA]));null!=output[_CSHAh]&&(contents[_CSHAh]=expectString(output[_CSHAh]));null!=output[_CT]&&(contents[_CT]=expectString(output[_CT]));return contents};de_ChecksumAlgorithmList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>expectString(entry)));de_CommonPrefix=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));return contents};de_CommonPrefixList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_CommonPrefix(entry)));de_Condition=(output,context2)=>{const contents={};null!=output[_HECRE]&&(contents[_HECRE]=expectString(output[_HECRE]));null!=output[_KPE]&&(contents[_KPE]=expectString(output[_KPE]));return contents};de_ContinuationEvent=(output,context2)=>({});de_CopyObjectResult=(output,context2)=>{const contents={};null!=output[_ETa]&&(contents[_ETa]=expectString(output[_ETa]));null!=output[_LM]&&(contents[_LM]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_LM])));null!=output[_CT]&&(contents[_CT]=expectString(output[_CT]));null!=output[_CCRC]&&(contents[_CCRC]=expectString(output[_CCRC]));null!=output[_CCRCC]&&(contents[_CCRCC]=expectString(output[_CCRCC]));null!=output[_CCRCNVME]&&(contents[_CCRCNVME]=expectString(output[_CCRCNVME]));null!=output[_CSHA]&&(contents[_CSHA]=expectString(output[_CSHA]));null!=output[_CSHAh]&&(contents[_CSHAh]=expectString(output[_CSHAh]));return contents};de_CopyPartResult=(output,context2)=>{const contents={};null!=output[_ETa]&&(contents[_ETa]=expectString(output[_ETa]));null!=output[_LM]&&(contents[_LM]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_LM])));null!=output[_CCRC]&&(contents[_CCRC]=expectString(output[_CCRC]));null!=output[_CCRCC]&&(contents[_CCRCC]=expectString(output[_CCRCC]));null!=output[_CCRCNVME]&&(contents[_CCRCNVME]=expectString(output[_CCRCNVME]));null!=output[_CSHA]&&(contents[_CSHA]=expectString(output[_CSHA]));null!=output[_CSHAh]&&(contents[_CSHAh]=expectString(output[_CSHAh]));return contents};de_CORSRule=(output,context2)=>{const contents={};null!=output[_ID_]&&(contents[_ID_]=expectString(output[_ID_]));""===output.AllowedHeader?contents[_AHl]=[]:null!=output[_AH]&&(contents[_AHl]=de_AllowedHeaders(getArrayIfSingleItem(output[_AH])));""===output.AllowedMethod?contents[_AMl]=[]:null!=output[_AM]&&(contents[_AMl]=de_AllowedMethods(getArrayIfSingleItem(output[_AM])));""===output.AllowedOrigin?contents[_AOl]=[]:null!=output[_AO]&&(contents[_AOl]=de_AllowedOrigins(getArrayIfSingleItem(output[_AO])));""===output.ExposeHeader?contents[_EH]=[]:null!=output[_EHx]&&(contents[_EH]=de_ExposeHeaders(getArrayIfSingleItem(output[_EHx]),context2));null!=output[_MAS]&&(contents[_MAS]=strictParseInt32(output[_MAS]));return contents};de_CORSRules=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_CORSRule(entry,context2)));de_DefaultRetention=(output,context2)=>{const contents={};null!=output[_Mo]&&(contents[_Mo]=expectString(output[_Mo]));null!=output[_Da]&&(contents[_Da]=strictParseInt32(output[_Da]));null!=output[_Y]&&(contents[_Y]=strictParseInt32(output[_Y]));return contents};de_DeletedObject=(output,context2)=>{const contents={};null!=output[_K]&&(contents[_K]=expectString(output[_K]));null!=output[_VI]&&(contents[_VI]=expectString(output[_VI]));null!=output[_DM]&&(contents[_DM]=parseBoolean(output[_DM]));null!=output[_DMVI]&&(contents[_DMVI]=expectString(output[_DMVI]));return contents};de_DeletedObjects=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_DeletedObject(entry)));de_DeleteMarkerEntry=(output,context2)=>{const contents={};null!=output[_O]&&(contents[_O]=de_Owner(output[_O],context2));null!=output[_K]&&(contents[_K]=expectString(output[_K]));null!=output[_VI]&&(contents[_VI]=expectString(output[_VI]));null!=output[_IL]&&(contents[_IL]=parseBoolean(output[_IL]));null!=output[_LM]&&(contents[_LM]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_LM])));return contents};de_DeleteMarkerReplication=(output,context2)=>{const contents={};null!=output[_S]&&(contents[_S]=expectString(output[_S]));return contents};de_DeleteMarkers=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_DeleteMarkerEntry(entry,context2)));de_Destination=(output,context2)=>{const contents={};null!=output[_B]&&(contents[_B]=expectString(output[_B]));null!=output[_Ac]&&(contents[_Ac]=expectString(output[_Ac]));null!=output[_SC]&&(contents[_SC]=expectString(output[_SC]));null!=output[_ACT]&&(contents[_ACT]=de_AccessControlTranslation(output[_ACT]));null!=output[_ECn]&&(contents[_ECn]=de_EncryptionConfiguration(output[_ECn],context2));null!=output[_RTe]&&(contents[_RTe]=de_ReplicationTime(output[_RTe],context2));null!=output[_Me]&&(contents[_Me]=de_Metrics(output[_Me],context2));return contents};de_EncryptionConfiguration=(output,context2)=>{const contents={};null!=output[_RKKID]&&(contents[_RKKID]=expectString(output[_RKKID]));return contents};de_EndEvent=(output,context2)=>({});de__Error=(output,context2)=>{const contents={};null!=output[_K]&&(contents[_K]=expectString(output[_K]));null!=output[_VI]&&(contents[_VI]=expectString(output[_VI]));null!=output[_Cod]&&(contents[_Cod]=expectString(output[_Cod]));null!=output[_Mes]&&(contents[_Mes]=expectString(output[_Mes]));return contents};de_ErrorDetails=(output,context2)=>{const contents={};null!=output[_EC]&&(contents[_EC]=expectString(output[_EC]));null!=output[_EM]&&(contents[_EM]=expectString(output[_EM]));return contents};de_ErrorDocument=(output,context2)=>{const contents={};null!=output[_K]&&(contents[_K]=expectString(output[_K]));return contents};de_Errors=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de__Error(entry)));de_EventBridgeConfiguration=(output,context2)=>({});de_EventList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>expectString(entry)));de_ExistingObjectReplication=(output,context2)=>{const contents={};null!=output[_S]&&(contents[_S]=expectString(output[_S]));return contents};de_ExposeHeaders=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>expectString(entry)));de_FilterRule=(output,context2)=>{const contents={};null!=output[_N]&&(contents[_N]=expectString(output[_N]));null!=output[_Va]&&(contents[_Va]=expectString(output[_Va]));return contents};de_FilterRuleList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_FilterRule(entry)));de_GetBucketMetadataTableConfigurationResult=(output,context2)=>{const contents={};null!=output[_MTCR]&&(contents[_MTCR]=de_MetadataTableConfigurationResult(output[_MTCR],context2));null!=output[_S]&&(contents[_S]=expectString(output[_S]));null!=output[_Er]&&(contents[_Er]=de_ErrorDetails(output[_Er]));return contents};de_GetObjectAttributesParts=(output,context2)=>{const contents={};null!=output[_PC]&&(contents[_TPC]=strictParseInt32(output[_PC]));null!=output[_PNM]&&(contents[_PNM]=expectString(output[_PNM]));null!=output[_NPNM]&&(contents[_NPNM]=expectString(output[_NPNM]));null!=output[_MP]&&(contents[_MP]=strictParseInt32(output[_MP]));null!=output[_IT]&&(contents[_IT]=parseBoolean(output[_IT]));""===output.Part?contents[_Part]=[]:null!=output[_Par]&&(contents[_Part]=de_PartsList(getArrayIfSingleItem(output[_Par]),context2));return contents};de_Grant=(output,context2)=>{const contents={};null!=output[_Gra]&&(contents[_Gra]=de_Grantee(output[_Gra],context2));null!=output[_Pe]&&(contents[_Pe]=expectString(output[_Pe]));return contents};de_Grantee=(output,context2)=>{const contents={};null!=output[_DN]&&(contents[_DN]=expectString(output[_DN]));null!=output[_EA]&&(contents[_EA]=expectString(output[_EA]));null!=output[_ID_]&&(contents[_ID_]=expectString(output[_ID_]));null!=output[_URI]&&(contents[_URI]=expectString(output[_URI]));null!=output[_x]&&(contents[_Ty]=expectString(output[_x]));return contents};de_Grants=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_Grant(entry,context2)));de_IndexDocument=(output,context2)=>{const contents={};null!=output[_Su]&&(contents[_Su]=expectString(output[_Su]));return contents};de_Initiator=(output,context2)=>{const contents={};null!=output[_ID_]&&(contents[_ID_]=expectString(output[_ID_]));null!=output[_DN]&&(contents[_DN]=expectString(output[_DN]));return contents};de_IntelligentTieringAndOperator=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));""===output.Tag?contents[_Tag]=[]:null!=output[_Ta]&&(contents[_Tag]=de_TagSet(getArrayIfSingleItem(output[_Ta]),context2));return contents};de_IntelligentTieringConfiguration=(output,context2)=>{const contents={};null!=output[_I]&&(contents[_I]=expectString(output[_I]));null!=output[_F]&&(contents[_F]=de_IntelligentTieringFilter(output[_F],context2));null!=output[_S]&&(contents[_S]=expectString(output[_S]));""===output.Tiering?contents[_Tie]=[]:null!=output[_Tier]&&(contents[_Tie]=de_TieringList(getArrayIfSingleItem(output[_Tier]),context2));return contents};de_IntelligentTieringConfigurationList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_IntelligentTieringConfiguration(entry,context2)));de_IntelligentTieringFilter=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));null!=output[_Ta]&&(contents[_Ta]=de_Tag(output[_Ta],context2));null!=output[_A]&&(contents[_A]=de_IntelligentTieringAndOperator(output[_A],context2));return contents};de_InventoryConfiguration=(output,context2)=>{const contents={};null!=output[_Des]&&(contents[_Des]=de_InventoryDestination(output[_Des],context2));null!=output[_IE]&&(contents[_IE]=parseBoolean(output[_IE]));null!=output[_F]&&(contents[_F]=de_InventoryFilter(output[_F],context2));null!=output[_I]&&(contents[_I]=expectString(output[_I]));null!=output[_IOV]&&(contents[_IOV]=expectString(output[_IOV]));""===output.OptionalFields?contents[_OF]=[]:null!=output[_OF]&&null!=output[_OF][_Fi]&&(contents[_OF]=de_InventoryOptionalFields(getArrayIfSingleItem(output[_OF][_Fi]),context2));null!=output[_Sc]&&(contents[_Sc]=de_InventorySchedule(output[_Sc],context2));return contents};de_InventoryConfigurationList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_InventoryConfiguration(entry,context2)));de_InventoryDestination=(output,context2)=>{const contents={};null!=output[_SBD]&&(contents[_SBD]=de_InventoryS3BucketDestination(output[_SBD],context2));return contents};de_InventoryEncryption=(output,context2)=>{const contents={};null!=output[_SS]&&(contents[_SSES]=de_SSES3(output[_SS],context2));null!=output[_SK]&&(contents[_SSEKMS]=de_SSEKMS(output[_SK],context2));return contents};de_InventoryFilter=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));return contents};de_InventoryOptionalFields=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>expectString(entry)));de_InventoryS3BucketDestination=(output,context2)=>{const contents={};null!=output[_AIc]&&(contents[_AIc]=expectString(output[_AIc]));null!=output[_B]&&(contents[_B]=expectString(output[_B]));null!=output[_Fo]&&(contents[_Fo]=expectString(output[_Fo]));null!=output[_P]&&(contents[_P]=expectString(output[_P]));null!=output[_En]&&(contents[_En]=de_InventoryEncryption(output[_En],context2));return contents};de_InventorySchedule=(output,context2)=>{const contents={};null!=output[_Fr]&&(contents[_Fr]=expectString(output[_Fr]));return contents};de_LambdaFunctionConfiguration=(output,context2)=>{const contents={};null!=output[_I]&&(contents[_I]=expectString(output[_I]));null!=output[_CF]&&(contents[_LFA]=expectString(output[_CF]));""===output.Event?contents[_Eve]=[]:null!=output[_Ev]&&(contents[_Eve]=de_EventList(getArrayIfSingleItem(output[_Ev])));null!=output[_F]&&(contents[_F]=de_NotificationConfigurationFilter(output[_F],context2));return contents};de_LambdaFunctionConfigurationList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_LambdaFunctionConfiguration(entry,context2)));de_LifecycleExpiration=(output,context2)=>{const contents={};null!=output[_Dat]&&(contents[_Dat]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_Dat])));null!=output[_Da]&&(contents[_Da]=strictParseInt32(output[_Da]));null!=output[_EODM]&&(contents[_EODM]=parseBoolean(output[_EODM]));return contents};de_LifecycleRule=(output,context2)=>{const contents={};null!=output[_Exp]&&(contents[_Exp]=de_LifecycleExpiration(output[_Exp]));null!=output[_ID_]&&(contents[_ID_]=expectString(output[_ID_]));null!=output[_P]&&(contents[_P]=expectString(output[_P]));null!=output[_F]&&(contents[_F]=de_LifecycleRuleFilter(output[_F],context2));null!=output[_S]&&(contents[_S]=expectString(output[_S]));""===output.Transition?contents[_Tr]=[]:null!=output[_Tra]&&(contents[_Tr]=de_TransitionList(getArrayIfSingleItem(output[_Tra]),context2));""===output.NoncurrentVersionTransition?contents[_NVT]=[]:null!=output[_NVTo]&&(contents[_NVT]=de_NoncurrentVersionTransitionList(getArrayIfSingleItem(output[_NVTo]),context2));null!=output[_NVE]&&(contents[_NVE]=de_NoncurrentVersionExpiration(output[_NVE],context2));null!=output[_AIMU]&&(contents[_AIMU]=de_AbortIncompleteMultipartUpload(output[_AIMU]));return contents};de_LifecycleRuleAndOperator=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));""===output.Tag?contents[_Tag]=[]:null!=output[_Ta]&&(contents[_Tag]=de_TagSet(getArrayIfSingleItem(output[_Ta]),context2));null!=output[_OSGT]&&(contents[_OSGT]=strictParseLong(output[_OSGT]));null!=output[_OSLT]&&(contents[_OSLT]=strictParseLong(output[_OSLT]));return contents};de_LifecycleRuleFilter=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));null!=output[_Ta]&&(contents[_Ta]=de_Tag(output[_Ta],context2));null!=output[_OSGT]&&(contents[_OSGT]=strictParseLong(output[_OSGT]));null!=output[_OSLT]&&(contents[_OSLT]=strictParseLong(output[_OSLT]));null!=output[_A]&&(contents[_A]=de_LifecycleRuleAndOperator(output[_A],context2));return contents};de_LifecycleRules=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_LifecycleRule(entry,context2)));de_LoggingEnabled=(output,context2)=>{const contents={};null!=output[_TB]&&(contents[_TB]=expectString(output[_TB]));""===output.TargetGrants?contents[_TG]=[]:null!=output[_TG]&&null!=output[_TG][_G]&&(contents[_TG]=de_TargetGrants(getArrayIfSingleItem(output[_TG][_G]),context2));null!=output[_TP]&&(contents[_TP]=expectString(output[_TP]));null!=output[_TOKF]&&(contents[_TOKF]=de_TargetObjectKeyFormat(output[_TOKF],context2));return contents};de_MetadataTableConfigurationResult=(output,context2)=>{const contents={};null!=output[_STDR]&&(contents[_STDR]=de_S3TablesDestinationResult(output[_STDR],context2));return contents};de_Metrics=(output,context2)=>{const contents={};null!=output[_S]&&(contents[_S]=expectString(output[_S]));null!=output[_ETv]&&(contents[_ETv]=de_ReplicationTimeValue(output[_ETv],context2));return contents};de_MetricsAndOperator=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));""===output.Tag?contents[_Tag]=[]:null!=output[_Ta]&&(contents[_Tag]=de_TagSet(getArrayIfSingleItem(output[_Ta]),context2));null!=output[_APAc]&&(contents[_APAc]=expectString(output[_APAc]));return contents};de_MetricsConfiguration=(output,context2)=>{const contents={};null!=output[_I]&&(contents[_I]=expectString(output[_I]));""===output.Filter||null!=output[_F]&&(contents[_F]=de_MetricsFilter(expectUnion(output[_F]),context2));return contents};de_MetricsConfigurationList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_MetricsConfiguration(entry,context2)));de_MetricsFilter=(output,context2)=>null!=output[_P]?{Prefix:expectString(output[_P])}:null!=output[_Ta]?{Tag:de_Tag(output[_Ta],context2)}:null!=output[_APAc]?{AccessPointArn:expectString(output[_APAc])}:null!=output[_A]?{And:de_MetricsAndOperator(output[_A],context2)}:{$unknown:Object.entries(output)[0]};de_MultipartUpload=(output,context2)=>{const contents={};null!=output[_UI]&&(contents[_UI]=expectString(output[_UI]));null!=output[_K]&&(contents[_K]=expectString(output[_K]));null!=output[_Ini]&&(contents[_Ini]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_Ini])));null!=output[_SC]&&(contents[_SC]=expectString(output[_SC]));null!=output[_O]&&(contents[_O]=de_Owner(output[_O],context2));null!=output[_In]&&(contents[_In]=de_Initiator(output[_In],context2));null!=output[_CA]&&(contents[_CA]=expectString(output[_CA]));null!=output[_CT]&&(contents[_CT]=expectString(output[_CT]));return contents};de_MultipartUploadList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_MultipartUpload(entry,context2)));de_NoncurrentVersionExpiration=(output,context2)=>{const contents={};null!=output[_ND]&&(contents[_ND]=strictParseInt32(output[_ND]));null!=output[_NNV]&&(contents[_NNV]=strictParseInt32(output[_NNV]));return contents};de_NoncurrentVersionTransition=(output,context2)=>{const contents={};null!=output[_ND]&&(contents[_ND]=strictParseInt32(output[_ND]));null!=output[_SC]&&(contents[_SC]=expectString(output[_SC]));null!=output[_NNV]&&(contents[_NNV]=strictParseInt32(output[_NNV]));return contents};de_NoncurrentVersionTransitionList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_NoncurrentVersionTransition(entry)));de_NotificationConfigurationFilter=(output,context2)=>{const contents={};null!=output[_SKe]&&(contents[_K]=de_S3KeyFilter(output[_SKe],context2));return contents};de__Object=(output,context2)=>{const contents={};null!=output[_K]&&(contents[_K]=expectString(output[_K]));null!=output[_LM]&&(contents[_LM]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_LM])));null!=output[_ETa]&&(contents[_ETa]=expectString(output[_ETa]));""===output.ChecksumAlgorithm?contents[_CA]=[]:null!=output[_CA]&&(contents[_CA]=de_ChecksumAlgorithmList(getArrayIfSingleItem(output[_CA])));null!=output[_CT]&&(contents[_CT]=expectString(output[_CT]));null!=output[_Si]&&(contents[_Si]=strictParseLong(output[_Si]));null!=output[_SC]&&(contents[_SC]=expectString(output[_SC]));null!=output[_O]&&(contents[_O]=de_Owner(output[_O],context2));null!=output[_RSe]&&(contents[_RSe]=de_RestoreStatus(output[_RSe],context2));return contents};de_ObjectList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de__Object(entry,context2)));de_ObjectLockConfiguration=(output,context2)=>{const contents={};null!=output[_OLE]&&(contents[_OLE]=expectString(output[_OLE]));null!=output[_Ru]&&(contents[_Ru]=de_ObjectLockRule(output[_Ru],context2));return contents};de_ObjectLockLegalHold=(output,context2)=>{const contents={};null!=output[_S]&&(contents[_S]=expectString(output[_S]));return contents};de_ObjectLockRetention=(output,context2)=>{const contents={};null!=output[_Mo]&&(contents[_Mo]=expectString(output[_Mo]));null!=output[_RUD]&&(contents[_RUD]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_RUD])));return contents};de_ObjectLockRule=(output,context2)=>{const contents={};null!=output[_DRe]&&(contents[_DRe]=de_DefaultRetention(output[_DRe]));return contents};de_ObjectPart=(output,context2)=>{const contents={};null!=output[_PN]&&(contents[_PN]=strictParseInt32(output[_PN]));null!=output[_Si]&&(contents[_Si]=strictParseLong(output[_Si]));null!=output[_CCRC]&&(contents[_CCRC]=expectString(output[_CCRC]));null!=output[_CCRCC]&&(contents[_CCRCC]=expectString(output[_CCRCC]));null!=output[_CCRCNVME]&&(contents[_CCRCNVME]=expectString(output[_CCRCNVME]));null!=output[_CSHA]&&(contents[_CSHA]=expectString(output[_CSHA]));null!=output[_CSHAh]&&(contents[_CSHAh]=expectString(output[_CSHAh]));return contents};de_ObjectVersion=(output,context2)=>{const contents={};null!=output[_ETa]&&(contents[_ETa]=expectString(output[_ETa]));""===output.ChecksumAlgorithm?contents[_CA]=[]:null!=output[_CA]&&(contents[_CA]=de_ChecksumAlgorithmList(getArrayIfSingleItem(output[_CA])));null!=output[_CT]&&(contents[_CT]=expectString(output[_CT]));null!=output[_Si]&&(contents[_Si]=strictParseLong(output[_Si]));null!=output[_SC]&&(contents[_SC]=expectString(output[_SC]));null!=output[_K]&&(contents[_K]=expectString(output[_K]));null!=output[_VI]&&(contents[_VI]=expectString(output[_VI]));null!=output[_IL]&&(contents[_IL]=parseBoolean(output[_IL]));null!=output[_LM]&&(contents[_LM]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_LM])));null!=output[_O]&&(contents[_O]=de_Owner(output[_O],context2));null!=output[_RSe]&&(contents[_RSe]=de_RestoreStatus(output[_RSe],context2));return contents};de_ObjectVersionList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_ObjectVersion(entry,context2)));de_Owner=(output,context2)=>{const contents={};null!=output[_DN]&&(contents[_DN]=expectString(output[_DN]));null!=output[_ID_]&&(contents[_ID_]=expectString(output[_ID_]));return contents};de_OwnershipControls=(output,context2)=>{const contents={};""===output.Rule?contents[_Rul]=[]:null!=output[_Ru]&&(contents[_Rul]=de_OwnershipControlsRules(getArrayIfSingleItem(output[_Ru]),context2));return contents};de_OwnershipControlsRule=(output,context2)=>{const contents={};null!=output[_OO]&&(contents[_OO]=expectString(output[_OO]));return contents};de_OwnershipControlsRules=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_OwnershipControlsRule(entry)));de_Part=(output,context2)=>{const contents={};null!=output[_PN]&&(contents[_PN]=strictParseInt32(output[_PN]));null!=output[_LM]&&(contents[_LM]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_LM])));null!=output[_ETa]&&(contents[_ETa]=expectString(output[_ETa]));null!=output[_Si]&&(contents[_Si]=strictParseLong(output[_Si]));null!=output[_CCRC]&&(contents[_CCRC]=expectString(output[_CCRC]));null!=output[_CCRCC]&&(contents[_CCRCC]=expectString(output[_CCRCC]));null!=output[_CCRCNVME]&&(contents[_CCRCNVME]=expectString(output[_CCRCNVME]));null!=output[_CSHA]&&(contents[_CSHA]=expectString(output[_CSHA]));null!=output[_CSHAh]&&(contents[_CSHAh]=expectString(output[_CSHAh]));return contents};de_PartitionedPrefix=(output,context2)=>{const contents={};null!=output[_PDS]&&(contents[_PDS]=expectString(output[_PDS]));return contents};de_Parts=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_Part(entry)));de_PartsList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_ObjectPart(entry)));de_PolicyStatus=(output,context2)=>{const contents={};null!=output[_IP]&&(contents[_IP]=parseBoolean(output[_IP]));return contents};de_Progress=(output,context2)=>{const contents={};null!=output[_BS]&&(contents[_BS]=strictParseLong(output[_BS]));null!=output[_BP]&&(contents[_BP]=strictParseLong(output[_BP]));null!=output[_BRy]&&(contents[_BRy]=strictParseLong(output[_BRy]));return contents};de_PublicAccessBlockConfiguration=(output,context2)=>{const contents={};null!=output[_BPA]&&(contents[_BPA]=parseBoolean(output[_BPA]));null!=output[_IPA]&&(contents[_IPA]=parseBoolean(output[_IPA]));null!=output[_BPP]&&(contents[_BPP]=parseBoolean(output[_BPP]));null!=output[_RPB]&&(contents[_RPB]=parseBoolean(output[_RPB]));return contents};de_QueueConfiguration=(output,context2)=>{const contents={};null!=output[_I]&&(contents[_I]=expectString(output[_I]));null!=output[_Qu]&&(contents[_QA]=expectString(output[_Qu]));""===output.Event?contents[_Eve]=[]:null!=output[_Ev]&&(contents[_Eve]=de_EventList(getArrayIfSingleItem(output[_Ev])));null!=output[_F]&&(contents[_F]=de_NotificationConfigurationFilter(output[_F],context2));return contents};de_QueueConfigurationList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_QueueConfiguration(entry,context2)));de_Redirect=(output,context2)=>{const contents={};null!=output[_HN]&&(contents[_HN]=expectString(output[_HN]));null!=output[_HRC]&&(contents[_HRC]=expectString(output[_HRC]));null!=output[_Pr]&&(contents[_Pr]=expectString(output[_Pr]));null!=output[_RKPW]&&(contents[_RKPW]=expectString(output[_RKPW]));null!=output[_RKW]&&(contents[_RKW]=expectString(output[_RKW]));return contents};de_RedirectAllRequestsTo=(output,context2)=>{const contents={};null!=output[_HN]&&(contents[_HN]=expectString(output[_HN]));null!=output[_Pr]&&(contents[_Pr]=expectString(output[_Pr]));return contents};de_ReplicaModifications=(output,context2)=>{const contents={};null!=output[_S]&&(contents[_S]=expectString(output[_S]));return contents};de_ReplicationConfiguration=(output,context2)=>{const contents={};null!=output[_Ro]&&(contents[_Ro]=expectString(output[_Ro]));""===output.Rule?contents[_Rul]=[]:null!=output[_Ru]&&(contents[_Rul]=de_ReplicationRules(getArrayIfSingleItem(output[_Ru]),context2));return contents};de_ReplicationRule=(output,context2)=>{const contents={};null!=output[_ID_]&&(contents[_ID_]=expectString(output[_ID_]));null!=output[_Pri]&&(contents[_Pri]=strictParseInt32(output[_Pri]));null!=output[_P]&&(contents[_P]=expectString(output[_P]));null!=output[_F]&&(contents[_F]=de_ReplicationRuleFilter(output[_F],context2));null!=output[_S]&&(contents[_S]=expectString(output[_S]));null!=output[_SSC]&&(contents[_SSC]=de_SourceSelectionCriteria(output[_SSC],context2));null!=output[_EOR]&&(contents[_EOR]=de_ExistingObjectReplication(output[_EOR]));null!=output[_Des]&&(contents[_Des]=de_Destination(output[_Des],context2));null!=output[_DMR]&&(contents[_DMR]=de_DeleteMarkerReplication(output[_DMR]));return contents};de_ReplicationRuleAndOperator=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));""===output.Tag?contents[_Tag]=[]:null!=output[_Ta]&&(contents[_Tag]=de_TagSet(getArrayIfSingleItem(output[_Ta]),context2));return contents};de_ReplicationRuleFilter=(output,context2)=>{const contents={};null!=output[_P]&&(contents[_P]=expectString(output[_P]));null!=output[_Ta]&&(contents[_Ta]=de_Tag(output[_Ta],context2));null!=output[_A]&&(contents[_A]=de_ReplicationRuleAndOperator(output[_A],context2));return contents};de_ReplicationRules=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_ReplicationRule(entry,context2)));de_ReplicationTime=(output,context2)=>{const contents={};null!=output[_S]&&(contents[_S]=expectString(output[_S]));null!=output[_Tim]&&(contents[_Tim]=de_ReplicationTimeValue(output[_Tim],context2));return contents};de_ReplicationTimeValue=(output,context2)=>{const contents={};null!=output[_Mi]&&(contents[_Mi]=strictParseInt32(output[_Mi]));return contents};de_RestoreStatus=(output,context2)=>{const contents={};null!=output[_IRIP]&&(contents[_IRIP]=parseBoolean(output[_IRIP]));null!=output[_RED]&&(contents[_RED]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_RED])));return contents};de_RoutingRule=(output,context2)=>{const contents={};null!=output[_Con]&&(contents[_Con]=de_Condition(output[_Con]));null!=output[_Red]&&(contents[_Red]=de_Redirect(output[_Red]));return contents};de_RoutingRules=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_RoutingRule(entry)));de_S3KeyFilter=(output,context2)=>{const contents={};""===output.FilterRule?contents[_FRi]=[]:null!=output[_FR]&&(contents[_FRi]=de_FilterRuleList(getArrayIfSingleItem(output[_FR])));return contents};de_S3TablesDestinationResult=(output,context2)=>{const contents={};null!=output[_TBA]&&(contents[_TBA]=expectString(output[_TBA]));null!=output[_TN]&&(contents[_TN]=expectString(output[_TN]));null!=output[_TAa]&&(contents[_TAa]=expectString(output[_TAa]));null!=output[_TNa]&&(contents[_TNa]=expectString(output[_TNa]));return contents};de_ServerSideEncryptionByDefault=(output,context2)=>{const contents={};null!=output[_SSEA]&&(contents[_SSEA]=expectString(output[_SSEA]));null!=output[_KMSMKID]&&(contents[_KMSMKID]=expectString(output[_KMSMKID]));return contents};de_ServerSideEncryptionConfiguration=(output,context2)=>{const contents={};""===output.Rule?contents[_Rul]=[]:null!=output[_Ru]&&(contents[_Rul]=de_ServerSideEncryptionRules(getArrayIfSingleItem(output[_Ru]),context2));return contents};de_ServerSideEncryptionRule=(output,context2)=>{const contents={};null!=output[_ASSEBD]&&(contents[_ASSEBD]=de_ServerSideEncryptionByDefault(output[_ASSEBD]));null!=output[_BKE]&&(contents[_BKE]=parseBoolean(output[_BKE]));return contents};de_ServerSideEncryptionRules=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_ServerSideEncryptionRule(entry)));de_SessionCredentials=(output,context2)=>{const contents={};null!=output[_AKI]&&(contents[_AKI]=expectString(output[_AKI]));null!=output[_SAK]&&(contents[_SAK]=expectString(output[_SAK]));null!=output[_ST]&&(contents[_ST]=expectString(output[_ST]));null!=output[_Exp]&&(contents[_Exp]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_Exp])));return contents};de_SimplePrefix=(output,context2)=>({});de_SourceSelectionCriteria=(output,context2)=>{const contents={};null!=output[_SKEO]&&(contents[_SKEO]=de_SseKmsEncryptedObjects(output[_SKEO],context2));null!=output[_RM]&&(contents[_RM]=de_ReplicaModifications(output[_RM]));return contents};de_SSEKMS=(output,context2)=>{const contents={};null!=output[_KI]&&(contents[_KI]=expectString(output[_KI]));return contents};de_SseKmsEncryptedObjects=(output,context2)=>{const contents={};null!=output[_S]&&(contents[_S]=expectString(output[_S]));return contents};de_SSES3=(output,context2)=>({});de_Stats=(output,context2)=>{const contents={};null!=output[_BS]&&(contents[_BS]=strictParseLong(output[_BS]));null!=output[_BP]&&(contents[_BP]=strictParseLong(output[_BP]));null!=output[_BRy]&&(contents[_BRy]=strictParseLong(output[_BRy]));return contents};de_StorageClassAnalysis=(output,context2)=>{const contents={};null!=output[_DE]&&(contents[_DE]=de_StorageClassAnalysisDataExport(output[_DE],context2));return contents};de_StorageClassAnalysisDataExport=(output,context2)=>{const contents={};null!=output[_OSV]&&(contents[_OSV]=expectString(output[_OSV]));null!=output[_Des]&&(contents[_Des]=de_AnalyticsExportDestination(output[_Des],context2));return contents};de_Tag=(output,context2)=>{const contents={};null!=output[_K]&&(contents[_K]=expectString(output[_K]));null!=output[_Va]&&(contents[_Va]=expectString(output[_Va]));return contents};de_TagSet=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_Tag(entry,context2)));de_TargetGrant=(output,context2)=>{const contents={};null!=output[_Gra]&&(contents[_Gra]=de_Grantee(output[_Gra],context2));null!=output[_Pe]&&(contents[_Pe]=expectString(output[_Pe]));return contents};de_TargetGrants=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_TargetGrant(entry,context2)));de_TargetObjectKeyFormat=(output,context2)=>{const contents={};null!=output[_SPi]&&(contents[_SPi]=de_SimplePrefix(output[_SPi]));null!=output[_PP]&&(contents[_PP]=de_PartitionedPrefix(output[_PP]));return contents};de_Tiering=(output,context2)=>{const contents={};null!=output[_Da]&&(contents[_Da]=strictParseInt32(output[_Da]));null!=output[_AT]&&(contents[_AT]=expectString(output[_AT]));return contents};de_TieringList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_Tiering(entry)));de_TopicConfiguration=(output,context2)=>{const contents={};null!=output[_I]&&(contents[_I]=expectString(output[_I]));null!=output[_Top]&&(contents[_TA]=expectString(output[_Top]));""===output.Event?contents[_Eve]=[]:null!=output[_Ev]&&(contents[_Eve]=de_EventList(getArrayIfSingleItem(output[_Ev])));null!=output[_F]&&(contents[_F]=de_NotificationConfigurationFilter(output[_F],context2));return contents};de_TopicConfigurationList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_TopicConfiguration(entry,context2)));de_Transition=(output,context2)=>{const contents={};null!=output[_Dat]&&(contents[_Dat]=expectNonNull(parseRfc3339DateTimeWithOffset(output[_Dat])));null!=output[_Da]&&(contents[_Da]=strictParseInt32(output[_Da]));null!=output[_SC]&&(contents[_SC]=expectString(output[_SC]));return contents};de_TransitionList=(output,context2)=>(output||[]).filter((e3=>null!=e3)).map((entry=>de_Transition(entry)));deserializeMetadata2=output=>{var _a8,_b5;return{httpStatusCode:output.statusCode,requestId:null!=(_b5=null!=(_a8=output.headers["x-amzn-requestid"])?_a8:output.headers["x-amzn-request-id"])?_b5:output.headers["x-amz-request-id"],extendedRequestId:output.headers["x-amz-id-2"],cfId:output.headers["x-amz-cf-id"]}};collectBodyString2=(streamBody,context2)=>collectBody(streamBody,context2).then((body=>context2.utf8Encoder(body)));_A="And";_AAO="AnalyticsAndOperator";_AC="AnalyticsConfiguration";_ACL="ACL";_ACLc="AccessControlList";_ACLn="AnalyticsConfigurationList";_ACP="AccessControlPolicy";_ACT="AccessControlTranslation";_ACc="AccelerateConfiguration";_AD="AbortDate";_AED="AnalyticsExportDestination";_AF="AnalyticsFilter";_AH="AllowedHeader";_AHl="AllowedHeaders";_AI="AnalyticsId";_AIMU="AbortIncompleteMultipartUpload";_AIc="AccountId";_AKI="AccessKeyId";_AM="AllowedMethod";_AMl="AllowedMethods";_AO="AllowedOrigin";_AOl="AllowedOrigins";_APA="AccessPointAlias";_APAc="AccessPointArn";_AQRD="AllowQuotedRecordDelimiter";_AR="AcceptRanges";_ARI="AbortRuleId";_AS="ArchiveStatus";_ASBD="AnalyticsS3BucketDestination";_ASEFF="AnalyticsS3ExportFileFormat";_ASSEBD="ApplyServerSideEncryptionByDefault";_AT="AccessTier";_Ac="Account";_B="Bucket";_BAI="BucketAccountId";_BAS="BucketAccelerateStatus";_BGR="BypassGovernanceRetention";_BI="BucketInfo";_BKE="BucketKeyEnabled";_BLC="BucketLifecycleConfiguration";_BLCu="BucketLocationConstraint";_BLN="BucketLocationName";_BLP="BucketLogsPermission";_BLS="BucketLoggingStatus";_BLT="BucketLocationType";_BN="BucketName";_BP="BytesProcessed";_BPA="BlockPublicAcls";_BPP="BlockPublicPolicy";_BR="BucketRegion";_BRy="BytesReturned";_BS="BytesScanned";_BT="BucketType";_BVS="BucketVersioningStatus";_Bu="Buckets";_C="Credentials";_CA="ChecksumAlgorithm";_CACL="CannedACL";_CBC="CreateBucketConfiguration";_CC="CacheControl";_CCRC="ChecksumCRC32";_CCRCC="ChecksumCRC32C";_CCRCNVME="ChecksumCRC64NVME";_CD="ContentDisposition";_CDr="CreationDate";_CE="ContentEncoding";_CF="CloudFunction";_CFC="CloudFunctionConfiguration";_CL="ContentLanguage";_CLo="ContentLength";_CM="ChecksumMode";_CMD="ContentMD5";_CMU="CompletedMultipartUpload";_CORSC="CORSConfiguration";_CORSR="CORSRule";_CORSRu="CORSRules";_CP="CommonPrefixes";_CPo="CompletedPart";_CR="ContentRange";_CRSBA="ConfirmRemoveSelfBucketAccess";_CS="CopySource";_CSHA="ChecksumSHA1";_CSHAh="ChecksumSHA256";_CSIM="CopySourceIfMatch";_CSIMS="CopySourceIfModifiedSince";_CSINM="CopySourceIfNoneMatch";_CSIUS="CopySourceIfUnmodifiedSince";_CSR="CopySourceRange";_CSSSECA="CopySourceSSECustomerAlgorithm";_CSSSECK="CopySourceSSECustomerKey";_CSSSECKMD="CopySourceSSECustomerKeyMD5";_CSV="CSV";_CSVI="CopySourceVersionId";_CSVIn="CSVInput";_CSVO="CSVOutput";_CT="ChecksumType";_CTo="ContentType";_CTom="CompressionType";_CTon="ContinuationToken";_Ch="Checksum";_Co="Contents";_Cod="Code";_Com="Comments";_Con="Condition";_D="Delimiter";_DAI="DaysAfterInitiation";_DE="DataExport";_DM="DeleteMarker";_DMR="DeleteMarkerReplication";_DMRS="DeleteMarkerReplicationStatus";_DMVI="DeleteMarkerVersionId";_DMe="DeleteMarkers";_DN="DisplayName";_DR="DataRedundancy";_DRe="DefaultRetention";_Da="Days";_Dat="Date";_De="Deleted";_Del="Delete";_Des="Destination";_Desc="Description";_E="Expires";_EA="EmailAddress";_EBC="EventBridgeConfiguration";_EBO="ExpectedBucketOwner";_EC="ErrorCode";_ECn="EncryptionConfiguration";_ED="ErrorDocument";_EH="ExposeHeaders";_EHx="ExposeHeader";_EM="ErrorMessage";_EODM="ExpiredObjectDeleteMarker";_EOR="ExistingObjectReplication";_EORS="ExistingObjectReplicationStatus";_ERP="EnableRequestProgress";_ES="ExpiresString";_ESBO="ExpectedSourceBucketOwner";_ESx="ExpirationStatus";_ET="EncodingType";_ETa="ETag";_ETn="EncryptionType";_ETv="EventThreshold";_ETx="ExpressionType";_En="Encryption";_Ena="Enabled";_End="End";_Er="Error";_Err="Errors";_Ev="Event";_Eve="Events";_Ex="Expression";_Exp="Expiration";_F="Filter";_FD="FieldDelimiter";_FHI="FileHeaderInfo";_FO="FetchOwner";_FR="FilterRule";_FRN="FilterRuleName";_FRV="FilterRuleValue";_FRi="FilterRules";_Fi="Field";_Fo="Format";_Fr="Frequency";_G="Grant";_GFC="GrantFullControl";_GJP="GlacierJobParameters";_GR="GrantRead";_GRACP="GrantReadACP";_GW="GrantWrite";_GWACP="GrantWriteACP";_Gr="Grants";_Gra="Grantee";_HECRE="HttpErrorCodeReturnedEquals";_HN="HostName";_HRC="HttpRedirectCode";_I="Id";_IC="InventoryConfiguration";_ICL="InventoryConfigurationList";_ID="IndexDocument";_ID_="ID";_IDn="InventoryDestination";_IE="IsEnabled";_IEn="InventoryEncryption";_IF="InventoryFilter";_IFn="InventoryFormat";_IFnv="InventoryFrequency";_II="InventoryId";_IIOV="InventoryIncludedObjectVersions";_IL="IsLatest";_IM="IfMatch";_IMIT="IfMatchInitiatedTime";_IMLMT="IfMatchLastModifiedTime";_IMS="IfMatchSize";_IMSf="IfModifiedSince";_INM="IfNoneMatch";_IOF="InventoryOptionalField";_IOV="IncludedObjectVersions";_IP="IsPublic";_IPA="IgnorePublicAcls";_IRIP="IsRestoreInProgress";_IS="InputSerialization";_ISBD="InventoryS3BucketDestination";_ISn="InventorySchedule";_IT="IsTruncated";_ITAO="IntelligentTieringAndOperator";_ITAT="IntelligentTieringAccessTier";_ITC="IntelligentTieringConfiguration";_ITCL="IntelligentTieringConfigurationList";_ITD="IntelligentTieringDays";_ITF="IntelligentTieringFilter";_ITI="IntelligentTieringId";_ITS="IntelligentTieringStatus";_IUS="IfUnmodifiedSince";_In="Initiator";_Ini="Initiated";_JSON="JSON";_JSONI="JSONInput";_JSONO="JSONOutput";_JSONT="JSONType";_K="Key";_KC="KeyCount";_KI="KeyId";_KM="KeyMarker";_KMSC="KMSContext";_KMSKI="KMSKeyId";_KMSMKID="KMSMasterKeyID";_KPE="KeyPrefixEquals";_L="Location";_LC="LocationConstraint";_LE="LoggingEnabled";_LEi="LifecycleExpiration";_LFA="LambdaFunctionArn";_LFC="LambdaFunctionConfigurations";_LFCa="LambdaFunctionConfiguration";_LI="LocationInfo";_LM="LastModified";_LMT="LastModifiedTime";_LNAS="LocationNameAsString";_LP="LocationPrefix";_LR="LifecycleRule";_LRAO="LifecycleRuleAndOperator";_LRF="LifecycleRuleFilter";_LT="LocationType";_M="Marker";_MAO="MetricsAndOperator";_MAS="MaxAgeSeconds";_MB="MaxBuckets";_MC="MetricsConfiguration";_MCL="MetricsConfigurationList";_MD="MetadataDirective";_MDB="MaxDirectoryBuckets";_MDf="MfaDelete";_ME="MetadataEntry";_MF="MetricsFilter";_MFA="MFA";_MFAD="MFADelete";_MI="MetricsId";_MK="MaxKeys";_MKe="MetadataKey";_MM="MissingMeta";_MOS="MpuObjectSize";_MP="MaxParts";_MS="MetricsStatus";_MTC="MetadataTableConfiguration";_MTCR="MetadataTableConfigurationResult";_MU="MaxUploads";_MV="MetadataValue";_Me="Metrics";_Mes="Message";_Mi="Minutes";_Mo="Mode";_N="Name";_NC="NotificationConfiguration";_NCF="NotificationConfigurationFilter";_NCT="NextContinuationToken";_ND="NoncurrentDays";_NI="NotificationId";_NKM="NextKeyMarker";_NM="NextMarker";_NNV="NewerNoncurrentVersions";_NPNM="NextPartNumberMarker";_NUIM="NextUploadIdMarker";_NVE="NoncurrentVersionExpiration";_NVIM="NextVersionIdMarker";_NVT="NoncurrentVersionTransitions";_NVTo="NoncurrentVersionTransition";_O="Owner";_OA="ObjectAttributes";_OC="OwnershipControls";_OCACL="ObjectCannedACL";_OCR="OwnershipControlsRule";_OF="OptionalFields";_OI="ObjectIdentifier";_OK="ObjectKey";_OL="OutputLocation";_OLC="ObjectLockConfiguration";_OLE="ObjectLockEnabled";_OLEFB="ObjectLockEnabledForBucket";_OLLH="ObjectLockLegalHold";_OLLHS="ObjectLockLegalHoldStatus";_OLM="ObjectLockMode";_OLR="ObjectLockRetention";_OLRM="ObjectLockRetentionMode";_OLRUD="ObjectLockRetainUntilDate";_OLRb="ObjectLockRule";_OO="ObjectOwnership";_OOA="OptionalObjectAttributes";_OOw="OwnerOverride";_OP="ObjectParts";_OS="OutputSerialization";_OSGT="ObjectSizeGreaterThan";_OSGTB="ObjectSizeGreaterThanBytes";_OSLT="ObjectSizeLessThan";_OSLTB="ObjectSizeLessThanBytes";_OSV="OutputSchemaVersion";_OSb="ObjectSize";_OVI="ObjectVersionId";_Ob="Objects";_P="Prefix";_PABC="PublicAccessBlockConfiguration";_PC="PartsCount";_PDS="PartitionDateSource";_PI="ParquetInput";_PN="PartNumber";_PNM="PartNumberMarker";_PP="PartitionedPrefix";_Pa="Payer";_Par="Part";_Parq="Parquet";_Part="Parts";_Pe="Permission";_Pr="Protocol";_Pri="Priority";_Q="Quiet";_QA="QueueArn";_QC="QueueConfiguration";_QCu="QueueConfigurations";_QCuo="QuoteCharacter";_QEC="QuoteEscapeCharacter";_QF="QuoteFields";_Qu="Queue";_R="Range";_RART="RedirectAllRequestsTo";_RC="RequestCharged";_RCC="ResponseCacheControl";_RCD="ResponseContentDisposition";_RCE="ResponseContentEncoding";_RCL="ResponseContentLanguage";_RCT="ResponseContentType";_RCe="ReplicationConfiguration";_RD="RecordDelimiter";_RE="ResponseExpires";_RED="RestoreExpiryDate";_RKKID="ReplicaKmsKeyID";_RKPW="ReplaceKeyPrefixWith";_RKW="ReplaceKeyWith";_RM="ReplicaModifications";_RMS="ReplicaModificationsStatus";_ROP="RestoreOutputPath";_RP="RequestPayer";_RPB="RestrictPublicBuckets";_RPC="RequestPaymentConfiguration";_RPe="RequestProgress";_RR="RequestRoute";_RRAO="ReplicationRuleAndOperator";_RRF="ReplicationRuleFilter";_RRS="ReplicationRuleStatus";_RRT="RestoreRequestType";_RRe="ReplicationRule";_RRes="RestoreRequest";_RRo="RoutingRules";_RRou="RoutingRule";_RS="ReplicationStatus";_RSe="RestoreStatus";_RT="RequestToken";_RTS="ReplicationTimeStatus";_RTV="ReplicationTimeValue";_RTe="ReplicationTime";_RUD="RetainUntilDate";_Re="Restore";_Red="Redirect";_Ro="Role";_Ru="Rule";_Rul="Rules";_S="Status";_SA="StartAfter";_SAK="SecretAccessKey";_SBD="S3BucketDestination";_SC="StorageClass";_SCA="StorageClassAnalysis";_SCADE="StorageClassAnalysisDataExport";_SCASV="StorageClassAnalysisSchemaVersion";_SCt="StatusCode";_SDV="SkipDestinationValidation";_SK="SSE-KMS";_SKEO="SseKmsEncryptedObjects";_SKEOS="SseKmsEncryptedObjectsStatus";_SKF="S3KeyFilter";_SKe="S3Key";_SL="S3Location";_SM="SessionMode";_SOCR="SelectObjectContentRequest";_SP="SelectParameters";_SPi="SimplePrefix";_SR="ScanRange";_SS="SSE-S3";_SSC="SourceSelectionCriteria";_SSE="ServerSideEncryption";_SSEA="SSEAlgorithm";_SSEBD="ServerSideEncryptionByDefault";_SSEC="ServerSideEncryptionConfiguration";_SSECA="SSECustomerAlgorithm";_SSECK="SSECustomerKey";_SSECKMD="SSECustomerKeyMD5";_SSEKMS="SSEKMS";_SSEKMSEC="SSEKMSEncryptionContext";_SSEKMSKI="SSEKMSKeyId";_SSER="ServerSideEncryptionRule";_SSES="SSES3";_ST="SessionToken";_STBA="S3TablesBucketArn";_STD="S3TablesDestination";_STDR="S3TablesDestinationResult";_STN="S3TablesName";_S_="S3";_Sc="Schedule";_Se="Setting";_Si="Size";_St="Start";_Su="Suffix";_T="Tagging";_TA="TopicArn";_TAa="TableArn";_TB="TargetBucket";_TBA="TableBucketArn";_TC="TagCount";_TCo="TopicConfiguration";_TCop="TopicConfigurations";_TD="TaggingDirective";_TDMOS="TransitionDefaultMinimumObjectSize";_TG="TargetGrants";_TGa="TargetGrant";_TN="TableName";_TNa="TableNamespace";_TOKF="TargetObjectKeyFormat";_TP="TargetPrefix";_TPC="TotalPartsCount";_TS="TagSet";_TSC="TransitionStorageClass";_Ta="Tag";_Tag="Tags";_Ti="Tier";_Tie="Tierings";_Tier="Tiering";_Tim="Time";_To="Token";_Top="Topic";_Tr="Transitions";_Tra="Transition";_Ty="Type";_U="Upload";_UI="UploadId";_UIM="UploadIdMarker";_UM="UserMetadata";_URI="URI";_Up="Uploads";_V="Version";_VC="VersionCount";_VCe="VersioningConfiguration";_VI="VersionId";_VIM="VersionIdMarker";_Va="Value";_Ve="Versions";_WC="WebsiteConfiguration";_WOB="WriteOffsetBytes";_WRL="WebsiteRedirectLocation";_Y="Years";_a5="analytics";_ac="accelerate";_acl="acl";_ar="accept-ranges";_at="attributes";_br="bucket-region";_c2="cors";_cc="cache-control";_cd="content-disposition";_ce="content-encoding";_cl="content-language";_cl_="content-length";_cm="content-md5";_cr="content-range";_ct="content-type";_ct_="continuation-token";_d="delete";_de="delimiter";_e="expires";_en="encryption";_et="encoding-type";_eta="etag";_ex="expiresstring";_fo="fetch-owner";_i="id";_im="if-match";_ims="if-modified-since";_in="inventory";_inm="if-none-match";_it="intelligent-tiering";_ius="if-unmodified-since";_km="key-marker";_l="lifecycle";_lh="legal-hold";_lm="last-modified";_lo="location";_log="logging";_lt="list-type";_m="metrics";_mT="metadataTable";_ma="marker";_mb="max-buckets";_mdb="max-directory-buckets";_me="member";_mk="max-keys";_mp="max-parts";_mu="max-uploads";_n="notification";_oC="ownershipControls";_ol="object-lock";_p="policy";_pAB="publicAccessBlock";_pN="partNumber";_pS="policyStatus";_pnm="part-number-marker";_pr="prefix";_r="replication";_rP="requestPayment";_ra="range";_rcc="response-cache-control";_rcd="response-content-disposition";_rce="response-content-encoding";_rcl="response-content-language";_rct="response-content-type";_re="response-expires";_res="restore";_ret="retention";_s="session";_sa="start-after";_se="select";_st="select-type";_t="tagging";_to="torrent";_u="uploads";_uI="uploadId";_uim="upload-id-marker";_v="versioning";_vI="versionId";_ve='';_ver="versions";_vim="version-id-marker";_w="website";_x="xsi:type";_xaa="x-amz-acl";_xaad="x-amz-abort-date";_xaapa="x-amz-access-point-alias";_xaari="x-amz-abort-rule-id";_xaas="x-amz-archive-status";_xabgr="x-amz-bypass-governance-retention";_xabln="x-amz-bucket-location-name";_xablt="x-amz-bucket-location-type";_xabole="x-amz-bucket-object-lock-enabled";_xabolt="x-amz-bucket-object-lock-token";_xabr="x-amz-bucket-region";_xaca="x-amz-checksum-algorithm";_xacc="x-amz-checksum-crc32";_xacc_="x-amz-checksum-crc32c";_xacc__="x-amz-checksum-crc64nvme";_xacm="x-amz-checksum-mode";_xacrsba="x-amz-confirm-remove-self-bucket-access";_xacs="x-amz-checksum-sha1";_xacs_="x-amz-checksum-sha256";_xacs__="x-amz-copy-source";_xacsim="x-amz-copy-source-if-match";_xacsims="x-amz-copy-source-if-modified-since";_xacsinm="x-amz-copy-source-if-none-match";_xacsius="x-amz-copy-source-if-unmodified-since";_xacsm="x-amz-create-session-mode";_xacsr="x-amz-copy-source-range";_xacssseca="x-amz-copy-source-server-side-encryption-customer-algorithm";_xacssseck="x-amz-copy-source-server-side-encryption-customer-key";_xacssseckm="x-amz-copy-source-server-side-encryption-customer-key-md5";_xacsvi="x-amz-copy-source-version-id";_xact="x-amz-checksum-type";_xadm="x-amz-delete-marker";_xae="x-amz-expiration";_xaebo="x-amz-expected-bucket-owner";_xafec="x-amz-fwd-error-code";_xafem="x-amz-fwd-error-message";_xafhar="x-amz-fwd-header-accept-ranges";_xafhcc="x-amz-fwd-header-cache-control";_xafhcd="x-amz-fwd-header-content-disposition";_xafhce="x-amz-fwd-header-content-encoding";_xafhcl="x-amz-fwd-header-content-language";_xafhcr="x-amz-fwd-header-content-range";_xafhct="x-amz-fwd-header-content-type";_xafhe="x-amz-fwd-header-etag";_xafhe_="x-amz-fwd-header-expires";_xafhlm="x-amz-fwd-header-last-modified";_xafhxacc="x-amz-fwd-header-x-amz-checksum-crc32";_xafhxacc_="x-amz-fwd-header-x-amz-checksum-crc32c";_xafhxacc__="x-amz-fwd-header-x-amz-checksum-crc64nvme";_xafhxacs="x-amz-fwd-header-x-amz-checksum-sha1";_xafhxacs_="x-amz-fwd-header-x-amz-checksum-sha256";_xafhxadm="x-amz-fwd-header-x-amz-delete-marker";_xafhxae="x-amz-fwd-header-x-amz-expiration";_xafhxamm="x-amz-fwd-header-x-amz-missing-meta";_xafhxampc="x-amz-fwd-header-x-amz-mp-parts-count";_xafhxaollh="x-amz-fwd-header-x-amz-object-lock-legal-hold";_xafhxaolm="x-amz-fwd-header-x-amz-object-lock-mode";_xafhxaolrud="x-amz-fwd-header-x-amz-object-lock-retain-until-date";_xafhxar="x-amz-fwd-header-x-amz-restore";_xafhxarc="x-amz-fwd-header-x-amz-request-charged";_xafhxars="x-amz-fwd-header-x-amz-replication-status";_xafhxasc="x-amz-fwd-header-x-amz-storage-class";_xafhxasse="x-amz-fwd-header-x-amz-server-side-encryption";_xafhxasseakki="x-amz-fwd-header-x-amz-server-side-encryption-aws-kms-key-id";_xafhxassebke="x-amz-fwd-header-x-amz-server-side-encryption-bucket-key-enabled";_xafhxasseca="x-amz-fwd-header-x-amz-server-side-encryption-customer-algorithm";_xafhxasseckm="x-amz-fwd-header-x-amz-server-side-encryption-customer-key-md5";_xafhxatc="x-amz-fwd-header-x-amz-tagging-count";_xafhxavi="x-amz-fwd-header-x-amz-version-id";_xafs="x-amz-fwd-status";_xagfc="x-amz-grant-full-control";_xagr="x-amz-grant-read";_xagra="x-amz-grant-read-acp";_xagw="x-amz-grant-write";_xagwa="x-amz-grant-write-acp";_xaimit="x-amz-if-match-initiated-time";_xaimlmt="x-amz-if-match-last-modified-time";_xaims="x-amz-if-match-size";_xam="x-amz-mfa";_xamd="x-amz-metadata-directive";_xamm="x-amz-missing-meta";_xamos="x-amz-mp-object-size";_xamp="x-amz-max-parts";_xampc="x-amz-mp-parts-count";_xaoa="x-amz-object-attributes";_xaollh="x-amz-object-lock-legal-hold";_xaolm="x-amz-object-lock-mode";_xaolrud="x-amz-object-lock-retain-until-date";_xaoo="x-amz-object-ownership";_xaooa="x-amz-optional-object-attributes";_xaos="x-amz-object-size";_xapnm="x-amz-part-number-marker";_xar="x-amz-restore";_xarc="x-amz-request-charged";_xarop="x-amz-restore-output-path";_xarp="x-amz-request-payer";_xarr="x-amz-request-route";_xars="x-amz-replication-status";_xart="x-amz-request-token";_xasc="x-amz-storage-class";_xasca="x-amz-sdk-checksum-algorithm";_xasdv="x-amz-skip-destination-validation";_xasebo="x-amz-source-expected-bucket-owner";_xasse="x-amz-server-side-encryption";_xasseakki="x-amz-server-side-encryption-aws-kms-key-id";_xassebke="x-amz-server-side-encryption-bucket-key-enabled";_xassec="x-amz-server-side-encryption-context";_xasseca="x-amz-server-side-encryption-customer-algorithm";_xasseck="x-amz-server-side-encryption-customer-key";_xasseckm="x-amz-server-side-encryption-customer-key-md5";_xat="x-amz-tagging";_xatc="x-amz-tagging-count";_xatd="x-amz-tagging-directive";_xatdmos="x-amz-transition-default-minimum-object-size";_xavi="x-amz-version-id";_xawob="x-amz-write-offset-bytes";_xawrl="x-amz-website-redirect-location";_xi="x-id";CreateSessionCommand=class extends(Command.classBuilder().ep({...commonParams,DisableS3ExpressSessionAuth:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","CreateSession",{}).n("S3Client","CreateSessionCommand").f(CreateSessionRequestFilterSensitiveLog,CreateSessionOutputFilterSensitiveLog).ser(se_CreateSessionCommand).de(de_CreateSessionCommand).build()){};fromUtf84=input=>(new TextEncoder).encode(input);SHA_1_HMAC_ALGO={name:"HMAC",hash:SHA_1_HASH={name:"SHA-1"}};EMPTY_DATA_SHA_1=new Uint8Array([218,57,163,238,94,107,75,13,50,85,191,239,149,96,24,144,175,216,7,9]);fallbackWindow={};Sha1=function(){function Sha13(secret){this.toHash=new Uint8Array(0);if(void 0!==secret){this.key=new Promise((function(resolve,reject){locateWindow().crypto.subtle.importKey("raw",convertToBuffer2(secret),SHA_1_HMAC_ALGO,!1,["sign"]).then(resolve,reject)}));this.key.catch((function(){}))}}Sha13.prototype.update=function(data){var update2,typedArray;if(!isEmptyData2(data)){update2=convertToBuffer2(data);(typedArray=new Uint8Array(this.toHash.byteLength+update2.byteLength)).set(this.toHash,0);typedArray.set(update2,this.toHash.byteLength);this.toHash=typedArray}};Sha13.prototype.digest=function(){var _this=this;return this.key?this.key.then((function(key3){return locateWindow().crypto.subtle.sign(SHA_1_HMAC_ALGO,key3,_this.toHash).then((function(data){return new Uint8Array(data)}))})):isEmptyData2(this.toHash)?Promise.resolve(EMPTY_DATA_SHA_1):Promise.resolve().then((function(){return locateWindow().crypto.subtle.digest(SHA_1_HASH,_this.toHash)})).then((function(data){return Promise.resolve(new Uint8Array(data))}))};Sha13.prototype.reset=function(){this.toHash=new Uint8Array(0)};return Sha13}();subtleCryptoMethods=["decrypt","digest","encrypt","exportKey","generateKey","importKey","sign","verify"];Sha12=function(){function Sha13(secret){if(!supportsWebCrypto(locateWindow()))throw new Error("SHA1 not supported");this.hash=new Sha1(secret)}Sha13.prototype.update=function(data,encoding){this.hash.update(convertToBuffer(data))};Sha13.prototype.digest=function(){return this.hash.digest()};Sha13.prototype.reset=function(){this.hash.reset()};return Sha13}();SHA_256_HMAC_ALGO={name:"HMAC",hash:SHA_256_HASH={name:"SHA-256"}};EMPTY_DATA_SHA_256=new Uint8Array([227,176,196,66,152,252,28,20,154,251,244,200,153,111,185,36,39,174,65,228,100,155,147,76,164,149,153,27,120,82,184,85]);Sha256=function(){function Sha2564(secret){this.toHash=new Uint8Array(0);this.secret=secret;this.reset()}Sha2564.prototype.update=function(data){var update2,typedArray;if(!isEmptyData(data)){update2=convertToBuffer(data);(typedArray=new Uint8Array(this.toHash.byteLength+update2.byteLength)).set(this.toHash,0);typedArray.set(update2,this.toHash.byteLength);this.toHash=typedArray}};Sha2564.prototype.digest=function(){var _this=this;return this.key?this.key.then((function(key3){return locateWindow().crypto.subtle.sign(SHA_256_HMAC_ALGO,key3,_this.toHash).then((function(data){return new Uint8Array(data)}))})):isEmptyData(this.toHash)?Promise.resolve(EMPTY_DATA_SHA_256):Promise.resolve().then((function(){return locateWindow().crypto.subtle.digest(SHA_256_HASH,_this.toHash)})).then((function(data){return Promise.resolve(new Uint8Array(data))}))};Sha2564.prototype.reset=function(){var _this=this;this.toHash=new Uint8Array(0);if(this.secret&&void 0!==this.secret){this.key=new Promise((function(resolve,reject){locateWindow().crypto.subtle.importKey("raw",convertToBuffer(_this.secret),SHA_256_HMAC_ALGO,!1,["sign"]).then(resolve,reject)}));this.key.catch((function(){}))}};return Sha2564}();BLOCK_SIZE=64;KEY=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);INIT=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];MAX_HASHABLE_LENGTH=Math.pow(2,53)-1;RawSha256=function(){function RawSha2562(){this.state=Int32Array.from(INIT);this.temp=new Int32Array(64);this.buffer=new Uint8Array(64);this.bufferLength=0;this.bytesHashed=0;this.finished=!1}RawSha2562.prototype.update=function(data){var position,byteLength;if(this.finished)throw new Error("Attempted to update an already finished hash.");position=0;byteLength=data.byteLength;this.bytesHashed+=byteLength;if(8*this.bytesHashed>MAX_HASHABLE_LENGTH)throw new Error("Cannot hash more than 2^53 - 1 bits");for(;byteLength>0;){this.buffer[this.bufferLength++]=data[position++];byteLength--;if(this.bufferLength===BLOCK_SIZE){this.hashBuffer();this.bufferLength=0}}};RawSha2562.prototype.digest=function(){var bitsHashed,bufferView,undecoratedLength,i2,out;if(!this.finished){bitsHashed=8*this.bytesHashed;bufferView=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength);undecoratedLength=this.bufferLength;bufferView.setUint8(this.bufferLength++,128);if(undecoratedLength%BLOCK_SIZE>=BLOCK_SIZE-8){for(i2=this.bufferLength;i2>>24&255;out[4*i2+1]=this.state[i2]>>>16&255;out[4*i2+2]=this.state[i2]>>>8&255;out[4*i2+3]=this.state[i2]>>>0&255}return out};RawSha2562.prototype.hashBuffer=function(){var i2,u2,t1_1,t2_1,t1,t22,buffer=this.buffer,state2=this.state,state0=state2[0],state1=state2[1],state22=state2[2],state3=state2[3],state4=state2[4],state5=state2[5],state6=state2[6],state7=state2[7];for(i2=0;i2>>17|u2<<15)^(u2>>>19|u2<<13)^u2>>>10;t2_1=((u2=this.temp[i2-15])>>>7|u2<<25)^(u2>>>18|u2<<14)^u2>>>3;this.temp[i2]=(t1_1+this.temp[i2-7]|0)+(t2_1+this.temp[i2-16]|0)}t1=(((state4>>>6|state4<<26)^(state4>>>11|state4<<21)^(state4>>>25|state4<<7))+(state4&state5^~state4&state6)|0)+(state7+(KEY[i2]+this.temp[i2]|0)|0)|0;t22=((state0>>>2|state0<<30)^(state0>>>13|state0<<19)^(state0>>>22|state0<<10))+(state0&state1^state0&state22^state1&state22)|0;state7=state6;state6=state5;state5=state4;state4=state3+t1|0;state3=state22;state22=state1;state1=state0;state0=t1+t22|0}state2[0]+=state0;state2[1]+=state1;state2[2]+=state22;state2[3]+=state3;state2[4]+=state4;state2[5]+=state5;state2[6]+=state6;state2[7]+=state7};return RawSha2562}();Sha2562=function(){function Sha2564(secret){this.secret=secret;this.hash=new RawSha256;this.reset()}Sha2564.prototype.update=function(toHash){if(!isEmptyData(toHash)&&!this.error)try{this.hash.update(convertToBuffer(toHash))}catch(e3){this.error=e3}};Sha2564.prototype.digestSync=function(){if(this.error)throw this.error;if(this.outer){this.outer.finished||this.outer.update(this.hash.digest());return this.outer.digest()}return this.hash.digest()};Sha2564.prototype.digest=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(_a8){return[2,this.digestSync()]}))}))};Sha2564.prototype.reset=function(){var inner,outer,i2;this.hash=new RawSha256;if(this.secret){this.outer=new RawSha256;inner=bufferFromSecret(this.secret);(outer=new Uint8Array(BLOCK_SIZE)).set(inner);for(i2=0;i2async config=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h;const parsedUA="undefined"!=typeof window&&(null==(_a8=null==window?void 0:window.navigator)?void 0:_a8.userAgent)?import_bowser.default.parse(window.navigator.userAgent):void 0,sections=[["aws-sdk-js",clientVersion],["ua","2.1"],[`os/${(null==(_b5=null==parsedUA?void 0:parsedUA.os)?void 0:_b5.name)||"other"}`,null==(_c3=null==parsedUA?void 0:parsedUA.os)?void 0:_c3.version],["lang/js"],["md/browser",`${null!=(_e2=null==(_d2=null==parsedUA?void 0:parsedUA.browser)?void 0:_d2.name)?_e2:"unknown"}_${null!=(_g=null==(_f=null==parsedUA?void 0:parsedUA.browser)?void 0:_f.version)?_g:"unknown"}`]];serviceId&§ions.push([`api/${serviceId}`,clientVersion]);const appId=await(null==(_h=null==config?void 0:config.userAgentAppId)?void 0:_h.call(config));appId&§ions.push([`app/${appId}`]);return sections};Int642=class _Int64{constructor(bytes){this.bytes=bytes;if(8!==bytes.byteLength)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(number){if(number>0x8000000000000000||number<-0x8000000000000000)throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);const bytes=new Uint8Array(8);for(let i2=7,remaining=Math.abs(Math.round(number));i2>-1&&remaining>0;i2--,remaining/=256)bytes[i2]=remaining;number<0&&negate2(bytes);return new _Int64(bytes)}valueOf(){const bytes=this.bytes.slice(0),negative=128&bytes[0];negative&&negate2(bytes);return parseInt(toHex2(bytes),16)*(negative?-1:1)}toString(){return String(this.valueOf())}};HeaderMarshaller=class{constructor(toUtf82,fromUtf85){this.toUtf8=toUtf82;this.fromUtf8=fromUtf85}format(headers){const chunks=[];for(const headerName of Object.keys(headers)){const bytes=this.fromUtf8(headerName);chunks.push(Uint8Array.from([bytes.byteLength]),bytes,this.formatHeaderValue(headers[headerName]))}const out=new Uint8Array(chunks.reduce(((carry,bytes)=>carry+bytes.byteLength),0));let position=0;for(const chunk of chunks){out.set(chunk,position);position+=chunk.byteLength}return out}formatHeaderValue(header){switch(header.type){case"boolean":return Uint8Array.from([header.value?0:1]);case"byte":return Uint8Array.from([2,header.value]);case"short":const shortView=new DataView(new ArrayBuffer(3));shortView.setUint8(0,3);shortView.setInt16(1,header.value,!1);return new Uint8Array(shortView.buffer);case"integer":const intView=new DataView(new ArrayBuffer(5));intView.setUint8(0,4);intView.setInt32(1,header.value,!1);return new Uint8Array(intView.buffer);case"long":const longBytes=new Uint8Array(9);longBytes[0]=5;longBytes.set(header.value.bytes,1);return longBytes;case"binary":const binView=new DataView(new ArrayBuffer(3+header.value.byteLength));binView.setUint8(0,6);binView.setUint16(1,header.value.byteLength,!1);const binBytes=new Uint8Array(binView.buffer);binBytes.set(header.value,3);return binBytes;case"string":const utf8Bytes=this.fromUtf8(header.value),strView=new DataView(new ArrayBuffer(3+utf8Bytes.byteLength));strView.setUint8(0,7);strView.setUint16(1,utf8Bytes.byteLength,!1);const strBytes=new Uint8Array(strView.buffer);strBytes.set(utf8Bytes,3);return strBytes;case"timestamp":const tsBytes=new Uint8Array(9);tsBytes[0]=8;tsBytes.set(Int642.fromNumber(header.value.valueOf()).bytes,1);return tsBytes;case"uuid":if(!UUID_PATTERN2.test(header.value))throw new Error(`Invalid UUID received: ${header.value}`);const uuidBytes=new Uint8Array(17);uuidBytes[0]=9;uuidBytes.set(fromHex(header.value.replace(/\-/g,"")),1);return uuidBytes}}parse(headers){const out={};let position=0;for(;positionmessage,isEndOfStream:()=>isEndOfStream}}getAvailableMessages(){const messages=this.messageBuffer;this.messageBuffer=[];const isEndOfStream=this.isEndOfStream;return{getMessages:()=>messages,isEndOfStream:()=>isEndOfStream}}encode({headers:rawHeaders,body}){const headers=this.headerMarshaller.format(rawHeaders),length=headers.byteLength+body.byteLength+16,out=new Uint8Array(length),view=new DataView(out.buffer,out.byteOffset,out.byteLength),checksum=new Crc32;view.setUint32(0,length,!1);view.setUint32(4,headers.byteLength,!1);view.setUint32(8,checksum.update(out.subarray(0,8)).digest(),!1);out.set(headers,12);out.set(body,headers.byteLength+12);view.setUint32(length-4,checksum.update(out.subarray(8,length-4)).digest(),!1);return out}decode(message){const{headers,body}=splitMessage(message);return{headers:this.headerMarshaller.parse(headers),body}}formatHeaders(rawHeaders){return this.headerMarshaller.format(rawHeaders)}};MessageDecoderStream=class{constructor(options){this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const bytes of this.options.inputStream){const decoded=this.options.decoder.decode(bytes);yield decoded}}};MessageEncoderStream=class{constructor(options){this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const msg of this.options.messageStream){const encoded=this.options.encoder.encode(msg);yield encoded}this.options.includeEndFrame&&(yield new Uint8Array(0))}};SmithyMessageDecoderStream=class{constructor(options){this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const message of this.options.messageStream){const deserialized=await this.options.deserializer(message);void 0!==deserialized&&(yield deserialized)}}};SmithyMessageEncoderStream=class{constructor(options){this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const chunk of this.options.inputStream){const payloadBuf=this.options.serializer(chunk);yield payloadBuf}}};EventStreamMarshaller=class{constructor({utf8Encoder,utf8Decoder}){this.eventStreamCodec=new EventStreamCodec(utf8Encoder,utf8Decoder);this.utfEncoder=utf8Encoder}deserialize(body,deserializer){const inputStream=getChunkedStream(body);return new SmithyMessageDecoderStream({messageStream:new MessageDecoderStream({inputStream,decoder:this.eventStreamCodec}),deserializer:getMessageUnmarshaller(deserializer,this.utfEncoder)})}serialize(inputStream,serializer){return new MessageEncoderStream({messageStream:new SmithyMessageEncoderStream({inputStream,serializer}),encoder:this.eventStreamCodec,includeEndFrame:!0})}};readableStreamtoIterable=readableStream=>({[Symbol.asyncIterator]:async function*(){const reader=readableStream.getReader();try{for(;;){const{done,value}=await reader.read();if(done)return;yield value}}finally{reader.releaseLock()}}});iterableToReadableStream=asyncIterable=>{const iterator=asyncIterable[Symbol.asyncIterator]();return new ReadableStream({async pull(controller){const{done,value}=await iterator.next();if(done)return controller.close();controller.enqueue(value)}})};EventStreamMarshaller2=class{constructor({utf8Encoder,utf8Decoder}){this.universalMarshaller=new EventStreamMarshaller({utf8Decoder,utf8Encoder})}deserialize(body,deserializer){const bodyIterable=isReadableStream2(body)?readableStreamtoIterable(body):body;return this.universalMarshaller.deserialize(bodyIterable,deserializer)}serialize(input,serializer){const serialziedIterable=this.universalMarshaller.serialize(input,serializer);return"function"==typeof ReadableStream?iterableToReadableStream(serialziedIterable):serialziedIterable}};isReadableStream2=body=>"function"==typeof ReadableStream&&body instanceof ReadableStream;eventStreamSerdeProvider2=options=>new EventStreamMarshaller2(options);blobHasher=async function blobHasher2(hashCtor,blob){const hash3=new hashCtor;await blobReader(blob,(chunk=>{hash3.update(chunk)}));return hash3.digest()};invalidProvider=message=>()=>Promise.reject(message);INIT2=[1732584193,4023233417,2562383102,271733878];Md5=class{constructor(){this.reset()}update(sourceData){if(isEmptyData3(sourceData))return;if(this.finished)throw new Error("Attempted to update an already finished hash.");const data=convertToBuffer3(sourceData);let position=0,{byteLength}=data;this.bytesHashed+=byteLength;for(;byteLength>0;){this.buffer.setUint8(this.bufferLength++,data[position++]);byteLength--;if(64===this.bufferLength){this.hashBuffer();this.bufferLength=0}}}async digest(){if(!this.finished){const{buffer,bufferLength:undecoratedLength,bytesHashed}=this,bitsHashed=8*bytesHashed;buffer.setUint8(this.bufferLength++,128);if(undecoratedLength%64>=56){for(let i2=this.bufferLength;i2<64;i2++)buffer.setUint8(i2,0);this.hashBuffer();this.bufferLength=0}for(let i2=this.bufferLength;i2<56;i2++)buffer.setUint8(i2,0);buffer.setUint32(56,bitsHashed>>>0,!0);buffer.setUint32(60,Math.floor(bitsHashed/4294967296),!0);this.hashBuffer();this.finished=!0}const out=new DataView(new ArrayBuffer(16));for(let i2=0;i2<4;i2++)out.setUint32(4*i2,this.state[i2],!0);return new Uint8Array(out.buffer,out.byteOffset,out.byteLength)}hashBuffer(){const{buffer,state:state2}=this;let a2=state2[0],b3=state2[1],c3=state2[2],d4=state2[3];a2=ff(a2,b3,c3,d4,buffer.getUint32(0,!0),7,3614090360);d4=ff(d4,a2,b3,c3,buffer.getUint32(4,!0),12,3905402710);c3=ff(c3,d4,a2,b3,buffer.getUint32(8,!0),17,606105819);b3=ff(b3,c3,d4,a2,buffer.getUint32(12,!0),22,3250441966);a2=ff(a2,b3,c3,d4,buffer.getUint32(16,!0),7,4118548399);d4=ff(d4,a2,b3,c3,buffer.getUint32(20,!0),12,1200080426);c3=ff(c3,d4,a2,b3,buffer.getUint32(24,!0),17,2821735955);b3=ff(b3,c3,d4,a2,buffer.getUint32(28,!0),22,4249261313);a2=ff(a2,b3,c3,d4,buffer.getUint32(32,!0),7,1770035416);d4=ff(d4,a2,b3,c3,buffer.getUint32(36,!0),12,2336552879);c3=ff(c3,d4,a2,b3,buffer.getUint32(40,!0),17,4294925233);b3=ff(b3,c3,d4,a2,buffer.getUint32(44,!0),22,2304563134);a2=ff(a2,b3,c3,d4,buffer.getUint32(48,!0),7,1804603682);d4=ff(d4,a2,b3,c3,buffer.getUint32(52,!0),12,4254626195);c3=ff(c3,d4,a2,b3,buffer.getUint32(56,!0),17,2792965006);b3=ff(b3,c3,d4,a2,buffer.getUint32(60,!0),22,1236535329);a2=gg(a2,b3,c3,d4,buffer.getUint32(4,!0),5,4129170786);d4=gg(d4,a2,b3,c3,buffer.getUint32(24,!0),9,3225465664);c3=gg(c3,d4,a2,b3,buffer.getUint32(44,!0),14,643717713);b3=gg(b3,c3,d4,a2,buffer.getUint32(0,!0),20,3921069994);a2=gg(a2,b3,c3,d4,buffer.getUint32(20,!0),5,3593408605);d4=gg(d4,a2,b3,c3,buffer.getUint32(40,!0),9,38016083);c3=gg(c3,d4,a2,b3,buffer.getUint32(60,!0),14,3634488961);b3=gg(b3,c3,d4,a2,buffer.getUint32(16,!0),20,3889429448);a2=gg(a2,b3,c3,d4,buffer.getUint32(36,!0),5,568446438);d4=gg(d4,a2,b3,c3,buffer.getUint32(56,!0),9,3275163606);c3=gg(c3,d4,a2,b3,buffer.getUint32(12,!0),14,4107603335);b3=gg(b3,c3,d4,a2,buffer.getUint32(32,!0),20,1163531501);a2=gg(a2,b3,c3,d4,buffer.getUint32(52,!0),5,2850285829);d4=gg(d4,a2,b3,c3,buffer.getUint32(8,!0),9,4243563512);c3=gg(c3,d4,a2,b3,buffer.getUint32(28,!0),14,1735328473);b3=gg(b3,c3,d4,a2,buffer.getUint32(48,!0),20,2368359562);a2=hh(a2,b3,c3,d4,buffer.getUint32(20,!0),4,4294588738);d4=hh(d4,a2,b3,c3,buffer.getUint32(32,!0),11,2272392833);c3=hh(c3,d4,a2,b3,buffer.getUint32(44,!0),16,1839030562);b3=hh(b3,c3,d4,a2,buffer.getUint32(56,!0),23,4259657740);a2=hh(a2,b3,c3,d4,buffer.getUint32(4,!0),4,2763975236);d4=hh(d4,a2,b3,c3,buffer.getUint32(16,!0),11,1272893353);c3=hh(c3,d4,a2,b3,buffer.getUint32(28,!0),16,4139469664);b3=hh(b3,c3,d4,a2,buffer.getUint32(40,!0),23,3200236656);a2=hh(a2,b3,c3,d4,buffer.getUint32(52,!0),4,681279174);d4=hh(d4,a2,b3,c3,buffer.getUint32(0,!0),11,3936430074);c3=hh(c3,d4,a2,b3,buffer.getUint32(12,!0),16,3572445317);b3=hh(b3,c3,d4,a2,buffer.getUint32(24,!0),23,76029189);a2=hh(a2,b3,c3,d4,buffer.getUint32(36,!0),4,3654602809);d4=hh(d4,a2,b3,c3,buffer.getUint32(48,!0),11,3873151461);c3=hh(c3,d4,a2,b3,buffer.getUint32(60,!0),16,530742520);b3=hh(b3,c3,d4,a2,buffer.getUint32(8,!0),23,3299628645);a2=ii(a2,b3,c3,d4,buffer.getUint32(0,!0),6,4096336452);d4=ii(d4,a2,b3,c3,buffer.getUint32(28,!0),10,1126891415);c3=ii(c3,d4,a2,b3,buffer.getUint32(56,!0),15,2878612391);b3=ii(b3,c3,d4,a2,buffer.getUint32(20,!0),21,4237533241);a2=ii(a2,b3,c3,d4,buffer.getUint32(48,!0),6,1700485571);d4=ii(d4,a2,b3,c3,buffer.getUint32(12,!0),10,2399980690);c3=ii(c3,d4,a2,b3,buffer.getUint32(40,!0),15,4293915773);b3=ii(b3,c3,d4,a2,buffer.getUint32(4,!0),21,2240044497);a2=ii(a2,b3,c3,d4,buffer.getUint32(32,!0),6,1873313359);d4=ii(d4,a2,b3,c3,buffer.getUint32(60,!0),10,4264355552);c3=ii(c3,d4,a2,b3,buffer.getUint32(24,!0),15,2734768916);b3=ii(b3,c3,d4,a2,buffer.getUint32(52,!0),21,1309151649);a2=ii(a2,b3,c3,d4,buffer.getUint32(16,!0),6,4149444226);d4=ii(d4,a2,b3,c3,buffer.getUint32(44,!0),10,3174756917);c3=ii(c3,d4,a2,b3,buffer.getUint32(8,!0),15,718787259);b3=ii(b3,c3,d4,a2,buffer.getUint32(36,!0),21,3951481745);state2[0]=a2+state2[0]&4294967295;state2[1]=b3+state2[1]&4294967295;state2[2]=c3+state2[2]&4294967295;state2[3]=d4+state2[3]&4294967295}reset(){this.state=Uint32Array.from(INIT2);this.buffer=new DataView(new ArrayBuffer(64));this.bufferLength=0;this.bytesHashed=0;this.finished=!1}};TEXT_ENCODER="function"==typeof TextEncoder?new TextEncoder:null;calculateBodyLength=body=>{if("string"==typeof body){if(TEXT_ENCODER)return TEXT_ENCODER.encode(body).byteLength;let len=body.length;for(let i2=len-1;i2>=0;i2--){const code=body.charCodeAt(i2);code>127&&code<=2047?len++:code>2047&&code<=65535&&(len+=2);code>=56320&&code<=57343&&i2--}return len}if("number"==typeof body.byteLength)return body.byteLength;if("number"==typeof body.size)return body.size;throw new Error(`Body Length computation failed for ${body}`)};getRuntimeConfig=config=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h,_i2,_j,_k,_l2,_m2,_n2,_o,_p2,_q;return{apiVersion:"2006-03-01",base64Decoder:null!=(_a8=null==config?void 0:config.base64Decoder)?_a8:fromBase64,base64Encoder:null!=(_b5=null==config?void 0:config.base64Encoder)?_b5:toBase64,disableHostPrefix:null!=(_c3=null==config?void 0:config.disableHostPrefix)&&_c3,endpointProvider:null!=(_d2=null==config?void 0:config.endpointProvider)?_d2:defaultEndpointResolver,extensions:null!=(_e2=null==config?void 0:config.extensions)?_e2:[],getAwsChunkedEncodingStream:null!=(_f=null==config?void 0:config.getAwsChunkedEncodingStream)?_f:getAwsChunkedEncodingStream,httpAuthSchemeProvider:null!=(_g=null==config?void 0:config.httpAuthSchemeProvider)?_g:defaultS3HttpAuthSchemeProvider,httpAuthSchemes:null!=(_h=null==config?void 0:config.httpAuthSchemes)?_h:[{schemeId:"aws.auth#sigv4",identityProvider:ipc=>ipc.getIdentityProvider("aws.auth#sigv4"),signer:new AwsSdkSigV4Signer},{schemeId:"aws.auth#sigv4a",identityProvider:ipc=>ipc.getIdentityProvider("aws.auth#sigv4a"),signer:new AwsSdkSigV4ASigner}],logger:null!=(_i2=null==config?void 0:config.logger)?_i2:new NoOpLogger,sdkStreamMixin:null!=(_j=null==config?void 0:config.sdkStreamMixin)?_j:sdkStreamMixin,serviceId:null!=(_k=null==config?void 0:config.serviceId)?_k:"S3",signerConstructor:null!=(_l2=null==config?void 0:config.signerConstructor)?_l2:SignatureV4MultiRegion,signingEscapePath:null!=(_m2=null==config?void 0:config.signingEscapePath)&&_m2,urlParser:null!=(_n2=null==config?void 0:config.urlParser)?_n2:parseUrl,useArnRegion:null!=(_o=null==config?void 0:config.useArnRegion)&&_o,utf8Decoder:null!=(_p2=null==config?void 0:config.utf8Decoder)?_p2:fromUtf8,utf8Encoder:null!=(_q=null==config?void 0:config.utf8Encoder)?_q:toUtf8}};DEFAULTS_MODE_OPTIONS=["in-region","cross-region","mobile","standard","legacy"];import_bowser2=__toESM(require_es5());resolveDefaultsModeConfig=({defaultsMode}={})=>memoize((async()=>{const mode="function"==typeof defaultsMode?await defaultsMode():defaultsMode;switch(null==mode?void 0:mode.toLowerCase()){case"auto":return Promise.resolve(isMobileBrowser()?"mobile":"standard");case"mobile":case"in-region":case"cross-region":case"standard":case"legacy":return Promise.resolve(null==mode?void 0:mode.toLocaleLowerCase());case void 0:return Promise.resolve("legacy");default:throw new Error(`Invalid parameter for "defaultsMode", expect ${DEFAULTS_MODE_OPTIONS.join(", ")}, got ${mode}`)}}));isMobileBrowser=()=>{var _a8,_b5;const parsedUA="undefined"!=typeof window&&(null==(_a8=null==window?void 0:window.navigator)?void 0:_a8.userAgent)?import_bowser2.default.parse(window.navigator.userAgent):void 0,platform=null==(_b5=null==parsedUA?void 0:parsedUA.platform)?void 0:_b5.type;return"tablet"===platform||"mobile"===platform};getRuntimeConfig2=config=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h,_i2,_j,_k,_l2,_m2,_n2,_o;const defaultsMode=resolveDefaultsModeConfig(config),defaultConfigProvider=()=>defaultsMode().then(loadConfigsForDefaultMode),clientSharedValues=getRuntimeConfig(config);return{...clientSharedValues,...config,runtime:"browser",defaultsMode,bodyLengthChecker:null!=(_a8=null==config?void 0:config.bodyLengthChecker)?_a8:calculateBodyLength,credentialDefaultProvider:null!=(_b5=null==config?void 0:config.credentialDefaultProvider)?_b5:_=>()=>Promise.reject(new Error("Credential is missing")),defaultUserAgentProvider:null!=(_c3=null==config?void 0:config.defaultUserAgentProvider)?_c3:createDefaultUserAgentProvider({serviceId:clientSharedValues.serviceId,clientVersion:"3.808.0"}),eventStreamSerdeProvider:null!=(_d2=null==config?void 0:config.eventStreamSerdeProvider)?_d2:eventStreamSerdeProvider2,maxAttempts:null!=(_e2=null==config?void 0:config.maxAttempts)?_e2:3,md5:null!=(_f=null==config?void 0:config.md5)?_f:Md5,region:null!=(_g=null==config?void 0:config.region)?_g:invalidProvider("Region is missing"),requestHandler:FetchHttpHandler.create(null!=(_h=null==config?void 0:config.requestHandler)?_h:defaultConfigProvider),retryMode:null!=(_i2=null==config?void 0:config.retryMode)?_i2:async()=>(await defaultConfigProvider()).retryMode||DEFAULT_RETRY_MODE,sha1:null!=(_j=null==config?void 0:config.sha1)?_j:Sha12,sha256:null!=(_k=null==config?void 0:config.sha256)?_k:Sha2563,streamCollector:null!=(_l2=null==config?void 0:config.streamCollector)?_l2:streamCollector,streamHasher:null!=(_m2=null==config?void 0:config.streamHasher)?_m2:blobHasher,useDualstackEndpoint:null!=(_n2=null==config?void 0:config.useDualstackEndpoint)?_n2:()=>Promise.resolve(!1),useFipsEndpoint:null!=(_o=null==config?void 0:config.useFipsEndpoint)?_o:()=>Promise.resolve(!1)}};getAwsRegionExtensionConfiguration=runtimeConfig=>({setRegion(region){runtimeConfig.region=region},region:()=>runtimeConfig.region});resolveAwsRegionExtensionConfiguration=awsRegionExtensionConfiguration=>({region:awsRegionExtensionConfiguration.region()});getHttpAuthExtensionConfiguration=runtimeConfig=>{const _httpAuthSchemes=runtimeConfig.httpAuthSchemes;let _httpAuthSchemeProvider=runtimeConfig.httpAuthSchemeProvider,_credentials=runtimeConfig.credentials;return{setHttpAuthScheme(httpAuthScheme){const index6=_httpAuthSchemes.findIndex((scheme=>scheme.schemeId===httpAuthScheme.schemeId));-1===index6?_httpAuthSchemes.push(httpAuthScheme):_httpAuthSchemes.splice(index6,1,httpAuthScheme)},httpAuthSchemes:()=>_httpAuthSchemes,setHttpAuthSchemeProvider(httpAuthSchemeProvider){_httpAuthSchemeProvider=httpAuthSchemeProvider},httpAuthSchemeProvider:()=>_httpAuthSchemeProvider,setCredentials(credentials){_credentials=credentials},credentials:()=>_credentials}};resolveHttpAuthRuntimeConfig=config=>({httpAuthSchemes:config.httpAuthSchemes(),httpAuthSchemeProvider:config.httpAuthSchemeProvider(),credentials:config.credentials()});resolveRuntimeExtensions=(runtimeConfig,extensions)=>{const extensionConfiguration=Object.assign(getAwsRegionExtensionConfiguration(runtimeConfig),getDefaultExtensionConfiguration(runtimeConfig),getHttpHandlerExtensionConfiguration(runtimeConfig),getHttpAuthExtensionConfiguration(runtimeConfig));extensions.forEach((extension=>extension.configure(extensionConfiguration)));return Object.assign(runtimeConfig,resolveAwsRegionExtensionConfiguration(extensionConfiguration),resolveDefaultRuntimeConfig2(extensionConfiguration),resolveHttpHandlerRuntimeConfig(extensionConfiguration),resolveHttpAuthRuntimeConfig(extensionConfiguration))};S3Client=class extends Client{constructor(...[configuration]){const _config_0=getRuntimeConfig2(configuration||{});super(_config_0);__publicField(this,"config");this.initConfig=_config_0;const _config_2=resolveUserAgentConfig(resolveClientEndpointParameters(_config_0)),_config_3=resolveFlexibleChecksumsConfig(_config_2),_config_4=resolveRetryConfig(_config_3),_config_6=resolveHostHeaderConfig(resolveRegionConfig(_config_4)),_config_7=resolveEndpointConfig(_config_6),_config_8=resolveEventStreamSerdeConfig(_config_7),_config_9=resolveHttpAuthSchemeConfig(_config_8),_config_10=resolveS3Config(_config_9,{session:[()=>this,CreateSessionCommand]}),_config_11=resolveRuntimeExtensions(_config_10,(null==configuration?void 0:configuration.extensions)||[]);this.config=_config_11;this.middlewareStack.use(getUserAgentPlugin(this.config));this.middlewareStack.use(getRetryPlugin(this.config));this.middlewareStack.use(getContentLengthPlugin(this.config));this.middlewareStack.use(getHostHeaderPlugin(this.config));this.middlewareStack.use(getLoggerPlugin(this.config));this.middlewareStack.use(getRecursionDetectionPlugin(this.config));this.middlewareStack.use(getHttpAuthSchemeEndpointRuleSetPlugin(this.config,{httpAuthSchemeParametersProvider:defaultS3HttpAuthSchemeParametersProvider,identityProviderConfigProvider:async config=>new DefaultIdentityProviderConfig({"aws.auth#sigv4":config.credentials,"aws.auth#sigv4a":config.credentials})}));this.middlewareStack.use(getHttpSigningPlugin(this.config));this.middlewareStack.use(getValidateBucketNamePlugin(this.config));this.middlewareStack.use(getAddExpectContinuePlugin(this.config));this.middlewareStack.use(getRegionRedirectMiddlewarePlugin(this.config));this.middlewareStack.use(getS3ExpressPlugin(this.config));this.middlewareStack.use(getS3ExpressHttpSigningPlugin(this.config))}destroy(){super.destroy()}};AbortMultipartUploadCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","AbortMultipartUpload",{}).n("S3Client","AbortMultipartUploadCommand").f(void 0,void 0).ser(se_AbortMultipartUploadCommand).de(de_AbortMultipartUploadCommand).build()){};ssecMiddlewareOptions={name:"ssecMiddleware",step:"initialize",tags:["SSE"],override:!0};getSsecPlugin=config=>({applyToStack:clientStack=>{clientStack.add(ssecMiddleware(config),ssecMiddlewareOptions)}});CompleteMultipartUploadCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]})).s("AmazonS3","CompleteMultipartUpload",{}).n("S3Client","CompleteMultipartUploadCommand").f(CompleteMultipartUploadRequestFilterSensitiveLog,CompleteMultipartUploadOutputFilterSensitiveLog).ser(se_CompleteMultipartUploadCommand).de(de_CompleteMultipartUploadCommand).build()){};CopyObjectCommand=class extends(Command.classBuilder().ep({...commonParams,DisableS3ExpressSessionAuth:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"},CopySource:{type:"contextParams",name:"CopySource"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]})).s("AmazonS3","CopyObject",{}).n("S3Client","CopyObjectCommand").f(CopyObjectRequestFilterSensitiveLog,CopyObjectOutputFilterSensitiveLog).ser(se_CopyObjectCommand).de(de_CopyObjectCommand).build()){};locationConstraintMiddlewareOptions={step:"initialize",tags:["LOCATION_CONSTRAINT","CREATE_BUCKET_CONFIGURATION"],name:"locationConstraintMiddleware",override:!0};getLocationConstraintPlugin=config=>({applyToStack:clientStack=>{clientStack.add(locationConstraintMiddleware(config),locationConstraintMiddlewareOptions)}});CreateBucketCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},DisableAccessPoints:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getLocationConstraintPlugin(config)]})).s("AmazonS3","CreateBucket",{}).n("S3Client","CreateBucketCommand").f(void 0,void 0).ser(se_CreateBucketCommand).de(de_CreateBucketCommand).build()){};CreateBucketMetadataTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","CreateBucketMetadataTableConfiguration",{}).n("S3Client","CreateBucketMetadataTableConfigurationCommand").f(void 0,void 0).ser(se_CreateBucketMetadataTableConfigurationCommand).de(de_CreateBucketMetadataTableConfigurationCommand).build()){};CreateMultipartUploadCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]})).s("AmazonS3","CreateMultipartUpload",{}).n("S3Client","CreateMultipartUploadCommand").f(CreateMultipartUploadRequestFilterSensitiveLog,CreateMultipartUploadOutputFilterSensitiveLog).ser(se_CreateMultipartUploadCommand).de(de_CreateMultipartUploadCommand).build()){};DeleteBucketAnalyticsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketAnalyticsConfiguration",{}).n("S3Client","DeleteBucketAnalyticsConfigurationCommand").f(void 0,void 0).ser(se_DeleteBucketAnalyticsConfigurationCommand).de(de_DeleteBucketAnalyticsConfigurationCommand).build()){};DeleteBucketCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucket",{}).n("S3Client","DeleteBucketCommand").f(void 0,void 0).ser(se_DeleteBucketCommand).de(de_DeleteBucketCommand).build()){};DeleteBucketCorsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketCors",{}).n("S3Client","DeleteBucketCorsCommand").f(void 0,void 0).ser(se_DeleteBucketCorsCommand).de(de_DeleteBucketCorsCommand).build()){};DeleteBucketEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketEncryption",{}).n("S3Client","DeleteBucketEncryptionCommand").f(void 0,void 0).ser(se_DeleteBucketEncryptionCommand).de(de_DeleteBucketEncryptionCommand).build()){};DeleteBucketIntelligentTieringConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketIntelligentTieringConfiguration",{}).n("S3Client","DeleteBucketIntelligentTieringConfigurationCommand").f(void 0,void 0).ser(se_DeleteBucketIntelligentTieringConfigurationCommand).de(de_DeleteBucketIntelligentTieringConfigurationCommand).build()){};DeleteBucketInventoryConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketInventoryConfiguration",{}).n("S3Client","DeleteBucketInventoryConfigurationCommand").f(void 0,void 0).ser(se_DeleteBucketInventoryConfigurationCommand).de(de_DeleteBucketInventoryConfigurationCommand).build()){};DeleteBucketLifecycleCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketLifecycle",{}).n("S3Client","DeleteBucketLifecycleCommand").f(void 0,void 0).ser(se_DeleteBucketLifecycleCommand).de(de_DeleteBucketLifecycleCommand).build()){};DeleteBucketMetadataTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketMetadataTableConfiguration",{}).n("S3Client","DeleteBucketMetadataTableConfigurationCommand").f(void 0,void 0).ser(se_DeleteBucketMetadataTableConfigurationCommand).de(de_DeleteBucketMetadataTableConfigurationCommand).build()){};DeleteBucketMetricsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketMetricsConfiguration",{}).n("S3Client","DeleteBucketMetricsConfigurationCommand").f(void 0,void 0).ser(se_DeleteBucketMetricsConfigurationCommand).de(de_DeleteBucketMetricsConfigurationCommand).build()){};DeleteBucketOwnershipControlsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketOwnershipControls",{}).n("S3Client","DeleteBucketOwnershipControlsCommand").f(void 0,void 0).ser(se_DeleteBucketOwnershipControlsCommand).de(de_DeleteBucketOwnershipControlsCommand).build()){};DeleteBucketPolicyCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketPolicy",{}).n("S3Client","DeleteBucketPolicyCommand").f(void 0,void 0).ser(se_DeleteBucketPolicyCommand).de(de_DeleteBucketPolicyCommand).build()){};DeleteBucketReplicationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketReplication",{}).n("S3Client","DeleteBucketReplicationCommand").f(void 0,void 0).ser(se_DeleteBucketReplicationCommand).de(de_DeleteBucketReplicationCommand).build()){};DeleteBucketTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketTagging",{}).n("S3Client","DeleteBucketTaggingCommand").f(void 0,void 0).ser(se_DeleteBucketTaggingCommand).de(de_DeleteBucketTaggingCommand).build()){};DeleteBucketWebsiteCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeleteBucketWebsite",{}).n("S3Client","DeleteBucketWebsiteCommand").f(void 0,void 0).ser(se_DeleteBucketWebsiteCommand).de(de_DeleteBucketWebsiteCommand).build()){};DeleteObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","DeleteObject",{}).n("S3Client","DeleteObjectCommand").f(void 0,void 0).ser(se_DeleteObjectCommand).de(de_DeleteObjectCommand).build()){};DeleteObjectsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","DeleteObjects",{}).n("S3Client","DeleteObjectsCommand").f(void 0,void 0).ser(se_DeleteObjectsCommand).de(de_DeleteObjectsCommand).build()){};DeleteObjectTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","DeleteObjectTagging",{}).n("S3Client","DeleteObjectTaggingCommand").f(void 0,void 0).ser(se_DeleteObjectTaggingCommand).de(de_DeleteObjectTaggingCommand).build()){};DeletePublicAccessBlockCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","DeletePublicAccessBlock",{}).n("S3Client","DeletePublicAccessBlockCommand").f(void 0,void 0).ser(se_DeletePublicAccessBlockCommand).de(de_DeletePublicAccessBlockCommand).build()){};GetBucketAccelerateConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketAccelerateConfiguration",{}).n("S3Client","GetBucketAccelerateConfigurationCommand").f(void 0,void 0).ser(se_GetBucketAccelerateConfigurationCommand).de(de_GetBucketAccelerateConfigurationCommand).build()){};GetBucketAclCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketAcl",{}).n("S3Client","GetBucketAclCommand").f(void 0,void 0).ser(se_GetBucketAclCommand).de(de_GetBucketAclCommand).build()){};GetBucketAnalyticsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketAnalyticsConfiguration",{}).n("S3Client","GetBucketAnalyticsConfigurationCommand").f(void 0,void 0).ser(se_GetBucketAnalyticsConfigurationCommand).de(de_GetBucketAnalyticsConfigurationCommand).build()){};GetBucketCorsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketCors",{}).n("S3Client","GetBucketCorsCommand").f(void 0,void 0).ser(se_GetBucketCorsCommand).de(de_GetBucketCorsCommand).build()){};GetBucketEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketEncryption",{}).n("S3Client","GetBucketEncryptionCommand").f(void 0,GetBucketEncryptionOutputFilterSensitiveLog).ser(se_GetBucketEncryptionCommand).de(de_GetBucketEncryptionCommand).build()){};GetBucketIntelligentTieringConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketIntelligentTieringConfiguration",{}).n("S3Client","GetBucketIntelligentTieringConfigurationCommand").f(void 0,void 0).ser(se_GetBucketIntelligentTieringConfigurationCommand).de(de_GetBucketIntelligentTieringConfigurationCommand).build()){};GetBucketInventoryConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketInventoryConfiguration",{}).n("S3Client","GetBucketInventoryConfigurationCommand").f(void 0,GetBucketInventoryConfigurationOutputFilterSensitiveLog).ser(se_GetBucketInventoryConfigurationCommand).de(de_GetBucketInventoryConfigurationCommand).build()){};GetBucketLifecycleConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketLifecycleConfiguration",{}).n("S3Client","GetBucketLifecycleConfigurationCommand").f(void 0,void 0).ser(se_GetBucketLifecycleConfigurationCommand).de(de_GetBucketLifecycleConfigurationCommand).build()){};GetBucketLocationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketLocation",{}).n("S3Client","GetBucketLocationCommand").f(void 0,void 0).ser(se_GetBucketLocationCommand).de(de_GetBucketLocationCommand).build()){};GetBucketLoggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketLogging",{}).n("S3Client","GetBucketLoggingCommand").f(void 0,void 0).ser(se_GetBucketLoggingCommand).de(de_GetBucketLoggingCommand).build()){};GetBucketMetadataTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketMetadataTableConfiguration",{}).n("S3Client","GetBucketMetadataTableConfigurationCommand").f(void 0,void 0).ser(se_GetBucketMetadataTableConfigurationCommand).de(de_GetBucketMetadataTableConfigurationCommand).build()){};GetBucketMetricsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketMetricsConfiguration",{}).n("S3Client","GetBucketMetricsConfigurationCommand").f(void 0,void 0).ser(se_GetBucketMetricsConfigurationCommand).de(de_GetBucketMetricsConfigurationCommand).build()){};GetBucketNotificationConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketNotificationConfiguration",{}).n("S3Client","GetBucketNotificationConfigurationCommand").f(void 0,void 0).ser(se_GetBucketNotificationConfigurationCommand).de(de_GetBucketNotificationConfigurationCommand).build()){};GetBucketOwnershipControlsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketOwnershipControls",{}).n("S3Client","GetBucketOwnershipControlsCommand").f(void 0,void 0).ser(se_GetBucketOwnershipControlsCommand).de(de_GetBucketOwnershipControlsCommand).build()){};GetBucketPolicyCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketPolicy",{}).n("S3Client","GetBucketPolicyCommand").f(void 0,void 0).ser(se_GetBucketPolicyCommand).de(de_GetBucketPolicyCommand).build()){};GetBucketPolicyStatusCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketPolicyStatus",{}).n("S3Client","GetBucketPolicyStatusCommand").f(void 0,void 0).ser(se_GetBucketPolicyStatusCommand).de(de_GetBucketPolicyStatusCommand).build()){};GetBucketReplicationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketReplication",{}).n("S3Client","GetBucketReplicationCommand").f(void 0,void 0).ser(se_GetBucketReplicationCommand).de(de_GetBucketReplicationCommand).build()){};GetBucketRequestPaymentCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketRequestPayment",{}).n("S3Client","GetBucketRequestPaymentCommand").f(void 0,void 0).ser(se_GetBucketRequestPaymentCommand).de(de_GetBucketRequestPaymentCommand).build()){};GetBucketTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketTagging",{}).n("S3Client","GetBucketTaggingCommand").f(void 0,void 0).ser(se_GetBucketTaggingCommand).de(de_GetBucketTaggingCommand).build()){};GetBucketVersioningCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketVersioning",{}).n("S3Client","GetBucketVersioningCommand").f(void 0,void 0).ser(se_GetBucketVersioningCommand).de(de_GetBucketVersioningCommand).build()){};GetBucketWebsiteCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetBucketWebsite",{}).n("S3Client","GetBucketWebsiteCommand").f(void 0,void 0).ser(se_GetBucketWebsiteCommand).de(de_GetBucketWebsiteCommand).build()){};GetObjectAclCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetObjectAcl",{}).n("S3Client","GetObjectAclCommand").f(void 0,void 0).ser(se_GetObjectAclCommand).de(de_GetObjectAclCommand).build()){};GetObjectAttributesCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]})).s("AmazonS3","GetObjectAttributes",{}).n("S3Client","GetObjectAttributesCommand").f(GetObjectAttributesRequestFilterSensitiveLog,void 0).ser(se_GetObjectAttributesCommand).de(de_GetObjectAttributesCommand).build()){};GetObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestChecksumRequired:!1,requestValidationModeMember:"ChecksumMode",responseAlgorithms:["CRC64NVME","CRC32","CRC32C","SHA256","SHA1"]}),getSsecPlugin(config),getS3ExpiresMiddlewarePlugin()]})).s("AmazonS3","GetObject",{}).n("S3Client","GetObjectCommand").f(GetObjectRequestFilterSensitiveLog,GetObjectOutputFilterSensitiveLog).ser(se_GetObjectCommand).de(de_GetObjectCommand).build()){};GetObjectLegalHoldCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetObjectLegalHold",{}).n("S3Client","GetObjectLegalHoldCommand").f(void 0,void 0).ser(se_GetObjectLegalHoldCommand).de(de_GetObjectLegalHoldCommand).build()){};GetObjectLockConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetObjectLockConfiguration",{}).n("S3Client","GetObjectLockConfigurationCommand").f(void 0,void 0).ser(se_GetObjectLockConfigurationCommand).de(de_GetObjectLockConfigurationCommand).build()){};GetObjectRetentionCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetObjectRetention",{}).n("S3Client","GetObjectRetentionCommand").f(void 0,void 0).ser(se_GetObjectRetentionCommand).de(de_GetObjectRetentionCommand).build()){};GetObjectTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetObjectTagging",{}).n("S3Client","GetObjectTaggingCommand").f(void 0,void 0).ser(se_GetObjectTaggingCommand).de(de_GetObjectTaggingCommand).build()){};GetObjectTorrentCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","GetObjectTorrent",{}).n("S3Client","GetObjectTorrentCommand").f(void 0,GetObjectTorrentOutputFilterSensitiveLog).ser(se_GetObjectTorrentCommand).de(de_GetObjectTorrentCommand).build()){};GetPublicAccessBlockCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","GetPublicAccessBlock",{}).n("S3Client","GetPublicAccessBlockCommand").f(void 0,void 0).ser(se_GetPublicAccessBlockCommand).de(de_GetPublicAccessBlockCommand).build()){};HeadBucketCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","HeadBucket",{}).n("S3Client","HeadBucketCommand").f(void 0,void 0).ser(se_HeadBucketCommand).de(de_HeadBucketCommand).build()){};HeadObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config),getS3ExpiresMiddlewarePlugin()]})).s("AmazonS3","HeadObject",{}).n("S3Client","HeadObjectCommand").f(HeadObjectRequestFilterSensitiveLog,HeadObjectOutputFilterSensitiveLog).ser(se_HeadObjectCommand).de(de_HeadObjectCommand).build()){};ListBucketAnalyticsConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListBucketAnalyticsConfigurations",{}).n("S3Client","ListBucketAnalyticsConfigurationsCommand").f(void 0,void 0).ser(se_ListBucketAnalyticsConfigurationsCommand).de(de_ListBucketAnalyticsConfigurationsCommand).build()){};ListBucketIntelligentTieringConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListBucketIntelligentTieringConfigurations",{}).n("S3Client","ListBucketIntelligentTieringConfigurationsCommand").f(void 0,void 0).ser(se_ListBucketIntelligentTieringConfigurationsCommand).de(de_ListBucketIntelligentTieringConfigurationsCommand).build()){};ListBucketInventoryConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListBucketInventoryConfigurations",{}).n("S3Client","ListBucketInventoryConfigurationsCommand").f(void 0,ListBucketInventoryConfigurationsOutputFilterSensitiveLog).ser(se_ListBucketInventoryConfigurationsCommand).de(de_ListBucketInventoryConfigurationsCommand).build()){};ListBucketMetricsConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListBucketMetricsConfigurations",{}).n("S3Client","ListBucketMetricsConfigurationsCommand").f(void 0,void 0).ser(se_ListBucketMetricsConfigurationsCommand).de(de_ListBucketMetricsConfigurationsCommand).build()){};ListBucketsCommand=class extends(Command.classBuilder().ep(commonParams).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListBuckets",{}).n("S3Client","ListBucketsCommand").f(void 0,void 0).ser(se_ListBucketsCommand).de(de_ListBucketsCommand).build()){};ListDirectoryBucketsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListDirectoryBuckets",{}).n("S3Client","ListDirectoryBucketsCommand").f(void 0,void 0).ser(se_ListDirectoryBucketsCommand).de(de_ListDirectoryBucketsCommand).build()){};ListMultipartUploadsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListMultipartUploads",{}).n("S3Client","ListMultipartUploadsCommand").f(void 0,void 0).ser(se_ListMultipartUploadsCommand).de(de_ListMultipartUploadsCommand).build()){};ListObjectsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListObjects",{}).n("S3Client","ListObjectsCommand").f(void 0,void 0).ser(se_ListObjectsCommand).de(de_ListObjectsCommand).build()){};ListObjectsV2Command=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListObjectsV2",{}).n("S3Client","ListObjectsV2Command").f(void 0,void 0).ser(se_ListObjectsV2Command).de(de_ListObjectsV2Command).build()){};ListObjectVersionsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","ListObjectVersions",{}).n("S3Client","ListObjectVersionsCommand").f(void 0,void 0).ser(se_ListObjectVersionsCommand).de(de_ListObjectVersionsCommand).build()){};ListPartsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]})).s("AmazonS3","ListParts",{}).n("S3Client","ListPartsCommand").f(ListPartsRequestFilterSensitiveLog,void 0).ser(se_ListPartsCommand).de(de_ListPartsCommand).build()){};PutBucketAccelerateConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1})]})).s("AmazonS3","PutBucketAccelerateConfiguration",{}).n("S3Client","PutBucketAccelerateConfigurationCommand").f(void 0,void 0).ser(se_PutBucketAccelerateConfigurationCommand).de(de_PutBucketAccelerateConfigurationCommand).build()){};PutBucketAclCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketAcl",{}).n("S3Client","PutBucketAclCommand").f(void 0,void 0).ser(se_PutBucketAclCommand).de(de_PutBucketAclCommand).build()){};PutBucketAnalyticsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","PutBucketAnalyticsConfiguration",{}).n("S3Client","PutBucketAnalyticsConfigurationCommand").f(void 0,void 0).ser(se_PutBucketAnalyticsConfigurationCommand).de(de_PutBucketAnalyticsConfigurationCommand).build()){};PutBucketCorsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketCors",{}).n("S3Client","PutBucketCorsCommand").f(void 0,void 0).ser(se_PutBucketCorsCommand).de(de_PutBucketCorsCommand).build()){};PutBucketEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketEncryption",{}).n("S3Client","PutBucketEncryptionCommand").f(PutBucketEncryptionRequestFilterSensitiveLog,void 0).ser(se_PutBucketEncryptionCommand).de(de_PutBucketEncryptionCommand).build()){};PutBucketIntelligentTieringConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","PutBucketIntelligentTieringConfiguration",{}).n("S3Client","PutBucketIntelligentTieringConfigurationCommand").f(void 0,void 0).ser(se_PutBucketIntelligentTieringConfigurationCommand).de(de_PutBucketIntelligentTieringConfigurationCommand).build()){};PutBucketInventoryConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","PutBucketInventoryConfiguration",{}).n("S3Client","PutBucketInventoryConfigurationCommand").f(PutBucketInventoryConfigurationRequestFilterSensitiveLog,void 0).ser(se_PutBucketInventoryConfigurationCommand).de(de_PutBucketInventoryConfigurationCommand).build()){};PutBucketLifecycleConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","PutBucketLifecycleConfiguration",{}).n("S3Client","PutBucketLifecycleConfigurationCommand").f(void 0,void 0).ser(se_PutBucketLifecycleConfigurationCommand).de(de_PutBucketLifecycleConfigurationCommand).build()){};PutBucketLoggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketLogging",{}).n("S3Client","PutBucketLoggingCommand").f(void 0,void 0).ser(se_PutBucketLoggingCommand).de(de_PutBucketLoggingCommand).build()){};PutBucketMetricsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","PutBucketMetricsConfiguration",{}).n("S3Client","PutBucketMetricsConfigurationCommand").f(void 0,void 0).ser(se_PutBucketMetricsConfigurationCommand).de(de_PutBucketMetricsConfigurationCommand).build()){};PutBucketNotificationConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","PutBucketNotificationConfiguration",{}).n("S3Client","PutBucketNotificationConfigurationCommand").f(void 0,void 0).ser(se_PutBucketNotificationConfigurationCommand).de(de_PutBucketNotificationConfigurationCommand).build()){};PutBucketOwnershipControlsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketOwnershipControls",{}).n("S3Client","PutBucketOwnershipControlsCommand").f(void 0,void 0).ser(se_PutBucketOwnershipControlsCommand).de(de_PutBucketOwnershipControlsCommand).build()){};PutBucketPolicyCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketPolicy",{}).n("S3Client","PutBucketPolicyCommand").f(void 0,void 0).ser(se_PutBucketPolicyCommand).de(de_PutBucketPolicyCommand).build()){};PutBucketReplicationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketReplication",{}).n("S3Client","PutBucketReplicationCommand").f(void 0,void 0).ser(se_PutBucketReplicationCommand).de(de_PutBucketReplicationCommand).build()){};PutBucketRequestPaymentCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketRequestPayment",{}).n("S3Client","PutBucketRequestPaymentCommand").f(void 0,void 0).ser(se_PutBucketRequestPaymentCommand).de(de_PutBucketRequestPaymentCommand).build()){};PutBucketTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketTagging",{}).n("S3Client","PutBucketTaggingCommand").f(void 0,void 0).ser(se_PutBucketTaggingCommand).de(de_PutBucketTaggingCommand).build()){};PutBucketVersioningCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketVersioning",{}).n("S3Client","PutBucketVersioningCommand").f(void 0,void 0).ser(se_PutBucketVersioningCommand).de(de_PutBucketVersioningCommand).build()){};PutBucketWebsiteCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutBucketWebsite",{}).n("S3Client","PutBucketWebsiteCommand").f(void 0,void 0).ser(se_PutBucketWebsiteCommand).de(de_PutBucketWebsiteCommand).build()){};PutObjectAclCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","PutObjectAcl",{}).n("S3Client","PutObjectAclCommand").f(void 0,void 0).ser(se_PutObjectAclCommand).de(de_PutObjectAclCommand).build()){};PutObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1}),getCheckContentLengthHeaderPlugin(),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]})).s("AmazonS3","PutObject",{}).n("S3Client","PutObjectCommand").f(PutObjectRequestFilterSensitiveLog,PutObjectOutputFilterSensitiveLog).ser(se_PutObjectCommand).de(de_PutObjectCommand).build()){};PutObjectLegalHoldCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","PutObjectLegalHold",{}).n("S3Client","PutObjectLegalHoldCommand").f(void 0,void 0).ser(se_PutObjectLegalHoldCommand).de(de_PutObjectLegalHoldCommand).build()){};PutObjectLockConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","PutObjectLockConfiguration",{}).n("S3Client","PutObjectLockConfigurationCommand").f(void 0,void 0).ser(se_PutObjectLockConfigurationCommand).de(de_PutObjectLockConfigurationCommand).build()){};PutObjectRetentionCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","PutObjectRetention",{}).n("S3Client","PutObjectRetentionCommand").f(void 0,void 0).ser(se_PutObjectRetentionCommand).de(de_PutObjectRetentionCommand).build()){};PutObjectTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","PutObjectTagging",{}).n("S3Client","PutObjectTaggingCommand").f(void 0,void 0).ser(se_PutObjectTaggingCommand).de(de_PutObjectTaggingCommand).build()){};PutPublicAccessBlockCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]})).s("AmazonS3","PutPublicAccessBlock",{}).n("S3Client","PutPublicAccessBlockCommand").f(void 0,void 0).ser(se_PutPublicAccessBlockCommand).de(de_PutPublicAccessBlockCommand).build()){};RestoreObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1}),getThrow200ExceptionsPlugin(config)]})).s("AmazonS3","RestoreObject",{}).n("S3Client","RestoreObjectCommand").f(RestoreObjectRequestFilterSensitiveLog,void 0).ser(se_RestoreObjectCommand).de(de_RestoreObjectCommand).build()){};SelectObjectContentCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]})).s("AmazonS3","SelectObjectContent",{eventStream:{output:!0}}).n("S3Client","SelectObjectContentCommand").f(SelectObjectContentRequestFilterSensitiveLog,SelectObjectContentOutputFilterSensitiveLog).ser(se_SelectObjectContentCommand).de(de_SelectObjectContentCommand).build()){};UploadPartCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1}),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]})).s("AmazonS3","UploadPart",{}).n("S3Client","UploadPartCommand").f(UploadPartRequestFilterSensitiveLog,UploadPartOutputFilterSensitiveLog).ser(se_UploadPartCommand).de(de_UploadPartCommand).build()){};UploadPartCopyCommand=class extends(Command.classBuilder().ep({...commonParams,DisableS3ExpressSessionAuth:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]})).s("AmazonS3","UploadPartCopy",{}).n("S3Client","UploadPartCopyCommand").f(UploadPartCopyRequestFilterSensitiveLog,UploadPartCopyOutputFilterSensitiveLog).ser(se_UploadPartCopyCommand).de(de_UploadPartCopyCommand).build()){};WriteGetObjectResponseCommand=class extends(Command.classBuilder().ep({...commonParams,UseObjectLambdaEndpoint:{type:"staticContextParams",value:!0}}).m((function(Command2,cs2,config,o2){return[getSerdePlugin(config,this.serialize,this.deserialize),getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]})).s("AmazonS3","WriteGetObjectResponse",{}).n("S3Client","WriteGetObjectResponseCommand").f(WriteGetObjectResponseRequestFilterSensitiveLog,void 0).ser(se_WriteGetObjectResponseCommand).de(de_WriteGetObjectResponseCommand).build()){};createAggregatedClient({AbortMultipartUploadCommand,CompleteMultipartUploadCommand,CopyObjectCommand,CreateBucketCommand,CreateBucketMetadataTableConfigurationCommand,CreateMultipartUploadCommand,CreateSessionCommand,DeleteBucketCommand,DeleteBucketAnalyticsConfigurationCommand,DeleteBucketCorsCommand,DeleteBucketEncryptionCommand,DeleteBucketIntelligentTieringConfigurationCommand,DeleteBucketInventoryConfigurationCommand,DeleteBucketLifecycleCommand,DeleteBucketMetadataTableConfigurationCommand,DeleteBucketMetricsConfigurationCommand,DeleteBucketOwnershipControlsCommand,DeleteBucketPolicyCommand,DeleteBucketReplicationCommand,DeleteBucketTaggingCommand,DeleteBucketWebsiteCommand,DeleteObjectCommand,DeleteObjectsCommand,DeleteObjectTaggingCommand,DeletePublicAccessBlockCommand,GetBucketAccelerateConfigurationCommand,GetBucketAclCommand,GetBucketAnalyticsConfigurationCommand,GetBucketCorsCommand,GetBucketEncryptionCommand,GetBucketIntelligentTieringConfigurationCommand,GetBucketInventoryConfigurationCommand,GetBucketLifecycleConfigurationCommand,GetBucketLocationCommand,GetBucketLoggingCommand,GetBucketMetadataTableConfigurationCommand,GetBucketMetricsConfigurationCommand,GetBucketNotificationConfigurationCommand,GetBucketOwnershipControlsCommand,GetBucketPolicyCommand,GetBucketPolicyStatusCommand,GetBucketReplicationCommand,GetBucketRequestPaymentCommand,GetBucketTaggingCommand,GetBucketVersioningCommand,GetBucketWebsiteCommand,GetObjectCommand,GetObjectAclCommand,GetObjectAttributesCommand,GetObjectLegalHoldCommand,GetObjectLockConfigurationCommand,GetObjectRetentionCommand,GetObjectTaggingCommand,GetObjectTorrentCommand,GetPublicAccessBlockCommand,HeadBucketCommand,HeadObjectCommand,ListBucketAnalyticsConfigurationsCommand,ListBucketIntelligentTieringConfigurationsCommand,ListBucketInventoryConfigurationsCommand,ListBucketMetricsConfigurationsCommand,ListBucketsCommand,ListDirectoryBucketsCommand,ListMultipartUploadsCommand,ListObjectsCommand,ListObjectsV2Command,ListObjectVersionsCommand,ListPartsCommand,PutBucketAccelerateConfigurationCommand,PutBucketAclCommand,PutBucketAnalyticsConfigurationCommand,PutBucketCorsCommand,PutBucketEncryptionCommand,PutBucketIntelligentTieringConfigurationCommand,PutBucketInventoryConfigurationCommand,PutBucketLifecycleConfigurationCommand,PutBucketLoggingCommand,PutBucketMetricsConfigurationCommand,PutBucketNotificationConfigurationCommand,PutBucketOwnershipControlsCommand,PutBucketPolicyCommand,PutBucketReplicationCommand,PutBucketRequestPaymentCommand,PutBucketTaggingCommand,PutBucketVersioningCommand,PutBucketWebsiteCommand,PutObjectCommand,PutObjectAclCommand,PutObjectLegalHoldCommand,PutObjectLockConfigurationCommand,PutObjectRetentionCommand,PutObjectTaggingCommand,PutPublicAccessBlockCommand,RestoreObjectCommand,SelectObjectContentCommand,UploadPartCommand,UploadPartCopyCommand,WriteGetObjectResponseCommand},S3=class extends S3Client{});applyMd5BodyChecksumMiddleware=options=>next2=>async args=>{const{request:request2}=args;if(HttpRequest.isInstance(request2)){const{body,headers}=request2;if(!hasHeader3("content-md5",headers)){let digest;if(void 0===body||"string"==typeof body||ArrayBuffer.isView(body)||isArrayBuffer(body)){const hash3=new options.md5;hash3.update(body||"");digest=hash3.digest()}else digest=options.streamHasher(options.md5,body);const cloned=HttpRequest.clone(request2);cloned.headers={...headers,"content-md5":options.base64Encoder(await digest)};return next2({...args,request:cloned})}}return next2(args)};hasHeader3=(soughtHeader,headers)=>{soughtHeader=soughtHeader.toLowerCase();for(const headerName of Object.keys(headers))if(soughtHeader===headerName.toLowerCase())return!0;return!1};ch2={};wk=function(c3,id,msg,transfer,cb2){var w2=new Worker(ch2[id]||(ch2[id]=URL.createObjectURL(new Blob([c3+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));w2.onmessage=function(e3){var err3,d4=e3.data,ed=d4.$e$;if(ed){(err3=new Error(ed[0])).code=ed[1];err3.stack=ed[2];cb2(err3,null)}else cb2(null,d4)};w2.postMessage(msg,transfer);return w2};u8=Uint8Array,u16=Uint16Array,i32=Int32Array;fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);freb=function(eb,start){var i2,r4,j2,b3=new u16(31);for(i2=0;i2<31;++i2)b3[i2]=start+=1<>1|(21845&i2)<<1))>>2|(13107&x2)<<2))>>4|(3855&x2)<<4;rev[i2]=((65280&x2)>>8|(255&x2)<<8)>>1}hMap=function(cd2,mb,r4){for(var le,co2,rvb,sv,r_1,v2,m3,s2=cd2.length,i2=0,l2=new u16(mb);i2>rvb]=sv}}else{co2=new u16(s2);for(i2=0;i2>15-cd2[i2])}return co2};flt=new u8(288);for(i2=0;i2<144;++i2)flt[i2]=8;for(i2=144;i2<256;++i2)flt[i2]=9;for(i2=256;i2<280;++i2)flt[i2]=7;for(i2=280;i2<288;++i2)flt[i2]=8;fdt=new u8(32);for(i2=0;i2<32;++i2)fdt[i2]=5;flm=hMap(flt,9,0),flrm=hMap(flt,9,1);fdm=hMap(fdt,5,0),fdrm=hMap(fdt,5,1);max=function(a2){var i2,m3=a2[0];for(i2=1;i2m3&&(m3=a2[i2]);return m3};bits=function(d4,p4,m3){var o2=p4/8|0;return(d4[o2]|d4[o2+1]<<8)>>(7&p4)&m3};bits16=function(d4,p4){var o2=p4/8|0;return(d4[o2]|d4[o2+1]<<8|d4[o2+2]<<16)>>(7&p4)};shft=function(p4){return(p4+7)/8|0};slc=function(v2,s2,e3){(null==s2||s2<0)&&(s2=0);(null==e3||e3>v2.length)&&(e3=v2.length);return new u8(v2.subarray(s2,e3))};ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];err2=function(ind,msg,nt){var e3=new Error(msg||ec[ind]);e3.code=ind;Error.captureStackTrace&&Error.captureStackTrace(e3,err2);if(!nt)throw e3;return e3};inflt=function(dat,st,buf,dict){var noBuf,resize,noSt,cbuf,final,pos,bt2,lm,dm,lbt,dbt,tbts,type,s2,l2,t3,hLit,hcLen,tl,ldt,clt,i2,clb,clbmsk,clm,r4,c3,n3,lt,dt,lms,dms,lpos,sym,add,b3,d4,dsym,end,shift,dend,sl=dat.length,dl=dict?dict.length:0;if(!sl||st.f&&!st.l)return buf||new u8(0);resize=(noBuf=!buf)||2!=st.i;noSt=st.i;noBuf&&(buf=new u8(3*sl));cbuf=function(l3){var nbuf,bl2=buf.length;if(l3>bl2){(nbuf=new u8(Math.max(2*bl2,l3))).set(buf);buf=nbuf}};final=st.f||0,pos=st.p||0,bt2=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;tbts=8*sl;do{if(!lm){final=bits(dat,pos,1);type=bits(dat,pos+1,3);pos+=3;if(!type){if((t3=(s2=shft(pos)+4)+(l2=dat[s2-4]|dat[s2-3]<<8))>sl){noSt&&err2(0);break}resize&&cbuf(bt2+l2);buf.set(dat.subarray(s2,t3),bt2);st.b=bt2+=l2,st.p=pos=8*t3,st.f=final;continue}if(1==type)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(2==type){hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;tl=hLit+bits(dat,pos+5,31)+1;pos+=14;ldt=new u8(tl);clt=new u8(19);for(i2=0;i2>4)<16)ldt[i2++]=s2;else{c3=0,n3=0;16==s2?(n3=3+bits(dat,pos,3),pos+=2,c3=ldt[i2-1]):17==s2?(n3=3+bits(dat,pos,7),pos+=3):18==s2&&(n3=11+bits(dat,pos,127),pos+=7);for(;n3--;)ldt[i2++]=c3}}lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1)}else err2(1);if(pos>tbts){noSt&&err2(0);break}}resize&&cbuf(bt2+131072);lms=(1<>4;if((pos+=15&c3)>tbts){noSt&&err2(0);break}c3||err2(2);if(sym<256)buf[bt2++]=sym;else{if(256==sym){lpos=pos,lm=null;break}add=sym-254;if(sym>264){b3=fleb[i2=sym-257];add=bits(dat,pos,(1<>4;d4||err2(3);pos+=15&d4;dt=fd[dsym];if(dsym>3){b3=fdeb[dsym];dt+=bits16(dat,pos)&(1<tbts){noSt&&err2(0);break}resize&&cbuf(bt2+131072);end=bt2+add;if(bt2>8};wbits16=function(d4,p4,v2){v2<<=7&p4;var o2=p4/8|0;d4[o2]|=v2;d4[o2+1]|=v2>>8;d4[o2+2]|=v2>>16};hTree=function(d4,mb){var i2,s2,t22,v2,l2,r4,i0,i1,i22,maxSym,tr,mbt,dt,lft,cst,i2_1,i2_2,i2_3,t3=[];for(i2=0;i2maxSym&&(maxSym=t22[i2].s);tr=new u16(maxSym+1);if((mbt=ln(t3[i1-1],tr,0))>mb){i2=0,dt=0;cst=1<<(lft=mbt-mb);t22.sort((function(a2,b3){return tr[b3.s]-tr[a2.s]||a2.f-b3.f}));for(;i2mb))break;dt+=cst-(1<>=lft;for(;dt>0;){i2_2=t22[i2].s;tr[i2_2]=0&&dt;--i2){i2_3=t22[i2].s;if(tr[i2_3]==mb){--tr[i2_3];++dt}}mbt=mb}return{t:new u8(tr),l:mbt}};ln=function(n3,l2,d4){return-1==n3.s?Math.max(ln(n3.l,l2,d4+1),ln(n3.r,l2,d4+1)):l2[n3.s]=d4};lc=function(c3){for(var cl2,cli,cln,cls,w2,i2,s2=c3.length;s2&&!c3[--s2];);cl2=new u16(++s2);cli=0,cln=c3[0],cls=1;w2=function(v2){cl2[cli++]=v2};for(i2=1;i2<=s2;++i2)if(c3[i2]==cln&&i2!=s2)++cls;else{if(!cln&&cls>2){for(;cls>138;cls-=138)w2(32754);if(cls>2){w2(cls>10?cls-11<<5|28690:cls-3<<5|12305);cls=0}}else if(cls>3){w2(cln),--cls;for(;cls>6;cls-=6)w2(8304);cls>2&&(w2(cls-3<<5|8208),cls=0)}for(;cls--;)w2(cln);cls=1;cln=c3[i2]}return{c:cl2.subarray(0,cli),n:s2}};clen=function(cf2,cl2){var i2,l2=0;for(i2=0;i2>8;out[o2+2]=255^out[o2];out[o2+3]=255^out[o2+1];for(i2=0;i24&&!lct[clim[nlcc-1]];--nlcc);flen=bl2+5<<3;ftlen=clen(lf,flt)+clen(df,fdt)+eb;dtlen=clen(lf,dlt)+clen(df,ddt)+eb+14+3*nlcc+clen(lcfreq,lct)+2*lcfreq[16]+3*lcfreq[17]+7*lcfreq[18];if(bs2>=0&&flen<=ftlen&&flen<=dtlen)return wfblk(out,p4,dat.subarray(bs2,bs2+bl2));wbits(out,p4,1+(dtlen15&&(wbits(out,p4,clct[i2]>>5&127),p4+=clct[i2]>>12)}}}else lm=flm,ll=flt,dm=fdm,dl=fdt;for(i2=0;i2255){wbits16(out,p4,lm[257+(len=sym>>18&31)]),p4+=ll[len+257];len>7&&(wbits(out,p4,sym>>23&31),p4+=fleb[len]);wbits16(out,p4,dm[dst=31&sym]),p4+=dl[dst];dst>3&&(wbits16(out,p4,sym>>5&8191),p4+=fdeb[dst])}else wbits16(out,p4,lm[sym]),p4+=ll[sym];wbits16(out,p4,lm[256]);return p4+ll[256]};deo=new i32([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]);et=new u8(0);dflt=function(dat,lvl,plvl,pre,post,st){var opt,n3,c3,msk_1,prev,head2,bs1_1,bs2_1,hsh,syms,lf,df,lc_1,eb,i2,li,wi,bs2,hv,imod,pimod,rem,j2,l2,d4,ch_1,dif,maxn,maxd,ml,nl,mmd,md,ti,cd2,lin,din,e3,s2=st.z||dat.length,o2=new u8(pre+s2+5*(1+Math.ceil(s2/7e3))+post),w2=o2.subarray(pre,o2.length-post),lst=st.l,pos=7&(st.r||0);if(lvl){pos&&(w2[0]=st.r>>3);n3=(opt=deo[lvl-1])>>13,c3=8191&opt;msk_1=(1<7e3||li>24576)&&(rem>423||!lst)){pos=wblk(dat,w2,0,syms,lf,df,eb,li,bs2,i2-bs2,pos);li=lc_1=eb=0,bs2=i2;for(j2=0;j2<286;++j2)lf[j2]=0;for(j2=0;j2<30;++j2)df[j2]=0}l2=2,d4=0,ch_1=c3,dif=imod-pimod&32767;if(rem>2&&hv==hsh(i2-dif)){maxn=Math.min(n3,rem)-1;maxd=Math.min(32767,i2);ml=Math.min(258,rem);for(;dif<=maxd&&--ch_1&&imod!=pimod;){if(dat[i2+l2]==dat[i2+l2-dif]){nl=0;for(;nll2){l2=nl,d4=dif;if(nl>maxn)break;mmd=Math.min(dif,nl-2);md=0;for(j2=0;j2md&&(md=cd2,pimod=ti)}}dif+=(imod=pimod)-(pimod=prev[imod])&32767}}if(d4){syms[li++]=268435456|revfl[l2]<<18|revfd[d4];lin=31&revfl[l2],din=31&revfd[d4];eb+=fleb[lin]+fdeb[din];++lf[257+lin];++df[din];wi=i2+l2;++lc_1}else{syms[li++]=dat[i2];++lf[dat[i2]]}}}for(i2=Math.max(i2,wi);i2=s2){w2[pos/8|0]=lst;e3=s2}pos=wfblk(w2,pos+1,dat.subarray(i2,e3))}st.i=s2}return slc(o2,0,pre+shft(pos)+post)};0;0;dopt=function(dat,opt,pre,post,st){var dict,newDat;if(!st){st={l:1};if(opt.dictionary){dict=opt.dictionary.subarray(-32768);(newDat=new u8(dict.length+dat.length)).set(dict);newDat.set(dat,dict.length);dat=newDat;st.w=dict.length}}return dflt(dat,null==opt.level?6:opt.level,null==opt.mem?st.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(dat.length)))):20:12+opt.mem,pre,post,st)};mrg=function(a2,b3){var k2,o2={};for(k2 in a2)o2[k2]=a2[k2];for(k2 in b3)o2[k2]=b3[k2];return o2};wcln=function(fn,fnStr,td3){var i2,v2,k2,st_1,spInd,t3,dt=fn(),st=fn.toString(),ks=st.slice(st.indexOf("[")+1,st.lastIndexOf("]")).replace(/\s+/g,"").split(",");for(i2=0;i2{db.transform({incoming:async doc=>compress?await compressDoc(doc):doc,outgoing:async doc=>await decompressDoc(doc)})};MARK_SHIFT_COMPRESSED="LZ";CheckPointInfoDefault={lastLocalSeq:0,knownIDs:new Set,sentIDs:new Set,receivedFiles:new Set,sentFiles:new Set};PREFIX_TRENCH="trench";idx=0;series=`${Date.now()}`;indexes=new Map;inProgress=new Set;failed=new Map;Trench=class{constructor(db,flushExistItems=!0){Object.defineProperty(this,"_db",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_flushTask",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"concealing",{enumerable:!0,configurable:!0,writable:!0,value:new Map});this._db=db;flushExistItems&&(this._flushTask=(async()=>{const keys3=await db.keys(`${PREFIX_TRENCH}-ephemeral`,`${PREFIX_TRENCH}-ephemeral.`);for(const key3 of keys3)await db.delete(key3)})())}async eraseAllEphemerals(){const keys3=await this._db.keys(`${PREFIX_TRENCH}-ephemeral`,`${PREFIX_TRENCH}-ephemeral.`);for(const key3 of keys3)await this._db.delete(key3)}async eraseAllPermanences(){const keys3=await this._db.keys(`${PREFIX_TRENCH}-permanent`,`${PREFIX_TRENCH}-permanent.`);for(const key3 of keys3)await this._db.delete(key3)}conceal(obj){const key3=generateId("ephemeral");this.concealing.set(key3,obj);this._db.set(key3,obj).then((async e3=>{this.concealing.has(key3)?this.concealing.delete(key3):await this._db.delete(key3)}));return key3}async bury(key3){this.concealing.has(key3)&&this.concealing.delete(key3);await this._db.delete(key3)}async expose(key3){if(this.concealing.has(key3)){const value=this.concealing.get(key3);this.concealing.delete(key3);return value}const obj=await this._db.get(key3);await this._db.delete(key3);return obj}_evacuate(storeTask,key3){return async()=>{if(this._flushTask){await this._flushTask;this._flushTask=void 0}await storeTask;const item=await this._db.get(key3);await this._db.delete(key3);return item}}evacuatePromise(task){const key3=generateId("ephemeral"),storeTask=(async()=>{const data=await task;await this._db.set(key3,data)})();return this._evacuate(storeTask,key3)}evacuate(obj){if(obj instanceof Promise)return this.evacuatePromise(obj);const key3=generateId("ephemeral"),storeTask=this._db.set(key3,obj);return this._evacuate(storeTask,key3)}async _queue(type,key3,obj,index6){var _a8;if(void 0===index6){index6=null!=(_a8=indexes.get(key3))?_a8:0;indexes.set(key3,index6+1)}const storeKey=createId(type,key3,index6);await this._db.set(storeKey,obj)}async _dequeue(type,key3){const range3=createRange(type,key3),keys3=(await this._db.keys(range3[0],range3[1])).filter((e3=>!inProgress.has(e3)));if(0!==keys3.length)return await this.expose(keys3[0])}async _dequeueWithCommit(type,key3){const range3=createRange(type,key3),keysAll=await this._db.keys(range3[0],range3[1]),keys3=keysAll.filter((e3=>!inProgress.has(e3)));if(0===keys3.length)return;const storeKey=keys3[0];inProgress.add(storeKey);const previousFailed=failed.get(storeKey)||0,value=await this._db.get(storeKey);return{key:storeKey,value,cancelCount:previousFailed,pendingItems:keysAll.length-1,commit:async()=>{await this._db.delete(storeKey);failed.delete(storeKey);inProgress.delete(storeKey)},cancel:()=>{failed.set(storeKey,(failed.get(storeKey)||0)+1);inProgress.delete(storeKey)}}}queue(key3,obj,index6){return this._queue("ephemeral",key3,obj,index6)}dequeue(key3){return this._dequeue("ephemeral",key3)}dequeueWithCommit(key3){return this._dequeueWithCommit("ephemeral",key3)}queuePermanent(key3,obj,index6){return this._queue("permanent",key3,obj,index6)}dequeuePermanent(key3){return this._dequeue("permanent",key3)}dequeuePermanentWithCommit(key3){return this._dequeueWithCommit("permanent",key3)}};_handlers=new Map;SyncParamsHandlerError=class extends LiveSyncError{};SyncParamsFetchError=class extends SyncParamsHandlerError{};SyncParamsNotFoundError=class extends SyncParamsHandlerError{};SyncParamsUpdateError=class extends SyncParamsHandlerError{};RECORD_SPLIT="\n";UNIT_SPLIT="";te4=new TextEncoder;JournalSyncAbstract=class{constructor(settings,store,env){this.hash="";this.batchSize=100;this.requestedStop=!1;this.notifier=new Notifier;this._currentCheckPointInfo={...CheckPointInfoDefault};this.isPacking=!1;this.isDownloading=!1;this._settings=settings;this.db=env.getDatabase();this.env=env;this.processReplication=async docs=>await env.services.replication.parseSynchroniseResult(docs);this.store=store;this.hash=this.getHash(settings);this.trench=new Trench(store);clearHandlers()}get id(){return this._settings.accessKey}get key(){return this._settings.secretKey}get bucket(){return this._settings.bucket}get endpoint(){return this._settings.endpoint}get prefix(){return this._settings.bucketPrefix}get region(){return this._settings.region}get forcePathStyle(){return this._settings.forcePathStyle}get useCustomRequestHandler(){return this._settings.useCustomRequestHandler}get customHeaders(){return 0==this._settings.bucketCustomHeaders.length?[]:Object.entries(parseHeaderValues(this._settings.bucketCustomHeaders))}getInitialSyncParameters(){return Promise.resolve({...DEFAULT_SYNC_PARAMETERS,protocolVersion:2,pbkdf2salt:""})}async getSyncParameters(){try{const downloadedSyncParams=await this.downloadJson("_obsidian_livesync_journal_sync_parameters.json");if(!downloadedSyncParams)throw new SyncParamsNotFoundError("Missing sync parameters");return downloadedSyncParams}catch(ex){Logger("Could not retrieve remote sync parameters",LOG_LEVEL_INFO);throw SyncParamsFetchError.fromError(ex)}}async putSyncParameters(params){try{if(await this.uploadJson("_obsidian_livesync_journal_sync_parameters.json",params))return!0;throw new SyncParamsUpdateError("Could not store remote sync parameters")}catch(ex){Logger("Could not upload sync parameters",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);throw SyncParamsUpdateError.fromError(ex)}}getHash(settings){return btoa(encodeURI([settings.endpoint,`${settings.bucket}${settings.bucketPrefix}`,settings.region].join()))}applyNewConfig(settings,store,env){this._settings=settings;this.db=env.getDatabase();this.env=env;this.processReplication=async docs=>await env.services.replication.parseSynchroniseResult(docs);this.store=store;this.hash=this.getHash(settings);clearHandlers()}updateInfo(info3){var _a8,_b5,_c3,_d2,_e2,_f,_g;const old=this.env.replicationStat.value;this.env.replicationStat.value={sent:null!=(_a8=info3.sent)?_a8:old.sent,arrived:null!=(_b5=info3.arrived)?_b5:old.arrived,maxPullSeq:null!=(_c3=info3.maxPullSeq)?_c3:old.maxPullSeq,maxPushSeq:null!=(_d2=info3.maxPushSeq)?_d2:old.maxPushSeq,lastSyncPullSeq:null!=(_e2=info3.lastSyncPullSeq)?_e2:old.lastSyncPullSeq,lastSyncPushSeq:null!=(_f=info3.lastSyncPushSeq)?_f:old.lastSyncPushSeq,syncStatus:null!=(_g=info3.syncStatus)?_g:old.syncStatus}}async updateCheckPointInfo(func){const checkPointKey=`bucketsync-checkpoint-${this.hash}`,newInfo=func(await this.getCheckpointInfo());this._currentCheckPointInfo=newInfo;await this.store.set(checkPointKey,newInfo);return newInfo}async getCheckpointInfo(){const checkPointKey=`bucketsync-checkpoint-${this.hash}`,old=await this.store.get(checkPointKey)||{},items=["knownIDs","sentIDs","receivedFiles","sentFiles"];for(const key3 of items)key3 in old&&(Array.isArray(old[key3]),1)&&(old[key3]=new Set(old[key3]));this._currentCheckPointInfo={...CheckPointInfoDefault,...old};return this._currentCheckPointInfo}async resetAllCaches(){await this.trench.eraseAllPermanences();clearHandlers()}async resetCheckpointInfo(){await this.updateCheckPointInfo((info3=>({...CheckPointInfoDefault})));clearHandlers()}async _createJournalPack(override){const checkPointInfo=await this.getCheckpointInfo(),from=override||checkPointInfo.lastLocalSeq;Logger(`Journal reading from seq:${from}`,LOG_LEVEL_VERBOSE);let knownKeyCount=0,sendKeyCount=0;const allChangesTask=this.db.changes({live:!1,since:override||from,conflicts:!0,limit:this.batchSize,return_docs:!0,attachments:!1,style:"all_docs",filter:doc=>{const key3=this.getDocKey(doc);if(this._currentCheckPointInfo.knownIDs.has(key3)){knownKeyCount++;return!1}if(this._currentCheckPointInfo.sentIDs.has(key3)){knownKeyCount++;return!1}sendKeyCount++;return!0}}),allChanges=await allChangesTask;if(0==allChanges.results.length)return{changes:[],hasNext:!1,packLastSeq:allChanges.last_seq};Logger(`${sendKeyCount} items possibly needs to be sent (${knownKeyCount} keys has been received before)`,LOG_LEVEL_DEBUG);const bd2=await this.db.bulkGet({docs:allChanges.results.map((e3=>e3.changes.map((change=>({id:e3.id,rev:change.rev}))))).flat(),revs:!0}),packLastSeq=allChanges.last_seq,hasNext=packLastSeq<(await this.db.info()).update_seq;return{changes:bd2.results.map((e3=>e3.docs)).flat().filter((e3=>"ok"in e3)).map((e3=>e3.ok)).filter((doc=>{const key3=this.getDocKey(doc);if(this._currentCheckPointInfo.knownIDs.has(key3)){knownKeyCount++;return!1}if(this._currentCheckPointInfo.sentIDs.has(key3)){knownKeyCount++;return!1}return!0})),hasNext,packLastSeq}}getDocKey(doc){return doc&&doc._id.startsWith("h:")?doc._id:doc._id+"-"+doc._rev}async uploadQueued(showMessage=!1,wrapUp=!1){return await shareRunningResult("upload_queue",(async()=>{const TASK_TITLE="Uploading journal:",logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;let uploaded=0;do{const queued=await this.trench.dequeuePermanentWithCommit("upload_queue");if(!queued){if(this.isPacking){Logger(`${TASK_TITLE} Queue run out, but process is running. wait for the next.`,LOG_LEVEL_VERBOSE);await Promise.race([this.notifier.nextNotify,delay(3e3)]);continue}uploaded?Logger(`${TASK_TITLE}: ${uploaded} files have been uploaded!`,logLevel,"send_journal"):wrapUp||Logger("No files needs to be uploaded!",logLevel,"send_journal");return!0}const{key:key3,value,commit,cancel:cancel2,cancelCount,pendingItems}=queued;this.updateInfo({sent:uploaded,maxPushSeq:pendingItems+uploaded,lastSyncPushSeq:1});Logger(`${TASK_TITLE} ${uploaded} / ${pendingItems+uploaded}${0!=cancelCount?`\nRETRY:${cancelCount}`:""}`,logLevel,"send_journal");Logger(`${TASK_TITLE} ${key3} ${0!=cancelCount?`TRY:${cancelCount}`:""} ${pendingItems} left`,LOG_LEVEL_VERBOSE);if(cancelCount>3){Logger(`${TASK_TITLE} Something went wrong on processing queue ${key3}.`,LOG_LEVEL_NOTICE);return!1}const filename=`${Date.now()}-docs.jsonl.gz`,mime="application/octet-stream",blob=new Blob([value],{type:mime});try{if(!await this.uploadFile(filename,blob,mime))throw new Error("Could not send journalPack to the bucket");await commit();uploaded++;await this.updateCheckPointInfo((info3=>({...info3,sentFiles:info3.sentFiles.add(filename)})));Logger(`${TASK_TITLE}: Uploaded ${key3} as ${filename}`,LOG_LEVEL_INFO)}catch(ex){Logger(`${TASK_TITLE} Could not send journalPack to the bucket (${key3} as ${filename})`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);Logger(`${TASK_TITLE} Uploading ${key3} cancelled for retry`,LOG_LEVEL_VERBOSE);cancel2();await delay(1e3);continue}}while(0==this.requestedStop)}))}async packAndCompress(showMessage=!1){return await shareRunningResult("create_send_data",(async()=>{try{this.isPacking=!0;const MSG_KEY="pack_journal",logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;this.requestedStop=!1;const checkPointInfo=await this.getCheckpointInfo(),max3=(await this.db.info()).update_seq,sentIDs=checkPointInfo.sentIDs,maxOutBufLength=250,maxBinarySize=10485760;let currentLastSeq=checkPointInfo.lastLocalSeq,binarySize=0;const outBuf=[];let isFinished=!1;const startSeq=checkPointInfo.lastLocalSeq,seqToProcess=max3-startSeq;Logger("Packing Journal: Start sending",logLevel,MSG_KEY);do{if(this.requestedStop){Logger("Packing Journal : Stop requested",logLevel,MSG_KEY);isFinished=!0;break}const{changes:changes3,hasNext,packLastSeq}=await this._createJournalPack(currentLastSeq),currentSeq=packLastSeq-startSeq;if(0==changes3.length)isFinished=!0;else{Logger(`Packing Journal: ${currentSeq} / ${seqToProcess}`,logLevel,MSG_KEY);for(const row of changes3){const serialized2=serializeDoc(row);sentIDs.add(this.getDocKey(row));binarySize+=serialized2.length;outBuf.push(serialized2);if(outBuf.length>maxOutBufLength||binarySize>maxBinarySize){const sendBuf=concatUInt8Array2(outBuf),orgLen=sendBuf.byteLength,bin=await wrappedDeflate(sendBuf,{consume:!0,level:8});Logger(`Packing Journal: Compressed ${orgLen} bytes to ${bin.byteLength} bytes (${0!=orgLen?Math.ceil(bin.byteLength/orgLen*100):"--"}%)`,LOG_LEVEL_VERBOSE);await this.trench.queuePermanent("upload_queue",bin);this.notifier.notify();outBuf.length=0;binarySize=0}}}if(outBuf.length>0){const sendBuf=concatUInt8Array2(outBuf),orgLen=sendBuf.byteLength,bin=await wrappedDeflate(sendBuf,{consume:!0,level:8});Logger(`Packing Journal: Compressed ${orgLen} bytes to ${bin.byteLength} bytes (${0!=orgLen?Math.ceil(bin.byteLength/orgLen*100):"--"}%)`,LOG_LEVEL_VERBOSE);await this.trench.queuePermanent("upload_queue",bin);this.notifier.notify()}await this.updateCheckPointInfo((info3=>({...info3,lastLocalSeq:packLastSeq,sentIDs})));currentLastSeq=packLastSeq;if(!hasNext){isFinished=!0;break}}while(0==this.requestedStop&&!isFinished);Logger(0!=seqToProcess?`Packing Journal: Packaging ${seqToProcess}`:"Packing Journal: No journals to be packed!",logLevel,MSG_KEY);this.notifier.notify();return!0}finally{this.isPacking=!1;this.notifier.notify()}}))}async sendLocalJournal(showMessage=!1){this.updateInfo({syncStatus:"JOURNAL_SEND"});if((await Promise.all([this.packAndCompress(showMessage),this.uploadQueued(showMessage)])).every((e3=>e3))&&await this.uploadQueued(showMessage,!0)){this.updateInfo({syncStatus:"COMPLETED"});return!0}this.updateInfo({syncStatus:"ERRORED"});return!1}async _getRemoteJournals(){const StartAfter=[...(await this.getCheckpointInfo()).receivedFiles.keys()].sort(((a2,b3)=>b3.localeCompare(a2,void 0,{numeric:!0})))[0],files=(await this.listFiles(StartAfter)).filter((e3=>!e3.startsWith("_")));return files?files.sort(((a2,b3)=>a2.localeCompare(b3,void 0,{numeric:!0}))):[]}async processDocuments(allDocs2){let applyTotal=0,wholeItems=0;try{const chunks=[],docs=[];allDocs2.forEach((e3=>{e3._id.startsWith("h:")?chunks.push(e3):docs.push(e3)}));try{const e22=(await this.db.allDocs({include_docs:!0,keys:[...chunks.map((e3=>e3._id))]})).rows.map((e3=>{var _a8;return null!=(_a8=e3.id)?_a8:void 0})),existChunks=new Set(e22.filter((e3=>void 0!==e3))),saveChunks=chunks.filter((e3=>!existChunks.has(e3._id))).map((e3=>({...e3,_rev:void 0}))),ret=await this.db.bulkDocs(saveChunks,{new_edits:!0}),saveError=ret.filter((e3=>"error"in e3)).map((e3=>e3.id));saveChunks.filter((e3=>-1===saveError.indexOf(e3._id))).forEach((doc=>eventHub.emitEvent("remote-chunk-fetched",doc)));await this.updateCheckPointInfo((info3=>({...info3,knownIDs:setAllItems(info3.knownIDs,chunks.map((e3=>this.getDocKey(e3))))})));Logger(`Saved ${ret.length} chunks in transferred ${chunks.length} chunks (Error:${saveError.length})`,LOG_LEVEL_VERBOSE)}catch(ex){Logger("Applying chunks failed",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE)}const docsRevs=docs.map((e3=>[e3._id,[e3._rev]])).reduce(((acc,[id,revs])=>{var _a8;return{...acc,[id]:[...null!=(_a8=acc[id])?_a8:[],...revs]}}),{}),diffRevs=await this.db.revsDiff(docsRevs),saveDocs=docs.filter((e3=>{var _a8,_b5;return e3._id in diffRevs&&"missing"in diffRevs[e3._id]&&-1!==(null!=(_b5=null==(_a8=diffRevs[e3._id].missing)?void 0:_a8.indexOf(e3._rev))?_b5:0)}));Logger(`Applying ${saveDocs.length} docs (Total transferred:${docs.length}, docs:${allDocs2.length})`,LOG_LEVEL_VERBOSE);await this.db.bulkDocs(saveDocs,{new_edits:!1});await this.processReplication(saveDocs);await this.updateCheckPointInfo((info3=>({...info3,knownIDs:setAllItems(info3.knownIDs,docs.map((e3=>this.getDocKey(e3))))})));applyTotal+=saveDocs.length;wholeItems+=docs.length;Logger(`Applied ${applyTotal} of ${wholeItems} docs (${wholeItems-applyTotal} skipped)`,LOG_LEVEL_VERBOSE);return!0}catch(ex){Logger("Applying journal failed",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async processDownloadedJournals(showMessage=!1,wrapUp=!1){return await shareRunningResult("process_downloaded_journals",(async()=>{const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,TASK_TITLE="Processing journal:";let downloaded=0;do{const queued=await this.trench.dequeuePermanentWithCommit("parse_file");if(!queued){if(this.isDownloading){Logger(`${TASK_TITLE} Queue run out, but process is running. wait for the next.`,LOG_LEVEL_VERBOSE);await Promise.race([this.notifier.nextNotify,delay(3e3)]);continue}downloaded?Logger(`${TASK_TITLE} ${downloaded} files have been uploaded!`,logLevel,"send_journal"):wrapUp||Logger(`${TASK_TITLE} No files needs to be processed!`,logLevel,"send_journal");return!0}const{key:key3,value,commit,cancel:cancel2,cancelCount,pendingItems}=queued;this.updateInfo({arrived:downloaded,maxPullSeq:pendingItems+downloaded,lastSyncPullSeq:1});Logger(`${TASK_TITLE} ${downloaded} / ${pendingItems+downloaded}${0!=cancelCount?`\nRETRY:${cancelCount}`:""}`,logLevel,"processjournal");if(cancelCount>3){Logger(`${TASK_TITLE} Something went wrong on processing queue ${key3}.`,LOG_LEVEL_NOTICE);return!1}const decompressed=await wrappedInflate(value,{consume:!0});if(0==decompressed.length){await commit();downloaded++;Logger(`${TASK_TITLE}: ${key3} has been processed`,LOG_LEVEL_INFO);continue}let idxFrom=0,idxTo=0;const d4=new TextDecoder,result=[];do{idxTo=decompressed.indexOf(10,idxFrom);if(-1==idxTo)break;const piece=decompressed.slice(idxFrom,idxTo),strPiece=d4.decode(piece);if(strPiece.startsWith("~")){const[key4,data]=strPiece.substring(1).split(UNIT_SPLIT);result.push({_id:key4,data:unescapeNewLineFromString(data),type:"leaf",_rev:""})}else result.push(JSON.parse(strPiece));idxFrom=idxTo+1}while(idxTo>0);try{if(!await this.processDocuments(result))throw new Error("Could not process downloaded journals");await commit();downloaded++;Logger(`${TASK_TITLE}: ${key3} has been processed`,LOG_LEVEL_INFO)}catch(ex){Logger(`${TASK_TITLE}: Could not process downloaded journals`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);Logger(`${TASK_TITLE}: ${key3} cancelled for retry`,LOG_LEVEL_VERBOSE);cancel2();await delay(1e3);continue}}while(0==this.requestedStop);return!0}))}async downloadRemoteJournals(showMessage=!1){return await shareRunningResult("downloadRemoteJournals",(async()=>{try{this.isDownloading=!0;const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;Logger("Receiving Journal: Getting list of remote journal",logLevel,"receivejournal");const files=await this._getRemoteJournals();if(0==files.length){Logger("Receiving Journal: No journals needs to be downloaded",logLevel,"receivejournal");return!0}let count=0;for(const key3 of files){count++;Logger(`Receiving Journal: ${count} / ${files.length}`,logLevel,"receivejournal");if(this.requestedStop){Logger(`Receiving canceled: ${key3}`,logLevel);return!1}if(this._currentCheckPointInfo.sentFiles.has(key3)){Logger(`Receiving Journal: ${key3} is own sent file`,LOG_LEVEL_VERBOSE);await this.updateCheckPointInfo((info3=>({...info3,receivedFiles:info3.receivedFiles.add(key3)})))}else try{const data=await this.downloadFile(key3);if(!1===data)throw new Error("Download Error");await this.trench.queuePermanent("parse_file",data);await this.updateCheckPointInfo((info3=>({...info3,receivedFiles:info3.receivedFiles.add(key3)})));this.notifier.notify()}catch(ex){Logger(`Could not download ${key3}`,logLevel);Logger(ex,LOG_LEVEL_DEBUG);return!1}}}finally{this.isDownloading=!1;this.notifier.notify()}this.notifier.notify();return!0}))}async receiveRemoteJournal(showMessage=!1){this.updateInfo({syncStatus:"JOURNAL_RECEIVE"});this.requestedStop=!1;if((await Promise.all([this.downloadRemoteJournals(showMessage),this.processDownloadedJournals(showMessage)])).every((e3=>e3))&&await this.processDownloadedJournals(showMessage,!0)){this.updateInfo({syncStatus:"COMPLETED"});return!0}this.updateInfo({syncStatus:"ERRORED"});return!1}async sync(showResult=!1){var _a8;return null!=(_a8=await shareRunningResult("replicate",(async()=>{this.requestedStop=!1;const receiveResult=await this.receiveRemoteJournal(showResult);if(!this.requestedStop){if(receiveResult)return await this.sendLocalJournal(showResult);Logger("Could not receive remote journal, so we prevent sending local journals to prevent unwanted mass transfers",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO)}})))&&_a8}requestStop(){this.requestedStop=!0}};webcrypto3=globalThis.crypto;SALT=(new TextEncoder).encode("fancySyncForYou!");previousPassphrase="";_nonceV3=new Uint32Array(1);bufV3=new Uint8Array(12);previousDecryptionPassphrase="";webcrypto4=globalThis.crypto;ENCRYPT_V1_PREFIX_PROBABLY="[";ENCRYPT_V2_PREFIX="%";ENCRYPT_V3_PREFIX="%~";KeyBuffs=new Map;decKeyBuffs=new Map;KEY_RECYCLE_COUNT=100;nonceBuffer=new Uint32Array(1);webcrypto5=globalThis.crypto;keyGCCount=5*KEY_RECYCLE_COUNT;decKeyIdx=0;decKeyMin=0;JournalSyncMinio=class extends JournalSyncAbstract{getRemoteKey(){return this.getHash(this._settings)}async getReplicationPBKDF2Salt(refresh){const manager=createSyncParamsHanderForServer(this.getRemoteKey(),{put:params=>this.putSyncParameters(params),get:()=>this.getSyncParameters(),create:()=>this.getInitialSyncParameters()});return await manager.getPBKDF2Salt(refresh)}isEncryptionPrevented(fileName){return!!fileName.endsWith("_obsidian_livesync_journal_sync_parameters.json")}_getClient(){if(this._instance)return this._instance;const ep=this.endpoint?{endpoint:this.endpoint,forcePathStyle:this.forcePathStyle}:{};this._instance=new S3({region:this.region,...ep,credentials:{accessKeyId:this.id,secretAccessKey:this.key},maxAttempts:4,retryStrategy:new ConfiguredRetryStrategy(4,(attempt=>100+1e3*attempt)),requestHandler:this.useCustomRequestHandler?this.env.services.API.getCustomFetchHandler():void 0,requestChecksumCalculation:"WHEN_REQUIRED",responseChecksumValidation:"WHEN_REQUIRED"});const bucketCustomHeaders=this.customHeaders;this._instance.middlewareStack.add(((next2,context2)=>args=>{bucketCustomHeaders.forEach((([key3,value])=>{key3&&value&&(args.request.headers[key3]=value)}));return next2(args)}),{name:"addBucketCustomHeadersMiddleware",step:"build"});const arrayBufferToBase64Sync=buffer=>btoa(String.fromCharCode(...new Uint8Array(buffer)));this._instance.middlewareStack.add(applyMd5BodyChecksumMiddleware({md5:Md5,base64Encoder:data=>arrayBufferToBase64Sync(data.buffer),streamHasher:(hashConstructor,stream)=>{const result=promiseWithResolver(),hash3=new hashConstructor;stream.on("data",(chunk=>{hash3.update(chunk)}));stream.on("end",(()=>{result.resolve(hash3.digest())}));return result.promise}}),{step:"build",name:"applyMd5BodyChecksumMiddlewareForDeleteObjects"});clearHandlers();return this._instance}async resetBucket(){var _a8;const client=this._getClient();let files=[],deleteCount=0,errorCount=0;try{do{files=await this.listFiles("",100);if(0==files.length)break;const cmd2=new DeleteObjectsCommand({Bucket:this.bucket,Delete:{Objects:files.map((e3=>({Key:`${this.prefix}${e3}`})))}}),r5=await client.send(cmd2),{Deleted,Errors}=r5;deleteCount+=(null==Deleted?void 0:Deleted.length)||0;errorCount+=(null==Errors?void 0:Errors.length)||0;Logger(`${deleteCount} items has been deleted!${0!=errorCount?` (${errorCount} items failed to delete)`:""}`,LOG_LEVEL_NOTICE,"reset-bucket")}while(0!=files.length);clearHandlers()}catch(ex){Logger("WARNING! Could not delete files. you should try it once or remake the bucket manually",LOG_LEVEL_NOTICE,"reset-bucket");Logger(ex,LOG_LEVEL_VERBOSE)}const journals=await this._getRemoteJournals();if(0==journals.length){Logger("Nothing to delete!",LOG_LEVEL_NOTICE);return!0}const cmd=new DeleteObjectsCommand({Bucket:this.bucket,Delete:{Objects:journals.map((e3=>({Key:e3})))}}),r4=await client.send(cmd);Logger(`${(null==(_a8=null==r4?void 0:r4.Deleted)?void 0:_a8.length)||0} items has been deleted!`,LOG_LEVEL_NOTICE);await this.resetCheckpointInfo();return!0}async uploadJson(key3,body){try{return await this.uploadFile(key3,new Blob([JSON.stringify(body)]),"application/json")}catch(ex){Logger(`Could not upload json ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async downloadJson(key3){try{const ret=await this.downloadFile(key3,!0);return!!ret&&JSON.parse((new TextDecoder).decode(ret))}catch(ex){Logger(`Could not download json ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async uploadFile(key3,blob,mime){try{let u2=new Uint8Array(await blob.arrayBuffer());const set2=this.env.getSettings();if(set2.encrypt&&""!=set2.passphrase&&!this.isEncryptionPrevented(key3))if(set2.E2EEAlgorithm===E2EEAlgorithms.V2){const salt=await this.getReplicationPBKDF2Salt();u2=await encryptBinary(u2,set2.passphrase,salt)}else u2=await encryptBinary2(u2,set2.passphrase,set2.useDynamicIterationCount);const client=this._getClient(),cmd=new PutObjectCommand({Bucket:this.bucket,Key:`${this.prefix}${key3}`,Body:u2,ContentType:mime});if(await client.send(cmd))return!0}catch(ex){Logger(`Could not upload ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE)}return!1}async downloadFile(key3,ignoreCache=!1){const client=this._getClient(),cmd=new GetObjectCommand({Bucket:this.bucket,Key:`${this.prefix}${key3}`,...ignoreCache?{ResponseCacheControl:"no-cache"}:{}}),r4=await client.send(cmd),set2=this.env.getSettings();try{if(r4.Body){let u2=new Uint8Array(await r4.Body.transformToByteArray());if(set2.encrypt&&""!=set2.passphrase&&!this.isEncryptionPrevented(key3))if(set2.E2EEAlgorithm===E2EEAlgorithms.V2){const salt=await this.getReplicationPBKDF2Salt();u2=await decryptBinary(u2,set2.passphrase,salt)}else if(set2.E2EEAlgorithm===E2EEAlgorithms.V1)try{const salt=await this.getReplicationPBKDF2Salt();u2=await decryptBinary(u2,set2.passphrase,salt)}catch(ex){Logger(`Could not decrypt ${key3} in v2`,LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);u2=new Uint8Array(await decryptBinary2(u2,set2.passphrase,set2.useDynamicIterationCount))}else set2.E2EEAlgorithm===E2EEAlgorithms.ForceV1&&(u2=new Uint8Array(await decryptBinary2(u2,set2.passphrase,set2.useDynamicIterationCount)));return u2}}catch(ex){Logger(`Could not download ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE)}return!1}async listFiles(from,limit){const client=this._getClient(),objects=await client.listObjectsV2({Bucket:this.bucket,Prefix:this.prefix,StartAfter:`${this.prefix||""}${from||""}`,...limit?{MaxKeys:limit}:{}});return objects.Contents?objects.Contents.filter((e3=>{var _a8;return null==(_a8=e3.Key)?void 0:_a8.startsWith(this.prefix)})).map((e3=>{var _a8;return null==(_a8=e3.Key)?void 0:_a8.substring(this.prefix.length)})):[]}async isAvailable(){const client=this._getClient(),cmd=new HeadBucketCommand({Bucket:this.bucket});try{await client.send(cmd);return!0}catch(ex){Logger("Could not connected to the remote bucket",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async getUsage(){const client=this._getClient();try{const objects=await client.listObjectsV2({Bucket:this.bucket});return objects.Contents?{estimatedSize:objects.Contents.reduce(((acc,e3)=>acc+(e3.Size||0)),0)}:{}}catch(ex){Logger("Could not get status of the remote bucket",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}};MILSTONE_DOCID="_00000000-milestone.json";currentVersionRange={min:0,max:2,current:2};LiveSyncJournalReplicator=class extends LiveSyncAbstractReplicator{constructor(env){super(env);this.syncStatus="NOT_CONNECTED";this.docArrived=0;this.docSent=0;this.lastSyncPullSeq=0;this.maxPullSeq=0;this.lastSyncPushSeq=0;this.maxPushSeq=0;this.nodeid="";this.remoteLocked=!1;this.remoteCleaned=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.updateInfo=()=>{this.env.replicationStat.value={sent:this.docSent,arrived:this.docArrived,maxPullSeq:this.maxPullSeq,maxPushSeq:this.maxPushSeq,lastSyncPullSeq:this.lastSyncPullSeq,lastSyncPushSeq:this.lastSyncPushSeq,syncStatus:this.syncStatus}};this.env=env;fireAndForget((()=>this.initializeDatabaseForReplication()));this.env.getDatabase().on("close",(()=>{this.closeReplication()}))}get client(){return this.setupJournalSyncClient()}async getReplicationPBKDF2Salt(setting,refresh){return await this.client.getReplicationPBKDF2Salt(refresh)}setupJournalSyncClient(){const settings=this.env.getSettings();this._client?this._client.applyNewConfig(settings,this.env.simpleStore,this.env):this._client=new JournalSyncMinio(settings,this.env.simpleStore,this.env);return this._client}async ensureBucketIsCompatible(deviceNodeID,currentVersionRange3){const downloadedMilestone=await this.client.downloadJson(MILSTONE_DOCID),cPointInfo=await this.client.getCheckpointInfo(),progress=[...(null==cPointInfo?void 0:cPointInfo.receivedFiles)||[]].sort().pop()||"";return await ensureRemoteIsCompatible(downloadedMilestone,this.env.getSettings(),deviceNodeID,currentVersionRange3,{app_version:this.env.services.API.getAppVersion(),plugin_version:this.env.services.API.getPluginVersion(),vault_name:this.env.services.vault.vaultName(),device_name:this.env.services.vault.getVaultName(),progress},(async info3=>{await this.client.uploadJson(MILSTONE_DOCID,info3)}))}async migrate(from,to){Logger(`Database updated from ${from} to ${to}`,LOG_LEVEL_NOTICE);return Promise.resolve(!0)}terminateSync(){this.client.requestStop()}async openReplication(setting,_,showResult,ignoreCleanLock=!1){if(!await this.checkReplicationConnectivity(!1,ignoreCleanLock))return!1;await this.client.sync(showResult)}async replicateAllToServer(setting,showingNotice){return!!await this.checkReplicationConnectivity(!1)&&await this.client.sendLocalJournal(showingNotice)}async replicateAllFromServer(setting,showingNotice){return!!await this.checkReplicationConnectivity(!1)&&await this.client.receiveRemoteJournal(showingNotice)}async checkReplicationConnectivity(skipCheck,ignoreCleanLock=!1){if(!await this.client.isAvailable())return!1;if(!skipCheck){this.remoteCleaned=!1;this.remoteLocked=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.tweakSettingsMismatched=!1;const ensure=await this.ensureBucketIsCompatible(this.nodeid,currentVersionRange);if("INCOMPATIBLE"==ensure){Logger("The remote database has no compatibility with the running version. Please upgrade the plugin.",LOG_LEVEL_NOTICE);return!1}if("NODE_LOCKED"==ensure){Logger("The remote database has been rebuilt or corrupted since we have synchronized last time. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;return!1}if("LOCKED"==ensure)this.remoteLocked=!0;else if("NODE_CLEANED"==ensure){if(!ignoreCleanLock){Logger("The remote database has been cleaned up. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;this.remoteCleaned=!0;return!1}this.remoteLocked=!0}else if("OK"==ensure);else if("MISMATCHED"==ensure[0]){Logger("Configuration mismatching between the clients has been detected. This can be harmful or extra capacity consumption. We have to make these value unified.",LOG_LEVEL_NOTICE);this.tweakSettingsMismatched=!0;this.preferredTweakValue=ensure[1];return!1}}return!0}async fetchRemoteChunks(missingChunks,showResult){return Promise.resolve([])}closeReplication(){this.client.requestStop();this.syncStatus="CLOSED";Logger("Replication closed");this.updateInfo()}async tryResetRemoteDatabase(setting){this.closeReplication();try{await this.client.resetBucket();clearHandlers();Logger("Remote Bucket Cleared",LOG_LEVEL_NOTICE);await this.tryCreateRemoteDatabase(setting)}catch(ex){Logger("Something happened on Remote Bucket Clear",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_NOTICE)}}async tryCreateRemoteDatabase(setting){this.closeReplication();Logger("Remote Database Created or Connected",LOG_LEVEL_NOTICE);clearHandlers();await this.ensurePBKDF2Salt(setting,!0,!1);return await Promise.resolve()}async markRemoteLocked(setting,locked,lockByClean){const defInitPoint={_id:MILSTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked,cleaned:lockByClean,accepted_nodes:[this.nodeid],node_chunk_info:{[this.nodeid]:currentVersionRange},node_info:{},tweak_values:{}},remoteMilestone={...defInitPoint,...await this.client.downloadJson(MILSTONE_DOCID)||{}};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=[this.nodeid];remoteMilestone.locked=locked;remoteMilestone.cleaned=remoteMilestone.cleaned||lockByClean;Logger(locked?"Lock remote bucket to prevent data corruption":"Unlock remote bucket to prevent data corruption",LOG_LEVEL_NOTICE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}async markRemoteResolved(setting){const defInitPoint={_id:MILSTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked:!1,accepted_nodes:[this.nodeid],node_chunk_info:{[this.nodeid]:currentVersionRange},node_info:{},tweak_values:{}},remoteMilestone={...defInitPoint,...await this.client.downloadJson(MILSTONE_DOCID)||{}};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=Array.from(new Set([...remoteMilestone.accepted_nodes,this.nodeid]));Logger("Mark this device as 'resolved'.",LOG_LEVEL_NOTICE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}async tryConnectRemote(setting,showResult=!0){const endpoint=setting.endpoint,testClient=new JournalSyncMinio(setting,this.env.simpleStore,this.env);try{await testClient.listFiles("",1);Logger(`Connected to ${endpoint} successfully!`,LOG_LEVEL_NOTICE);return!0}catch(ex){Logger(`Error! Could not connected to ${endpoint}\n${ex.message}`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_NOTICE);return!1}}async resetRemoteTweakSettings(setting){try{const remoteMilestone=await this.client.downloadJson(MILSTONE_DOCID);if(!remoteMilestone)throw new Error("Missing remote milestone");remoteMilestone.tweak_values={};Logger("tweak values on the remote database have been cleared",LOG_LEVEL_VERBOSE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}}async setPreferredRemoteTweakSettings(setting){try{const remoteMilestone=await this.client.downloadJson(MILSTONE_DOCID);if(!remoteMilestone)throw new Error("Missing remote milestone");remoteMilestone.tweak_values[DEVICE_ID_PREFERRED]=extractObject(TweakValuesTemplate,{...setting});Logger("tweak values on the remote database have been cleared",LOG_LEVEL_VERBOSE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}}async getRemotePreferredTweakValues(setting){var _a8;try{const remoteMilestone=await this.client.downloadJson(MILSTONE_DOCID);if(!remoteMilestone)throw new Error("Missing remote milestone");return(null==(_a8=null==remoteMilestone?void 0:remoteMilestone.tweak_values)?void 0:_a8[DEVICE_ID_PREFERRED])||!1}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async getRemoteStatus(setting){const testClient=new JournalSyncMinio(setting,this.env.simpleStore,this.env);return await testClient.getUsage()}countCompromisedChunks(){Logger("Bucket Sync Replicator cannot count compromised chunks",LOG_LEVEL_VERBOSE);return Promise.resolve(0)}getConnectedDeviceList(setting){return Promise.resolve(!1)}};checkRemoteVersion=async(db,migrate,barrier=12)=>{try{const versionInfo=await db.get("obsydian_livesync_version");if("versioninfo"!=versionInfo.type)return!1;const version2=versionInfo.version;if(version2{const vi={_id:"obsydian_livesync_version",version:barrier,type:"versioninfo"},versionInfo=await resolveWithIgnoreKnownError(db.get("obsydian_livesync_version"),vi);if("versioninfo"!=versionInfo.type)return!1;vi._rev=versionInfo._rev;await db.put(vi);return!0};checkSyncInfo=async db=>{try{const syncinfo=await db.get(SYNCINFO_ID);console.log(syncinfo);return!0}catch(ex){if(isErrorOfMissingDoc(ex)){const randomStrSrc="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",temp=[...Array(30)].map((_e2=>Math.floor(Math.random()*randomStrSrc.length))).map((e3=>randomStrSrc[e3])).join(""),newSyncInfo={_id:SYNCINFO_ID,type:"syncinfo",data:temp};return!!await db.put(newSyncInfo)}console.dir(ex);return!1}};SELECTOR_COMPROMISED_CHUNK_1={selector:{_id:{$lt:"h:"},type:"leaf"}};SELECTOR_COMPROMISED_CHUNK_2={selector:{_id:{$gt:"h;"},type:"leaf"}};SYMBOL_USED=Symbol("used");SYMBOL_END_OF_DATA=Symbol("endOfData");workerStreams=new Map;writers=new Map;responseBuf=new Map;writerPromise=Promise.resolve();tasks2=new Map;workers=[];key2=0;roundRobinIdx=0;initialiseWorkerModule();encrypt5=function encryptWorker(input,passphrase,autoCalculateIterations){return encryptionOnWorker({type:"encrypt",input,passphrase,autoCalculateIterations})};decrypt5=function decryptWorker(input,passphrase,autoCalculateIterations){return encryptionOnWorker({type:"decrypt",input,passphrase,autoCalculateIterations})};encryptHKDF=encryptHKDFWorker;decryptHKDF=function decryptHKDFWorker(input,passphrase,pbkdf2Salt){return encryptionHKDFOnWorker({type:"decryptHKDF",input,passphrase,pbkdf2Salt})};Encrypt_HKDF_Header="%=";Encrypt_OLD_Header="%";EncryptionVersions_UNENCRYPTED=0,EncryptionVersions_ENCRYPTED=1,EncryptionVersions_HKDF=2,EncryptionVersions_UNKNOWN=99;ENCRYPTED_META_PREFIX="/\\:";MESSAGE_FALLBACK_DECRYPT_FAILED="Failed to decrypt the data with V1 method. Cannot encrypt with HKDF.";ENCRYPTION_HKDF_FAILED="Encryption with HKDF failed.";DECRYPTION_HKDF_FAILED="Decryption with HKDF failed.";DECRYPTION_FALLBACK_FAILED="Decryption with fallback failed.";preprocessOutgoing=async doc=>await Promise.resolve(doc);enableEncryption=(db,passphrase,useDynamicIterationCount,migrationDecrypt,getPBKDF2Salt,algorithm)=>{const decrypted=new Map,incoming=doc=>algorithm===E2EEAlgorithms.V2?incomingEncryptHKDF(doc,passphrase,useDynamicIterationCount,getPBKDF2Salt):incomingEncryptV1(doc,passphrase,useDynamicIterationCount);preprocessOutgoing=incoming;db.transform({incoming,outgoing:doc=>algorithm!==E2EEAlgorithms.ForceV1?outgoingDecryptHKDF(doc,0,0,passphrase,useDynamicIterationCount,getPBKDF2Salt):outgoingDecryptV1(doc,migrationDecrypt,decrypted,passphrase,useDynamicIterationCount)})};EDEN_ENCRYPTED_KEY="h:++encrypted";EDEN_ENCRYPTED_KEY_HKDF="h:++encrypted-hkdf";currentVersionRange2={min:0,max:2400,current:2};selectorOnDemandPull={selector:{type:{$ne:"leaf"}}};LiveSyncCouchDBReplicator=class extends LiveSyncAbstractReplicator{constructor(env){super(env);this.syncStatus="NOT_CONNECTED";this.docArrived=0;this.docSent=0;this.lastSyncPullSeq=0;this.maxPullSeq=0;this.lastSyncPushSeq=0;this.maxPushSeq=0;this.nodeid="";this.remoteLocked=!1;this.remoteCleaned=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.updateInfo=()=>{this.env.replicationStat.value={sent:this.docSent,arrived:this.docArrived,maxPullSeq:this.maxPullSeq,maxPushSeq:this.maxPushSeq,lastSyncPullSeq:this.lastSyncPullSeq,lastSyncPushSeq:this.lastSyncPushSeq,syncStatus:this.syncStatus}};this.env=env;this.initializeDatabaseForReplication();this.env.getDatabase().on("close",(()=>{this.closeReplication()}))}isMobile(){return this.env.services.API.isMobile()}getInitialSyncParameters(setting){return Promise.resolve({...DEFAULT_SYNC_PARAMETERS,protocolVersion:2})}async getSyncParameters(setting){try{const downloadedSyncParams=await this.fetchRemoteDocument(setting,"_local/obsidian_livesync_sync_parameters");if(!downloadedSyncParams)throw new SyncParamsNotFoundError("Sync parameters not found on remote server");return downloadedSyncParams}catch(ex){Logger("Could not retrieve remote sync parameters",LOG_LEVEL_INFO);throw SyncParamsFetchError.fromError(ex)}}async putSyncParameters(setting,params){try{const ret=await this.putRemoteDocument(setting,params);if(ret.ok)return!0;throw new SyncParamsUpdateError(`Could not store remote sync parameters: ${JSON.stringify(ret)}`)}catch(ex){Logger("Could not store remote sync parameters",LOG_LEVEL_INFO);throw SyncParamsUpdateError.fromError(ex)}}async getReplicationPBKDF2Salt(setting,refresh){const manager=createSyncParamsHanderForServer(`${setting.couchDB_URI}/${setting.couchDB_DBNAME}`,{put:params=>this.putSyncParameters(setting,params),get:()=>this.getSyncParameters(setting),create:()=>this.getInitialSyncParameters(setting)});return await manager.getPBKDF2Salt(refresh)}async migrate(from,to){Logger(`Database updated from ${from} to ${to}`,LOG_LEVEL_NOTICE);return Promise.resolve(!0)}terminateSync(){if(this.controller){this.controller.abort();this.controller=void 0}}async openReplication(setting,keepAlive,showResult,ignoreCleanLock){await this.initializeDatabaseForReplication();if(!keepAlive)return this.openOneShotReplication(setting,showResult,!1,"sync",ignoreCleanLock);this.openContinuousReplication(setting,showResult,!1)}replicationActivated(showResult){this.syncStatus="CONNECTED";this.updateInfo();Logger("Replication activated",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync")}async replicationChangeDetected(e3,showResult,docSentOnStart,docArrivedOnStart){try{if("pull"==e3.direction){await this.env.services.replication.parseSynchroniseResult(e3.change.docs);this.docArrived+=e3.change.docs.length}else this.docSent+=e3.change.docs.length;if(showResult){const maxPullSeq=this.maxPullSeq,maxPushSeq=this.maxPushSeq,lastSyncPullSeq=this.lastSyncPullSeq,lastSyncPushSeq=this.lastSyncPushSeq,pushLast=0==lastSyncPushSeq?"":lastSyncPushSeq>=maxPushSeq?" (LIVE)":` (${maxPushSeq-lastSyncPushSeq})`,pullLast=0==lastSyncPullSeq?"":lastSyncPullSeq>=maxPullSeq?" (LIVE)":` (${maxPullSeq-lastSyncPullSeq})`;Logger(`↑${this.docSent-docSentOnStart}${pushLast} ↓${this.docArrived-docArrivedOnStart}${pullLast}`,LOG_LEVEL_NOTICE,"sync")}this.updateInfo()}catch(ex){Logger("Replication callback error",LOG_LEVEL_NOTICE,"sync");Logger(ex,LOG_LEVEL_VERBOSE)}}replicationCompleted(showResult){this.syncStatus="COMPLETED";this.updateInfo();Logger("Replication completed",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,showResult?"sync":"");this.terminateSync()}replicationDenied(e3){this.syncStatus="ERRORED";this.updateInfo();this.terminateSync();Logger("Replication denied",LOG_LEVEL_NOTICE,"sync");Logger(e3,LOG_LEVEL_VERBOSE)}replicationErrored(e3){this.syncStatus="ERRORED";this.terminateSync();this.updateInfo();Logger("Replication error",LOG_LEVEL_NOTICE,"sync");Logger(e3,LOG_LEVEL_VERBOSE)}replicationPaused(){this.syncStatus="PAUSED";this.updateInfo();Logger("Replication paused",LOG_LEVEL_VERBOSE,"sync")}async processSync(syncHandler,showResult,docSentOnStart,docArrivedOnStart,syncMode,retrying,reportCancelledAsDone=!0){const controller=new AbortController;this.controller&&this.controller.abort();this.controller=controller;const gen=genReplication(syncHandler,controller.signal);try{for await(const[type,e3]of gen){const releaser=await globalConcurrencyController.tryAcquire(1,3e6);if(!1===releaser){Logger("Replication stopped for busy.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");return"FAILED"}releaser();switch(type){case"change":if("direction"in e3){"pull"==e3.direction?this.lastSyncPullSeq=Number(`${e3.change.last_seq}`.split("-")[0]):this.lastSyncPushSeq=Number(`${e3.change.last_seq}`.split("-")[0]);await this.replicationChangeDetected(e3,showResult,docSentOnStart,docArrivedOnStart)}else if("pullOnly"==syncMode){this.lastSyncPullSeq=Number(`${e3.last_seq}`.split("-")[0]);await this.replicationChangeDetected({direction:"pull",change:e3},showResult,docSentOnStart,docArrivedOnStart)}else if("pushOnly"==syncMode){this.lastSyncPushSeq=Number(`${e3.last_seq}`.split("-")[0]);this.updateInfo();await this.replicationChangeDetected({direction:"push",change:e3},showResult,docSentOnStart,docArrivedOnStart)}if(retrying&&this.docSent-docSentOnStart+(this.docArrived-docArrivedOnStart)>2*this.originalSetting.batch_size)return"NEED_RESURRECT";break;case"complete":this.replicationCompleted(showResult);return"DONE";case"active":this.replicationActivated(showResult);break;case"denied":this.replicationDenied(e3);return"FAILED";case"error":this.replicationErrored(e3);Logger("Replication stopped.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");if(this.env.services.API.isLastPostFailedDueToPayloadSize()){if(e3&&413==(null==e3?void 0:e3.status)){Logger("Something went wrong during synchronisation. Please check the log!",LOG_LEVEL_NOTICE);return"FAILED"}return"NEED_RETRY"}Logger("Replication error",LOG_LEVEL_NOTICE,"sync");Logger(e3,LOG_LEVEL_VERBOSE);return"FAILED";case"paused":this.replicationPaused();break;case"finally":break;default:Logger(`Unexpected synchronization status:${JSON.stringify(e3)}`)}}return reportCancelledAsDone?"DONE":"CANCELLED"}catch(ex){Logger("Unexpected synchronization exception");Logger(ex,LOG_LEVEL_VERBOSE);return"FAILED"}finally{this.terminateSync();this.controller=void 0}}getEmptyMaxEntry(remoteID){return{_id:`_local/max_seq_on_chunk-${remoteID}`,maxSeq:0,remoteID,seqStatusMap:{},_rev:void 0}}async getLastTransferredSeqOfChunks(localDB,remoteID){const prevMax={_id:`_local/max_seq_on_chunk-${remoteID}`,maxSeq:0,remoteID,seqStatusMap:{},_rev:void 0},previous_max_seq_on_chunk=await wrapException((()=>localDB.get(prevMax._id)));return previous_max_seq_on_chunk instanceof Error?prevMax:previous_max_seq_on_chunk}async updateMaxTransferredSeqOnChunks(localDB,remoteID,seqStatusMap){const newMax={_id:"_local/max_seq_on_chunk",maxSeq:0,remoteID,seqStatusMap,_rev:void 0},seqs=Object.keys(seqStatusMap).map((e3=>Number(e3)));let maxSeq=0;for(const seq of seqs){if(!seqStatusMap[seq])break;maxSeq=seq}Logger(`Updating max seq on chunk to ${maxSeq}`,LOG_LEVEL_VERBOSE);newMax.maxSeq=maxSeq;const previous_max_seq_on_chunk=await wrapException((()=>localDB.get(newMax._id)));if(previous_max_seq_on_chunk instanceof Error)delete newMax._rev;else{newMax._rev=previous_max_seq_on_chunk._rev;newMax.seqStatusMap={...previous_max_seq_on_chunk.seqStatusMap,...seqStatusMap}}await wrapException((()=>localDB.put(newMax)));return newMax}async sendChunks(setting,remoteDB,showResult,fromSeq){const trench=new Trench(this.env.services.database.openSimpleStore("sc-"),!1);await trench.eraseAllEphemerals();if(!remoteDB){const d4=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof d4){Logger($msg("liveSyncReplicator.couldNotConnectToRemoteDb",{d:d4}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");return!1}remoteDB=d4.db}await this.checkReplicationConnectivity(setting,!1,!1,!1,!1);Logger("Bulk sending chunks to remote database...",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");const remoteMilestone=await remoteDB.get(MILESTONE_DOCID),remoteID=null==remoteMilestone?void 0:remoteMilestone.created,localDB=this.env.getDatabase(),te5=new TextEncoder;Logger($msg("liveSyncReplicator.checkingLastSyncPoint"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");this.syncStatus="CONNECTED";const prev=await this.getLastTransferredSeqOfChunks(localDB,remoteID),seq=null!=fromSeq?fromSeq:prev.maxSeq,localScannedDocs=[],sentMap={},diffChunks=localDB.changes({since:seq,live:!1,include_docs:!0,return_docs:!1,selector:{type:"leaf"}}).on("change",(e3=>{const numSeq=Number(e3.seq);prev.seqStatusMap[numSeq]||localScannedDocs.push({id:e3.id,seq:Number(e3.seq)})}));await diffChunks;localScannedDocs.sort(((a2,b3)=>a2.seq-b3.seq));const idSeqMap=Object.fromEntries(localScannedDocs.map((e3=>[e3.id,e3.seq])));for(const checkDocs of arrayToChunkedArray(localScannedDocs,250)){const remoteDocs=await remoteDB.allDocs({keys:checkDocs.map((e3=>e3.id)),include_docs:!1}),remoteDocMap=Object.fromEntries(remoteDocs.rows.map((e3=>[e3.key,"error"in e3?e3.error:e3.value]))),sendDocs=checkDocs.filter((e3=>"not_found"==remoteDocMap[e3.id])),sentDocs=checkDocs.filter((e3=>"not_found"!=remoteDocMap[e3.id]));sendDocs.forEach((e3=>sentMap[e3.seq]=!1));sentDocs.forEach((e3=>sentMap[e3.seq]=!0));const sendDocsMap=Object.fromEntries(sendDocs.map((e3=>[e3.id,e3.seq])));if(sendDocs.length>0){const localDocs=await localDB.allDocs({keys:sendDocs.map((e3=>e3.id)),include_docs:!0});await trench.queue("send-chunks",localDocs.rows.filter((e3=>"id"in e3)).map((e3=>({seq:sendDocsMap[e3.id],doc:e3.doc,id:e3.id}))))}}let bulkDocs2=[],bulkDocsSizeBytes=0,bulkDocsSizeCount=0,maxSeq=0;const maxBatchSizeBytes=1024*setting.sendChunksBulkMaxSize*1024,semaphore=Semaphore(4);let sendingDocs=0,sentDocsCount=0;const sendChunks=async(bulkDocs3,bulkDocsSize,seq2)=>{Logger(`Sending ${bulkDocs3.length} (${bulkDocsSize} => ${sizeToHumanReadable(bulkDocsSize)} in plain) chunks to remote database...`,LOG_LEVEL_VERBOSE);const releaser=await semaphore.acquire(1);sendingDocs+=bulkDocs3.length;Logger(`↑ Uploading chunks \n${sendingDocs}/(${sentDocsCount} done)`,showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send");try{const uploadBulkDocTasks=bulkDocs3.map((e3=>preprocessOutgoing(e3))),uploadBulkDocs=await Promise.all(uploadBulkDocTasks);await remoteDB.bulkDocs(uploadBulkDocs,{new_edits:!1});uploadBulkDocs.forEach((e3=>sentMap[idSeqMap[e3._id]]=!0));await this.updateMaxTransferredSeqOnChunks(localDB,remoteID,sentMap);sentDocsCount+=bulkDocs3.length;Logger(`↑ Uploading chunks \n${sendingDocs}/(${sentDocsCount} done)`,showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send")}catch(ex){Logger("Bulk sending failed.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send");Logger(ex,LOG_LEVEL_VERBOSE);return!1}finally{releaser()}return!0},tasks3=[];for(;;){const nowSendChunks=await trench.dequeue("send-chunks");if(!nowSendChunks||0==nowSendChunks.length)break;for(const chunk of nowSendChunks){const jsonLength=te5.encode(JSON.stringify(chunk.doc)).byteLength+32;if((bulkDocsSizeBytes+jsonLength>maxBatchSizeBytes||bulkDocsSizeCount+1>200)&&bulkDocs2.length>0){tasks3.push(sendChunks([...bulkDocs2],bulkDocsSizeBytes));bulkDocs2=[];bulkDocsSizeBytes=0;bulkDocsSizeCount=0}bulkDocs2.push(chunk.doc);maxSeq=chunk.seq;bulkDocsSizeBytes+=jsonLength;bulkDocsSizeCount+=1}bulkDocs2.length>0&&tasks3.push(sendChunks([...bulkDocs2],bulkDocsSizeBytes));if((await Promise.all(tasks3.map((async e3=>{try{await e3}catch(ex){Logger("Bulk sending failed.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send");Logger(ex,LOG_LEVEL_VERBOSE);return!1}})))).some((e3=>!1===e3)))return!1}return!0}async openOneShotReplication(setting,showResult,retrying,syncMode,ignoreCleanLock=!1){if(!1===await this.ensurePBKDF2Salt(setting,showResult,!retrying))return!1;const next2=await shareRunningResult("oneShotReplication",(async()=>{if(this.controller){Logger($msg("liveSyncReplicator.replicationInProgress"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");return!1}const localDB=this.env.getDatabase();Logger($msg("liveSyncReplicator.oneShotSyncBegin",{syncMode}));const ret=await this.checkReplicationConnectivity(setting,!1,retrying,showResult,ignoreCleanLock);if(!1===ret){Logger($msg("liveSyncReplicator.couldNotConnectToServer"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");return!1}this.maxPullSeq=Number(`${ret.info.update_seq}`.split("-")[0]);this.maxPushSeq=Number(`${(await localDB.info()).update_seq}`.split("-")[0]);showResult&&Logger($msg("liveSyncReplicator.checkingLastSyncPoint"),LOG_LEVEL_NOTICE,"sync");const{db,syncOptionBase}=ret;this.syncStatus="STARTED";this.updateInfo();const docArrivedOnStart=this.docArrived,docSentOnStart=this.docSent;retrying||(this.originalSetting=setting);this.terminateSync();const syncHandler="sync"==syncMode?localDB.sync(db,{...syncOptionBase}):"pullOnly"==syncMode?localDB.replicate.from(db,{...syncOptionBase,...setting.readChunksOnline?selectorOnDemandPull:{}}):"pushOnly"==syncMode?localDB.replicate.to(db,{...syncOptionBase}):void 0,syncResult=await this.processSync(syncHandler,showResult,docSentOnStart,docArrivedOnStart,syncMode,retrying,!1);if("DONE"==syncResult)return!0;if("CANCELLED"==syncResult)return!1;if("FAILED"==syncResult)return!1;if("NEED_RESURRECT"==syncResult){this.terminateSync();return async()=>await this.openOneShotReplication(this.originalSetting,showResult,!1,syncMode,ignoreCleanLock)}if("NEED_RETRY"==syncResult){const tempSetting=JSON.parse(JSON.stringify(setting));tempSetting.batch_size=Math.ceil(tempSetting.batch_size/2)+2;tempSetting.batches_limit=Math.ceil(tempSetting.batches_limit/2)+2;if(tempSetting.batch_size<=5&&tempSetting.batches_limit<=5){Logger($msg("liveSyncReplicator.cantReplicateLowerValue"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}Logger($msg("liveSyncReplicator.retryLowerBatchSize",{batch_size:tempSetting.batch_size.toString(),batches_limit:tempSetting.batches_limit.toString()}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return async()=>await this.openOneShotReplication(tempSetting,showResult,!0,syncMode,ignoreCleanLock)}return!1}));return"boolean"==typeof next2?next2:await next2()}replicateAllToServer(setting,showingNotice){return this.openOneShotReplication(setting,null!=showingNotice&&showingNotice,!1,"pushOnly")}replicateAllFromServer(setting,showingNotice){return this.openOneShotReplication(setting,null!=showingNotice&&showingNotice,!1,"pullOnly")}async checkReplicationConnectivity(setting,keepAlive,skipCheck,showResult,ignoreCleanLock=!1){if(""!=setting.versionUpFlash){Logger($msg("Replicator.Message.VersionUpFlash"),LOG_LEVEL_NOTICE);return!1}const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME);if(this.controller){Logger("Another replication running.");return!1}const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}if(!skipCheck){if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return!1}this.remoteCleaned=!1;this.remoteLocked=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.tweakSettingsMismatched=!1;this.preferredTweakValue=void 0;const progress=`${dbRet.info.update_seq}`,info3={app_version:this.env.services.API.getAppVersion(),plugin_version:this.env.services.API.getPluginVersion(),vault_name:this.env.services.vault.vaultName(),device_name:this.env.services.vault.getVaultName(),progress},ensure=await ensureDatabaseIsCompatible(dbRet.db,setting,this.nodeid,currentVersionRange2,info3);if("INCOMPATIBLE"==ensure){Logger("The remote database has no compatibility with the running version. Please upgrade the plugin.",LOG_LEVEL_NOTICE);return!1}if("NODE_LOCKED"==ensure){Logger("The remote database has been rebuilt or corrupted since we have synchronized last time. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;return!1}if("LOCKED"==ensure)this.remoteLocked=!0;else if("NODE_CLEANED"==ensure){if(!ignoreCleanLock){Logger("The remote database has been cleaned up. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;this.remoteCleaned=!0;return!1}this.remoteLocked=!0}else if("OK"==ensure);else if("MISMATCHED"==ensure[0]){Logger("Configuration mismatching between the clients has been detected. This can be harmful or extra capacity consumption. We have to make these value unified.",LOG_LEVEL_NOTICE);this.tweakSettingsMismatched=!0;this.preferredTweakValue=ensure[1];return!1}}const syncOptionBase={batches_limit:setting.batches_limit,batch_size:setting.batch_size,push:{}};setting.readChunksOnline&&(syncOptionBase.pull={...selectorOnDemandPull});const syncOption=keepAlive?{live:!0,retry:!0,heartbeat:!setting.useTimeouts&&3e4,...syncOptionBase}:{...syncOptionBase};return{db:dbRet.db,info:dbRet.info,syncOptionBase,syncOption}}async openContinuousReplication(setting,showResult,retrying){const next2=await shareRunningResult("continuousReplication",(async()=>{if(this.controller){Logger($msg("liveSyncReplicator.replicationInProgress"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}const localDB=this.env.getDatabase();Logger($msg("liveSyncReplicator.beforeLiveSync"));if(await this.openOneShotReplication(setting,showResult,!1,"pullOnly")){Logger($msg("liveSyncReplicator.liveSyncBegin"));const ret=await this.checkReplicationConnectivity(setting,!0,!0,showResult);if(!1===ret){Logger($msg("liveSyncReplicator.couldNotConnectToServer"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}showResult&&Logger($msg("liveSyncReplicator.checkingLastSyncPoint"),LOG_LEVEL_NOTICE,"sync");const{db,syncOption}=ret;this.syncStatus="STARTED";this.maxPullSeq=Number(`${ret.info.update_seq}`.split("-")[0]);this.maxPushSeq=Number(`${(await localDB.info()).update_seq}`.split("-")[0]);this.updateInfo();const docArrivedOnStart=this.docArrived,docSentOnStart=this.docSent;retrying||(this.originalSetting=setting);this.terminateSync();const syncHandler=localDB.sync(db,{...syncOption}),syncMode="sync",syncResult=await this.processSync(syncHandler,showResult,docSentOnStart,docArrivedOnStart,syncMode,retrying);if("DONE"==syncResult)return!0;if("FAILED"==syncResult)return!1;if("NEED_RESURRECT"==syncResult){this.terminateSync();return async()=>await this.openContinuousReplication(this.originalSetting,showResult,!1)}if("NEED_RETRY"==syncResult){const tempSetting=JSON.parse(JSON.stringify(setting));tempSetting.batch_size=Math.ceil(tempSetting.batch_size/2)+2;tempSetting.batches_limit=Math.ceil(tempSetting.batches_limit/2)+2;if(tempSetting.batch_size<=5&&tempSetting.batches_limit<=5){Logger($msg("liveSyncReplicator.cantReplicateLowerValue"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}Logger($msg("liveSyncReplicator.retryLowerBatchSize",{batch_size:tempSetting.batch_size.toString(),batches_limit:tempSetting.batches_limit.toString()}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return async()=>await this.openContinuousReplication(tempSetting,showResult,!0)}}return!1}));return"boolean"==typeof next2?next2:await next2()}closeReplication(){if(this.controller){this.controller.abort();this.controller=void 0;this.syncStatus="CLOSED";Logger($msg("liveSyncReplicator.replicationClosed"));this.updateInfo()}}async tryResetRemoteDatabase(setting){this.closeReplication();const con=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"!=typeof con){try{await con.db.destroy();Logger($msg("liveSyncReplicator.remoteDbDestroyed"),LOG_LEVEL_NOTICE);await this.tryCreateRemoteDatabase(setting)}catch(ex){Logger($msg("liveSyncReplicator.remoteDbDestroyError"),LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_NOTICE)}clearHandlers();await this.ensurePBKDF2Salt(setting,!0,!1)}}async tryCreateRemoteDatabase(setting){this.closeReplication();if("string"!=typeof await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0)){clearHandlers();await this.ensurePBKDF2Salt(setting,!0,!1);Logger($msg("liveSyncReplicator.remoteDbCreatedOrConnected"),LOG_LEVEL_NOTICE)}}async markRemoteLocked(setting,locked,lockByClean){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return}if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return}const defInitPoint={_id:MILESTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked,cleaned:lockByClean,accepted_nodes:[this.nodeid],node_chunk_info:{[this.nodeid]:currentVersionRange2},node_info:{},tweak_values:{}},remoteMilestone={...defInitPoint,...await resolveWithIgnoreKnownError(dbRet.db.get(MILESTONE_DOCID),defInitPoint)};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=[this.nodeid];remoteMilestone.locked=locked;remoteMilestone.cleaned=remoteMilestone.cleaned||lockByClean;Logger($msg(locked?"liveSyncReplicator.lockRemoteDb":"liveSyncReplicator.unlockRemoteDb"),LOG_LEVEL_NOTICE);await dbRet.db.put(remoteMilestone)}async markRemoteResolved(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return}if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return}const defInitPoint={_id:MILESTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked:!1,accepted_nodes:[this.nodeid],node_info:{},node_chunk_info:{[this.nodeid]:currentVersionRange2},tweak_values:{}},remoteMilestone={...defInitPoint,...await resolveWithIgnoreKnownError(dbRet.db.get(MILESTONE_DOCID),defInitPoint)};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=Array.from(new Set([...remoteMilestone.accepted_nodes,this.nodeid]));Logger($msg("liveSyncReplicator.markDeviceResolved"),LOG_LEVEL_NOTICE);(await dbRet.db.put(remoteMilestone)).ok?Logger($msg("liveSyncReplicator.remoteDbMarkedResolved"),LOG_LEVEL_VERBOSE):Logger($msg("liveSyncReplicator.couldNotMarkResolveRemoteDb"),LOG_LEVEL_NOTICE)}connectRemoteCouchDBWithSetting(settings,isMobile,performSetup=!1,skipInfo=!1){if(settings.encrypt&&""==settings.passphrase&&!settings.permitEmptyPassphrase)return"Empty passphrases cannot be used without explicit permission";const customHeaders=parseHeaderValues(settings.couchDB_CustomHeaders),auth=settings.useJWT?{jwtAlgorithm:settings.jwtAlgorithm,jwtKey:settings.jwtKey,jwtExpDuration:settings.jwtExpDuration,jwtKid:settings.jwtKid,jwtSub:settings.jwtSub,type:"jwt"}:{username:settings.couchDB_USER,password:settings.couchDB_PASSWORD,type:"basic"};return this.env.services.remote.connect(settings.couchDB_URI+(""==settings.couchDB_DBNAME?"":"/"+settings.couchDB_DBNAME),auth,settings.disableRequestURI||isMobile,settings.encrypt?settings.passphrase:settings.encrypt,settings.useDynamicIterationCount,performSetup,skipInfo,settings.enableCompression,customHeaders,settings.useRequestAPI,(async()=>await this.getReplicationPBKDF2Salt(settings)))}async _ensureConnection(settings){const ret=await this.connectRemoteCouchDBWithSetting(settings,this.isMobile(),!1,!0);if("string"==typeof ret)throw new Error(`${$msg("liveSyncReplicator.couldNotConnectToServer")}:${ret}`);return ret.db}async fetchRemoteDocument(settings,id,db){try{const connDB=null!=db?db:await this._ensureConnection(settings);return await connDB.get(id)}catch(ex){if("status"in ex&&404==ex.status)return!1;throw ex}}async putRemoteDocument(settings,doc,db){const connDB=null!=db?db:await this._ensureConnection(settings);return await connDB.put(doc)}async fetchRemoteChunks(missingChunks,showResult){const ret=await this.connectRemoteCouchDBWithSetting(this.env.getSettings(),this.isMobile(),!1,!0);if("string"==typeof ret){Logger(`${$msg("liveSyncReplicator.couldNotConnectToServer")} ${ret} `,showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");return!1}const remoteChunks=await ret.db.allDocs({keys:missingChunks,include_docs:!0});if(remoteChunks.rows.some((e3=>"error"in e3))){Logger("Some chunks are not exists both on remote and local database.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");Logger(`Missing chunks: ${missingChunks.join(",")}`,LOG_LEVEL_VERBOSE);Logger(`Error chunks: ${remoteChunks.rows.filter((e3=>"error"in e3)).map((e3=>e3.key)).join(",")}`,LOG_LEVEL_VERBOSE);return!1}return remoteChunks.rows.map((e3=>e3.doc))}async tryConnectRemote(setting,showResult=!0){const db=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof db){Logger($msg("liveSyncReplicator.couldNotConnectTo",{uri:setting.couchDB_URI,name:setting.couchDB_DBNAME,db}),LOG_LEVEL_NOTICE);return!1}Logger(`Connected to ${db.info.db_name} successfully`,LOG_LEVEL_NOTICE);return!0}async resetRemoteTweakSettings(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"!=typeof dbRet)if(await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12))try{const remoteMilestone=await dbRet.db.get(MILESTONE_DOCID);remoteMilestone.tweak_values={};await dbRet.db.put(remoteMilestone);Logger("tweak values on the remote database have been cleared",LOG_LEVEL_VERBOSE)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}else Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);else Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE)}async setPreferredRemoteTweakSettings(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"!=typeof dbRet)if(await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12))try{const remoteMilestone=await dbRet.db.get(MILESTONE_DOCID);remoteMilestone.tweak_values[DEVICE_ID_PREFERRED]=extractObject(TweakValuesTemplate,{...setting});await dbRet.db.put(remoteMilestone);Logger("Preferred tweak values has been registered",LOG_LEVEL_VERBOSE)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}else Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);else Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE)}async getRemotePreferredTweakValues(setting){var _a8;const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return!1}if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return!1}try{const remoteMilestone=await dbRet.db.get(MILESTONE_DOCID);if(!remoteMilestone)throw new Error("Remote milestone not found");return(null==(_a8=null==remoteMilestone?void 0:remoteMilestone.tweak_values)?void 0:_a8[DEVICE_ID_PREFERRED])||!1}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async compactRemote(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return!1}return(await dbRet.db.compact({interval:1e3})).ok}async getRemoteStatus(setting){var _a8;const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri:setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet}),LOG_LEVEL_NOTICE);return!1}const info3=await dbRet.db.info();return{...info3,estimatedSize:(null==(_a8=null==info3?void 0:info3.sizes)?void 0:_a8.file)||0}}async countCompromisedChunks(setting=this.env.getSettings()){const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri:setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet}),LOG_LEVEL_NOTICE);return!1}return await countCompromisedChunks(dbRet.db)}async getConnectedDeviceList(setting=this.env.getSettings()){const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri:setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet}),LOG_LEVEL_NOTICE);return!1}const milestoneDoc=await dbRet.db.get(MILESTONE_DOCID);if(!milestoneDoc){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);return!1}return{node_info:milestoneDoc.node_info,accepted_nodes:milestoneDoc.accepted_nodes||[]}}};measures=new Map;root_17=from_html('
 
');root4=from_html('

TESTING BENCH: Self-hosted LiveSync

Module Checks

Synchronisation Result Status

 

Performance test

',1);$$css5={hash:"svelte-fa4ppj",code:".svelte-fa4ppj {box-sizing:border-box;}"};TestPaneView=class extends import_obsidian.ItemView{constructor(leaf,plugin3,moduleDev){super(leaf);this.icon="view-log";this.title="Self-hosted LiveSync Test and Results";this.navigation=!0;this.plugin=plugin3;this.moduleDev=moduleDev}getIcon(){return"view-log"}getViewType(){return"ols-pane-test"}getDisplayText(){return"Self-hosted LiveSync Test and Results"}async onOpen(){this.component=new TestPane({target:this.contentEl,props:{plugin:this.plugin,moduleDev:this.moduleDev}});await Promise.resolve()}async onClose(){var _a8;null==(_a8=this.component)||_a8.$destroy();await Promise.resolve()}};ModuleDev=class extends AbstractObsidianModule{constructor(){super(...arguments);this.testResults=writable([])}_everyOnloadStart(){__onMissingTranslation((()=>{}));return Promise.resolve(!0)}async onMissingTranslation(key3){const outFile=`missing-translation-${(new Date).toISOString().split("T")[0]}.jsonl`,piece=JSON.stringify({[key3]:{}}),writePiece=piece.substring(1,piece.length-1)+",";try{await this.core.storageAccess.ensureDir(this.app.vault.configDir+"/ls-debug/");await this.core.storageAccess.appendHiddenFile(this.app.vault.configDir+"/ls-debug/"+outFile,writePiece+"\n")}catch(ex){this._log(`Could not write ${outFile}`,LOG_LEVEL_VERBOSE);this._log(`Missing translation: ${writePiece}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}}_everyOnloadAfterLoadSettings(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);this.onMissingTranslation=this.onMissingTranslation.bind(this);__onMissingTranslation((key3=>{this.onMissingTranslation(key3)}));eventHub.onEvent("document-stub-created",(detail=>{fireAndForget((async()=>{const stub=detail.stub,toc2=detail.toc,stubDocX=Object.entries(stub).map((([key3,value])=>[`## ${key3}`,Object.entries(value).map((([key22,value2])=>[`### ${key22}`,[...value2.entries()].map((([key32,value3])=>{var _a8;const isObsolete=value3.is_obsolete?" (obsolete)":"",desc=null!=(_a8=value3.desc)?_a8:"";return`#### ${key32}${isObsolete}\n${value3.key?"Setting key: "+value3.key+"\n":""}${desc}\n`}))].flat())).flat()].flat())).flat(),stubDocMD="\n| Icon | Description |\n| :---: | ----------------------------------------------------------------- |\n"+[...toc2.values()].map((e3=>`${e3}`)).join("\n")+"\n\n"+stubDocX.join("\n");await this.core.storageAccess.writeHiddenFileAuto(this.app.vault.configDir+"/ls-debug/stub-doc.md",stubDocMD)}))}));this.plugin;this.registerView("ols-pane-test",(leaf=>new TestPaneView(leaf,this.plugin,this)));this.addCommand({id:"view-test",name:"Open Test dialogue",callback:()=>{this.services.API.showWindow("ols-pane-test")}});return Promise.resolve(!0)}async _everyOnLayoutReady(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);this.addCommand({id:"test-create-conflict",name:"Create conflict",callback:async()=>{const filename="test-create-conflict.md";if(await this.core.databaseFileAccess.store({name:filename,path:filename,body:new Blob(["# Test create conflict\n\n"],{type:"text/markdown"}),stat:{ctime:(new Date).getTime(),mtime:(new Date).getTime(),size:24,type:"file"}})){const id=await this.services.path.path2id(filename),f4=await this.core.localDatabase.getRaw(id);console.log(f4);console.log(f4._rev);const revConflict=f4._rev.split("-")[0]+"-"+(parseInt(f4._rev.split("-")[1])+1).toString();console.log(await this.core.localDatabase.bulkDocsRaw([f4],{new_edits:!1}));console.log(await this.core.localDatabase.bulkDocsRaw([{...f4,_rev:revConflict}],{new_edits:!1}))}}});await delay(1);return!0}_addTestResult(name,key3,result,summary,message){const logLine=`${name}: ${key3} ${null!=summary?summary:""}`;this.testResults.update((results=>{results.push([result,logLine,null!=message?message:""]);return results}))}_everyModuleTest(){return this.settings.enableDebugTools?this.testDone():Promise.resolve(!0)}onBindFunction(core,services){services.appLifecycle.handleLayoutReady(this._everyOnLayoutReady.bind(this));services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this));services.appLifecycle.handleOnSettingLoaded(this._everyOnloadAfterLoadSettings.bind(this));services.test.handleTest(this._everyModuleTest.bind(this));services.test.handleAddTestResult(this._addTestResult.bind(this))}};SerializedFileAccess=class{constructor(app,plugin3,storageAccess){this.touchedFiles=[];this.app=app;this.plugin=plugin3;this.storageAccess=storageAccess}async tryAdapterStat(file){const path2=file instanceof import_obsidian.TFile?file.path:file;return await this.storageAccess.processReadFile(path2,(async()=>await this.app.vault.adapter.exists(path2)?this.app.vault.adapter.stat(path2):null))}async adapterStat(file){const path2=file instanceof import_obsidian.TFile?file.path:file;return await this.storageAccess.processReadFile(path2,(()=>this.app.vault.adapter.stat(path2)))}async adapterExists(file){const path2=file instanceof import_obsidian.TFile?file.path:file;return await this.storageAccess.processReadFile(path2,(()=>this.app.vault.adapter.exists(path2)))}async adapterRemove(file){const path2=file instanceof import_obsidian.TFile?file.path:file;return await this.storageAccess.processReadFile(path2,(()=>this.app.vault.adapter.remove(path2)))}async adapterRead(file){const path2=file instanceof import_obsidian.TFile?file.path:file;return await this.storageAccess.processReadFile(path2,(()=>this.app.vault.adapter.read(path2)))}async adapterReadBinary(file){const path2=file instanceof import_obsidian.TFile?file.path:file;return await this.storageAccess.processReadFile(path2,(()=>this.app.vault.adapter.readBinary(path2)))}async adapterReadAuto(file){const path2=file instanceof import_obsidian.TFile?file.path:file;return isPlainText(path2)?await this.storageAccess.processReadFile(path2,(()=>this.app.vault.adapter.read(path2))):await this.storageAccess.processReadFile(path2,(()=>this.app.vault.adapter.readBinary(path2)))}async adapterWrite(file,data,options){const path2=file instanceof import_obsidian.TFile?file.path:file;return"string"==typeof data?await this.storageAccess.processWriteFile(path2,(()=>this.app.vault.adapter.write(path2,data,options))):await this.storageAccess.processWriteFile(path2,(()=>this.app.vault.adapter.writeBinary(path2,toArrayBuffer(data),options)))}async vaultCacheRead(file){return await this.storageAccess.processReadFile(file.path,(()=>this.app.vault.cachedRead(file)))}async vaultRead(file){return await this.storageAccess.processReadFile(file.path,(()=>this.app.vault.read(file)))}async vaultReadBinary(file){return await this.storageAccess.processReadFile(file.path,(()=>this.app.vault.readBinary(file)))}async vaultReadAuto(file){const path2=file.path;return isPlainText(path2)?await this.storageAccess.processReadFile(path2,(()=>this.app.vault.read(file))):await this.storageAccess.processReadFile(path2,(()=>this.app.vault.readBinary(file)))}async vaultModify(file,data,options){return"string"==typeof data?await this.storageAccess.processWriteFile(file.path,(async()=>{const oldData=await this.app.vault.read(file);if(data===oldData){options&&options.mtime&&markChangesAreSame(file.path,file.stat.mtime,options.mtime);return!0}await this.app.vault.modify(file,data,options);return!0})):await this.storageAccess.processWriteFile(file.path,(async()=>{const oldData=await this.app.vault.readBinary(file);if(await isDocContentSame(createBinaryBlob(oldData),createBinaryBlob(data))){options&&options.mtime&&markChangesAreSame(file.path,file.stat.mtime,options.mtime);return!0}await this.app.vault.modifyBinary(file,toArrayBuffer(data),options);return!0}))}async vaultCreate(path2,data,options){return"string"==typeof data?await this.storageAccess.processWriteFile(path2,(()=>this.app.vault.create(path2,data,options))):await this.storageAccess.processWriteFile(path2,(()=>this.app.vault.createBinary(path2,toArrayBuffer(data),options)))}trigger(name,...data){return this.app.vault.trigger(name,...data)}async adapterAppend(normalizedPath,data,options){return await this.app.vault.adapter.append(normalizedPath,data,options)}async delete(file,force=!1){return await this.storageAccess.processWriteFile(file.path,(()=>this.app.vault.delete(file,force)))}async trash(file,force=!1){return await this.storageAccess.processWriteFile(file.path,(()=>this.app.vault.trash(file,force)))}isStorageInsensitive(){var _a8;return null==(_a8=this.app.vault.adapter.insensitive)||_a8}getAbstractFileByPathInsensitive(path2){return this.app.vault.getAbstractFileByPathInsensitive(path2)}getAbstractFileByPath(path2){return!this.plugin.settings.handleFilenameCaseSensitive||this.isStorageInsensitive()?this.getAbstractFileByPathInsensitive(path2):this.app.vault.getAbstractFileByPath(path2)}getFiles(){return this.app.vault.getFiles()}async ensureDirectory(fullPath){const pathElements=fullPath.split("/");pathElements.pop();let c3="";for(const v2 of pathElements){c3+=v2;try{await this.app.vault.adapter.mkdir(c3)}catch(ex){if("Folder already exists."==(null==ex?void 0:ex.message));else{Logger("Folder Create Error");Logger(ex)}}c3+="/"}}_statInternal(file){return this.app.vault.adapter.stat(file)}async touch(file){const path2=file instanceof import_obsidian.TFile?file.path:file,stat=(file instanceof import_obsidian.TFile?file.stat:await this._statInternal(path2))||{mtime:0,size:0},key3=`${path2}-${stat.mtime}-${stat.size}`;this.touchedFiles.unshift(key3);this.touchedFiles=this.touchedFiles.slice(0,100)}recentlyTouched(file){const key3="stat"in file?`${file.path}-${file.stat.mtime}-${file.stat.size}`:`${file.path}-${file.mtime}-${file.size}`;return-1!=this.touchedFiles.indexOf(key3)}clearTouched(){this.touchedFiles=[]}};StorageEventManager=class{};StorageEventManagerObsidian=class extends StorageEventManager{constructor(plugin3,core,storageAccess){super();this.snapShotRestored=null;this.bufferedQueuedItems=[];this.triggerTakeSnapshot=throttle((()=>this._triggerTakeSnapshot()),100);this.concurrentProcessing=Semaphore(5);this._waitingMap=new Map;this._waitForIdle=null;this.processingCount=0;this.storageAccess=storageAccess;this.plugin=plugin3;this.core=core;this.cmdHiddenFileSync=this.plugin.getAddOn(HiddenFileSync.name)}get services(){return this.core.services}get shouldBatchSave(){var _a8,_b5;return(null==(_a8=this.core.settings)?void 0:_a8.batchSave)&&1!=(null==(_b5=this.core.settings)?void 0:_b5.liveSync)}get batchSaveMinimumDelay(){var _a8,_b5;return null!=(_b5=null==(_a8=this.core.settings)?void 0:_a8.batchSaveMinimumDelay)?_b5:DEFAULT_SETTINGS.batchSaveMinimumDelay}get batchSaveMaximumDelay(){var _a8,_b5;return null!=(_b5=null==(_a8=this.core.settings)?void 0:_a8.batchSaveMaximumDelay)?_b5:DEFAULT_SETTINGS.batchSaveMaximumDelay}restoreState(){this.snapShotRestored=this._restoreFromSnapshot();return this.snapShotRestored}async beginWatch(){await this.snapShotRestored;const plugin3=this.plugin;this.watchVaultChange=this.watchVaultChange.bind(this);this.watchVaultCreate=this.watchVaultCreate.bind(this);this.watchVaultDelete=this.watchVaultDelete.bind(this);this.watchVaultRename=this.watchVaultRename.bind(this);this.watchVaultRawEvents=this.watchVaultRawEvents.bind(this);this.watchEditorChange=this.watchEditorChange.bind(this);plugin3.registerEvent(plugin3.app.vault.on("modify",this.watchVaultChange));plugin3.registerEvent(plugin3.app.vault.on("delete",this.watchVaultDelete));plugin3.registerEvent(plugin3.app.vault.on("rename",this.watchVaultRename));plugin3.registerEvent(plugin3.app.vault.on("create",this.watchVaultCreate));plugin3.registerEvent(plugin3.app.vault.on("raw",this.watchVaultRawEvents));plugin3.registerEvent(plugin3.app.workspace.on("editor-change",this.watchEditorChange))}watchEditorChange(editor,info3){if(!("path"in info3))return;if(!this.shouldBatchSave)return;const file=null==info3?void 0:info3.file;if(!file)return;if(this.storageAccess.isFileProcessing(file.path))return;if(!this.isWaiting(file.path))return;const data=null==info3?void 0:info3.data,fi={type:"CHANGED",file:TFileToUXFileInfoStub(file),cachedData:data};this.appendQueue([fi])}watchVaultCreate(file,ctx){if(file instanceof import_obsidian.TFolder)return;if(this.storageAccess.isFileProcessing(file.path))return;const fileInfo=TFileToUXFileInfoStub(file);this.appendQueue([{type:"CREATE",file:fileInfo}],ctx)}watchVaultChange(file,ctx){if(file instanceof import_obsidian.TFolder)return;if(this.storageAccess.isFileProcessing(file.path))return;const fileInfo=TFileToUXFileInfoStub(file);this.appendQueue([{type:"CHANGED",file:fileInfo}],ctx)}watchVaultDelete(file,ctx){if(file instanceof import_obsidian.TFolder)return;if(this.storageAccess.isFileProcessing(file.path))return;const fileInfo=TFileToUXFileInfoStub(file,!0);this.appendQueue([{type:"DELETE",file:fileInfo}],ctx)}watchVaultRename(file,oldFile,ctx){if(file instanceof import_obsidian.TFile){const fileInfo=TFileToUXFileInfoStub(file);this.appendQueue([{type:"DELETE",file:{path:oldFile,name:file.name,stat:{mtime:file.stat.mtime,ctime:file.stat.ctime,size:file.stat.size,type:"file"},deleted:!0},skipBatchWait:!0},{type:"CREATE",file:fileInfo,skipBatchWait:!0}],ctx)}}watchVaultRawEvents(path2){this.storageAccess.isFileProcessing(path2)||this.plugin.settings&&(this.plugin.settings.useIgnoreFiles?this.services.vault.isTargetFile(path2).then((()=>this._watchVaultRawEvents(path2))):this._watchVaultRawEvents(path2))}async _watchVaultRawEvents(path2){(this.plugin.settings.syncInternalFiles||this.plugin.settings.usePluginSync)&&this.plugin.settings.watchInternalFileChanges&&path2.startsWith(this.plugin.app.vault.configDir)&&(path2.endsWith("/")||await this.cmdHiddenFileSync.isTargetFile(path2)&&this.appendQueue([{type:"INTERNAL",file:InternalFileToUXFileInfoStub(path2),skipBatchWait:!0}],null))}async appendQueue(params,ctx){if(this.core.settings.isConfigured&&!this.core.settings.suspendFileWatching){this.core.services.vault.markFileListPossiblyChanged();for(const param of params){if(shouldBeIgnored(param.file.path))continue;const atomicKey=[0,0,0,0,0,0].map((e3=>`${Math.floor(1e5*Math.random())}`)).join("-"),type=param.type,file=param.file,oldPath=param.oldPath;if("INTERNAL"!==type){const size=file.stat.size;if(this.services.vault.isFileSizeTooLarge(size)&&("CREATE"==type||"CHANGED"==type)){Logger(`The storage file has been changed but exceeds the maximum size. Skipping: ${param.file.path}`,LOG_LEVEL_NOTICE);continue}}if(file instanceof import_obsidian.TFolder)continue;if(!await this.services.vault.isTargetFile(file.path))continue;if((file instanceof import_obsidian.TFile||!file.isFolder)&&("CREATE"==type||"CHANGED"==type)){await delay(10);if(this.core.storageAccess.recentlyTouched(file.path))continue}let cache2;param.cachedData&&(cache2=param.cachedData);this.enqueue({type,args:{file,oldPath,cache:cache2,ctx},skipBatchWait:param.skipBatchWait,key:atomicKey})}}}_triggerTakeSnapshot(){this._takeSnapshot()}enqueue(newItem){"DELETE"==newItem.type&&this.bufferedQueuedItems.push({type:"SENTINEL_FLUSH"});this.updateStatus();this.bufferedQueuedItems.push(newItem);fireAndForget((()=>this._takeSnapshot().then((()=>this.runQueuedEvents()))))}waitForIdle(){if(0===this._waitingMap.size)return Promise.resolve();if(this._waitForIdle)return this._waitForIdle;const promises=[...this._waitingMap.entries()].map((([key3,waitInfo])=>new Promise((resolve=>{waitInfo.canProceed.promise.then((()=>{Logger(`Processing ${key3}: Wait for idle completed`,LOG_LEVEL_DEBUG)})).catch((e3=>{Logger(`Processing ${key3}: Wait for idle error`,LOG_LEVEL_INFO);Logger(e3,LOG_LEVEL_VERBOSE)})).finally((()=>{resolve()}));this._proceedWaiting(key3)})))),waitPromise=Promise.all(promises).then((()=>{this._waitForIdle=null;Logger("All wait for idle completed",LOG_LEVEL_VERBOSE)}));this._waitForIdle=waitPromise;return waitPromise}_proceedWaiting(key3){const waitInfo=this._waitingMap.get(key3);if(waitInfo){waitInfo.canProceed.resolve(!0);clearTimeout(waitInfo.timerHandler);this._waitingMap.delete(key3)}this.triggerTakeSnapshot()}_cancelWaiting(key3){const waitInfo=this._waitingMap.get(key3);if(waitInfo){waitInfo.canProceed.resolve(!1);clearTimeout(waitInfo.timerHandler);this._waitingMap.delete(key3)}this.triggerTakeSnapshot()}_addWaiting(key3,event2,waitedSince){if(this._waitingMap.has(key3))throw new Error(`Already waiting for key: ${key3}`);const resolver2=promiseWithResolvers(),now3=Date.now(),since=null!=waitedSince?waitedSince:now3,elapsed=now3-since,maxDelay=1e3*this.batchSaveMaximumDelay,remainingDelay=Math.max(0,maxDelay-elapsed),nextDelay=Math.min(remainingDelay,1e3*this.batchSaveMinimumDelay);Logger(elapsed>=maxDelay?`Processing ${key3}: Batch save maximum delay already exceeded: ${event2.type}`:`Processing ${key3}: Adding waiting for batch save: ${event2.type} (${nextDelay}ms)`,LOG_LEVEL_DEBUG);const waitInfo={since,type:event2.type,event:event2,canProceed:resolver2,timerHandler:setTimeout((()=>{Logger(`Processing ${key3}: Batch save timeout reached: ${event2.type}`,LOG_LEVEL_DEBUG);this._proceedWaiting(key3)}),nextDelay)};this._waitingMap.set(key3,waitInfo);this.triggerTakeSnapshot();return waitInfo}async processFileEvent(fei){const releaser=await this.concurrentProcessing.acquire();try{this.updateStatus();const filename=fei.args.file.path,waitingKey=`${filename}`,previous=this._waitingMap.get(waitingKey);let isShouldBeCancelled=fei.skipBatchWait||!1,previousPromise=Promise.resolve(!0),waitPromise=Promise.resolve(!0);if(previous){previousPromise=previous.canProceed.promise;isShouldBeCancelled&&Logger(`Processing ${filename}: Requested to perform immediately, cancelling previous waiting: ${fei.type}`,LOG_LEVEL_DEBUG);if(!isShouldBeCancelled&&"DELETE"===fei.type){Logger(`Processing ${filename}: DELETE requested, cancelling previous waiting: ${fei.type}`,LOG_LEVEL_DEBUG);isShouldBeCancelled=!0}if(!isShouldBeCancelled&&previous.type===fei.type){Logger(`Processing ${filename}: Cancelling previous waiting: ${fei.type}`,LOG_LEVEL_DEBUG);isShouldBeCancelled=!0}if(isShouldBeCancelled){this._cancelWaiting(waitingKey);Logger(`Processing ${filename}: Previous cancelled: ${fei.type}`,LOG_LEVEL_DEBUG);isShouldBeCancelled=!0}if(!isShouldBeCancelled){Logger(`Processing ${filename}: Waiting for previous to complete: ${fei.type}`,LOG_LEVEL_DEBUG);this._proceedWaiting(waitingKey);Logger(`Processing ${filename}: Previous completed: ${fei.type}`,LOG_LEVEL_DEBUG)}}await previousPromise;if(this.shouldBatchSave&&!fei.skipBatchWait){"CREATE"==fei.type||"CHANGED"==fei.type?waitPromise=this._addWaiting(waitingKey,fei,null==previous?void 0:previous.since).canProceed.promise:fei.type;Logger(`Processing ${filename}: Waiting for batch save: ${fei.type}`,LOG_LEVEL_DEBUG);if(!await waitPromise){Logger(`Processing ${filename}: Cancelled by new queue: ${fei.type}`,LOG_LEVEL_DEBUG);return}}await this.requestProcessQueue(fei)}finally{await this._takeSnapshot();releaser()}}async _takeSnapshot(){const snapShot=[...[...this._waitingMap.values()].map((e3=>e3.event)),...this.bufferedQueuedItems];await this.core.kvDB.set("storage-event-manager-snapshot",snapShot);Logger(`Storage operation snapshot taken: ${snapShot.length} items`,LOG_LEVEL_DEBUG);this.updateStatus()}async _restoreFromSnapshot(){const snapShot=await this.core.kvDB.get("storage-event-manager-snapshot");if(snapShot&&Array.isArray(snapShot)&&snapShot.length>0){Logger(`Restoring storage operation snapshot: ${snapShot.length} items`,LOG_LEVEL_VERBOSE);this.bufferedQueuedItems=snapShot.map((e3=>({...e3,skipBatchWait:!0})));this.updateStatus();await this.runQueuedEvents()}else Logger("No snapshot to restore",LOG_LEVEL_VERBOSE)}runQueuedEvents(){return skipIfDuplicated("storage-event-manager-run-queued-events",(async()=>{do{if(0===this.bufferedQueuedItems.length)break;const fei=this.bufferedQueuedItems.shift();await this._takeSnapshot();this.updateStatus();(await this.concurrentProcessing.acquire())();this.updateStatus();if("SENTINEL_FLUSH"!==fei.type)fireAndForget((()=>this.processFileEvent(fei)));else{Logger("Waiting for idle",LOG_LEVEL_VERBOSE);await this.waitForIdle();this.updateStatus()}}while(this.bufferedQueuedItems.length>0)}))}async requestProcessQueue(fei){try{this.processingCount++;this.updateStatus();await this.handleFileEvent(fei);await this._takeSnapshot()}finally{this.processingCount--;this.updateStatus()}}isWaiting(filename){return isWaitingForTimeout(`storage-event-manager-batchsave-${filename}`)}updateStatus(){const totalItems=this.bufferedQueuedItems.filter((e3=>"args"in e3)).filter((e3=>!e3.cancelled)).length+this.concurrentProcessing.waiting,processing=this.processingCount,batchedCount=this._waitingMap.size;this.core.batched.value=batchedCount;this.core.processing.value=processing;this.core.totalQueued.value=totalItems+batchedCount+processing}async handleFileEvent(queue2){const file=queue2.args.file,lockKey=`handleFile:${file.path}`,ret=await serialized(lockKey,(async()=>{if(queue2.cancelled)Logger(`File event cancelled before processing: ${file.path}`,LOG_LEVEL_INFO);else if("INTERNAL"==queue2.type||file.isInternal)await this.core.services.fileProcessing.processOptionalFileEvent(file.path);else{const key3=`file-last-proc-${queue2.type}-${file.path}`,last=Number(await this.core.kvDB.get(key3)||0);if("DELETE"==queue2.type)await this.core.services.fileProcessing.processFileEvent(queue2);else{if(file.stat.mtime==last){Logger(`File has been already scanned on ${queue2.type}, skip: ${file.path}`,LOG_LEVEL_VERBOSE);return}if(!await this.core.services.fileProcessing.processFileEvent(queue2)){Logger(`STORAGE -> DB: Handler failed, cancel the relative operations: ${file.path}`,LOG_LEVEL_INFO);this.cancelRelativeEvent(queue2);return}}}}));this.updateStatus();return ret}cancelRelativeEvent(item){this._cancelWaiting(item.args.file.path)}};ModuleFileAccessObsidian=class extends AbstractObsidianModule{constructor(plugin3,core){super(plugin3,core);this.processingFiles=new Set;this.vaultManager=new StorageEventManagerObsidian(this.plugin,this.core,this)}processWriteFile(file,proc){const path2="string"==typeof file?file:file.path;return serialized(`file-lock:${path2}`,(async()=>{try{this.processingFiles.add(path2);return await proc()}finally{this.processingFiles.delete(path2)}}))}processReadFile(file,proc){const path2="string"==typeof file?file:file.path;return serialized(`file-lock:${path2}`,(async()=>{try{this.processingFiles.add(path2);return await proc()}finally{this.processingFiles.delete(path2)}}))}isFileProcessing(file){const path2="string"==typeof file?file:file.path;return this.processingFiles.has(path2)}restoreState(){return this.vaultManager.restoreState()}_everyOnload(){this.core.storageAccess=this;return Promise.resolve(!0)}async _everyOnFirstInitialize(){await this.vaultManager.beginWatch();return Promise.resolve(!0)}async _everyCommitPendingFileEvent(){await this.vaultManager.waitForIdle();return Promise.resolve(!0)}_everyOnloadStart(){this.vaultAccess=new SerializedFileAccess(this.app,this.plugin,this);return Promise.resolve(!0)}_isStorageInsensitive(){return this.vaultAccess.isStorageInsensitive()}_shouldCheckCaseInsensitive(){return!this.services.vault.isStorageInsensitive()&&!this.settings.handleFilenameCaseSensitive}async writeFileAuto(path2,data,opt){const file=this.vaultAccess.getAbstractFileByPath(path2);if(file instanceof import_obsidian.TFile)return this.vaultAccess.vaultModify(file,data,opt);if(null===file){if(path2.endsWith(".md"))return await this.vaultAccess.vaultCreate(path2,data,opt)instanceof import_obsidian.TFile;await this.vaultAccess.adapterWrite(path2,data,opt);return await this.vaultAccess.adapterExists(path2)}this._log(`Could not write file (Possibly already exists as a folder): ${path2}`,LOG_LEVEL_VERBOSE);return!1}readFileAuto(path2){const file=this.vaultAccess.getAbstractFileByPath(path2);if(file instanceof import_obsidian.TFile)return this.vaultAccess.vaultRead(file);throw new Error(`Could not read file (Possibly does not exist): ${path2}`)}readFileText(path2){const file=this.vaultAccess.getAbstractFileByPath(path2);if(file instanceof import_obsidian.TFile)return this.vaultAccess.vaultRead(file);throw new Error(`Could not read file (Possibly does not exist): ${path2}`)}isExists(path2){return Promise.resolve(this.vaultAccess.getAbstractFileByPath(path2)instanceof import_obsidian.TFile)}async writeHiddenFileAuto(path2,data,opt){try{await this.vaultAccess.adapterWrite(path2,data,opt);return!0}catch(e3){this._log(`Could not write hidden file: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async appendHiddenFile(path2,data,opt){try{await this.vaultAccess.adapterAppend(path2,data,opt);return!0}catch(e3){this._log(`Could not append hidden file: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}stat(path2){const file=this.vaultAccess.getAbstractFileByPath(path2);if(null===file)return Promise.resolve(null);if(file instanceof import_obsidian.TFile)return Promise.resolve({ctime:file.stat.ctime,mtime:file.stat.mtime,size:file.stat.size,type:"file"});throw new Error(`Could not stat file (Possibly does not exist): ${path2}`)}statHidden(path2){return this.vaultAccess.tryAdapterStat(path2)}async removeHidden(path2){try{await this.vaultAccess.adapterRemove(path2);return null===this.vaultAccess.tryAdapterStat(path2)}catch(e3){this._log(`Could not remove hidden file: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async readHiddenFileAuto(path2){return await this.vaultAccess.adapterReadAuto(path2)}async readHiddenFileText(path2){return await this.vaultAccess.adapterRead(path2)}async readHiddenFileBinary(path2){return await this.vaultAccess.adapterReadBinary(path2)}async isExistsIncludeHidden(path2){return null!==await this.vaultAccess.tryAdapterStat(path2)}async ensureDir(path2){try{await this.vaultAccess.ensureDirectory(path2);return!0}catch(e3){this._log(`Could not ensure directory: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}triggerFileEvent(event2,path2){const file=this.vaultAccess.getAbstractFileByPath(path2);null!==file&&this.vaultAccess.trigger(event2,file)}async triggerHiddenFile(path2){await this.app.vault.adapter.reconcileInternalFile(path2)}getFileStub(path2){const file=this.vaultAccess.getAbstractFileByPath(path2);return file instanceof import_obsidian.TFile?TFileToUXFileInfoStub(file):null}async readStubContent(stub){const file=this.vaultAccess.getAbstractFileByPath(stub.path);if(!(file instanceof import_obsidian.TFile)){this._log(`Could not read file (Possibly does not exist or a folder): ${stub.path}`,LOG_LEVEL_VERBOSE);return!1}const data=await this.vaultAccess.vaultReadAuto(file);return{...stub,...TFileToUXFileInfoStub(file),body:createBlob(data)}}getStub(path2){const file=this.vaultAccess.getAbstractFileByPath(path2);return file instanceof import_obsidian.TFile?TFileToUXFileInfoStub(file):file instanceof import_obsidian.TFolder?TFolderToUXFileInfoStub(file):null}getFiles(){return this.vaultAccess.getFiles().map((f4=>TFileToUXFileInfoStub(f4)))}getFileNames(){return this.vaultAccess.getFiles().map((f4=>f4.path))}async getFilesIncludeHidden(basePath,includeFilter,excludeFilter,skipFolder=[".git",".trash","node_modules"]){var _a8;let w2;try{w2=await this.app.vault.adapter.list(basePath)}catch(ex){this._log(`Could not traverse(getFilesIncludeHidden):${basePath}`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE);return[]}skipFolder=skipFolder.map((e3=>e3.toLowerCase()));let files=[];for(const file of w2.files)includeFilter&&includeFilter.length>0&&!includeFilter.some((e3=>e3.test(file)))||excludeFilter&&excludeFilter.some((ee=>ee.test(file)))||await this.services.vault.isIgnoredByIgnoreFile(file)||files.push(file);for(const v2 of w2.folders){const folderName=(null!=(_a8=v2.split("/").pop())?_a8:"").toLowerCase();skipFolder.some((e3=>folderName===e3))||excludeFilter&&excludeFilter.some((e3=>e3.test(v2)))||await this.services.vault.isIgnoredByIgnoreFile(v2)||(files=files.concat(await this.getFilesIncludeHidden(v2,includeFilter,excludeFilter,skipFolder)))}return files}async touched(file){const path2="string"==typeof file?file:file.path;await this.vaultAccess.touch(path2)}recentlyTouched(file){const xFile="string"==typeof file?this.vaultAccess.getAbstractFileByPath(file):file;return null!==xFile&&!(xFile instanceof import_obsidian.TFolder)&&this.vaultAccess.recentlyTouched(xFile)}clearTouched(){this.vaultAccess.clearTouched()}delete(file,force){const xPath="string"==typeof file?file:file.path,xFile=this.vaultAccess.getAbstractFileByPath(xPath);return null===xFile?Promise.resolve():xFile instanceof import_obsidian.TFile||xFile instanceof import_obsidian.TFolder?this.vaultAccess.delete(xFile,force):Promise.resolve()}trash(file,system){const xPath="string"==typeof file?file:file.path,xFile=this.vaultAccess.getAbstractFileByPath(xPath);return null===xFile?Promise.resolve():xFile instanceof import_obsidian.TFile||xFile instanceof import_obsidian.TFolder?this.vaultAccess.trash(xFile,system):Promise.resolve()}async __deleteVaultItem(file){if(file instanceof import_obsidian.TFile&&!await this.services.vault.isTargetFile(file.path))return;const dir=file.parent;this.settings.trashInsteadDelete?await this.vaultAccess.trash(file,!1):await this.vaultAccess.delete(file,!0);this._log(`xxx <- STORAGE (deleted) ${file.path}`);if(dir){this._log(`files: ${dir.children.length}`);if(0==dir.children.length&&!this.settings.doNotDeleteFolder){this._log(`All files under the parent directory (${dir.path}) have been deleted, so delete this one.`);await this.__deleteVaultItem(dir)}}}async deleteVaultItem(fileSrc){const path2="string"==typeof fileSrc?fileSrc:fileSrc.path,file=this.vaultAccess.getAbstractFileByPath(path2);if(null!==file)return file instanceof import_obsidian.TFile||file instanceof import_obsidian.TFolder?await this.__deleteVaultItem(file):void 0}onBindFunction(core,services){services.vault.handleIsStorageInsensitive(this._isStorageInsensitive.bind(this));services.setting.handleShouldCheckCaseInsensitively(this._shouldCheckCaseInsensitive.bind(this));services.appLifecycle.handleFirstInitialise(this._everyOnFirstInitialize.bind(this));services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this));services.appLifecycle.handleOnLoaded(this._everyOnload.bind(this));services.fileProcessing.handleCommitPendingFileEvents(this._everyCommitPendingFileEvent.bind(this))}};AutoClosableModal=class extends import_obsidian.Modal{_closeByUnload(){eventHub.off("plugin-unloaded",this._closeByUnload);this.close()}constructor(app){super(app);this._closeByUnload=this._closeByUnload.bind(this);eventHub.once("plugin-unloaded",this._closeByUnload)}onClose(){eventHub.off("plugin-unloaded",this._closeByUnload)}};InputStringDialog=class extends AutoClosableModal{constructor(app,title,key3,placeholder,isPassword,onSubmit){super(app);this.result=!1;this.isManuallyClosed=!1;this.isPassword=!1;this.onSubmit=onSubmit;this.title=title;this.placeholder=placeholder;this.key=key3;this.isPassword=isPassword}onOpen(){const{contentEl}=this;this.titleEl.setText(this.title);const formEl=contentEl.createDiv();new import_obsidian.Setting(formEl).setName(this.key).setClass(this.isPassword?"password-input":"normal-input").addText((text2=>text2.onChange((value=>{this.result=value}))));new import_obsidian.Setting(formEl).addButton((btn=>btn.setButtonText("Ok").setCta().onClick((()=>{this.isManuallyClosed=!0;this.close()})))).addButton((btn=>btn.setButtonText("Cancel").setCta().onClick((()=>{this.close()}))))}onClose(){super.onClose();const{contentEl}=this;contentEl.empty();this.isManuallyClosed?this.onSubmit(this.result):this.onSubmit(!1)}};PopoverSelectString=class extends import_obsidian.FuzzySuggestModal{constructor(app,note,placeholder,getItemsFun,callback){super(app);this.callback=()=>{};this.getItemsFun=()=>["yes","no"];this.app=app;this.setPlaceholder((null!=placeholder?placeholder:"y/n) ")+note);getItemsFun&&(this.getItemsFun=getItemsFun);this.callback=callback}getItems(){return this.getItemsFun()}getItemText(item){return item}onChooseItem(item,evt){var _a8;null==(_a8=this.callback)||_a8.call(this,item);this.callback=void 0}onClose(){setTimeout((()=>{if(this.callback){this.callback("");this.callback=void 0}}),100)}};MessageBox=class extends AutoClosableModal{constructor(plugin3,title,contentMd,buttons,defaultAction,timeout,wideButton,onSubmit){super(plugin3.app);this.result=!1;this.isManuallyClosed=!1;this.timer=void 0;this.plugin=plugin3;this.title=title;this.contentMd=contentMd;this.buttons=buttons;this.onSubmit=onSubmit;this.defaultAction=defaultAction;this.timeout=timeout;this.wideButton=wideButton;this.timeout&&(this.timer=setInterval((()=>{var _a8,_b5;if(void 0!==this.timeout){this.timeout--;if(this.timeout<0){if(this.timer){clearInterval(this.timer);null==(_a8=this.defaultButtonComponent)||_a8.setButtonText(`${defaultAction}`);this.timer=void 0}this.result=defaultAction;this.isManuallyClosed=!0;this.close()}else null==(_b5=this.defaultButtonComponent)||_b5.setButtonText(`( ${this.timeout} ) ${defaultAction}`)}}),1e3))}onOpen(){const{contentEl}=this;this.titleEl.setText(this.title);const div=contentEl.createDiv();div.style.userSelect="text";div.style.webkitUserSelect="text";import_obsidian.MarkdownRenderer.render(this.plugin.app,this.contentMd,div,"/",this.plugin);const buttonSetting=new import_obsidian.Setting(contentEl),labelWrapper=contentEl.createDiv();labelWrapper.addClass("sls-dialogue-note-wrapper");labelWrapper.createEl("label",{text:"To stop the countdown, tap anywhere on the dialogue"}).addClass("sls-dialogue-note-countdown");if(!this.timeout||!this.timer){labelWrapper.empty();labelWrapper.style.display="none"}buttonSetting.infoEl.style.display="none";buttonSetting.controlEl.style.flexWrap="wrap";if(this.wideButton){buttonSetting.controlEl.style.flexDirection="column";buttonSetting.controlEl.style.alignItems="center";buttonSetting.controlEl.style.justifyContent="center";buttonSetting.controlEl.style.flexGrow="1"}contentEl.addEventListener("click",(()=>{var _a8;if(this.timer){labelWrapper.empty();labelWrapper.style.display="none";clearInterval(this.timer);this.timer=void 0;null==(_a8=this.defaultButtonComponent)||_a8.setButtonText(`${this.defaultAction}`)}}));for(const button of this.buttons)buttonSetting.addButton((btn=>{btn.setButtonText(button).onClick((()=>{this.isManuallyClosed=!0;this.result=button;if(this.timer){clearInterval(this.timer);this.timer=void 0}this.close()}));if(button==this.defaultAction){this.defaultButtonComponent=btn;btn.setCta()}if(this.wideButton){btn.buttonEl.style.flexGrow="1";btn.buttonEl.style.width="100%"}return btn}))}onClose(){super.onClose();const{contentEl}=this;contentEl.empty();if(this.timer){clearInterval(this.timer);this.timer=void 0}this.isManuallyClosed?this.onSubmit(this.result):this.onSubmit(!1)}};askYesNo=(app,message)=>new Promise((res2=>{new PopoverSelectString(app,message,void 0,void 0,(result=>res2(result))).open()}));askSelectString=(app,message,items)=>{const getItemsFun=()=>items;return new Promise((res2=>{new PopoverSelectString(app,message,"",getItemsFun,(result=>res2(result))).open()}))};askString=(app,title,key3,placeholder,isPassword=!1)=>new Promise((res2=>{new InputStringDialog(app,title,key3,placeholder,isPassword,(result=>res2(result))).open()}));ModuleInputUIObsidian=class extends AbstractObsidianModule{_everyOnload(){this.core.confirm=this;setConfirmInstance(this);return Promise.resolve(!0)}askYesNo(message){return askYesNo(this.app,message)}askString(title,key3,placeholder,isPassword=!1){return askString(this.app,title,key3,placeholder,isPassword)}async askYesNoDialog(message,opt={title:"Confirmation"}){const defaultTitle=$msg("moduleInputUIObsidian.defaultTitleConfirmation"),yesLabel=$msg("moduleInputUIObsidian.optionYes"),noLabel=$msg("moduleInputUIObsidian.optionNo"),defaultOption="Yes"===opt.defaultOption?yesLabel:noLabel;return await confirmWithMessageWithWideButton(this.plugin,opt.title||defaultTitle,message,[yesLabel,noLabel],defaultOption,opt.timeout)===yesLabel?"yes":"no"}askSelectString(message,items){return askSelectString(this.app,message,items)}askSelectStringDialogue(message,buttons,opt){const defaultTitle=$msg("moduleInputUIObsidian.defaultTitleSelect");return confirmWithMessageWithWideButton(this.plugin,opt.title||defaultTitle,message,buttons,opt.defaultAction,opt.timeout)}askInPopup(key3,dialogText,anchorCallback){const fragment=createFragment((doc=>{const[beforeText,afterText]=dialogText.split("{HERE}",2);doc.createEl("span",void 0,(a2=>{a2.appendText(beforeText);a2.appendChild(a2.createEl("a",void 0,(anchor=>{anchorCallback(anchor)})));a2.appendText(afterText)}))})),popupKey="popup-"+key3;scheduleTask(popupKey,1e3,(async()=>{var _a8;const popup=await memoIfNotExist(popupKey,(()=>new import_obsidian.Notice(fragment,0)));(null==(_a8=null==popup?void 0:popup.noticeEl)?void 0:_a8.isShown())||memoObject(popupKey,new import_obsidian.Notice(fragment,0));scheduleTask(popupKey+"-close",2e4,(()=>{var _a9;const popup2=retrieveMemoObject(popupKey);if(popup2){(null==(_a9=null==popup2?void 0:popup2.noticeEl)?void 0:_a9.isShown())&&popup2.hide();disposeMemoObject(popupKey)}}))}))}confirmWithMessage(title,contentMd,buttons,defaultAction,timeout){return confirmWithMessage(this.plugin,title,contentMd,buttons,defaultAction,timeout)}onBindFunction(core,services){services.appLifecycle.handleOnLoaded(this._everyOnload.bind(this))}};OnDialogSettingsDefault={configPassphrase:"",preset:"",syncMode:"ONEVENTS",dummy:0,deviceAndVaultName:""};SettingInformation={liveSync:{name:"Sync Mode"},couchDB_URI:{name:"Server URI",placeHolder:"https://........"},couchDB_USER:{name:"Username",desc:"username"},couchDB_PASSWORD:{name:"Password",desc:"password",isHidden:!0},couchDB_DBNAME:{name:"Database Name"},passphrase:{name:"Passphrase",desc:"Encryption passphrase. If changed, you should overwrite the server's database with the new (encrypted) files.",isHidden:!0},showStatusOnEditor:{name:"Show status inside the editor",desc:"Requires restart of Obsidian."},showOnlyIconsOnEditor:{name:"Show status as icons only"},showStatusOnStatusbar:{name:"Show status on the status bar",desc:"Requires restart of Obsidian."},lessInformationInLog:{name:"Show only notifications",desc:"Disables logging, only shows notifications. Please disable if you report an issue."},showVerboseLog:{name:"Verbose Log",desc:"Show verbose log. Please enable if you report an issue."},hashCacheMaxCount:{name:"Memory cache size (by total items)"},hashCacheMaxAmount:{name:"Memory cache size (by total characters)",desc:"(Mega chars)"},writeCredentialsForSettingSync:{name:"Write credentials in the file",desc:"(Not recommended) If set, credentials will be stored in the file."},notifyAllSettingSyncFile:{name:"Notify all setting files"},configPassphrase:{name:"Passphrase of sensitive configuration items",desc:"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again."},configPassphraseStore:{name:"Encrypting sensitive configuration items"},syncOnSave:{name:"Sync on Save",desc:"Starts synchronisation when a file is saved."},syncOnEditorSave:{name:"Sync on Editor Save",desc:"When you save a file in the editor, start a sync automatically"},syncOnFileOpen:{name:"Sync on File Open",desc:"Forces the file to be synced when opened."},syncOnStart:{name:"Sync on Startup",desc:"Automatically Sync all files when opening Obsidian."},syncAfterMerge:{name:"Sync after merging file",desc:"Sync automatically after merging files"},trashInsteadDelete:{name:"Use the trash bin",desc:"Move remotely deleted files to the trash, instead of deleting."},doNotDeleteFolder:{name:"Keep empty folder",desc:"Should we keep folders that don't have any files inside?"},resolveConflictsByNewerFile:{name:"(BETA) Always overwrite with a newer file",desc:"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned."},checkConflictOnlyOnOpen:{name:"Delay conflict resolution of inactive files",desc:"Should we only check for conflicts when a file is opened?"},showMergeDialogOnlyOnActive:{name:"Delay merge conflict prompt for inactive files.",desc:"Should we prompt you about conflicting files when a file is opened?"},disableMarkdownAutoMerge:{name:"Always prompt merge conflicts",desc:"Should we prompt you for every single merge, even if we can safely merge automatcially?"},writeDocumentsIfConflicted:{name:"Apply Latest Change if Conflicting",desc:"Enable this option to automatically apply the most recent change to documents even when it conflicts"},syncInternalFilesInterval:{name:"Scan hidden files periodically",desc:"Seconds, 0 to disable"},batchSave:{name:"Batch database update",desc:"Reducing the frequency with which on-disk changes are reflected into the DB"},readChunksOnline:{name:"Fetch chunks on demand",desc:"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended."},syncMaxSizeInMB:{name:"Maximum file size",desc:"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used."},useIgnoreFiles:{name:"(Beta) Use ignore files",desc:"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files."},ignoreFiles:{name:"Ignore files",desc:"Comma separated `.gitignore, .dockerignore`"},batch_size:{name:"Batch size",desc:"Number of changes to sync at a time. Defaults to 50. Minimum is 2."},batches_limit:{name:"Batch limit",desc:"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time."},useTimeouts:{name:"Use timeouts instead of heartbeats",desc:"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage."},concurrencyOfReadChunksOnline:{name:"Batch size of on-demand fetching"},minimumIntervalOfReadChunksOnline:{name:"The delay for consecutive on-demand fetches"},suspendFileWatching:{name:"Suspend file watching",desc:"Stop watching for file changes."},suspendParseReplicationResult:{name:"Suspend database reflecting",desc:"Stop reflecting database changes to storage files."},writeLogToTheFile:{name:"Write logs into the file",desc:"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information."},deleteMetadataOfDeletedFiles:{name:"Do not keep metadata of deleted files."},useIndexedDBAdapter:{name:"(Obsolete) Use an old adapter for compatibility",desc:"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.",obsolete:!0},watchInternalFileChanges:{name:"Scan changes on customization sync",desc:"Do not use internal API"},doNotSuspendOnFetching:{name:"Fetch database with previous behaviour"},disableCheckingConfigMismatch:{name:"Do not check configuration mismatch before replication"},usePluginSync:{name:"Enable customization sync"},autoSweepPlugins:{name:"Scan customization automatically",desc:"Scan customization before replicating."},autoSweepPluginsPeriodic:{name:"Scan customization periodically",desc:"Scan customization every 1 minute."},notifyPluginOrSettingUpdated:{name:"Notify customized",desc:"Notify when other device has newly customized."},remoteType:{name:"Active Remote Type",desc:"Remote server type"},endpoint:{name:"Endpoint URL",placeHolder:"https://........"},accessKey:{name:"Access Key"},secretKey:{name:"Secret Key",isHidden:!0},region:{name:"Region",placeHolder:"auto"},bucket:{name:"Bucket Name"},useCustomRequestHandler:{name:"Use Custom HTTP Handler",desc:"Enable this if your Object Storage doesn't support CORS"},maxChunksInEden:{name:"Maximum Incubating Chunks",desc:"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks."},maxTotalLengthInEden:{name:"Maximum Incubating Chunk Size",desc:"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks."},maxAgeInEden:{name:"Maximum Incubation Period",desc:"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks."},settingSyncFile:{name:"Filename",desc:"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform."},preset:{name:"Presets",desc:"Apply preset configuration"},syncMode:{name:"Sync Mode"},periodicReplicationInterval:{name:"Periodic Sync interval",desc:"Interval (sec)"},syncInternalFilesBeforeReplication:{name:"Scan for hidden files before replication"},automaticallyDeleteMetadataOfDeletedFiles:{name:"Delete old metadata of deleted files on start-up",desc:"(Days passed, 0 to disable automatic-deletion)"},additionalSuffixOfDatabaseName:{name:"Database suffix",desc:"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured."},hashAlg:{name:(null==(_a7=configurationNames.hashAlg)?void 0:_a7.name)||"",desc:"xxhash64 is the current default."},deviceAndVaultName:{name:"Device name",desc:"Unique name between all synchronized devices. To edit this setting, please disable customization sync once."},displayLanguage:{name:"Display Language",desc:'Not all messages have been translated. And, please revert to "Default" when reporting errors.'},enableChunkSplitterV2:{name:"Use splitting-limit-capped chunk splitter",desc:"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker."},disableWorkerForGeneratingChunks:{name:"Do not split chunks in the background",desc:"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour)."},processSmallFilesInUIThread:{name:"Process small files in the foreground",desc:"If enabled, the file under 1kb will be processed in the UI thread."},batchSaveMinimumDelay:{name:"Minimum delay for batch database updating",desc:"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving."},batchSaveMaximumDelay:{name:"Maximum delay for batch database updating",desc:"Saving will be performed forcefully after this number of seconds."},notifyThresholdOfRemoteStorageSize:{name:"Notify when the estimated remote storage size exceeds on start up",desc:"MB (0 to disable)."},usePluginSyncV2:{name:"Enable per-file customization sync",desc:"If enabled, efficient per-file customization sync will be used. A minor migration is required when enabling this feature, and all devices must be updated to v0.23.18. Enabling this feature will result in losing compatibility with older versions."},handleFilenameCaseSensitive:{name:"Handle files as Case-Sensitive",desc:"If this enabled, All files are handled as case-Sensitive (Previous behaviour)."},doNotUseFixedRevisionForChunks:{name:"Compute revisions for chunks",desc:"If this enabled, all chunks will be stored with the revision made from its content."},sendChunksBulkMaxSize:{name:"Maximum size of chunks to send in one request",desc:"MB"},useAdvancedMode:{name:"Enable advanced features"},usePowerUserMode:{name:"Enable poweruser features"},useEdgeCaseMode:{name:"Enable edge case treatment features"},enableDebugTools:{name:"Enable Developers' Debug Tools.",desc:"While enabled, it causes very performance impact but debugging replication testing and other features will be enabled. Please disable this if you have not read the source code. Requires restart of Obsidian."},suppressNotifyHiddenFilesChange:{name:"Suppress notification of hidden files change",desc:"If enabled, the notification of hidden files change will be suppressed."},syncMinimumInterval:{name:"Minimum interval for syncing",desc:"The minimum interval for automatic synchronisation on event."},useRequestAPI:{name:"Use Request API to avoid `inevitable` CORS problem",desc:"If enabled, the request API will be used to avoid `inevitable` CORS problems. This is a workaround and may not work in all cases. PLEASE READ THE DOCUMENTATION BEFORE USING THIS OPTION. This is a less-secure option."},hideFileWarningNotice:{name:"Show status icon instead of file warnings banner",desc:"If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown."},bucketPrefix:{name:"File prefix on the bucket",desc:"Effectively a directory. Should end with `/`. e.g., `vault-name/`."},chunkSplitterVersion:{name:"Chunk Splitter",desc:"Now we can choose how to split the chunks; V3 is the most efficient. If you have troubled, please make this Default or Legacy."},processSizeMismatchedFiles:{name:"Process files even if seems to be corrupted",desc:"You can enable this setting to process the files with size mismatches, these files can be created by some APIs or integrations."},forcePathStyle:{name:"Enable forcePathStyle",desc:"If enabled, the forcePathStyle option will be used for bucket operations."},P2P_AutoBroadcast:{name:"Automatically broadcast changes to connected peers",desc:"If enabled, changes will be automatically broadcasted to all connected peers. Notified peers will start fetching the changes."},P2P_AutoStart:{name:"Automatically start P2P connection on launch",desc:"If enabled, the P2P connection will be automatically started when the application launches."},P2P_Enabled:{name:"Enable P2P Synchronization"}};ConditionType=(ConditionType2=>{ConditionType2.PLATFORM_CASE_INSENSITIVE="platform-case-insensitive";ConditionType2.PLATFORM_CASE_SENSITIVE="platform-case-sensitive";ConditionType2.REMOTE_CASE_SENSITIVE="remote-case-sensitive";return ConditionType2})(ConditionType||{});RuleLevel=(RuleLevel2=>{RuleLevel2[RuleLevel2.Must=0]="Must";RuleLevel2[RuleLevel2.Necessary=1]="Necessary";RuleLevel2[RuleLevel2.Recommended=2]="Recommended";RuleLevel2[RuleLevel2.Optional=3]="Optional";return RuleLevel2})(RuleLevel||{});DoctorRegulationV0_25_27={version:"0.25.27",rules:{sendChunksBulk:{value:!1,reason:"This is an obsolete setting and we should not enable this no more",level:0},sendChunksBulkMaxSize:{value:1,reason:"This is an obsolete setting and we should not enable this no more",level:0},doNotUseFixedRevisionForChunks:{value:!0,reason:"This value has been reverted at v0.24.16 for garbage collection of chunks.",level:2},handleFilenameCaseSensitive:{value:!1,reason:"If Self-hosted LiveSync is Case-Sensitive, unexpected file operations may occur when synchronising with Windows, Android or other devices. This value should only be enabled if all devices have a Case-Sensitive file system.",requireRebuild:!0,level:2},useIndexedDBAdapter:{value:!0,requireRebuildLocal:!0,level:3,reason:"The old option is active. This is not a performance-appropriate setting."},useEden:{reason:"This option is no longer recommended.",level:3,value:!1},hashAlg:{obsoleteValues:["sha1","xxhash32",""],value:"xxhash64",level:1,reason:"The hash function is set to the old fallback. This should be retried. This may result in a change to the new fallback."},disableCheckingConfigMismatch:{value:!1,level:2,reason:"If you disabled an older version of the dialogue because it was hard to understand, try it once in the latest version."},enableCompression:{value:!1,level:2,requireRebuild:!0,reason:"This option will be sunset soon."},usePluginSyncV2:{value:!0,level:2,reason:"This option is now enabled by default. If you have problems with the new plugin, please report them."},chunkSplitterVersion:{value:"v3-rabin-karp",valueDisplay:ChunkAlgorithmNames["v3-rabin-karp"],level:2,reason:"Chunk splitting has been optimised for more effective de-duplication. This is the new default value."},customChunkSize:{min:55,value:60,valueDisplay:"60 (detected on if less than 55)",level:2,detectionFunc:settings=>"v3-rabin-karp"===(null==settings?void 0:settings.chunkSplitterVersion)&&!isCloudantURI((null==settings?void 0:settings.couchDB_URI)||""),reason:"With the V3 Rabin-Karp chunk splitter and Self-hosted CouchDB, the chunk size is set to 60 (means around 6MB) by default. This is in effect the maximum chunk size, which in practice is divided more finely."},E2EEAlgorithm:{value:E2EEAlgorithms.V2,valueDisplay:E2EEAlgorithmNames[E2EEAlgorithms.V2],level:2,reasonFunc:_=>$msg("Doctor.RULES.E2EE_V02500.REASON")},useIndexedDBAdapter:void 0}};DoctorRegulation=DoctorRegulationV0_25_27;RebuildOptions_AutomaticAcceptable=0,RebuildOptions_ConfirmIfRequired=1,RebuildOptions_SkipEvenIfRequired=2;CONTEXT_DIALOG_CONTROLS="svelte-dialog-controls";root5=from_html('
');$$css6={hash:"svelte-3n2ufb",code:'.dialog-host.svelte-3n2ufb {padding:20px;gap:0.5em;display:flex;flex-direction:column;padding-bottom:var(--keyboard-height, 0px);}.dialog-host.svelte-3n2ufb button {margin-left:10px;}.dialog-host.svelte-3n2ufb .button-group {display:flex;flex-direction:column;gap:10px;margin-top:20px;}.dialog-host.svelte-3n2ufb .row {display:flex;flex-direction:row;justify-items:center;align-items:center;flex-wrap:wrap;}.dialog-host.svelte-3n2ufb .row > input[type="text"],\n .dialog-host.svelte-3n2ufb .row > input[type="password"],\n .dialog-host.svelte-3n2ufb .row > textarea,\n .dialog-host.svelte-3n2ufb .row > select {flex:1;margin-left:10px;min-width:10em;}.dialog-host.svelte-3n2ufb .row > input[type="password"] {-webkit-text-security:disc;}.dialog-host.svelte-3n2ufb .row > input[type="checkbox"] {margin-left:10px;margin-right:10px;}.dialog-host.svelte-3n2ufb label > span {display:block;width:8em;}.dialog-host.svelte-3n2ufb .note,\n .dialog-host.svelte-3n2ufb .note-important,\n .dialog-host.svelte-3n2ufb .note-error {padding:10px;margin-top:4px;margin-bottom:0.5lh;border-left:4px solid;}.dialog-host.svelte-3n2ufb .note {background-color:var(--interactive-hover);border-left-color:var(--interactive-accent);}.dialog-host.svelte-3n2ufb .note-important {background-color:var(--interactive-hover);border-left-color:var(--text-warning);}.dialog-host.svelte-3n2ufb .note-error {background-color:var(--interactive-hover);border-left-color:var(--text-error);}.dialog-host.svelte-3n2ufb hr {margin:0.7lh 0;}.dialog-host.svelte-3n2ufb details {gap:0.5em;padding-left:0.5em;border-left:2px solid var(--interactive-accent);}.dialog-host.svelte-3n2ufb summary::marker {display:none;content:"";}.dialog-host.svelte-3n2ufb summary {border-left:4px solid var(--interactive-accent);padding-left:0.5em;cursor:pointer;outline:none;}.dialog-host.svelte-3n2ufb details > summary::after {content:"⏷";float:right;margin-right:0.5em;}.dialog-host.svelte-3n2ufb details[open] > summary::after {content:"⏶";float:right;margin-right:0.5em;}.dialog-host.svelte-3n2ufb input:invalid,\n .dialog-host.svelte-3n2ufb textarea:invalid {border-color:var(--background-modifier-error);}.dialog-host.svelte-3n2ufb .sub-section {margin-left:1em;display:flex;flex-direction:column;gap:0.5em;}.dialog-host.svelte-3n2ufb .row > input[type="text"]:disabled,\n .dialog-host.svelte-3n2ufb .row > input[type="password"]:disabled,\n .dialog-host.svelte-3n2ufb .row > textarea:disabled,\n .dialog-host.svelte-3n2ufb .row > select:disabled {background-color:var(--background-secondary);}'};SvelteDialog=class extends import_obsidian.Modal{constructor(plugin3,component2,initialData){super(plugin3.app);this.title="Obsidian LiveSync - Setup Wizard";this.plugin=plugin3;this.component=component2;this.initialData=initialData}resolveResult(){var _a8;null==(_a8=this.resultPromiseWithResolvers)||_a8.resolve(this.result);this.resultPromiseWithResolvers=void 0}onOpen(){const{contentEl}=this;contentEl.empty();const dialog=this;this.resultPromiseWithResolvers&&this.resultPromiseWithResolvers.reject("Dialog opened again");const pr=promiseWithResolvers();eventHub.once("plugin-unloaded",(()=>{if(this.resultPromiseWithResolvers===pr){pr.reject("Plugin unloaded");this.close()}}));this.resultPromiseWithResolvers=pr;this.mountedComponent=mount(DialogHost,{target:contentEl,props:{onSetupContext:props=>{setupDialogContext({...props,plugin:this.plugin,services:this.plugin.services})},setTitle:title=>{dialog.setTitle(title)},closeDialog:()=>{dialog.close()},setResult:result=>{this.result=result},getInitialData:()=>this.initialData,mountComponent:this.component}})}waitForClose(){if(!this.resultPromiseWithResolvers)throw new Error("Dialog not opened yet");return this.resultPromiseWithResolvers.promise}onClose(){this.resolveResult();fireAndForget((async()=>{this.mountedComponent&&await unmount(this.mountedComponent)}))}};SvelteDialogManager=class{constructor(plugin3){this.plugin=plugin3}async open(component2,initialData){return await openSvelteDialog(this.plugin,component2,initialData)}async openWithExplicitCancel(component2,initialData){for(let i2=0;i2<10;i2++){const ret=await openSvelteDialog(this.plugin,component2,initialData);if(void 0!==ret)return ret;if(this.plugin.services.appLifecycle.hasUnloaded())throw new Error("Operation cancelled due to app shutdown.");Logger("Please select 'Cancel' explicitly to cancel this operation.",LOG_LEVEL_NOTICE)}throw new Error("Operation Forcibly cancelled by user.")}};root_110=from_html("

");root6=from_html('

');$$css7={hash:"svelte-1gf4irx",code:".dialog-header.svelte-1gf4irx {display:none;}"};root_111=from_html("

");root7=from_html("
");root8=from_html("");delegate(["click"]);root_113=from_html("

");root9=from_html('
');$$css8={hash:"svelte-o7k4lc",code:".question-container.svelte-o7k4lc {border-bottom:2px solid var(--interactive-accent);margin-bottom:0.5lh;padding-bottom:0.5lh;}"};root10=from_html('
');$$css9={hash:"svelte-1h8m5at",code:'.option-container.svelte-1h8m5at {border:1px solid transparent;border-radius:0.25lh;padding:0.5rem;}.option-container.selected.svelte-1h8m5at {border-color:var(--interactive-accent);}.choice-row.svelte-1h8m5at {display:flex;align-items:center;gap:0.5rem;\n /* margin-top: 1rem; */cursor:pointer;}.choice-row.svelte-1h8m5at span.choice-title:where(.svelte-1h8m5at) {width:auto;}.choice-row.svelte-1h8m5at input[type="radio"]:where(.svelte-1h8m5at) {\n /* width: 1.2rem;\n height: 1.2rem; */cursor:pointer;}.choice-notes.svelte-1h8m5at {margin-left:2rem;margin-top:0.25rem;color:var(--text-muted);font-size:0.9rem;}.option-container.selected.svelte-1h8m5at .choice-notes:where(.svelte-1h8m5at) {color:var(--text-normal);}'};root11=from_html('
');root12=from_html('
');root13=from_html('
');root_44=from_html(" ",1);root_24=from_html(" ",1);root_72=from_html(" ",1);root14=from_html(" ",1);root_25=from_html("

");root_114=from_html("
");root15=from_html('
');root16=from_html('
',1);$$css10={hash:"svelte-2n6uv8",code:'.choice-row.svelte-2n6uv8 {display:flex;align-items:center;gap:0.5rem;margin-top:1rem;cursor:pointer;}.choice-row.svelte-2n6uv8 span.choice-title:where(.svelte-2n6uv8) {width:auto;}.choice-row.svelte-2n6uv8 input[type="checkbox"]:where(.svelte-2n6uv8) {\n /* width: 1.2rem;\n height: 1.2rem; */cursor:pointer;}.choice-notes.svelte-2n6uv8 {margin-left:2rem;margin-top:0.25rem;color:var(--text-muted);font-size:0.9rem;}'};root_45=from_html(" ",1);root_26=from_html(" ",1);root_73=from_html(" ",1);root17=from_html(" ",1);root_46=from_html(" ",1);root_27=from_html(" ",1);root_83=from_html(" ",1);root18=from_html(" ",1);root_28=from_html("
  1. On this device, please keep this Vault open.
  2. On the source device, open Obsidian.
  3. On the source device, from the command palette, run the 'Show settings as a QR code' command.
  4. On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.
");root19=from_html(" ",1);root20=from_html('');root21=from_html(' ',1);root_115=from_html('Please enter the Setup URI that was generated during server installation or on another device, along with the vault\n passphrase.
Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette.',1);root_29=from_html('');root_74=from_html(" ",1);root22=from_html(" ",1);root_116=from_html("

The connection to the server has been configured successfully. As the next step, the synchronisation data on the server will be built based on the current data on this device.

IMPORTANT
After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that\n any unintended data currently on the server will be completely overwritten.

",1);root_47=from_html(" ",1);root23=from_html(" ",1);root_117=from_html("

The connection to the server has been configured successfully. As the next step, the latest synchronisation data will be downloaded from the server to this device.

PLEASE NOTE
After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised\n files in this vault, conflicts may occur with the server data.

",1);root_48=from_html(" ",1);root24=from_html(" ",1);root_118=from_html("The connection to the server has been configured successfully. As the next step, the local database, that is to say the synchronisation information, must be reconstituted.",1);root_210=from_html(" ",1);root_102=from_html(" ",1);root25=from_html(" ",1);root_33=from_html(" ",1);root_119=from_html(" ",1);root_75=from_html(" ",1);root26=from_html(" ",1);checkConfig=async editingSettings=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h,_i2,_j,_k,_l2,_m2,_n2;const result=[],addMessage=(msg,classes=[])=>{result.push({message:msg,classes})},addSuccess=(msg,value)=>{result.push({message:msg,result:"ok",value})},_addError=(message,fixMessage,fix,value)=>{result.push({message,result:"error",fixMessage,fix,value})},addErrorMessage=(msg,classes=[])=>{result.push({message:msg,result:"error",classes})},addError=(message,fixMessage,key3,expected)=>{_addError(message,fixMessage,(async()=>{await updateRemoteSetting(editingSettings,key3,expected)}))};addMessage($msg("obsidianLiveSyncSettingTab.logCheckingDbConfig"));try{if(isCloudantURI(editingSettings.couchDB_URI)){addMessage($msg("obsidianLiveSyncSettingTab.logCannotUseCloudant"));return result}const customHeaders=parseHeaderValues(editingSettings.couchDB_CustomHeaders),credential=generateCredentialObject(editingSettings),r4=await requestToCouchDBWithCredentials(editingSettings.couchDB_URI,credential,window.origin,void 0,void 0,void 0,customHeaders),responseConfig=r4.json;addMessage($msg("obsidianLiveSyncSettingTab.msgNotice"),["ob-btn-config-head"]);addMessage($msg("obsidianLiveSyncSettingTab.msgIfConfigNotPersistent"),["ob-btn-config-info"]);addMessage($msg("obsidianLiveSyncSettingTab.msgConfigCheck"),["ob-btn-config-head"]);const serverBanner=null!=(_b5=null!=(_a8=r4.headers.server)?_a8:r4.headers.Server)?_b5:"unknown";addMessage($msg("obsidianLiveSyncSettingTab.serverVersion",{info:serverBanner}));const versionMatch=serverBanner.match(/CouchDB(\/([0-9.]+))?/),versionStr=versionMatch?versionMatch[2]:"0.0.0";editingSettings.couchDB_USER in responseConfig.admins?addSuccess($msg("obsidianLiveSyncSettingTab.okAdminPrivileges")):addSuccess($msg("obsidianLiveSyncSettingTab.warnNoAdmin"));isGreaterThanOrEqual(versionStr,"3.2.0")?"true"!=(null==(_c3=null==responseConfig?void 0:responseConfig.chttpd)?void 0:_c3.require_valid_user)?addError($msg("obsidianLiveSyncSettingTab.errRequireValidUser"),$msg("obsidianLiveSyncSettingTab.msgSetRequireValidUser"),"chttpd/require_valid_user","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okRequireValidUser")):"true"!=(null==(_d2=null==responseConfig?void 0:responseConfig.chttpd_auth)?void 0:_d2.require_valid_user)?addError($msg("obsidianLiveSyncSettingTab.errRequireValidUserAuth"),$msg("obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth"),"chttpd_auth/require_valid_user","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okRequireValidUserAuth"));(null==responseConfig?void 0:responseConfig.httpd["WWW-Authenticate"])?addSuccess($msg("obsidianLiveSyncSettingTab.okWwwAuth")):addError($msg("obsidianLiveSyncSettingTab.errMissingWwwAuth"),$msg("obsidianLiveSyncSettingTab.msgSetWwwAuth"),"httpd/WWW-Authenticate",'Basic realm="couchdb"');isGreaterThanOrEqual(versionStr,"3.2.0")?"true"!=(null==(_e2=null==responseConfig?void 0:responseConfig.chttpd)?void 0:_e2.enable_cors)?addError($msg("obsidianLiveSyncSettingTab.errEnableCorsChttpd"),$msg("obsidianLiveSyncSettingTab.msgEnableCorsChttpd"),"chttpd/enable_cors","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okEnableCorsChttpd")):"true"!=(null==(_f=null==responseConfig?void 0:responseConfig.httpd)?void 0:_f.enable_cors)?addError($msg("obsidianLiveSyncSettingTab.errEnableCors"),$msg("obsidianLiveSyncSettingTab.msgEnableCors"),"httpd/enable_cors","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okEnableCors"));if(!isCloudantURI(editingSettings.couchDB_URI)){Number(null!=(_h=null==(_g=null==responseConfig?void 0:responseConfig.chttpd)?void 0:_g.max_http_request_size)?_h:0)<4294967296?addError($msg("obsidianLiveSyncSettingTab.errMaxRequestSize"),$msg("obsidianLiveSyncSettingTab.msgSetMaxRequestSize"),"chttpd/max_http_request_size","4294967296"):addSuccess($msg("obsidianLiveSyncSettingTab.okMaxRequestSize"));Number(null!=(_j=null==(_i2=null==responseConfig?void 0:responseConfig.couchdb)?void 0:_i2.max_document_size)?_j:0)<5e7?addError($msg("obsidianLiveSyncSettingTab.errMaxDocumentSize"),$msg("obsidianLiveSyncSettingTab.msgSetMaxDocSize"),"couchdb/max_document_size","50000000"):addSuccess($msg("obsidianLiveSyncSettingTab.okMaxDocumentSize"))}"true"!=(null==(_k=null==responseConfig?void 0:responseConfig.cors)?void 0:_k.credentials)?addError($msg("obsidianLiveSyncSettingTab.errCorsCredentials"),$msg("obsidianLiveSyncSettingTab.msgSetCorsCredentials"),"cors/credentials","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okCorsCredentials"));const ConfiguredOrigins=((null!=(_m2=null==(_l2=null==responseConfig?void 0:responseConfig.cors)?void 0:_l2.origins)?_m2:"")+"").split(",");if("*"==(null==(_n2=null==responseConfig?void 0:responseConfig.cors)?void 0:_n2.origins)||-1!==ConfiguredOrigins.indexOf("app://obsidian.md")&&-1!==ConfiguredOrigins.indexOf("capacitor://localhost")&&-1!==ConfiguredOrigins.indexOf("http://localhost"))addSuccess($msg("obsidianLiveSyncSettingTab.okCorsOrigins"));else{const fixedValue=[...new Set([...ConfiguredOrigins.map((e3=>e3.trim())),"app://obsidian.md","capacitor://localhost","http://localhost"])].join(",");addError($msg("obsidianLiveSyncSettingTab.errCorsOrigins"),$msg("obsidianLiveSyncSettingTab.msgSetCorsOrigins"),"cors/origins",fixedValue)}addMessage($msg("obsidianLiveSyncSettingTab.msgConnectionCheck"),["ob-btn-config-head"]);addMessage($msg("obsidianLiveSyncSettingTab.msgCurrentOrigin",{origin:window.location.origin}));const origins=["app://obsidian.md","capacitor://localhost","http://localhost"];for(const org of origins){const rr=await requestToCouchDBWithCredentials(editingSettings.couchDB_URI,credential,org,void 0,void 0,void 0,customHeaders),responseHeaders=Object.fromEntries(Object.entries(rr.headers).map((e3=>{e3[0]=`${e3[0]}`.toLowerCase();return e3})));addMessage($msg("obsidianLiveSyncSettingTab.msgOriginCheck",{org}));"true"!=responseHeaders["access-control-allow-credentials"]?addErrorMessage($msg("obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials")):addSuccess($msg("obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin"));responseHeaders["access-control-allow-origin"]!=org?addErrorMessage($msg("obsidianLiveSyncSettingTab.warnCorsOriginUnmatched",{from:origin,to:responseHeaders["access-control-allow-origin"]})):addSuccess($msg("obsidianLiveSyncSettingTab.okCorsOriginMatched"))}addMessage($msg("obsidianLiveSyncSettingTab.msgDone"),["ob-btn-config-head"]);addMessage($msg("obsidianLiveSyncSettingTab.msgConnectionProxyNote"),["ob-btn-config-info"]);addMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"))}catch(ex){if(401==(null==ex?void 0:ex.status)){addErrorMessage($msg("obsidianLiveSyncSettingTab.errAccessForbidden"));addErrorMessage($msg("obsidianLiveSyncSettingTab.errCannotContinueTest"));addMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"))}else{addErrorMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigFailed"));Logger(ex)}}return result};on_click2=(_,fixIssue,issue)=>fixIssue(issue());root_211=from_html('
');root_120=from_html('
');root_84=from_html("

Issue detection log:

",1);root27=from_html('
',1);$$css11={hash:"svelte-a38xug",code:"\n /* Make .check-result a CSS Grid: let .message expand and keep .operations at minimum width, aligned to the right */.check-results.svelte-a38xug {\n /* Adjust spacing as required */margin-top:0.75rem;}.check-result.svelte-a38xug {display:grid;grid-template-columns:1fr auto; /* message takes remaining space, operations use minimum width */align-items:center; /* vertically centre align */gap:0.5rem 1rem;padding:0rem 0.5rem;border-radius:0;box-shadow:none;border-left:0.5em solid var(--interactive-accent);margin-bottom:0.25lh;}.check-result.error.svelte-a38xug {border-left:0.5em solid var(--text-error);}.check-result.success.svelte-a38xug {border-left:0.5em solid var(--text-success);}.check-result.svelte-a38xug .message:where(.svelte-a38xug) {\n /* Wrap long messages */white-space:normal;word-break:break-word;font-size:0.95rem;color:var(--text-normal);}.check-result.svelte-a38xug .operations:where(.svelte-a38xug) {\n /* Centre the button(s) vertically and align to the right */display:flex;align-items:center;justify-content:flex-end;gap:0.5rem;}\n\n /* For small screens: move .operations below and stack vertically */\n @media (max-width: 520px) {.check-result.svelte-a38xug {grid-template-columns:1fr;grid-auto-rows:auto;}.check-result.svelte-a38xug .operations:where(.svelte-a38xug) {justify-content:flex-start;margin-top:0.5rem;}\n }"};delegate(["click"]);root_212=from_html('');root_49=from_html('');root_64=from_html('');root_85=from_html('');root_1110=from_html('');root_134=from_html('');root_142=from_html("");root_152=from_html('');root_162=from_html('');root_182=from_html('');root_192=from_html('');root_123=from_html(" ",1);root_242=from_html(" ",1);root28=from_html("
",1);root_213=from_html('');root_410=from_html('');root_65=from_html('');root_76=from_html('');root_86=from_html('');root_93=from_html('');root_1111=from_html('');root_143=from_html('');root_183=from_html(" ",1);root29=from_html(" ",1);new(PouchError=class extends Error{constructor(status,error,reason){super();this.status=status;this.name=error;this.message=reason;this.error=!0}toString(){return JSON.stringify({status:this.status,name:this.name,message:this.message,reason:this.reason})}})(401,"unauthorized","Name or password is incorrect.");MISSING_BULK_DOCS=new PouchError(400,"bad_request","Missing JSON list of 'docs'");MISSING_DOC=new PouchError(404,"not_found","missing");REV_CONFLICT=new PouchError(409,"conflict","Document update conflict");INVALID_ID=new PouchError(400,"bad_request","_id field must contain a string");MISSING_ID=new PouchError(412,"missing_id","_id is required for puts");RESERVED_ID=new PouchError(400,"bad_request","Only reserved document ids may start with underscore.");new PouchError(412,"precondition_failed","Database not open");UNKNOWN_ERROR=new PouchError(500,"unknown_error","Database encountered an unknown error");BAD_ARG=new PouchError(500,"badarg","Some query argument is invalid");new PouchError(400,"invalid_request","Request was invalid");QUERY_PARSE_ERROR=new PouchError(400,"query_parse_error","Some query parameter is invalid");DOC_VALIDATION=new PouchError(500,"doc_validation","Bad special document member");BAD_REQUEST=new PouchError(400,"bad_request","Something wrong with the request");NOT_AN_OBJECT=new PouchError(400,"bad_request","Document must be a JSON object");new PouchError(404,"not_found","Database not found");IDB_ERROR=new PouchError(500,"indexed_db_went_bad","unknown");new PouchError(500,"web_sql_went_bad","unknown");new PouchError(500,"levelDB_went_went_bad","unknown");new PouchError(403,"forbidden","Forbidden by design doc validate_doc_update function");INVALID_REV=new PouchError(400,"bad_request","Invalid rev format");new PouchError(412,"file_exists","The database could not be created, the file already exists.");MISSING_STUB=new PouchError(412,"missing_stub","A pre-existing attachment stub wasn't found");new PouchError(413,"invalid_url","Provided URL is invalid");rnds82=new Uint8Array(16);regex_default2=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;validate_default2=function validate3(uuid2){return"string"==typeof uuid2&®ex_default2.test(uuid2)};byteToHex2=[];for(i2=0;i2<256;++i2)byteToHex2.push((i2+256).toString(16).substr(1));stringify_default2=function stringify2(arr){var offset=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,uuid2=(byteToHex2[arr[offset+0]]+byteToHex2[arr[offset+1]]+byteToHex2[arr[offset+2]]+byteToHex2[arr[offset+3]]+"-"+byteToHex2[arr[offset+4]]+byteToHex2[arr[offset+5]]+"-"+byteToHex2[arr[offset+6]]+byteToHex2[arr[offset+7]]+"-"+byteToHex2[arr[offset+8]]+byteToHex2[arr[offset+9]]+"-"+byteToHex2[arr[offset+10]]+byteToHex2[arr[offset+11]]+byteToHex2[arr[offset+12]]+byteToHex2[arr[offset+13]]+byteToHex2[arr[offset+14]]+byteToHex2[arr[offset+15]]).toLowerCase();if(!validate_default2(uuid2))throw TypeError("Stringified UUID is invalid");return uuid2};v4_default2=function v42(options,buf,offset){var rnds,i2;(rnds=(options=options||{}).random||(options.rng||rng2)())[6]=15&rnds[6]|64;rnds[8]=63&rnds[8]|128;if(buf){offset=offset||0;for(i2=0;i2<16;++i2)buf[offset+i2]=rnds[i2];return buf}return stringify_default2(rnds)};thisAtob=function(str){return atob(str)};thisBtoa=function(str){return btoa(str)};import_spark_md5=__toESM(require_spark_md5());setImmediateShim=self.setImmediate||self.setTimeout;MD5_CHUNK_SIZE=32768;import_events15=__toESM(require_events());funcToString=Function.prototype.toString;objectCtorString=funcToString.call(Object);MAX_NUM_CONCURRENT_REQUESTS=6;try{localStorage.setItem("_pouch_check_localstorage",1);hasLocal=!!localStorage.getItem("_pouch_check_localstorage")}catch(e3){hasLocal=!1}nextTick="function"==typeof queueMicrotask?queueMicrotask:function nextTick2(fn){Promise.resolve().then(fn)};Changes=class extends import_events15.default{constructor(){super();this._listeners={};hasLocalStorage()&&addEventListener("storage",(e3=>{this.emit(e3.key)}))}addListener(dbName,id,db,opts){function eventFunction(){if(self3._listeners[id])if(inprogress)inprogress="waiting";else{inprogress=!0;var changesOpts=pick(opts,["style","include_docs","attachments","conflicts","filter","doc_ids","view","since","query_params","binary","return_docs"]);db.changes(changesOpts).on("change",(function(c3){if(c3.seq>opts.since&&!opts.cancelled){opts.since=c3.seq;opts.onChange(c3)}})).on("complete",(function(){"waiting"===inprogress&&nextTick(eventFunction);inprogress=!1})).on("error",(function onError(){inprogress=!1}))}}var inprogress,self3;if(!this._listeners[id]){inprogress=!1;self3=this;this._listeners[id]=eventFunction;this.on(dbName,eventFunction)}}removeListener(dbName,id){if(id in this._listeners){super.removeListener(dbName,this._listeners[id]);delete this._listeners[id]}}notifyLocalWindows(dbName){hasLocalStorage()&&(localStorage[dbName]="a"===localStorage[dbName]?"b":"a")}notify(dbName){this.emit(dbName);this.notifyLocalWindows(dbName)}};(function f2(){}).name;keys2=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];qName="queryKey";qParser=/(?:^|&)([^&=]*)=?([^&]*)/g;parser=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;uuid=v4_default2;f3=fetch;h2=Headers;MIN_MAGNITUDE=-324;MAGNITUDE_DIGITS=3;SEP="";combinationFields=["$or","$nor","$not"];matchers={$elemMatch:function(doc,userValue,parsedField,docFieldValue){return!!Array.isArray(docFieldValue)&&0!==docFieldValue.length&&("object"==typeof docFieldValue[0]&&null!==docFieldValue[0]?docFieldValue.some((function(val2){return rowFilter(val2,userValue,Object.keys(userValue))})):docFieldValue.some((function(val2){return matchSelector(userValue,doc,parsedField,val2)})))},$allMatch:function(doc,userValue,parsedField,docFieldValue){return!!Array.isArray(docFieldValue)&&0!==docFieldValue.length&&("object"==typeof docFieldValue[0]&&null!==docFieldValue[0]?docFieldValue.every((function(val2){return rowFilter(val2,userValue,Object.keys(userValue))})):docFieldValue.every((function(val2){return matchSelector(userValue,doc,parsedField,val2)})))},$eq:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&0===collate(docFieldValue,userValue)},$gte:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)>=0},$gt:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)>0},$lte:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)<=0},$lt:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)<0},$exists:function(doc,userValue,parsedField,docFieldValue){return userValue?fieldIsNotUndefined(docFieldValue):!fieldIsNotUndefined(docFieldValue)},$mod:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&modField(docFieldValue,userValue)},$ne:function(doc,userValue,parsedField,docFieldValue){return userValue.every((function(neValue){return 0!==collate(docFieldValue,neValue)}))},$in:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&arrayContainsValue(docFieldValue,userValue)},$nin:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&!arrayContainsValue(docFieldValue,userValue)},$size:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&Array.isArray(docFieldValue)&&arraySize(docFieldValue,userValue)},$all:function(doc,userValue,parsedField,docFieldValue){return Array.isArray(docFieldValue)&&arrayContainsAllValues(docFieldValue,userValue)},$regex:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&"string"==typeof docFieldValue&&userValue.every((function(regexValue){return regexMatch(docFieldValue,regexValue)}))},$type:function(doc,userValue,parsedField,docFieldValue){return typeMatch(docFieldValue,userValue)}};index_browser_es_default=function applyChangesFilterPlugin(PouchDB2){PouchDB2._changesFilterPlugin={validate:validate4,normalize,shouldFilter,filter:filter2}};import_events16=__toESM(require_events());Changes2=class extends import_events16.default{constructor(db,opts,callback){var complete,promise;super();this.db=db;opts=opts?clone2(opts):{};complete=opts.complete=once2(((err3,resp)=>{err3?listenerCount(this,"error")>0&&this.emit("error",err3):this.emit("complete",resp);this.removeAllListeners();db.removeListener("destroyed",onDestroy2)}));if(callback){this.on("complete",(function(resp){callback(null,resp)}));this.on("error",callback)}const onDestroy2=()=>{this.cancel()};db.once("destroyed",onDestroy2);opts.onChange=(change,pending3,lastSeq)=>{this.isCancelled||tryCatchInChangeListener(this,change,pending3,lastSeq)};promise=new Promise((function(fulfill,reject){opts.complete=function(err3,res2){err3?reject(err3):fulfill(res2)}}));this.once("cancel",(function(){db.removeListener("destroyed",onDestroy2);opts.complete(null,{status:"cancelled"})}));this.then=promise.then.bind(promise);this.catch=promise.catch.bind(promise);this.then((function(result){complete(null,result)}),complete);db.taskqueue.isReady?this.validateChanges(opts):db.taskqueue.addTask((failed2=>{failed2?opts.complete(failed2):this.isCancelled?this.emit("cancel"):this.validateChanges(opts)}))}cancel(){this.isCancelled=!0;this.db.taskqueue.isReady&&this.emit("cancel")}validateChanges(opts){var callback=opts.complete;PouchDB._changesFilterPlugin?PouchDB._changesFilterPlugin.validate(opts,(err3=>{if(err3)return callback(err3);this.doChanges(opts)})):this.doChanges(opts)}doChanges(opts){var newPromise,callback=opts.complete;"live"in(opts=clone2(opts))&&!("continuous"in opts)&&(opts.continuous=opts.live);opts.processChange=processChange;"latest"===opts.since&&(opts.since="now");opts.since||(opts.since=0);if("now"!==opts.since){if(PouchDB._changesFilterPlugin){PouchDB._changesFilterPlugin.normalize(opts);if(PouchDB._changesFilterPlugin.shouldFilter(this,opts))return PouchDB._changesFilterPlugin.filter(this,opts)}else["doc_ids","filter","selector","view"].forEach((function(key3){key3 in opts&&guardedConsole("warn",'The "'+key3+'" option was passed in to changes/replicate, but pouchdb-changes-filter plugin is not installed, so it was ignored. Please install the plugin to enable filtering.')}));"descending"in opts||(opts.descending=!1);opts.limit=0===opts.limit?1:opts.limit;opts.complete=callback;if((newPromise=this.db._changes(opts))&&"function"==typeof newPromise.cancel){const cancel2=this.cancel;this.cancel=(...args)=>{newPromise.cancel();cancel2.apply(this,args)}}}else this.db.info().then((info3=>{if(this.isCancelled)callback(null,{status:"cancelled"});else{opts.since=info3.update_seq;this.doChanges(opts)}}),callback)}};validRevRegex=/^\d+-[^-]*$/;AbstractPouchDB=class extends import_events16.default{_setup(){this.post=adapterFun("post",(function(doc,opts,callback){if("function"==typeof opts){callback=opts;opts={}}if(isNotSingleDoc(doc))return callback(createError(NOT_AN_OBJECT));this.bulkDocs({docs:[doc]},opts,yankError(callback,doc._id))})).bind(this);this.put=adapterFun("put",(function(doc,opts,cb2){if("function"==typeof opts){cb2=opts;opts={}}if(isNotSingleDoc(doc))return cb2(createError(NOT_AN_OBJECT));invalidIdError(doc._id);if("_rev"in doc&&!isValidRev(doc._rev))return cb2(createError(INVALID_REV));if(isLocalId(doc._id)&&"function"==typeof this._putLocal)return doc._deleted?this._removeLocal(doc,cb2):this._putLocal(doc,cb2);const putDoc=next2=>{"function"==typeof this._put&&!1!==opts.new_edits?this._put(doc,opts,next2):this.bulkDocs({docs:[doc]},opts,yankError(next2,doc._id))};if(opts.force&&doc._rev){(function transformForceOptionToNewEditsOption(){var parts=doc._rev.split("-"),oldRevId=parts[1],newRevNum=parseInt(parts[0],10)+1,newRevId=rev2();doc._revisions={start:newRevNum,ids:[newRevId,oldRevId]};doc._rev=newRevNum+"-"+newRevId;opts.new_edits=!1})();putDoc((function(err3){var result=err3?null:{ok:!0,id:doc._id,rev:doc._rev};cb2(err3,result)}))}else putDoc(cb2)})).bind(this);this.putAttachment=adapterFun("putAttachment",(function(docId,attachmentId,rev$$1,blob,type){function createAttachment(doc){var prevrevpos="_rev"in doc?parseInt(doc._rev,10):0;doc._attachments=doc._attachments||{};doc._attachments[attachmentId]={content_type:type,data:blob,revpos:++prevrevpos};return api.put(doc)}var api=this;if("function"==typeof type){type=blob;blob=rev$$1;rev$$1=null}if(void 0===type){type=blob;blob=rev$$1;rev$$1=null}type||guardedConsole("warn","Attachment",attachmentId,"on document",docId,"is missing content_type");return api.get(docId).then((function(doc){if(doc._rev!==rev$$1)throw createError(REV_CONFLICT);return createAttachment(doc)}),(function(err3){if(err3.reason===MISSING_DOC.message)return createAttachment({_id:docId});throw err3}))})).bind(this);this.removeAttachment=adapterFun("removeAttachment",(function(docId,attachmentId,rev$$1,callback){this.get(docId,((err3,obj)=>{if(err3)callback(err3);else if(obj._rev===rev$$1){if(!obj._attachments)return callback();delete obj._attachments[attachmentId];0===Object.keys(obj._attachments).length&&delete obj._attachments;this.put(obj,callback)}else callback(createError(REV_CONFLICT))}))})).bind(this);this.remove=adapterFun("remove",(function(docOrId,optsOrRev,opts,callback){var doc,newDoc;if("string"==typeof optsOrRev){doc={_id:docOrId,_rev:optsOrRev};if("function"==typeof opts){callback=opts;opts={}}}else{doc=docOrId;if("function"==typeof optsOrRev){callback=optsOrRev;opts={}}else{callback=opts;opts=optsOrRev}}(opts=opts||{}).was_delete=!0;(newDoc={_id:doc._id,_rev:doc._rev||opts.rev})._deleted=!0;if(isLocalId(newDoc._id)&&"function"==typeof this._removeLocal)return this._removeLocal(doc,callback);this.bulkDocs({docs:[newDoc]},opts,yankError(callback,newDoc._id))})).bind(this);this.revsDiff=adapterFun("revsDiff",(function(req,opts,callback){function addToMissing(id,revId){missing.has(id)||missing.set(id,{missing:[]});missing.get(id).missing.push(revId)}function processDoc(id,rev_tree){var missingForId=req[id].slice(0);traverseRevTree(rev_tree,(function(isLeaf,pos,revHash,ctx,opts2){var rev$$1=pos+"-"+revHash,idx2=missingForId.indexOf(rev$$1);if(-1!==idx2){missingForId.splice(idx2,1);"available"!==opts2.status&&addToMissing(id,rev$$1)}}));missingForId.forEach((function(rev$$1){addToMissing(id,rev$$1)}))}var ids,count,missing;if("function"==typeof opts){callback=opts;opts={}}if(!(ids=Object.keys(req)).length)return callback(null,{});count=0;missing=new Map;ids.forEach((function(id){this._getRevisionTree(id,(function(err3,rev_tree){if(err3&&404===err3.status&&"missing"===err3.message)missing.set(id,{missing:req[id]});else{if(err3)return callback(err3);processDoc(id,rev_tree)}if(++count===ids.length){var missingObj={};missing.forEach((function(value,key3){missingObj[key3]=value}));return callback(null,missingObj)}}))}),this)})).bind(this);this.bulkGet=adapterFun("bulkGet",(function(opts,callback){bulkGet(this,opts,callback)})).bind(this);this.compactDocument=adapterFun("compactDocument",(function(docId,maxHeight,callback){this._getRevisionTree(docId,((err3,revTree)=>{var height,candidates,revs;if(err3)return callback(err3);height=computeHeight(revTree);candidates=[];revs=[];Object.keys(height).forEach((function(rev$$1){height[rev$$1]>maxHeight&&candidates.push(rev$$1)}));traverseRevTree(revTree,(function(isLeaf,pos,revHash,ctx,opts){var rev$$1=pos+"-"+revHash;"available"===opts.status&&-1!==candidates.indexOf(rev$$1)&&revs.push(rev$$1)}));this._doCompaction(docId,revs,callback)}))})).bind(this);this.compact=adapterFun("compact",(function(opts,callback){if("function"==typeof opts){callback=opts;opts={}}opts=opts||{};this._compactionQueue=this._compactionQueue||[];this._compactionQueue.push({opts,callback});1===this._compactionQueue.length&&doNextCompaction(this)})).bind(this);this.get=adapterFun("get",(function(id,opts,cb2){var leaves,i2;if("function"==typeof opts){cb2=opts;opts={}}opts=opts||{};if("string"!=typeof id)return cb2(createError(INVALID_ID));if(isLocalId(id)&&"function"==typeof this._getLocal)return this._getLocal(id,cb2);leaves=[];const finishOpenRevs=()=>{var result=[],count=leaves.length;if(!count)return cb2(null,result);leaves.forEach((leaf=>{this.get(id,{rev:leaf,revs:opts.revs,latest:opts.latest,attachments:opts.attachments,binary:opts.binary},(function(err3,doc){var existing,i3,l3;if(err3)result.push({missing:leaf});else{for(i3=0,l3=result.length;i3{var doc,metadata,ctx,conflicts,splittedRev,revNo,revHash,paths,path2,i3,currentPath,howMany,pos,attachments,count,key3;if(err3){err3.docId=id;return cb2(err3)}doc=result.doc;metadata=result.metadata;ctx=result.ctx;opts.conflicts&&(conflicts=collectConflicts(metadata)).length&&(doc._conflicts=conflicts);isDeleted(metadata,doc._rev)&&(doc._deleted=!0);if(opts.revs||opts.revs_info){splittedRev=doc._rev.split("-");revNo=parseInt(splittedRev[0],10);revHash=splittedRev[1];paths=rootToLeaf(metadata.rev_tree);path2=null;for(i3=0;i3x2.id===revHash));(hashIndex===revNo-1||!path2&&-1!==hashIndex)&&(path2=currentPath)}if(!path2){(err3=new Error("invalid rev tree")).docId=id;return cb2(err3)}const pathId=doc._rev.split("-")[1],indexOfRev=path2.ids.findIndex((x2=>x2.id===pathId))+1;howMany=path2.ids.length-indexOfRev;path2.ids.splice(indexOfRev,howMany);path2.ids.reverse();opts.revs&&(doc._revisions={start:path2.pos+path2.ids.length-1,ids:path2.ids.map((function(rev$$1){return rev$$1.id}))});if(opts.revs_info){pos=path2.pos+path2.ids.length;doc._revs_info=path2.ids.map((function(rev$$1){return{rev:--pos+"-"+rev$$1.id,status:rev$$1.opts.status}}))}}if(opts.attachments&&doc._attachments){attachments=doc._attachments;if(0===(count=Object.keys(attachments).length))return cb2(null,doc);Object.keys(attachments).forEach((key4=>{this._getAttachment(doc._id,key4,attachments[key4],{binary:opts.binary,metadata,ctx},(function(err4,data){var att=doc._attachments[key4];att.data=data;delete att.stub;delete att.length;--count||cb2(null,doc)}))}))}else{if(doc._attachments)for(key3 in doc._attachments)Object.prototype.hasOwnProperty.call(doc._attachments,key3)&&(doc._attachments[key3].stub=!0);cb2(null,doc)}}));if("all"===opts.open_revs)this._getRevisionTree(id,(function(err3,rev_tree){if(err3)return cb2(err3);leaves=collectLeaves(rev_tree).map((function(leaf){return leaf.rev}));finishOpenRevs()}));else{if(!Array.isArray(opts.open_revs))return cb2(createError(UNKNOWN_ERROR,"function_clause"));leaves=opts.open_revs;for(i2=0;i2{if(err3)return callback(err3);if(!res2.doc._attachments||!res2.doc._attachments[attachmentId])return callback(createError(MISSING_DOC));opts.ctx=res2.ctx;opts.binary=!0;opts.metadata=res2.metadata;this._getAttachment(docId,attachmentId,res2.doc._attachments[attachmentId],opts,callback)}))})).bind(this);this.allDocs=adapterFun("allDocs",(function(opts,callback){if("function"==typeof opts){callback=opts;opts={}}opts.skip=void 0!==opts.skip?opts.skip:0;opts.start_key&&(opts.startkey=opts.start_key);opts.end_key&&(opts.endkey=opts.end_key);if("keys"in opts){if(!Array.isArray(opts.keys))return callback(new TypeError("options.keys must be an array"));var incompatibleOpt=["startkey","endkey","key"].filter((function(incompatibleOpt2){return incompatibleOpt2 in opts}))[0];if(incompatibleOpt){callback(createError(QUERY_PARSE_ERROR,"Query parameter `"+incompatibleOpt+"` is not compatible with multi-get"));return}if(!isRemote(this)){allDocsKeysParse(opts);if(0===opts.keys.length)return this._allDocs({limit:0},callback)}}return this._allDocs(opts,callback)})).bind(this);this.close=adapterFun("close",(function(callback){this._closed=!0;this.emit("closed");return this._close(callback)})).bind(this);this.info=adapterFun("info",(function(callback){this._info(((err3,info3)=>{if(err3)return callback(err3);info3.db_name=info3.db_name||this.name;info3.auto_compaction=!(!this.auto_compaction||isRemote(this));info3.adapter=this.adapter;callback(null,info3)}))})).bind(this);this.id=adapterFun("id",(function(callback){return this._id(callback)})).bind(this);this.bulkDocs=adapterFun("bulkDocs",(function(req,opts,callback){var i2,attachmentError,adapter,ids;if("function"==typeof opts){callback=opts;opts={}}opts=opts||{};Array.isArray(req)&&(req={docs:req});if(!req||!req.docs||!Array.isArray(req.docs))return callback(createError(MISSING_BULK_DOCS));for(i2=0;i2{this._destroy(opts,((err3,resp)=>{if(err3)return callback(err3);this._destroyed=!0;this.emit("destroyed");callback(null,resp||{ok:!0})}))};if(isRemote(this))return destroyDb();this.get("_local/_pouch_dependentDbs",((err3,localDoc)=>{var dependentDbs,PouchDB2,deletedMap;if(err3)return 404!==err3.status?callback(err3):destroyDb();dependentDbs=localDoc.dependentDbs;PouchDB2=this.constructor;deletedMap=Object.keys(dependentDbs).map((name=>{var trueName=usePrefix?name.replace(new RegExp("^"+PouchDB2.prefix),""):name;return new PouchDB2(trueName,this.__opts).destroy()}));Promise.all(deletedMap).then(destroyDb,callback)}))})).bind(this)}_compact(opts,callback){var taskId,changesOpts={return_docs:!1,last_seq:opts.last_seq||0,since:opts.last_seq||0},promises=[],compactedDocs=0;const onChange=row=>{this.activeTasks.update(taskId,{completed_items:++compactedDocs});promises.push(this.compactDocument(row.id,0))},onError=err3=>{this.activeTasks.remove(taskId,err3);callback(err3)},onComplete=resp=>{var lastSeq=resp.last_seq;Promise.all(promises).then((()=>upsert2(this,"_local/compaction",(doc=>{if(!doc.last_seq||doc.last_seq{this.activeTasks.remove(taskId);callback(null,{ok:!0})})).catch(onError)};this.info().then((info3=>{taskId=this.activeTasks.add({name:"database_compaction",total_items:info3.update_seq-changesOpts.last_seq});this.changes(changesOpts).on("change",onChange).on("complete",onComplete).on("error",onError)}))}changes(opts,callback){if("function"==typeof opts){callback=opts;opts={}}(opts=opts||{}).return_docs="return_docs"in opts?opts.return_docs:!opts.live;return new Changes2(this,opts,callback)}type(){return"function"==typeof this._type?this._type():this.adapter}};AbstractPouchDB.prototype.purge=adapterFun("_purge",(function(docId,rev$$1,callback){if(void 0===this._purge)return callback(createError(UNKNOWN_ERROR,"Purge is not implemented in the "+this.adapter+" adapter."));var self3=this;self3._getRevisionTree(docId,((error,revs)=>{if(error)return callback(error);if(!revs)return callback(createError(MISSING_DOC));let path2;try{path2=findPathToLeaf(revs,rev$$1)}catch(error2){return callback(error2.message||error2)}self3._purge(docId,path2,((error2,result)=>{if(error2)return callback(error2);appendPurgeSeq(self3,docId,rev$$1).then((function(){return callback(null,result)}))}))}))}));TaskQueue=class{constructor(){this.isReady=!1;this.failed=!1;this.queue=[]}execute(){var fun;if(this.failed)for(;fun=this.queue.shift();)fun(this.failed);else for(;fun=this.queue.shift();)fun()}fail(err3){this.failed=err3;this.execute()}ready(db){this.isReady=!0;this.db=db;this.execute()}addTask(fun){this.queue.push(fun);this.failed&&this.execute()}};PouchInternal=class extends AbstractPouchDB{constructor(name,opts){super();this._setup(name,opts)}_setup(name,opts){var backend;super._setup();opts=opts||{};if(name&&"object"==typeof name){name=(opts=name).name;delete opts.name}void 0===opts.deterministic_revs&&(opts.deterministic_revs=!0);this.__opts=opts=clone2(opts);this.auto_compaction=opts.auto_compaction;this.purged_infos_limit=opts.purged_infos_limit||1e3;this.prefix=PouchDB.prefix;if("string"!=typeof name)throw new Error("Missing/invalid DB name");backend=parseAdapter((opts.prefix||"")+name,opts);opts.name=backend.name;opts.adapter=opts.adapter||backend.adapter;this.name=name;this._adapter=opts.adapter;PouchDB.emit("debug",["adapter","Picked adapter: ",opts.adapter]);if(!PouchDB.adapters[opts.adapter]||!PouchDB.adapters[opts.adapter].valid())throw new Error("Invalid Adapter: "+opts.adapter);if(opts.view_adapter&&(!PouchDB.adapters[opts.view_adapter]||!PouchDB.adapters[opts.view_adapter].valid()))throw new Error("Invalid View Adapter: "+opts.view_adapter);this.taskqueue=new TaskQueue;this.adapter=opts.adapter;PouchDB.adapters[opts.adapter].call(this,opts,(err3=>{if(err3)return this.taskqueue.fail(err3);prepareForDestruction(this);this.emit("created",this);PouchDB.emit("created",this.name);this.taskqueue.ready(this)}))}};PouchDB=createClass(PouchInternal,(function(name,opts){PouchInternal.prototype._setup.call(this,name,opts)}));ActiveTasks=class{constructor(){this.tasks={}}list(){return Object.values(this.tasks)}add(task){const id=v4_default2();this.tasks[id]={id,name:task.name,total_items:task.total_items,created_at:(new Date).toJSON()};return id}get(id){return this.tasks[id]}remove(id,reason){delete this.tasks[id];return this.tasks}update(id,updatedTask){const task=this.tasks[id];if(void 0!==task){const mergedTask={id:task.id,name:task.name,created_at:task.created_at,total_items:updatedTask.total_items||task.total_items,completed_items:updatedTask.completed_items||task.completed_items,updated_at:(new Date).toJSON()};this.tasks[id]=mergedTask}return this.tasks}};PouchDB.adapters={};PouchDB.preferredAdapters=[];PouchDB.prefix="_pouch_";eventEmitter=new import_events16.default;(function setUpEventEmitter(Pouch){Object.keys(import_events16.default.prototype).forEach((function(key3){"function"==typeof import_events16.default.prototype[key3]&&(Pouch[key3]=eventEmitter[key3].bind(eventEmitter))}));var destructListeners=Pouch._destructionListeners=new Map;Pouch.on("ref",(function onConstructorRef(db){destructListeners.has(db.name)||destructListeners.set(db.name,[]);destructListeners.get(db.name).push(db)}));Pouch.on("unref",(function onConstructorUnref(db){var dbList,pos;if(destructListeners.has(db.name)&&!((pos=(dbList=destructListeners.get(db.name)).indexOf(db))<0)){dbList.splice(pos,1);dbList.length>1?destructListeners.set(db.name,dbList):destructListeners.delete(db.name)}}));Pouch.on("destroyed",(function onConstructorDestroyed(name){if(destructListeners.has(name)){var dbList=destructListeners.get(name);destructListeners.delete(name);dbList.forEach((function(db){db.emit("destroyed",!0)}))}}))})(PouchDB);PouchDB.adapter=function(id,obj,addToPreferredAdapters){if(obj.valid()){PouchDB.adapters[id]=obj;addToPreferredAdapters&&PouchDB.preferredAdapters.push(id)}};PouchDB.plugin=function(obj){if("function"==typeof obj)obj(PouchDB);else{if("object"!=typeof obj||0===Object.keys(obj).length)throw new Error('Invalid plugin: got "'+obj+'", expected an object or a function');Object.keys(obj).forEach((function(id){PouchDB.prototype[id]=obj[id]}))}this.__defaults&&(PouchDB.__defaults=Object.assign({},this.__defaults));return PouchDB};PouchDB.defaults=function(defaultOpts){let PouchWithDefaults=createClass(PouchDB,(function(name,opts){opts=opts||{};if(name&&"object"==typeof name){name=(opts=name).name;delete opts.name}opts=Object.assign({},PouchWithDefaults.__defaults,opts);PouchDB.call(this,name,opts)}));PouchWithDefaults.preferredAdapters=PouchDB.preferredAdapters.slice();Object.keys(PouchDB).forEach((function(key3){key3 in PouchWithDefaults||(PouchWithDefaults[key3]=PouchDB[key3])}));PouchWithDefaults.__defaults=Object.assign({},this.__defaults,defaultOpts);return PouchWithDefaults};PouchDB.fetch=function(url,opts){return f3(url,opts)};PouchDB.prototype.activeTasks=PouchDB.activeTasks=new ActiveTasks;PouchDB.plugin(index_browser_es_default);PouchDB.version="9.0.0";index_es_default=PouchDB;import_vuvuzela=__toESM(require_vuvuzela());reservedWords=toObject(["_id","_rev","_access","_attachments","_deleted","_revisions","_revs_info","_conflicts","_deleted_conflicts","_local_seq","_rev_tree","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats","_removed"]);dataWords=toObject(["_access","_attachments","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats"]);ADAPTER_VERSION=5;DOC_STORE="document-store";BY_SEQ_STORE="by-sequence";ATTACH_STORE="attach-store";ATTACH_AND_SEQ_STORE="attach-seq-store";META_STORE="meta-store";LOCAL_STORE="local-store";DETECT_BLOB_SUPPORT_STORE="detect-blob-support";changesHandler$1=new Changes;running=!1;queue=[];cachedDBs=new Map;openReqList=new Map;IdbPouch.valid=function(){try{return"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e3){return!1}};index_es_default2=function index2(PouchDB2){PouchDB2.adapter("idb",IdbPouch,!0)};IDB_NULL=Number.MIN_SAFE_INTEGER;IDB_FALSE=Number.MIN_SAFE_INTEGER+1;IDB_TRUE=Number.MIN_SAFE_INTEGER+2;TEST_KEY_INVALID=/^[^a-zA-Z$]|[^a-zA-Z0-9$]+/;TEST_PATH_INVALID=/\\.|(^|\.)[^a-zA-Z$]|[^a-zA-Z0-9$.]+/;KEY_INVALID=new RegExp(TEST_KEY_INVALID.source,"g");PATH_INVALID=new RegExp(TEST_PATH_INVALID.source,"g");SLASH="\\".charCodeAt(0);IS_DOT=".".charCodeAt(0);DOC_STORE2="docs";META_LOCAL_STORE="meta";POUCHDB_IDB_VERSION=2;versionMultiplier=Math.pow(10,13);BINARY_ATTACHMENTS=!1;COUCH_COLLATE_LO=null;COUCH_COLLATE_HI="￿";IDB_COLLATE_LO=Number.NEGATIVE_INFINITY;IDB_COLLATE_HI=[[[[[[[[[[[[]]]]]]]]]]]];ADAPTER_NAME="indexeddb";idbChanges=new Changes;openDatabases={};IndexeddbPouch.valid=function(){return!0};index_es_default3=function index3(PouchDB2){PouchDB2.adapter(ADAPTER_NAME,IndexeddbPouch,!0)};CHANGES_BATCH_SIZE=25;MAX_SIMULTANEOUS_REVS=50;CHANGES_TIMEOUT_BUFFER=5e3;DEFAULT_HEARTBEAT=1e4;supportsBulkGetMap={};HttpPouch.valid=function(){return!0};index_es_default4=function index4(PouchDB2){PouchDB2.adapter("http",HttpPouch,!1);PouchDB2.adapter("https",HttpPouch,!1)};QueryParseError=class _QueryParseError extends Error{constructor(message){super();this.status=400;this.name="query_parse_error";this.message=message;this.error=!0;try{Error.captureStackTrace(this,_QueryParseError)}catch(e3){}}};NotFoundError=class _NotFoundError extends Error{constructor(message){super();this.status=404;this.name="not_found";this.message=message;this.error=!0;try{Error.captureStackTrace(this,_NotFoundError)}catch(e3){}}};BuiltInError=class _BuiltInError extends Error{constructor(message){super();this.status=500;this.name="invalid_value";this.message=message;this.error=!0;try{Error.captureStackTrace(this,_BuiltInError)}catch(e3){}}};persistentQueues={};tempViewQueue=new(TaskQueue2=class{constructor(){this.promise=Promise.resolve()}add(promiseFactory){this.promise=this.promise.catch((()=>{})).then((()=>promiseFactory()));return this.promise}finish(){return this.promise}});index_es_default5=function createAbstractMapReduce(localDocName2,mapper3,reducer3,ddocValidator3){function tryMap(db,fun,doc){try{fun(doc)}catch(e3){emitError(db,e3,{fun,doc})}}function tryReduce(db,fun,keys3,values,rereduce){try{return{output:fun(keys3,values,rereduce)}}catch(e3){emitError(db,e3,{fun,keys:keys3,values,rereduce});return{error:e3}}}function sortByKeyThenValue(x2,y2){const keyCompare=collate(x2.key,y2.key);return 0!==keyCompare?keyCompare:collate(x2.value,y2.value)}function sliceResults(results,limit,skip){skip=skip||0;return"number"==typeof limit?results.slice(skip,limit+skip):skip>0?results.slice(skip):results}function rowToDocId(row){const val2=row.value;return val2&&"object"==typeof val2&&val2._id||row.id}function readAttachmentsAsBlobOrBuffer2(res2){for(const row of res2.rows){const atts=row.doc&&row.doc._attachments;if(atts)for(const filename of Object.keys(atts)){const att=atts[filename];atts[filename].data=b64ToBluffer(att.data,att.content_type)}}}function postprocessAttachments(opts){return function(res2){opts.include_docs&&opts.attachments&&opts.binary&&readAttachmentsAsBlobOrBuffer2(res2);return res2}}function addHttpParam(paramName,opts,params,asJson){let val2=opts[paramName];if(void 0!==val2){asJson&&(val2=encodeURIComponent(JSON.stringify(val2)));params.push(paramName+"="+val2)}}function coerceInteger(integerCandidate){if(void 0!==integerCandidate){const asNumber=Number(integerCandidate);return isNaN(asNumber)||asNumber!==parseInt(integerCandidate,10)?integerCandidate:asNumber}}function coerceOptions(opts){opts.group_level=coerceInteger(opts.group_level);opts.limit=coerceInteger(opts.limit);opts.skip=coerceInteger(opts.skip);return opts}function checkPositiveInteger(number){if(number){if("number"!=typeof number)return new QueryParseError(`Invalid value for integer: "${number}"`);if(number<0)return new QueryParseError(`Invalid value for positive integer: "${number}"`)}}function checkQueryParseError(options,fun){const startkeyName=options.descending?"endkey":"startkey",endkeyName=options.descending?"startkey":"endkey";if(void 0!==options[startkeyName]&&void 0!==options[endkeyName]&&collate(options[startkeyName],options[endkeyName])>0)throw new QueryParseError("No rows can match your key range, reverse your start_key and end_key or set {descending : true}");if(fun.reduce&&!1!==options.reduce){if(options.include_docs)throw new QueryParseError("{include_docs:true} is invalid for reduce");if(options.keys&&options.keys.length>1&&!options.group&&!options.group_level)throw new QueryParseError("Multi-key fetches for reduce views must use {group: true}")}for(const optionName of["group_level","limit","skip"]){const error=checkPositiveInteger(options[optionName]);if(error)throw error}}async function httpQuery(db,fun,opts){let body,ok,params=[],method="GET";addHttpParam("reduce",opts,params);addHttpParam("include_docs",opts,params);addHttpParam("attachments",opts,params);addHttpParam("limit",opts,params);addHttpParam("descending",opts,params);addHttpParam("group",opts,params);addHttpParam("group_level",opts,params);addHttpParam("skip",opts,params);addHttpParam("stale",opts,params);addHttpParam("conflicts",opts,params);addHttpParam("startkey",opts,params,!0);addHttpParam("start_key",opts,params,!0);addHttpParam("endkey",opts,params,!0);addHttpParam("end_key",opts,params,!0);addHttpParam("inclusive_end",opts,params);addHttpParam("key",opts,params,!0);addHttpParam("update_seq",opts,params);params=params.join("&");params=""===params?"":"?"+params;if(void 0!==opts.keys){const MAX_URL_LENGTH=2e3,keysAsString=`keys=${encodeURIComponent(JSON.stringify(opts.keys))}`;if(keysAsString.length+params.length+1<=MAX_URL_LENGTH)params+=("?"===params[0]?"&":"?")+keysAsString;else{method="POST";"string"==typeof fun?body={keys:opts.keys}:fun.keys=opts.keys}}if("string"==typeof fun){const parts=parseViewName(fun),response2=await db.fetch("_design/"+parts[0]+"/_view/"+parts[1]+params,{headers:new h2({"Content-Type":"application/json"}),method,body:JSON.stringify(body)});ok=response2.ok;const result2=await response2.json();if(!ok){result2.status=response2.status;throw generateErrorFromResponse(result2)}for(const row of result2.rows)if(row.value&&row.value.error&&"builtin_reduce_error"===row.value.error)throw new Error(row.reason);return new Promise((function(resolve){resolve(result2)})).then(postprocessAttachments(opts))}body=body||{};for(const key3 of Object.keys(fun))Array.isArray(fun[key3])?body[key3]=fun[key3]:body[key3]=fun[key3].toString();const response=await db.fetch("_temp_view"+params,{headers:new h2({"Content-Type":"application/json"}),method:"POST",body:JSON.stringify(body)});ok=response.ok;const result=await response.json();if(!ok){result.status=response.status;throw generateErrorFromResponse(result)}return new Promise((function(resolve){resolve(result)})).then(postprocessAttachments(opts))}function customQuery(db,fun,opts){return new Promise((function(resolve,reject){db._query(fun,opts,(function(err3,res2){if(err3)return reject(err3);resolve(res2)}))}))}function customViewCleanup(db){return new Promise((function(resolve,reject){db._viewCleanup((function(err3,res2){if(err3)return reject(err3);resolve(res2)}))}))}function defaultsTo(value){return function(reason){if(404===reason.status)return value;throw reason}}async function getDocsToPersist(docId,view,docIdsToChangesAndEmits){const metaDocId="_local/doc_"+docId,defaultMetaDoc={_id:metaDocId,keys:[]},docData=docIdsToChangesAndEmits.get(docId),indexableKeysToKeyValues=docData[0],changes3=docData[1],metaDoc=await function getMetaDoc(){return isGenOne(changes3)?Promise.resolve(defaultMetaDoc):view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc))}();return function processKeyValueDocs(metaDoc2,kvDocsRes){const kvDocs=[],oldKeys=new Set;for(const row of kvDocsRes.rows){const doc=row.doc;if(doc){kvDocs.push(doc);oldKeys.add(doc._id);doc._deleted=!indexableKeysToKeyValues.has(doc._id);if(!doc._deleted){const keyValue=indexableKeysToKeyValues.get(doc._id);"value"in keyValue&&(doc.value=keyValue.value)}}}const newKeys=mapToKeysArray(indexableKeysToKeyValues);for(const key3 of newKeys)if(!oldKeys.has(key3)){const kvDoc={_id:key3},keyValue=indexableKeysToKeyValues.get(key3);"value"in keyValue&&(kvDoc.value=keyValue.value);kvDocs.push(kvDoc)}metaDoc2.keys=uniq(newKeys.concat(metaDoc2.keys));kvDocs.push(metaDoc2);return kvDocs}(metaDoc,await function getKeyValueDocs(metaDoc2){return metaDoc2.keys.length?view.db.allDocs({keys:metaDoc2.keys,include_docs:!0}):Promise.resolve({rows:[]})}(metaDoc))}function updatePurgeSeq(view){return view.sourceDB.get("_local/purges").then((function(res2){const purgeSeq=res2.purgeSeq;return view.db.get("_local/purgeSeq").then((function(res3){return res3._rev})).catch(defaultsTo(void 0)).then((function(rev3){return view.db.put({_id:"_local/purgeSeq",_rev:rev3,purgeSeq})}))})).catch((function(err3){if(404!==err3.status)throw err3}))}function saveKeyValues(view,docIdsToChangesAndEmits,seq){return view.db.get("_local/lastSeq").catch(defaultsTo({_id:"_local/lastSeq",seq:0})).then((function(lastSeqDoc){var docIds=mapToKeysArray(docIdsToChangesAndEmits);return Promise.all(docIds.map((function(docId){return getDocsToPersist(docId,view,docIdsToChangesAndEmits)}))).then((function(listOfDocsToPersist){var docsToPersist=listOfDocsToPersist.flat();lastSeqDoc.seq=seq;docsToPersist.push(lastSeqDoc);return view.db.bulkDocs({docs:docsToPersist})})).then((()=>updatePurgeSeq(view)))}))}function getQueue(view){const viewName="string"==typeof view?view:view.name;let queue2=persistentQueues[viewName];queue2||(queue2=persistentQueues[viewName]=new TaskQueue2);return queue2}async function updateView(view,opts){return sequentialize(getQueue(view),(function(){return updateViewInQueue(view,opts)}))()}async function updateViewInQueue(view,opts){function processChange2(docIdsToChangesAndEmits,seq){return function(){return saveKeyValues(view,docIdsToChangesAndEmits,seq)}}async function processNextBatch(){return processBatch(await view.sourceDB.changes({return_docs:!0,conflicts:!0,include_docs:!0,style:"all_docs",since:currentSeq,limit:opts.changes_batch_size}),await getRecentPurges())}function getRecentPurges(){return view.db.get("_local/purgeSeq").then((function(res2){return res2.purgeSeq})).catch(defaultsTo(-1)).then((function(purgeSeq){return view.sourceDB.get("_local/purges").then((function(res2){const recentPurges=res2.purges.filter((function(purge2,index6){return index6>purgeSeq})).map((purge2=>purge2.docId)),uniquePurges=recentPurges.filter((function(docId,index6){return recentPurges.indexOf(docId)===index6}));return Promise.all(uniquePurges.map((function(docId){return view.sourceDB.get(docId).then((function(doc2){return{docId,doc:doc2}})).catch(defaultsTo({docId}))})))})).catch(defaultsTo([]))}))}function processBatch(response,purges){const results=response.results;if(!results.length&&!purges.length)return;for(const purge2 of purges)if(results.findIndex((function(change){return change.id===purge2.docId}))<0){const entry={_id:purge2.docId,doc:{_id:purge2.docId,_deleted:1},changes:[]};if(purge2.doc){entry.doc=purge2.doc;entry.changes.push({rev:purge2.doc._rev})}results.push(entry)}const docIdsToChangesAndEmits=createDocIdsToChangesAndEmits(results);queue2.add(processChange2(docIdsToChangesAndEmits,currentSeq));indexed_docs+=results.length;const progress2={view:view.name,last_seq:response.last_seq,results_count:results.length,indexed_docs};view.sourceDB.emit("indexing",progress2);view.sourceDB.activeTasks.update(taskId,{completed_items:indexed_docs});return results.length0&&0===collate(emittedKeyValue.key,lastKey)&&complexKey.push(i2);indexableKeysToKeyValues.set(toIndexableString(complexKey),emittedKeyValue);lastKey=emittedKeyValue.key}return indexableKeysToKeyValues}let mapResults,doc,taskId;const mapFun=mapper3(view.mapFun,(function emit2(key3,value){const output={id:doc._id,key:normalizeKey(key3)};null!=value&&(output.value=normalizeKey(value));mapResults.push(output)}));let currentSeq=view.seq||0,indexed_docs=0;const progress={view:view.name,indexed_docs};view.sourceDB.emit("indexing",progress);const queue2=new TaskQueue2;try{await function createTask(){return view.sourceDB.info().then((function(info3){taskId=view.sourceDB.activeTasks.add({name:"view_indexing",total_items:info3.update_seq-currentSeq})}))}();await processNextBatch();await queue2.finish();view.seq=currentSeq;view.sourceDB.activeTasks.remove(taskId)}catch(error){view.sourceDB.activeTasks.remove(taskId,error)}}function reduceView(view,results,options){0===options.group_level&&delete options.group_level;const shouldGroup=options.group||options.group_level,reduceFun=reducer3(view.reduceFun),groups=[],lvl=isNaN(options.group_level)?Number.POSITIVE_INFINITY:options.group_level;for(const result of results){const last=groups[groups.length-1];let groupKey=shouldGroup?result.key:null;shouldGroup&&Array.isArray(groupKey)&&(groupKey=groupKey.slice(0,lvl));if(last&&0===collate(last.groupKey,groupKey)){last.keys.push([result.key,result.id]);last.values.push(result.value)}else groups.push({keys:[[result.key,result.id]],values:[result.value],groupKey})}results=[];for(const group of groups){const reduceTry=tryReduce(view.sourceDB,reduceFun,group.keys,group.values,!1);if(reduceTry.error&&reduceTry.error instanceof BuiltInError)throw reduceTry.error;results.push({value:reduceTry.error?null:reduceTry.output,key:group.groupKey})}return{rows:sliceResults(results,options.limit,options.skip)}}function queryView(view,opts){return sequentialize(getQueue(view),(function(){return queryViewInQueue(view,opts)}))()}async function queryViewInQueue(view,opts){async function fetchFromView(viewOpts){viewOpts.include_docs=!0;const res2=await view.db.allDocs(viewOpts);totalRows=res2.total_rows;return res2.rows.map((function(result){if("value"in result.doc&&"object"==typeof result.doc.value&&null!==result.doc.value){const keys3=Object.keys(result.doc.value).sort(),expectedKeys=["id","key","value"];if(!(keys3expectedKeys))return result.doc.value}const parsedKeyAndDocId=parseIndexableString(result.doc._id);return{key:parsedKeyAndDocId[0],id:parsedKeyAndDocId[1],value:"value"in result.doc?result.doc.value:null}}))}async function onMapResultsReady(rows){let finalResults;finalResults=shouldReduce?reduceView(view,rows,opts):void 0===opts.keys?{total_rows:totalRows,offset:skip,rows}:{total_rows:totalRows,offset:skip,rows:sliceResults(rows,opts.limit,opts.skip)};opts.update_seq&&(finalResults.update_seq=view.seq);if(opts.include_docs){const docIds=uniq(rows.map(rowToDocId)),allDocsRes=await view.sourceDB.allDocs({keys:docIds,include_docs:!0,conflicts:opts.conflicts,attachments:opts.attachments,binary:opts.binary}),docIdsToDocs=new Map;for(const row of allDocsRes.rows)docIdsToDocs.set(row.id,row.doc);for(const row of rows){const docId=rowToDocId(row),doc=docIdsToDocs.get(docId);doc&&(row.doc=doc)}}return finalResults}let totalRows;const shouldReduce=view.reduceFun&&!1!==opts.reduce,skip=opts.skip||0;if(void 0!==opts.keys&&!opts.keys.length){opts.limit=0;delete opts.keys}if(void 0!==opts.keys){const fetchPromises=opts.keys.map((function(key3){const viewOpts={startkey:toIndexableString([key3]),endkey:toIndexableString([key3,{}])};opts.update_seq&&(viewOpts.update_seq=!0);return fetchFromView(viewOpts)}));return onMapResultsReady((await Promise.all(fetchPromises)).flat())}{const viewOpts={descending:opts.descending};opts.update_seq&&(viewOpts.update_seq=!0);let startkey,endkey;"start_key"in opts&&(startkey=opts.start_key);"startkey"in opts&&(startkey=opts.startkey);"end_key"in opts&&(endkey=opts.end_key);"endkey"in opts&&(endkey=opts.endkey);void 0!==startkey&&(viewOpts.startkey=opts.descending?toIndexableString([startkey,{}]):toIndexableString([startkey]));if(void 0!==endkey){let inclusiveEnd=!1!==opts.inclusive_end;opts.descending&&(inclusiveEnd=!inclusiveEnd);viewOpts.endkey=toIndexableString(inclusiveEnd?[endkey,{}]:[endkey])}if(void 0!==opts.key){const keyStart=toIndexableString([opts.key]),keyEnd=toIndexableString([opts.key,{}]);if(viewOpts.descending){viewOpts.endkey=keyStart;viewOpts.startkey=keyEnd}else{viewOpts.startkey=keyStart;viewOpts.endkey=keyEnd}}if(!shouldReduce){"number"==typeof opts.limit&&(viewOpts.limit=opts.limit);viewOpts.skip=skip}return onMapResultsReady(await fetchFromView(viewOpts))}}async function httpViewCleanup(db){return(await db.fetch("_view_cleanup",{headers:new h2({"Content-Type":"application/json"}),method:"POST"})).json()}async function localViewCleanup(db){try{const metaDoc=await db.get("_local/"+localDocName2),docsToViews=new Map;for(const fullViewName of Object.keys(metaDoc.views)){const parts=parseViewName(fullViewName),designDocName="_design/"+parts[0],viewName=parts[1];let views=docsToViews.get(designDocName);if(!views){views=new Set;docsToViews.set(designDocName,views)}views.add(viewName)}const opts={keys:mapToKeysArray(docsToViews),include_docs:!0},res2=await db.allDocs(opts),viewsToStatus={};for(const row of res2.rows){const ddocName=row.key.substring(8);for(const viewName of docsToViews.get(row.key)){let fullViewName=ddocName+"/"+viewName;metaDoc.views[fullViewName]||(fullViewName=viewName);const viewDBNames=Object.keys(metaDoc.views[fullViewName]),statusIsGood=row.doc&&row.doc.views&&row.doc.views[viewName];for(const viewDBName of viewDBNames)viewsToStatus[viewDBName]=viewsToStatus[viewDBName]||statusIsGood}}const destroyPromises=Object.keys(viewsToStatus).filter((function(viewDBName){return!viewsToStatus[viewDBName]})).map((function(viewDBName){return sequentialize(getQueue(viewDBName),(function(){return new db.constructor(viewDBName,db.__opts).destroy()}))()}));return Promise.all(destroyPromises).then((function(){return{ok:!0}}))}catch(err3){if(404===err3.status)return{ok:!0};throw err3}}async function queryPromised(db,fun,opts){if("function"==typeof db._query)return customQuery(db,fun,opts);if(isRemote(db))return httpQuery(db,fun,opts);const updateViewOpts={changes_batch_size:db.__opts.view_update_changes_batch_size||50};if("string"!=typeof fun){checkQueryParseError(opts,fun);tempViewQueue.add((async function(){const view=await createView(db,"temp_view/temp_view",fun.map,fun.reduce,!0,localDocName2);return fin(updateView(view,updateViewOpts).then((function(){return queryView(view,opts)})),(function(){return view.db.destroy()}))}));return tempViewQueue.finish()}{const fullViewName=fun,parts=parseViewName(fullViewName),designDocName=parts[0],viewName=parts[1],doc=await db.get("_design/"+designDocName);if(!(fun=doc.views&&doc.views[viewName]))throw new NotFoundError(`ddoc ${doc._id} has no view named ${viewName}`);ddocValidator3(doc,viewName);checkQueryParseError(opts,fun);const view=await createView(db,fullViewName,fun.map,fun.reduce,!1,localDocName2);if("ok"===opts.stale||"update_after"===opts.stale){"update_after"===opts.stale&&nextTick((function(){updateView(view,updateViewOpts)}));return queryView(view,opts)}await updateView(view,updateViewOpts);return queryView(view,opts)}}return{query:function abstractQuery(fun,opts,callback){const db=this;if("function"==typeof opts){callback=opts;opts={}}opts=opts?coerceOptions(opts):{};"function"==typeof fun&&(fun={map:fun});const promise=Promise.resolve().then((function(){return queryPromised(db,fun,opts)}));promisedCallback(promise,callback);return promise},viewCleanup:callbackify((function(){const db=this;return"function"==typeof db._viewCleanup?customViewCleanup(db):isRemote(db)?httpViewCleanup(db):localViewCleanup(db)}))}};log=guardedConsole.bind(null,"log");isArray=Array.isArray;toJSON=JSON.parse;builtInReduce__sum=function(keys3,values){return sum(values)},builtInReduce__count=function(keys3,values){return values.length},builtInReduce__stats=function(keys3,values){return{sum:sum(values),min:Math.min.apply(null,values),max:Math.max.apply(null,values),count:values.length,sumsqr:function sumsqr(values2){var i2,len,num,_sumsqr=0;for(i2=0,len=values2.length;i2{this.once("complete",fulfill);this.once("error",reject)}));this.then=function(resolve,reject){return promise.then(resolve,reject)};this.catch=function(reject){return promise.catch(reject)};this.catch((function(){}))}cancel(){this.cancelled=!0;this.state="cancelled";this.emit("cancel")}ready(src,target){function cleanup(){src.removeListener("destroyed",onDestroy2);target.removeListener("destroyed",onDestroy2)}if(this._readyCalled)return;this._readyCalled=!0;const onDestroy2=()=>{this.cancel()};src.once("destroyed",onDestroy2);target.once("destroyed",onDestroy2);this.once("complete",cleanup);this.once("error",cleanup)}};Sync=class extends import_events17.default{constructor(src,target,opts,callback){function addOneListener(ee,event2,listener){-1==ee.listeners(event2).indexOf(listener)&&ee.on(event2,listener)}super();this.canceled=!1;const optsPush=opts.push?Object.assign({},opts,opts.push):opts,optsPull=opts.pull?Object.assign({},opts,opts.pull):opts;this.push=replicateWrapper(src,target,optsPush);this.pull=replicateWrapper(target,src,optsPull);this.pushPaused=!0;this.pullPaused=!0;const pullChange=change=>{this.emit("change",{direction:"pull",change})},pushChange=change=>{this.emit("change",{direction:"push",change})},pushDenied=doc=>{this.emit("denied",{direction:"push",doc})},pullDenied=doc=>{this.emit("denied",{direction:"pull",doc})},pushPaused=()=>{this.pushPaused=!0;this.pullPaused&&this.emit("paused")},pullPaused=()=>{this.pullPaused=!0;this.pushPaused&&this.emit("paused")},pushActive=()=>{this.pushPaused=!1;this.pullPaused&&this.emit("active",{direction:"push"})},pullActive=()=>{this.pullPaused=!1;this.pushPaused&&this.emit("active",{direction:"pull"})};let removed={};const removeAll=type=>(event2,func)=>{if("change"===event2&&(func===pullChange||func===pushChange)||"denied"===event2&&(func===pullDenied||func===pushDenied)||"paused"===event2&&(func===pullPaused||func===pushPaused)||"active"===event2&&(func===pullActive||func===pushActive)){event2 in removed||(removed[event2]={});removed[event2][type]=!0;2===Object.keys(removed[event2]).length&&this.removeAllListeners(event2)}};if(opts.live){this.push.on("complete",this.pull.cancel.bind(this.pull));this.pull.on("complete",this.push.cancel.bind(this.push))}this.on("newListener",(function(event2){if("change"===event2){addOneListener(this.pull,"change",pullChange);addOneListener(this.push,"change",pushChange)}else if("denied"===event2){addOneListener(this.pull,"denied",pullDenied);addOneListener(this.push,"denied",pushDenied)}else if("active"===event2){addOneListener(this.pull,"active",pullActive);addOneListener(this.push,"active",pushActive)}else if("paused"===event2){addOneListener(this.pull,"paused",pullPaused);addOneListener(this.push,"paused",pushPaused)}}));this.on("removeListener",(function(event2){if("change"===event2){this.pull.removeListener("change",pullChange);this.push.removeListener("change",pushChange)}else if("denied"===event2){this.pull.removeListener("denied",pullDenied);this.push.removeListener("denied",pushDenied)}else if("active"===event2){this.pull.removeListener("active",pullActive);this.push.removeListener("active",pushActive)}else if("paused"===event2){this.pull.removeListener("paused",pullPaused);this.push.removeListener("paused",pushPaused)}}));this.pull.on("removeListener",removeAll("pull"));this.push.on("removeListener",removeAll("push"));const promise=Promise.all([this.push,this.pull]).then((resp=>{const out={push:resp[0],pull:resp[1]};this.emit("complete",out);callback&&callback(null,out);this.removeAllListeners();return out}),(err3=>{this.cancel();callback?callback(err3):this.emit("error",err3);this.removeAllListeners();if(callback)throw err3}));this.then=function(success,err3){return promise.then(success,err3)};this.catch=function(err3){return promise.catch(err3)}}cancel(){if(!this.canceled){this.canceled=!0;this.push.cancel();this.pull.cancel()}}};index_es_default8=function replication(PouchDB2){PouchDB2.replicate=replicateWrapper;PouchDB2.sync=sync;Object.defineProperty(PouchDB2.prototype,"replicate",{get:function(){var self3=this;void 0===this.replicateMethods&&(this.replicateMethods={from:function(other,opts,callback){return self3.constructor.replicate(other,self3,opts,callback)},to:function(other,opts,callback){return self3.constructor.replicate(self3,other,opts,callback)}});return this.replicateMethods}});PouchDB2.prototype.sync=function(dbName,opts,callback){return this.constructor.sync(this,dbName,opts,callback)}};nativeFlat=(...args)=>args.flat(1/0);polyFlat=(...args)=>{let res2=[];for(const subArr of args)Array.isArray(subArr)?res2=res2.concat(polyFlat(...subArr)):res2.push(subArr);return res2};flatten2="function"==typeof Array.prototype.flat?nativeFlat:polyFlat;requireValidation=["$all","$allMatch","$and","$elemMatch","$exists","$in","$mod","$nin","$nor","$not","$or","$regex","$size","$type"];arrayTypeComparisonOperators=["$in","$nin","$mod","$all"];equalityOperators=["$eq","$gt","$gte","$lt","$lte"];abstractMapper=index_es_default5("indexes",(function mapper2(mapFunDef,emit2){return createMapper(Object.keys(mapFunDef.fields),emit2,mapFunDef.partial_filter_selector)}),(function reducer2(){throw new Error("reduce not supported")}),(function ddocValidator2(ddoc,viewName){const view=ddoc.views[viewName];if(!view.map||!view.map.fields)throw new Error("ddoc "+ddoc._id+" with view "+viewName+" doesn't have map.fields defined. maybe it wasn't created by this plugin?")}));ddocIdPrefix=/^_design\//;SHORT_CIRCUIT_QUERY={queryOpts:{limit:0,startkey:COLLATE_HI={"￿":{}},endkey:COLLATE_LO=null},inMemoryFields:[]};logicalMatchers=["$eq","$gt","$gte","$lt","$lte"];(plugin2={}).createIndex=resolveToCallback((async function(requestDef){if("object"!=typeof requestDef)throw new Error("you must provide an index to create");return(isRemote(this)?createIndex:createIndex$1)(this,requestDef)}));plugin2.find=resolveToCallback((async function(requestDef){if("object"!=typeof requestDef)throw new Error("you must provide search parameters to find()");return(isRemote(this)?find:find$1)(this,requestDef)}));plugin2.explain=resolveToCallback((async function(requestDef){if("object"!=typeof requestDef)throw new Error("you must provide search parameters to explain()");return(isRemote(this)?explain:explain$1)(this,requestDef)}));plugin2.getIndexes=resolveToCallback((async function(){return(isRemote(this)?getIndexes:getIndexes$1)(this)}));plugin2.deleteIndex=resolveToCallback((async function(indexDef){if("object"!=typeof indexDef)throw new Error("you must provide an index to delete");return(isRemote(this)?deleteIndex:deleteIndex$1)(this,indexDef)}));index_browser_es_default3=plugin2;import_transform_pouch=__toESM(require_transform_pouch(),1);index_es_default.plugin(index_es_default2).plugin(index_es_default3).plugin(index_es_default4).plugin(index_browser_es_default2).plugin(index_es_default8).plugin(index_browser_es_default3).plugin(import_transform_pouch.default);index_es_default.prototype.purgeMulti=adapterFun("_purgeMulti",(function(docs,callback){if(void 0===this._purge)return callback(createError(UNKNOWN_ERROR,"Purge is not implemented in the "+this.adapter+" adapter."));const self3=this,tasks3=docs.map((param=>()=>new Promise(((res2,rej)=>{const[docId,rev$$1]=param;self3._getRevisionTree(docId,((error,revs)=>{if(error)return res2([param,error]);if(!revs)return res2([param,createError(MISSING_DOC)]);let path2;try{path2=findPathToLeaf(revs,rev$$1)}catch(error2){return res2([param,error2.message||error2])}self3._purge(docId,path2,((error2,result)=>res2(error2?[param,error2]:[param,result])))}))}))));(async()=>{const retAll=(await mapAllTasksWithConcurrencyLimit(1,tasks3)).map((e3=>unwrapTaskResult(e3)));await appendPurgeSeqs(self3,retAll.filter((e3=>"ok"in e3[1])).map((e3=>e3[0])));return Object.fromEntries(retAll.map((e3=>[e3[0][0],e3[1]])))})().then((result=>callback(void 0,result))).catch((error=>callback(error)))}));root_214=from_html('');on_click3=(_,setDefaultRelay)=>setDefaultRelay();root_34=from_html(' ',1);on_click_1=(__1,generateDefaultGroupId)=>generateDefaultGroupId();root_411=from_html(' ',1);root_66=from_html("The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and\n passphrase on all devices you want to synchronise.
Note that the Group ID is not limited to the generated format; you can use any string as the Group ID.",1);root_77=from_html('');root_87=from_html('');root_103=from_html('');root_153=from_html('');root_163=from_html('');root_124=from_html(" ",1);root_215=from_html(" ",1);root30=from_html(" ",1);delegate(["click"]);root_216=from_html(' ',1);root_35=from_html("Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote\n server. This means that even if someone gains access to the server, they won't be able to read your data without the\n passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices.
Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch\n to other methods and connect to a remote server in the future.",1);root_53=from_html('');root_94=from_html("");root_88=from_html("");root_78=from_html(" ",1);root_125=from_html("

Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process\n actually commences. This is a security measure designed to protect your data.

Therefore, we ask that you exercise extreme caution when configuring server information manually. If an\n incorrect passphrase is entered, the data on the server will become corrupted.

Please understand that this is intended behaviour.

",1);root_135=from_html(" ",1);root31=from_html(" ",1);import_qrcode_generator=__toESM(require_qrcode(),1);OutputFormat=(OutputFormat2=>{OutputFormat2[OutputFormat2.SVG=0]="SVG";OutputFormat2[OutputFormat2.ASCII=1]="ASCII";return OutputFormat2})(OutputFormat||{});necessaryErasureProperties=["configPassphraseStore","encryptedCouchDBConnection","encryptedPassphrase"];UserMode=(UserMode2=>{UserMode2.NewUser="new-user";UserMode2.ExistingUser="existing-user";UserMode2.Unknown="unknown";UserMode2.Update="unknown";return UserMode2})(UserMode||{});SetupManager=class extends AbstractObsidianModule{constructor(){super(...arguments);this.dialogManager=new SvelteDialogManager(this.plugin)}async startOnBoarding(){const isUserNewOrExisting=await this.dialogManager.openWithExplicitCancel(Intro);if("new-user"===isUserNewOrExisting)await this.onOnboard("new-user");else if("existing-user"===isUserNewOrExisting)await this.onOnboard("existing-user");else if("cancelled"===isUserNewOrExisting){this._log("Onboarding cancelled by user.",LOG_LEVEL_NOTICE);return!1}return!1}async onOnboard(userMode){const originalSetting="new-user"===userMode?DEFAULT_SETTINGS:this.core.settings;if("new-user"===userMode){const method=await this.dialogManager.openWithExplicitCancel(SelectMethodNewUser);if("use-setup-uri"===method)await this.onUseSetupURI(userMode);else if("configure-manually"===method)await this.onConfigureManually(originalSetting,userMode);else if("cancelled"===method){this._log("Onboarding cancelled by user.",LOG_LEVEL_NOTICE);return!1}}else if("existing-user"===userMode){const method=await this.dialogManager.openWithExplicitCancel(SelectMethodExisting);if("use-setup-uri"===method)await this.onUseSetupURI(userMode);else if("configure-manually"===method)await this.onConfigureManually(originalSetting,userMode);else if("scan-qr-code"===method)await this.onPromptQRCodeInstruction();else if("cancelled"===method){this._log("Onboarding cancelled by user.",LOG_LEVEL_NOTICE);return!1}}return!1}async onUseSetupURI(userMode,setupURI=""){const newSetting=await this.dialogManager.openWithExplicitCancel(UseSetupURI,setupURI);if("cancelled"===newSetting){this._log("Setup URI dialog cancelled.",LOG_LEVEL_NOTICE);return!1}this._log("Setup URI dialog closed.",LOG_LEVEL_VERBOSE);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode)}async onCouchDBManualSetup(userMode,currentSetting,activate=!0){const originalSetting=JSON.parse(JSON.stringify(currentSetting)),baseSetting=JSON.parse(JSON.stringify(originalSetting)),couchConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteCouchDB,originalSetting);if("cancelled"===couchConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const newSetting={...baseSetting,...couchConf};activate&&(newSetting.remoteType=REMOTE_COUCHDB);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode,activate)}async onBucketManualSetup(userMode,currentSetting,activate=!0){const bucketConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteBucket,currentSetting);if("cancelled"===bucketConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const newSetting={...currentSetting,...bucketConf};activate&&(newSetting.remoteType=REMOTE_MINIO);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode,activate)}async onP2PManualSetup(userMode,currentSetting,activate=!0){const p2pConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteP2P,currentSetting);if("cancelled"===p2pConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const newSetting={...currentSetting,...p2pConf};activate&&(newSetting.remoteType=REMOTE_P2P);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode,activate)}async onlyE2EEConfiguration(userMode,currentSetting){const e2eeConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteE2EE,currentSetting);if("cancelled"===e2eeConf){this._log("E2EE configuration cancelled.",LOG_LEVEL_NOTICE);return await!1}const newSetting={...currentSetting,...e2eeConf};return await this.onConfirmApplySettingsFromWizard(newSetting,userMode)}async onConfigureManually(originalSetting,userMode){const e2eeConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteE2EE,originalSetting);if("cancelled"===e2eeConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const currentSetting={...originalSetting,...e2eeConf};return await this.onSelectServer(currentSetting,userMode)}async onSelectServer(currentSetting,userMode){const method=await this.dialogManager.openWithExplicitCancel(SetupRemote);if("couchdb"===method)return await this.onCouchDBManualSetup(userMode,currentSetting,!0);if("bucket"===method)return await this.onBucketManualSetup(userMode,currentSetting,!0);if("p2p"===method)return await this.onP2PManualSetup(userMode,currentSetting,!0);if("cancelled"===method){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);if("unknown"!==userMode)return await this.onOnboard(userMode)}return!1}async onConfirmApplySettingsFromWizard(newConf,_userMode,activate=!0,extra=()=>{}){let userMode=_userMode;if("unknown"===userMode){if(!1===isObjectDifferent(this.settings,newConf,!0)){this._log("No changes in settings detected. Skipping applying settings from wizard.",LOG_LEVEL_NOTICE);return!0}const patch=generatePatchObj(this.settings,newConf);console.log("Changes:");console.dir(patch);if(!activate){extra();await this.applySetting(newConf,"existing-user");this._log("Setting Applied",LOG_LEVEL_NOTICE);return!0}if(!1===isObjectDifferent({...this.settings,P2P_DevicePeerName:""},{...newConf,P2P_DevicePeerName:""},!0)){extra();await this.applySetting(newConf,"existing-user");this._log("Settings from wizard applied.",LOG_LEVEL_NOTICE);return!0}{const userModeResult=await this.dialogManager.openWithExplicitCancel(OutroAskUserMode);if("new-user"===userModeResult)userMode="new-user";else if("existing-user"===userModeResult)userMode="existing-user";else{if("compatible-existing-user"===userModeResult){extra();await this.applySetting(newConf,"existing-user");this._log("Settings from wizard applied.",LOG_LEVEL_NOTICE);return!0}if("cancelled"===userModeResult){this._log("User cancelled applying settings from wizard.",LOG_LEVEL_NOTICE);return!1}}}}const component2="new-user"===userMode?OutroNewUser:OutroExistingUser,confirm=await this.dialogManager.openWithExplicitCancel(component2);if("cancelled"===confirm){this._log("User cancelled applying settings from wizard..",LOG_LEVEL_NOTICE);return!1}if(confirm){extra();await this.applySetting(newConf,userMode);"new-user"===userMode?await this.core.rebuilder.scheduleRebuild():await this.core.rebuilder.scheduleFetch()}return!1}async onPromptQRCodeInstruction(){const qrResult=await this.dialogManager.open(ScanQRCode);this._log("QR Code dialog closed.",LOG_LEVEL_VERBOSE);this._log(`QR Code result: ${qrResult}`,LOG_LEVEL_VERBOSE);return!1}async decodeQR(qr){const newSettings=decodeSettingsFromQRCodeData(qr);return await this.onConfirmApplySettingsFromWizard(newSettings,"unknown")}async applySetting(newConf,userMode){const newSetting={...this.core.settings,...newConf};this.core.settings=newSetting;this.services.setting.clearUsedPassphrase();await this.services.setting.saveSettingData();return!0}};ModuleMigration=class extends AbstractModule{async migrateUsingDoctor(skipRebuild=!1,activateReason="updated",forceRescan=!1){const{shouldRebuild,shouldRebuildLocal,isModified,settings}=await performDoctorConsultation(this.core,this.settings,{localRebuild:skipRebuild?RebuildOptions_SkipEvenIfRequired:RebuildOptions_AutomaticAcceptable,remoteRebuild:skipRebuild?RebuildOptions_SkipEvenIfRequired:RebuildOptions_AutomaticAcceptable,activateReason,forceRescan});if(isModified){this.settings=settings;await this.core.saveSettings()}if(!skipRebuild){if(shouldRebuild){await this.core.rebuilder.scheduleRebuild();this.services.appLifecycle.performRestart();return!1}if(shouldRebuildLocal){await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.performRestart();return!1}}return!0}async migrateDisableBulkSend(){if(this.settings.sendChunksBulk){this._log($msg("moduleMigration.logBulkSendCorrupted"),LOG_LEVEL_NOTICE);this.settings.sendChunksBulk=!1;this.settings.sendChunksBulkMaxSize=1;await this.saveSettings()}}async initialMessage(){const manager=this.core.getModule(SetupManager);return await manager.startOnBoarding()}async askAgainForSetupURI(){const message=$msg("moduleMigration.msgRecommendSetupUri",{URI_DOC:$msg("moduleMigration.docUri")}),USE_MINIMAL=$msg("moduleMigration.optionSetupWizard"),USE_P2P=$msg("moduleMigration.optionSetupViaP2P"),USE_SETUP=$msg("moduleMigration.optionManualSetup"),NEXT=$msg("moduleMigration.optionRemindNextLaunch"),ret=await this.core.confirm.askSelectStringDialogue(message,[USE_MINIMAL,USE_SETUP,USE_P2P,NEXT],{title:$msg("moduleMigration.titleRecommendSetupUri"),defaultAction:USE_MINIMAL});if(ret===USE_MINIMAL){eventHub.emitEvent("request-open-setting-wizard");return!1}if(ret===USE_P2P){eventHub.emitEvent("request-open-p2p");return!1}if(ret===USE_SETUP){eventHub.emitEvent("request-open-settings");return!1}return!1}async hasIncompleteDocs(force=!1){if(await this.core.kvDB.get("checkIncompleteDocs")&&!force){this._log("Incomplete docs check already done, skipping.",LOG_LEVEL_VERBOSE);return Promise.resolve(!0)}this._log("Checking for incomplete documents...",LOG_LEVEL_NOTICE,"check-incomplete");const errorFiles=[];for await(const metaDoc of this.localDatabase.findAllNormalDocs({conflicts:!0})){const path2=getPath2(metaDoc);if(!isValidPath(path2))continue;if(!await this.services.vault.isTargetFile(path2,!0))continue;if(!isMetaEntry(metaDoc))continue;const doc=await this.localDatabase.getDBEntryFromMeta(metaDoc);if(!doc||!isLoadedEntry(doc))continue;if(isDeletedEntry(doc))continue;const isConflicted=(null==metaDoc?void 0:metaDoc._conflicts)&&metaDoc._conflicts.length>0;let storageFileContent;try{storageFileContent=await this.core.storageAccess.readHiddenFileBinary(path2)}catch(e3){Logger(`Failed to read file ${path2}: Possibly unprocessed or missing`);Logger(e3,LOG_LEVEL_VERBOSE);continue}const sizeOnStorage=storageFileContent.byteLength,recordedSize=doc.size,actualSize=readAsBlob(doc).size;if(recordedSize!==actualSize||sizeOnStorage!==actualSize||sizeOnStorage!==recordedSize||isConflicted){const contentMatched=await isDocContentSame(doc.data,storageFileContent);errorFiles.push({path:path2,recordedSize,actualSize,storageSize:sizeOnStorage,contentMatched,isConflicted});Logger(`Size mismatch for ${path2}: ${recordedSize} (DB Recorded) , ${actualSize} (DB Stored) , ${sizeOnStorage} (Storage Stored), ${contentMatched?"Content Matched":"Content Mismatched"} ${isConflicted?"Conflicted":"Not Conflicted"}`)}}if(0==errorFiles.length){Logger("No size mismatches found",LOG_LEVEL_NOTICE);await this.core.kvDB.set("checkIncompleteDocs",!0);return Promise.resolve(!0)}Logger(`Found ${errorFiles.length} size mismatches`,LOG_LEVEL_NOTICE);const recoverable=errorFiles.filter((e3=>e3.recordedSize===e3.storageSize&&!e3.isConflicted)),unrecoverable=errorFiles.filter((e3=>e3.recordedSize!==e3.storageSize||e3.isConflicted)),fileInfo=e3=>`${e3.path} (M: ${e3.recordedSize}, A: ${e3.actualSize}, S: ${e3.storageSize}) ${e3.isConflicted?"(Conflicted)":""}`,messageUnrecoverable=unrecoverable.length>0?$msg("moduleMigration.fix0256.messageUnrecoverable",{filesNotRecoverable:unrecoverable.map((e3=>`- ${fileInfo(e3)}`)).join("\n")}):"",message=$msg("moduleMigration.fix0256.message",{files:recoverable.map((e3=>`- ${fileInfo(e3)}`)).join("\n"),messageUnrecoverable}),CHECK_IT_LATER=$msg("moduleMigration.fix0256.buttons.checkItLater"),FIX=$msg("moduleMigration.fix0256.buttons.fix"),DISMISS=$msg("moduleMigration.fix0256.buttons.DismissForever"),ret=await this.core.confirm.askSelectStringDialogue(message,[CHECK_IT_LATER,FIX,DISMISS],{title:$msg("moduleMigration.fix0256.title"),defaultAction:CHECK_IT_LATER});if(ret==FIX)for(const file of recoverable){const stubFile=this.core.storageAccess.getFileStub(file.path);if(null!=stubFile){stubFile.stat.mtime=Date.now();await this.core.fileHandler.storeFileToDB(stubFile,!0,!1)?Logger(`Successfully restored ${file.path} from storage`):Logger(`Failed to restore ${file.path} from storage`,LOG_LEVEL_NOTICE)}else Logger(`Could not find stub file for ${file.path}`,LOG_LEVEL_NOTICE)}else ret===DISMISS&&await this.core.kvDB.set("checkIncompleteDocs",!0);return Promise.resolve(!0)}async hasCompromisedChunks(){Logger("Checking for compromised chunks...",LOG_LEVEL_VERBOSE);if(!this.settings.encrypt)return!0;const localCompromised=await countCompromisedChunks(this.localDatabase.localDatabase),remote=this.services.replicator.getActiveReplicator(),remoteCompromised=this.core.managers.networkManager.isOnline?await(null==remote?void 0:remote.countCompromisedChunks()):0;if(!1===localCompromised){Logger("Failed to count compromised chunks in local database",LOG_LEVEL_NOTICE);return!1}if(!1===remoteCompromised){Logger("Failed to count compromised chunks in remote database",LOG_LEVEL_NOTICE);return!1}if(0===remoteCompromised&&0===localCompromised)return!0;Logger(`Found compromised chunks : ${localCompromised} in local, ${remoteCompromised} in remote`,LOG_LEVEL_NOTICE);const title=$msg("moduleMigration.insecureChunkExist.title"),msg=$msg("moduleMigration.insecureChunkExist.message"),REBUILD=$msg("moduleMigration.insecureChunkExist.buttons.rebuild"),FETCH=$msg("moduleMigration.insecureChunkExist.buttons.fetch"),DISMISS=$msg("moduleMigration.insecureChunkExist.buttons.later"),buttons=[REBUILD,FETCH,DISMISS];0!=remoteCompromised&&buttons.splice(buttons.indexOf(FETCH),1);const result=await this.core.confirm.askSelectStringDialogue(msg,buttons,{title,defaultAction:DISMISS,timeout:0});if(result===REBUILD){await this.core.rebuilder.scheduleRebuild();this.services.appLifecycle.performRestart();return!1}if(result===FETCH){await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.performRestart();return!1}this._log($msg("moduleMigration.insecureChunkExist.laterMessage"),LOG_LEVEL_NOTICE);return!0}async _everyOnFirstInitialize(){if(!this.localDatabase.isReady){this._log($msg("moduleMigration.logLocalDatabaseNotReady"),LOG_LEVEL_NOTICE);return!1}if(this.settings.isConfigured){if(!await this.hasCompromisedChunks())return!1;if(!await this.hasIncompleteDocs())return!1;if(!await this.migrateUsingDoctor(!1))return!1;await this.migrateDisableBulkSend()}if(!this.settings.isConfigured){if(!await this.initialMessage()){this._log($msg("moduleMigration.logSetupCancelled"),LOG_LEVEL_NOTICE);return!1}if(!await this.migrateUsingDoctor(!0))return!1}return!0}_everyOnLayoutReady(){eventHub.onEvent(EVENT_REQUEST_RUN_DOCTOR,(async reason=>{await this.migrateUsingDoctor(!1,reason,!0)}));eventHub.onEvent(EVENT_REQUEST_RUN_FIX_INCOMPLETE,(async()=>{await this.hasIncompleteDocs(!0)}));return Promise.resolve(!0)}onBindFunction(core,services){super.onBindFunction(core,services);services.appLifecycle.handleLayoutReady(this._everyOnLayoutReady.bind(this));services.appLifecycle.handleFirstInitialise(this._everyOnFirstInitialize.bind(this))}};ModuleCheckRemoteSize=class extends AbstractObsidianModule{checkRemoteSize(){this.settings.notifyThresholdOfRemoteStorageSize=1;return this._allScanStat()}async _allScanStat(){var _a8;if(!1===this.core.managers.networkManager.isOnline){this._log("Network is offline, skipping remote size check.",LOG_LEVEL_INFO);return!0}this._log($msg("moduleCheckRemoteSize.logCheckingStorageSizes"),LOG_LEVEL_VERBOSE);if(this.settings.notifyThresholdOfRemoteStorageSize<0){const message=$msg("moduleCheckRemoteSize.msgSetDBCapacity"),ANSWER_0=$msg("moduleCheckRemoteSize.optionNoWarn"),ANSWER_800=$msg("moduleCheckRemoteSize.option800MB"),ANSWER_2000=$msg("moduleCheckRemoteSize.option2GB"),ASK_ME_NEXT_TIME=$msg("moduleCheckRemoteSize.optionAskMeLater"),ret=await this.core.confirm.askSelectStringDialogue(message,[ANSWER_0,ANSWER_800,ANSWER_2000,ASK_ME_NEXT_TIME],{defaultAction:ASK_ME_NEXT_TIME,title:$msg("moduleCheckRemoteSize.titleDatabaseSizeNotify"),timeout:40});if(ret==ANSWER_0){this.settings.notifyThresholdOfRemoteStorageSize=0;await this.core.saveSettings()}else if(ret==ANSWER_800){this.settings.notifyThresholdOfRemoteStorageSize=800;await this.core.saveSettings()}else if(ret==ANSWER_2000){this.settings.notifyThresholdOfRemoteStorageSize=2e3;await this.core.saveSettings()}}if(this.settings.notifyThresholdOfRemoteStorageSize>0){const remoteStat=await(null==(_a8=this.core.replicator)?void 0:_a8.getRemoteStatus(this.settings));if(remoteStat){const estimatedSize=remoteStat.estimatedSize;if(estimatedSize){const maxSize=1024*this.settings.notifyThresholdOfRemoteStorageSize*1024;if(estimatedSize>maxSize){const message=$msg("moduleCheckRemoteSize.msgDatabaseGrowing",{estimatedSize:sizeToHumanReadable(estimatedSize),maxSize:sizeToHumanReadable(maxSize)}),ANSWER_ENLARGE_LIMIT=$msg("moduleCheckRemoteSize.optionIncreaseLimit",{newMax:(100+~~(estimatedSize/1024/1024)).toString()}),ANSWER_REBUILD=$msg("moduleCheckRemoteSize.optionRebuildAll"),ANSWER_IGNORE=$msg("moduleCheckRemoteSize.optionDismiss"),ret=await this.core.confirm.askSelectStringDialogue(message,[ANSWER_ENLARGE_LIMIT,ANSWER_REBUILD,ANSWER_IGNORE],{defaultAction:ANSWER_IGNORE,title:$msg("moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded"),timeout:60});if(ret==ANSWER_REBUILD){if("yes"==await this.core.confirm.askYesNoDialog($msg("moduleCheckRemoteSize.msgConfirmRebuild"),{defaultOption:"No"})){this.core.settings.notifyThresholdOfRemoteStorageSize=-1;await this.saveSettings();await this.core.rebuilder.scheduleRebuild()}}else if(ret==ANSWER_ENLARGE_LIMIT){this.settings.notifyThresholdOfRemoteStorageSize=100+~~(estimatedSize/1024/1024);this._log($msg("moduleCheckRemoteSize.logThresholdEnlarged",{size:this.settings.notifyThresholdOfRemoteStorageSize.toString()}),LOG_LEVEL_NOTICE);await this.core.saveSettings()}this._log($msg("moduleCheckRemoteSize.logExceededWarning",{measuredSize:sizeToHumanReadable(estimatedSize),notifySize:sizeToHumanReadable(1024*this.settings.notifyThresholdOfRemoteStorageSize*1024)}),LOG_LEVEL_INFO)}else this._log($msg("moduleCheckRemoteSize.logCurrentStorageSize",{measuredSize:sizeToHumanReadable(estimatedSize)}),LOG_LEVEL_INFO)}}}return!0}_everyOnloadStart(){this.addCommand({id:"livesync-reset-remote-size-threshold-and-check",name:"Reset notification threshold and check the remote database usage",callback:async()=>{await this.checkRemoteSize()}});eventHub.onEvent(EVENT_REQUEST_CHECK_REMOTE_SIZE,(()=>this.checkRemoteSize()));return Promise.resolve(!0)}onBindFunction(core,services){services.appLifecycle.handleOnScanningStartupIssues(this._allScanStat.bind(this));services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this))}};import_diff_match_patch3=__toESM(require_diff_match_patch(),1);ModuleConflictResolver=class extends AbstractModule{async _resolveConflictByDeletingRev(path2,deleteRevision,subTitle=""){const title=`Resolving ${subTitle?`[${subTitle}]`:""}:`;if(!await this.core.fileHandler.deleteRevisionFromDB(path2,deleteRevision)){this._log(`${title} Could not delete conflicted revision ${displayRev(deleteRevision)} of ${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}eventHub.emitEvent("conflict-cancelled",path2);this._log(`${title} Conflicted revision has been deleted ${displayRev(deleteRevision)} ${path2}`,LOG_LEVEL_INFO);if(0!=(await this.core.databaseFileAccess.getConflictedRevs(path2)).length){this._log(`${title} some conflicts are left in ${path2}`,LOG_LEVEL_INFO);return AUTO_MERGED}if(isPluginMetadata(path2)||isCustomisationSyncMetadata(path2)){this._log(`${title} ${path2} is a plugin metadata file, no need to write to storage`,LOG_LEVEL_INFO);return AUTO_MERGED}if(!await this.core.fileHandler.dbToStorage(path2,stripAllPrefixes(path2),!0)){this._log(`Could not write the resolved content to the storage: ${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}const level=-1!==subTitle.indexOf("same")?LOG_LEVEL_INFO:LOG_LEVEL_NOTICE;this._log(`${path2} has been merged automatically`,level);return AUTO_MERGED}async checkConflictAndPerformAutoMerge(path2){const ret=await this.localDatabase.tryAutoMerge(path2,!this.settings.disableMarkdownAutoMerge);if("ok"in ret)return ret.ok;if("result"in ret){const p4=ret.result;if(!await this.core.databaseFileAccess.storeContent(path2,p4)){this._log(`Merged content cannot be stored:${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}return await this.services.conflict.resolveByDeletingRevision(path2,ret.conflictedRev,"Sensible")}const{rightRev,leftLeaf,rightLeaf}=ret;if(0==leftLeaf){this._log(`could not get current revisions:${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}if(0==rightLeaf)return await this.services.conflict.resolveByDeletingRevision(path2,rightRev,"MISSING OLD REV");const isSame=leftLeaf.data==rightLeaf.data&&leftLeaf.deleted==rightLeaf.deleted,isBinary=!isPlainText(path2),alwaysNewer=this.settings.resolveConflictsByNewerFile;if(isSame||isBinary||alwaysNewer){let loser=leftLeaf;compareMTime(leftLeaf.mtime,rightLeaf.mtime)!=TARGET_IS_NEW&&(loser=rightLeaf);const subTitle=[isSame?"same":"",isBinary?"binary":"",alwaysNewer?"alwaysNewer":""].filter((e3=>e3.trim())).join(",");return await this.services.conflict.resolveByDeletingRevision(path2,loser.rev,subTitle)}const dmp=new import_diff_match_patch3.default,diff=dmp.diff_main(leftLeaf.data,rightLeaf.data);dmp.diff_cleanupSemantic(diff);this._log(`conflict(s) found:${path2}`);return{left:leftLeaf,right:rightLeaf,diff}}async _resolveConflict(filename){return await serialized(`conflict-resolve:${filename}`,(async()=>{const conflictCheckResult=await this.checkConflictAndPerformAutoMerge(filename);if(conflictCheckResult!==MISSING_OR_ERROR&&conflictCheckResult!==NOT_CONFLICTED&&conflictCheckResult!==CANCELLED)if(conflictCheckResult!==AUTO_MERGED){if(this.settings.showMergeDialogOnlyOnActive){const af2=this.services.vault.getActiveFilePath();if(af2&&af2!=filename){this._log(`[conflict] ${filename} is conflicted. Merging process has been postponed to the file have got opened.`,LOG_LEVEL_NOTICE);return}}this._log("[conflict] Manual merge required!");eventHub.emitEvent("conflict-cancelled",filename);await this.services.conflict.resolveByUserInteraction(filename,conflictCheckResult)}else{this.settings.syncAfterMerge&&!this.services.appLifecycle.isSuspended()&&await this.services.replication.replicateByEvent();this._log("[conflict] Automatically merged, but we have to check it again");await this.services.conflict.queueCheckFor(filename)}else this._log(`[conflict] Not conflicted or cancelled: ${filename}`,LOG_LEVEL_VERBOSE)}))}async _anyResolveConflictByNewest(filename){const currentRev=await this.core.databaseFileAccess.fetchEntryMeta(filename,void 0,!0);if(0==currentRev){this._log(`Could not get current revision of ${filename}`);return Promise.resolve(!1)}const revs=await this.core.databaseFileAccess.getConflictedRevs(filename);if(0==revs.length)return Promise.resolve(!0);const mTimeAndRev=[[currentRev.mtime,currentRev._rev],...await Promise.all(revs.map((async rev3=>{const leaf=await this.core.databaseFileAccess.fetchEntryMeta(filename,rev3);return 0==leaf?[0,rev3]:[leaf.mtime,rev3]})))].sort(((a2,b3)=>{const diff=b3[0]-a2[0];return 0==diff?a2[1].localeCompare(b3[1],"en",{numeric:!0}):diff}));this._log(`Resolving conflict by newest: ${filename} (Newest: ${new Date(mTimeAndRev[0][0]).toLocaleString()}) (${mTimeAndRev.length} revisions exists)`);for(let i2=1;i2{await this.pickFileForResolve()}});this.addCommand({id:"livesync-all-conflictcheck",name:"Resolve all conflicted files",callback:async()=>{await this.allConflictCheck()}});return Promise.resolve(!0)}async _anyResolveConflictByUI(filename,conflictCheckResult){return await serialized("conflict-resolve-ui",(async()=>{this._log("Merge:open conflict dialog",LOG_LEVEL_VERBOSE);const dialog=new ConflictResolveModal(this.app,filename,conflictCheckResult);dialog.open();const selected=await dialog.waitForResult();if(selected===CANCELLED){this._log(`Merge: Cancelled ${filename}`,LOG_LEVEL_INFO);return!1}const testDoc=await this.localDatabase.getDBEntry(filename,{conflicts:!0},!1,!0,!0);if(!1===testDoc){this._log(`Merge: Could not read ${filename} from the local database`,LOG_LEVEL_VERBOSE);return!1}if(!testDoc._conflicts){this._log(`Merge: Nothing to do ${filename}`,LOG_LEVEL_VERBOSE);return!1}const toDelete=selected;if(toDelete===LEAVE_TO_SUBSEQUENT){const p4=conflictCheckResult.diff.map((e3=>e3[1])).join(""),delRev=testDoc._conflicts[0];if(!await this.core.databaseFileAccess.storeContent(filename,p4)){this._log(`Concatenated content cannot be stored:${filename}`,LOG_LEVEL_NOTICE);return!1}if(await this.services.conflict.resolveByDeletingRevision(filename,delRev,"UI Concatenated")==MISSING_OR_ERROR){this._log(`Concatenated saved, but cannot delete conflicted revisions: ${filename}, (${displayRev(delRev)})`,LOG_LEVEL_NOTICE);return!1}}else{if("string"!=typeof toDelete){this._log(`Merge: Something went wrong: ${filename}, (${toDelete})`,LOG_LEVEL_NOTICE);return!1}if(await this.services.conflict.resolveByDeletingRevision(filename,toDelete,"UI Selected")==MISSING_OR_ERROR){this._log(`Merge: Something went wrong: ${filename}, (${toDelete})`,LOG_LEVEL_NOTICE);return!1}}this.settings.syncAfterMerge&&!this.services.appLifecycle.isSuspended()&&await this.services.replication.replicateByEvent();await this.services.conflict.queueCheckFor(filename);return!1}))}async allConflictCheck(){for(;await this.pickFileForResolve(););}async pickFileForResolve(){const notes=[];for await(const doc of this.localDatabase.findAllDocs({conflicts:!0}))"_conflicts"in doc&¬es.push({id:doc._id,path:getPath2(doc),dispPath:getPathWithoutPrefix2(doc),mtime:doc.mtime});notes.sort(((a2,b3)=>b3.mtime-a2.mtime));const notesList=notes.map((e3=>e3.dispPath));if(0==notesList.length){this._log("There are no conflicted documents",LOG_LEVEL_NOTICE);return!1}const target=await this.core.confirm.askSelectString("File to resolve conflict",notesList);if(target){const targetItem=notes.find((e3=>e3.dispPath==target));await this.services.conflict.queueCheckFor(targetItem.path);await this.services.conflict.ensureAllProcessed();return!0}return!1}async _allScanStat(){const notes=[];this._log("Checking conflicted files",LOG_LEVEL_VERBOSE);try{for await(const doc of this.localDatabase.findAllDocs({conflicts:!0}))"_conflicts"in doc&¬es.push({path:getPath2(doc),mtime:doc.mtime});if(notes.length>0){this.core.confirm.askInPopup("conflicting-detected-on-safety",'Some files have been left conflicted! Press {HERE} to resolve them, or you can do it later by "Pick a file to resolve conflict',(anchor=>{anchor.text="HERE";anchor.addEventListener("click",(()=>{fireAndForget((()=>this.allConflictCheck()))}))}));this._log('Some files have been left conflicted! Please resolve them by "Pick a file to resolve conflict". The list is written in the log.',LOG_LEVEL_VERBOSE);for(const note of notes)this._log(`Conflicted: ${note.path}`)}else this._log("There are no conflicting files",LOG_LEVEL_VERBOSE)}catch(e3){this._log(`Error while scanning conflicted files: ${e3}`,LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}return!0}onBindFunction(core,services){services.appLifecycle.handleOnScanningStartupIssues(this._allScanStat.bind(this));services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this));services.conflict.handleResolveByUserInteraction(this._anyResolveConflictByUI.bind(this))}};ModuleObsidianSettings=class extends AbstractObsidianModule{constructor(){super(...arguments);this.usedPassphrase=""}async _everyOnLayoutReady(){let isChanged=!1;if(""==this.settings.displayLanguage){const obsidianLanguage=(0,import_obsidian.getLanguage)();if(-1!==SUPPORTED_I18N_LANGS.indexOf(obsidianLanguage)&&obsidianLanguage!=this.settings.displayLanguage){this.settings.displayLanguage=obsidianLanguage;isChanged=!0;setLang(this.settings.displayLanguage)}else if(""==this.settings.displayLanguage){this.settings.displayLanguage="def";setLang(this.settings.displayLanguage);await this.services.setting.saveSettingData()}}if(isChanged){const revert2=$msg("dialog.yourLanguageAvailable.btnRevertToDefault");if(await this.core.confirm.askSelectStringDialogue($msg("dialog.yourLanguageAvailable"),["OK",revert2],{defaultAction:"OK",title:$msg("dialog.yourLanguageAvailable.Title")})==revert2){this.settings.displayLanguage="def";setLang(this.settings.displayLanguage)}await this.services.setting.saveSettingData()}return!0}getPassphrase(settings){const methods={"":()=>Promise.resolve("*"),LOCALSTORAGE:()=>{var _a8;return Promise.resolve(null!=(_a8=localStorage.getItem("ls-setting-passphrase"))&&_a8)},ASK_AT_LAUNCH:()=>this.core.confirm.askString("Passphrase","passphrase","")},method=settings.configPassphraseStore;return(method in methods?methods[method]:methods[""])()}_saveDeviceAndVaultName(){const lsKey="obsidian-live-sync-vaultanddevicename-"+this.services.vault.getVaultName();localStorage.setItem(lsKey,this.services.setting.getDeviceAndVaultName()||"")}_clearUsedPassphrase(){this.usedPassphrase=""}async decryptConfigurationItem(encrypted,passphrase){const dec=await decryptString(encrypted,passphrase+"rHGMPtr6oWw7VSa3W3wpa8fT8U");if(dec){this.usedPassphrase=passphrase;return dec}return!1}async encryptConfigurationItem(src,settings){if(""!=this.usedPassphrase)return await encryptString(src,this.usedPassphrase+"rHGMPtr6oWw7VSa3W3wpa8fT8U");const passphrase=await this.getPassphrase(settings);if(!1===passphrase){this._log("Failed to obtain passphrase when saving data.json! Please verify the configuration.",128);return""}const dec=await encryptString(src,passphrase+"rHGMPtr6oWw7VSa3W3wpa8fT8U");if(dec){this.usedPassphrase=passphrase;return dec}return""}get appId(){return`${"appId"in this.app?this.app.appId:""}`}async _saveSettingData(){this.services.setting.saveDeviceAndVaultName();const settings={...this.settings};settings.deviceAndVaultName="";if(settings.P2P_DevicePeerName&&""!==settings.P2P_DevicePeerName.trim()){console.log("Saving device peer name to small config");this.services.config.setSmallConfig(SETTING_KEY_P2P_DEVICE_NAME,settings.P2P_DevicePeerName.trim());settings.P2P_DevicePeerName=""}if(""!=this.usedPassphrase||await this.getPassphrase(settings)){if(""!=settings.couchDB_PASSWORD||""!=settings.couchDB_URI||""!=settings.couchDB_USER||settings.couchDB_DBNAME){const connectionSetting={couchDB_DBNAME:settings.couchDB_DBNAME,couchDB_PASSWORD:settings.couchDB_PASSWORD,couchDB_URI:settings.couchDB_URI,couchDB_USER:settings.couchDB_USER,accessKey:settings.accessKey,bucket:settings.bucket,endpoint:settings.endpoint,region:settings.region,secretKey:settings.secretKey,useCustomRequestHandler:settings.useCustomRequestHandler,bucketCustomHeaders:settings.bucketCustomHeaders,couchDB_CustomHeaders:settings.couchDB_CustomHeaders,useJWT:settings.useJWT,jwtKey:settings.jwtKey,jwtAlgorithm:settings.jwtAlgorithm,jwtKid:settings.jwtKid,jwtExpDuration:settings.jwtExpDuration,jwtSub:settings.jwtSub,useRequestAPI:settings.useRequestAPI,bucketPrefix:settings.bucketPrefix,forcePathStyle:settings.forcePathStyle};settings.encryptedCouchDBConnection=await this.encryptConfigurationItem(JSON.stringify(connectionSetting),settings);settings.couchDB_PASSWORD="";settings.couchDB_DBNAME="";settings.couchDB_URI="";settings.couchDB_USER="";settings.accessKey="";settings.bucket="";settings.region="";settings.secretKey="";settings.endpoint=""}if(settings.encrypt&&""!=settings.passphrase){settings.encryptedPassphrase=await this.encryptConfigurationItem(settings.passphrase,settings);settings.passphrase=""}}else this._log("Failed to retrieve passphrase. data.json contains unencrypted items!",LOG_LEVEL_NOTICE);await this.core.saveData(settings);eventHub.emitEvent(EVENT_SETTING_SAVED,settings)}tryDecodeJson(encoded){try{return!!encoded&&JSON.parse(encoded)}catch(e3){return!1}}async _decryptSettings(settings){const passphrase=await this.getPassphrase(settings);if(!1===passphrase)this._log("No passphrase found for data.json! Verify configuration before syncing.",128);else{if(settings.encryptedCouchDBConnection){const keys3=["couchDB_URI","couchDB_USER","couchDB_PASSWORD","couchDB_DBNAME","accessKey","bucket","endpoint","region","secretKey"],decrypted=this.tryDecodeJson(await this.decryptConfigurationItem(settings.encryptedCouchDBConnection,passphrase));if(decrypted)for(const key3 of keys3)key3 in decrypted&&(settings[key3]=decrypted[key3]);else{this._log("Failed to decrypt passphrase from data.json! Ensure configuration is correct before syncing with remote.",128);for(const key3 of keys3)settings[key3]=""}}if(settings.encrypt&&settings.encryptedPassphrase){const encrypted=settings.encryptedPassphrase,decrypted=await this.decryptConfigurationItem(encrypted,passphrase);if(decrypted)settings.passphrase=decrypted;else{this._log("Failed to decrypt passphrase from data.json! Ensure configuration is correct before syncing with remote.",128);settings.passphrase=""}}}return settings}_adjustSettings(settings){settings.disableRequestURI=!0;settings.gcDelay=0;settings.useHistory=!0;"workingEncrypt"in settings&&delete settings.workingEncrypt;"workingPassphrase"in settings&&delete settings.workingPassphrase;""==settings.chunkSplitterVersion?settings.enableChunkSplitterV2?settings.useSegmenter?settings.chunkSplitterVersion="v2-segmenter":settings.chunkSplitterVersion="v2":settings.chunkSplitterVersion="":settings.chunkSplitterVersion in ChunkAlgorithmNames||(settings.chunkSplitterVersion="");return Promise.resolve(settings)}async _loadSettings(){const settings=Object.assign({},DEFAULT_SETTINGS,await this.core.loadData());if(void 0===settings.isConfigured)if(JSON.stringify(settings)!==JSON.stringify(DEFAULT_SETTINGS))settings.isConfigured=!0;else{settings.additionalSuffixOfDatabaseName=this.appId;settings.isConfigured=!1}this.settings=await this.services.setting.decryptSettings(settings);setLang(this.settings.displayLanguage);await this.services.setting.adjustSettings(this.settings);const lsKey="obsidian-live-sync-vaultanddevicename-"+this.services.vault.getVaultName();if(""!=this.settings.deviceAndVaultName&&!localStorage.getItem(lsKey)){this.services.setting.setDeviceAndVaultName(this.settings.deviceAndVaultName);this.services.setting.saveDeviceAndVaultName();this.settings.deviceAndVaultName=""}if(isCloudantURI(this.settings.couchDB_URI)&&0!=this.settings.customChunkSize){this._log("Configuration issues detected and automatically resolved. However, unsynchronized data may exist. Consider rebuilding if necessary.",LOG_LEVEL_NOTICE);this.settings.customChunkSize=0}this.services.setting.setDeviceAndVaultName(localStorage.getItem(lsKey)||"");if(""==this.services.setting.getDeviceAndVaultName()&&this.settings.usePluginSync){this._log("Device name missing. Disabling plug-in sync.",LOG_LEVEL_NOTICE);this.settings.usePluginSync=!1}eventHub.emitEvent("reload-setting-tab")}_currentSettings(){return this.settings}onBindFunction(core,services){super.onBindFunction(core,services);services.appLifecycle.handleLayoutReady(this._everyOnLayoutReady.bind(this));services.setting.handleClearUsedPassphrase(this._clearUsedPassphrase.bind(this));services.setting.handleDecryptSettings(this._decryptSettings.bind(this));services.setting.handleAdjustSettings(this._adjustSettings.bind(this));services.setting.handleLoadSettings(this._loadSettings.bind(this));services.setting.handleCurrentSettings(this._currentSettings.bind(this));services.setting.handleSaveDeviceAndVaultName(this._saveDeviceAndVaultName.bind(this));services.setting.handleSaveSettingData(this._saveSettingData.bind(this))}};root_217=from_html("If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's\n versions after the reset. This may result in a large number of file conflicts.
Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are,\n and you will need to resolve them locally.",1);root_412=from_html("To minimise the creation of new conflicts, please select the option that best describes the\n current state of your Vault. The application will then check your files in the most appropriate way based on\n your selection.",1);root_89=from_html("(e.g., after editing many files whilst offline) ",1);root_54=from_html(" ",1);root_36=from_html(" ",1);root_154=from_html("It is strongly advised to create a backup before proceeding. Continuing without a backup may lead\n to data loss.
If you understand the risks and still wish to proceed, select so.",1);root_136=from_html(" ",1);root_104=from_html(" ",1);root_184=from_html(" ",1);root32=from_html("

",1);root_121=from_html("This procedure will first delete all existing synchronisation data from the server. Following this, the server data\n will be completely rebuilt, using the current state of your Vault on this device (including its local database) as the single, authoritative master copy.",1);root_413=from_html(" ",1);root_37=from_html(" ",1);root_144=from_html("You should create a new synchronisation destination and rebuild your data there.
After that,\n synchronise to a brand new vault on each other device with the new remote one by one.
");root_126=from_html(" ",1);root_95=from_html(" ",1);root_172=from_html(" ",1);root33=from_html("
",1);ModuleRedFlag=class extends AbstractModule{constructor(){super(...arguments);this.isSuspendFlagActive=async()=>await this.isFlagFileExist("redflag.md");this.isRebuildFlagActive=async()=>await this.isFlagFileExist("redflag2.md")||await this.isFlagFileExist(FlagFilesHumanReadable_REBUILD_ALL);this.isFetchAllFlagActive=async()=>await this.isFlagFileExist("redflag3.md")||await this.isFlagFileExist(FlagFilesHumanReadable_FETCH_ALL);this.dialogManager=new SvelteDialogManager(this.core)}async isFlagFileExist(path2){return!!await this.core.storageAccess.isExists(normalizePath(path2))}async deleteFlagFile(path2){try{await this.core.storageAccess.isExists(normalizePath(path2))&&await this.core.storageAccess.delete(path2,!0)}catch(ex){this._log(`Could not delete ${path2}`);this._log(ex,LOG_LEVEL_VERBOSE)}}async cleanupRebuildFlag(){await this.deleteFlagFile("redflag2.md");await this.deleteFlagFile(FlagFilesHumanReadable_REBUILD_ALL)}async cleanupFetchAllFlag(){await this.deleteFlagFile("redflag3.md");await this.deleteFlagFile(FlagFilesHumanReadable_FETCH_ALL)}async adjustSettingToRemoteIfNeeded(extra,config){if(!extra||!extra.preventFetchingConfig){await this.adjustSettingToRemote(config)?config=this.core.settings:this._log("Remote configuration not applied.",LOG_LEVEL_NOTICE);console.debug(config)}}async adjustSettingToRemote(config){let canProceed=!1;do{const remoteTweaks=await this.services.tweakValue.fetchRemotePreferred(config);if(remoteTweaks){const necessary=extractObject(TweakValuesShouldMatchedTemplate,remoteTweaks),differentItems=Object.entries(necessary).filter((([key3,value])=>config[key3]!==value));0===differentItems.length?this._log("Remote configuration matches local configuration. No changes applied.",LOG_LEVEL_NOTICE):await this.core.confirm.askSelectStringDialogue("Your settings differed slightly from the server's. The plug-in has supplemented the incompatible parts with the server settings!",["OK"],{defaultAction:"OK",timeout:0});config={...config,...Object.fromEntries(differentItems)};this.core.settings=config;await this.core.services.setting.saveSettingData();this._log("Remote configuration applied.",LOG_LEVEL_NOTICE);canProceed=!0;return this.core.settings}"Skip and proceed"===await this.core.confirm.askSelectStringDialogue("Could not fetch configuration from remote. If you are new to the Self-hosted LiveSync, this might be expected. If not, you should check your network or server settings.",["Skip and proceed","Retry (recommended)"],{defaultAction:"Retry (recommended)",timeout:0,title:"Fetch Remote Configuration Failed"})&&(canProceed=!0)}while(!canProceed)}async processVaultInitialisation(proc,keepSuspending=!1){try{this.settings.batchSave=!1;await this.services.setting.suspendAllSync();await this.services.setting.suspendExtraSync();this.settings.suspendFileWatching=!0;await this.saveSettings();try{return await proc()}catch(ex){this._log("Error during vault initialisation process.",LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}catch(ex){this._log("Error during vault initialisation.",LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return!1}finally{if(!keepSuspending){this.settings.suspendFileWatching=!1;await this.saveSettings()}}}async onRebuildEverythingScheduled(){const method=await this.dialogManager.openWithExplicitCancel(RebuildEverything);if("cancelled"===method){this._log("Rebuild everything cancelled by user.",LOG_LEVEL_NOTICE);await this.cleanupRebuildFlag();this.services.appLifecycle.performRestart();return!1}const{extra}=method;await this.adjustSettingToRemoteIfNeeded(extra,this.settings);return await this.processVaultInitialisation((async()=>{await this.core.rebuilder.$rebuildEverything();await this.cleanupRebuildFlag();this._log("Rebuild everything operation completed.",LOG_LEVEL_NOTICE);return!0}))}async onFetchAllScheduled(){const method=await this.dialogManager.openWithExplicitCancel(FetchEverything);if("cancelled"===method){this._log("Fetch everything cancelled by user.",LOG_LEVEL_NOTICE);await this.cleanupFetchAllFlag();this.services.appLifecycle.performRestart();return!1}const{vault,extra}=method,mapVaultStateToAction={identical:{makeLocalChunkBeforeSync:this.settings.remoteType!==REMOTE_MINIO,makeLocalFilesBeforeSync:!1},independent:{makeLocalChunkBeforeSync:!1,makeLocalFilesBeforeSync:!1},unbalanced:{makeLocalChunkBeforeSync:!1,makeLocalFilesBeforeSync:!0},cancelled:{makeLocalChunkBeforeSync:!1,makeLocalFilesBeforeSync:!1}};return await this.processVaultInitialisation((async()=>{await this.adjustSettingToRemoteIfNeeded(extra,this.settings);const{makeLocalChunkBeforeSync,makeLocalFilesBeforeSync}=mapVaultStateToAction[vault];this._log(`Fetching everything with settings: makeLocalChunkBeforeSync=${makeLocalChunkBeforeSync}, makeLocalFilesBeforeSync=${makeLocalFilesBeforeSync}`,LOG_LEVEL_INFO);await this.core.rebuilder.$fetchLocal(makeLocalChunkBeforeSync,!makeLocalFilesBeforeSync);await this.cleanupFetchAllFlag();this._log("Fetch everything operation completed. Vault files will be gradually synced.",LOG_LEVEL_NOTICE);return!0}))}async onSuspendAllScheduled(){this._log("SCRAM is detected. All operations are suspended.",LOG_LEVEL_NOTICE);return await this.processVaultInitialisation((async()=>{this._log("All operations are suspended as per SCRAM.\nLogs will be written to the file. This might be a performance impact.",LOG_LEVEL_NOTICE);this.settings.writeLogToTheFile=!0;await this.core.services.setting.saveSettingData();return Promise.resolve(!1)}),!0)}async verifyAndUnlockSuspension(){if(!this.settings.suspendFileWatching)return!0;if("yes"!=await this.core.confirm.askYesNoDialog("Do you want to resume file and database processing, and restart obsidian now?",{defaultOption:"Yes",timeout:15}))return!0;this.settings.suspendFileWatching=!1;await this.saveSettings();this.services.appLifecycle.performRestart();return!1}async processFlagFilesOnStartup(){const isFlagSuspensionActive=await this.isSuspendFlagActive(),isFlagRebuildActive=await this.isRebuildFlagActive();return await this.isFetchAllFlagActive()?!!await this.onFetchAllScheduled()&&await this.verifyAndUnlockSuspension():isFlagRebuildActive?!!await this.onRebuildEverythingScheduled()&&await this.verifyAndUnlockSuspension():!isFlagSuspensionActive||await this.onSuspendAllScheduled()}async _everyOnLayoutReady(){try{return await this.processFlagFilesOnStartup()}catch(ex){this._log("Something went wrong on FlagFile Handling",LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}return!0}onBindFunction(core,services){super.onBindFunction(core,services);services.appLifecycle.handleLayoutReady(this._everyOnLayoutReady.bind(this))}};ModuleObsidianMenu=class extends AbstractObsidianModule{_everyOnloadStart(){(0,import_obsidian.addIcon)("replicate",'\n \n \n \n \n ');this.addRibbonIcon("replicate",$msg("moduleObsidianMenu.replicate"),(async()=>{await this.services.replication.replicate(!0)})).addClass("livesync-ribbon-replicate");this.addCommand({id:"livesync-replicate",name:"Replicate now",callback:async()=>{await this.services.replication.replicate()}});this.addCommand({id:"livesync-dump",name:"Dump information of this doc ",callback:()=>{const file=this.services.vault.getActiveFilePath();file&&fireAndForget((()=>this.localDatabase.getDBEntry(file,{},!0,!1)))}});this.addCommand({id:"livesync-checkdoc-conflicted",name:"Resolve if conflicted.",editorCallback:(editor,view)=>{const file=view.file;file&&this.services.conflict.queueCheckForIfOpen(file.path)}});this.addCommand({id:"livesync-toggle",name:"Toggle LiveSync",callback:async()=>{if(this.settings.liveSync){this.settings.liveSync=!1;this._log("LiveSync Disabled.",LOG_LEVEL_NOTICE)}else{this.settings.liveSync=!0;this._log("LiveSync Enabled.",LOG_LEVEL_NOTICE)}await this.services.setting.realiseSetting();await this.services.setting.saveSettingData()}});this.addCommand({id:"livesync-suspendall",name:"Toggle All Sync.",callback:async()=>{if(this.services.appLifecycle.isSuspended()){this.services.appLifecycle.setSuspended(!1);this._log("Self-hosted LiveSync resumed",LOG_LEVEL_NOTICE)}else{this.services.appLifecycle.setSuspended(!0);this._log("Self-hosted LiveSync suspended",LOG_LEVEL_NOTICE)}await this.services.setting.realiseSetting();await this.services.setting.saveSettingData()}});this.addCommand({id:"livesync-scan-files",name:"Scan storage and database again",callback:async()=>{await this.services.vault.scanVault(!0)}});this.addCommand({id:"livesync-runbatch",name:"Run pended batch processes",callback:async()=>{await this.services.fileProcessing.commitPendingFileEvents()}});this.addCommand({id:"livesync-abortsync",name:"Abort synchronization immediately",callback:()=>{this.core.replicator.terminateSync()}});return Promise.resolve(!0)}__onWorkspaceReady(){this.services.appLifecycle.onReady()}_everyOnload(){this.app.workspace.onLayoutReady(this.__onWorkspaceReady.bind(this));return Promise.resolve(!0)}async _showView(viewType){const leaves=this.app.workspace.getLeavesOfType(viewType);0==leaves.length?await this.app.workspace.getLeaf(!0).setViewState({type:viewType,active:!0}):await leaves[0].setViewState({type:viewType,active:!0});leaves.length>0&&await this.app.workspace.revealLeaf(leaves[0])}onBindFunction(core,services){services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this));services.appLifecycle.handleOnLoaded(this._everyOnload.bind(this));services.API.handleShowWindow(this._showView.bind(this))}};ModuleSetupObsidian=class extends AbstractObsidianModule{_everyOnload(){this._setupManager=this.plugin.getModule(SetupManager);this.registerObsidianProtocolHandler("setuplivesync",(async conf=>{conf.settings?await this._setupManager.onUseSetupURI("unknown",`${configURIBase}${encodeURIComponent(conf.settings)}`):conf.settingsQR&&await this._setupManager.decodeQR(conf.settingsQR)}));this.addCommand({id:"livesync-setting-qr",name:"Show settings as a QR code",callback:()=>fireAndForget(this.encodeQR())});this.addCommand({id:"livesync-copysetupuri",name:"Copy settings as a new setup URI",callback:()=>fireAndForget(this.command_copySetupURI())});this.addCommand({id:"livesync-copysetupuri-short",name:"Copy settings as a new setup URI (With customization sync)",callback:()=>fireAndForget(this.command_copySetupURIWithSync())});this.addCommand({id:"livesync-copysetupurifull",name:"Copy settings as a new setup URI (Full)",callback:()=>fireAndForget(this.command_copySetupURIFull())});this.addCommand({id:"livesync-opensetupuri",name:"Use the copied setup URI (Formerly Open setup URI)",callback:()=>fireAndForget(this.command_openSetupURI())});eventHub.onEvent(EVENT_REQUEST_OPEN_SETUP_URI2,(()=>fireAndForget((()=>this.command_openSetupURI()))));eventHub.onEvent(EVENT_REQUEST_COPY_SETUP_URI2,(()=>fireAndForget((()=>this.command_copySetupURI()))));eventHub.onEvent(EVENT_REQUEST_SHOW_SETUP_QR,(()=>fireAndForget((()=>this.encodeQR()))));eventHub.onEvent("request-open-p2p-settings",(()=>fireAndForget((()=>this._setupManager.onP2PManualSetup("unknown",this.settings,!1)))));return Promise.resolve(!0)}async encodeQR(){const codeSVG=encodeQR(encodeSettingsToQRCodeData(this.settings),0);if(""==codeSVG)return"";const msg=$msg("Setup.QRCode",{qr_image:codeSVG});await this.core.confirm.confirmWithMessage("Settings QR Code",msg,["OK"],"OK");return await Promise.resolve(codeSVG)}async askEncryptingPassphrase(){return await this.core.confirm.askString("Encrypt your settings","The passphrase to encrypt the setup URI","",!0)}async command_copySetupURI(stripExtra=!0){const encryptingPassphrase=await this.askEncryptingPassphrase();if(!1===encryptingPassphrase)return;const encryptedURI=await encodeSettingsToSetupURI(this.settings,encryptingPassphrase,[...stripExtra?["pluginSyncExtendedSetting"]:[]],!0);await this.services.UI.promptCopyToClipboard("Setup URI",encryptedURI)&&this._log("Setup URI copied to clipboard",LOG_LEVEL_NOTICE)}async command_copySetupURIFull(){const encryptingPassphrase=await this.askEncryptingPassphrase();if(!1===encryptingPassphrase)return;const encryptedURI=await encodeSettingsToSetupURI(this.settings,encryptingPassphrase,[],!1);await navigator.clipboard.writeText(encryptedURI);this._log("Setup URI copied to clipboard",LOG_LEVEL_NOTICE)}async command_copySetupURIWithSync(){await this.command_copySetupURI(!1)}async command_openSetupURI(){await this._setupManager.onUseSetupURI("unknown")}onBindFunction(core,services){services.appLifecycle.handleOnLoaded(this._everyOnload.bind(this))}};ModuleDatabaseFileAccess=class extends AbstractModule{_everyOnload(){this.core.databaseFileAccess=this;return Promise.resolve(!0)}async _everyModuleTest(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);const testString="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam nec purus nec nunc",conflicts=await this.getConflictedRevs("autoTest.md");for(const rev3 of conflicts)await this.delete("autoTest.md",rev3);await this.delete("autoTest.md");await this._test("storeContent",(async()=>await this.storeContent("autoTest.md",testString)));this.localDatabase.clearCaches();await this._test("readContent",(async()=>{const content=await this.fetch("autoTest.md");return content?content.deleted?"File is deleted":await content.body.text()==testString||`Content is not same ${await content.body.text()}`:"File not found"}));await this._test("delete",(async()=>await this.delete("autoTest.md")));await this._test("read deleted content",(async()=>{const content=await this.fetch("autoTest.md");return!content||!!content.deleted||`Still exist !:${await content.body.text()},${JSON.stringify(content,void 0,2)}`}));await delay(100);return this.testDone()}async checkIsTargetFile(file){const path2=getStoragePathFromUXFileInfo(file);if(!await this.services.vault.isTargetFile(path2)){this._log(`File is not target: ${path2}`,LOG_LEVEL_VERBOSE);return!1}if(shouldBeIgnored(path2)){this._log(`File should be ignored: ${path2}`,LOG_LEVEL_VERBOSE);return!1}return!0}async delete(file,rev3){if(!await this.checkIsTargetFile(file))return!0;const fullPath=getDatabasePathFromUXFileInfo(file);try{this._log(`deleteDB By path:${fullPath}`);return await this.deleteFromDBbyPath(fullPath,rev3)}catch(ex){this._log(`Failed to delete ${fullPath}`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async createChunks(file,force=!1,skipCheck){return await this.__store(file,force,skipCheck,!0)}async store(file,force=!1,skipCheck){return await this.__store(file,force,skipCheck,!1)}async storeContent(path2,content){const blob=createTextBlob(content),bytes=(await blob.arrayBuffer()).byteLength,isInternal=!!path2.startsWith(".")||void 0,dummyUXFileInfo={name:path2.split("/").pop(),path:path2,stat:{size:bytes,ctime:Date.now(),mtime:Date.now(),type:"file"},body:blob,isInternal};return await this.__store(dummyUXFileInfo,!0,!1,!1)}async __store(file,force=!1,skipCheck,onlyChunks){if(!skipCheck&&!await this.checkIsTargetFile(file))return!0;if(!file){this._log("File seems bad",LOG_LEVEL_VERBOSE);return!1}const possiblyLarge=!isPlainText(file.name),content=file.body,datatype=determineTypeFromBlob(content),idPrefix=file.isInternal?ICHeader:"",fullPath=getStoragePathFromUXFileInfo(file),fullPathOnDB=getDatabasePathFromUXFileInfo(file);possiblyLarge&&this._log(`Processing: ${fullPath}`,LOG_LEVEL_VERBOSE);if(file.isInternal)if(file.deleted)file.stat={size:0,ctime:Date.now(),mtime:Date.now(),type:"file"};else if(null==file.stat){const stat=await this.core.storageAccess.statHidden(file.path);if(!stat){this._log(`Internal file not found: ${fullPath}`,LOG_LEVEL_VERBOSE);return!1}file.stat=stat}const d4={_id:idPrefix+await this.services.path.path2id(fullPath),path:fullPathOnDB,data:content,ctime:file.stat.ctime,mtime:file.stat.mtime,size:file.stat.size,children:[],datatype,type:datatype,eden:{}},msg=`STORAGE -> DB (${datatype}) `;if(await serialized("file-"+fullPath,(async()=>{if(force){this._log(msg+"Force writing "+fullPath,LOG_LEVEL_VERBOSE);return!1}try{const old=await this.localDatabase.getDBEntry(d4.path,void 0,!1,!0,!1);if(!1!==old){const oldData={data:old.data,deleted:old._deleted||old.deleted},newData={data:d4.data,deleted:d4._deleted||d4.deleted};if(oldData.deleted!=newData.deleted)return!1;if(!await isDocContentSame(old.data,newData.data))return!1;this._log(msg+"Skipped (not changed) "+fullPath+(d4._deleted||d4.deleted?" (deleted)":""),LOG_LEVEL_VERBOSE);markChangesAreSame(old,d4.mtime,old.mtime);return!0}}catch(ex){this._log(msg+"Error, Could not check the diff for the old one."+(force?"force writing.":"")+fullPath+(d4._deleted||d4.deleted?" (deleted)":""),LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE);return!force}return!1}))){this._log(msg+" Skip "+fullPath,LOG_LEVEL_VERBOSE);return!0}const ret=await this.localDatabase.putDBEntry(d4,onlyChunks);if(!1!==ret){this._log(msg+fullPath);eventHub.emitEvent("file-saved")}return 0!=ret}async getConflictedRevs(file){if(!await this.checkIsTargetFile(file))return[];const filename=getDatabasePathFromUXFileInfo(file),doc=await this.localDatabase.getDBEntryMeta(filename,{conflicts:!0},!0);return!1===doc?[]:doc._conflicts||[]}async fetch(file,rev3,waitForReady,skipCheck=!1){if(skipCheck&&!await this.checkIsTargetFile(file))return!1;const entry=await this.fetchEntry(file,rev3,waitForReady,!0);if(!1===entry)return!1;const data=createBlob(readContent(entry)),path2=stripAllPrefixes(entry.path),fileInfo={name:path2.split("/").pop(),path:path2,stat:{size:entry.size,ctime:entry.ctime,mtime:entry.mtime,type:"file"},body:data,deleted:entry.deleted||entry._deleted};isInternalMetadata(entry.path)&&(fileInfo.isInternal=!0);return fileInfo}async fetchEntryMeta(file,rev3,skipCheck=!1){const dbFileName=getDatabasePathFromUXFileInfo(file);if(skipCheck&&!await this.checkIsTargetFile(file))return!1;const doc=await this.localDatabase.getDBEntryMeta(dbFileName,rev3?{rev:rev3}:void 0,!0);return!1!==doc&&doc}async fetchEntryFromMeta(meta,waitForReady=!0,skipCheck=!1){if(skipCheck&&!await this.checkIsTargetFile(meta.path))return!1;const doc=await this.localDatabase.getDBEntryFromMeta(meta,!1,waitForReady);return!1!==doc&&doc}async fetchEntry(file,rev3,waitForReady=!0,skipCheck=!1){if(skipCheck&&!await this.checkIsTargetFile(file))return!1;const entry=await this.fetchEntryMeta(file,rev3,!0);return!1!==entry&&await this.fetchEntryFromMeta(entry,waitForReady,!0)}async deleteFromDBbyPath(fullPath,rev3){if(!await this.checkIsTargetFile(fullPath)){this._log(`storeFromStorage: File is not target: ${fullPath}`);return!0}const opt=rev3?{rev:rev3}:void 0,ret=await this.localDatabase.deleteDBEntry(fullPath,opt);eventHub.emitEvent("file-saved");return ret}onBindFunction(core,services){services.appLifecycle.handleOnLoaded(this._everyOnload.bind(this));services.test.handleTest(this._everyModuleTest.bind(this))}};ModuleFileHandler=class extends AbstractModule{get db(){return this.core.databaseFileAccess}get storage(){return this.core.storageAccess}_everyOnloadStart(){this.core.fileHandler=this;return Promise.resolve(!0)}async readFileFromStub(file){if("body"in file&&file.body)return file;const readFile=await this.storage.readStubContent(file);if(!readFile)throw new Error(`File ${file.path} is not exist on the storage`);return readFile}async storeFileToDB(info3,force=!1,onlyChunks=!1){const file="string"==typeof info3?this.storage.getFileStub(info3):info3;if(null==file){this._log(`File ${info3} is not exist on the storage`,LOG_LEVEL_VERBOSE);return!1}if(file.isInternal){this._log(`Internal file ${file.path} is not allowed to be processed on processFileEvent`,LOG_LEVEL_VERBOSE);return!1}const entry=await this.db.fetchEntry(file,void 0,!0,!0);if(!entry||entry.deleted||entry._deleted){const readFile=await this.readFileFromStub(file);return onlyChunks?await this.db.createChunks(readFile,!1,!0):await this.db.store(readFile)}let shouldApplied=!1;if(force||onlyChunks){const readFile=await this.readFileFromStub(file);return onlyChunks?await this.db.createChunks(readFile,!0,!0):await this.db.store(readFile,!0,!0)}{compareFileFreshness(file,entry)!==EVEN&&(shouldApplied=!0);let readFile;if(!shouldApplied){readFile=await this.readFileFromStub(file);if(!readFile){this._log(`File ${file.path} is not exist on the storage`,LOG_LEVEL_NOTICE);return!1}await isDocContentSame(getDocDataAsArray(entry.data),readFile.body)?markChangesAreSame(readFile,readFile.stat.mtime,entry.mtime):shouldApplied=!0}if(!shouldApplied){this._log(`File ${file.path} is not changed`,LOG_LEVEL_VERBOSE);return!0}readFile||(readFile=await this.readFileFromStub(file));return onlyChunks?await this.db.createChunks(readFile,!1,!0):await this.db.store(readFile,!1,!0)}}async deleteFileFromDB(info3){const file="string"==typeof info3?this.storage.getFileStub(info3):info3;if(null==file){this._log(`File ${info3} is not exist on the storage`,LOG_LEVEL_VERBOSE);return!1}if(file.isInternal){this._log(`Internal file ${file.path} is not allowed to be processed on processFileEvent`,LOG_LEVEL_VERBOSE);return!1}const entry=await this.db.fetchEntry(file,void 0,!0,!0);if(!entry||entry.deleted||entry._deleted){this._log(`File ${file.path} is not exist or already deleted on the database`,LOG_LEVEL_VERBOSE);return!1}return(await this.db.getConflictedRevs(file)).length>0?await this.db.delete(file,entry._rev):await this.db.delete(file)}async deleteRevisionFromDB(info3,rev3){return await this.db.delete(info3,rev3)}async resolveConflictedByDeletingRevision(info3,rev3){const path2=getStoragePathFromUXFileInfo(info3);if(!await this.deleteRevisionFromDB(info3,rev3)){this._log(`Failed to delete the conflicted revision ${rev3} of ${path2}`,LOG_LEVEL_VERBOSE);return!1}if(!await this.dbToStorageWithSpecificRev(info3,rev3,!0)){this._log(`Failed to apply the resolved revision ${rev3} of ${path2} to the storage`,LOG_LEVEL_VERBOSE);return!1}}async dbToStorageWithSpecificRev(info3,rev3,force){const file="string"==typeof info3?this.storage.getFileStub(info3):info3;if(null==file){this._log(`File ${info3} is not exist on the storage`,LOG_LEVEL_VERBOSE);return!1}const docEntry=await this.db.fetchEntryMeta(file,rev3,!0);if(!docEntry){this._log(`File ${file.path} is not exist on the database`,LOG_LEVEL_VERBOSE);return!1}return await this.dbToStorage(docEntry,file,force)}async dbToStorage(entryInfo,info3,force){const mode=null==("string"==typeof info3?this.storage.getFileStub(info3):info3)?"create":"modify",pathFromEntryInfo="string"==typeof entryInfo?entryInfo:getPath2(entryInfo),docEntry=await this.db.fetchEntryMeta(pathFromEntryInfo,void 0,!0);if(!docEntry){this._log(`File ${pathFromEntryInfo} is not exist on the database`,LOG_LEVEL_VERBOSE);return!1}const path2=getPath2(docEntry);if((await this.db.getConflictedRevs(path2)).length>0&&!this.settings.writeDocumentsIfConflicted){await this.services.conflict.queueCheckForIfOpen(path2);return!0}const existDoc=this.storage.getStub(path2);if(existDoc&&existDoc.isFolder){this._log(`Folder ${path2} is already exist on the storage as a folder`,LOG_LEVEL_VERBOSE);return!0}const existOnDB=!(docEntry._deleted||docEntry.deleted),existOnStorage=null!=existDoc;if(!existOnDB&&!existOnStorage){this._log(`File ${path2} seems to be deleted, but already not on storage`,LOG_LEVEL_VERBOSE);return!0}if(!existOnDB&&existOnStorage){await this.storage.deleteVaultItem(path2);return!0}const docRead=await this.db.fetchEntryFromMeta(docEntry);if(!docRead){this._log(`File ${path2} is not exist on the database`,LOG_LEVEL_VERBOSE);return!1}if(!this.settings.processSizeMismatchedFiles&&0!=docRead.size&&docRead.size!==readAsBlob(docRead).size){this._log(`File ${path2} seems to be corrupted! Writing prevented. (${docRead.size} != ${readAsBlob(docRead).size})`,LOG_LEVEL_NOTICE);return!1}const docData=readContent(docRead);if(existOnStorage&&!force){let shouldApplied=!1;compareFileFreshness(existDoc,docEntry)!==EVEN&&(shouldApplied=!0);if(!shouldApplied){const readFile=await this.readFileFromStub(existDoc);if(await isDocContentSame(docData,readFile.body)){shouldApplied=!1;markChangesAreSame(docRead,docRead.mtime,existDoc.stat.mtime)}else shouldApplied=!0}if(!shouldApplied){this._log(`File ${docRead.path} is not changed`,LOG_LEVEL_VERBOSE);return!0}}else this._log(`File ${docRead.path} ${existOnStorage?"(new) ":""} ${force?" (forced)":""}`,LOG_LEVEL_VERBOSE);await this.storage.ensureDir(path2);const ret=await this.storage.writeFileAuto(path2,docData,{ctime:docRead.ctime,mtime:docRead.mtime});await this.storage.touched(path2);this.storage.triggerFileEvent(mode,path2);return ret}async _anyHandlerProcessesFileEvent(item){const eventItem=item.args,type=item.type,path2=eventItem.file.path;if(!await this.services.vault.isTargetFile(path2)){this._log(`File ${path2} is not the target file`,LOG_LEVEL_VERBOSE);return!1}if(shouldBeIgnored(path2)){this._log(`File ${path2} should be ignored`,LOG_LEVEL_VERBOSE);return!1}const lockKey=`processFileEvent-${path2}`;return await serialized(lockKey,(async()=>{switch(type){case"CREATE":case"CHANGED":return await this.storeFileToDB(item.args.file);case"DELETE":return await this.deleteFileFromDB(item.args.file);case"INTERNAL":return!1;default:this._log(`Unsupported event type: ${type}`,LOG_LEVEL_VERBOSE);return!1}}))}async _anyProcessReplicatedDoc(entry){return await serialized(entry.path,(async()=>{var _a8,_b5;if(!await this.services.vault.isTargetFile(entry.path)){this._log(`File ${entry.path} is not the target file`,LOG_LEVEL_VERBOSE);return!1}if(this.services.vault.isFileSizeTooLarge(entry.size)){this._log(`File ${entry.path} is too large (on database) to be processed`,LOG_LEVEL_VERBOSE);return!1}if(shouldBeIgnored(entry.path)){this._log(`File ${entry.path} should be ignored`,LOG_LEVEL_VERBOSE);return!1}const path2=getPath2(entry),targetFile=this.storage.getStub(getPathWithoutPrefix2(entry));if(targetFile&&targetFile.isFolder){this._log(`${getPath2(entry)} is already exist as the folder`);return!0}{if(targetFile&&this.services.vault.isFileSizeTooLarge(targetFile.stat.size)){this._log(`File ${targetFile.path} is too large (on storage) to be processed`,LOG_LEVEL_VERBOSE);return!1}this._log(`Processing ${path2} (${entry._id.substring(0,8)} :${null==(_a8=entry._rev)?void 0:_a8.substring(0,5)}) : Started...`,LOG_LEVEL_VERBOSE);eventHub.emitEvent("conflict-cancelled",path2);const ret=await this.dbToStorage(entry,targetFile);this._log(`Processing ${path2} (${entry._id.substring(0,8)} :${null==(_b5=entry._rev)?void 0:_b5.substring(0,5)}) : Done`);return ret}}))}async createAllChunks(showingNotice){this._log("Collecting local files on the storage",LOG_LEVEL_VERBOSE);const semaphore=Semaphore(10);let processed=0;const filesStorageSrc=this.storage.getFiles(),incProcessed=()=>{processed++;processed%25==0&&this._log(`Creating missing chunks: ${processed} of ${total} files`,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"chunkCreation")},total=filesStorageSrc.length,procAllChunks=filesStorageSrc.map((async file=>{if(!await this.services.vault.isTargetFile(file)){incProcessed();return!0}if(this.services.vault.isFileSizeTooLarge(file.stat.size)){incProcessed();return!0}if(shouldBeIgnored(file.path)){incProcessed();return!0}const release=await semaphore.acquire();incProcessed();try{await this.storeFileToDB(file,!1,!0)}catch(ex){this._log(ex,LOG_LEVEL_VERBOSE)}finally{release()}}));await Promise.all(procAllChunks);this._log(`Creating chunks Done: ${processed} of ${total} files`,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"chunkCreation")}onBindFunction(core,services){services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this));services.fileProcessing.handleProcessFileEvent(this._anyHandlerProcessesFileEvent.bind(this));services.replication.handleProcessSynchroniseResult(this._anyProcessReplicatedDoc.bind(this))}};ObsHttpHandler=class extends FetchHttpHandler{constructor(options,reverseProxyNoSignUrl){super(options);this.requestTimeoutInMs=void 0===options?void 0:options.requestTimeout;this.reverseProxyNoSignUrl=reverseProxyNoSignUrl}async handle(request2,{abortSignal}={}){if(null==abortSignal?void 0:abortSignal.aborted){const abortError=new Error("Request aborted");abortError.name="AbortError";return Promise.reject(abortError)}let path2=request2.path;if(request2.query){const queryString=buildQueryString(request2.query);queryString&&(path2+=`?${queryString}`)}const{port,method}=request2;let url=`${request2.protocol}//${request2.hostname}${port?`:${port}`:""}${path2}`;if(void 0!==this.reverseProxyNoSignUrl&&""!==this.reverseProxyNoSignUrl){const urlObj=new URL(url);urlObj.host=this.reverseProxyNoSignUrl;url=urlObj.href}const body="GET"===method||"HEAD"===method?void 0:request2.body,transformedHeaders={};for(const key3 of Object.keys(request2.headers)){const keyLower=key3.toLowerCase();"host"!==keyLower&&"content-length"!==keyLower&&(transformedHeaders[keyLower]=request2.headers[key3])}let contentType;void 0!==transformedHeaders["content-type"]&&(contentType=transformedHeaders["content-type"]);let transformedBody=body;ArrayBuffer.isView(body)&&(transformedBody=new Uint8Array(body.buffer).buffer);const param={body:transformedBody,headers:transformedHeaders,method,url,contentType},raceOfPromises=[(0,import_obsidian.requestUrl)(param).then((rsp=>{const headers=rsp.headers,headersLower={};for(const key3 of Object.keys(headers))headersLower[key3.toLowerCase()]=headers[key3];const stream=new ReadableStream({start(controller){controller.enqueue(new Uint8Array(rsp.arrayBuffer));controller.close()}});return{response:new HttpResponse({headers:headersLower,statusCode:rsp.status,body:stream})}})),requestTimeout(this.requestTimeoutInMs)];abortSignal&&raceOfPromises.push(new Promise(((resolve,reject)=>{abortSignal.onabort=()=>{const abortError=new Error("Request aborted");abortError.name="AbortError";reject(abortError)}})));return Promise.race(raceOfPromises)}};import_obsidian.Notice;ModuleObsidianAPI=class extends AbstractObsidianModule{constructor(){super(...arguments);this._authHeader=new AuthorizationHeaderGenerator;this._previousErrors=new Set;this.last_successful_post=!1}showError(msg,max_log_level=LEVEL_NOTICE){const level=this._previousErrors.has(msg)?LEVEL_INFO:max_log_level;this._log(msg,level);if(!this._previousErrors.has(msg)){this._previousErrors.add(msg);eventHub.emitEvent("on-unresolved-error")}}clearErrors(){this._previousErrors.clear();eventHub.emitEvent("on-unresolved-error")}_customFetchHandler(){this._customHandler||(this._customHandler=new ObsHttpHandler(void 0,void 0));return this._customHandler}_getLastPostFailedBySize(){return!this.last_successful_post}async __fetchByAPI(url,authHeader,opts){var _a8,_b5;const body=null==opts?void 0:opts.body,optHeaders={};if(opts&&"headers"in opts)if(opts.headers instanceof Headers)opts.headers.forEach(((value,key3)=>{optHeaders[key3]=value}));else for(const[key3,value]of Object.entries(opts.headers))optHeaders[key3]=value;const transformedHeaders={...optHeaders};""!=authHeader&&(transformedHeaders.authorization=authHeader);delete transformedHeaders.host;delete transformedHeaders.Host;delete transformedHeaders["content-length"];delete transformedHeaders["Content-Length"];const requestParam={url,method:null==opts?void 0:opts.method,body,headers:transformedHeaders,contentType:null!=(_b5=null!=(_a8=null==transformedHeaders?void 0:transformedHeaders["content-type"])?_a8:null==transformedHeaders?void 0:transformedHeaders["Content-Type"])?_b5:"application/json"},r4=await fetchByAPI(requestParam,!0);return new Response(r4.arrayBuffer,{headers:r4.headers,status:r4.status,statusText:`${r4.status}`})}async fetchByAPI(url,localURL,method,authHeader,opts){const body=null==opts?void 0:opts.body,size=body?` (${body.length})`:"";try{const r4=await this.__fetchByAPI(url,authHeader,opts);this.plugin.requestCount.value=this.plugin.requestCount.value+1;this.last_successful_post="POST"!=method&&"PUT"!=method||r4.status-r4.status%100==200;this._log(`HTTP:${method}${size} to:${localURL} -> ${r4.status}`,LOG_LEVEL_DEBUG);return r4}catch(ex){this._log(`HTTP:${method}${size} to:${localURL} -> failed`,LOG_LEVEL_VERBOSE);-1!==url.toString().indexOf("_bulk_docs")&&(this.last_successful_post=!1);this._log(ex);throw ex}finally{this.plugin.responseCount.value=this.plugin.responseCount.value+1}}async _connectRemoteCouchDB(uri,auth,disableRequestURI,passphrase,useDynamicIterationCount,performSetup,skipInfo,compression,customHeaders,useRequestAPI,getPBKDF2Salt){if(!isValidRemoteCouchDBURI(uri))return"Remote URI is not valid";if(uri.toLowerCase()!=uri)return"Remote URI and database name could not contain capital letters.";if(-1!==uri.indexOf(" "))return"Remote URI and database name could not contain spaces.";if(!this.core.managers.networkManager.isOnline)return"Network is offline";const db=new index_es_default(uri,{adapter:"http",auth:"username"in auth?auth:void 0,skip_setup:!performSetup,fetch:async(url,opts)=>{var _a8;const authHeader=await this._authHeader.getAuthorizationHeader(auth);let size="";const localURL=url.toString().substring(uri.length),method=null!=(_a8=null==opts?void 0:opts.method)?_a8:"GET";if(null==opts?void 0:opts.body){const opts_length=opts.body.toString().length;if(opts_length>1e7&&isCloudantURI(uri)){this.last_successful_post=!1;this._log("This request should fail on IBM Cloudant.",LOG_LEVEL_VERBOSE);throw new Error("This request should fail on IBM Cloudant.")}size=` (${opts_length})`}try{const headers=new Headers(null==opts?void 0:opts.headers);if(customHeaders)for(const[key3,value]of Object.entries(customHeaders))key3&&value&&headers.append(key3,value);"username"in auth||headers.append("authorization",authHeader);try{this.plugin.requestCount.value=this.plugin.requestCount.value+1;const response=await(useRequestAPI?this.__fetchByAPI(url.toString(),authHeader,{...opts,headers}):fetch(url,{...opts,headers}));this.last_successful_post="POST"!=method&&"PUT"!=method||response.ok;this._log(`HTTP:${method}${size} to:${localURL} -> ${response.status}`,LOG_LEVEL_DEBUG);if(2!==Math.floor(response.status/100))if(404==response.status)"GET"===method&&-1===localURL.indexOf("/_local/")&&this._log("Just checkpoint or some server information has been missing. The 404 error shown above is not an error.",LOG_LEVEL_VERBOSE);else{const r4=response.clone();this._log(`The request may have failed. The reason sent by the server: ${r4.status}: ${r4.statusText}`,LOG_LEVEL_NOTICE);try{const result=await r4.text();this._log(result,LOG_LEVEL_VERBOSE)}catch(_){this._log("Cloud not fetch response body",LOG_LEVEL_VERBOSE);this._log(_,LOG_LEVEL_VERBOSE)}}this.clearErrors();return response}catch(ex){if(ex instanceof TypeError){if(useRequestAPI){this._log("Failed to request by API.");throw ex}this._log("Failed to fetch by native fetch API. Trying to fetch by API to get more information.");const resp2=await this.fetchByAPI(url.toString(),localURL,method,authHeader,{...opts,headers});if(resp2.status/100==2){this.showError("The request was successful by API. But the native fetch API failed! Please check CORS settings on the remote database!. While this condition, you cannot enable LiveSync",LOG_LEVEL_NOTICE);return resp2}const r22=resp2.clone(),msg=await r22.text();this.showError(`Failed to fetch by API. ${resp2.status}: ${msg}`,LOG_LEVEL_NOTICE);return resp2}throw ex}}catch(ex){this._log(`HTTP:${method}${size} to:${localURL} -> failed`,LOG_LEVEL_VERBOSE);const msg=ex instanceof Error?`${null==ex?void 0:ex.name}:${null==ex?void 0:ex.message}`:null==ex?void 0:ex.toString();this.showError(`Failed to fetch: ${msg}`);this._log(ex,LOG_LEVEL_VERBOSE);-1!==url.toString().indexOf("_bulk_docs")&&(this.last_successful_post=!1);this._log(ex);throw ex}finally{this.plugin.responseCount.value=this.plugin.responseCount.value+1}}});replicationFilter(db,compression);disableEncryption();"false"!==passphrase&&"string"==typeof passphrase&&enableEncryption(db,passphrase,useDynamicIterationCount,!1,getPBKDF2Salt,this.settings.E2EEAlgorithm);if(skipInfo)return{db,info:{db_name:"",doc_count:0,update_seq:""}};try{const info3=await db.info();return{db,info:info3}}catch(ex){const msg=`${null==ex?void 0:ex.name}:${null==ex?void 0:ex.message}`;this._log(ex,LOG_LEVEL_VERBOSE);return msg}}_isMobile(){return this.app.isMobile}_vaultName(){return this.app.vault.getName()}_getVaultName(){var _a8;return this.services.vault.vaultName()+((null==(_a8=this.settings)?void 0:_a8.additionalSuffixOfDatabaseName)?"-"+this.settings.additionalSuffixOfDatabaseName:"")}_getActiveFilePath(){const file=this.app.workspace.getActiveFile();if(file)return getPathFromTFile(file)}_anyGetAppId(){return`${"appId"in this.app?this.app.appId:""}`}_reportUnresolvedMessages(){return Promise.resolve([...this._previousErrors])}_getAppVersion(){var _a8,_b5;const match3=(null!=(_b5=null==(_a8=globalThis.navigator)?void 0:_a8.userAgent)?_b5:"").match(/obsidian\/([0-9]+\.[0-9]+\.[0-9]+)/);return match3&&match3.length>=2?match3[1]:"0.0.0"}_getPluginVersion(){return this.plugin.manifest.version}onBindFunction(core,services){services.API.handleGetCustomFetchHandler(this._customFetchHandler.bind(this));services.API.handleIsLastPostFailedDueToPayloadSize(this._getLastPostFailedBySize.bind(this));services.remote.handleConnect(this._connectRemoteCouchDB.bind(this));services.API.handleIsMobile(this._isMobile.bind(this));services.vault.handleGetVaultName(this._getVaultName.bind(this));services.vault.handleVaultName(this._vaultName.bind(this));services.vault.handleGetActiveFilePath(this._getActiveFilePath.bind(this));services.API.handleGetAppID(this._anyGetAppId.bind(this));services.API.handleGetAppVersion(this._getAppVersion.bind(this));services.API.handleGetPluginVersion(this._getPluginVersion.bind(this));services.appLifecycle.reportUnresolvedMessages(this._reportUnresolvedMessages.bind(this))}};ModuleObsidianEvents=class extends AbstractObsidianModule{constructor(){super(...arguments);this.hasFocus=!0;this.isLastHidden=!1}_everyOnloadStart(){this.plugin.registerEvent(this.app.vault.on("rename",((file,oldPath)=>{eventHub.emitEvent("file-renamed",{newPath:file.path,old:oldPath})})));this.plugin.registerEvent(this.app.workspace.on("active-leaf-change",(()=>eventHub.emitEvent("leaf-active-changed"))));return Promise.resolve(!0)}_performRestart(){this.__performAppReload()}__performAppReload(){this.app.commands.executeCommandById("app:reload")}swapSaveCommand(){var _a8,_b5;this._log("Modifying callback of the save command",LOG_LEVEL_VERBOSE);const saveCommandDefinition=null==(_b5=null==(_a8=this.app.commands)?void 0:_a8.commands)?void 0:_b5["editor:save-file"],save2=null==saveCommandDefinition?void 0:saveCommandDefinition.callback;if("function"==typeof save2){this.initialCallback=save2;saveCommandDefinition.callback=()=>{scheduleTask("syncOnEditorSave",250,(()=>{if(this.services.appLifecycle.hasUnloaded()){this._log("Unload and remove the handler.",LOG_LEVEL_VERBOSE);saveCommandDefinition.callback=this.initialCallback;this.initialCallback=void 0}else if(this.settings.syncOnEditorSave){this._log("Sync on Editor Save.",LOG_LEVEL_VERBOSE);fireAndForget((()=>this.services.replication.replicateByEvent()))}}));save2()}}const _this=this;window.CodeMirrorAdapter?window.CodeMirrorAdapter.commands.save=()=>{_this.app.commands.executeCommandById("editor:save-file")}:this._log("CodeMirrorAdapter is not available")}registerWatchEvents(){this.setHasFocus=this.setHasFocus.bind(this);this.watchWindowVisibility=this.watchWindowVisibility.bind(this);this.watchWorkspaceOpen=this.watchWorkspaceOpen.bind(this);this.watchOnline=this.watchOnline.bind(this);this.plugin.registerEvent(this.app.workspace.on("file-open",this.watchWorkspaceOpen));this.plugin.registerDomEvent(document,"visibilitychange",this.watchWindowVisibility);this.plugin.registerDomEvent(window,"focus",(()=>this.setHasFocus(!0)));this.plugin.registerDomEvent(window,"blur",(()=>this.setHasFocus(!1)));this.plugin.registerDomEvent(window,"online",this.watchOnline);this.plugin.registerDomEvent(window,"offline",this.watchOnline)}setHasFocus(hasFocus){this.hasFocus=hasFocus;this.watchWindowVisibility()}watchWindowVisibility(){scheduleTask("watch-window-visibility",100,(()=>fireAndForget((()=>this.watchWindowVisibilityAsync()))))}watchOnline(){scheduleTask("watch-online",500,(()=>fireAndForget((()=>this.watchOnlineAsync()))))}async watchOnlineAsync(){if(navigator.onLine&&this.localDatabase.needScanning){this.localDatabase.needScanning=!1;await this.services.vault.scanVault()}}async watchWindowVisibilityAsync(){if(this.settings.suspendFileWatching)return;if(!this.settings.isConfigured)return;if(!this.services.appLifecycle.isReady())return;if(this.isLastHidden&&!this.hasFocus)return;const isHidden=document.hidden;if(this.isLastHidden!==isHidden){this.isLastHidden=isHidden;await this.services.fileProcessing.commitPendingFileEvents();if(isHidden)await this.services.appLifecycle.onSuspending();else{if(this.services.appLifecycle.isSuspended())return;if(!this.hasFocus)return;await this.services.appLifecycle.onResuming();await this.services.appLifecycle.onResumed()}}}watchWorkspaceOpen(file){this.settings.suspendFileWatching||this.settings.isConfigured&&this.services.appLifecycle.isReady()&&file&&scheduleTask("watch-workspace-open",500,(()=>fireAndForget((()=>this.watchWorkspaceOpenAsync(file)))))}async watchWorkspaceOpenAsync(file){if(!this.settings.suspendFileWatching&&this.settings.isConfigured&&this.services.appLifecycle.isReady()){await this.services.fileProcessing.commitPendingFileEvents();if(null!=file){this.settings.syncOnFileOpen&&!this.services.appLifecycle.isSuspended()&&await this.services.replication.replicateByEvent();await this.services.conflict.queueCheckForIfOpen(file.path)}}}_everyOnLayoutReady(){this.swapSaveCommand();this.registerWatchEvents();return Promise.resolve(!0)}_askReload(message){this.services.appLifecycle.isReloadingScheduled()?this._log("Reloading is already scheduled",LOG_LEVEL_VERBOSE):scheduleTask("configReload",250,(async()=>{const ret=await this.core.confirm.askSelectStringDialogue(message||"Do you want to restart and reload Obsidian now?",["Yes, schedule a restart after stabilisation","Yes, restart immediately","No, Leave it to me"],{defaultAction:"No, Leave it to me"});"Yes, restart immediately"==ret?this.__performAppReload():"Yes, schedule a restart after stabilisation"==ret&&this.services.appLifecycle.scheduleRestart()}))}_scheduleAppReload(){if(!this.core._totalProcessingCount){const __tick=reactiveSource(0);this.core._totalProcessingCount=reactive((()=>{const dbCount=this.core.databaseQueueCount.value,replicationCount=this.core.replicationResultCount.value,storageApplyingCount=this.core.storageApplyingCount.value,chunkCount=collectingChunks.value,pluginScanCount=pluginScanningCount.value,hiddenFilesCount=hiddenFilesEventCount.value+hiddenFilesProcessingCount.value,conflictProcessCount=this.core.conflictProcessQueueCount.value,e3=this.core.pendingFileEventCount.value,proc=this.core.processingFileEventCount.value;__tick.value;return dbCount+replicationCount+storageApplyingCount+chunkCount+pluginScanCount+hiddenFilesCount+conflictProcessCount+e3+proc}));this.plugin.registerInterval(setInterval((()=>{__tick.value++}),1e3));let stableCheck=3;this.core._totalProcessingCount.onChanged((e3=>{if(0==e3.value){stableCheck--<=0&&this.__performAppReload();this._log(`Obsidian will be restarted soon! (Within ${stableCheck} seconds)`,LOG_LEVEL_NOTICE,"restart-notice")}else stableCheck=3}))}}onBindFunction(core,services){services.appLifecycle.handleLayoutReady(this._everyOnLayoutReady.bind(this));services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this));services.appLifecycle.handlePerformRestart(this._performRestart.bind(this));services.appLifecycle.handleAskRestart(this._askReload.bind(this));services.appLifecycle.handleScheduleRestart(this._scheduleAppReload.bind(this))}};setLevelClass=(el,level)=>{switch(level){case LEVEL_POWER_USER:el.addClass("sls-setting-poweruser");break;case LEVEL_ADVANCED:el.addClass("sls-setting-advanced");break;case LEVEL_EDGE_CASE:el.addClass("sls-setting-edgecase");break;default:}};LiveSyncSetting=class _LiveSyncSetting extends import_obsidian.Setting{constructor(containerEl){super(containerEl);this.watchDirtyKeys=[];this.holdValue=!1;this.descBuf="";this.nameBuf="";this.placeHolderBuf="";this.hasPassword=!1;this.updateHandlers=new Set;this.prevStatus={};_LiveSyncSetting.env.settingComponents.push(this)}_createDocStub(key3,value){var _a8,_b5,_c3,_d2;{const paneName=findAttrFromParent(this.settingEl,"data-pane"),panelName=findAttrFromParent(this.settingEl,"data-panel");createStub("string"==typeof this.nameBuf?this.nameBuf:null!=(_b5=null==(_a8=this.nameBuf.textContent)?void 0:_a8.toString())?_b5:"",key3,"string"==typeof value?value:null!=(_d2=null==(_c3=value.textContent)?void 0:_c3.toString())?_d2:"",panelName,paneName)}}setDesc(desc){this.descBuf=desc;this._createDocStub("desc",desc);super.setDesc(desc);return this}setName(name){this.nameBuf=name;this._createDocStub("name",name);super.setName(name);return this}setAuto(key3,opt){this.autoWireSetting(key3,opt);return this}autoWireSetting(key3,opt){const conf=getConfig(key3);if(!conf)return;const name=`${conf.name}${statusDisplay(conf.status)}`;this.setName(name);conf.desc&&this.setDesc(conf.desc);this._createDocStub("key",key3);conf.obsolete&&this._createDocStub("is_obsolete","true");conf.level&&this._createDocStub("level",conf.level);this.holdValue=(null==opt?void 0:opt.holdValue)||this.holdValue;this.selfKey=key3;(conf.obsolete||(null==opt?void 0:opt.obsolete))&&this.settingEl.toggleClass("sls-setting-obsolete",!0);(null==opt?void 0:opt.onUpdate)&&this.addOnUpdate(opt.onUpdate);const stat=this._getComputedStatus();!1===stat.visibility&&this.settingEl.toggleClass("sls-setting-hidden",!stat.visibility);return conf}autoWireComponent(component2,conf,opt){this.placeHolderBuf=(null==conf?void 0:conf.placeHolder)||(null==opt?void 0:opt.placeHolder)||"";(null==conf?void 0:conf.level)==LEVEL_ADVANCED?this.settingEl.toggleClass("sls-setting-advanced",!0):(null==conf?void 0:conf.level)==LEVEL_POWER_USER&&this.settingEl.toggleClass("sls-setting-poweruser",!0);this.placeHolderBuf&&component2 instanceof import_obsidian.TextComponent&&component2.setPlaceholder(this.placeHolderBuf);(null==opt?void 0:opt.onUpdate)&&this.addOnUpdate(opt.onUpdate)}async commitValue(value){const key3=this.selfKey;if(void 0!==key3&&value!=_LiveSyncSetting.env.editingSettings[key3]){_LiveSyncSetting.env.editingSettings[key3]=value;this.holdValue||await _LiveSyncSetting.env.saveSettings([key3])}_LiveSyncSetting.env.requestUpdate()}autoWireText(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addText((text2=>{this.autoWiredComponent=text2;const setValue=wrapMemo((value=>{text2.setValue(value)}));this.invalidateValue=()=>setValue(`${_LiveSyncSetting.env.editingSettings[key3]}`);this.invalidateValue();text2.onChange((async value=>{await this.commitValue(value)}));if(null==opt?void 0:opt.isPassword){text2.inputEl.setAttribute("type","password");this.hasPassword=!0}this.autoWireComponent(this.autoWiredComponent,conf,opt)}));return this}autoWireTextArea(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addTextArea((text2=>{this.autoWiredComponent=text2;const setValue=wrapMemo((value=>{text2.setValue(value)}));this.invalidateValue=()=>setValue(`${_LiveSyncSetting.env.editingSettings[key3]}`);this.invalidateValue();text2.onChange((async value=>{await this.commitValue(value)}));if(null==opt?void 0:opt.isPassword){text2.inputEl.setAttribute("type","password");this.hasPassword=!0}this.autoWireComponent(this.autoWiredComponent,conf,opt)}));return this}autoWireNumeric(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addText((text2=>{this.autoWiredComponent=text2;void 0!==opt.clampMin&&text2.inputEl.setAttribute("min",`${opt.clampMin}`);void 0!==opt.clampMax&&text2.inputEl.setAttribute("max",`${opt.clampMax}`);let lastError=!1;const setValue=wrapMemo((value=>{text2.setValue(value)}));this.invalidateValue=()=>{lastError||setValue(`${_LiveSyncSetting.env.editingSettings[key3]}`)};this.invalidateValue();text2.onChange((async TextValue=>{var _a8,_b5;const value=Number(TextValue);let hasError=!1;isNaN(value)&&(hasError=!0);void 0!==opt.clampMax&&opt.clampMaxvalue&&(opt.acceptZero&&0==value||(hasError=!0));if(hasError){this.setTooltip($msg("liveSyncSetting.valueShouldBeInRange",{min:(null==(_a8=opt.clampMin)?void 0:_a8.toString())||"~",max:(null==(_b5=opt.clampMax)?void 0:_b5.toString())||"~"}));text2.inputEl.toggleClass("sls-item-invalid-value",!0);lastError=!0;return!1}lastError=!1;this.setTooltip("");text2.inputEl.toggleClass("sls-item-invalid-value",!1);await this.commitValue(value)}));text2.inputEl.setAttr("type","number");this.autoWireComponent(this.autoWiredComponent,conf,opt)}));return this}autoWireToggle(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addToggle((toggle=>{this.autoWiredComponent=toggle;const setValue=wrapMemo((value=>{toggle.setValue((null==opt?void 0:opt.invert)?!value:value)}));this.invalidateValue=()=>{var _a8;return setValue(null!=(_a8=_LiveSyncSetting.env.editingSettings[key3])&&_a8)};this.invalidateValue();toggle.onChange((async value=>{await this.commitValue((null==opt?void 0:opt.invert)?!value:value)}));this.autoWireComponent(this.autoWiredComponent,conf,opt)}));return this}autoWireDropDown(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addDropdown((dropdown=>{this.autoWiredComponent=dropdown;const setValue=wrapMemo((value=>{dropdown.setValue(value)}));dropdown.addOptions(opt.options);this.invalidateValue=()=>setValue(_LiveSyncSetting.env.editingSettings[key3]||"");this.invalidateValue();dropdown.onChange((async value=>{await this.commitValue(value)}));this.autoWireComponent(this.autoWiredComponent,conf,opt)}));return this}addApplyButton(keys3,text2){this.addButton((button=>{this.applyButtonComponent=button;this.watchDirtyKeys=unique([...keys3,...this.watchDirtyKeys]);button.setButtonText(null!=text2?text2:$msg("liveSyncSettings.btnApply"));button.onClick((async()=>{await _LiveSyncSetting.env.saveSettings(keys3);_LiveSyncSetting.env.reloadAllSettings()}));_LiveSyncSetting.env.requestUpdate()}));return this}addOnUpdate(func){this.updateHandlers.add(func);return this}_getComputedStatus(){let newConf={};for(const handler of this.updateHandlers)newConf={...newConf,...handler()};return newConf}_applyOnUpdateHandlers(){if(this.updateHandlers.size>0){const newConf=this._getComputedStatus(),keys3=Object.keys(newConf);for(const k2 of keys3)if(!(k2 in this.prevStatus)||this.prevStatus[k2]!=newConf[k2])switch(k2){case"visibility":this.settingEl.toggleClass("sls-setting-hidden",!newConf[k2]);this.prevStatus[k2]=newConf[k2];break;case"classes":break;case"disabled":this.setDisabled(newConf[k2]||!1);this.settingEl.toggleClass("sls-setting-disabled",newConf[k2]||!1);this.prevStatus[k2]=newConf[k2];break;case"isCta":{const component2=this.autoWiredComponent;component2 instanceof import_obsidian.ButtonComponent&&(newConf[k2]?component2.setCta():component2.removeCta());this.prevStatus[k2]=newConf[k2]}break;case"isWarning":{const component2=this.autoWiredComponent;component2 instanceof import_obsidian.ButtonComponent&&newConf[k2]&&component2.setWarning();this.prevStatus[k2]=newConf[k2]}break}}}_onUpdate(){var _a8,_b5;if(this.applyButtonComponent){const isDirty2=_LiveSyncSetting.env.isSomeDirty(this.watchDirtyKeys);this.applyButtonComponent.setDisabled(!isDirty2);isDirty2?this.applyButtonComponent.setCta():this.applyButtonComponent.removeCta()}this.selfKey&&!_LiveSyncSetting.env.isDirty(this.selfKey)&&this.invalidateValue&&this.invalidateValue();if(this.holdValue&&this.selfKey){const isDirty2=_LiveSyncSetting.env.isDirty(this.selfKey),alt=isDirty2?$msg("liveSyncSetting.originalValue",{value:String(null!=(_b5=null==(_a8=_LiveSyncSetting.env.initialSettings)?void 0:_a8[this.selfKey])?_b5:"")}):"";this.controlEl.toggleClass("sls-item-dirty",isDirty2);if(!this.hasPassword){this.nameEl.toggleClass("sls-item-dirty-help",isDirty2);this.setTooltip(alt,{delay:10,placement:"right"})}}this._applyOnUpdateHandlers()}};updateInformation="# 0.25\nSince 19th July, 2025 (beta1 in 0.25.0-beta1, 13th July, 2025)\n\nThe head note of 0.25 is now in [updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md). Because 0.25 got a lot of updates, thankfully, compatibility is kept and we do not need breaking changes! In other words, when get enough stabled. The next version will be v1.0.0. Even though it my hope.\n\n## 0.25.38\n\n17th January, 2026\n\n### Fixed\n\n- Fixed an issue where indexedDB would not close correctly on some environments, causing unexpected errors during database operations.\n\n## 0.25.37\n\n15th January, 2026\n\nThank you for your patience until my return!\n\nThis release contains minor changes discovered and fixed during test implementation.\nThere are no changes affecting usage.\n\n### Refactored\n- Logging system has been slightly refactored to improve maintainability.\n- Some import statements have been unified.\n\n## 0.25.36\n\n25th December, 2025\n\n### Improved\n\n- Now the garbage collector (V3) has been implemented. (Beta)\n - This garbage collector ensures that all devices are synchronised to the latest progress to prevent inconsistencies.\n - In other words, it makes sure that no new conflicts would have arisen.\n - This feature requires additional information (via node information), but it should be more reliable.\n - This feature requires all devices have v0.25.36 or later.\n - After the garbage collector runs, the database size may be reduced (Compaction will be run automatically after GC).\n - We should have an administrative privilege on the remote database to run this garbage collector.\n- Now the plug-in and device information is stored in the remote database.\n - This information is used for the garbage collector (V3).\n - Some additional features may be added in the future using this information.\n\n## 0.25.35\n\n24th December, 2025\n\nSorry for a small release! I would like to keep things moving along like this if possible. After all, the holidays seem to be starting soon. I will be doubled by my business until the 27th though, indeed.\n\n### Fixed\n\n- Now the conflict resolution dialogue shows correctly which device only has older APIs (#764).\n\n## 0.25.34\n\n10th December, 2025\n\n### Behaviour change\n\n- The plug-in automatically fetches the missing chunks even if `Fetch chunks on demand` is disabled.\n - This change is to avoid loss of data when receiving a bulk of revisions.\n - This can be prevented by enabling `Use Only Local Chunks` in the settings.\n- Storage application now saved during each event and restored on startup.\n- Synchronisation result application is also now saved during each event and restored on startup.\n - These may avoid some unexpected loss of data when the editor crashes.\n\n### Fixed\n\n- Now the plug-in waits for the application of pended batch changes before the synchronisation starts.\n - This may avoid some unexpected loss or unexpected conflicts.\n Plug-in sends custom headers correctly when RequestAPI is used.\n- No longer causing unexpected chunk creation during `Reset synchronisation on This Device` with bucket sync.\n\n### Refactored\n\n- Synchronisation result application process has been refactored.\n- Storage application process has been refactored.\n - Please report if you find any unexpected behaviour after this update. A bit of large refactoring.\n\n## 0.25.33\n\n05th December, 2025\n\n### New feature\n\n- We can analyse the local database with the `Analyse database usage` command.\n - This command makes a TSV-style report of the database usage, which can be pasted into spreadsheet applications.\n - The report contains the number of unique chunks and shared chunks for each document revision.\n - Unique chunks indicate the actual consumption.\n - Shared chunks indicate the reference counts from other chunks with no consumption.\n - We can find which notes or files are using large amounts of storage in the database. Or which notes cannot share chunks effectively.\n - This command is useful when optimising the database size or investigating an unexpectedly large database size.\n- We can reset the notification threshold and check the remote usage at once with the `Reset notification threshold and check the remote database usage` command.\n- Commands are available from the Command Palette, or `Hatch` pane in the settings dialogue.\n\n### Fixed\n\n- Now the plug-in resets the remote size notification threshold after rebuild.\n\n## 0.25.32\n\n02nd December, 2025\n\nNow I am back from a short (?) break! Thank you all for your patience. (It is nothing major, but the first half of the year has finally come to an end).\nAnyway, I will release the things a bit by bit. I think that we need a rehabilitation or getting gears in again.\n\n### Improved\n\n- Now the plugin warns when we are in several file-related situations that may cause unexpected behaviour (#300).\n - These errors are displayed alongside issues such as file size exceeding limits.\n - Such situations include:\n - When the document has a name which is not supported by some file systems.\n - When the vault has the same file names with different letter cases.\n\n## 0.25.31\n\n18th November, 2025\n\n### Fixed\n\n- Now fetching configuration from the server can handle the empty remote correctly (reported on #756).\n- No longer asking to switch adapters during rebuilding.\n\n## 0.25.30\n\n17th November, 2025\n\nSo sorry for the quick follow-up release, due to a humble mistake in a quick causing a matter.\n\n### Fixed\n\n- Now we can save settings correctly again (#756).\n\n## ~~0.25.28~~ 0.25.29\n\n(0.25.28 was skipped due to a packaging issue.)\n\n17th November, 2025\n\n### New feature\n\n- We can now configure hidden file synchronisation to always overwrite with the latest version (#579).\n\n### Fixed\n\n- Timing dependency issues during initialisation have been mitigated (#714)\n\n### Improved\n\n- Error logs now contain stack-traces for better inspection.\n\n## 0.25.27\n\n12th November, 2025\n\n### Improved\n\n- Now we can switch the database adapter between IndexedDB and IDB without rebuilding (#747).\n - Just a local migration will be required, but faster than a full rebuild.\n- No longer checking for the adapter by `Doctor`.\n\n### Changes\n\n- The default adapter is reverted to IDB to avoid memory leaks (#747).\n\n### Fixed (?)\n\n- Reverted QR code library to v1.4.4 (To make sure #752).\n\nOlder notes are in\n[updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md).\n";lastVersion=~~(versionNumberString2Number("0.25.38")/1e3);SveltePanel=class{constructor(component2,mountTo,valueStore){this._componentValue=writable(void 0);this._componentValue=null!=valueStore?valueStore:writable(void 0);this._mountedComponent=mount(component2,{target:mountTo,props:{port:this._componentValue}});return this}destroy(){this._mountedComponent&&unmount(this._mountedComponent)}get componentValue(){return get2(this._componentValue)}set componentValue(value){this._componentValue.set(value)}};root_127=from_html('
',1);root34=from_html('
');$$css12={hash:"svelte-xi83q0",code:'.info-panel.svelte-xi83q0 {padding:0.6rem;flex-grow:1;}\n\n /* Main Grid (Info Items) 120px to 1fr, repeat */.info-grid.svelte-xi83q0 {display:grid;grid-template-columns:minmax(120px, 1fr) 1fr;column-count:2;gap:0.6rem;margin-top:0.5rem;grid-area:"info-key" "info-value";}.info-entry.svelte-xi83q0 {display:grid;gap:0.5rem;border-radius:6px;box-sizing:border-box;min-height:1.2em;}.info-key.svelte-xi83q0 {font-weight:600;align-items:center;border-top:1px solid var(--background-modifier-hover);border-bottom:1px solid var(--background-modifier-hover);grid-area:"info-key";}.info-item.svelte-xi83q0 {align-items:start;padding:0.5rem;background:var(--background-modifier-hover, rgba(0, 0, 0, 0.03));grid-area:"info-value";}.value.svelte-xi83q0 {white-space:pre-wrap;word-break:break-word;color:var(--text-normal, #e6e6e6);min-height:1em;}\n\n @container (max-width: 340px) {.info-grid.svelte-xi83q0 {grid-template-columns:1fr;}.info-item.svelte-xi83q0 {grid-template-columns:1fr;}\n }'};toggleActiveSyncClass=(el,isActive)=>{isActive()?el.addClass("active-pane"):el.removeClass("active-pane");return{}};root_128=from_html('
  • ');root35=from_html('
    ');$$css13={hash:"svelte-9kxeje",code:"label.svelte-9kxeje {min-width:4em;width:4em;display:inline-flex;flex-direction:row;justify-content:flex-end;}ul.svelte-9kxeje {flex-grow:1;display:inline-flex;flex-direction:column;list-style-type:none;margin-block-start:0;margin-block-end:0;margin-inline-start:0;margin-inline-end:0;padding-inline-start:0;}li.svelte-9kxeje {padding:var(--size-2-1) var(--size-4-1);display:inline-flex;flex-grow:1;align-items:center;justify-content:flex-end;gap:var(--size-4-2);}li.svelte-9kxeje input:where(.svelte-9kxeje) {min-width:10em;}button.iconbutton.svelte-9kxeje {max-width:4em;}.chip.svelte-9kxeje {background-color:var(--tag-background);color:var(--tag-color);padding:var(--size-2-1) var(--size-4-1);border-radius:0.5em;font-size:0.8em;}.chip.svelte-9kxeje:empty {display:none;}"};EVENT_REQUEST_SHOW_HISTORY="show-history";toc=new Set;stubs={};ObsidianLiveSyncSettingTab=class extends import_obsidian.PluginSettingTab{constructor(app,plugin3){super(app,plugin3);this.selectedScreen="";this.settingComponents=[];this.controlledElementFunc=[];this.onSavedHandlers=[];this.inWizard=!1;this.isShown=!1;this.manifestVersion="0.25.38";this.updateInformation="# 0.25\nSince 19th July, 2025 (beta1 in 0.25.0-beta1, 13th July, 2025)\n\nThe head note of 0.25 is now in [updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md). Because 0.25 got a lot of updates, thankfully, compatibility is kept and we do not need breaking changes! In other words, when get enough stabled. The next version will be v1.0.0. Even though it my hope.\n\n## 0.25.38\n\n17th January, 2026\n\n### Fixed\n\n- Fixed an issue where indexedDB would not close correctly on some environments, causing unexpected errors during database operations.\n\n## 0.25.37\n\n15th January, 2026\n\nThank you for your patience until my return!\n\nThis release contains minor changes discovered and fixed during test implementation.\nThere are no changes affecting usage.\n\n### Refactored\n- Logging system has been slightly refactored to improve maintainability.\n- Some import statements have been unified.\n\n## 0.25.36\n\n25th December, 2025\n\n### Improved\n\n- Now the garbage collector (V3) has been implemented. (Beta)\n - This garbage collector ensures that all devices are synchronised to the latest progress to prevent inconsistencies.\n - In other words, it makes sure that no new conflicts would have arisen.\n - This feature requires additional information (via node information), but it should be more reliable.\n - This feature requires all devices have v0.25.36 or later.\n - After the garbage collector runs, the database size may be reduced (Compaction will be run automatically after GC).\n - We should have an administrative privilege on the remote database to run this garbage collector.\n- Now the plug-in and device information is stored in the remote database.\n - This information is used for the garbage collector (V3).\n - Some additional features may be added in the future using this information.\n\n## 0.25.35\n\n24th December, 2025\n\nSorry for a small release! I would like to keep things moving along like this if possible. After all, the holidays seem to be starting soon. I will be doubled by my business until the 27th though, indeed.\n\n### Fixed\n\n- Now the conflict resolution dialogue shows correctly which device only has older APIs (#764).\n\n## 0.25.34\n\n10th December, 2025\n\n### Behaviour change\n\n- The plug-in automatically fetches the missing chunks even if `Fetch chunks on demand` is disabled.\n - This change is to avoid loss of data when receiving a bulk of revisions.\n - This can be prevented by enabling `Use Only Local Chunks` in the settings.\n- Storage application now saved during each event and restored on startup.\n- Synchronisation result application is also now saved during each event and restored on startup.\n - These may avoid some unexpected loss of data when the editor crashes.\n\n### Fixed\n\n- Now the plug-in waits for the application of pended batch changes before the synchronisation starts.\n - This may avoid some unexpected loss or unexpected conflicts.\n Plug-in sends custom headers correctly when RequestAPI is used.\n- No longer causing unexpected chunk creation during `Reset synchronisation on This Device` with bucket sync.\n\n### Refactored\n\n- Synchronisation result application process has been refactored.\n- Storage application process has been refactored.\n - Please report if you find any unexpected behaviour after this update. A bit of large refactoring.\n\n## 0.25.33\n\n05th December, 2025\n\n### New feature\n\n- We can analyse the local database with the `Analyse database usage` command.\n - This command makes a TSV-style report of the database usage, which can be pasted into spreadsheet applications.\n - The report contains the number of unique chunks and shared chunks for each document revision.\n - Unique chunks indicate the actual consumption.\n - Shared chunks indicate the reference counts from other chunks with no consumption.\n - We can find which notes or files are using large amounts of storage in the database. Or which notes cannot share chunks effectively.\n - This command is useful when optimising the database size or investigating an unexpectedly large database size.\n- We can reset the notification threshold and check the remote usage at once with the `Reset notification threshold and check the remote database usage` command.\n- Commands are available from the Command Palette, or `Hatch` pane in the settings dialogue.\n\n### Fixed\n\n- Now the plug-in resets the remote size notification threshold after rebuild.\n\n## 0.25.32\n\n02nd December, 2025\n\nNow I am back from a short (?) break! Thank you all for your patience. (It is nothing major, but the first half of the year has finally come to an end).\nAnyway, I will release the things a bit by bit. I think that we need a rehabilitation or getting gears in again.\n\n### Improved\n\n- Now the plugin warns when we are in several file-related situations that may cause unexpected behaviour (#300).\n - These errors are displayed alongside issues such as file size exceeding limits.\n - Such situations include:\n - When the document has a name which is not supported by some file systems.\n - When the vault has the same file names with different letter cases.\n\n## 0.25.31\n\n18th November, 2025\n\n### Fixed\n\n- Now fetching configuration from the server can handle the empty remote correctly (reported on #756).\n- No longer asking to switch adapters during rebuilding.\n\n## 0.25.30\n\n17th November, 2025\n\nSo sorry for the quick follow-up release, due to a humble mistake in a quick causing a matter.\n\n### Fixed\n\n- Now we can save settings correctly again (#756).\n\n## ~~0.25.28~~ 0.25.29\n\n(0.25.28 was skipped due to a packaging issue.)\n\n17th November, 2025\n\n### New feature\n\n- We can now configure hidden file synchronisation to always overwrite with the latest version (#579).\n\n### Fixed\n\n- Timing dependency issues during initialisation have been mitigated (#714)\n\n### Improved\n\n- Error logs now contain stack-traces for better inspection.\n\n## 0.25.27\n\n12th November, 2025\n\n### Improved\n\n- Now we can switch the database adapter between IndexedDB and IDB without rebuilding (#747).\n - Just a local migration will be required, but faster than a full rebuild.\n- No longer checking for the adapter by `Doctor`.\n\n### Changes\n\n- The default adapter is reverted to IDB to avoid memory leaks (#747).\n\n### Fixed (?)\n\n- Reverted QR code library to v1.4.4 (To make sure #752).\n\nOlder notes are in\n[updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md).\n";this.lastVersion=~~(versionNumberString2Number(this.manifestVersion)/1e3);this.screenElements={};this.enableOnlySyncDisabled=enableOnly((()=>!this.isAnySyncEnabled()));this.onlyOnP2POrCouchDB=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_P2P)||this.isConfiguredAs("remoteType",REMOTE_COUCHDB)});this.onlyOnCouchDB=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_COUCHDB)});this.onlyOnMinIO=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_MINIO)});this.onlyOnOnlyP2P=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_P2P)});this.onlyOnCouchDBOrMinIO=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_COUCHDB)||this.isConfiguredAs("remoteType",REMOTE_MINIO)});this.checkWorkingPassphrase=async()=>{if(this.editingSettings.remoteType==REMOTE_MINIO)return!0;const settingForCheck={...this.editingSettings},replicator=this.services.replicator.getNewReplicator(settingForCheck);if(!(replicator instanceof LiveSyncCouchDBReplicator))return!0;const db=await replicator.connectRemoteCouchDBWithSetting(settingForCheck,this.services.API.isMobile(),!0);if("string"==typeof db){Logger($msg("obsidianLiveSyncSettingTab.logCheckPassphraseFailed",{db}),LOG_LEVEL_NOTICE);return!1}if(await checkSyncInfo(db.db))return!0;Logger($msg("obsidianLiveSyncSettingTab.logPassphraseNotCompatible"),LOG_LEVEL_NOTICE);return!1};this.isPassphraseValid=async()=>{if(this.editingSettings.encrypt&&""==this.editingSettings.passphrase){Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoPassphrase"),LOG_LEVEL_NOTICE);return!1}if(this.editingSettings.encrypt&&!await testCrypt()){Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoSupport"),LOG_LEVEL_NOTICE);return!1}return!0};this.rebuildDB=async method=>{if(this.editingSettings.encrypt&&""==this.editingSettings.passphrase)Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoPassphrase"),LOG_LEVEL_NOTICE);else if(!this.editingSettings.encrypt||await testCrypt()){this.editingSettings.encrypt||(this.editingSettings.passphrase="");this.applyAllSettings();await this.services.setting.suspendAllSync();await this.services.setting.suspendExtraSync();this.reloadAllSettings();this.editingSettings.isConfigured=!0;Logger($msg("obsidianLiveSyncSettingTab.logRebuildNote"),LOG_LEVEL_NOTICE);await this.saveAllDirtySettings();this.closeSetting();await delay(2e3);await this.plugin.rebuilder.$performRebuildDB(method)}else Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoSupport"),LOG_LEVEL_NOTICE)};this.plugin=plugin3;LiveSyncSetting.env=this;eventHub.onEvent("reload-setting-tab",(()=>{this.requestReload()}))}get services(){return this.plugin.services}get editingSettings(){this._editingSettings||this.reloadAllSettings();return this._editingSettings}set editingSettings(v2){this._editingSettings||this.reloadAllSettings();this._editingSettings=v2}applySetting(keys3){for(const k2 of keys3)if(this.isDirty(k2)&&!(k2 in OnDialogSettingsDefault)){this.plugin.settings[k2]=this.editingSettings[k2];this.initialSettings[k2]=this.plugin.settings[k2]}keys3.forEach((e3=>this.refreshSetting(e3)))}applyAllSettings(){var _a8;const changedKeys=Object.keys(null!=(_a8=this.editingSettings)?_a8:{}).filter((e3=>this.isDirty(e3)));this.applySetting(changedKeys);this.reloadAllSettings()}async saveLocalSetting(key3){var _a8,_b5,_c3,_d2;if("configPassphrase"==key3){localStorage.setItem("ls-setting-passphrase",null!=(_b5=null==(_a8=this.editingSettings)?void 0:_a8[key3])?_b5:"");return await Promise.resolve()}if("deviceAndVaultName"==key3){this.services.setting.setDeviceAndVaultName(null!=(_d2=null==(_c3=this.editingSettings)?void 0:_c3[key3])?_d2:"");this.services.setting.saveDeviceAndVaultName();return await Promise.resolve()}}async saveSettings(keys3){let hasChanged=!1;const appliedKeys=[];for(const k2 of keys3)if(this.isDirty(k2)){appliedKeys.push(k2);if(k2 in OnDialogSettingsDefault){await this.saveLocalSetting(k2);this.initialSettings[k2]=this.editingSettings[k2]}else{this.plugin.settings[k2]=this.editingSettings[k2];this.initialSettings[k2]=this.plugin.settings[k2];hasChanged=!0}}hasChanged&&await this.plugin.saveSettings();const handlers2=this.onSavedHandlers.filter((e3=>-1!==appliedKeys.indexOf(e3.key))).map((e3=>e3.handler(this.editingSettings[e3.key])));await Promise.all(handlers2);keys3.forEach((e3=>this.refreshSetting(e3)))}async saveAllDirtySettings(){var _a8;const changedKeys=Object.keys(null!=(_a8=this.editingSettings)?_a8:{}).filter((e3=>this.isDirty(e3)));await this.saveSettings(changedKeys);this.reloadAllSettings()}requestUpdate(){scheduleTask("update-setting",10,(()=>{for(const setting of this.settingComponents)setting._onUpdate();for(const func of this.controlledElementFunc)func()}))}reloadAllLocalSettings(){const ret={...OnDialogSettingsDefault};ret.configPassphrase=localStorage.getItem("ls-setting-passphrase")||"";ret.preset="";ret.deviceAndVaultName=this.services.setting.getDeviceAndVaultName();return ret}computeAllLocalSettings(){var _a8,_b5;return{syncMode:(null==(_a8=this.editingSettings)?void 0:_a8.liveSync)?"LIVESYNC":(null==(_b5=this.editingSettings)?void 0:_b5.periodicReplication)?"PERIODIC":"ONEVENTS"}}reloadAllSettings(skipUpdate=!1){const localSetting=this.reloadAllLocalSettings();this._editingSettings={...this.plugin.settings,...localSetting};this._editingSettings={...this.editingSettings,...this.computeAllLocalSettings()};this.initialSettings={...this.editingSettings};skipUpdate||this.requestUpdate()}refreshSetting(key3){const localSetting=this.reloadAllLocalSettings();if(key3 in this.plugin.settings)if(key3 in localSetting){this.initialSettings[key3]=localSetting[key3];this.editingSettings[key3]=localSetting[key3]}else{this.initialSettings[key3]=this.plugin.settings[key3];this.editingSettings[key3]=this.initialSettings[key3]}this.editingSettings={...this.editingSettings,...this.computeAllLocalSettings()};this.requestUpdate()}isDirty(key3){var _a8;return isObjectDifferent(this.editingSettings[key3],null==(_a8=this.initialSettings)?void 0:_a8[key3])}isSomeDirty(keys3){return keys3.some((e3=>this.isDirty(e3)))}isConfiguredAs(key3,value){return!!this.editingSettings&&this.editingSettings[key3]==value}async testConnection(settingOverride={}){const trialSetting={...this.editingSettings,...settingOverride},replicator=await this.services.replicator.getNewReplicator(trialSetting);if(!replicator){Logger("No replicator available for the current settings.",LOG_LEVEL_NOTICE);return}await replicator.tryConnectRemote(trialSetting);const status=await replicator.getRemoteStatus(trialSetting);status&&status.estimatedSize&&Logger($msg("obsidianLiveSyncSettingTab.logEstimatedSize",{size:sizeToHumanReadable(status.estimatedSize)}),LOG_LEVEL_NOTICE)}closeSetting(){this.plugin.app.setting.close()}handleElement(element2,func){const updateFunc=((element3,func2)=>{const prev={};return()=>{const newValue=func2(),keys3=Object.keys(newValue);for(const k2 of keys3)if(prev[k2]!==newValue[k2]){"visibility"==k2&&element3.toggleClass("sls-setting-hidden",!newValue[k2]);prev[k2]=newValue[k2]}}})(element2,func);this.controlledElementFunc.push(updateFunc);updateFunc()}createEl(el,tag3,o2,callback,func){const element2=el.createEl(tag3,o2,callback);func&&this.handleElement(element2,func);return element2}addEl(el,tag3,o2,callback,func){const elm=this.createEl(el,tag3,o2,callback,func);return Promise.resolve(elm)}addOnSaved(key3,func){this.onSavedHandlers.push({key:key3,handler:func})}resetEditingSettings(){this._editingSettings=void 0;this.initialSettings=void 0}hide(){this.isShown=!1}requestReload(){var _a8;if(this.isShown){const newConf=this.plugin.settings,keys3=Object.keys(newConf);let hasLoaded=!1;for(const k2 of keys3)if(isObjectDifferent(newConf[k2],null==(_a8=this.initialSettings)?void 0:_a8[k2]))if(this.isDirty(k2))this.plugin.confirm.askInPopup(`config-reloaded-${k2}`,$msg("obsidianLiveSyncSettingTab.msgSettingModified",{setting:getConfName(k2)}),(anchor=>{anchor.text=$msg("obsidianLiveSyncSettingTab.optionHere");anchor.addEventListener("click",(()=>{this.refreshSetting(k2);this.display()}))}));else{this.refreshSetting(k2);if(k2 in OnDialogSettingsDefault)continue;hasLoaded=!0}hasLoaded?this.display():this.requestUpdate()}else this.reloadAllSettings(!0)}changeDisplay(screen){for(const k2 in this.screenElements)k2==screen?this.screenElements[k2].forEach((element2=>element2.removeClass("setting-collapsed"))):this.screenElements[k2].forEach((element2=>element2.addClass("setting-collapsed")));this.menuEl&&this.menuEl.querySelectorAll(".sls-setting-label").forEach((element2=>{if(element2.hasClass(`c-${screen}`)){element2.addClass("selected");element2.querySelector("input[type=radio]").checked=!0}else{element2.removeClass("selected");element2.querySelector("input[type=radio]").checked=!1}}));this.selectedScreen=screen}async enableMinimalSetup(){this.editingSettings.liveSync=!1;this.editingSettings.periodicReplication=!1;this.editingSettings.syncOnSave=!1;this.editingSettings.syncOnEditorSave=!1;this.editingSettings.syncOnStart=!1;this.editingSettings.syncOnFileOpen=!1;this.editingSettings.syncAfterMerge=!1;this.plugin.replicator.closeReplication();await this.saveAllDirtySettings();this.containerEl.addClass("isWizard");this.inWizard=!0;this.changeDisplay("20")}addScreenElement(key3,element2){key3 in this.screenElements||(this.screenElements[key3]=[]);this.screenElements[key3].push(element2)}selectPane(event2){const target=event2.target;if("INPUT"==target.tagName){const value=target.getAttribute("value");value&&this.selectedScreen!=value&&this.changeDisplay(value)}}isNeedRebuildLocal(){return this.isSomeDirty(["useIndexedDBAdapter","doNotUseFixedRevisionForChunks","handleFilenameCaseSensitive","passphrase","useDynamicIterationCount","usePathObfuscation","encrypt"])}isNeedRebuildRemote(){return this.isSomeDirty(["doNotUseFixedRevisionForChunks","handleFilenameCaseSensitive","passphrase","useDynamicIterationCount","usePathObfuscation","encrypt"])}isAnySyncEnabled(){var _a8,_b5,_c3,_d2;return!(this.isConfiguredAs("isConfigured",!1)||!this.isConfiguredAs("liveSync",!0)&&!this.isConfiguredAs("periodicReplication",!0)&&!this.isConfiguredAs("syncOnFileOpen",!0)&&!this.isConfiguredAs("syncOnSave",!0)&&!this.isConfiguredAs("syncOnEditorSave",!0)&&!this.isConfiguredAs("syncOnStart",!0)&&!this.isConfiguredAs("syncAfterMerge",!0)&&!this.isConfiguredAs("syncOnFileOpen",!0)&&"CONNECTED"!=(null==(_b5=null==(_a8=this.plugin)?void 0:_a8.replicator)?void 0:_b5.syncStatus)&&"PAUSED"!=(null==(_d2=null==(_c3=this.plugin)?void 0:_c3.replicator)?void 0:_d2.syncStatus))}async confirmRebuild(){if(!await this.isPassphraseValid()){Logger("Passphrase is not valid, please fix it.",LOG_LEVEL_NOTICE);return}const OPTION_FETCH=$msg("obsidianLiveSyncSettingTab.optionFetchFromRemote"),OPTION_REBUILD_BOTH=$msg("obsidianLiveSyncSettingTab.optionRebuildBoth"),OPTION_ONLY_SETTING=$msg("obsidianLiveSyncSettingTab.optionSaveOnlySettings"),OPTION_CANCEL=$msg("obsidianLiveSyncSettingTab.optionCancel"),title=$msg("obsidianLiveSyncSettingTab.titleRebuildRequired"),note=$msg("obsidianLiveSyncSettingTab.msgRebuildRequired",{OPTION_REBUILD_BOTH,OPTION_FETCH,OPTION_ONLY_SETTING}),buttons=[OPTION_FETCH,OPTION_REBUILD_BOTH,OPTION_ONLY_SETTING,OPTION_CANCEL],result=await confirmWithMessage(this.plugin,title,note,buttons,OPTION_CANCEL,0);if(result!=OPTION_CANCEL&&(result!=OPTION_FETCH||await this.checkWorkingPassphrase()||"yes"==await this.plugin.confirm.askYesNoDialog($msg("obsidianLiveSyncSettingTab.msgAreYouSureProceed"),{defaultOption:"No"}))){this.editingSettings.encrypt||(this.editingSettings.passphrase="");await this.saveAllDirtySettings();await this.applyAllSettings();if(result==OPTION_FETCH){await this.plugin.storageAccess.writeFileAuto(FLAGMD_REDFLAG3_HR,"");this.services.appLifecycle.scheduleRestart();this.closeSetting()}else if(result==OPTION_REBUILD_BOTH){await this.plugin.storageAccess.writeFileAuto(FLAGMD_REDFLAG2_HR,"");this.services.appLifecycle.scheduleRestart();this.closeSetting()}else result==OPTION_ONLY_SETTING&&await this.plugin.saveSettings()}}display(){const changeDisplay=this.changeDisplay.bind(this),{containerEl}=this;this.settingComponents.length=0;this.controlledElementFunc.length=0;this.onSavedHandlers.length=0;this.screenElements={};null!=this._editingSettings&&null!=this.initialSettings||this.reloadAllSettings();if(void 0===this.editingSettings||null==this.initialSettings)return;this.isShown=!0;containerEl.empty();containerEl.addClass("sls-setting");containerEl.removeClass("isWizard");setStyle(containerEl,"menu-setting-poweruser",(()=>this.isConfiguredAs("usePowerUserMode",!0)));setStyle(containerEl,"menu-setting-advanced",(()=>this.isConfiguredAs("useAdvancedMode",!0)));setStyle(containerEl,"menu-setting-edgecase",(()=>this.isConfiguredAs("useEdgeCaseMode",!0)));const menuWrapper=this.createEl(containerEl,"div",{cls:"sls-setting-menu-wrapper"});this.menuEl&&this.menuEl.remove();this.menuEl=menuWrapper.createDiv("");this.menuEl.addClass("sls-setting-menu");const menuTabs=this.menuEl.querySelectorAll(".sls-setting-label");this.createEl(menuWrapper,"div",{cls:"sls-setting-menu-buttons"},(el=>{el.addClass("wizardHidden");el.createEl("label",{text:$msg("obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied")});this.addEl(el,"button",{text:$msg("obsidianLiveSyncSettingTab.optionApply"),cls:"mod-warning"},(buttonEl=>{buttonEl.addEventListener("click",(()=>fireAndForget((async()=>await this.confirmRebuild()))))}))}),visibleOnly((()=>this.isNeedRebuildLocal()||this.isNeedRebuildRemote())));let paneNo=0;const addPane=(parentEl,title,icon,order,wizardHidden,level)=>{const el=this.createEl(parentEl,"div",{text:""});{const mdTitle=`${paneNo++}. ${title}${getLevelStr(null!=level?level:"")}`;el.setAttribute("data-pane",mdTitle);toc.add(`| ${icon} | [${mdTitle}](#${mdTitle.toLowerCase().replace(/ /g,"-").replace(/[^\w\s-]/g,"")}) | `)}setLevelClass(el,level);el.createEl("h3",{text:title,cls:"sls-setting-pane-title"});this.menuEl&&this.menuEl.createEl("label",{cls:`sls-setting-label c-${order} ${wizardHidden?"wizardHidden":""}`},(el2=>{setLevelClass(el2,level);const inputEl=el2.createEl("input",{type:"radio",name:"disp",value:`${order}`,cls:"sls-setting-tab"});el2.createEl("div",{cls:"sls-setting-menu-btn",text:icon,title});inputEl.addEventListener("change",(evt=>this.selectPane(evt)));inputEl.addEventListener("click",(evt=>this.selectPane(evt)))}));this.addScreenElement(`${order}`,el);return Promise.resolve(el)},panelNoMap={},addPanel=(parentEl,title,callback,func,level)=>{const el=this.createEl(parentEl,"div",{text:""},callback,func);{const paneNo2=findAttrFromParent(parentEl,"data-pane");paneNo2 in panelNoMap||(panelNoMap[paneNo2]=0);panelNoMap[paneNo2]+=1;const panelNo=panelNoMap[paneNo2];el.setAttribute("data-panel",`${panelNo}. ${title}${getLevelStr(null!=level?level:"")}`)}setLevelClass(el,level);this.createEl(el,"h4",{text:title,cls:"sls-setting-panel-title"});return Promise.resolve(el)};menuTabs.forEach((element2=>{const e3=element2.querySelector(".sls-setting-tab");e3&&e3.addEventListener("change",(event2=>{menuTabs.forEach((element3=>element3.removeClass("selected")));this.changeDisplay(event2.currentTarget.value);element2.addClass("selected")}))}));const bindPane=paneFunc=>paneEl=>{paneFunc.call(this,paneEl,{addPane,addPanel})};addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelChangeLog"),"💬",100,!1).then(bindPane(paneChangeLog));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelSetup"),"🧙‍♂️",110,!1).then(bindPane(paneSetup));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelGeneralSettings"),"⚙️",20,!1).then(bindPane(paneGeneral));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelRemoteConfiguration"),"🛰️",0,!1).then(bindPane(paneRemoteConfig));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.titleSyncSettings"),"🔄",30,!1).then(bindPane(paneSyncSettings));addPane(containerEl,"Selector","🚦",33,!1,LEVEL_ADVANCED).then(bindPane(paneSelector));addPane(containerEl,"Customization sync","🔌",60,!1,LEVEL_ADVANCED).then(bindPane(paneCustomisationSync));addPane(containerEl,"Hatch","🧰",50,!0).then(bindPane(paneHatch));addPane(containerEl,"Advanced","🔧",46,!1,LEVEL_ADVANCED).then(bindPane(paneAdvanced));addPane(containerEl,"Power users","💪",47,!0,LEVEL_POWER_USER).then(bindPane(panePowerUsers));addPane(containerEl,"Patches","🩹",51,!1,LEVEL_EDGE_CASE).then(bindPane(panePatches));addPane(containerEl,"Maintenance","🎛️",70,!0).then(bindPane(paneMaintenance));yieldNextAnimationFrame().then((()=>{""==this.selectedScreen?this.lastVersion!=this.editingSettings.lastReadUpdates?this.editingSettings.isConfigured?changeDisplay("100"):changeDisplay("110"):this.isAnySyncEnabled()?changeDisplay("20"):changeDisplay("110"):changeDisplay(this.selectedScreen);this.requestUpdate()}))}getMinioJournalSyncClient(){return new JournalSyncMinio(this.plugin.settings,this.plugin.simpleStore,this.plugin)}async resetRemoteBucket(){const minioJournal=this.getMinioJournalSyncClient();await minioJournal.resetBucket()}};ModuleObsidianSettingDialogue=class extends AbstractObsidianModule{_everyOnloadStart(){this.settingTab=new ObsidianLiveSyncSettingTab(this.app,this.plugin);this.plugin.addSettingTab(this.settingTab);eventHub.onEvent("request-open-settings",(()=>this.openSetting()));eventHub.onEvent("request-open-setting-wizard",(()=>{this.openSetting();this.settingTab.enableMinimalSetup()}));return Promise.resolve(!0)}openSetting(){this.app.setting.open();this.app.setting.openTabById("obsidian-livesync")}get appId(){return`${"appId"in this.app?this.app.appId:""}`}onBindFunction(core,services){services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this))}};DocumentHistoryModal=class extends import_obsidian.Modal{constructor(app,plugin3,file,id,revision){super(app);this.showDiff=!1;this.revs_info=[];this.currentText="";this.currentDeleted=!1;this.BlobURLs=new Map;this.plugin=plugin3;this.file=file instanceof import_obsidian.TFile?getPathFromTFile(file):file;this.id=id;this.initialRev=revision;!file&&id&&(this.file=this.services.path.id2path(id));"1"==localStorage.getItem("ols-history-highlightdiff")&&(this.showDiff=!0)}get services(){return this.plugin.services}async loadFile(initialRev){var _a8,_b5;this.id||(this.id=await this.services.path.path2id(this.file));const db=this.plugin.localDatabase;try{const w2=await db.getRaw(this.id,{revs_info:!0});this.revs_info=null!=(_b5=null==(_a8=w2._revs_info)?void 0:_a8.filter((e3=>"available"==(null==e3?void 0:e3.status))))?_b5:[];this.range.max=`${Math.max(this.revs_info.length-1,0)}`;this.range.value=this.range.max;this.fileInfo.setText(`${this.file} / ${this.revs_info.length} revisions`);await this.loadRevs(initialRev)}catch(ex){if(isErrorOfMissingDoc(ex)){this.range.max="0";this.range.value="";this.range.disabled=!0;this.contentView.setText("We don't have any history for this note.")}else{this.contentView.setText("Error while loading file.");Logger(ex,LOG_LEVEL_VERBOSE)}}}async loadRevs(initialRev){if(0==this.revs_info.length)return;if(initialRev){const rIndex=this.revs_info.findIndex((e3=>e3.rev==initialRev));rIndex>=0&&(this.range.value=""+(this.revs_info.length-1-rIndex))}const index6=this.revs_info.length-1-this.range.value/1,rev3=this.revs_info[index6];await this.showExactRev(rev3.rev)}revokeURL(key3){const v2=this.BlobURLs.get(key3);v2&&URL.revokeObjectURL(v2);this.BlobURLs.delete(key3)}generateBlobURL(key3,data){this.revokeURL(key3);const v2=URL.createObjectURL(new Blob([data],{endings:"transparent",type:"application/octet-stream"}));this.BlobURLs.set(key3,v2);return v2}async showExactRev(rev3){const db=this.plugin.localDatabase,w2=await db.getDBEntry(this.file,{rev:rev3},!1,!1,!0);this.currentText="";this.currentDeleted=!1;if(!1===w2){this.currentDeleted=!0;this.info.innerHTML="";this.contentView.innerHTML=`Could not read this revision
    (${rev3})`}else{this.currentDoc=w2;this.info.innerHTML=`Modified:${new Date(w2.mtime).toLocaleString()}`;let result;const w1data=readDocument(w2);this.currentDeleted=!!w2.deleted;if(this.showDiff){const prevRevIdx=this.revs_info.length-1-(this.range.value/1-1);if(prevRevIdx>=0&&prevRevIdx"+escapeStringToHTML(x2)+"":x1==import_diff_match_patch.DIFF_EQUAL?result+=""+escapeStringToHTML(x2)+"":x1==import_diff_match_patch.DIFF_INSERT&&(result+=""+escapeStringToHTML(x2)+"")}result=result.replace(/\n/g,"
    ")}else if(isImage(this.file)){result=`
    \n
    \n \n \n
    \n
    `;this.contentView.removeClass("op-pre")}}}if(null==result)if("string"!=typeof w1data){if(isImage(this.file)){result=`
    \n
    \n\n
    \n
    `;this.contentView.removeClass("op-pre")}}else result=escapeStringToHTML(w1data);null==result&&(result="string"==typeof w1data?escapeStringToHTML(w1data):"Binary file");this.contentView.innerHTML=(this.currentDeleted?"(At this revision, the file has been deleted)\n":"")+result}}onOpen(){const{contentEl}=this;this.titleEl.setText("Document History");contentEl.empty();this.fileInfo=contentEl.createDiv("");this.fileInfo.addClass("op-info");const divView=contentEl.createDiv("");divView.addClass("op-flex");divView.createEl("input",{type:"range"},(e3=>{this.range=e3;e3.addEventListener("change",(e4=>{scheduleOnceIfDuplicated("loadRevs",(()=>this.loadRevs()))}));e3.addEventListener("input",(e4=>{scheduleOnceIfDuplicated("loadRevs",(()=>this.loadRevs()))}))}));contentEl.createDiv("",(e3=>{e3.createEl("label",{},(label2=>{label2.appendChild(createEl("input",{type:"checkbox"},(checkbox=>{this.showDiff&&(checkbox.checked=!0);checkbox.addEventListener("input",(evt=>{this.showDiff=checkbox.checked;localStorage.setItem("ols-history-highlightdiff",1==this.showDiff?"1":"");scheduleOnceIfDuplicated("loadRevs",(()=>this.loadRevs()))}))})));label2.appendText("Highlight diff")}))})).addClass("op-info");this.info=contentEl.createDiv("");this.info.addClass("op-info");fireAndForget((async()=>await this.loadFile(this.initialRev)));const div=contentEl.createDiv({text:"Loading old revisions..."});this.contentView=div;div.addClass("op-scrollable");div.addClass("op-pre");const buttons=contentEl.createDiv("");buttons.createEl("button",{text:"Copy to clipboard"},(e3=>{e3.addClass("mod-cta");e3.addEventListener("click",(()=>{fireAndForget((async()=>{await navigator.clipboard.writeText(this.currentText);Logger("Old content copied to clipboard",LOG_LEVEL_NOTICE)}))}))}));const focusFile=async path2=>{const targetFile=this.plugin.app.vault.getFileByPath(path2);if(targetFile){const leaf=this.plugin.app.workspace.getLeaf(!1);await leaf.openFile(targetFile)}else Logger("Unable to display the file in the editor",LOG_LEVEL_NOTICE)};buttons.createEl("button",{text:"Back to this revision"},(e3=>{e3.addClass("mod-cta");e3.addEventListener("click",(()=>{fireAndForget((async()=>{const pathToWrite=stripPrefix(this.file);if(!isValidPath(pathToWrite)){Logger("Path is not valid to write content.",LOG_LEVEL_INFO);return}if(!this.currentDoc){Logger("No active file loaded.",LOG_LEVEL_INFO);return}const d4=readContent(this.currentDoc);await this.plugin.storageAccess.writeHiddenFileAuto(pathToWrite,d4);await focusFile(pathToWrite);this.close()}))}))}))}onClose(){const{contentEl}=this;contentEl.empty();this.BlobURLs.forEach((value=>{console.log(value);value&&URL.revokeObjectURL(value)}))}};ModuleObsidianDocumentHistory=class extends AbstractObsidianModule{_everyOnloadStart(){this.addCommand({id:"livesync-history",name:"Show history",callback:()=>{const file=this.services.vault.getActiveFilePath();file&&this.showHistory(file,void 0)}});this.addCommand({id:"livesync-filehistory",name:"Pick a file to show history",callback:()=>{fireAndForget((async()=>await this.fileHistory()))}});eventHub.onEvent(EVENT_REQUEST_SHOW_HISTORY,(({file,fileOnDB})=>{this.showHistory(file,fileOnDB._id)}));return Promise.resolve(!0)}showHistory(file,id){new DocumentHistoryModal(this.app,this.plugin,file,id).open()}async fileHistory(){const notes=[];for await(const doc of this.localDatabase.findAllDocs())notes.push({id:doc._id,path:getPath2(doc),dispPath:getPath2(doc),mtime:doc.mtime});notes.sort(((a2,b3)=>b3.mtime-a2.mtime));const notesList=notes.map((e3=>e3.dispPath)),target=await this.core.confirm.askSelectString("File to view History",notesList);if(target){const targetId=notes.find((e3=>e3.dispPath==target));this.showHistory(targetId.path,targetId.id)}}onBindFunction(core,services){services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this))}};root_129=from_html('
    Gathering information...
    ');root_218=from_html('Chunks');root_38=from_html('
    ');root_414=from_html('
    ');root_67=from_html(' ');root_810=from_html(' ');root_55=from_html(' ');root_96=from_html('
    ');root_105=from_html('
    ');root36=from_html('

    Vault history

    DatePathRevStat
    ');$$css14={hash:"svelte-1ddarry",code:".svelte-1ddarry {box-sizing:border-box;}.globalhistory.svelte-1ddarry {margin-bottom:2em;}table.svelte-1ddarry {width:100%;}.more.svelte-1ddarry > div:where(.svelte-1ddarry) {display:flex;}.more.svelte-1ddarry > div:where(.svelte-1ddarry) > button:where(.svelte-1ddarry) {flex-grow:1;}th.svelte-1ddarry {position:sticky;top:0;backdrop-filter:blur(10px);}td.mtime.svelte-1ddarry {white-space:break-spaces;}td.path.svelte-1ddarry {word-break:break-word;}.row.svelte-1ddarry {display:flex;flex-direction:row;flex-wrap:wrap;}.row.svelte-1ddarry > label:where(.svelte-1ddarry) {display:flex;align-items:center;min-width:5em;}.row.svelte-1ddarry > input:where(.svelte-1ddarry) {flex-grow:1;}.filenames.svelte-1ddarry {display:flex;flex-direction:column;}.filenames.svelte-1ddarry > .path:where(.svelte-1ddarry) {font-size:70%;}.rev.svelte-1ddarry {text-overflow:ellipsis;max-width:3em;display:inline-block;overflow:hidden;white-space:nowrap;}"};GlobalHistoryView=class extends SvelteItemView{constructor(leaf,plugin3){super(leaf);this.icon="clock";this.title="";this.navigation=!0;this.plugin=plugin3}instantiateComponent(target){return mount(GlobalHistory,{target,props:{plugin:this.plugin}})}getIcon(){return"clock"}getViewType(){return"global-history"}getDisplayText(){return"Vault history"}};ModuleObsidianGlobalHistory=class extends AbstractObsidianModule{_everyOnloadStart(){this.addCommand({id:"livesync-global-history",name:"Show vault history",callback:()=>{this.showGlobalHistory()}});this.registerView("global-history",(leaf=>new GlobalHistoryView(leaf,this.plugin)));return Promise.resolve(!0)}showGlobalHistory(){this.services.API.showWindow("global-history")}onBindFunction(core,services){services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this))}};SETTING_HEADER="````yaml:livesync-setting\n";ModuleObsidianSettingsAsMarkdown=class extends AbstractObsidianModule{_everyOnloadStart(){this.addCommand({id:"livesync-export-config",name:"Write setting markdown manually",checkCallback:checking=>{if(checking)return""!=this.settings.settingSyncFile;fireAndForget((async()=>{await this.services.setting.saveSettingData()}))}});this.addCommand({id:"livesync-import-config",name:"Parse setting file",editorCheckCallback:(checking,editor,ctx)=>{if(checking){const doc=editor.getValue();return""!=this.extractSettingFromWholeText(doc).body}if(ctx.file){const file=ctx.file;fireAndForget((async()=>await this.checkAndApplySettingFromMarkdown(file.path,!1)))}}});eventHub.onEvent("event-file-changed",(info3=>{fireAndForget((()=>this.checkAndApplySettingFromMarkdown(info3.file,info3.automated)))}));eventHub.onEvent(EVENT_SETTING_SAVED,(settings=>{""!=settings.settingSyncFile&&fireAndForget((()=>this.saveSettingToMarkdown(settings.settingSyncFile)))}));return Promise.resolve(!0)}extractSettingFromWholeText(data){if(-1===data.indexOf(SETTING_HEADER))return{preamble:data,body:"",postscript:""};const startMarkerPos=data.indexOf(SETTING_HEADER),dataStartPos=-1==startMarkerPos?data.length:startMarkerPos,endMarkerPos=-1==startMarkerPos?data.length:data.indexOf("\n````",dataStartPos),dataEndPos=-1==endMarkerPos?data.length:endMarkerPos,body=data.substring(dataStartPos+26,dataEndPos);return{preamble:data.substring(0,dataStartPos),body,postscript:data.substring(dataEndPos+5+1)}}async parseSettingFromMarkdown(filename,data){if(!await this.core.storageAccess.isExists(filename))return{preamble:"",body:"",postscript:""};if(data)return this.extractSettingFromWholeText(data);const parseData=null!=data?data:await this.core.storageAccess.readFileText(filename);return this.extractSettingFromWholeText(parseData)}async checkAndApplySettingFromMarkdown(filename,automated){if(automated&&!this.settings.notifyAllSettingSyncFile&&(!this.settings.settingSyncFile||this.settings.settingSyncFile!=filename)){this._log(`Setting file (${filename}) does not match the current configuration. skipped.`,LOG_LEVEL_DEBUG);return}const{body}=await this.parseSettingFromMarkdown(filename);let newSetting={};try{newSetting=(0,import_obsidian.parseYaml)(body)}catch(ex){this._log("Could not parse YAML",LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return}if("settingSyncFile"in newSetting&&newSetting.settingSyncFile!=filename){this._log("This setting file seems to backed up one. Please fix the filename or settingSyncFile value.",automated?LOG_LEVEL_INFO:LOG_LEVEL_NOTICE);return}let settingToApply={...DEFAULT_SETTINGS};settingToApply={...settingToApply,...newSetting};if(!(null==settingToApply?void 0:settingToApply.writeCredentialsForSettingSync)){settingToApply.couchDB_USER=this.settings.couchDB_USER;settingToApply.couchDB_PASSWORD=this.settings.couchDB_PASSWORD;settingToApply.passphrase=this.settings.passphrase}if(!isObjectDifferent(this.generateSettingForMarkdown(this.settings,settingToApply.writeCredentialsForSettingSync),this.generateSettingForMarkdown(settingToApply))){this._log("Setting markdown has been detected, but not changed.",automated?LOG_LEVEL_INFO:LOG_LEVEL_NOTICE);return}const addMsg=this.settings.settingSyncFile!=filename?" (This is not-active file)":"";this.core.confirm.askInPopup("apply-setting-from-md",`Setting markdown ${filename}${addMsg} has been detected. Apply this from {HERE}.`,(anchor=>{anchor.text="HERE";anchor.addEventListener("click",(()=>{fireAndForget((async()=>{const APPLY_AND_RESTART="Apply settings and restart obsidian",APPLY_AND_REBUILD="Apply settings and restart obsidian with red_flag_rebuild.md",APPLY_AND_FETCH="Apply settings and restart obsidian with red_flag_fetch.md",result=await this.core.confirm.askSelectStringDialogue("Ready for apply the setting.",[APPLY_AND_RESTART,"Apply settings",APPLY_AND_FETCH,APPLY_AND_REBUILD,"Cancel"],{defaultAction:APPLY_AND_RESTART});if("Apply settings"==result||result==APPLY_AND_RESTART||result==APPLY_AND_REBUILD||result==APPLY_AND_FETCH){this.core.settings=settingToApply;await this.services.setting.saveSettingData();if("Apply settings"==result){this._log("Loaded settings have been applied!",LOG_LEVEL_NOTICE);return}result==APPLY_AND_REBUILD&&await this.core.rebuilder.scheduleRebuild();result==APPLY_AND_FETCH&&await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.performRestart()}}))}))}))}generateSettingForMarkdown(settings,keepCredential){const saveData={...settings||this.settings};delete saveData.encryptedCouchDBConnection;delete saveData.encryptedPassphrase;delete saveData.additionalSuffixOfDatabaseName;if(!saveData.writeCredentialsForSettingSync&&!keepCredential){delete saveData.couchDB_USER;delete saveData.couchDB_PASSWORD;delete saveData.passphrase;delete saveData.jwtKey;delete saveData.jwtKid;delete saveData.jwtSub;delete saveData.couchDB_CustomHeaders;delete saveData.bucketCustomHeaders}return saveData}async saveSettingToMarkdown(filename){const saveData=this.generateSettingForMarkdown();if(!await this.core.storageAccess.isExists(filename)){await this.core.storageAccess.ensureDir(filename);const initialContent='This file contains Self-hosted LiveSync settings as YAML.\nExcept for the `livesync-setting` code block, we can add a note for free.\n\nIf the name of this file matches the value of the "settingSyncFile" setting inside the `livesync-setting` block, LiveSync will tell us whenever the settings change. We can decide to accept or decline the remote setting. (In other words, we can back up this file by renaming it to another name).\n\nWe can perform a command in this file.\n- `Parse setting file` : load the setting from the file.\n\n**Note** Please handle it with all of your care if you have configured to write credentials in.\n\n\n';await this.core.storageAccess.writeFileAuto(filename,initialContent+SETTING_HEADER+"\n\n````")}const data=await this.core.storageAccess.readFileText(filename),{preamble,body,postscript}=this.extractSettingFromWholeText(data),newBody=(0,import_obsidian.stringifyYaml)(saveData);if(newBody==body)this._log("Markdown setting: Nothing had been changed",LOG_LEVEL_VERBOSE);else{await this.core.storageAccess.writeFileAuto(filename,preamble+SETTING_HEADER+newBody+"\n````"+postscript);this._log(`Markdown setting: ${filename} has been updated!`,LOG_LEVEL_VERBOSE)}}onBindFunction(core,services){services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this))}};ModuleInitializerFile=class extends AbstractModule{async _performFullScan(showingNotice,ignoreSuspending=!1){this._log("Opening the key-value database",LOG_LEVEL_VERBOSE);const isInitialized=await this.core.kvDB.get("initialized")||!1;if(!this.settings.isConfigured){showingNotice&&this._log("LiveSync is not configured yet. Synchronising between the storage and the local database is now prevented.",LOG_LEVEL_NOTICE,"syncAll");return!1}if(!ignoreSuspending&&this.settings.suspendFileWatching){showingNotice&&this._log("Now suspending file watching. Synchronising between the storage and the local database is now prevented.",LOG_LEVEL_NOTICE,"syncAll");return!1}showingNotice&&this._log("Initializing",LOG_LEVEL_NOTICE,"syncAll");if(isInitialized){this._log("Restoring storage state",LOG_LEVEL_VERBOSE);await this.core.storageAccess.restoreState()}this._log("Initialize and checking database files");this._log("Checking deleted files");await this.collectDeletedFiles();this._log("Collecting local files on the storage",LOG_LEVEL_VERBOSE);const filesStorageSrc=this.core.storageAccess.getFiles(),_filesStorage=[];for(const f4 of filesStorageSrc)await this.services.vault.isTargetFile(f4.path,f4!=filesStorageSrc[0])&&_filesStorage.push(f4);const convertCase=path2=>this.settings.handleFilenameCaseSensitive?path2:path2.toLowerCase(),storageFileNameMap=Object.fromEntries(_filesStorage.map((e3=>[e3.path,e3]))),storageFileNames=Object.keys(storageFileNameMap),storageFileNameCapsPair=storageFileNames.map((e3=>[e3,convertCase(e3)])),storageFileNameCI2CS=Object.fromEntries(storageFileNameCapsPair.map((e3=>[e3[1],e3[0]])));this._log("Collecting local files on the DB",LOG_LEVEL_VERBOSE);const _DBEntries=[];let count=0;for await(const doc of this.localDatabase.findAllNormalDocs({conflicts:!0})){count++;count%25==0&&this._log(`Collecting local files on the DB: ${count}`,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"syncAll");const path2=getPath2(doc);if(isValidPath(path2)&&await this.services.vault.isTargetFile(path2,!0)){if(!isMetaEntry(doc)){this._log(`Invalid entry: ${path2}`,LOG_LEVEL_INFO);continue}_DBEntries.push(doc)}}const databaseFileNameMap=Object.fromEntries(_DBEntries.map((e3=>[getPath2(e3),e3]))),databaseFileNames=Object.keys(databaseFileNameMap),databaseFileNameCapsPair=databaseFileNames.map((e3=>[e3,convertCase(e3)])),databaseFileNameCI2CS=Object.fromEntries(databaseFileNameCapsPair.map((e3=>[e3[1],e3[0]]))),allFiles=unique([...Object.keys(databaseFileNameCI2CS),...Object.keys(storageFileNameCI2CS)]);this._log(`Total files in the database: ${databaseFileNames.length}`,LOG_LEVEL_VERBOSE,"syncAll");this._log(`Total files in the storage: ${storageFileNames.length}`,LOG_LEVEL_VERBOSE,"syncAll");this._log(`Total files: ${allFiles.length}`,LOG_LEVEL_VERBOSE,"syncAll");const filesExistOnlyInStorage=allFiles.filter((e3=>!databaseFileNameCI2CS[e3])),filesExistOnlyInDatabase=allFiles.filter((e3=>!storageFileNameCI2CS[e3])),filesExistBoth=allFiles.filter((e3=>databaseFileNameCI2CS[e3]&&storageFileNameCI2CS[e3]));this._log(`Files exist only in storage: ${filesExistOnlyInStorage.length}`,LOG_LEVEL_VERBOSE,"syncAll");this._log(`Files exist only in database: ${filesExistOnlyInDatabase.length}`,LOG_LEVEL_VERBOSE,"syncAll");this._log(`Files exist both in storage and database: ${filesExistBoth.length}`,LOG_LEVEL_VERBOSE,"syncAll");this._log("Synchronising...");const processStatus={},logLevel=showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,updateLog=throttle(((key3,msg)=>{processStatus[key3]=msg;const log2=Object.values(processStatus).join("\n");this._log(log2,logLevel,"syncAll")}),25),initProcess=[],runAll=async(procedureName,objects,callback)=>{if(0==objects.length){this._log(`${procedureName}: Nothing to do`);return}this._log(procedureName);if(!this.localDatabase.isReady)throw Error("Database is not ready!");let success=0,failed2=0,total=0;for await(const result of withConcurrency(objects,(async e3=>{try{await callback(e3);return!0}catch(ex){this._log(`Error while ${procedureName}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}),10)){result?success++:failed2++;total++;const msg2=`${procedureName}: DONE:${success}, FAILED:${failed2}, LAST:${objects.length-total}`;updateLog(procedureName,msg2)}updateLog(procedureName,`${procedureName} All done: DONE:${success}, FAILED:${failed2}`)};initProcess.push(runAll("UPDATE DATABASE",filesExistOnlyInStorage,(async e3=>{const file=storageFileNameMap[storageFileNameCI2CS[e3]];if(this.services.vault.isFileSizeTooLarge(file.stat.size))this._log(`UPDATE DATABASE: ${e3} has been skipped due to file size exceeding the limit`,logLevel);else{const path2=file.path;await this.core.fileHandler.storeFileToDB(file);eventHub.emitEvent("event-file-changed",{file:path2,automated:!0})}})));initProcess.push(runAll("UPDATE STORAGE",filesExistOnlyInDatabase,(async e3=>{var _a8,_b5,_c3;const w2=databaseFileNameMap[databaseFileNameCI2CS[e3]],path2=null!=(_a8=getPath2(w2))?_a8:e3;if(!w2||w2.deleted||w2._deleted)w2?this._log(`Deletion history skipped: ${path2}`,LOG_LEVEL_VERBOSE):this._log(`entry not found: ${path2}`);else if(this.services.vault.isFileSizeTooLarge(w2.size))this._log(`UPDATE STORAGE: ${path2} has been skipped due to file size exceeding the limit`,logLevel);else{if(null!=(_c3=null==(_b5=w2._conflicts)?void 0:_b5.length)&&_c3){this._log(`UPDATE STORAGE: ${path2} has conflicts. skipped (x)`,LOG_LEVEL_INFO);return}await this.core.fileHandler.dbToStorage(path2,null,!0);eventHub.emitEvent("event-file-changed",{file:e3,automated:!0});this._log(`Check or pull from db:${path2} OK`)}})));const fileMap=filesExistBoth.map((path2=>({file:storageFileNameMap[storageFileNameCI2CS[path2]],doc:databaseFileNameMap[databaseFileNameCI2CS[path2]]})));initProcess.push(runAll("SYNC DATABASE AND STORAGE",fileMap,(async e3=>{var _a8,_b5;const{file,doc}=e3;null!=(_b5=null==(_a8=doc._conflicts)?void 0:_a8.length)&&_b5?this._log(`SYNC DATABASE AND STORAGE: ${file.path} has conflicts. skipped`,LOG_LEVEL_INFO):this.services.vault.isFileSizeTooLarge(file.stat.size)||this.services.vault.isFileSizeTooLarge(doc.size)?this._log(`SYNC DATABASE AND STORAGE: ${getPath2(doc)} has been skipped due to file size exceeding the limit`,logLevel):await this.syncFileBetweenDBandStorage(file,doc)})));await Promise.all(initProcess);this._log("Initialized, NOW TRACKING!");isInitialized||await this.core.kvDB.set("initialized",!0);showingNotice&&this._log("Initialize done!",LOG_LEVEL_NOTICE,"syncAll");return!0}async syncFileBetweenDBandStorage(file,doc){if(!doc)throw new Error(`Missing doc:${file.path}`);if("path"in file){const w2=this.core.storageAccess.getFileStub(file.path);if(!w2)throw new Error(`Missing file:${file.path}`);file=w2}switch(compareFileFreshness(file,doc)){case BASE_IS_NEW:if(this.services.vault.isFileSizeTooLarge(file.stat.size))this._log(`STORAGE -> DB : ${file.path} has been skipped due to file size exceeding the limit`,LOG_LEVEL_NOTICE);else{this._log("STORAGE -> DB :"+file.path);await this.core.fileHandler.storeFileToDB(file)}break;case TARGET_IS_NEW:if(!this.services.vault.isFileSizeTooLarge(doc.size)){this._log("STORAGE <- DB :"+file.path);await this.core.fileHandler.dbToStorage(doc,stripAllPrefixes(file.path),!0)?eventHub.emitEvent("event-file-changed",{file:file.path,automated:!0}):this._log(`STORAGE <- DB : Cloud not read ${file.path}, possibly deleted`,LOG_LEVEL_NOTICE);return caches}this._log(`STORAGE <- DB : ${file.path} has been skipped due to file size exceeding the limit`,LOG_LEVEL_NOTICE);break;case EVEN:this._log("STORAGE == DB :"+file.path,LOG_LEVEL_DEBUG);break;default:this._log("STORAGE ?? DB :"+file.path+" Something got weird")}}async collectDeletedFiles(){const limitDays=this.settings.automaticallyDeleteMetadataOfDeletedFiles;if(limitDays<=0)return;this._log("Checking expired file history");const limit=Date.now()-864e5*limitDays,notes=[];for await(const doc of this.localDatabase.findAllDocs({conflicts:!0}))isAnyNote(doc)&&doc.deleted&&doc.mtime-limit<0&¬es.push({path:getPath2(doc),mtime:doc.mtime,ttl:(doc.mtime-limit)/1e3/86400,doc});if(0!=notes.length){for(const v2 of notes){this._log(`Deletion history expired: ${v2.path}`);const delDoc=v2.doc;delDoc._deleted=!0;await this.localDatabase.putRaw(delDoc)}this._log("Checking expired file history done")}else{this._log("There are no old documents");this._log("Checking expired file history done")}}async _initializeDatabase(showingNotice=!1,reopenDatabase=!0,ignoreSuspending=!1){this.services.appLifecycle.resetIsReady();if(!reopenDatabase||await this.services.database.openDatabase()){this.localDatabase.isReady&&await this.services.vault.scanVault(showingNotice,ignoreSuspending);if(!await this.services.databaseEvents.onDatabaseInitialised(showingNotice)){this._log("Initializing database has been failed on some module!",LOG_LEVEL_NOTICE);return!1}this.services.appLifecycle.markIsReady();await this.services.fileProcessing.commitPendingFileEvents();return!0}this.services.appLifecycle.resetIsReady();return!1}onBindFunction(core,services){services.databaseEvents.handleInitialiseDatabase(this._initializeDatabase.bind(this));services.vault.handleScanVault(this._performFullScan.bind(this))}};instanceOfAny=(object,constructors)=>constructors.some((c3=>object instanceof c3));transactionDoneMap=new WeakMap;transformCache=new WeakMap;reverseTransformCache=new WeakMap;idbProxyTraps={get(target,prop2,receiver){if(target instanceof IDBTransaction){if("done"===prop2)return transactionDoneMap.get(target);if("store"===prop2)return receiver.objectStoreNames[1]?void 0:receiver.objectStore(receiver.objectStoreNames[0])}return wrap(target[prop2])},set(target,prop2,value){target[prop2]=value;return!0},has:(target,prop2)=>target instanceof IDBTransaction&&("done"===prop2||"store"===prop2)||prop2 in target};unwrap=value=>reverseTransformCache.get(value);readMethods=["get","getKey","getAll","getAllKeys","count"];writeMethods=["put","add","delete","clear"];cachedMethods=new Map;replaceTraps((oldTraps=>({...oldTraps,get:(target,prop2,receiver)=>getMethod(target,prop2)||oldTraps.get(target,prop2,receiver),has:(target,prop2)=>!!getMethod(target,prop2)||oldTraps.has(target,prop2)})));advanceMethodProps=["continue","continuePrimaryKey","advance"];methodMap={};advanceResults=new WeakMap;ittrProxiedCursorToOriginalProxy=new WeakMap;cursorIteratorTraps={get(target,prop2){if(!advanceMethodProps.includes(prop2))return target[prop2];let cachedFunc=methodMap[prop2];cachedFunc||(cachedFunc=methodMap[prop2]=function(...args){advanceResults.set(this,ittrProxiedCursorToOriginalProxy.get(this)[prop2](...args))});return cachedFunc}};replaceTraps((oldTraps=>({...oldTraps,get:(target,prop2,receiver)=>isIteratorProp(target,prop2)?iterate:oldTraps.get(target,prop2,receiver),has:(target,prop2)=>isIteratorProp(target,prop2)||oldTraps.has(target,prop2)})));databaseCache=new Map;IDBKeyValueDatabase=class{constructor(dbKey){this._dbPromise=null;this._isDestroyed=!1;this.destroyedPromise=null;this.dbKey=dbKey;this.storeKey=dbKey}get isDestroyed(){return this._isDestroyed}get ensuredDestroyed(){return this.destroyedPromise?this.destroyedPromise:Promise.resolve()}async getIsReady(){await this.ensureDB();return!1===this.isDestroyed}ensureDB(){if(this._isDestroyed)throw new Error("Database is destroyed");if(this._dbPromise)return this._dbPromise;this._dbPromise=openDB(this.dbKey,void 0,{upgrade:(db,_oldVersion,_newVersion,_transaction,_event)=>{if(!db.objectStoreNames.contains(this.storeKey))return db.createObjectStore(this.storeKey)},blocking:(currentVersion,blockedVersion,event2)=>{Logger(`Blocking database open for ${this.dbKey}: currentVersion=${currentVersion}, blockedVersion=${blockedVersion}`,LOG_LEVEL_VERBOSE);this.closeDB(!0)},blocked:(currentVersion,blockedVersion,event2)=>{Logger(`Database open blocked for ${this.dbKey}: currentVersion=${currentVersion}, blockedVersion=${blockedVersion}`,LOG_LEVEL_VERBOSE)},terminated:()=>{Logger(`Database connection terminated for ${this.dbKey}`,LOG_LEVEL_VERBOSE);this._dbPromise=null}}).catch((e3=>{this._dbPromise=null;throw e3}));return this._dbPromise}async closeDB(setDestroyed=!1){if(this._dbPromise){const tempPromise=this._dbPromise;this._dbPromise=null;try{(await tempPromise).close()}catch(e3){Logger("Error closing database");Logger(e3,LOG_LEVEL_VERBOSE)}}this._dbPromise=null;if(setDestroyed){this._isDestroyed=!0;this.destroyedPromise=Promise.resolve()}}get DB(){return this._isDestroyed?Promise.reject(new Error("Database is destroyed")):this.ensureDB()}async get(key3){const db=await this.DB;return await db.get(this.storeKey,key3)}async set(key3,value){const db=await this.DB;await db.put(this.storeKey,value,key3);return key3}async del(key3){const db=await this.DB;return await db.delete(this.storeKey,key3)}async clear(){const db=await this.DB;return await db.clear(this.storeKey)}async keys(query3,count){const db=await this.DB;return await db.getAllKeys(this.storeKey,query3,count)}async close(){await this.closeDB()}async destroy(){this._isDestroyed=!0;this.destroyedPromise=(async()=>{await this.closeDB();await deleteDB(this.dbKey,{blocked:()=>{Logger(`Database delete blocked for ${this.dbKey}`)}})})();await this.destroyedPromise}};ModuleKeyValueDB=class extends AbstractModule{async tryCloseKvDB(){var _a8;try{await(null==(_a8=this.core.kvDB)?void 0:_a8.close());return!0}catch(e3){this._log("Failed to close KeyValueDB",LOG_LEVEL_VERBOSE);this._log(e3);return!1}}async openKeyValueDB(){await delay(10);try{await this.tryCloseKvDB();await delay(10);await yieldMicrotask();this.core.kvDB=await OpenKeyValueDatabase(this.services.vault.getVaultName()+"-livesync-kv");await yieldMicrotask();await delay(100)}catch(e3){this.core.kvDB=void 0;this._log("Failed to open KeyValueDB",LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}return!0}async _onDBUnload(db){this.core.kvDB&&await this.core.kvDB.close();return Promise.resolve(!0)}async _onDBClose(db){this.core.kvDB&&await this.core.kvDB.close();return Promise.resolve(!0)}async _everyOnloadAfterLoadSettings(){if(!await this.openKeyValueDB())return!1;this.core.simpleStore=this.services.database.openSimpleStore("os");return Promise.resolve(!0)}_getSimpleStore(kind){const getDB=()=>this.core.kvDB,prefix=`${kind}-`;return{get:async key3=>await getDB().get(`${prefix}${key3}`),set:async(key3,value)=>{await getDB().set(`${prefix}${key3}`,value)},delete:async key3=>{await getDB().del(`${prefix}${key3}`)},keys:async(from,to,count)=>(await getDB().keys(IDBKeyRange.bound(`${prefix}${from||""}`,`${prefix}${to||""}`),count)).map((e3=>e3.toString())).filter((e3=>e3.startsWith(prefix))).map((e3=>e3.substring(prefix.length)))}}_everyOnInitializeDatabase(db){return this.openKeyValueDB()}async _everyOnResetDatabase(db){try{const kvDBKey="queued-files";await this.core.kvDB.del(kvDBKey);await this.core.kvDB.destroy();await yieldMicrotask();this.core.kvDB=await OpenKeyValueDatabase(this.services.vault.getVaultName()+"-livesync-kv");await delay(100)}catch(e3){this.core.kvDB=void 0;this._log("Failed to reset KeyValueDB",LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}return!0}onBindFunction(core,services){services.databaseEvents.handleOnUnloadDatabase(this._onDBUnload.bind(this));services.databaseEvents.handleOnCloseDatabase(this._onDBClose.bind(this));services.databaseEvents.handleOnDatabaseInitialisation(this._everyOnInitializeDatabase.bind(this));services.databaseEvents.handleOnResetDatabase(this._everyOnResetDatabase.bind(this));services.database.handleOpenSimpleStore(this._getSimpleStore.bind(this));services.appLifecycle.handleOnSettingLoaded(this._everyOnloadAfterLoadSettings.bind(this))}};ModulePouchDB=class extends AbstractModule{_createPouchDBInstance(name,options){const optionPass=null!=options?options:{};if(this.settings.useIndexedDBAdapter){optionPass.adapter="indexeddb";optionPass.purged_infos_limit=1;return new index_es_default(name+ExtraSuffixIndexedDB,optionPass)}return new index_es_default(name,optionPass)}onBindFunction(core,services){services.database.handleCreatePouchDBInstance(this._createPouchDBInstance.bind(this))}};ReplicateResultProcessor=class{constructor(replicator){this._suspended=!1;this.triggerTakeSnapshot=throttle((()=>this._triggerTakeSnapshot()),50);this._restoreFromSnapshot=void 0;this._queuedChanges=[];this._processingChanges=[];this._semaphore=Semaphore(10);this._isRunningProcessQueue=!1;this.replicator=replicator}log(message,level=LOG_LEVEL_INFO){Logger(`[ReplicateResultProcessor] ${message}`,level)}logError(e3){Logger(e3,LOG_LEVEL_VERBOSE)}get localDatabase(){return this.replicator.core.localDatabase}get services(){return this.replicator.core.services}get core(){return this.replicator.core}suspend(){this._suspended=!0}resume(){this._suspended=!1;fireAndForget((()=>this.runProcessQueue()))}get isSuspended(){return this._suspended||!this.core.services.appLifecycle.isReady||this.replicator.settings.suspendParseReplicationResult||this.core.services.appLifecycle.isSuspended()}async _takeSnapshot(){const snapshot2={queued:this._queuedChanges.slice(),processing:this._processingChanges.slice()};await this.core.kvDB.set("replicationResultProcessorSnapshot",snapshot2);this.log(`Snapshot taken. Queued: ${snapshot2.queued.length}, Processing: ${snapshot2.processing.length}`,LOG_LEVEL_DEBUG);this.reportStatus()}_triggerTakeSnapshot(){fireAndForget((()=>this._takeSnapshot()))}async restoreFromSnapshot(){const snapshot2=await this.core.kvDB.get("replicationResultProcessorSnapshot");if(snapshot2){const newQueue=[...snapshot2.processing,...snapshot2.queued,...this._queuedChanges];this._queuedChanges=[];this.enqueueAll(newQueue);this.log(`Restored from snapshot (${snapshot2.processing.length+snapshot2.queued.length} items)`,LOG_LEVEL_INFO)}}restoreFromSnapshotOnce(){this._restoreFromSnapshot||(this._restoreFromSnapshot=this.restoreFromSnapshot());return this._restoreFromSnapshot}async withCounting(proc,countValue){countValue.value++;try{return await proc()}finally{countValue.value--}}reportStatus(){this.core.replicationResultCount.value=this._queuedChanges.length+this._processingChanges.length}enqueueAll(changes3){for(const change of changes3)this.processIfNonDocumentChange(change)||this.enqueueChange(change)}processIfNonDocumentChange(change){if(!change){this.log("Received empty change",LOG_LEVEL_VERBOSE);return!0}if(isChunk(change._id)){this.localDatabase.onNewLeaf(change);this.log(`Processed chunk: ${shortenId(change._id)}`,LOG_LEVEL_DEBUG);return!0}if("versioninfo"==change.type){this.log(`Version info document received: ${change._id}`,LOG_LEVEL_VERBOSE);if(change.version>12){this.core.replicator.closeReplication();this.log("Remote database updated to incompatible version. update your Self-hosted LiveSync plugin.",LOG_LEVEL_NOTICE)}return!0}if(change._id==SYNCINFO_ID||change._id.startsWith("_design")){this.log(`Skipped system document: ${change._id}`,LOG_LEVEL_VERBOSE);return!0}return!1}enqueueChange(doc){var _a8;const old=this._queuedChanges.find((e3=>e3._id==doc._id)),docNote=`${"path"in doc?getPath2(doc):""} (${shortenId(doc._id)}, ${shortenRev(doc._rev)})`;if(old){if(old._rev==doc._rev){this.log(`[Enqueue] skipped (Already queued): ${docNote}`,LOG_LEVEL_VERBOSE);return}const oldRev=null!=(_a8=old._rev)?_a8:"";if((!0===old._deleted||"deleted"in old&&!0===old.deleted)==(!0===doc._deleted||"deleted"in doc&&!0===doc.deleted)){this._queuedChanges=this._queuedChanges.filter((e3=>e3._id!=doc._id));this.log(`[Enqueue] requeued: ${docNote} (from rev: ${shortenRev(oldRev)})`,LOG_LEVEL_VERBOSE)}}this._queuedChanges.push(doc);this.triggerTakeSnapshot();this.triggerProcessQueue()}triggerProcessQueue(){fireAndForget((()=>this.runProcessQueue()))}async runProcessQueue(){if(!this._isRunningProcessQueue&&!this.isSuspended&&0!=this._queuedChanges.length)try{this._isRunningProcessQueue=!0;for(;this._queuedChanges.length>0;){if(this.isSuspended){this.log(`Processing has got suspended. Remaining items in queue: ${this._queuedChanges.length}`,LOG_LEVEL_INFO);break}(await this._semaphore.acquire())();const doc=this._queuedChanges.shift();if(doc){this._processingChanges.push(doc);this.parseDocumentChange(doc)}this.triggerTakeSnapshot()}}finally{this._isRunningProcessQueue=!1}}async parseDocumentChange(change){try{if(await this.services.replication.processVirtualDocument(change))return;if(isAnyNote(change)){const docPath=getPath2(change);if(!await this.services.vault.isTargetFile(docPath)){this.log(`Skipped: ${docPath}`,LOG_LEVEL_VERBOSE);return}const size=change.size;if(this.services.vault.isFileSizeTooLarge(size)){this.log(`Processing ${docPath} has been skipped due to file size exceeding the limit`,LOG_LEVEL_NOTICE);return}return await this.applyToDatabase(change)}this.log(`Skipped unexpected non-note document: ${change._id}`,LOG_LEVEL_INFO);return}finally{this._processingChanges=this._processingChanges.filter((e3=>e3!==change));this.triggerTakeSnapshot()}}applyToDatabase(doc){return this.withCounting((async()=>{let releaser;try{releaser=await this._semaphore.acquire();await this._applyToDatabase(doc)}catch(e3){this.log("Error while processing replication result",LOG_LEVEL_NOTICE);this.logError(e3)}finally{releaser&&releaser()}}),this.replicator.core.databaseQueueCount)}_applyToDatabase(doc_){const dbDoc=doc_,path2=getPath2(dbDoc);return serialized(`replication-process:${dbDoc._id}`,(async()=>{const docNote=`${path2} (${shortenId(dbDoc._id)}, ${shortenRev(dbDoc._rev)})`;if(!await this.checkIsChangeRequiredForDatabaseProcessing(dbDoc)){this.log(`Skipped (Not latest): ${docNote}`,LOG_LEVEL_VERBOSE);return}const doc=!0===dbDoc._deleted||"deleted"in dbDoc&&!0===dbDoc.deleted?{...dbDoc,data:""}:await this.localDatabase.getDBEntryFromMeta({...dbDoc},!1,!0);if(doc)if(await this.services.replication.processOptionalSynchroniseResult(dbDoc))this.log(`Processed by other processor: ${docNote}`,LOG_LEVEL_DEBUG);else if(isValidPath(getPath2(doc))){await this.applyToStorage(doc);this.log(`Processed: ${docNote}`,LOG_LEVEL_DEBUG)}else this.log(`Unprocessed (Invalid path): ${docNote}`,LOG_LEVEL_VERBOSE);else this.log(`Failed to gather content of ${docNote}`,LOG_LEVEL_NOTICE)}))}applyToStorage(entry){return this.withCounting((async()=>{await this.services.replication.processSynchroniseResult(entry)}),this.replicator.core.storageApplyingCount)}async checkIsChangeRequiredForDatabaseProcessing(dbDoc){var _a8,_b5,_c3,_d2;const path2=getPath2(dbDoc);try{const savedDoc=await this.localDatabase.getRaw(dbDoc._id,{conflicts:!0,revs_info:!0}),newRev=null!=(_a8=dbDoc._rev)?_a8:"",latestRev=null!=(_b5=savedDoc._rev)?_b5:"",revisions=null!=(_d2=null==(_c3=savedDoc._revs_info)?void 0:_c3.map((e3=>e3.rev)))?_d2:[];return!(!(savedDoc._conflicts&&savedDoc._conflicts.length>0)&&newRev!=latestRev&&revisions.indexOf(newRev)>=0)}catch(e3){if("status"in e3&&404==e3.status)return!0;this.log(`Failed to get existing document for ${path2} (${shortenId(dbDoc._id)}, ${shortenRev(dbDoc._rev)}) `,LOG_LEVEL_NOTICE);this.logError(e3);return!1}}};ModuleReplicator=class extends AbstractModule{constructor(){super(...arguments);this._previousErrors=new Set;this.processor=new ReplicateResultProcessor(this)}showError(msg,max_log_level=LEVEL_NOTICE){const level=this._previousErrors.has(msg)?LEVEL_INFO:max_log_level;this._log(msg,level);if(!this._previousErrors.has(msg)){this._previousErrors.add(msg);eventHub.emitEvent("on-unresolved-error")}}clearErrors(){this._previousErrors.clear();eventHub.emitEvent("on-unresolved-error")}_everyOnloadAfterLoadSettings(){eventHub.onEvent("file-saved",(()=>{this.settings.syncOnSave&&!this.core.services.appLifecycle.isSuspended()&&scheduleTask("perform-replicate-after-save",250,(()=>this.services.replication.replicateByEvent()))}));eventHub.onEvent(EVENT_SETTING_SAVED,(setting=>{this._replicatorType!==setting.remoteType&&this.setReplicator();this.core.settings.suspendParseReplicationResult?this.processor.suspend():this.processor.resume()}));return Promise.resolve(!0)}async setReplicator(){const replicator=await this.services.replicator.getNewReplicator();if(!replicator){this.showError($msg("Replicator.Message.InitialiseFatalError"),LOG_LEVEL_NOTICE);return!1}if(this.core.replicator){await this.core.replicator.closeReplication();this._log("Replicator closed for changing",LOG_LEVEL_VERBOSE)}this.core.replicator=replicator;this._replicatorType=this.settings.remoteType;await yieldMicrotask();clearHandlers();return!0}_getReplicator(){return this.core.replicator}_everyOnInitializeDatabase(db){return this.setReplicator()}_everyOnDatabaseInitialized(showNotice){fireAndForget((()=>this.processor.restoreFromSnapshotOnce()));return Promise.resolve(!0)}_everyOnResetDatabase(db){return this.setReplicator()}async ensureReplicatorPBKDF2Salt(showMessage=!1){const replicator=this.services.replicator.getActiveReplicator();if(!replicator){this.showError($msg("Replicator.Message.InitialiseFatalError"),LOG_LEVEL_NOTICE);return!1}return await replicator.ensurePBKDF2Salt(this.settings,showMessage,!0)}async _everyBeforeReplicate(showMessage){if(!this.core.managers.networkManager.isOnline){this.showError("Network is offline",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}if(!await this.ensureReplicatorPBKDF2Salt(!1)){this.showError("Failed to initialise the encryption key, preventing replication.");return!1}await this.processor.restoreFromSnapshotOnce();this.clearErrors();return!0}async _replicate(showMessage=!1){try{updatePreviousExecutionTime("replicationOnEvent",5e3);return await this.$$_replicate(showMessage)}finally{updatePreviousExecutionTime("replicationOnEvent")}}async cleaned(showMessage){Logger("The remote database has been cleaned.",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);await skipIfDuplicated("cleanup",(async()=>{var _a8;const message=`The remote database has been cleaned up.\nTo synchronize, this device must be also cleaned up. ${await purgeUnreferencedChunks(this.localDatabase.localDatabase,!0)} chunk(s) will be erased from this device.\nHowever, If there are many chunks to be deleted, maybe fetching again is faster.\nWe will lose the history of this device if we fetch the remote database again.\nEven if you choose to clean up, you will see this option again if you exit Obsidian and then synchronise again.`,ret=await this.core.confirm.confirmWithMessage("Cleaned",message,["Fetch again","Cleanup","Dismiss"],"Dismiss",30);"Fetch again"==ret&&await this.core.rebuilder.$performRebuildDB("localOnly");if("Cleanup"==ret){const replicator=this.services.replicator.getActiveReplicator();if(!(replicator instanceof LiveSyncCouchDBReplicator))return;const remoteDB=await replicator.connectRemoteCouchDBWithSetting(this.settings,this.services.API.isMobile(),!0);if("string"==typeof remoteDB){Logger(remoteDB,LOG_LEVEL_NOTICE);return!1}await purgeUnreferencedChunks(this.localDatabase.localDatabase,!1);this.localDatabase.clearCaches();if(await this.core.replicator.openReplication(this.settings,!1,showMessage,!0)){await balanceChunkPurgedDBs(this.localDatabase.localDatabase,remoteDB.db);await purgeUnreferencedChunks(this.localDatabase.localDatabase,!1);this.localDatabase.clearCaches();await(null==(_a8=this.services.replicator.getActiveReplicator())?void 0:_a8.markRemoteResolved(this.settings));Logger("The local database has been cleaned up.",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO)}else Logger("Replication has been cancelled. Please try it again.",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO)}}))}async _canReplicate(showMessage=!1){if(!this.services.appLifecycle.isReady()){Logger("Not ready");return!1}if(isLockAcquired("cleanup")){Logger($msg("Replicator.Message.Cleaned"),LOG_LEVEL_NOTICE);return!1}if(""!=this.settings.versionUpFlash){Logger($msg("Replicator.Message.VersionUpFlash"),LOG_LEVEL_NOTICE);return!1}if(!await this.services.fileProcessing.commitPendingFileEvents()){this.showError($msg("Replicator.Message.Pending"),LOG_LEVEL_NOTICE);return!1}if(!this.core.managers.networkManager.isOnline){this.showError("Network is offline",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}if(!await this.services.replication.onBeforeReplicate(showMessage)){this.showError($msg("Replicator.Message.SomeModuleFailed"),LOG_LEVEL_NOTICE);return!1}this.clearErrors();return!0}async $$_replicate(showMessage=!1){var _a8;if(!await this.services.replication.isReplicationReady(showMessage))return!1;const ret=await this.core.replicator.openReplication(this.settings,!1,showMessage,!1);if(!ret)if(this.core.replicator.tweakSettingsMismatched&&this.core.replicator.preferredTweakValue)await this.services.tweakValue.askResolvingMismatched(this.core.replicator.preferredTweakValue);else if(null==(_a8=this.core.replicator)?void 0:_a8.remoteLockedAndDeviceNotAccepted)if(this.core.replicator.remoteCleaned&&this.settings.useIndexedDBAdapter)await this.cleaned(showMessage);else{const message=$msg("Replicator.Dialogue.Locked.Message"),CHOICE_FETCH=$msg("Replicator.Dialogue.Locked.Action.Fetch"),CHOICE_DISMISS=$msg("Replicator.Dialogue.Locked.Action.Dismiss"),CHOICE_UNLOCK=$msg("Replicator.Dialogue.Locked.Action.Unlock"),ret2=await this.core.confirm.askSelectStringDialogue(message,[CHOICE_FETCH,CHOICE_UNLOCK,CHOICE_DISMISS],{title:$msg("Replicator.Dialogue.Locked.Title"),defaultAction:CHOICE_DISMISS,timeout:60});if(ret2==CHOICE_FETCH){this._log($msg("Replicator.Dialogue.Locked.Message.Fetch"),LOG_LEVEL_NOTICE);await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.scheduleRestart();return}if(ret2==CHOICE_UNLOCK){await this.core.replicator.markRemoteResolved(this.settings);this._log($msg("Replicator.Dialogue.Locked.Message.Unlocked"),LOG_LEVEL_NOTICE);return}}return ret}async _replicateByEvent(){const least=this.settings.syncMinimumInterval;return least>0?rateLimitedSharedExecution("replicationOnEvent",least,(async()=>await this.services.replication.replicate())):await shareRunningResult("replication",(()=>this.services.replication.replicate()))}_parseReplicationResult(docs){this.processor.enqueueAll(docs)}_everyBeforeSuspendProcess(){var _a8;null==(_a8=this.core.replicator)||_a8.closeReplication();return Promise.resolve(!0)}async _replicateAllToServer(showingNotice=!1,sendChunksInBulkDisabled=!1){if(!this.services.appLifecycle.isReady())return!1;if(!await this.services.replication.onBeforeReplicate(showingNotice)){Logger($msg("Replicator.Message.SomeModuleFailed"),LOG_LEVEL_NOTICE);return!1}sendChunksInBulkDisabled||this.core.replicator instanceof LiveSyncCouchDBReplicator&&"yes"==await this.core.confirm.askYesNoDialog("Do you want to send all chunks before replication?",{defaultOption:"No",timeout:20})&&await this.core.replicator.sendChunks(this.core.settings,void 0,!0,0);if(await this.core.replicator.replicateAllToServer(this.settings,showingNotice))return!0;const checkResult=await this.services.replication.checkConnectionFailure();return"CHECKAGAIN"==checkResult?await this.services.remote.replicateAllToRemote(showingNotice):!checkResult}async _replicateAllFromServer(showingNotice=!1){if(!this.services.appLifecycle.isReady())return!1;if(await this.core.replicator.replicateAllFromServer(this.settings,showingNotice))return!0;const checkResult=await this.services.replication.checkConnectionFailure();return"CHECKAGAIN"==checkResult?await this.services.remote.replicateAllFromRemote(showingNotice):!checkResult}_reportUnresolvedMessages(){return Promise.resolve([...this._previousErrors])}onBindFunction(core,services){services.replicator.handleGetActiveReplicator(this._getReplicator.bind(this));services.databaseEvents.handleOnDatabaseInitialisation(this._everyOnInitializeDatabase.bind(this));services.databaseEvents.handleDatabaseInitialised(this._everyOnDatabaseInitialized.bind(this));services.databaseEvents.handleOnResetDatabase(this._everyOnResetDatabase.bind(this));services.appLifecycle.handleOnSettingLoaded(this._everyOnloadAfterLoadSettings.bind(this));services.replication.handleParseSynchroniseResult(this._parseReplicationResult.bind(this));services.appLifecycle.handleOnSuspending(this._everyBeforeSuspendProcess.bind(this));services.replication.handleBeforeReplicate(this._everyBeforeReplicate.bind(this));services.replication.handleIsReplicationReady(this._canReplicate.bind(this));services.replication.handleReplicate(this._replicate.bind(this));services.replication.handleReplicateByEvent(this._replicateByEvent.bind(this));services.remote.handleReplicateAllToRemote(this._replicateAllToServer.bind(this));services.remote.handleReplicateAllFromRemote(this._replicateAllFromServer.bind(this));services.appLifecycle.reportUnresolvedMessages(this._reportUnresolvedMessages.bind(this))}};ModuleReplicatorCouchDB=class extends AbstractModule{_anyNewReplicator(settingOverride={}){const settings={...this.settings,...settingOverride};return settings.remoteType==REMOTE_MINIO||settings.remoteType==REMOTE_P2P?Promise.resolve(!1):Promise.resolve(new LiveSyncCouchDBReplicator(this.core))}_everyAfterResumeProcess(){if(this.services.appLifecycle.isSuspended())return Promise.resolve(!0);if(!this.services.appLifecycle.isReady())return Promise.resolve(!0);if(this.settings.remoteType!=REMOTE_MINIO&&this.settings.remoteType!=REMOTE_P2P){const LiveSyncEnabled=this.settings.liveSync,continuous=LiveSyncEnabled,eventualOnStart=!LiveSyncEnabled&&this.settings.syncOnStart;(LiveSyncEnabled||eventualOnStart)&&fireAndForget((async()=>{await this.services.replication.isReplicationReady(!1)&&this.core.replicator.openReplication(this.settings,continuous,!1,!1)}))}return Promise.resolve(!0)}onBindFunction(core,services){services.replicator.handleGetNewReplicator(this._anyNewReplicator.bind(this));services.appLifecycle.handleOnResumed(this._everyAfterResumeProcess.bind(this))}};ModuleReplicatorMinIO=class extends AbstractModule{_anyNewReplicator(settingOverride={}){return{...this.settings,...settingOverride}.remoteType==REMOTE_MINIO?Promise.resolve(new LiveSyncJournalReplicator(this.core)):Promise.resolve(!1)}onBindFunction(core,services){services.replicator.handleGetNewReplicator(this._anyNewReplicator.bind(this))}};ModuleTargetFilter=class extends AbstractModule{constructor(){super(...arguments);this.totalFileEventCount=0;this.ignoreFileCache=new LRUCache(300,25e4,!0);this.ignoreFiles=[]}reloadIgnoreFiles(){this.ignoreFiles=this.settings.ignoreFiles.split(",").map((e3=>e3.trim()))}_everyOnload(){this.reloadIgnoreFiles();eventHub.onEvent(EVENT_SETTING_SAVED,(evt=>{this.reloadIgnoreFiles()}));eventHub.onEvent("reload-setting-tab",(()=>{this.reloadIgnoreFiles()}));return Promise.resolve(!0)}_id2path(id,entry,stripPrefix2){const tempId=id2path(id,entry);return stripPrefix2&&isInternalMetadata(tempId)?stripInternalMetadataPrefix(tempId):tempId}async _path2id(filename,prefix){const destPath=addPrefix(filename,null!=prefix?prefix:"");return await path2id(destPath,this.settings.usePathObfuscation?this.settings.passphrase:"",!this.settings.handleFilenameCaseSensitive)}_isFileSizeExceeded(size){return this.settings.syncMaxSizeInMB>0&&size>0&&1024*this.settings.syncMaxSizeInMB*1024{var _a9;if(keepFileCheckList&&prev)return prev;if(!keepFileCheckList&&prev&&!this.fileListPossiblyChanged)return prev;const fileList=null!=(_a9=ctx.get("fileList"))?_a9:[],vaultFiles=this.core.storageAccess.getFileNames().sort();if(prev&&vaultFiles.length==fileList.length){const fl3=new Set([...fileList,...vaultFiles]);if(fileList.length==fl3.size&&vaultFiles.length==fl3.size)return prev}ctx.set("fileList",vaultFiles);const fileCount2={};for(const file2 of vaultFiles){const lc3=file2.toLowerCase();fileCount2[lc3]?fileCount2[lc3]++:fileCount2[lc3]=1}return fileCount2})),filepath=getStoragePathFromUXFileInfo(file),lc2=filepath.toLowerCase();if(this.services.setting.shouldCheckCaseInsensitively()&&lc2 in fileCount&&fileCount[lc2]>1)return!1;const fileNameLC=null==(_a8=getStoragePathFromUXFileInfo(file).split("/").pop())?void 0:_a8.toLowerCase();if(this.settings.useIgnoreFiles){this.ignoreFiles.some((e3=>e3.toLowerCase()==fileNameLC))&&await this.readIgnoreFile(filepath);if(await this.services.vault.isIgnoredByIgnoreFile(file))return!1}return!!(null==(_b5=this.localDatabase)?void 0:_b5.isTargetFile(filepath))}async readIgnoreFile(path2){try{if(!await this.core.storageAccess.isExistsIncludeHidden(path2)){this.ignoreFileCache.set(path2,!1);return!1}const gitignore=(await this.core.storageAccess.readHiddenFileText(path2)).split(/\r?\n/g);this.ignoreFileCache.set(path2,gitignore);this._log(`[ignore]Ignore file loaded: ${path2}`,LOG_LEVEL_VERBOSE);return gitignore}catch(ex){this._log(`[ignore]Failed to read ignore file ${path2}`);this._log(ex,LOG_LEVEL_VERBOSE);this.ignoreFileCache.set(path2,!1);return!1}}async getIgnoreFile(path2){var _a8;return this.ignoreFileCache.has(path2)?null!=(_a8=this.ignoreFileCache.get(path2))&&_a8:await this.readIgnoreFile(path2)}async _isIgnoredByIgnoreFiles(file){if(!this.settings.useIgnoreFiles)return!1;const filepath=getStoragePathFromUXFileInfo(file);this.ignoreFileCache.has(filepath)&&await this.readIgnoreFile(filepath);return!await isAcceptedAll(filepath,this.ignoreFiles,(filename=>this.getIgnoreFile(filename)))}onBindFunction(core,services){services.vault.handleMarkFileListPossiblyChanged(this._markFileListPossiblyChanged.bind(this));services.path.handleId2Path(this._id2path.bind(this));services.path.handlePath2Id(this._path2id.bind(this));services.appLifecycle.handleOnLoaded(this._everyOnload.bind(this));services.vault.handleIsFileSizeTooLarge(this._isFileSizeExceeded.bind(this));services.vault.handleIsIgnoredByIgnoreFile(this._isIgnoredByIgnoreFiles.bind(this));services.vault.handleIsTargetFile(this._isTargetFile.bind(this))}};ModulePeriodicProcess=class extends AbstractModule{constructor(){super(...arguments);this.periodicSyncProcessor=new PeriodicProcessor(this.core,(async()=>await this.services.replication.replicate()))}disablePeriodic(){var _a8;null==(_a8=this.periodicSyncProcessor)||_a8.disable();return Promise.resolve(!0)}resumePeriodic(){this.periodicSyncProcessor.enable(this.settings.periodicReplication?1e3*this.settings.periodicReplicationInterval:0);return Promise.resolve(!0)}_allOnUnload(){return this.disablePeriodic()}_everyBeforeRealizeSetting(){return this.disablePeriodic()}_everyBeforeSuspendProcess(){return this.disablePeriodic()}_everyAfterResumeProcess(){return this.resumePeriodic()}_everyAfterRealizeSetting(){return this.resumePeriodic()}onBindFunction(core,services){services.appLifecycle.handleOnUnload(this._allOnUnload.bind(this));services.setting.handleBeforeRealiseSetting(this._everyBeforeRealizeSetting.bind(this));services.setting.handleSettingRealised(this._everyAfterRealizeSetting.bind(this));services.appLifecycle.handleOnSuspending(this._everyBeforeSuspendProcess.bind(this));services.appLifecycle.handleOnResumed(this._everyAfterResumeProcess.bind(this))}};ModuleRemoteGovernor=class extends AbstractModule{async _markRemoteLocked(lockByClean=!1){return await this.core.replicator.markRemoteLocked(this.settings,!0,lockByClean)}async _markRemoteUnlocked(){return await this.core.replicator.markRemoteLocked(this.settings,!1,!1)}async _markRemoteResolved(){return await this.core.replicator.markRemoteResolved(this.settings)}onBindFunction(core,services){services.remote.handleMarkLocked(this._markRemoteLocked.bind(this));services.remote.handleMarkUnlocked(this._markRemoteUnlocked.bind(this));services.remote.handleMarkResolved(this._markRemoteResolved.bind(this))}};ContentSplitterCore=class{constructor(params){this.options=params;this.initialised=this.initialise(params)}};ContentSplitterBase=class extends ContentSplitterCore{initialise(_options3){return Promise.resolve(!0)}static isAvailableFor(setting){return!1}getParamsFor(entry){const pieceSize=Math.floor(102400*(1*(this.options.settings.customChunkSize||0)+1)),minimumChunkSize=this.options.settings.minimumChunkSize,path2=entry.path,plainSplit=shouldSplitAsPlainText(path2),blob=entry.data instanceof Blob?entry.data:createTextBlob(entry.data);let useWorker=!0;this.options.settings.disableWorkerForGeneratingChunks&&(useWorker=!1);useWorker&&this.options.settings.processSmallFilesInUIThread&&blob.size<=1024&&(useWorker=!1);return{blob,path:path2,pieceSize,plainSplit,minimumChunkSize,useWorker,useSegmenter:"v2-segmenter"===this.options.settings.chunkSplitterVersion}}async splitContent(entry){await this.initialised;const options=this.getParamsFor(entry);return await this.processSplit(options)}};charNewLine="\n".charCodeAt(0);segmenter="Segmenter"in Intl?function wrapByDefault(func,onError){try{return func()}catch(ex){return onError(ex)}}((()=>new Intl.Segmenter(navigator.language,{granularity:"sentence"})),(err3=>{Logger(`Failed to create Intl.Segmenter: ${err3.message}`,LOG_LEVEL_VERBOSE)})):void 0;MAX_ITEMS=100;ContentSplitterRabinKarp=class extends ContentSplitterBase{static isAvailableFor(setting){return"v3-rabin-karp"===setting.settings.chunkSplitterVersion}async processSplit(options){return options.useWorker?splitPieces2WorkerRabinKarp(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path)():(await splitPiecesRabinKarp(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path))()}};ContentSplitters=[class extends ContentSplitterBase{static isAvailableFor(setting){return"v1"===setting.settings.chunkSplitterVersion||""===setting.settings.chunkSplitterVersion}async processSplit(options){return options.useWorker?splitPieces2Worker(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter)():(await splitPieces2(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter))()}},class extends ContentSplitterBase{static isAvailableFor(setting){return"v2"===setting.settings.chunkSplitterVersion||"v2-segmenter"===setting.settings.chunkSplitterVersion}async processSplit(options){return options.useWorker?splitPieces2WorkerV2(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter)():(await splitPieces2V2(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter))()}},ContentSplitterRabinKarp];ContentSplitter=class extends ContentSplitterCore{constructor(options){super(options)}initialise(options){for(const Splitter of ContentSplitters)if(Splitter.isAvailableFor(options)){this._activeSplitter=new Splitter(options);break}if(!this._activeSplitter)throw new Error("ContentSplitter: No available splitter for settings!!");return this._activeSplitter.initialise(options)}async splitContent(entry){await this.initialised;return this._activeSplitter.splitContent(entry)}};ChangeManager=class{constructor(options){this._callbacks=[];this._database=options.database;this.setupListener()}addCallback(callback){const callbackHandler=new FallbackWeakRef(callback);this._callbacks.push(callbackHandler);return()=>{this._callbacks=this._callbacks.filter((cb2=>cb2!==callbackHandler))}}removeCallback(callback){this._callbacks=this._callbacks.filter((cb2=>cb2.deref()!==callback))}_onChange(changeResponse){if(this._callbacks.length){this._callbacks=this._callbacks.filter((callback=>void 0!==callback.deref()));for(const callback of this._callbacks){const cb2=callback.deref();cb2&&cb2(changeResponse)}}}setupListener(){var _a8,_b5;if(this._changes){null==(_a8=this._changes)||_a8.removeAllListeners();null==(_b5=this._changes)||_b5.cancel();this._changes=void 0}const changes3=this._database.changes({since:"now",live:!0,include_docs:!0});changes3.on("change",(change=>{this._onChange(change)}));changes3.on("error",(err3=>{Logger("ChangeManager Error watching changes");Logger(err3,LOG_LEVEL_VERBOSE)}));this._changes=changes3}teardown(){var _a8,_b5;null==(_a8=this._changes)||_a8.removeAllListeners();null==(_b5=this._changes)||_b5.cancel();this._changes=void 0}restartWatch(){this.teardown();this.setupListener()}};import_diff_match_patch4=__toESM(require_diff_match_patch(),1);ConflictManager=class{constructor(options){this.options=options}get database(){return this.options.database}async getConflictedDoc(path2,rev3){try{const doc=await this.options.entryManager.getDBEntry(path2,{rev:rev3},!1,!0,!0);if(!1===doc)return!1;let data=getDocData(doc.data);"newnote"==doc.datatype?data=readString(new Uint8Array(decodeBinary(doc.data))):doc.datatype;return{deleted:doc.deleted||doc._deleted,ctime:doc.ctime,mtime:doc.mtime,rev:rev3,data}}catch(ex){if(isErrorOfMissingDoc(ex))return!1}return!1}async mergeSensibly(path2,baseRev,currentRev,conflictedRev){function splitDiffPiece(src){const ret=[];do{const d4=src.shift();if(void 0===d4)return ret;const pieces=d4[1].split(/([^\n]*\n)/).filter((f4=>""!=f4));if(void 0===d4)break;d4[0]!=import_diff_match_patch4.DIFF_DELETE&&ret.push(...pieces.map((e3=>[d4[0],e3])));if(d4[0]==import_diff_match_patch4.DIFF_DELETE){const nd=src.shift();if(void 0!==nd){const piecesPair=nd[1].split(/([^\n]*\n)/).filter((f4=>""!=f4));if(nd[0]==import_diff_match_patch4.DIFF_INSERT){for(const pt of pieces){ret.push([d4[0],pt]);const pairP=piecesPair.shift();void 0!==pairP&&ret.push([import_diff_match_patch4.DIFF_INSERT,pairP])}ret.push(...piecesPair.map((e3=>[nd[0],e3])))}else{ret.push(...pieces.map((e3=>[d4[0],e3])));ret.push(...piecesPair.map((e3=>[nd[0],e3])))}}else ret.push(...pieces.map((e3=>[0,e3])))}}while(src.length>0);return ret}var _a8,_b5,_c3,_d2;const baseLeaf=await this.getConflictedDoc(path2,baseRev),leftLeaf=await this.getConflictedDoc(path2,currentRev),rightLeaf=await this.getConflictedDoc(path2,conflictedRev);let autoMerge=!1;if(0==baseLeaf||0==leftLeaf||0==rightLeaf)return!1;if(leftLeaf.deleted&&rightLeaf.deleted)return!1;const dmp=new import_diff_match_patch4.diff_match_patch,mapLeft=dmp.diff_linesToChars_(baseLeaf.data,leftLeaf.data),diffLeftSrc=dmp.diff_main(mapLeft.chars1,mapLeft.chars2,!1);dmp.diff_charsToLines_(diffLeftSrc,mapLeft.lineArray);const mapRight=dmp.diff_linesToChars_(baseLeaf.data,rightLeaf.data),diffRightSrc=dmp.diff_main(mapRight.chars1,mapRight.chars2,!1);dmp.diff_charsToLines_(diffRightSrc,mapRight.lineArray);const diffLeft=splitDiffPiece(diffLeftSrc),diffRight=splitDiffPiece(diffRightSrc);let rightIdx=0,leftIdx=0;const merged=[];autoMerge=!0;LOOP_MERGE:do{if(leftIdx>=diffLeft.length&&rightIdx>=diffRight.length)break LOOP_MERGE;const leftItem=null!=(_a8=diffLeft[leftIdx])?_a8:[0,""],rightItem=null!=(_b5=diffRight[rightIdx])?_b5:[0,""];leftIdx++;rightIdx++;if(leftItem[0]!=import_diff_match_patch4.DIFF_EQUAL||rightItem[0]!=import_diff_match_patch4.DIFF_EQUAL||leftItem[1]!=rightItem[1])if(leftItem[0]!=import_diff_match_patch4.DIFF_DELETE||rightItem[0]!=import_diff_match_patch4.DIFF_DELETE||leftItem[1]!=rightItem[1])if(leftItem[0]!=import_diff_match_patch4.DIFF_INSERT||rightItem[0]!=import_diff_match_patch4.DIFF_INSERT)if(leftItem[0]!=import_diff_match_patch4.DIFF_INSERT){if(rightItem[0]!=import_diff_match_patch4.DIFF_INSERT){if(rightItem[1]!=leftItem[1]){Logger(`MERGING PANIC:${leftItem[0]},${leftItem[1]} == ${rightItem[0]},${rightItem[1]}`,LOG_LEVEL_VERBOSE);autoMerge=!1;break LOOP_MERGE}if(leftItem[0]==import_diff_match_patch4.DIFF_DELETE){if(rightItem[0]==import_diff_match_patch4.DIFF_EQUAL){merged.push(leftItem);continue}autoMerge=!1;break LOOP_MERGE}if(rightItem[0]==import_diff_match_patch4.DIFF_DELETE){if(leftItem[0]==import_diff_match_patch4.DIFF_EQUAL){merged.push(rightItem);continue}autoMerge=!1;break LOOP_MERGE}Logger(`Weird condition:${leftItem[0]},${leftItem[1]} == ${rightItem[0]},${rightItem[1]}`,LOG_LEVEL_VERBOSE);break LOOP_MERGE}leftIdx--;merged.push(rightItem)}else{rightIdx--;merged.push(leftItem)}else{if(leftItem[1]==rightItem[1]){merged.push(leftItem);continue}if(leftLeaf.mtime<=rightLeaf.mtime){merged.push(leftItem);merged.push(rightItem);continue}merged.push(rightItem);merged.push(leftItem)}else{const nextLeftIdx=leftIdx,nextRightIdx=rightIdx,[nextLeftItem,nextRightItem]=[null!=(_c3=diffLeft[nextLeftIdx])?_c3:[0,""],null!=(_d2=diffRight[nextRightIdx])?_d2:[0,""]];if(nextLeftItem[0]==import_diff_match_patch4.DIFF_INSERT&&nextRightItem[0]==import_diff_match_patch4.DIFF_INSERT&&nextLeftItem[1]!=nextRightItem[1]){autoMerge=!1;break}merged.push(leftItem)}else merged.push(leftItem)}while(leftIdxa2.mtime-b3.mtime));let newObj={...baseObj};for(const patch of patches)newObj=applyPatch(newObj,patch.patch);Logger("Object merge is applicable!",LOG_LEVEL_VERBOSE);return JSON.stringify(newObj.data)}catch(ex){Logger("Could not merge object");Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async tryAutoMergeSensibly(path2,test,conflicts){var _a8,_b5,_c3;const conflictedRev=conflicts[0],conflictedRevNo=Number(conflictedRev.split("-")[0]),commonBase=null!=(_c3=null==(_b5=null==(_a8=((await this.database.get(await this.options.entryManager.path2id(path2),{revs_info:!0}))._revs_info||[]).filter((e3=>"available"==e3.status&&Number(e3.rev.split("-")[0])e3[0]!=import_diff_match_patch4.DIFF_DELETE)).map((e3=>e3[1])).join("");Logger(`Sensible merge:${path2}`,LOG_LEVEL_INFO)}else Logger("Sensible merge is not applicable.",LOG_LEVEL_VERBOSE)}else if(isObjectMargeApplicable(path2)){const result=await this.mergeObject(path2,commonBase,test._rev,conflictedRev);if(result){Logger(`Object merge:${path2}`,LOG_LEVEL_INFO);p4=result}else Logger("Object merge is not applicable..",LOG_LEVEL_VERBOSE)}if(void 0!==p4)return{result:p4,conflictedRev}}return!1}async tryAutoMerge(path2,enableMarkdownAutoMerge){const test=await this.options.entryManager.getDBEntry(path2,{conflicts:!0,revs_info:!0},!1,!1,!0);if(!1===test)return{ok:MISSING_OR_ERROR};if(null==test)return{ok:MISSING_OR_ERROR};if(!test._conflicts)return{ok:NOT_CONFLICTED};if(0==test._conflicts.length)return{ok:NOT_CONFLICTED};const conflicts=test._conflicts.sort(((a2,b3)=>Number(a2.split("-")[0])-Number(b3.split("-")[0])));if((isSensibleMargeApplicable(path2)||isObjectMargeApplicable(path2))&&enableMarkdownAutoMerge){const autoMergeResult=await this.tryAutoMergeSensibly(path2,test,conflicts);if(!1!==autoMergeResult)return autoMergeResult}const leftLeaf=await this.getConflictedDoc(path2,test._rev),rightLeaf=await this.getConflictedDoc(path2,conflicts[0]);return{leftRev:test._rev,rightRev:conflicts[0],leftLeaf,rightLeaf}}};EntryManager=class{constructor(options){this.options=options}get localDatabase(){return this.options.database}get hashManager(){return this.options.hashManager}get chunkManager(){return this.options.chunkManager}get chunkFetcher(){return this.options.chunkFetcher}get splitter(){return this.options.splitter}get settings(){return this.options.settings}id2path(id,entry,stripPrefix2){return this.options.$$id2path(id,entry,stripPrefix2)}async path2id(filename,prefix){return await this.options.$$path2id(filename,prefix)}get isOnDemandChunkEnabled(){return this.settings.remoteType===REMOTE_COUCHDB&&!this.settings.useOnlyLocalChunk}isTargetFile(filenameSrc){const file=filenameSrc.startsWith("i:")?filenameSrc.substring(2):filenameSrc;if(file.startsWith("ix:"))return!0;if(file.startsWith("ps:"))return!0;if(file.includes(":"))return!1;if(this.settings.syncOnlyRegEx){const syncOnly=getFileRegExp(this.settings,"syncOnlyRegEx");if(syncOnly.length>0&&!syncOnly.some((e3=>e3.test(file))))return!1}return!this.settings.syncIgnoreRegEx||!getFileRegExp(this.settings,"syncIgnoreRegEx").some((e3=>e3.test(file)))}async prepareChunk(piece){const cachedChunkId=this.chunkManager.getChunkIDFromCache(piece);return!1!==cachedChunkId?{isNew:!1,id:cachedChunkId,piece}:{isNew:!0,id:`h:${await this.hashManager.computeHash(piece)}`,piece}}async getDBEntryMeta(path2,opt,includeDeleted=!1){var _a8,_b5;if(!this.isTargetFile(path2))return!1;const id=await this.path2id(path2);try{let obj=null;obj=opt?await this.localDatabase.get(id,opt):await this.localDatabase.get(id);const deleted=null!=(_b5=null!=(_a8=null==obj?void 0:obj.deleted)?_a8:obj._deleted)?_b5:void 0;if(!includeDeleted&&deleted)return!1;if(obj.type&&"leaf"==obj.type)return!1;if(!obj.type||obj.type&&"notes"==obj.type||"newnote"==obj.type||"plain"==obj.type){const note=obj;let children=[],type="plain";if("newnote"==obj.type||"plain"==obj.type){children=obj.children;type=obj.type}return{data:"",_id:note._id,path:path2,ctime:note.ctime,mtime:note.mtime,size:note.size,_rev:obj._rev,_conflicts:obj._conflicts,children,datatype:type,deleted,type,eden:"eden"in obj?obj.eden:{}}}}catch(ex){if(isErrorOfMissingDoc(ex))return!1;throw ex}return!1}async getDBEntry(path2,opt,dump=!1,waitForReady=!0,includeDeleted=!1){const meta=await this.getDBEntryMeta(path2,opt,includeDeleted);return!!meta&&await this.getDBEntryFromMeta(meta,dump,waitForReady)}async getDBEntryFromMeta(meta,dump=!1,waitForReady=!0){var _a8,_b5,_c3;const filename=this.id2path(meta._id,meta);if(!this.isTargetFile(filename))return!1;const dispFilename=stripAllPrefixes(filename),deleted=null!=(_b5=null!=(_a8=meta.deleted)?_a8:meta._deleted)?_b5:void 0;if(!meta.type||meta.type&&"notes"==meta.type){const note=meta,doc={data:note.data,path:note.path,_id:note._id,ctime:note.ctime,mtime:note.mtime,size:note.size,_rev:meta._rev,_conflicts:meta._conflicts,children:[],datatype:"newnote",deleted,type:"newnote",eden:"eden"in meta?meta.eden:{}};if(dump){Logger("--Old fashioned document--");Logger(doc)}return doc}if("newnote"==meta.type||"plain"==meta.type){if(dump){const conflicts=await this.localDatabase.get(meta._id,{rev:meta._rev,conflicts:!0,revs_info:!0});Logger("-- Conflicts --");Logger(null!=(_c3=conflicts._conflicts)?_c3:"No conflicts");Logger("-- Revs info -- ");Logger(conflicts._revs_info)}try{if(dump){Logger("--Bare document--");Logger(meta)}let edenChunks={};if(meta.eden&&Object.keys(meta.eden).length>0){const chunks2=Object.entries(meta.eden).map((([id,data])=>({_id:id,data:data.data,type:"leaf"})));edenChunks=Object.fromEntries(chunks2.map((e3=>[e3._id,e3])))}const isChunksCorrectedIncrementally=this.settings.remoteType!==RemoteTypes_REMOTE_MINIO,isNetworkEnabled=this.isOnDemandChunkEnabled&&this.settings.remoteType!==RemoteTypes_REMOTE_MINIO,timeout=waitForReady?isChunksCorrectedIncrementally?3e4:5e3:isNetworkEnabled?5e3:0,childrenKeys=[...meta.children],chunks=await this.chunkManager.read(childrenKeys,{skipCache:!1,timeout,preventRemoteRequest:!isNetworkEnabled},edenChunks);if(chunks.some((e3=>!1===e3)))throw new Error("Load failed");const doc={data:chunks.map((e3=>e3.data)),path:meta.path,_id:meta._id,ctime:meta.ctime,mtime:meta.mtime,size:meta.size,_rev:meta._rev,children:meta.children,datatype:meta.type,_conflicts:meta._conflicts,eden:meta.eden,deleted,type:meta.type};if(dump){Logger("--Loaded Document--");Logger(doc)}return doc}catch(ex){if(isErrorOfMissingDoc(ex)){Logger(`Missing document content!, could not read ${dispFilename}(${meta._id.substring(0,8)}) from database.`,LOG_LEVEL_NOTICE);return!1}Logger(`Something went wrong on reading ${dispFilename}(${meta._id.substring(0,8)}) from database:`,LOG_LEVEL_NOTICE);Logger(ex)}}return!1}async deleteDBEntry(path2,opt){var _a8;if(!this.isTargetFile(path2))return!1;const id=await this.path2id(path2);try{return null!=(_a8=await serialized("file:"+path2,(async()=>{let obj=null;obj=opt?await this.localDatabase.get(id,opt):await this.localDatabase.get(id);const revDeletion=opt&&""!=("rev"in opt?opt.rev:"");if(obj.type&&"leaf"==obj.type)return!1;if(!obj.type||obj.type&&"notes"==obj.type){obj._deleted=!0;const r4=await this.localDatabase.put(obj,{force:!revDeletion});Logger(`Entry removed:${path2} (${obj._id.substring(0,8)}-${r4.rev})`);return!0}if("newnote"==obj.type||"plain"==obj.type){if(revDeletion)obj._deleted=!0;else{obj.deleted=!0;obj.mtime=Date.now();this.settings.deleteMetadataOfDeletedFiles&&(obj._deleted=!0)}const r4=await this.localDatabase.put(obj,{force:!revDeletion});Logger(`Entry removed:${path2} (${obj._id.substring(0,8)}-${r4.rev})`);return!0}return!1})))&&_a8}catch(ex){if(isErrorOfMissingDoc(ex))return!1;throw ex}}async putDBEntry(note,onlyChunks){const filename=this.id2path(note._id,note),dispFilename=stripAllPrefixes(filename);note.eden||(note.eden={});if(!this.isTargetFile(filename)){Logger(`File skipped:${dispFilename}`,LOG_LEVEL_VERBOSE);return!1}const data=note.data instanceof Blob?note.data:createTextBlob(note.data);note.data=data;note.type=isTextBlob(data)?"plain":"newnote";note.datatype=note.type;await this.splitter.initialised;const result=await this.chunkManager.transaction((async()=>{var _a8;let bufferedChunk=[],bufferedSize=0,writeCount=0,newCount=0,cachedCount=0,resultCachedCount=0,duplicatedCount=0,totalWritingCount=0,createChunkCount=0;const chunks=[];let writeChars=0;const flushBufferedChunks=async()=>{if(0===bufferedChunk.length){Logger(`No chunks to flush for ${dispFilename}`,LOG_LEVEL_VERBOSE);return!0}const writeBuf=[...bufferedChunk];bufferedSize=0;bufferedChunk=[];const result2=await this.chunkManager.write(writeBuf,{skipCache:!1,timeout:0},note._id);if(!1===result2.result){Logger(`Failed to write buffered chunks for ${dispFilename}`,LOG_LEVEL_NOTICE);return!1}totalWritingCount++;writeCount+=result2.processed.written;resultCachedCount+=result2.processed.cached;duplicatedCount+=result2.processed.duplicated;writeChars+=writeBuf.map((e3=>e3.data.length)).reduce(((a2,b3)=>a2+b3),0);Logger(`Flushed ${writeBuf.length} (${writeChars}) chunks for ${dispFilename}`,LOG_LEVEL_VERBOSE);return!0},flushIfNeeded=async()=>{if(bufferedSize>2048e3&&!await flushBufferedChunks()){Logger(`Failed to flush buffered chunks for ${dispFilename}`,LOG_LEVEL_NOTICE);return!1}return!0},addBuffer=async(id,data2)=>{const chunk={_id:id,data:data2,type:"leaf"};bufferedChunk.push(chunk);chunks.push(chunk._id);bufferedSize+=chunk.data.length;return await flushIfNeeded()},pieces=await this.splitter.splitContent(note);let totalChunkCount=0;try{for await(const piece of pieces){totalChunkCount++;if(0===piece.length)continue;createChunkCount++;const chunk=await this.prepareChunk(piece);cachedCount+=chunk.isNew?0:1;newCount+=chunk.isNew?1:0;if(!await addBuffer(chunk.id,chunk.piece))return!1}}catch(ex){Logger(`Error processing pieces for ${dispFilename}`);Logger(ex,LOG_LEVEL_VERBOSE);return!1}if(!await flushBufferedChunks())return!1;const dataSize=note.data.size;Logger(`Chunks processed for ${dispFilename} (${dataSize}): 📚:${totalChunkCount} (${createChunkCount}) , 📥:${totalWritingCount} (✨: ${newCount}, 🗃️: ${cachedCount} (${resultCachedCount}) / 🗄️: ${writeCount}, ♻:${duplicatedCount})`,LOG_LEVEL_VERBOSE);dataSize>0&&0===totalWritingCount&&Logger(`No data to save in ${dispFilename}!! This document may be corrupted in the local database! Please back it up immediately, and report an issue!`,LOG_LEVEL_NOTICE);if(onlyChunks)return{id:note._id,ok:!0,rev:"dummy"};const newDoc={children:chunks,_id:note._id,path:note.path,ctime:note.ctime,mtime:note.mtime,size:note.size,type:note.datatype,eden:{}};return null!=(_a8=await serialized("file:"+filename,(async()=>{try{const old=await this.localDatabase.get(newDoc._id);newDoc._rev=old._rev}catch(ex){if(!isErrorOfMissingDoc(ex))throw ex}const r4=await this.localDatabase.put(newDoc,{force:!0});return!!r4.ok&&r4})))&&_a8}));if(!1===result){Logger(`Failed to write document ${dispFilename}`,LOG_LEVEL_NOTICE);return!1}Logger(`Document saved: ${dispFilename} (${result.id.substring(0,8)}-${result.rev})`,LOG_LEVEL_VERBOSE);return result}};HashManagerCore=class{constructor(options){this.useEncryption=!1;this.hashedPassphrase="";this.hashedPassphrase32=0;this.options=options;this.settings=options.settings;this.applyOptions(options)}applyOptions(options){var _a8;options&&(this.options=options);this.settings=this.options.settings;this.useEncryption=null!=(_a8=this.settings.encrypt)&&_a8;const passphrase=this.settings.passphrase||"",usingLetters=~~(passphrase.length/4*3),passphraseForHash="a83hrf7fy7sa8g31"+passphrase.substring(0,usingLetters);this.hashedPassphrase=fallbackMixedHashEach(passphraseForHash);this.hashedPassphrase32=mixedHash(passphraseForHash,305419896)[0]}initialise(){if(this.initialiseTask)return this.initialiseTask;this.initialiseTask=this.processInitialise();return this.initialiseTask}async computeHash(piece){await this.initialiseTask;return this.useEncryption?"+"+await this.computeHashWithEncryption(piece):await this.computeHashWithoutEncryption(piece)}static isAvailableFor(hashAlg){return!1}};XXHashHashManager=class extends HashManagerCore{constructor(options){super(options)}async processInitialise(){this.xxhash=await e();return!0}};XXHash32RawHashManager=class extends XXHashHashManager{static isAvailableFor(hashAlg){return""===hashAlg}computeHashWithEncryption(piece){return Promise.resolve((this.xxhash.h32Raw((new TextEncoder).encode(piece))^this.hashedPassphrase32^piece.length).toString(36))}computeHashWithoutEncryption(piece){return Promise.resolve((this.xxhash.h32Raw((new TextEncoder).encode(piece))^piece.length).toString(36))}};XXHash64HashManager=class extends XXHashHashManager{static isAvailableFor(hashAlg){return"xxhash64"===hashAlg}computeHashWithEncryption(piece){return Promise.resolve(this.xxhash.h64(`${piece}-${this.hashedPassphrase}-${piece.length}`).toString(36))}computeHashWithoutEncryption(piece){return Promise.resolve(this.xxhash.h64(`${piece}-${piece.length}`).toString(36))}};FallbackWasmHashManager=class extends XXHashHashManager{static isAvailableFor(hashAlg){return!0}computeHashWithEncryption(piece){return Promise.resolve(this.xxhash.h32(`${piece}-${this.hashedPassphrase}-${piece.length}`).toString(36))}computeHashWithoutEncryption(piece){return Promise.resolve(this.xxhash.h32(`${piece}-${piece.length}`).toString(36))}};PureJSHashManager=class extends HashManagerCore{static isAvailableFor(hashAlg){return"mixed-purejs"===hashAlg}processInitialise(){return Promise.resolve(!0)}computeHashWithEncryption(input){return Promise.resolve(fallbackMixedHashEach(`${input}${this.hashedPassphrase}${input.length}`))}computeHashWithoutEncryption(input){return Promise.resolve(fallbackMixedHashEach(`${input}-${input.length}`))}};HashManagers=[XXHash64HashManager,XXHash32RawHashManager,class extends HashManagerCore{static isAvailableFor(hashAlg){return"sha1"===hashAlg}processInitialise(){return Promise.resolve(!0)}computeHashWithEncryption(input){return sha12(`${input}-${this.hashedPassphrase}-${input.length}`)}computeHashWithoutEncryption(input){return sha12(`${input}-${input.length}`)}},PureJSHashManager,FallbackWasmHashManager,class extends PureJSHashManager{static isAvailableFor(_hashAlg){return!0}}];HashManager=class extends HashManagerCore{constructor(options){super(options);this.manager=void 0}static isAvailableFor(hashAlg){return HashManagers.some((manager=>manager.isAvailableFor(hashAlg)))}async setManager(){for(const Manager of HashManagers)if(Manager.isAvailableFor(this.settings.hashAlg)){this.manager=new Manager(this.options);return await this.manager.initialise()}throw new Error(`HashManager for ${this.settings.hashAlg} is not available`)}async processInitialise(){if(await this.setManager()){Logger(`HashManager for ${this.settings.hashAlg} has been initialised`,LOG_LEVEL_VERBOSE);return!0}Logger(`HashManager for ${this.settings.hashAlg} failed to initialise`);throw new Error(`HashManager for ${this.settings.hashAlg} failed to initialise`)}computeHash(piece){return this.manager.computeHash(piece)}computeHashWithoutEncryption(piece){return this.manager.computeHashWithoutEncryption(piece)}computeHashWithEncryption(piece){return this.manager.computeHashWithEncryption(piece)}};NetworkManager=class{};NetworkManagerBrowser=class extends NetworkManager{get isOnline(){return navigator.onLine}};LiveSyncManagers=class{constructor(options){this.options=options;if(options.networkManager)this.networkManager=options.networkManager;else{if(!("navigator"in globalThis))throw new LiveSyncError("No NetworkManager available");this.networkManager=new NetworkManagerBrowser}}get settings(){return this.options.settings}async teardownManagers(){if(this.changeManager){this.changeManager.teardown();this.changeManager=void 0}if(this.chunkFetcher){this.chunkFetcher.destroy();this.chunkFetcher=void 0}if(this.chunkManager){this.chunkManager.destroy();this.chunkManager=void 0}return await Promise.resolve()}getProxy(){const getDB=()=>this.options.database,getChangeManager=()=>this.changeManager,getChunkManager=()=>this.chunkManager,getReplicator=()=>this.options.getActiveReplicator(),getSettings=()=>this.options.settings,getEntryManager=()=>this.entryManager,getHashManager=()=>this.hashManager,getChunkFetcher=()=>this.chunkFetcher,getSplitter=()=>this.splitter;return{get database(){return getDB()},get changeManager(){return getChangeManager()},get chunkManager(){return getChunkManager()},getActiveReplicator:()=>getReplicator(),get settings(){return getSettings()},get entryManager(){return getEntryManager()},get hashManager(){return getHashManager()},$$path2id:(filename,prefix)=>this.options.path2id(filename,prefix),$$id2path:(id,entry,stripPrefix2)=>this.options.id2path(id,entry,stripPrefix2),get chunkFetcher(){return getChunkFetcher()},get splitter(){return getSplitter()}}}async initManagers(){await this.teardownManagers();const proxy2=this.getProxy();this.hashManager=new HashManager({...proxy2});this.splitter=new ContentSplitter({...proxy2});await this.splitter.initialise(proxy2);await this.hashManager.initialise();this.changeManager=new ChangeManager(proxy2);this.chunkManager=new ChunkManager({...proxy2,maxCacheSize:10*this.settings.hashCacheMaxCount});this.chunkFetcher=new ChunkFetcher(proxy2);this.entryManager=new EntryManager({...proxy2});this.conflictManager=new ConflictManager({...proxy2})}clearCaches(){var _a8;null==(_a8=this.chunkManager)||_a8.clearCaches()}async prepareHashFunction(){const proxy2=this.getProxy();this.hashManager=new HashManager(proxy2);await this.hashManager.initialise()}};ModuleLocalDatabaseObsidian=class extends AbstractModule{_everyOnloadStart(){return Promise.resolve(!0)}async _openDatabase(){null!=this.localDatabase&&await this.localDatabase.close();const vaultName=this.services.vault.getVaultName();this._log($msg("moduleLocalDatabase.logWaitingForReady"));const getDB=()=>this.core.localDatabase.localDatabase,getSettings=()=>this.core.settings;this.core.managers=new LiveSyncManagers({get database(){return getDB()},getActiveReplicator:()=>this.core.replicator,id2path:this.services.path.id2path,path2id:this.services.path.path2id,get settings(){return getSettings()}});this.core.localDatabase=new LiveSyncLocalDB(vaultName,this.core);initializeStores(vaultName);return await this.localDatabase.initializeDatabase()}_isDatabaseReady(){return null!=this.localDatabase&&this.localDatabase.isReady}onBindFunction(core,services){services.database.handleIsDatabaseReady(this._isDatabaseReady.bind(this));services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this));services.database.handleOpenDatabase(this._openDatabase.bind(this))}};ModuleConflictChecker=class extends AbstractModule{constructor(){super(...arguments);this.conflictResolveQueue=new QueueProcessor((async filenames=>{const filename=filenames[0];return await this.services.conflict.resolve(filename)}),{suspended:!1,batchSize:1,concurrentLimit:10,delay:0,keepResultUntilDownstreamConnected:!1}).replaceEnqueueProcessor(((queue2,newEntity)=>{sendValue("cancel-resolve-conflict:"+newEntity,!0);return[...[...queue2].filter((e3=>e3!=newEntity)),newEntity]}));this.conflictCheckQueue=new QueueProcessor((files=>{const filename=files[0];return Promise.resolve([filename])}),{suspended:!1,batchSize:1,concurrentLimit:10,delay:0,keepResultUntilDownstreamConnected:!0,pipeTo:this.conflictResolveQueue,totalRemainingReactiveSource:this.core.conflictProcessQueueCount})}async _queueConflictCheckIfOpen(file){const path2=file;if(this.settings.checkConflictOnlyOnOpen){const af2=this.services.vault.getActiveFilePath();if(af2&&af2!=path2){this._log(`${file} is conflicted, merging process has been postponed.`,LOG_LEVEL_NOTICE);return}}await this.services.conflict.queueCheckFor(path2)}async _queueConflictCheck(file){const optionalConflictResult=await this.services.conflict.getOptionalConflictCheckMethod(file);1!=optionalConflictResult&&("newer"===optionalConflictResult?await this.services.conflict.resolveByNewest(file):this.conflictCheckQueue.enqueue(file))}_waitForAllConflictProcessed(){return this.conflictResolveQueue.waitForAllProcessed()}onBindFunction(core,services){services.conflict.handleQueueCheckForIfOpen(this._queueConflictCheckIfOpen.bind(this));services.conflict.handleQueueCheckFor(this._queueConflictCheck.bind(this));services.conflict.handleEnsureAllProcessed(this._waitForAllConflictProcessed.bind(this))}};ModuleResolvingMismatchedTweaks=class extends AbstractModule{async _anyAfterConnectCheckFailed(){if(!this.core.replicator.tweakSettingsMismatched&&!this.core.replicator.preferredTweakValue)return!1;const preferred=this.core.replicator.preferredTweakValue;if(!preferred)return!1;const ret=await this.services.tweakValue.askResolvingMismatched(preferred);return"OK"!=ret&&("CHECKAGAIN"==ret?"CHECKAGAIN":"IGNORE"==ret||void 0)}async _checkAndAskResolvingMismatchedTweaks(preferred){const mine=extractObject(TweakValuesShouldMatchedTemplate,this.settings),items=Object.entries(TweakValuesShouldMatchedTemplate);let rebuildRequired=!1,rebuildRecommended=!1;const tableRows=[];for(const v2 of items){const key3=v2[0],valueMine=escapeMarkdownValue(mine[key3]),valuePreferred=escapeMarkdownValue(preferred[key3]);if(valueMine!=valuePreferred){-1!==IncompatibleChanges.indexOf(key3)&&(rebuildRequired=!0);for(const pattern of IncompatibleChangesInSpecificPattern){if(pattern.key!==key3)continue;const isFromConditionMet="from"in pattern&&pattern.from===mine[key3],isToConditionMet="to"in pattern&&pattern.to===preferred[key3];(isFromConditionMet||isToConditionMet)&&(pattern.isRecommendation?rebuildRecommended=!0:rebuildRequired=!0)}-1!==CompatibleButLossyChanges.indexOf(key3)&&(rebuildRecommended=!0);tableRows.push($msg("TweakMismatchResolve.Table.Row",{name:confName(key3),self:valueMine,remote:valuePreferred}))}}const additionalMessage=rebuildRequired&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired"):"",additionalMessage2=rebuildRecommended&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended"):"",table2=$msg("TweakMismatchResolve.Table",{rows:tableRows.join("\n")}),message=$msg("TweakMismatchResolve.Message.MainTweakResolving",{table:table2,additionalMessage:[additionalMessage,additionalMessage2].filter((v2=>v2)).join("\n")}),CHOICE_USE_REMOTE=$msg("TweakMismatchResolve.Action.UseRemote"),CHOICE_USE_REMOTE_WITH_REBUILD=$msg("TweakMismatchResolve.Action.UseRemoteWithRebuild"),CHOICE_USE_REMOTE_PREVENT_REBUILD=$msg("TweakMismatchResolve.Action.UseRemoteAcceptIncompatible"),CHOICE_USE_MINE=$msg("TweakMismatchResolve.Action.UseMine"),CHOICE_USE_MINE_WITH_REBUILD=$msg("TweakMismatchResolve.Action.UseMineWithRebuild"),CHOICE_USE_MINE_PREVENT_REBUILD=$msg("TweakMismatchResolve.Action.UseMineAcceptIncompatible"),CHOICE_DISMISS=$msg("TweakMismatchResolve.Action.Dismiss"),CHOICE_AND_VALUES=[];if(rebuildRequired){CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE_WITH_REBUILD,[preferred,!0]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE_WITH_REBUILD,[!0,!0]]);CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE_PREVENT_REBUILD,[preferred,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE_PREVENT_REBUILD,[!0,!1]])}else if(rebuildRecommended){CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE,[preferred,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE,[!0,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE_WITH_REBUILD,[!0,!0]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE_WITH_REBUILD,[!0,!0]])}else{CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE,[preferred,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE,[!0,!1]])}CHOICE_AND_VALUES.push([CHOICE_DISMISS,[!1,!1]]);const CHOICES=Object.fromEntries(CHOICE_AND_VALUES),retKey=await this.core.confirm.askSelectStringDialogue(message,Object.keys(CHOICES),{title:$msg("TweakMismatchResolve.Title.TweakResolving"),timeout:60,defaultAction:CHOICE_DISMISS});return retKey?CHOICES[retKey]:[!1,!1]}async _askResolvingMismatchedTweaks(){if(!this.core.replicator.tweakSettingsMismatched)return"OK";const tweaks=this.core.replicator.preferredTweakValue;if(!tweaks)return"IGNORE";const preferred=extractObject(TweakValuesShouldMatchedTemplate,tweaks),[conf,rebuildRequired]=await this.services.tweakValue.checkAndAskResolvingMismatched(preferred);if(!conf)return"IGNORE";if(!0===conf){await this.core.replicator.setPreferredRemoteTweakSettings(this.settings);rebuildRequired&&await this.core.rebuilder.$rebuildRemote();Logger("Tweak values on the remote server have been updated. Your other device will see this message.",LOG_LEVEL_NOTICE);return"CHECKAGAIN"}if(conf){this.settings={...this.settings,...conf};await this.core.replicator.setPreferredRemoteTweakSettings(this.settings);await this.services.setting.saveSettingData();rebuildRequired&&await this.core.rebuilder.$fetchLocal();Logger("Configuration has been updated as configured by the other device.",LOG_LEVEL_NOTICE);return"CHECKAGAIN"}return"IGNORE"}async _fetchRemotePreferredTweakValues(trialSetting){const replicator=await this.services.replicator.getNewReplicator(trialSetting);if(!replicator){this._log("The remote type is not supported for fetching preferred tweak values.",LOG_LEVEL_NOTICE);return!1}if(await replicator.tryConnectRemote(trialSetting)){const preferred=await replicator.getRemotePreferredTweakValues(trialSetting);if(preferred)return preferred;this._log("Failed to get the preferred tweak values from the remote server.",LOG_LEVEL_NOTICE);return!1}this._log("Failed to connect to the remote server.",LOG_LEVEL_NOTICE);return!1}async _checkAndAskUseRemoteConfiguration(trialSetting){const preferred=await this.services.tweakValue.fetchRemotePreferred(trialSetting);return preferred?await this.services.tweakValue.askUseRemoteConfiguration(trialSetting,preferred):{result:!1,requireFetch:!1}}async _askUseRemoteConfiguration(trialSetting,preferred){const items=Object.entries(TweakValuesShouldMatchedTemplate);let rebuildRequired=!1,rebuildRecommended=!1,differenceCount=0;const tableRows=[];for(const v2 of items){const key3=v2[0],remoteValueForDisplay=escapeMarkdownValue(preferred[key3]),currentValueForDisplay=`${escapeMarkdownValue(null==trialSetting?void 0:trialSetting[key3])}`;if((null==trialSetting?void 0:trialSetting[key3])!==preferred[key3]){-1!==IncompatibleChanges.indexOf(key3)&&(rebuildRequired=!0);for(const pattern of IncompatibleChangesInSpecificPattern){if(pattern.key!==key3)continue;const isFromConditionMet="from"in pattern&&pattern.from===(null==trialSetting?void 0:trialSetting[key3]),isToConditionMet="to"in pattern&&pattern.to===preferred[key3];(isFromConditionMet||isToConditionMet)&&(pattern.isRecommendation?rebuildRecommended=!0:rebuildRequired=!0)}-1!==CompatibleButLossyChanges.indexOf(key3)&&(rebuildRecommended=!0);tableRows.push($msg("TweakMismatchResolve.Table.Row",{name:confName(key3),self:currentValueForDisplay,remote:remoteValueForDisplay}));differenceCount++}}if(0===differenceCount){this._log("The settings in the remote database are the same as the local database.",LOG_LEVEL_NOTICE);return{result:!1,requireFetch:!1}}const additionalMessage=rebuildRequired&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired"):"",additionalMessage2=rebuildRecommended&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended"):"",table2=$msg("TweakMismatchResolve.Table",{rows:tableRows.join("\n")}),message=$msg("TweakMismatchResolve.Message.Main",{table:table2,additionalMessage:[additionalMessage,additionalMessage2].filter((v2=>v2)).join("\n")}),CHOICE_USE_REMOTE=$msg("TweakMismatchResolve.Action.UseConfigured"),CHOICE_DISMISS=$msg("TweakMismatchResolve.Action.Dismiss"),CHOICES=[CHOICE_USE_REMOTE,CHOICE_DISMISS],retKey=await this.core.confirm.askSelectStringDialogue(message,CHOICES,{title:$msg("TweakMismatchResolve.Title.UseRemoteConfig"),timeout:0,defaultAction:CHOICE_DISMISS});return retKey?retKey===CHOICE_DISMISS?{result:!1,requireFetch:!1}:retKey===CHOICE_USE_REMOTE?{result:{...trialSetting,...preferred},requireFetch:rebuildRequired}:{result:!1,requireFetch:!1}:{result:!1,requireFetch:!1}}onBindFunction(core,services){services.tweakValue.handleFetchRemotePreferred(this._fetchRemotePreferredTweakValues.bind(this));services.tweakValue.handleCheckAndAskResolvingMismatched(this._checkAndAskResolvingMismatchedTweaks.bind(this));services.tweakValue.handleAskResolvingMismatched(this._askResolvingMismatchedTweaks.bind(this));services.tweakValue.handleCheckAndAskUseRemoteConfiguration(this._checkAndAskUseRemoteConfiguration.bind(this));services.tweakValue.handleAskUseRemoteConfiguration(this._askUseRemoteConfiguration.bind(this));services.replication.handleCheckConnectionFailure(this._anyAfterConnectCheckFailed.bind(this))}};ModuleIntegratedTest=class extends AbstractObsidianModule{async waitFor(proc,timeout=1e4){await delay(100);const start=Date.now();for(;!await proc();){if(timeout>0&&Date.now()-start>timeout){this._log("Timeout");return!1}await delay(500)}return!0}waitWithReplicating(proc,timeout=1e4){return this.waitFor((async()=>{await this.tryReplicate();return await proc()}),timeout)}async storageContentIsEqual(file,content){try{return await this.readStorageContent(file)===content}catch(e3){this._log(`Error: ${e3}`);return!1}}async assert(proc){if(!await proc()){this._log("Assertion failed");return!1}return!0}async __orDie(key3,proc){if(!await this._test(key3,proc))throw new Error(`${key3}`);return!0}tryReplicate(){if(!this.settings.liveSync)return shareRunningResult("replicate-test",(async()=>{await this.services.replication.replicate()}))}async readStorageContent(file){if(await this.core.storageAccess.isExistsIncludeHidden(file))return await this.core.storageAccess.readHiddenFileText(file)}async __proceed(no,title){const stepContent=`Step ${no}`;await this.services.conflict.resolveByNewest("_STEP.md");await this.core.storageAccess.writeFileAuto("_STEP.md",stepContent);await this.__orDie(`Wait for acknowledge ${no}`,(async()=>!!await this.waitWithReplicating((async()=>await this.storageContentIsEqual("_STEP_ACK.md",stepContent)),2e4)));return!0}async __join(no,title){const stepContent=`Step ${no}`;await this.__orDie(`Wait for step ${no} (${title})`,(async()=>!!await this.waitWithReplicating((async()=>await this.storageContentIsEqual("_STEP.md",stepContent)),2e4)));await this.services.conflict.resolveByNewest("_STEP_ACK.md");await this.core.storageAccess.writeFileAuto("_STEP_ACK.md",stepContent);await this.tryReplicate();return!0}async performStep({step,title,isGameChanger,proc,check}){if(isGameChanger){await this.__proceed(step,title);try{await proc()}catch(e3){this._log(`Error: ${e3}`);return!1}return await this.__orDie(`Step ${step} - ${title}`,(async()=>await this.waitWithReplicating(check)))}return await this.__join(step,title)}async nonLiveTestRunner(isLeader,testMain){const storage=this.core.storageAccess;let testFileName;this.addTestResult("-------Starting ... ",!0,`Test as ${isLeader?"Leader":"Receiver"} command file IT.md`);isLeader&&await this.__proceed(0,"start");await this.tryReplicate();await this.performStep({step:0,title:"Make sure that command File Not Exists",isGameChanger:isLeader,proc:async()=>await storage.removeHidden("IT.md"),check:async()=>!await storage.isExistsIncludeHidden("IT.md")});await this.performStep({step:1,title:"Make sure that command File Not Exists On Receiver",isGameChanger:!isLeader,proc:async()=>await storage.removeHidden("ITx.md"),check:async()=>!await storage.isExistsIncludeHidden("ITx.md")});await this.performStep({step:2,title:"Decide the test file name",isGameChanger:isLeader,proc:async()=>{testFileName=Date.now()+"-"+Math.ceil(1e3*Math.random())+".md";await storage.writeFileAuto("IT.md",testFileName)},check:()=>Promise.resolve(!0)});await this.performStep({step:3,title:"Wait for the command file to be arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await storage.isExistsIncludeHidden("IT.md")});await this.performStep({step:4,title:"Send the response file",isGameChanger:!isLeader,proc:async()=>{await storage.writeHiddenFileAuto("ITx.md","!")},check:()=>Promise.resolve(!0)});await this.performStep({step:5,title:"Wait for the response file to be arrived",isGameChanger:isLeader,proc:async()=>{},check:async()=>await storage.isExistsIncludeHidden("ITx.md")});await this.performStep({step:6,title:"Proceed to begin the test",isGameChanger:isLeader,proc:async()=>{},check:()=>Promise.resolve(!0)});await this.performStep({step:6,title:"Begin the test",isGameChanger:!0,proc:async()=>{},check:()=>Promise.resolve(!0)});try{this.addTestResult("** Main------",!0,"");if(isLeader)return await testMain(testFileName,!0);{const testFileName2=await this.readStorageContent("IT.md");this.addTestResult("testFileName",!0,`Request client to use :${testFileName2}`);return await testMain(testFileName2,!1)}}finally{this.addTestResult("Teardown",!0,`Deleting ${testFileName}`);await storage.removeHidden(testFileName)}return!0}async testBasic(filename,isLeader){const storage=this.core.storageAccess,database=this.core.databaseFileAccess;await this.addTestResult("---**Starting Basic Test**---",!0,`Test as ${isLeader?"Leader":"Receiver"} command file ${filename}`);await this.performStep({step:0,title:"Make sure that file is not exist",isGameChanger:!isLeader,proc:async()=>{},check:async()=>!await storage.isExists(filename)});await this.performStep({step:1,title:"Write a file",isGameChanger:isLeader,proc:async()=>await storage.writeFileAuto(filename,"Hello World"),check:async()=>await storage.isExists(filename)});await this.performStep({step:2,title:"Make sure the file is arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await storage.isExists(filename)});await this.performStep({step:3,title:"Update to Hello World 2",isGameChanger:isLeader,proc:async()=>await storage.writeFileAuto(filename,"Hello World 2"),check:async()=>await this.storageContentIsEqual(filename,"Hello World 2")});await this.performStep({step:4,title:"Make sure the modified file is arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,"Hello World 2")});await this.performStep({step:5,title:"Update to Hello World 3",isGameChanger:!isLeader,proc:async()=>await storage.writeFileAuto(filename,"Hello World 3"),check:async()=>await this.storageContentIsEqual(filename,"Hello World 3")});await this.performStep({step:6,title:"Make sure the modified file is arrived",isGameChanger:isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,"Hello World 3")});await this.performStep({step:7,title:"Update to Multiline",isGameChanger:isLeader,proc:async()=>await storage.writeFileAuto(filename,"Line1:A\nLine2:B\nLine3:C\nLine4:D"),check:async()=>await this.storageContentIsEqual(filename,"Line1:A\nLine2:B\nLine3:C\nLine4:D")});await this.performStep({step:8,title:"Make sure the modified file is arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,"Line1:A\nLine2:B\nLine3:C\nLine4:D")});if(!this.settings.liveSync){const multiLineContentL="Line1:A\nLine2:B\nLine3:C!\nLine4:D",multiLineContentC="Line1:A\nLine2:bbbbb\nLine3:C\nLine4:D";await this.performStep({step:9,title:"Progress to be conflicted",isGameChanger:isLeader,proc:async()=>{},check:()=>Promise.resolve(!0)});await storage.writeFileAuto(filename,isLeader?multiLineContentL:multiLineContentC);await this.performStep({step:10,title:"Update As Conflicted",isGameChanger:!isLeader,proc:async()=>{},check:()=>Promise.resolve(!0)});await this.performStep({step:10,title:"Make sure Automatically resolved",isGameChanger:isLeader,proc:async()=>{},check:async()=>0===(await database.getConflictedRevs(filename)).length});await this.performStep({step:11,title:"Make sure Automatically resolved",isGameChanger:!isLeader,proc:async()=>{},check:async()=>0===(await database.getConflictedRevs(filename)).length});const sensiblyMergedContent="Line1:A\nLine2:bbbbb\nLine3:C!\nLine4:D";await this.performStep({step:12,title:"Make sure Sensibly Merged on Leader",isGameChanger:isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,sensiblyMergedContent)});await this.performStep({step:13,title:"Make sure Sensibly Merged on Receiver",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,sensiblyMergedContent)})}await this.performStep({step:14,title:"Delete File",isGameChanger:isLeader,proc:async()=>{await storage.removeHidden(filename)},check:async()=>!await storage.isExists(filename)});await this.performStep({step:15,title:"Make sure File is deleted",isGameChanger:!isLeader,proc:async()=>{},check:async()=>!await storage.isExists(filename)});this._log("The Basic Test has been completed",LOG_LEVEL_NOTICE);return!0}async testBasicEvent(isLeader){this.settings.liveSync=!1;await this.saveSettings();await this._test("basic",(async()=>await this.nonLiveTestRunner(isLeader,((t3,l2)=>this.testBasic(t3,l2)))))}async testBasicLive(isLeader){this.settings.liveSync=!0;await this.saveSettings();await this._test("basic",(async()=>await this.nonLiveTestRunner(isLeader,((t3,l2)=>this.testBasic(t3,l2)))))}async _everyModuleTestMultiDevice(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);const isLeader=-1===this.core.services.vault.vaultName().indexOf("recv");this.addTestResult("-------",!0,"Test as "+(isLeader?"Leader":"Receiver"));try{this._log("Starting Test");await this.testBasicEvent(isLeader);this.settings.remoteType==REMOTE_MINIO&&await this.testBasicLive(isLeader)}catch(e3){this._log(e3);this._log(`Error: ${e3}`);return Promise.resolve(!1)}return Promise.resolve(!0)}onBindFunction(core,services){services.test.handleTestMultiDevice(this._everyModuleTestMultiDevice.bind(this))}};ModuleRebuilder=class extends AbstractModule{_everyOnload(){this.core.rebuilder=this;return Promise.resolve(!0)}async $performRebuildDB(method){"localOnly"==method&&await this.$fetchLocal();"localOnlyWithChunks"==method&&await this.$fetchLocal(!0);"remoteOnly"==method&&await this.$rebuildRemote();"rebuildBothByThisDevice"==method&&await this.$rebuildEverything()}async informOptionalFeatures(){await this.core.services.UI.showMarkdownDialog("All optional features are disabled","Customisation Sync and Hidden File Sync will all be disabled.\nPlease enable them from the settings screen after setup is complete.",["OK"])}async askUsingOptionalFeature(opt){"yes"==await this.core.confirm.askYesNoDialog("Do you want to enable extra features? If you are new to Self-hosted LiveSync, try the core feature first!",{title:"Enable extra features",defaultOption:"No",timeout:15})&&await this.services.setting.suggestOptionalFeatures(opt)}async rebuildRemote(){await this.services.setting.suspendExtraSync();this.core.settings.isConfigured=!0;this.core.settings.notifyThresholdOfRemoteStorageSize=DEFAULT_SETTINGS.notifyThresholdOfRemoteStorageSize;await this.services.setting.realiseSetting();await this.services.remote.markLocked();await this.services.remote.tryResetDatabase();await this.services.remote.markLocked();await delay(500);await delay(1e3);await this.services.remote.replicateAllToRemote(!0);await delay(1e3);await this.services.remote.replicateAllToRemote(!0,!0);await this.informOptionalFeatures()}$rebuildRemote(){return this.rebuildRemote()}async rebuildEverything(){await this.services.setting.suspendExtraSync();this.core.settings.isConfigured=!0;this.core.settings.notifyThresholdOfRemoteStorageSize=DEFAULT_SETTINGS.notifyThresholdOfRemoteStorageSize;await this.services.setting.realiseSetting();await this.resetLocalDatabase();await delay(1e3);await this.services.databaseEvents.initialiseDatabase(!0,!0,!0);await this.services.remote.markLocked();await this.services.remote.tryResetDatabase();await this.services.remote.markLocked();await delay(500);await delay(1e3);await this.services.remote.replicateAllToRemote(!0);await delay(1e3);await this.services.remote.replicateAllToRemote(!0,!0);await this.informOptionalFeatures()}$rebuildEverything(){return this.rebuildEverything()}$fetchLocal(makeLocalChunkBeforeSync,preventMakeLocalFilesBeforeSync){return this.fetchLocal(makeLocalChunkBeforeSync,preventMakeLocalFilesBeforeSync)}async scheduleRebuild(){try{await this.core.storageAccess.writeFileAuto(FLAGMD_REDFLAG2_HR,"")}catch(ex){this._log("Could not create red_flag_rebuild.md",LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}this.services.appLifecycle.performRestart()}async scheduleFetch(){try{await this.core.storageAccess.writeFileAuto(FLAGMD_REDFLAG3_HR,"")}catch(ex){this._log("Could not create red_flag_fetch.md",LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}this.services.appLifecycle.performRestart()}async _tryResetRemoteDatabase(){await this.core.replicator.tryResetRemoteDatabase(this.settings)}async _tryCreateRemoteDatabase(){await this.core.replicator.tryCreateRemoteDatabase(this.settings)}async _resetLocalDatabase(){this.core.storageAccess.clearTouched();return await this.localDatabase.resetDatabase()}async suspendAllSync(){this.core.settings.liveSync=!1;this.core.settings.periodicReplication=!1;this.core.settings.syncOnSave=!1;this.core.settings.syncOnEditorSave=!1;this.core.settings.syncOnStart=!1;this.core.settings.syncOnFileOpen=!1;this.core.settings.syncAfterMerge=!1;await this.services.setting.suspendExtraSync()}async suspendReflectingDatabase(){if(!this.core.settings.doNotSuspendOnFetching&&this.core.settings.remoteType!=REMOTE_MINIO){this._log("Suspending reflection: Database and storage changes will not be reflected in each other until completely finished the fetching.",LOG_LEVEL_NOTICE);this.core.settings.suspendParseReplicationResult=!0;this.core.settings.suspendFileWatching=!0;await this.core.saveSettings()}}async resumeReflectingDatabase(){if(!this.core.settings.doNotSuspendOnFetching&&this.core.settings.remoteType!=REMOTE_MINIO){this._log("Database and storage reflection has been resumed!",LOG_LEVEL_NOTICE);this.core.settings.suspendParseReplicationResult=!1;this.core.settings.suspendFileWatching=!1;await this.services.vault.scanVault(!0);await this.services.replication.onBeforeReplicate(!1);await this.core.saveSettings()}}async fetchLocal(makeLocalChunkBeforeSync,preventMakeLocalFilesBeforeSync){await this.services.setting.suspendExtraSync();this.core.settings.isConfigured=!0;this.core.settings.notifyThresholdOfRemoteStorageSize=DEFAULT_SETTINGS.notifyThresholdOfRemoteStorageSize;await this.suspendReflectingDatabase();await this.services.setting.realiseSetting();await this.resetLocalDatabase();await delay(1e3);await this.services.database.openDatabase();this.services.appLifecycle.markIsReady();makeLocalChunkBeforeSync?await this.core.fileHandler.createAllChunks(!0):preventMakeLocalFilesBeforeSync||await this.services.databaseEvents.initialiseDatabase(!0,!0,!0);await this.services.remote.markResolved();await delay(500);await this.services.remote.replicateAllFromRemote(!0);await delay(1e3);await this.services.remote.replicateAllFromRemote(!0);await this.resumeReflectingDatabase();await this.informOptionalFeatures()}async fetchLocalWithRebuild(){return await this.fetchLocal(!0)}async _allSuspendAllSync(){await this.suspendAllSync();return!0}async resetLocalDatabase(){this.core.settings.isConfigured&&""==this.core.settings.additionalSuffixOfDatabaseName&&await this.services.database.resetDatabase();const suffix=this.services.API.getAppID()||"";this.core.settings.additionalSuffixOfDatabaseName=suffix;await this.services.database.resetDatabase();eventHub.emitEvent(EVENT_DATABASE_REBUILT)}async fetchRemoteChunks(){if(!this.core.settings.doNotSuspendOnFetching&&!this.core.settings.useOnlyLocalChunk&&this.core.settings.remoteType==REMOTE_COUCHDB){this._log("Fetching chunks",LOG_LEVEL_NOTICE);const replicator=this.services.replicator.getActiveReplicator(),remoteDB=await replicator.connectRemoteCouchDBWithSetting(this.settings,this.services.API.isMobile(),!0);"string"==typeof remoteDB?this._log(remoteDB,LOG_LEVEL_NOTICE):await fetchAllUsedChunks(this.localDatabase.localDatabase,remoteDB.db);this._log("Fetching chunks done",LOG_LEVEL_NOTICE)}}async resolveAllConflictedFilesByNewerOnes(){this._log("Resolving conflicts by newer ones",LOG_LEVEL_NOTICE);const files=this.core.storageAccess.getFileNames();let i2=0;for(const file of files){i2++%10&&this._log(`Check and Processing ${i2} / ${files.length}`,LOG_LEVEL_NOTICE,"resolveAllConflictedFilesByNewerOnes");await this.services.conflict.resolveByNewest(file)}this._log("Done!",LOG_LEVEL_NOTICE,"resolveAllConflictedFilesByNewerOnes")}onBindFunction(core,services){services.appLifecycle.handleOnLoaded(this._everyOnload.bind(this));services.database.handleResetDatabase(this._resetLocalDatabase.bind(this));services.remote.handleTryResetDatabase(this._tryResetRemoteDatabase.bind(this));services.remote.handleTryCreateDatabase(this._tryCreateRemoteDatabase.bind(this));services.setting.handleSuspendAllSync(this._allSuspendAllSync.bind(this))}};ModuleReplicateTest=class extends AbstractObsidianModule{constructor(){super(...arguments);this.testRootPath="_test/";this.testInfoPath="_testinfo/";this.watchIsSynchronised=!1}get isLeader(){return this.services.vault.getVaultName().indexOf("dev")>=0&&this.services.vault.vaultName().indexOf("recv")<0}get nameByKind(){return this.isLeader?this.isLeader?"LEADER":void 0:"RECV"}get pairName(){return this.isLeader?"RECV":this.isLeader?void 0:"LEADER"}async readFileContent(file){try{return await this.core.storageAccess.readHiddenFileText(file)}catch(e3){return""}}async dumpList(){if(this.settings.syncInternalFiles){this._log("Write file list (Include Hidden)");await this.__dumpFileListIncludeHidden("files.md")}else{this._log("Write file list");await this.__dumpFileList("files.md")}}async _everyBeforeReplicate(showMessage){if(!this.settings.enableDebugTools)return Promise.resolve(!0);await this.dumpList();return!0}_everyOnloadAfterLoadSettings(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);this.addCommand({id:"dump-file-structure-normal",name:"Dump Structure (Normal)",callback:()=>{this.__dumpFileList("files.md").finally((()=>{this.refreshSyncStatus()}))}});this.addCommand({id:"dump-file-structure-ih",name:"Dump Structure (Include Hidden)",callback:()=>{this.__dumpFileListIncludeHidden("files.md")}});this.addCommand({id:"dump-file-structure-auto",name:"Dump Structure",callback:()=>{this.dumpList()}});this.addCommand({id:"dump-file-test",name:"Perform Test (Dev) "+(this.isLeader?"(Leader)":"(Recv)"),callback:()=>{this.performTestManually()}});this.addCommand({id:"watch-sync-result",name:"Watch sync result is matched between devices",callback:()=>{this.watchIsSynchronised=!this.watchIsSynchronised;this.refreshSyncStatus()}});this.app.vault.on("modify",(async file=>{file.path.startsWith(this.testInfoPath)?await this.refreshSyncStatus():scheduleTask("dumpStatus",125,(async()=>{await this.dumpList();return!0}))}));this.statusBarSyncStatus=this.plugin.addStatusBarItem();return Promise.resolve(!0)}async getSyncStatusAsText(){const fileMine=this.testInfoPath+this.nameByKind+"/files.md",filePair=this.testInfoPath+this.pairName+"/files.md",mine=(0,import_obsidian.parseYaml)(await this.readFileContent(fileMine)),pair=(0,import_obsidian.parseYaml)(await this.readFileContent(filePair)),result=[];mine.length!=pair.length&&result.push(`File count is different: ${mine.length} vs ${pair.length}`);const filesAll=new Set([...mine.map((e3=>e3.path)),...pair.map((e3=>e3.path))]);for(const file of filesAll){const mineFile=mine.find((e3=>e3.path==file)),pairFile=pair.find((e3=>e3.path==file));if(mineFile&&pairFile){mineFile.size!=pairFile.size&&result.push(`Size is different: ${file} ${mineFile.size} vs ${pairFile.size}`);mineFile.hash!=pairFile.hash&&result.push(`Hash is different: ${file} ${mineFile.hash} vs ${pairFile.hash}`)}else result.push(`File not found: ${file}`)}eventHub.emitEvent("debug-sync-status",result);return result.join("\n")}async refreshSyncStatus(){if(this.watchIsSynchronised){const syncStatus=await this.getSyncStatusAsText();if(syncStatus){this.statusBarSyncStatus.setText("Sync Status: Having Error");this._log(`Sync Status: Having Error\n${syncStatus}`,LOG_LEVEL_INFO)}else this.statusBarSyncStatus.setText("Sync Status: Synchronised")}else this.statusBarSyncStatus.setText("")}async __dumpFileList(outFile){if(!this.core||!this.core.storageAccess){this._log("No storage access",LOG_LEVEL_INFO);return}const files=this.core.storageAccess.getFiles(),out=[],webcrypto7=await getWebCrypto();for(const file of files){if(!await this.services.vault.isTargetFile(file.path))continue;if(file.path.startsWith(this.testInfoPath))continue;const stat=await this.core.storageAccess.stat(file.path);if(stat){const hashSrc=await this.core.storageAccess.readHiddenFileBinary(file.path),hash3=await webcrypto7.subtle.digest("SHA-1",hashSrc),hashStr=uint8ArrayToHexString(new Uint8Array(hash3)),item={path:file.path,name:file.name,size:stat.size,mtime:stat.mtime,hash:hashStr};out.push(item)}}out.sort(((a2,b3)=>a2.path.localeCompare(b3.path)));if(outFile){outFile=this.testInfoPath+this.nameByKind+"/"+outFile;await this.core.storageAccess.ensureDir(outFile);await this.core.storageAccess.writeHiddenFileAuto(outFile,(0,import_obsidian.stringifyYaml)(out))}this._log(`Dumped ${out.length} files`,LOG_LEVEL_INFO)}async __dumpFileListIncludeHidden(outFile){const ignorePatterns=getFileRegExp(this.plugin.settings,"syncInternalFilesIgnorePatterns"),targetPatterns=getFileRegExp(this.plugin.settings,"syncInternalFilesTargetPatterns"),out=[],files=await this.core.storageAccess.getFilesIncludeHidden("",targetPatterns,ignorePatterns),webcrypto7=await getWebCrypto();for(const file of files){if(file.startsWith(this.testInfoPath))continue;const stat=await this.core.storageAccess.statHidden(file);if(stat){const hashSrc=await this.core.storageAccess.readHiddenFileBinary(file),hash3=await webcrypto7.subtle.digest("SHA-1",hashSrc),hashStr=uint8ArrayToHexString(new Uint8Array(hash3)),item={path:file,name:file.split("/").pop(),size:stat.size,mtime:stat.mtime,hash:hashStr};out.push(item)}}out.sort(((a2,b3)=>a2.path.localeCompare(b3.path)));if(outFile){outFile=this.testInfoPath+this.nameByKind+"/"+outFile;await this.core.storageAccess.ensureDir(outFile);await this.core.storageAccess.writeHiddenFileAuto(outFile,(0,import_obsidian.stringifyYaml)(out))}this._log(`Dumped ${out.length} files`,LOG_LEVEL_NOTICE)}async collectTestFiles(){const files=["README.md","docs/adding_translations.md","docs/design_docs_of_journalsync.md","docs/design_docs_of_keep_newborn_chunks.md","docs/design_docs_of_prefixed_hidden_file_sync.md","docs/design_docs_of_sharing_tweak_value.md","docs/quick_setup_cn.md","docs/quick_setup_ja.md","docs/quick_setup.md","docs/settings_ja.md","docs/settings.md","docs/setup_cloudant_ja.md","docs/setup_cloudant.md","docs/setup_flyio.md","docs/setup_own_server_cn.md","docs/setup_own_server_ja.md","docs/setup_own_server.md","docs/tech_info_ja.md","docs/tech_info.md","docs/terms.md","docs/troubleshooting.md","images/1.png","images/2.png","images/corrupted_data.png","images/hatch.png","images/lock_pattern1.png","images/lock_pattern2.png","images/quick_setup_1.png","images/quick_setup_2.png","images/quick_setup_3.png","images/quick_setup_3b.png","images/quick_setup_4.png","images/quick_setup_5.png","images/quick_setup_6.png","images/quick_setup_7.png","images/quick_setup_8.png","images/quick_setup_9_1.png","images/quick_setup_9_2.png","images/quick_setup_10.png","images/remote_db_setting.png","images/write_logs_into_the_file.png"];for(const file of files){const remote="https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/refs/heads/main/"+file,local=this.testRootPath+file;try{const f4=(await(0,import_obsidian.requestUrl)(remote)).arrayBuffer;await this.core.storageAccess.ensureDir(local);await this.core.storageAccess.writeHiddenFileAuto(local,f4)}catch(ex){this._log(`Could not fetch ${remote}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}}await this.dumpList()}async waitFor(proc,timeout=1e4){await delay(100);const start=Date.now();for(;!await proc();){if(timeout>0&&Date.now()-start>timeout){this._log("Timeout");return!1}await delay(500)}return!0}async testConflictedManually1(){await this.services.replication.replicate();this.isLeader&&await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"wonka.md","Resolve! \n*****, the amazing chocolatier!!");await this.services.replication.replicate();await this.services.replication.replicate();if("no"==await this.core.confirm.askYesNoDialog("Ready to begin the test conflict Manually 1?",{timeout:30,defaultOption:"Yes"}))return;const fileA="Resolve to KEEP THIS\nWilly Wonka, Willy Wonka, the amazing chocolatier!!";this.isLeader?await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"wonka.md",fileA):await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"wonka.md","Resolve to DISCARD THIS\nCharlie Bucket, Charlie Bucket, the amazing chocolatier!!");if("no"!=await this.core.confirm.askYesNoDialog("Ready to check the result of Manually 1?",{timeout:30,defaultOption:"Yes"})){await this.services.replication.replicate();await this.services.replication.replicate();return!!await this.waitFor((async()=>{await this.services.replication.replicate();return 1==await this.__assertStorageContent(this.testRootPath+"wonka.md",fileA,!1,!0)}),3e4)||await this.__assertStorageContent(this.testRootPath+"wonka.md",fileA,!1,!0)}}async testConflictedManually2(){await this.services.replication.replicate();this.isLeader&&await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"concat.md","Resolve To concatenate\nABCDEFG");await this.services.replication.replicate();await this.services.replication.replicate();if("no"==await this.core.confirm.askYesNoDialog("Ready to begin the test conflict Manually 2?",{timeout:30,defaultOption:"Yes"}))return;const concatenated="Resolve to Concatenate\nABCDEFGHIJKLMNOPQRSTUVWXYZ";this.isLeader?await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"concat.md","Resolve to Concatenate\nABCDEFGHIJKLMNOPQRSTYZ"):await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"concat.md","Resolve to Concatenate\nAJKLMNOPQRSTUVWXYZ");if("no"!=await this.core.confirm.askYesNoDialog("Ready to test conflict Manually 2?",{timeout:30,defaultOption:"Yes"})){await this.services.replication.replicate();await this.services.replication.replicate();return!!await this.waitFor((async()=>{await this.services.replication.replicate();return 1==await this.__assertStorageContent(this.testRootPath+"concat.md",concatenated,!1,!0)}),3e4)||await this.__assertStorageContent(this.testRootPath+"concat.md",concatenated,!1,!0)}}async testConflictAutomatic(){if(this.isLeader){const baseDoc="Tasks!\n- [ ] Task 1\n- [ ] Task 2\n- [ ] Task 3\n- [ ] Task 4\n";await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"task.md",baseDoc)}await delay(100);await this.services.replication.replicate();await this.services.replication.replicate();if("no"!=await this.core.confirm.askYesNoDialog("Ready to test conflict?",{timeout:30,defaultOption:"Yes"})){this.isLeader?await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"task.md","Tasks!\n- [ ] Task 1\n- [v] Task 2\n- [ ] Task 3\n- [ ] Task 4\n"):await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"task.md","Tasks!\n- [ ] Task 1\n- [ ] Task 2\n- [v] Task 3\n- [ ] Task 4\n");await this.services.replication.replicate();await this.services.replication.replicate();await delay(1e3);if("no"!=await this.core.confirm.askYesNoDialog("Ready to check result?",{timeout:30,defaultOption:"Yes"})){await this.services.replication.replicate();await this.services.replication.replicate();return this.__assertStorageContent(this.testRootPath+"task.md","Tasks!\n- [ ] Task 1\n- [v] Task 2\n- [v] Task 3\n- [ ] Task 4\n",!1,!0)}}}async checkConflictResolution(){this._log("Before testing conflicted files, resolve all once",LOG_LEVEL_NOTICE);await this.core.rebuilder.resolveAllConflictedFilesByNewerOnes();await this.core.rebuilder.resolveAllConflictedFilesByNewerOnes();await this.services.replication.replicate();await delay(1e3);if(!await this.testConflictAutomatic()){this._log("Conflict resolution (Auto) failed",LOG_LEVEL_NOTICE);return!1}if(!await this.testConflictedManually1()){this._log("Conflict resolution (Manual1) failed",LOG_LEVEL_NOTICE);return!1}if(!await this.testConflictedManually2()){this._log("Conflict resolution (Manual2) failed",LOG_LEVEL_NOTICE);return!1}return!0}async __assertStorageContent(fileName,content,inverted=!1,showResult=!1){try{const fileContent=await this.core.storageAccess.readHiddenFileText(fileName);let result=fileContent===content;inverted&&(result=!result);if(result)return!0;showResult&&this._log(`Content is not same \n Expected:${content}\n Actual:${fileContent}`,LOG_LEVEL_VERBOSE);return`Content is not same \n Expected:${content}\n Actual:${fileContent}`}catch(e3){this._log(`Cannot assert storage content: ${e3}`);return!1}}async performTestManually(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);await this.checkConflictResolution()}async _everyModuleTestMultiDevice(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);await this._test("Conflict resolution",(async()=>await this.checkConflictResolution()));return this.testDone()}onBindFunction(core,services){services.appLifecycle.handleOnSettingLoaded(this._everyOnloadAfterLoadSettings.bind(this));services.replication.handleBeforeReplicate(this._everyBeforeReplicate.bind(this));services.test.handleTestMultiDevice(this._everyModuleTestMultiDevice.bind(this))}};ModuleLiveSyncMain=class extends AbstractModule{constructor(){super(...arguments);this.isReady=!1;this._suspended=!1;this._unloaded=!1}async _onLiveSyncReady(){if(!await this.core.services.appLifecycle.onLayoutReady())return!1;eventHub.emitEvent(EVENT_LAYOUT_READY);if(this.settings.suspendFileWatching||this.settings.suspendParseReplicationResult){const ANSWER_KEEP=$msg("moduleLiveSyncMain.optionKeepLiveSyncDisabled"),ANSWER_RESUME=$msg("moduleLiveSyncMain.optionResumeAndRestart"),message=$msg("moduleLiveSyncMain.msgScramEnabled",{fileWatchingStatus:this.settings.suspendFileWatching?"suspended":"active",parseReplicationStatus:this.settings.suspendParseReplicationResult?"suspended":"active"});if(await this.core.confirm.askSelectStringDialogue(message,[ANSWER_KEEP,ANSWER_RESUME],{defaultAction:ANSWER_KEEP,title:$msg("moduleLiveSyncMain.titleScramEnabled")})==ANSWER_RESUME){this.settings.suspendFileWatching=!1;this.settings.suspendParseReplicationResult=!1;await this.saveSettings();this.services.appLifecycle.scheduleRestart();return!1}}if(!await this.services.databaseEvents.initialiseDatabase(!1,!1))return!1;if(!await this.core.services.appLifecycle.onFirstInitialise())return!1;await this.services.setting.realiseSetting();fireAndForget((async()=>{this._log($msg("moduleLiveSyncMain.logAdditionalSafetyScan"),LOG_LEVEL_VERBOSE);await this.services.appLifecycle.onScanningStartupIssues()?this._log($msg("moduleLiveSyncMain.logSafetyScanCompleted"),LOG_LEVEL_VERBOSE):this._log($msg("moduleLiveSyncMain.logSafetyScanFailed"),LOG_LEVEL_NOTICE)}));return!0}_wireUpEvents(){eventHub.onEvent(EVENT_SETTING_SAVED,(settings=>{fireAndForget((async()=>{var _a8,_b5,_c3;try{await this.core.services.setting.realiseSetting();void 0!==(null!=(_b5=null==(_a8=this.core.services.setting.currentSettings())?void 0:_a8.displayLanguage)?_b5:void 0)&&setLang(null==(_c3=this.core.services.setting.currentSettings())?void 0:_c3.displayLanguage);eventHub.emitEvent("reload-setting-tab")}catch(e3){this._log("Error in Setting Save Event",LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE)}}))}));return Promise.resolve(!0)}async _onLiveSyncLoad(){initialiseWorkerModule();await this.services.appLifecycle.onWireUpEvents();eventHub.emitEvent("plugin-loaded",this.core);this._log($msg("moduleLiveSyncMain.logLoadingPlugin"));if(!await this.services.appLifecycle.onInitialise()){this._log($msg("moduleLiveSyncMain.logPluginInitCancelled"),LOG_LEVEL_NOTICE);return!1}this._log($msg("moduleLiveSyncMain.logPluginVersion",{manifestVersion:"0.25.38",packageVersion:"0.25.38"}));await this.services.setting.loadSettings();if(!await this.services.appLifecycle.onSettingLoaded()){this._log($msg("moduleLiveSyncMain.logPluginInitCancelled"),LOG_LEVEL_NOTICE);return!1}const lsKey="obsidian-live-sync-ver"+this.services.vault.getVaultName(),last_version=localStorage.getItem(lsKey);~~(versionNumberString2Number("0.25.38")/1e3)>this.settings.lastReadUpdates&&this.settings.isConfigured&&this._log($msg("moduleLiveSyncMain.logReadChangelog"),LOG_LEVEL_NOTICE);this.isMobile&&(this.settings.disableRequestURI=!0);if(last_version&&Number(last_version)<12){this.settings.liveSync=!1;this.settings.syncOnSave=!1;this.settings.syncOnEditorSave=!1;this.settings.syncOnStart=!1;this.settings.syncOnFileOpen=!1;this.settings.syncAfterMerge=!1;this.settings.periodicReplication=!1;this.settings.versionUpFlash=$msg("moduleLiveSyncMain.logVersionUpdate");await this.saveSettings()}localStorage.setItem(lsKey,"12");await this.services.database.openDatabase();await this.core.services.appLifecycle.onLoaded();await Promise.all(this.core.addOns.map((e3=>e3.onload())));return!0}async _onLiveSyncUnload(){var _a8;eventHub.emitEvent("plugin-unloaded");await this.services.appLifecycle.onBeforeUnload();cancelAllPeriodicTask();cancelAllTasks();stopAllRunningProcessors();await this.services.appLifecycle.onUnload();this._unloaded=!0;for(const addOn of this.core.addOns)addOn.onunload();if(null!=this.localDatabase){this.localDatabase.onunload();this.core.replicator&&(null==(_a8=this.core.replicator)||_a8.closeReplication());await this.localDatabase.close()}eventHub.emitEvent(EVENT_PLATFORM_UNLOADED);eventHub.offAll();this._log($msg("moduleLiveSyncMain.logUnloadingPlugin"))}async _realizeSettingSyncMode(){await this.services.appLifecycle.onSuspending();await this.services.setting.onBeforeRealiseSetting();this.localDatabase.refreshSettings();await this.services.fileProcessing.commitPendingFileEvents();await this.services.setting.onRealiseSetting();if(!this.services.appLifecycle.isSuspended()){await this.services.appLifecycle.onResuming();await this.services.appLifecycle.onResumed();await this.services.setting.onSettingRealised()}}_isReloadingScheduled(){return void 0!==this.core._totalProcessingCount}_isReady(){return this.isReady}_markIsReady(){this.isReady=!0}_resetIsReady(){this.isReady=!1}_isSuspended(){var _a8;return this._suspended||!(null==(_a8=this.settings)?void 0:_a8.isConfigured)}_setSuspended(value){this._suspended=value}_isUnloaded(){return this._unloaded}onBindFunction(core,services){super.onBindFunction(core,services);services.appLifecycle.handleIsSuspended(this._isSuspended.bind(this));services.appLifecycle.handleSetSuspended(this._setSuspended.bind(this));services.appLifecycle.handleIsReady(this._isReady.bind(this));services.appLifecycle.handleMarkIsReady(this._markIsReady.bind(this));services.appLifecycle.handleResetIsReady(this._resetIsReady.bind(this));services.appLifecycle.handleHasUnloaded(this._isUnloaded.bind(this));services.appLifecycle.handleIsReloadingScheduled(this._isReloadingScheduled.bind(this));services.appLifecycle.handleOnReady(this._onLiveSyncReady.bind(this));services.appLifecycle.handleOnWireUpEvents(this._wireUpEvents.bind(this));services.appLifecycle.handleOnLoad(this._onLiveSyncLoad.bind(this));services.appLifecycle.handleOnAppUnload(this._onLiveSyncUnload.bind(this));services.setting.handleRealiseSetting(this._realizeSettingSyncMode.bind(this))}};ModuleExtraSyncObsidian=class extends AbstractObsidianModule{constructor(){super(...arguments);this.deviceAndVaultName=""}_getDeviceAndVaultName(){return this.deviceAndVaultName}_setDeviceAndVaultName(name){this.deviceAndVaultName=name}onBindFunction(core,services){services.setting.handleGetDeviceAndVaultName(this._getDeviceAndVaultName.bind(this));services.setting.handleSetDeviceAndVaultName(this._setDeviceAndVaultName.bind(this))}};LocalDatabaseMaintenance=class extends LiveSyncCommands{onunload(){}onload(){this.plugin.addCommand({id:"analyse-database",name:"Analyse Database Usage (advanced)",icon:"database-search",callback:async()=>{await this.analyseDatabase()}});this.plugin.addCommand({id:"gc-v3",name:"Garbage Collection V3 (advanced, beta)",icon:"trash-2",callback:async()=>{await this.gcv3()}});eventHub.onEvent(EVENT_ANALYSE_DB_USAGE,(()=>this.analyseDatabase()));eventHub.onEvent(EVENT_REQUEST_PERFORM_GC_V3,(()=>this.gcv3()))}async allChunks(includeDeleted=!1){const p4=this._progress("",LOG_LEVEL_NOTICE);p4.log("Retrieving chunks informations..");try{return await this.localDatabase.allChunks(includeDeleted)}finally{p4.done()}}get database(){return this.localDatabase.localDatabase}clearHash(){this.localDatabase.clearCaches()}async confirm(title,message,affirmative="Yes",negative="No"){return await this.plugin.confirm.askSelectStringDialogue(message,[affirmative,negative],{title,defaultAction:affirmative})===affirmative}isAvailable(){if(!this.settings.doNotUseFixedRevisionForChunks){this._notice("Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.");return!1}if(this.settings.readChunksOnline){this._notice("Please disable 'Read chunks online' in settings to use Garbage Collection.");return!1}return!0}async resurrectChunks(){if(!this.isAvailable())return;const{used,existing}=await this.allChunks(!0),excessiveDeletions=[...existing].filter((([key3,e3])=>e3._deleted)).filter((([key3,e3])=>used.has(e3._id))).map((([key3,e3])=>e3)),completelyLostChunks=[],dataLostChunks=[...existing].filter((([key3,e3])=>e3._deleted&&""===e3.data)).map((([key3,e3])=>e3)).filter((e3=>used.has(e3._id)));for(const e3 of dataLostChunks){let resurrected=null;const availableRevs=((await this.database.get(e3._id,{rev:e3._rev,revs:!0,revs_info:!0,conflicts:!0}))._revs_info||[]).filter((e4=>"available"==e4.status)).map((e4=>e4.rev)).sort(((a2,b3)=>getNoFromRev(a2)-getNoFromRev(b3)));for(const rev3 of availableRevs){const revDoc=await this.database.get(e3._id,{rev:rev3});if("leaf"==revDoc.type&&""!==revDoc.data){resurrected=revDoc.data;break}}null!==resurrected?excessiveDeletions.push({...e3,data:resurrected,_deleted:!1}):completelyLostChunks.push(e3._id)}const resurrectChunks=excessiveDeletions.filter((e3=>""!==e3.data)).map((e3=>({...e3,_deleted:!1})));if(0==resurrectChunks.length){this._notice("No chunks are found to be resurrected.");return}const message=`We have following chunks that are deleted but still used in the database.\n\n- Completely lost chunks: ${completelyLostChunks.length}\n- Resurrectable chunks: ${resurrectChunks.length}\n\nDo you want to resurrect these chunks?`;if(await this.confirm("Resurrect Chunks",message,"Resurrect","Cancel")){const result=await this.database.bulkDocs(resurrectChunks);this.clearHash();const resurrectedChunks=result.filter((e3=>"ok"in e3)).map((e3=>e3.id));this._notice(`Resurrected chunks: ${resurrectedChunks.length} / ${resurrectChunks.length}`)}else this._notice("Resurrect operation is cancelled.")}async commitFileDeletion(){if(!this.isAvailable())return;const p4=this._progress("",LOG_LEVEL_NOTICE);p4.log("Searching for deleted files..");const deletedDocs=(await this.database.allDocs({include_docs:!0})).rows.filter((e3=>{var _a8,_b5,_c3;return("newnote"==(null==(_a8=e3.doc)?void 0:_a8.type)||"plain"==(null==(_b5=e3.doc)?void 0:_b5.type))&&(null==(_c3=e3.doc)?void 0:_c3.deleted)}));if(0==deletedDocs.length){p4.done("No deleted files found.");return}p4.log(`Found ${deletedDocs.length} deleted files.`);const message=`We have following files that are marked as deleted.\n\n- Deleted files: ${deletedDocs.length}\n\nAre you sure to delete these files permanently?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> This operation affects the database permanently. Deleted files will not be recovered after this operation.\n> And, the chunks that are used in the deleted files will be ready for compaction.`,deletingDocs=deletedDocs.map((e3=>({...e3.doc,_deleted:!0})));if(await this.confirm("Delete Files",message,"Delete","Cancel")){const result=await this.database.bulkDocs(deletingDocs);this.clearHash();p4.done(`Deleted ${result.filter((e3=>"ok"in e3)).length} / ${deletedDocs.length} files.`)}else p4.done("Deletion operation is cancelled.")}async commitChunkDeletion(){if(!this.isAvailable())return;const{existing}=await this.allChunks(!0),deletedChunks=[...existing].filter((([key3,e3])=>e3._deleted&&""!==e3.data)).map((([key3,e3])=>e3)),deletedNotVacantChunks=deletedChunks.map((e3=>({...e3,data:"",_deleted:!0}))),humanSize=sizeToHumanReadable(deletedChunks.reduce(((acc,e3)=>acc+e3.data.length),0)),message=`We have following chunks that are marked as deleted.\n\n- Deleted chunks: ${deletedNotVacantChunks.length} (${humanSize})\n\nAre you sure to delete these chunks permanently?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> This operation finally reduces the capacity of the remote.`;if(0!=deletedNotVacantChunks.length)if(await this.confirm("Delete Chunks",message,"Delete","Cancel")){const result=await this.database.bulkDocs(deletedNotVacantChunks);this.clearHash();this._notice(`Deleted chunks: ${result.filter((e3=>"ok"in e3)).length} / ${deletedNotVacantChunks.length}`)}else this._notice("Deletion operation is cancelled.");else this._notice("No deleted chunks found.")}async markUnusedChunks(){if(!this.isAvailable())return;const{used,existing}=await this.allChunks(),deleteChunks=[...existing].filter((([key3,e3])=>!used.has(e3._id))).map((([key3,e3])=>e3)).map((e3=>({...e3,_deleted:!0}))),humanSize=sizeToHumanReadable(deleteChunks.reduce(((acc,e3)=>acc+e3.data.length),0));if(0==deleteChunks.length){this._notice("No unused chunks found.");return}const message=`We have following chunks that are not used from any files.\n\n- Chunks: ${deleteChunks.length} (${humanSize})\n\nAre you sure to mark these chunks to be deleted?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> This operation will not reduces the capacity of the remote until permanent deletion.`;if(await this.confirm("Mark unused chunks",message,"Mark","Cancel")){const result=await this.database.bulkDocs(deleteChunks);this.clearHash();this._notice(`Marked chunks: ${result.filter((e3=>"ok"in e3)).length} / ${deleteChunks.length}`)}}async removeUnusedChunks(){const{used,existing}=await this.allChunks(),unusedChunks=[...existing].filter((([key3,e3])=>!used.has(e3._id))).map((([key3,e3])=>e3)),deleteChunks=unusedChunks.map((e3=>({...e3,data:"",_deleted:!0}))),humanSize=sizeToHumanReadable(unusedChunks.reduce(((acc,e3)=>acc+e3.data.length),0));if(0==deleteChunks.length){this._notice("No unused chunks found.");return}const message=`We have following chunks that are not used from any files.\n\n- Chunks: ${deleteChunks.length} (${humanSize})\n\nAre you sure to delete these chunks?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> Chunks referenced from deleted files are not deleted. Please run "Commit File Deletion" before this operation.`;if(await this.confirm("Mark unused chunks",message,"Mark","Cancel")){const result=await this.database.bulkDocs(deleteChunks);this._notice(`Deleted chunks: ${result.filter((e3=>"ok"in e3)).length} / ${deleteChunks.length}`);this.clearHash()}}async scanUnusedChunks(){const kvDB=this.plugin.kvDB,chunkSet=await kvDB.get("chunk-set")||new Set,chunkUsageMap=await kvDB.get("doc-usage-map")||new Map,unusedSet=new Set([...chunkSet]);for(const[,revIdMap]of chunkUsageMap){const sortedRevId=[...revIdMap.entries()].sort(((a2,b3)=>getNoFromRev(b3[0])-getNoFromRev(a2[0])));sortedRevId.length;sortedRevId.slice(0,10).forEach((e3=>e3[1].forEach((ee=>unusedSet.delete(ee)))))}return{chunkSet,chunkUsageMap,unusedSet}}async trackChanges(fromStart=!1,showNotice=!1){if(!this.isAvailable())return;const logLevel=showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,kvDB=this.plugin.kvDB,previousSeq=fromStart?"":await kvDB.get("gc-seq"),chunkSet=await kvDB.get("chunk-set")||new Set,chunkUsageMap=await kvDB.get("doc-usage-map")||new Map,db=this.localDatabase.localDatabase,verbose2=msg=>this._verbose(msg),processDoc=async(doc,isDeleted2)=>{if(!("children"in doc))return;const id=doc._id,rev3=doc._rev,deleted=doc._deleted||isDeleted2,softDeleted=doc.deleted,children=doc.children||[];chunkUsageMap.has(id)||chunkUsageMap.set(id,new Map);for(const chunkId of children)deleted?chunkUsageMap.get(id).delete(rev3):chunkUsageMap.get(id).set(rev3,(chunkUsageMap.get(id).get(rev3)||new Set).add(chunkId));verbose2(`Tracking chunk: ${id}/${rev3} (${null==doc?void 0:doc.path}), deleted: ${deleted?"yes":"no"} Soft-Deleted:${softDeleted?"yes":"no"}`);return await Promise.resolve()},saveState=async seq=>{await kvDB.set("gc-seq",seq);await kvDB.set("chunk-set",chunkSet);await kvDB.set("doc-usage-map",chunkUsageMap)},processDocRevisions=async doc=>{var _a8;try{const oldRevisions=await db.get(doc._id,{revs:!0,revs_info:!0,conflicts:!0}),allRevs=(null==(_a8=oldRevisions._revs_info)?void 0:_a8.length)||0,info3=(oldRevisions._revs_info||[]).filter((e3=>"available"==e3.status&&e3.rev!=doc._rev)).filter((info4=>{var _a9;return!(null==(_a9=chunkUsageMap.get(doc._id))?void 0:_a9.has(info4.rev))})),infoLength=info3.length;this._log(`Found ${allRevs} old revisions for ${doc._id} . ${infoLength} items to check `);if(info3.length>0){const oldDocs=await Promise.all(info3.filter((revInfo=>"available"==revInfo.status)).map((revInfo=>db.get(doc._id,{rev:revInfo.rev})))).then((docs=>docs.filter((doc2=>doc2))));for(const oldDoc of oldDocs)await processDoc(oldDoc,!1)}}catch(ex){if(404==(null==ex?void 0:ex.status))this._log(`No revisions found for ${doc._id}`,LOG_LEVEL_VERBOSE);else{this._log(`Error finding revisions for ${doc._id}`);this._verbose(ex)}}},processChange2=async(doc,isDeleted2,seq)=>{if("leaf"===doc.type){if(isDeleted2)return;chunkSet.add(doc._id)}else if("children"in doc){await processDoc(doc,isDeleted2);await serialized("x-process-doc",(async()=>await processDocRevisions(doc)))}};let i2=0;await db.changes({since:previousSeq||"",live:!1,conflicts:!0,include_docs:!0,style:"all_docs",return_docs:!1}).on("change",(async change=>{var _a8;await processChange2(change.doc,null!=(_a8=change.deleted)&&_a8,change.seq);i2++%100==0&&await saveState(change.seq)})).on("complete",(async info3=>{await saveState(info3.last_seq)}));const result=await this.scanUnusedChunks(),message=`Total chunks: ${result.chunkSet.size}\nUnused chunks: ${result.unusedSet.size}`;this._log(message,logLevel)}async performGC(showingNotice=!1){var _a8;if(!this.isAvailable())return;await this.trackChanges(!1,showingNotice);const logLevel=showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;if("Yes, delete chunks"!==await this.plugin.confirm.askSelectStringDialogue("This function deletes unused chunks from the device. If there are differences between devices, some chunks may be missing when resolving conflicts.\nBe sure to synchronise before executing.\n\nHowever, if you have deleted them, you may be able to recover them by performing Hatch -> Recreate missing chunks for all files.\n\nAre you ready to delete unused chunks?",["Yes, delete chunks","Cancel"],{title:"Are all devices synchronised?",defaultAction:"Cancel"})){this._log("User cancelled chunk deletion",logLevel);return}const{unusedSet,chunkSet}=await this.scanUnusedChunks(),deleteChunks=await this.database.allDocs({keys:[...unusedSet],include_docs:!0});for(const chunk of deleteChunks.rows)(null==(_a8=null==chunk?void 0:chunk.value)?void 0:_a8.deleted)&&chunkSet.delete(chunk.key);const deleteDocs=deleteChunks.rows.filter((e3=>"doc"in e3)).map((e3=>({...e3.doc,_deleted:!0})));this._log(`Deleting chunks: ${deleteDocs.length}`,logLevel);const deleteChunkBatch=arrayToChunkedArray(deleteDocs,100);let successCount=0,errored=0;for(const batch of deleteChunkBatch){const results=await this.database.bulkDocs(batch);for(const result2 of results)if("ok"in result2){chunkSet.delete(result2.id);successCount++}else{this._log(`Failed to delete doc: ${result2.id}`,LOG_LEVEL_VERBOSE);errored++}this._log(`Deleting chunks: ${successCount} `,logLevel,"gc-preforming")}const message=`Garbage Collection completed.\nSuccess: ${successCount}, Errored: ${errored}`;this._log(message,logLevel);const kvDB=this.plugin.kvDB;await kvDB.set("chunk-set",chunkSet)}async analyseDatabase(){if(!this.isAvailable())return;const db=this.localDatabase.localDatabase,chunkMap=new Map,docMap=new Map,info3=await db.info(),maxSeq=new Number(info3.update_seq);let processed=0,read=0,errored=0;const ft=[],fetchRevision=async(id,rev3,seq)=>{try{processed++;const doc=await db.get(id,{rev:rev3});if(doc){if("children"in doc){const id2=doc._id,rev4=doc._rev,children=doc.children||[],set2=docMap.get(id2)||new Set;set2.add({id:id2,rev:rev4,chunks:new Set(children),uniqueChunks:new Set,sharedChunks:new Set,path:doc.path});docMap.set(id2,set2)}else if("leaf"===doc.type){const id2=doc._id;if(chunkMap.has(id2))return;if(doc._deleted)return;const length=doc.data.length,set2=chunkMap.get(id2)||new Set;set2.add({id:id2,length,refCount:0});chunkMap.set(id2,set2)}read++}else{this._log(`Analysing Database: not found: ${id} / ${rev3}`);errored++}}catch(error){this._log(`Error fetching document ${id} / ${rev3}: $`,LOG_LEVEL_NOTICE);this._log(error,LOG_LEVEL_VERBOSE);errored++}processed%100==0&&this._log(`Analysing database: ${read} (${errored}) / ${maxSeq} `,LOG_LEVEL_NOTICE,"db-analyse")},IDs=this.localDatabase.findEntryNames("","",{});for await(const id of IDs){const revInfos=(await this.localDatabase.getRaw(id,{revs:!0,revs_info:!0,conflicts:!0}))._revs_info||[];for(const revInfo of revInfos)"available"==revInfo.status&&ft.push(fetchRevision(id,revInfo.rev))}await Promise.all(ft);for(const[,docRevs]of docMap)for(const docRev of docRevs)for(const chunkId of docRev.chunks){const chunkInfos=chunkMap.get(chunkId);if(chunkInfos)for(const chunkInfo of chunkInfos){0===chunkInfo.refCount?docRev.uniqueChunks.add(chunkId):docRev.sharedChunks.add(chunkId);chunkInfo.refCount++}}const result=[],getTotalSize=ids=>[...ids].reduce(((acc,chunkId)=>{const chunkInfos=chunkMap.get(chunkId);if(chunkInfos)for(const chunkInfo of chunkInfos)acc+=chunkInfo.length;return acc}),0);for(const doc of docMap.values())for(const rev3 of doc){const title=`${rev3.path} (${rev3.rev})`,id=rev3.id,revStr=`${getNoFromRev(rev3.rev)}`,revHash=rev3.rev.split("-")[1].substring(0,6),path2=rev3.path,uniqueChunkCount=rev3.uniqueChunks.size,sharedChunkCount=rev3.sharedChunks.size,uniqueChunkSize=getTotalSize(rev3.uniqueChunks),sharedChunkSize=getTotalSize(rev3.sharedChunks);result.push({title,path:path2,rev:revStr,revHash,id,uniqueChunkCount,sharedChunkCount,uniqueChunkSize,sharedChunkSize})}const orphanChunks=[...chunkMap.entries()].filter((([chunkId,infos])=>0===[...infos].reduce(((acc,info4)=>acc+info4.refCount),0))),orphanChunkSize=orphanChunks.reduce(((acc,[chunkId,infos])=>{for(const info4 of infos)acc+=info4.length;return acc}),0);result.push({title:"__orphan",id:"__orphan",path:"__orphan",rev:"1",revHash:"xxxxx",uniqueChunkCount:orphanChunks.length,sharedChunkCount:0,uniqueChunkSize:orphanChunkSize,sharedChunkSize:0});const csvSrc=result.map((e3=>[`${e3.title.replace(/"/g,'""')}"`,`${e3.id}`,`${e3.path}`,`${e3.rev}`,`${e3.revHash}`,`${e3.uniqueChunkCount}`,`${e3.sharedChunkCount}`,`${e3.uniqueChunkSize}`,`${e3.sharedChunkSize}`].join("\t")));csvSrc.unshift(Object.values({title:"Title",id:"Document ID",path:"Path",rev:"Revision No",revHash:"Revision Hash",uniqueChunkCount:"Unique Chunk Count",sharedChunkCount:"Shared Chunk Count",uniqueChunkSize:"Unique Chunk Size",sharedChunkSize:"Shared Chunk Size"}).join("\t"));const csv=csvSrc.join("\n");await this.services.UI.promptCopyToClipboard("Database Analysis data (TSV):",csv)}async compactDatabase(){const replicator=this.plugin.replicator,remote=await replicator.connectRemoteCouchDBWithSetting(this.settings,!1,!1,!0);if(!remote){this._notice("Failed to connect to remote for compaction.","gc-compact");return}if("string"==typeof remote){this._notice(`Failed to connect to remote for compaction. ${remote}`,"gc-compact");return}const compactResult=await remote.db.compact({interval:1e3});let timeout=12e4;for(;;){const status=await remote.db.info();if(!("compact_running"in status)||!(null==status?void 0:status.compact_running))break;this._notice("Compaction in progress on remote database...","gc-compact");await delay(2e3);timeout-=2e3;if(timeout<=0){this._notice("Compaction on remote database timed out.","gc-compact");break}}compactResult&&"ok"in compactResult?this._notice("Compaction on remote database completed successfully.","gc-compact"):this._notice("Compaction on remote database failed.","gc-compact")}async compactDatabaseWithRevLimit(){return!1}async gcv3(){if(!this.isAvailable())return;const replicator=this.plugin.replicator;if(!await replicator.openOneShotReplication(this.settings,!1,!1,"sync")){this._notice("Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.");return}const OPTION_CANCEL="Cancel Garbage Collection",info3=await this.plugin.replicator.getConnectedDeviceList();if(!info3){this._notice("No connected device information found. Cancelling Garbage Collection.");return}const{accepted_nodes,node_info}=info3,infoMissingNodes=[];for(const node of accepted_nodes)node in node_info||infoMissingNodes.push(node);if(infoMissingNodes.length>0){const message2=`The following accepted nodes are missing its node information:\n- ${infoMissingNodes.join("\n- ")}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.`,OPTION_IGNORE="Ignore and Proceed",buttons2=[OPTION_CANCEL,OPTION_IGNORE],result2=await this.plugin.confirm.askSelectStringDialogue(message2,buttons2,{title:"Node Information Missing",defaultAction:OPTION_CANCEL});if(result2===OPTION_CANCEL){this._notice("Garbage Collection cancelled by user.");return}result2===OPTION_IGNORE&&this._notice("Proceeding with Garbage Collection, ignoring missing nodes.")}const progressValues=Object.values(node_info).map((e3=>e3.progress.split("-")[0])).map((e3=>parseInt(e3))),maxProgress=Math.max(...progressValues),minProgress=Math.min(...progressValues),progressDifference=maxProgress-minProgress,detail=`> [!INFO]- The connected devices have been detected as follows:\n${Object.entries(node_info).map((([nodeId,nodeData])=>`> - Device: ${nodeData.device_name} (Node ID: ${nodeId})\n> - Obsidian version: ${nodeData.app_version}\n> - Plug-in version: ${nodeData.plugin_version}\n> - Progress: ${nodeData.progress.split("-")[0]}`)).join("\n")}\n`,message=0!=progressDifference?`Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.`:`All devices have the same progress value (${maxProgress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.`,buttons=["Proceed Garbage Collection",OPTION_CANCEL],defaultAction=0!=progressDifference?OPTION_CANCEL:"Proceed Garbage Collection";if("Proceed Garbage Collection"!==await this.plugin.confirm.askSelectStringDialogue(message+"\n\n"+detail,buttons,{title:"Garbage Collection Confirmation",defaultAction})){this._notice("Garbage Collection cancelled by user.");return}this._notice("Proceeding with Garbage Collection.");const gcStartTime=Date.now(),localDatabase=this.localDatabase.localDatabase,usedChunks=new Set,allChunks=new Map,IDs=this.localDatabase.findEntryNames("","",{});let i2=0;const doc_count=(await localDatabase.info()).doc_count;for await(const id of IDs){const doc=await this.localDatabase.getRaw(id);i2++;i2%100==0&&this._notice(`Garbage Collection: Scanned ${i2} / ~${doc_count} `,"gc-scanning");if(doc)if("children"in doc){const children=doc.children||[];for(const chunkId of children)usedChunks.add(chunkId)}else"leaf"===doc.type&&allChunks.set(doc._id,doc._rev)}this._notice(`Garbage Collection: Scanning completed. Total chunks: ${allChunks.size}, Used chunks: ${usedChunks.size}`,"gc-scanning");const unusedChunks=[...allChunks.keys()].filter((e3=>!usedChunks.has(e3)));this._notice(`Garbage Collection: Found ${unusedChunks.length} unused chunks to delete.`,"gc-scanning");const deleteChunkDocs=unusedChunks.map((chunkId=>({_id:chunkId,_deleted:!0,_rev:allChunks.get(chunkId)}))),deletedCount=(await localDatabase.bulkDocs(deleteChunkDocs)).filter((e3=>"ok"in e3)).length,gcEndTime=Date.now();this._notice(`Garbage Collection completed. Deleted chunks: ${deletedCount} / ${unusedChunks.length}. Time taken: ${(gcEndTime-gcStartTime)/1e3} seconds.`);if(await replicator.openOneShotReplication(this.settings,!1,!1,"pushOnly")){await this.compactDatabase();this.clearHash()}else this._notice("Failed to start replication after Garbage Collection.")}};EVENT_P2P_PEER_SHOW_EXTRA_MENU="p2p-peer-show-extra-menu";AcceptedStatus=(AcceptedStatus2=>{AcceptedStatus2.UNKNOWN="Unknown";AcceptedStatus2.ACCEPTED="Accepted";AcceptedStatus2.DENIED="Denied";AcceptedStatus2.ACCEPTED_IN_SESSION="Accepted in session";AcceptedStatus2.DENIED_IN_SESSION="Denied in session";return AcceptedStatus2})(AcceptedStatus||{});ConnectionStatus=(ConnectionStatus2=>{ConnectionStatus2.CONNECTED="Connected";ConnectionStatus2.CONNECTED_LIVE="Connected(live)";ConnectionStatus2.DISCONNECTED="Disconnected";return ConnectionStatus2})(ConnectionStatus||{});root_219=from_html(" ");root_130=from_html('
    ');root_39=from_html(' ');on_click4=(__3,makeDecision)=>makeDecision(!0,!0);on_click_12=(__4,makeDecision)=>makeDecision(!0,!1);root_56=from_html(' ',1);on_click_2=(__5,makeDecision)=>makeDecision(!1,!0);on_click_3=(__6,makeDecision)=>makeDecision(!1,!1);root_68=from_html(' ',1);root_415=from_html(" ",1);on_click_4=(__7,revokeDecision)=>revokeDecision();root_79=from_html('');root_97=from_html('');root_106=from_html('');root_811=from_html('
    ');root37=from_html('
    ');$$css15={hash:"svelte-8nqxsr",code:"tr.svelte-8nqxsr:nth-child(odd) {background-color:var(--background-primary-alt);}.info.svelte-8nqxsr {display:flex;flex-direction:column;justify-content:center;align-items:center;padding:var(--size-4-1) var(--size-4-1);}.peer-id.svelte-8nqxsr {font-size:0.8em;}.status-chips.svelte-8nqxsr {display:flex;flex-direction:column;justify-content:center;align-items:center;\n /* min-width: 10em; */}.buttons.svelte-8nqxsr {display:flex;flex-direction:column;justify-content:center;align-items:center;}.buttons.svelte-8nqxsr .row:where(.svelte-8nqxsr) {display:flex;justify-content:center;align-items:center;flex-wrap:wrap;\n /* padding: var(--size-4-1) var(--size-4-1); */}.chip.svelte-8nqxsr {display:inline-block;padding:4px 8px;margin:4px;border-radius:4px;font-size:0.75em;font-weight:bold;background-color:var(--tag-background);border:var(--tag-border-width) solid var(--tag-border-color);}.chip.connected.svelte-8nqxsr {background-color:var(--background-modifier-success);color:var(--text-normal);}.chip.connected-live.svelte-8nqxsr {background-color:var(--background-modifier-success);border-color:var(--background-modifier-success);color:var(--text-normal);}.chip.accepted.svelte-8nqxsr {background-color:var(--background-modifier-success);color:var(--text-normal);}.chip.waiting.svelte-8nqxsr {background-color:var(--background-secondary);}.chip.unknown.svelte-8nqxsr {background-color:var(--background-primary);color:var(--text-warning);}.chip.denied.svelte-8nqxsr {background-color:var(--background-modifier-error);color:var(--text-error);}.chip.attr.svelte-8nqxsr {background-color:var(--background-secondary);}.button.svelte-8nqxsr {margin:var(--size-4-1);}.button.affirmative.svelte-8nqxsr {background-color:var(--interactive-accent);color:var(--text-normal);}.button.affirmative.svelte-8nqxsr:hover {background-color:var(--interactive-accent-hover);}.button.negative.svelte-8nqxsr {background-color:var(--background-modifier-error);color:var(--text-error);}.button.negative.svelte-8nqxsr:hover {background-color:var(--background-modifier-error-hover);}"};delegate(["click"]);root_131=from_html('

    ');on_click5=(__5,useDefaultRelay)=>useDefaultRelay();on_click_13=(__6,chooseRandom)=>chooseRandom();root_310=from_html('
    Enable P2P Replicator
    Relay settings
    Room ID This can isolate your connections between devices. Use the same Room ID for the same\n devices.
    Password This password is used to encrypt the connection. Use something long enough.
    This device name Device name to identify the device. Please use shorter one for the stable peer\n detection, i.e., "iphone-16" or "macbook-2021".
    Auto Connect
    Start change-broadcasting on Connect
    ');root_416=from_html('

    No Connection

    ');root_57=from_html('

    ');root_69=from_html("");root_98=from_html("");root_107=from_html("");root_710=from_html('
    Broadcasting?

    If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which\n detects this will start the replication for fetching.
    However, This should not be enabled if you want to increase your secrecy more.

    ',1);root38=from_html('

    Peer to Peer Replicator

    Connection Settings

    Signaling Server Connection

    Peers

    NameActionCommand
    ');$$css16={hash:"svelte-2cmos",code:"article.svelte-2cmos {max-width:100%;}article.svelte-2cmos p:where(.svelte-2cmos) {user-select:text;-webkit-user-select:text;}h2.svelte-2cmos {margin-top:var(--size-4-1);margin-bottom:var(--size-4-1);padding-bottom:var(--size-4-1);border-bottom:1px solid var(--background-modifier-border);}label.is-dirty.svelte-2cmos {background-color:var(--background-modifier-error);}input.svelte-2cmos {background-color:transparent;}th.svelte-2cmos {\n /* display: flex;\n justify-content: center;\n align-items: center; */min-height:var(--input-height);}td.svelte-2cmos {min-height:var(--input-height);}td.svelte-2cmos > label:where(.svelte-2cmos) {display:flex;flex-direction:row;align-items:center;justify-content:flex-start;min-height:var(--input-height);}td.svelte-2cmos > label:where(.svelte-2cmos) > :where(.svelte-2cmos) {margin:auto var(--size-4-1);}table.peers.svelte-2cmos {width:100%;}.important.svelte-2cmos {color:var(--text-error);font-size:1.2em;font-weight:bold;}.important-sub.svelte-2cmos {color:var(--text-warning);}.settings.svelte-2cmos label:where(.svelte-2cmos) {display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;}"};delegate(["click"]);P2PReplicatorPaneView=class extends SvelteItemView{constructor(leaf,plugin3){super(leaf);this.icon="waypoints";this.title="";this.navigation=!1;this.plugin=plugin3;eventHub.onEvent(EVENT_P2P_PEER_SHOW_EXTRA_MENU,(({peer,event:event2})=>{this.m&&this.m.hide();this.m=(new import_obsidian.Menu).addItem((item=>item.setTitle("📥 Only Fetch").onClick((()=>this.replicateFrom(peer))))).addItem((item=>item.setTitle("📤 Only Send").onClick((()=>this.replicateTo(peer))))).addSeparator().addItem((item=>{item.setTitle("🔧 Get Configuration").onClick((async()=>{await this.getRemoteConfig(peer)}))})).addSeparator().addItem((item=>{const mark=peer.syncOnConnect?"checkmark":null;item.setTitle("Toggle Sync on connect").onClick((async()=>{await this.toggleProp(peer,"syncOnConnect")})).setIcon(mark)})).addItem((item=>{const mark=peer.watchOnConnect?"checkmark":null;item.setTitle("Toggle Watch on connect").onClick((async()=>{await this.toggleProp(peer,"watchOnConnect")})).setIcon(mark)})).addItem((item=>{const mark=peer.syncOnReplicationCommand?"checkmark":null;item.setTitle("Toggle Sync on `Replicate now` command").onClick((async()=>{await this.toggleProp(peer,"syncOnReplicationCommand")})).setIcon(mark)}));this.m.showAtPosition({x:event2.x,y:event2.y})}))}getIcon(){return"waypoints"}get replicator(){const r4=this.plugin.getAddOn(P2PReplicator.name);if(!r4||!r4._replicatorInstance)throw new Error("Replicator not found");return r4._replicatorInstance}async replicateFrom(peer){await this.replicator.replicateFrom(peer.peerId)}async replicateTo(peer){await this.replicator.requestSynchroniseToPeer(peer.peerId)}async getRemoteConfig(peer){Logger(`Requesting remote config for ${peer.name}. Please input the passphrase on the remote device`,LOG_LEVEL_NOTICE);const remoteConfig=await this.replicator.getRemoteConfig(peer.peerId);if(remoteConfig){Logger(`Remote config for ${peer.name} is retrieved successfully`);const DROP="Yes, and drop local database",KEEP="Yes, but keep local database",CANCEL="No, cancel",yn=await this.plugin.confirm.askSelectStringDialogue("Do you really want to apply the remote config? This will overwrite your current config immediately and restart.\nAnd you can also drop the local database to rebuild from the remote device.",[DROP,KEEP,CANCEL],{defaultAction:CANCEL,title:"Apply Remote Config "});if(yn===DROP||yn===KEEP){if(yn===DROP&&remoteConfig.remoteType!==REMOTE_P2P&&"yes"===await this.plugin.confirm.askYesNoDialog('Do you want to set the remote type to "P2P Sync" to rebuild by "P2P replication"?',{title:"Rebuild from remote device"})){remoteConfig.remoteType=REMOTE_P2P;remoteConfig.P2P_RebuildFrom=peer.name}this.plugin.settings=remoteConfig;await this.plugin.saveSettings();yn===DROP?await this.plugin.rebuilder.scheduleFetch():this.plugin.services.appLifecycle.scheduleRestart()}else Logger(`Cancelled\nRemote config for ${peer.name} is not applied`,LOG_LEVEL_NOTICE)}else Logger(`Cannot retrieve remote config for ${peer.peerId}`)}async toggleProp(peer,prop2){const targetSetting={syncOnConnect:"P2P_AutoSyncPeers",watchOnConnect:"P2P_AutoWatchPeers",syncOnReplicationCommand:"P2P_SyncOnReplication"}[prop2];if(peer[prop2]){this.plugin.settings[targetSetting]=removeFromList(peer.name,this.plugin.settings[targetSetting]);await this.plugin.saveSettings()}else{this.plugin.settings[targetSetting]=addToList(peer.name,this.plugin.settings[targetSetting]);await this.plugin.saveSettings()}await this.plugin.saveSettings()}getViewType(){return"p2p-replicator"}getDisplayText(){return"Peer-to-Peer Replicator"}async onClose(){await super.onClose();this.m&&this.m.hide()}instantiateComponent(target){const cmdSync=this.plugin.getAddOn(P2PReplicator.name);if(!cmdSync)throw new Error("Replicator not found");return mount(P2PReplicatorPane,{target,props:{plugin:cmdSync.plugin,cmdSync}})}};require("obsidian");ObsidianAPIBase=class extends APIBase{constructor(options){super();this.app=options.app}};eventHub.onceEvent(EVENT_PLATFORM_UNLOADED,(()=>{instance2=void 0;p3.resolve(void 0)}));instance2=void 0;p3=promiseWithResolver();import_obsidian4=require("obsidian");Environment=class extends ObsidianAPIBase{async onInit(){this.crypto=await getWebCrypto2()}getPlatformName(){return getPlatformName()}getPackageVersion(){return"0.25.38"}getManifestVersion(){return"0.25.38"}getVaultName(){return this.app.vault.getName()}};eventHub.onceEvent("app-supplied",(app=>{const platformAPI=new Environment({app});platformAPI.onInit().then((()=>setEnvironmentInstance(platformAPI)))}));P2PReplicator=class extends LiveSyncCommands{constructor(plugin3){super(plugin3);this.storeP2PStatusLine=reactiveSource("");this.p2pLogCollector=new P2PLogCollector;setReplicatorFunc((()=>this._replicatorInstance));addP2PEventHandlers(this);this.afterConstructor()}getSettings(){return this.plugin.settings}get settings(){return this.plugin.settings}getDB(){return this.plugin.localDatabase.localDatabase}get confirm(){return this.plugin.confirm}simpleStore(){return this._simpleStore}async handleReplicatedDocuments(docs){return await this.services.replication.parseSynchroniseResult(docs)}_anyNewReplicator(settingOverride={}){if({...this.settings,...settingOverride}.remoteType==REMOTE_P2P)return Promise.resolve(new LiveSyncTrysteroReplicator(this.plugin))}afterConstructor(){}async open(){await openP2PReplicator(this)}async close(){await closeP2PReplicator(this)}getConfig(key3){return this.services.config.getSmallConfig(key3)}setConfig(key3,value){return this.services.config.setSmallConfig(key3,value)}enableBroadcastCastings(){var _a8;return null==(_a8=null==this?void 0:this._replicatorInstance)?void 0:_a8.enableBroadcastChanges()}disableBroadcastCastings(){var _a8;return null==(_a8=null==this?void 0:this._replicatorInstance)?void 0:_a8.disableBroadcastChanges()}init(){this._simpleStore=this.services.database.openSimpleStore("p2p-sync");return Promise.resolve(this)}async initialiseP2PReplicator(){await this.init();try{if(this._replicatorInstance){await this._replicatorInstance.close();this._replicatorInstance=void 0}this.settings.P2P_AppID||(this.settings.P2P_AppID=P2P_DEFAULT_SETTINGS.P2P_AppID);const getInitialDeviceName=()=>this.getConfig(SETTING_KEY_P2P_DEVICE_NAME)||this.services.vault.getVaultName(),getSettings=()=>this.settings,store=()=>this.simpleStore(),getDB=()=>this.getDB(),getConfirm=()=>this.confirm,getPlatform=()=>this.getPlatform(),env={get db(){return getDB()},get confirm(){return getConfirm()},get deviceName(){return getInitialDeviceName()},get platform(){return getPlatform()},get settings(){return getSettings()},processReplicatedDocs:async docs=>{await this.handleReplicatedDocuments(docs)},get simpleStore(){return store()}};this._replicatorInstance=new TrysteroReplicator(env);return this._replicatorInstance}catch(e3){this._log(e3 instanceof Error?e3.message:"Something occurred on Initialising P2P Replicator",LOG_LEVEL_INFO);this._log(e3,LOG_LEVEL_VERBOSE);throw e3}}getPlatform(){return getPlatformName()}onunload(){removeP2PReplicatorInstance();this.close()}onload(){eventHub.onEvent("request-open-p2p",(()=>{this.openPane()}));this.p2pLogCollector.p2pReplicationLine.onChanged((line=>{this.storeP2PStatusLine.value=line.value}))}async _everyOnInitializeDatabase(){await this.initialiseP2PReplicator();return Promise.resolve(!0)}async _allSuspendExtraSync(){this.plugin.settings.P2P_Enabled=!1;this.plugin.settings.P2P_AutoAccepting=0;this.plugin.settings.P2P_AutoBroadcast=!1;this.plugin.settings.P2P_AutoStart=!1;this.plugin.settings.P2P_AutoSyncPeers="";this.plugin.settings.P2P_AutoWatchPeers="";return await Promise.resolve(!0)}async openPane(){await this.services.API.showWindow("p2p-replicator")}async _everyOnloadStart(){this.plugin.registerView("p2p-replicator",(leaf=>new P2PReplicatorPaneView(leaf,this.plugin)));this.plugin.addCommand({id:"open-p2p-replicator",name:"P2P Sync : Open P2P Replicator",callback:async()=>{await this.openPane()}});this.plugin.addCommand({id:"p2p-establish-connection",name:"P2P Sync : Connect to the Signalling Server",checkCallback:isChecking=>{var _a8,_b5,_c3;if(isChecking)return!(null!=(_c3=null==(_b5=null==(_a8=this._replicatorInstance)?void 0:_a8.server)?void 0:_b5.isServing)&&_c3);this.open()}});this.plugin.addCommand({id:"p2p-close-connection",name:"P2P Sync : Disconnect from the Signalling Server",checkCallback:isChecking=>{var _a8,_b5,_c3;if(isChecking)return null!=(_c3=null==(_b5=null==(_a8=this._replicatorInstance)?void 0:_a8.server)?void 0:_b5.isServing)&&_c3;Logger("Closing P2P Connection",LOG_LEVEL_NOTICE);this.close()}});this.plugin.addCommand({id:"replicate-now-by-p2p",name:"Replicate now by P2P",checkCallback:isChecking=>{var _a8,_b5,_c3;if(isChecking)return this.settings.remoteType!=REMOTE_P2P&&!!(null==(_b5=null==(_a8=this._replicatorInstance)?void 0:_a8.server)?void 0:_b5.isServing);null==(_c3=this._replicatorInstance)||_c3.replicateFromCommand(!1)}});this.plugin.addRibbonIcon("waypoints","P2P Replicator",(async()=>{await this.openPane()})).addClass("livesync-ribbon-replicate-p2p");return await Promise.resolve(!0)}_everyAfterResumeProcess(){this.settings.P2P_Enabled&&this.settings.P2P_AutoStart&&setTimeout((()=>{this.open()}),100);const rep=this._replicatorInstance;null==rep||rep.allowReconnection();return Promise.resolve(!0)}_everyBeforeSuspendProcess(){const rep=this._replicatorInstance;null==rep||rep.disconnectFromServer();return Promise.resolve(!0)}onBindFunction(core,services){services.replicator.handleGetNewReplicator(this._anyNewReplicator.bind(this));services.databaseEvents.handleOnDatabaseInitialisation(this._everyOnInitializeDatabase.bind(this));services.appLifecycle.handleOnInitialise(this._everyOnloadStart.bind(this));services.appLifecycle.handleOnSuspending(this._everyBeforeSuspendProcess.bind(this));services.appLifecycle.handleOnResumed(this._everyAfterResumeProcess.bind(this));services.setting.handleSuspendExtraSync(this._allSuspendExtraSync.bind(this))}};ServiceHub=class{constructor(services={}){this._injected={};for(const service of Object.values(services))service.setServices(this);this._injected=services}get API(){return this._injected.API||this._api}get path(){return this._injected.path||this._path}get database(){return this._injected.database||this._database}get databaseEvents(){return this._injected.databaseEvents||this._databaseEvents}get replicator(){return this._injected.replicator||this._replicator}get fileProcessing(){return this._injected.fileProcessing||this._fileProcessing}get replication(){return this._injected.replication||this._replication}get remote(){return this._injected.remote||this._remote}get conflict(){return this._injected.conflict||this._conflict}get appLifecycle(){return this._injected.appLifecycle||this._appLifecycle}get setting(){return this._injected.setting||this._setting}get tweakValue(){return this._injected.tweakValue||this._tweakValue}get vault(){return this._injected.vault||this._vault}get test(){return this._injected.test||this._test}get UI(){return this._injected.ui||this._ui}};HubService=class{get services(){return this._services}setServices(services){this._services=services}};ServiceBase=class extends HubService{_all(key3){return this._backend.all(key3)}_first(key3){return this._backend.first(key3)}_firstOrUndefined(key3){return this._backend.firstOrUndefined(key3)}_firstFailure(key3){return this._backend.firstFailure(key3)}_broadcast(key3){return this._backend.broadcast(key3)}_collect(key3){return this._backend.collect(key3)}_collectBatch(key3){return this._backend.collectBatch(key3)}constructor(hub){super();this._backend=hub}};APIService=class extends ServiceBase{};PathService=class extends ServiceBase{};DatabaseService=class extends ServiceBase{};DatabaseEventService=class extends ServiceBase{constructor(hub){super(hub);[this.onUnloadDatabase,this.handleOnUnloadDatabase]=this._all("dbUnload");[this.onCloseDatabase,this.handleOnCloseDatabase]=this._all("dbClose");[this.onDatabaseInitialisation,this.handleOnDatabaseInitialisation]=this._firstFailure("databaseInitialisation");[this.onDatabaseInitialised,this.handleDatabaseInitialised]=this._firstFailure("databaseInitialised");[this.onResetDatabase,this.handleOnResetDatabase]=this._firstFailure("resetDatabase")}};FileProcessingService=class extends ServiceBase{constructor(hub){super(hub);[this.processFileEvent,this.handleProcessFileEvent]=this._first("processFileEvent");[this.processOptionalFileEvent,this.handleOptionalFileEvent]=this._first("processOptionalFileEvent");[this.commitPendingFileEvents,this.handleCommitPendingFileEvents]=this._firstFailure("commitPendingFileEvents")}};ReplicatorService=class extends ServiceBase{constructor(hub){super(hub);[this.getNewReplicator,this.handleGetNewReplicator]=this._firstOrUndefined("getNewReplicator");[this.onCloseActiveReplication,this.handleOnCloseActiveReplication]=this._first("closeActiveReplication")}};ReplicationService=class extends ServiceBase{constructor(hub){super(hub);[this.processOptionalSynchroniseResult,this.handleProcessOptionalSynchroniseResult]=this._first("processOptionalSynchroniseResult");[this.processSynchroniseResult,this.handleProcessSynchroniseResult]=this._first("processSynchroniseResult");[this.processVirtualDocument,this.handleProcessVirtualDocuments]=this._first("processVirtualDocuments");[this.onBeforeReplicate,this.handleBeforeReplicate]=this._firstFailure("beforeReplicate");[this.checkConnectionFailure,this.handleCheckConnectionFailure]=this._first("connectionHasFailure")}};RemoteService=class extends ServiceBase{constructor(hub){super(hub)}};ConflictService=class extends ServiceBase{constructor(hub){super(hub);[this.resolveByUserInteraction,this.handleResolveByUserInteraction]=this._first("resolveByUserInteraction");[this.getOptionalConflictCheckMethod,this.handleGetOptionalConflictCheckMethod]=this._first("getOptionalConflictCheckMethod")}};AppLifecycleService=class extends ServiceBase{constructor(hub){super(hub);[this.onLayoutReady,this.handleLayoutReady]=this._firstFailure("layoutReady");[this.onFirstInitialise,this.handleFirstInitialise]=this._firstFailure("firstInitialise");[this.onReady,this.handleOnReady]=this._firstFailure("appReady");[this.onWireUpEvents,this.handleOnWireUpEvents]=this._firstFailure("wireUpEvents");[this.onLoad,this.handleOnLoad]=this._firstFailure("appLoad");[this.onAppUnload,this.handleOnAppUnload]=this._broadcast("appUnload");[this.onScanningStartupIssues,this.handleOnScanningStartupIssues]=this._all("scanStartupIssues");[this.onInitialise,this.handleOnInitialise]=this._firstFailure("appInitialise");[this.onLoaded,this.handleOnLoaded]=this._firstFailure("appLoaded");[this.onSettingLoaded,this.handleOnSettingLoaded]=this._firstFailure("applyStartupLoaded");[this.onBeforeUnload,this.handleOnBeforeUnload]=this._all("beforeUnload");[this.onUnload,this.handleOnUnload]=this._all("unload");[this.onSuspending,this.handleOnSuspending]=this._firstFailure("beforeSuspendProcess");[this.onResuming,this.handleOnResuming]=this._firstFailure("onResumeProcess");[this.onResumed,this.handleOnResumed]=this._firstFailure("afterResumeProcess");[this.getUnresolvedMessages,this.reportUnresolvedMessages]=this._collectBatch("unresolvedMessages")}};SettingService=class extends ServiceBase{constructor(hub){super(hub);[this.onBeforeRealiseSetting,this.handleBeforeRealiseSetting]=this._firstFailure("beforeRealiseSetting");[this.onSettingRealised,this.handleSettingRealised]=this._firstFailure("afterRealiseSetting");[this.onRealiseSetting,this.handleOnRealiseSetting]=this._firstFailure("realiseSetting");[this.suspendAllSync,this.handleSuspendAllSync]=this._all("suspendAllSync");[this.suspendExtraSync,this.handleSuspendExtraSync]=this._all("suspendExtraSync");[this.suggestOptionalFeatures,this.handleSuggestOptionalFeatures]=this._all("suggestOptionalFeatures");[this.enableOptionalFeature,this.handleEnableOptionalFeature]=this._all("enableOptionalFeature")}};TweakValueService=class extends ServiceBase{};VaultService=class extends ServiceBase{constructor(hub){super(hub)}};TestService=class extends ServiceBase{constructor(hub){super(hub);[this.test,this.handleTest]=this._firstFailure("test");[this.testMultiDevice,this.handleTestMultiDevice]=this._firstFailure("testMultiDevice")}};UIService=class extends HubService{};ConfigService=class extends HubService{};ConfigServiceBrowserCompat=class extends ConfigService{getSmallConfig(key3){const dbKey=`${this.services.vault.getVaultName()}-${key3}`;return localStorage.getItem(dbKey)}setSmallConfig(key3,value){const dbKey=`${this.services.vault.getVaultName()}-${key3}`;localStorage.setItem(dbKey,value)}deleteSmallConfig(key3){const dbKey=`${this.services.vault.getVaultName()}-${key3}`;localStorage.removeItem(dbKey)}};ThroughHole=class{constructor(){this.registeredFunctions=new Map}bindFunction(name,func){this.registeredFunctions.set(name,func)}getFunction(name){let invocation;return(...args)=>{invocation||(invocation=this.registeredFunctions.get(name));if(!invocation)throw new Error(`Function ${name} is not bound in ThroughHole`);return invocation(...args)}}};ChannelBase=class{constructor(name){this.name=name;this.handlers=[];this.handlerNames=new Map}isAlreadyRegistered(handler){const result=this.handlers.indexOf(handler);if(-1===result)return!1;console.error("Handler already registered at index",result);return!0}getHandlerName(handler){return this.handlerNames.get(handler)}register(handler,name){if(this.isAlreadyRegistered(handler))Logger("Handler already registered for "+this.name,LOG_LEVEL_VERBOSE);else{this.handlers.push(handler);this.handlerNames.set(handler,name)}}isSomeHandlerRegistered(){const result=this.handlers.length>0;result||console.warn("No handler registered");return result}};Pipeline=class extends ChannelBase{constructor(name){super(name)}register(handler,name){super.register(handler,name)}async invoke(...args){if(!this.isSomeHandlerRegistered()){Logger("No handler registered for Pipeline "+this.name,LOG_LEVEL_VERBOSE);return!0}for(const handler of this.handlers){const name=this.getHandlerName(handler);try{if(!1===await handler(...args)){Logger(`Handler ${null!=name?name:"unknown"} for Pipeline ${this.name} returned false`,LOG_LEVEL_VERBOSE);const err3=new Error;console.error(err3.stack);return!1}}catch(e3){Logger(`Handler ${null!=name?name:"unknown"} Error in Pipeline handler for ${this.name}`);Logger(e3,LOG_LEVEL_VERBOSE);return!1}}return!0}};Switch=class extends ChannelBase{constructor(name){super(name)}register(handler,name){super.register(handler,name)}async invoke(...args){if(this.isSomeHandlerRegistered())for(const handler of this.handlers)try{const result=await handler(...args);if(!1!==result)return result}catch(e3){Logger("Error in Switch handler for "+this.name);Logger(e3,LOG_LEVEL_VERBOSE)}else Logger("No handler registered for Switch "+this.name,LOG_LEVEL_VERBOSE)}};AN_ERROR_OCCURRED=Symbol("AN_ERROR_OCCURRED");Survey=class extends ChannelBase{constructor(name){super(name)}register(handler,name){super.register(handler,name)}invoke(...args){return this.isSomeHandlerRegistered()?this.handlers.map((async handler=>{try{return await handler(...args)}catch(e3){Logger("Error in Survey handler for "+this.name);Logger(e3,LOG_LEVEL_VERBOSE);return AN_ERROR_OCCURRED}})).filter((result=>result!==AN_ERROR_OCCURRED)):[]}};Broadcaster=class extends ChannelBase{constructor(name){super(name)}register(handler,name){super.register(handler,name)}async invoke(...args){this.isSomeHandlerRegistered()&&await Promise.all(this.handlers.map((async handler=>{try{await handler(...args)}catch(e3){Logger("Error in Broadcaster handler for "+this.name);Logger(e3,LOG_LEVEL_VERBOSE)}})))}};ServiceBackend=class{constructor(){this.pipelines=new Map;this.switches=new Map;this.surveys=new Map;this.broadcasters=new Map}getPipeline(name){if(this.pipelines.has(name))return this.pipelines.get(name);const pipeline=new Pipeline(name);this.pipelines.set(name,pipeline);return pipeline}getSwitch(name){if(this.switches.has(name))return this.switches.get(name);const switchChannel=new Switch(name);this.switches.set(name,switchChannel);return switchChannel}getSurvey(name){if(this.surveys.has(name))return this.surveys.get(name);const survey=new Survey(name);this.surveys.set(name,survey);return survey}getBroadcaster(name){if(this.broadcasters.has(name))return this.broadcasters.get(name);const broadcaster=new Broadcaster(name);this.broadcasters.set(name,broadcaster);return broadcaster}all(name){const pipeline=this.getPipeline(name);return[(...args)=>pipeline.invoke(...args),func=>pipeline.register(func,`${name} for ${func.name}`)]}first(name){const switchChannel=this.getSwitch(name);return[(...args)=>switchChannel.invoke(...args),func=>switchChannel.register(func,`${name} for ${func.name}`)]}firstOrUndefined(name){const switchChannel=this.getSwitch(name);return[async(...args)=>{const result=await switchChannel.invoke(...args);if(result)return result},handler=>{switchChannel.register((async(...args)=>{try{const result=await handler(...args);if(void 0!==result&&!1!==result)return result}catch(e3){Logger("Error in firstOrUndefined handler for "+name);Logger(e3,LOG_LEVEL_VERBOSE)}return!1}),`${name} for ${handler.name}`)}]}firstFailure(name){const survey=this.getSurvey(name);return[async(...args)=>{const resultTasks=survey.invoke(...args);try{return!(await Promise.all(resultTasks)).some((r4=>!1===r4))}catch(e3){Logger("Error in firstFailure handler for survey "+name);Logger(e3,LOG_LEVEL_VERBOSE);return!1}},handler=>{survey.register((async(...args)=>{try{const result=await handler(...args);if(void 0!==result&&!result)return!1}catch(e3){Logger("Error in firstFailure handler for survey "+name);Logger(e3,LOG_LEVEL_VERBOSE)}return!0}),`${name} for ${handler.name}`)}]}broadcast(name){const broadcaster=this.getBroadcaster(name);return[(...args)=>broadcaster.invoke(...args),func=>broadcaster.register(func,`${name} for ${func.name}`)]}collect(name){const survey=this.getSurvey(name);return[(...args)=>survey.invoke(...args),func=>survey.register(func,`${name} for ${func.name}`)]}collectBatch(name){const survey=this.getSurvey(name);return[(...args)=>{const tasks3=survey.invoke(...args);return Promise.all(tasks3)},func=>survey.register(func,`${name} for ${func.name}`)]}};InjectableAPIService=class extends APIService{getPlatform(){return"unknown"}constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.addLog,this.handleAddLog]=bindMethod(this._throughHole,"API.addLog");[this.getCustomFetchHandler,this.handleGetCustomFetchHandler]=bindMethod(this._throughHole,"API.getCustomFetchHandler");[this.isMobile,this.handleIsMobile]=bindMethod(this._throughHole,"API.isMobile");[this.showWindow,this.handleShowWindow]=bindMethod(this._throughHole,"API.showWindow");[this.getAppID,this.handleGetAppID]=bindMethod(this._throughHole,"API.getAppID");[this.isLastPostFailedDueToPayloadSize,this.handleIsLastPostFailedDueToPayloadSize]=bindMethod(this._throughHole,"API.isLastPostFailedDueToPayloadSize");[this.getAppVersion,this.handleGetAppVersion]=bindMethod(this._throughHole,"API.getAppVersion");[this.getPluginVersion,this.handleGetPluginVersion]=bindMethod(this._throughHole,"API.getPluginVersion")}};InjectablePathService=class extends PathService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.id2path,this.handleId2Path]=bindMethod(this._throughHole,"path.id2path");[this.path2id,this.handlePath2Id]=bindMethod(this._throughHole,"path.path2id")}};InjectableDatabaseService=class extends DatabaseService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.createPouchDBInstance,this.handleCreatePouchDBInstance]=bindMethod(this._throughHole,"database.createPouchDBInstance");[this.openSimpleStore,this.handleOpenSimpleStore]=bindMethod(this._throughHole,"database.openSimpleStore");[this.openDatabase,this.handleOpenDatabase]=bindMethod(this._throughHole,"database.openDatabase");[this.resetDatabase,this.handleResetDatabase]=bindMethod(this._throughHole,"database.resetDatabase");[this.isDatabaseReady,this.handleIsDatabaseReady]=bindMethod(this._throughHole,"database.isDatabaseReady")}};InjectableDatabaseEventService=class extends DatabaseEventService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.initialiseDatabase,this.handleInitialiseDatabase]=bindMethod(this._throughHole,"databaseEvents.initialiseDatabase")}};InjectableReplicatorService=class extends ReplicatorService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.getActiveReplicator,this.handleGetActiveReplicator]=bindMethod(this._throughHole,"replicator.getActiveReplicator")}};InjectableFileProcessingService=class extends FileProcessingService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole}};InjectableReplicationService=class extends ReplicationService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.parseSynchroniseResult,this.handleParseSynchroniseResult]=bindMethod(this._throughHole,"replication.parseSynchroniseResult");[this.isReplicationReady,this.handleIsReplicationReady]=bindMethod(this._throughHole,"replication.isReplicationReady");[this.replicate,this.handleReplicate]=bindMethod(this._throughHole,"replication.replicate");[this.replicateByEvent,this.handleReplicateByEvent]=bindMethod(this._throughHole,"replication.replicateByEvent")}};InjectableRemoteService=class extends RemoteService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.replicateAllToRemote,this.handleReplicateAllToRemote]=bindMethod(this._throughHole,"remote.replicateAllToRemote");[this.replicateAllFromRemote,this.handleReplicateAllFromRemote]=bindMethod(this._throughHole,"remote.replicateAllFromRemote");[this.markLocked,this.handleMarkLocked]=bindMethod(this._throughHole,"remote.markLocked");[this.markUnlocked,this.handleMarkUnlocked]=bindMethod(this._throughHole,"remote.markUnlocked");[this.markResolved,this.handleMarkResolved]=bindMethod(this._throughHole,"remote.markResolved");[this.tryResetDatabase,this.handleTryResetDatabase]=bindMethod(this._throughHole,"remote.tryResetDatabase");[this.tryCreateDatabase,this.handleTryCreateDatabase]=bindMethod(this._throughHole,"remote.tryCreateDatabase");[this.connect,this.handleConnect]=bindMethod(this._throughHole,"remote.connect")}};InjectableConflictService=class extends ConflictService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.queueCheckForIfOpen,this.handleQueueCheckForIfOpen]=bindMethod(this._throughHole,"conflict.queueCheckForIfOpen");[this.queueCheckFor,this.handleQueueCheckFor]=bindMethod(this._throughHole,"conflict.queueCheckFor");[this.ensureAllProcessed,this.handleEnsureAllProcessed]=bindMethod(this._throughHole,"conflict.ensureAllProcessed");[this.resolveByDeletingRevision,this.handleResolveByDeletingRevision]=bindMethod(this._throughHole,"conflict.resolveByDeletingRevision");[this.resolve,this.handleResolve]=bindMethod(this._throughHole,"conflict.resolve");[this.resolveByNewest,this.handleResolveByNewest]=bindMethod(this._throughHole,"conflict.resolveByNewest")}};InjectableAppLifecycleService=class extends AppLifecycleService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.performRestart,this.handlePerformRestart]=bindMethod(this._throughHole,"appLifecycle.performRestart");[this.askRestart,this.handleAskRestart]=bindMethod(this._throughHole,"appLifecycle.askRestart");[this.scheduleRestart,this.handleScheduleRestart]=bindMethod(this._throughHole,"appLifecycle.scheduleRestart");[this.isSuspended,this.handleIsSuspended]=bindMethod(this._throughHole,"appLifecycle.isSuspended");[this.setSuspended,this.handleSetSuspended]=bindMethod(this._throughHole,"appLifecycle.setSuspended");[this.isReady,this.handleIsReady]=bindMethod(this._throughHole,"appLifecycle.isReady");[this.markIsReady,this.handleMarkIsReady]=bindMethod(this._throughHole,"appLifecycle.markIsReady");[this.resetIsReady,this.handleResetIsReady]=bindMethod(this._throughHole,"appLifecycle.resetIsReady");[this.hasUnloaded,this.handleHasUnloaded]=bindMethod(this._throughHole,"appLifecycle.hasUnloaded");[this.isReloadingScheduled,this.handleIsReloadingScheduled]=bindMethod(this._throughHole,"appLifecycle.isReloadingScheduled")}};InjectableSettingService=class extends SettingService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.clearUsedPassphrase,this.handleClearUsedPassphrase]=bindMethod(this._throughHole,"setting.clearUsedPassphrase");[this.realiseSetting,this.handleRealiseSetting]=bindMethod(this._throughHole,"setting.realiseSetting");[this.decryptSettings,this.handleDecryptSettings]=bindMethod(this._throughHole,"setting.decryptSettings");[this.adjustSettings,this.handleAdjustSettings]=bindMethod(this._throughHole,"setting.adjustSettings");[this.getDeviceAndVaultName,this.handleGetDeviceAndVaultName]=bindMethod(this._throughHole,"setting.getDeviceAndVaultName");[this.setDeviceAndVaultName,this.handleSetDeviceAndVaultName]=bindMethod(this._throughHole,"setting.setDeviceAndVaultName");[this.saveDeviceAndVaultName,this.handleSaveDeviceAndVaultName]=bindMethod(this._throughHole,"setting.saveDeviceAndVaultName");[this.saveSettingData,this.handleSaveSettingData]=bindMethod(this._throughHole,"setting.saveSettingData");[this.loadSettings,this.handleLoadSettings]=bindMethod(this._throughHole,"setting.loadSettings");[this.currentSettings,this.handleCurrentSettings]=bindMethod(this._throughHole,"setting.currentSettings");[this.shouldCheckCaseInsensitively,this.handleShouldCheckCaseInsensitively]=bindMethod(this._throughHole,"setting.shouldCheckCaseInsensitively");[this.importSettings,this.handleImportSettings]=bindMethod(this._throughHole,"setting.importSettings")}};InjectableTweakValueService=class extends TweakValueService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.fetchRemotePreferred,this.handleFetchRemotePreferred]=bindMethod(this._throughHole,"tweakValue.fetchRemotePreferred");[this.checkAndAskResolvingMismatched,this.handleCheckAndAskResolvingMismatched]=bindMethod(this._throughHole,"tweakValue.checkAndAskResolvingMismatched");[this.askResolvingMismatched,this.handleAskResolvingMismatched]=bindMethod(this._throughHole,"tweakValue.askResolvingMismatched");[this.checkAndAskUseRemoteConfiguration,this.handleCheckAndAskUseRemoteConfiguration]=bindMethod(this._throughHole,"tweakValue.checkAndAskUseRemoteConfiguration");[this.askUseRemoteConfiguration,this.handleAskUseRemoteConfiguration]=bindMethod(this._throughHole,"tweakValue.askUseRemoteConfiguration")}};InjectableVaultService=class extends VaultService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.getVaultName,this.handleGetVaultName]=bindMethod(this._throughHole,"vault.getVaultName");[this.scanVault,this.handleScanVault]=bindMethod(this._throughHole,"vault.scanVault");[this.isIgnoredByIgnoreFile,this.handleIsIgnoredByIgnoreFile]=bindMethod(this._throughHole,"vault.isIgnoredByIgnoreFile");[this.isTargetFile,this.handleIsTargetFile]=bindMethod(this._throughHole,"vault.isTargetFile");[this.isFileSizeTooLarge,this.handleIsFileSizeTooLarge]=bindMethod(this._throughHole,"vault.isFileSizeTooLarge");[this.getActiveFilePath,this.handleGetActiveFilePath]=bindMethod(this._throughHole,"vault.getActiveFilePath");[this.markFileListPossiblyChanged,this.handleMarkFileListPossiblyChanged]=bindMethod(this._throughHole,"vault.markFileListPossiblyChanged");[this.isStorageInsensitive,this.handleIsStorageInsensitive]=bindMethod(this._throughHole,"vault.isStorageInsensitive");[this.vaultName,this.handleVaultName]=bindMethod(this._throughHole,"vault.vaultName")}};InjectableTestService=class extends TestService{constructor(backend,throughHole){super(backend);this._throughHole=throughHole;[this.addTestResult,this.handleAddTestResult]=bindMethod(this._throughHole,"test.addTestResult")}};InjectableServiceHub=class extends ServiceHub{constructor(services){super(services);this._serviceBackend=new ServiceBackend;this._throughHole=new ThroughHole;this._api=new InjectableAPIService(this._serviceBackend,this._throughHole);this._path=new InjectablePathService(this._serviceBackend,this._throughHole);this._database=new InjectableDatabaseService(this._serviceBackend,this._throughHole);this._databaseEvents=new InjectableDatabaseEventService(this._serviceBackend,this._throughHole);this._replicator=new InjectableReplicatorService(this._serviceBackend,this._throughHole);this._fileProcessing=new InjectableFileProcessingService(this._serviceBackend,this._throughHole);this._replication=new InjectableReplicationService(this._serviceBackend,this._throughHole);this._remote=new InjectableRemoteService(this._serviceBackend,this._throughHole);this._conflict=new InjectableConflictService(this._serviceBackend,this._throughHole);this._appLifecycle=new InjectableAppLifecycleService(this._serviceBackend,this._throughHole);this._setting=new InjectableSettingService(this._serviceBackend,this._throughHole);this._tweakValue=new InjectableTweakValueService(this._serviceBackend,this._throughHole);this._vault=new InjectableVaultService(this._serviceBackend,this._throughHole);this._test=new InjectableTestService(this._serviceBackend,this._throughHole);this._ui=services.ui;this._config=services.config}get API(){return this._api}get path(){return this._path}get database(){return this._database}get databaseEvents(){return this._databaseEvents}get replicator(){return this._replicator}get fileProcessing(){return this._fileProcessing}get replication(){return this._replication}get remote(){return this._remote}get conflict(){return this._conflict}get appLifecycle(){return this._appLifecycle}get setting(){return this._setting}get tweakValue(){return this._tweakValue}get vault(){return this._vault}get test(){return this._test}get UI(){return this._ui}get config(){return this._config}};on_click6=(_,copyToClipboard)=>copyToClipboard();root_220=from_html(' ',1);root39=from_html(" ",1);$$css17={hash:"svelte-u2ix67",code:"textarea.svelte-u2ix67 {resize:none;}"};delegate(["click"]);ObsidianUIService=class extends UIService{get dialogManager(){return this._dialogManager}constructor(plugin3){super();this._dialogManager=new SvelteDialogManager(plugin3);this._plugin=plugin3}async promptCopyToClipboard(title,value){const param={title,dataToCopy:value};return"ok"===await this._dialogManager.open(DialogueToCopy,param)}showMarkdownDialog(title,contentMD,buttons,defaultAction){return this._plugin.confirm.askSelectStringDialogue(contentMD,buttons,{title,defaultAction:null!=defaultAction?defaultAction:buttons[0],timeout:0})}};ObsidianAPIService=class extends InjectableAPIService{getPlatform(){return"obsidian"}};ObsidianPathService=class extends InjectablePathService{};ObsidianDatabaseService=class extends InjectableDatabaseService{};ObsidianReplicatorService=class extends InjectableReplicatorService{};ObsidianFileProcessingService=class extends InjectableFileProcessingService{};ObsidianReplicationService=class extends InjectableReplicationService{};ObsidianRemoteService=class extends InjectableRemoteService{};ObsidianConflictService=class extends InjectableConflictService{};ObsidianAppLifecycleService=class extends InjectableAppLifecycleService{};ObsidianSettingService=class extends InjectableSettingService{};ObsidianTweakValueService=class extends InjectableTweakValueService{};ObsidianVaultService=class extends InjectableVaultService{};ObsidianTestService=class extends InjectableTestService{};ObsidianConfigService=class extends ConfigServiceBrowserCompat{};ObsidianServiceHub=class extends InjectableServiceHub{constructor(plugin3){const config=new ObsidianConfigService;super({ui:new ObsidianUIService(plugin3),config});this._api=new ObsidianAPIService(this._serviceBackend,this._throughHole);this._path=new ObsidianPathService(this._serviceBackend,this._throughHole);this._database=new ObsidianDatabaseService(this._serviceBackend,this._throughHole);this._replicator=new ObsidianReplicatorService(this._serviceBackend,this._throughHole);this._fileProcessing=new ObsidianFileProcessingService(this._serviceBackend,this._throughHole);this._replication=new ObsidianReplicationService(this._serviceBackend,this._throughHole);this._remote=new ObsidianRemoteService(this._serviceBackend,this._throughHole);this._conflict=new ObsidianConflictService(this._serviceBackend,this._throughHole);this._appLifecycle=new ObsidianAppLifecycleService(this._serviceBackend,this._throughHole);this._setting=new ObsidianSettingService(this._serviceBackend,this._throughHole);this._tweakValue=new ObsidianTweakValueService(this._serviceBackend,this._throughHole);this._vault=new ObsidianVaultService(this._serviceBackend,this._throughHole);this._test=new ObsidianTestService(this._serviceBackend,this._throughHole);this._plugin=plugin3}};ObsidianLiveSyncPlugin=class extends import_obsidian.Plugin{constructor(){super(...arguments);this._services=new ObsidianServiceHub(this);this.addOns=[new ConfigSync(this),new HiddenFileSync(this),new LocalDatabaseMaintenance(this),new P2PReplicator(this)];this.modules=[new ModuleLiveSyncMain(this),new ModuleExtraSyncObsidian(this,this),new ModuleDatabaseFileAccess(this),new ModulePouchDB(this),new ModuleConflictChecker(this),new ModuleLocalDatabaseObsidian(this),new ModuleReplicatorMinIO(this),new ModuleReplicatorCouchDB(this),new ModuleReplicator(this),new ModuleFileHandler(this),new ModuleConflictResolver(this),new ModuleRemoteGovernor(this),new ModuleTargetFilter(this),new ModulePeriodicProcess(this),new ModuleKeyValueDB(this),new ModuleInitializerFile(this),new ModuleObsidianAPI(this,this),new ModuleObsidianEvents(this,this),new ModuleFileAccessObsidian(this,this),new ModuleObsidianSettings(this,this),new ModuleResolvingMismatchedTweaks(this),new ModuleObsidianSettingsAsMarkdown(this,this),new ModuleObsidianSettingDialogue(this,this),new ModuleLog(this,this),new ModuleInputUIObsidian(this,this),new ModuleObsidianMenu(this,this),new ModuleRebuilder(this),new ModuleSetupObsidian(this,this),new ModuleObsidianDocumentHistory(this,this),new ModuleMigration(this),new ModuleRedFlag(this),new ModuleInteractiveConflictResolver(this,this),new ModuleObsidianGlobalHistory(this,this),new ModuleCheckRemoteSize(this,this),new ModuleDev(this,this),new ModuleReplicateTest(this,this),new ModuleIntegratedTest(this,this),new SetupManager(this,this)];this.requestCount=reactiveSource(0);this.responseCount=reactiveSource(0);this.totalQueued=reactiveSource(0);this.batched=reactiveSource(0);this.processing=reactiveSource(0);this.databaseQueueCount=reactiveSource(0);this.storageApplyingCount=reactiveSource(0);this.replicationResultCount=reactiveSource(0);this.conflictProcessQueueCount=reactiveSource(0);this.pendingFileEventCount=reactiveSource(0);this.processingFileEventCount=reactiveSource(0);this.replicationStat=reactiveSource({sent:0,arrived:0,maxPullSeq:0,maxPushSeq:0,lastSyncPullSeq:0,lastSyncPushSeq:0,syncStatus:"CLOSED"})}get services(){return this._services}getAddOn(cls){for(const addon of this.addOns)if(addon.constructor.name==cls)return addon}getModule(constructor){for(const module2 of this.modules)if(module2.constructor===constructor)return module2;throw new Error(`Module ${constructor} not found or not loaded.`)}getDatabase(){return this.localDatabase.localDatabase}getSettings(){return this.settings}onload(){this.services.appLifecycle.onLoad()}async saveSettings(){await this.services.setting.saveSettingData()}onunload(){this.services.appLifecycle.onAppUnload()}}; /* nosourcemap */