tweb/public/6b4e475df8d7100cbf33.worker.js.map
Eduard Kuzmenko de0fbec792 Build
2021-04-23 14:43:59 +04:00

1 line
993 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/helpers/bytes.ts","webpack:///./src/vendor/leemon.ts","webpack:///./src/config/debug.ts","webpack:///./src/lib/crypto/cryptoworker.ts","webpack:///./src/lib/crypto/crypto_methods.ts","webpack:///./src/lib/logger.ts","webpack:///./src/config/modes.ts","webpack:///./src/helpers/random.ts","webpack:///./src/lib/mtproto/bin_utils.ts","webpack:///./node_modules/@cryptography/aes/dist/es/aes.js","webpack:///./node_modules/@cryptography/sha256/dist/es/sha256.js","webpack:///./src/lib/crypto/crypto_utils.ts","webpack:///./node_modules/@cryptography/sha1/dist/index.js","webpack:///./node_modules/pako/dist/pako_inflate.min.js","webpack:///./src/lib/polyfill.ts","webpack:///./src/config/database.ts","webpack:///./src/helpers/blob.ts","webpack:///./src/lib/idb.ts","webpack:///./src/helpers/object.ts","webpack:///./src/lib/sessionStorage.ts","webpack:///./src/lib/storage.ts","webpack:///./src/lib/mtproto/schema.ts","webpack:///./src/lib/mtproto/tl_utils.ts","webpack:///./src/lib/mtproto/timeManager.ts","webpack:///./src/config/app.ts","webpack:///./src/lib/mtproto/networker.ts","webpack:///./src/helpers/array.ts","webpack:///./src/lib/mtproto/networkerFactory.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/lib/mtproto/transports/websocket.ts","webpack:///./src/lib/mtproto/transports/obfuscation.ts","webpack:///./src/lib/mtproto/transports/intermediate.ts","webpack:///./src/lib/mtproto/transports/tcpObfuscated.ts","webpack:///./src/helpers/userAgent.ts","webpack:///./src/helpers/context.ts","webpack:///./src/lib/mtproto/dcConfigurator.ts","webpack:///./src/lib/mtproto/rsaKeysManager.ts","webpack:///./src/lib/mtproto/authorizer.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/lib/mtproto/apiManager.ts","webpack:///./src/lib/filemanager.ts","webpack:///./src/lib/cacheStorage.ts","webpack:///./src/lib/mtproto/apiFileManager.ts","webpack:///./src/helpers/fileName.ts","webpack:///./src/lib/mtproto/mtproto.worker.ts"],"names":["this","chunkIds","moreModules","moduleId","modules","length","installedChunks","pop","installedModules","0","__webpack_require__","exports","module","i","l","call","e","chunkId","promises","push","Promise","resolve","then","importScripts","p","all","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","s","bytesToHex","bytes","arr","toString","join","bytesFromHex","hexString","len","start","parseInt","charAt","substr","bytesCmp","bytes1","bytes2","bytesXor","convertToArrayBuffer","ArrayBuffer","undefined","buffer","byteLength","BYTES_PER_ELEMENT","Uint8Array","convertToUint8Array","bytesFromArrayBuffer","byteView","bufferConcat","buffer1","buffer2","l1","l2","tmp","set","bufferConcats","args","forEach","b","lastLength","bytesFromWordss","input","bytesToWordss","words","Uint32Array","radix","bpe","mask","digitsStr","k","buff","one","int2bigInt","Array","ss","s0","s3","s4","s5","s6","s7","sa","eg_u","eg_A","eg_B","eg_C","eg_D","bitSize","x","j","z","w","expand","ans","copy_","mod","dup","mod_","trim","mult","y","mult_","powMod","powMod_","pow","sub","sub_","add","add_","inverseModInt","a","Math","floor","eGCD_","v","g","max","halve_","copyInt_","greater","equalsInt","negative","multInt_","leftShift_","greaterShift","shift","kx","ky","divide_","q","y1","y2","subShift_","linCombShift_","addShift_","rightShift_","modInt","bits","minSize","ceil","str2bigInt","base","kk","indexOf","substring","addInt_","equals","isZero","bigInt2str","divInt_","bigInt2bytes","littleEndian","out","reverse","cmp","ys","multMod_","squareMod_","k1","k2","kn","np","mont_","ui","ks","DEBUG","debug","MOUNT_CLASS_TO","window","self","cryptoWorker","performTaskWorker","salt","iterations","keyBytes","ivBytes","encryptedBytes","publicKey","password","state","isNew","super","webWorker","taskId","awaiting","pending","utils","console","log","assign","sha1HashSync","sha256HashSync","hash_pbkdf2","aesEncryptSync","aesDecryptSync","rsaEncrypt","pqPrimeFactorization","bytesModPow","gzipUncompress","srp","computeSRP","task","CryptoWorker","LogLevels","_logTimer","Date","now","dT","toFixed","logger","prefix","level","warn","error","Log","info","trace","setPrefix","_prefix","Modes","test","location","search","http","ssl","multipleConnections","asServiceWorker","nextRandomInt","maxValue","random","isObject","longFromInts","high","low","bigInt","sortLongsArray","map","long","sort","addPadding","blockSize","zeroes","full","prepend","needPadding","padding","concat","S","Si","T1","T2","T3","T4","T5","T6","T7","T8","getWords","buf","pos","str","charCodeAt","Error","xor","left","right","to","x2","x4","tEnc","tDec","xInv","computeTables","AES","_key","encKey","decKey","rcon","encrypt","_message","a2","b2","c2","message","rounds","decrypt","AES_IGE","iv","cipher","text","cipherText","prevX","subarray","prevY","yXOR","counter","offset","incrementCounter","carry","s2i","i2s","data","String","fromCharCode","i2h","slice","init","h","_k","round","f","t1","t2","maj","preprocess","process","finish","len64hi","len64lo","finalizestr","chunk","finalize","format","Stream","tail","update","digest","clear","sha256","stream","blockLength","digestLength","longToBytes","sLong","hashBytes","hash","apply","decryptedBytes","N","modulus","E","exponent","X","encryptedBigInt","subtle","crypto","importKey","deriveKey","deriveBits","pqBytes","result","pqPrimeLeemon","what","lim","P","Q","minLen","it","xBigInt","yBigInt","mBigInt","resBigInt","inflate","int32ToStr","_padding","default","flen","next","pad","overflow","h1","h2","h3","h4","h5","code","1","Uint16Array","Int32Array","arguments","TypeError","shrinkBuf","arraySet","flattenChunks","setTyped","Buf8","Buf16","Buf32","2","string2buf","buf2binstring","binstring2buf","buf2string","utf8border","3","4","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","5","6","time","xflags","os","extra","extra_len","comment","hcrc","done","7","u","_","Z","next_in","avail_in","next_out","output","avail_out","dmax","wsize","whave","wnext","hold","lencode","distcode","lenbits","distbits","msg","sane","8","R","O","C","U","L","last","wrap","havedict","flags","check","total","head","wbits","ncode","nlen","ndist","have","lens","work","lendyn","distdyn","back","was","total_in","total_out","adler","H","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInit2","B","A","data_type","inflateEnd","inflateGetHeader","inflateSetDictionary","inflateInfo","9","I","D","T","F","10","11","options","chunkSize","windowBits","raw","err","ended","chunks","strm","header","dictionary","onEnd","onData","Inflate","inflateRaw","ungzip","configurable","randomize","toJSON","findAndSplice","verify","index","findIndex","splice","toHHMMSS","leadZero","sec_num","hours","minutes","seconds","finally","fn","onFinally","callback","reason","reject","version","stores","blobConstruct","blobParts","mimeType","blob","safeMimeType","blobSafeMimeType","Blob","type","bb","BlobBuilder","blobPart","append","getBlob","storageIsAvailable","fromObject","safeAssign","openDatabase","createNew","openDbPromise","request","indexedDB","open","finished","setTimeout","onerror","onsuccess","event","db","calledNew","onclose","onabort","transaction","target","close","onversionchange","onupgradeneeded","oldVersion","newVersion","store","objectStoreNames","contains","createObjectStore","indexes","createIndex","indexName","keyPath","objectParameters","entryName","storeName","objectStore","delete","timeout","clearTimeout","handleError","save","put","fileName","sessionStorage","storageOptions","cache","useStorage","storage","getFromCache","obj","onlyLocal","setToCache","saveLocal","deleteAll","appStorage","boolFalse","API","constructors","find","predicate","id","boolTrue","vector","gzipPacked","MTProto","maxLength","mtproto","startMaxLength","createBuffer","intView","resultBuffer","resultInt32","getArray","typed","resultArray","needBytes","previousBuffer","previousArray","field","checkLength","writeInt","iHigh","iLow","isArray","storeLongP","storeIntBytes","Float64Array","sUTF8","unescape","encodeURIComponent","methodName","params","methodData","methods","method","storeInt","pFlags","flagsOffsets","param","condType","split","fieldBit","storeObject","paramName","storeLong","storeString","storeBytes","storeDouble","storeBool","itemType","toLowerCase","schema","isBare","constructorData","override","hex","readInt","doubleView","fetchObject","decodeURIComponent","escape","fetchInt","fetchLong","fetchIntBytes","fetchString","fetchBytes","fetchDouble","fetchBool","constructor","constructorCmp","compressed","uncompressed","fallback","checkType","constructorsIndex","schemaFallback","int1","int2","overrideKey","isCond","TLDeserialization","TLSerialization","timeManager","lastMessageId","timeOffset","timeTicks","messageId","serverTime","localTime","newTimeOffset","changed","abs","server_time_offset","langPackVersion","langPack","langPackCode","domains","baseDcId","invokeAfterMsgConstructor","dcId","authKey","authKeyId","serverSalt","transport","lastServerMessages","sentMessages","pendingMessages","pendingAcks","pendingResends","connectionInited","seqNo","lastResendReq","isOnline","lastResponseTime","authKeyUint8","isFileUpload","fileUpload","isFileDownload","fileDownload","isFileNetworker","suffix","updateSession","networker","connected","setConnectionStatus","prevSessionId","sessionId","sentMessageId","sentMessage","container","array","forEachReverse","inner","innerSentMessageId","idx","innerSentMessage","updateSentMessage","msg_id","generateId","seq_no","generateSeqNo","notContentRelated","serializer","storeMethod","body","getBytes","pushMessage","invokeWithLayer","layer","initConnection","navigator","userAgent","platform","language","afterMessageId","resultType","isAPI","promise","deferred","noSchedule","scheduleRequest","noResponse","online","willChange","onConnectionStatusChange","delay","innerMsgId","acked","dataWithPadding","isOut","msgKeyLargePlain","msgKeyLarge","sha256Hash","msgKey","sha2aText","sha2bText","results","aesKey","aesIv","sha2a","sha2b","ackMsgIds","wrapMtpMessage","msg_ids","resendMsgIds","resendOpts","req_msg_id","resend_msg_ids","outMessage","messages","messagesByteLen","lengthOverflow","keys","messageByteLength","generateContainerMessage","messageWithBody","sendEncryptedRequest","cleanupSent","innerMessages","storeRawBytes","getMsgKey","keyIv","getAesKeyIv","aesEncrypt","encryptedData","aesDecrypt","dataBuffer","getBuffer","paddingLength","getEncryptedMessage","encryptedResult","getEncryptedOutput","requestData","send","responseBuffer","deserializer","fetchRawBytes","getOffset","getDecryptedMessage","calcMsgKey","totalLength","messageBodyLength","messageBody","mt_message","seqno","stack","mt_rpc_result","response","newServerSalt","nextReq","nextReqTimeout","cb","performScheduledRequest","msgId","notEmpty","rawError","matches","error_message","match","error_code","description","originalError","pushResend","innerMessage","processMessage","applyServerSalt","new_server_salt","bad_msg_id","ackMessage","changedOffset","applyServerTime","badMessage","processMessageAck","first_msg_id","server_salt","updatesProcessor","answer_msg_id","reqResendMessage","badMsgId","processError","authKeyID","EventListenerBase","reuseResults","_constructor","listeners","listenerResults","once","listener","removeEventListener","url","logSuffix","handleOpen","dispatchEvent","handleClose","removeListeners","handleMessage","ws","logLevel","connect","WebSocket","binaryType","addEventListener","Counter","initialValue","_counter","_remainingCounter","_remainingCounterIndex","_aes","payload","encrypted","increment","Obfuscation","codec","initPayload","val","val2","reversedPayload","encIv","decIv","encNew","decNew","obfuscateTag","encode","tag","Connection","retryTimeout","intermediate","obfuscation","onOpen","connection","resend","encoded","encodeBody","releasePending","onMessage","decode","readPacket","parseResponse","catch","onClose","diff","lastCloseTime","needTimeout","isNaN","bodySent","toEncode","encodePacket","ctx","vendor","isSafari","maxTouchPoints","MSStream","isWebWorker","WorkerGlobalScope","isServiceWorker","ServiceWorkerGlobalScope","notifyServiceWorker","clients","matchAll","includeUncontrolled","postMessage","notifyWorker","noop","notifySomeone","notifyAll","socketId","TEST_SUFFIX","socketsProxied","Map","sslSubdomains","dcOptions","host","port","chosenServers","transportSocket","connectionType","subdomain","transportType","reuse","client","download","upload","servers","transports","publisKeysHex","publicKeysParsed","prepared","preparePromise","keyParsed","RSAPublicKey","sha1Hash","fingerprintBytes","fingerprints","fingerprintHex","foundKey","prepare","fill","fingerprint","cached","requestArray","requestLength","headerArray","dcConfigurator","chooseServer","baseError","auth_key_id","msg_len","auth","nonce","rsaKeysManager","mtpSendPlainRequest","serverNonce","server_nonce","pq","server_public_key_fingerprints","select","pAndQ","factorize","mtpSendReqDhParams","newNonce","p_q_inner_data","new_nonce","uint8Data","dataWithHash","rsaEncrypted","req_DH_params","public_key_fingerprint","encrypted_data","requestBytes","newNonceHash","new_nonce_hash","mtpDecryptServerDhDataAnswer","encrypted_answer","mtpSendSetClientDhParams","encryptedAnswer","tmpAesKey","tmpAesIv","answerWithHash","answerWithPadding","dhPrime","dh_prime","gA","g_a","server_time","retry","mtpVerifyDhParams","dhPrimeHex","_gABigInt","_dhPrimeBigInt","_two","perf","performance","_twoPow","gBytes","gB","modPow","retry_id","g_b","authKeyHash","authKeyAux","newNonceHash1","new_nonce_hash1","newNonceHash2","new_nonce_hash2","newNonceHash3","new_nonce_hash3","mtpSendReqPQ","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","lastNotify","addNotifyListener","cancel","apiManager","cachedNetworkers","cachedExportPromise","gettingNetworkers","afterMessageTempIds","userId","user_auth","dc","storageKeys","storageResult","logoutPromises","invokeApi","ignoreErrors","handled","networkers","found","unshift","getKey","ak","akId","authKeyHex","authKeyIdHex","serverSaltHex","networkerFactory","getNetworker","authorizer","storeObj","afterMessageIdTemp","clearInterval","interval","startTime","setInterval","rejectPromise","logOut","noErrorBox","cachedNetworker","performRequest","wrapApiCall","prepareTempMessageId","remove","exportResolve","exportReject","dc_id","exportedAuth","newDcId","setBaseDcId","stopTime","waitTime","min","floodMaxTimeout","blobSupported","fileWriter","fileReader","FileReader","onload","arrayBuffer","write","readAsArrayBuffer","saveFileCallback","part","truncate","saveToStorage","dbName","caches","timeoutOperation","Response","rejected","res","fakeWriter","getFakeFileWriter","saveFile","apiFileManager","cacheStorage","cachedDownloadPromises","uploadPromises","downloadPulls","downloadActives","webpConvertPromises","tempId","queueId","uncompressTGS","convertWebp","convertPromise","activeDelta","downloadPull","downloadCheck","limit","checkCancel","downloadRequest","getDelta","size","isAvailable","isWebpSupported","ext","thumbPart","thumb_size","volume_id","local_id","getFileNameByLocation","cachedPromise","fileStorage","getFileStorage","deleteFile","downloadFile","cacheFileWriter","canceled","resolved","errorHandler","getFile","getFileWriter","limitPart","getLimitPart","writeFileDeferred","writeFilePromise","processDownloaded","delayed","superpuper","requestFilePart","isFinal","processedResult","Infinity","progress","file","fileSize","isBigFile","doneParts","partSize","totalParts","fileId","_part","resultInputFile","parts","md5_checksum","details","uploadResolve","uploadReject","reader","onloadend","readyState","DONE","file_id","file_part","file_total_parts","generator","webpSupported","setUpdatesProcessor","status","responseTask","originalPayload","socketTask","socketProxied"],"mappings":"aAAEA,KAAmB,aAAI,SAA8BC,EAAUC,GAC9D,IAAI,IAAIC,KAAYD,EACnBE,EAAQD,GAAYD,EAAYC,GAEjC,KAAMF,EAASI,QACdC,EAAgBL,EAASM,OAAS,GAIpC,IAAIC,EAAmB,GAInBF,EAAkB,CACrBG,EAAG,GAIJ,SAASC,EAAoBP,GAG5B,GAAGK,EAAiBL,GACnB,OAAOK,EAAiBL,GAAUQ,QAGnC,IAAIC,EAASJ,EAAiBL,GAAY,CACzCU,EAAGV,EACHW,GAAG,EACHH,QAAS,IAUV,OANAP,EAAQD,GAAUY,KAAKH,EAAOD,QAASC,EAAQA,EAAOD,QAASD,GAG/DE,EAAOE,GAAI,EAGJF,EAAOD,QAKfD,EAAoBM,EAAI,SAAuBC,GAC9C,IAAIC,EAAW,GAOf,OANAA,EAASC,KAAKC,QAAQC,UAAUC,MAAK,WAEhChB,EAAgBW,IACnBM,cAAcb,EAAoBc,EAAI,GAAKP,EAA7BP,uCAGTU,QAAQK,IAAIP,IAIpBR,EAAoBgB,EAAItB,EAGxBM,EAAoBiB,EAAInB,EAGxBE,EAAoBkB,EAAI,SAASjB,EAASkB,EAAMC,GAC3CpB,EAAoBqB,EAAEpB,EAASkB,IAClCG,OAAOC,eAAetB,EAASkB,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEpB,EAAoB0B,EAAI,SAASzB,GACX,oBAAX0B,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAetB,EAAS0B,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAetB,EAAS,aAAc,CAAE4B,OAAO,KAQvD7B,EAAoB8B,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQ7B,EAAoB6B,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAlC,EAAoB0B,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAO7B,EAAoBkB,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRjC,EAAoBqC,EAAI,SAASnC,GAChC,IAAIkB,EAASlB,GAAUA,EAAO8B,WAC7B,WAAwB,OAAO9B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAF,EAAoBkB,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRpB,EAAoBqB,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAepC,KAAKiC,EAAQC,IAGzGvC,EAAoBc,EAAI,GAIjBd,EAAoBA,EAAoB0C,EAAI,I,+BCjG9C,SAASC,EAAWC,GACzBA,EAAQA,GAAS,GACjB,IAAIC,EAAgB,GACpB,IAAI,IAAI1C,EAAI,EAAGA,EAAIyC,EAAMjD,SAAUQ,EACjC0C,EAAIpC,MAAMmC,EAAMzC,GAAK,GAAK,IAAM,KAAOyC,EAAMzC,IAAM,GAAG2C,SAAS,KAEjE,OAAOD,EAAIE,KAAK,IAGX,SAASC,EAAaC,GAC3B,MAAMC,EAAMD,EAAUtD,OACtB,IAAIwD,EAAQ,EACRP,EAAkB,GAEnBM,EAAM,IACPN,EAAMnC,KAAK2C,SAASH,EAAUI,OAAO,GAAI,OACvCF,GAGJ,IAAI,IAAIhD,EAAIgD,EAAOhD,EAAI+C,EAAK/C,GAAK,EAC/ByC,EAAMnC,KAAK2C,SAASH,EAAUK,OAAOnD,EAAG,GAAI,KAG9C,OAAOyC,EAsCF,SAASW,EAASC,EAA+BC,GACtD,MAAMP,EAAMM,EAAO7D,OACnB,GAAGuD,IAAQO,EAAO9D,OAChB,OAAO,EAGT,IAAI,IAAIQ,EAAI,EAAGA,EAAI+C,IAAO/C,EACxB,GAAGqD,EAAOrD,KAAOsD,EAAOtD,GACtB,OAAO,EAIX,OAAO,EAGF,SAASuD,EAASF,EAA+BC,GACtD,MAAMP,EAAMM,EAAO7D,OACbiD,EAAkB,GAExB,IAAI,IAAIzC,EAAI,EAAGA,EAAI+C,IAAO/C,EACxByC,EAAMzC,GAAKqD,EAAOrD,GAAKsD,EAAOtD,GAGhC,OAAOyC,EAOF,SAASe,EAAqBf,GAEnC,OAAGA,aAAiBgB,YACXhB,OAEWiB,IAAjBjB,EAAMkB,QACPlB,EAAMkB,OAAOC,aAAenB,EAAMjD,OAASiD,EAAMoB,kBAC1CpB,EAAMkB,OAVR,IAAKG,WAYcrB,GAZCkB,OAetB,SAASI,EAAoBtB,GAClC,YAAoCiB,IAAhCjB,EAAqBkB,OAChBlB,EAGF,IAAIqB,WAAWrB,GAGjB,SAASuB,EAAqBL,GACnC,MAAMZ,EAAMY,EAAOC,WACbK,EAAW,IAAIH,WAAWH,GAC1BlB,EAAkB,GAExB,IAAI,IAAIzC,EAAI,EAAGA,EAAI+C,IAAO/C,EACxByC,EAAMzC,GAAKiE,EAASjE,GAGtB,OAAOyC,EAGF,SAASyB,EAAaC,EAAcC,GACzC,MAAMC,EAAKF,EAAQP,YAAcO,EAAQ3E,OACnC8E,EAAKF,EAAQR,YAAcQ,EAAQ5E,OACnC+E,EAAM,IAAIT,WAAWO,EAAKC,GAIhC,OAHAC,EAAIC,IAAIL,aAAmBV,YAAc,IAAIK,WAAWK,GAAWA,EAAS,GAC5EI,EAAIC,IAAIJ,aAAmBX,YAAc,IAAIK,WAAWM,GAAWA,EAASC,GAErEE,EAAIZ,OAGN,SAASc,KAAiBC,GAC/B,IAAIlF,EAAS,EACbkF,EAAKC,QAAQC,GAAKpF,GAAUoF,EAAEhB,YAAcgB,EAAEpF,QAE9C,MAAM+E,EAAM,IAAIT,WAAWtE,GAE3B,IAAIqF,EAAa,EAMjB,OALAH,EAAKC,QAAQC,IACXL,EAAIC,IAAII,aAAanB,YAAc,IAAIK,WAAWc,GAAKA,EAAGC,GAC1DA,GAAcD,EAAEhB,YAAcgB,EAAEpF,SAG3B+E,EAGF,SAASO,EAAgBC,GAC9B,MAAM7D,EAAc,GACpB,IAAI,IAAIlB,EAAI,EAAGR,EAAwB,EAAfuF,EAAMvF,OAAYQ,EAAIR,IAAUQ,EACtDkB,EAAEZ,KAAMyE,EAAM/E,IAAM,KAAQ,GAAMA,EAAI,EAAK,EAAM,KAGnD,OAAOkB,EAGF,SAAS8D,EAAcD,GAC5B,IAAItC,EAC6BA,EAA9BsC,aAAiBtB,YAAqB,IAAIK,WAAWiB,GAC3CA,EAEb,MAAME,EAAkB,GACxB,IAAI,IAAIjF,EAAI,EAAG+C,EAAMN,EAAMjD,OAAQQ,EAAI+C,IAAO/C,EAC5CiF,EAAMjF,IAAM,IAAMyC,EAAMzC,IAAO,GAAMA,EAAI,EAAK,EAGhD,OAAO,IAAIkF,YAAYD,GAlLzB,uX,6BCAA,w5BA6IO,IAEHE,EAFOC,EAAM,EACbC,EAAO,EAIPC,EACF,oGAKF,IAAKF,EAAM,EAAG,GAAMA,EAAM,EAAK,GAAKA,EAAKA,KAGzCD,GADAE,GAAQ,IADRD,IAAQ,IACY,GACL,EACR,IAgDHG,EAAGC,EAhDIC,EAAMC,EAAW,EAAG,EAAG,GAK9B/D,GAJc+D,EAAW,EAAG,EAAG,GAIR,IAAIC,MAAM,IACjCC,EAAKjE,EACLkE,EAAKlE,EAGLmE,EAAKnE,EACLoE,EAAKpE,EACLqE,EAAKrE,EACLsE,EAAKtE,EACLuE,EAAKvE,EAELwE,EAAKxE,EAKLyE,EAAOzE,EACP0E,EAAO1E,EACP2E,EAAO3E,EACP4E,EAAO5E,EACP6E,EAAO7E,EA0IJ,SAAS8E,EAAQC,GACtB,IAAIC,EAAGC,EAAGC,EACV,IAAKF,EAAID,EAAElH,OAAS,EAAW,GAARkH,EAAEC,IAAWA,EAAI,EAAGA,KAC3C,IAAKC,EAAI,EAAGC,EAAIH,EAAEC,GAAIE,EAAGA,IAAM,EAAGD,KAElC,OADAA,GAAKxB,EAAMuB,EAWN,SAASG,EAAOJ,EAAaxE,GAClC,IAAI6E,EAAMrB,EAAW,GAAIgB,EAAElH,OAAS0C,EAAIwE,EAAElH,OAAS0C,GAAKkD,EAAK,GAE7D,OADA4B,EAAMD,EAAKL,GACJK,EAqGF,SAASE,EAAIP,EAAaxE,GAC/B,IAAI6E,EAAMG,EAAIR,GAEd,OADAS,GAAKJ,EAAK7E,GACHkF,GAAKL,EAAK,GAyBZ,SAASM,EAAKX,EAAaY,GAChC,IAAIP,EAAMD,EAAOJ,EAAGA,EAAElH,OAAS8H,EAAE9H,QAEjC,OADA+H,GAAMR,EAAKO,GACJF,GAAKL,EAAK,GAgBZ,SAASS,EAAOd,EAAaY,EAAapF,GAC/C,IAAI6E,EAAMD,EAAOJ,EAAGxE,EAAE1C,QAOtB,OANAiI,GAEEV,EACAK,GAAKE,EAAG,GACRF,GAAKlF,EAAG,IAEHkF,GAAKL,EAAK,GAQZ,SAASW,EAAIhB,EAAavG,GAC/B,IAAI4G,EAAMG,EAAIR,GACdvG,GAAK,EACL,IAAI,IAAIH,EAAI,EAAGA,EAAIG,IAAKH,EACtB+G,EAAMM,EAAKN,EAAKL,GAElB,OAAOU,GAAKL,EAAK,GAaZ,SAASY,EAAIjB,EAAaY,GAC/B,IAAIP,EAAMD,EAAOJ,EAAGA,EAAElH,OAAS8H,EAAE9H,OAASkH,EAAElH,OAAS,EAAI8H,EAAE9H,OAAS,GAEpE,OADAoI,GAAKb,EAAKO,GACHF,GAAKL,EAAK,GAWZ,SAASc,EAAInB,EAAaY,GAC/B,IAAIP,EAAMD,EAAOJ,EAAGA,EAAElH,OAAS8H,EAAE9H,OAASkH,EAAElH,OAAS,EAAI8H,EAAE9H,OAAS,GAEpE,OADAsI,GAAKf,EAAKO,GACHF,GAAKL,EAAK,GA8ZZ,SAASgB,EAAcrB,EAAWxE,GAIvC,IAHA,IAAI8F,EAAI,EACJpD,EAAI,IAEC,CACP,GAAU,IAAN8B,EAAS,OAAOsB,EACpB,GAAU,IAANtB,EAAS,OAAO,EAKpB,GAJA9B,GAAKoD,EAAIC,KAAKC,MAAMhG,EAAIwE,GAId,KAFVxE,GAAKwE,GAEQ,OAAO9B,EACpB,GAAU,IAAN1C,EAAS,OAAO,EACpB8F,GAAKpD,EAAIqD,KAAKC,MAAMxB,EAAIxE,GAExBwE,GAAKxE,GA4BF,SAASiG,EACdzB,EACAY,EACAc,EACAJ,EACApD,GAEA,IAAIyD,EAAI,EACJ9C,EAAI0C,KAAKK,IAAI5B,EAAElH,OAAQ8H,EAAE9H,QAQ7B,IAPI4G,EAAK5G,QAAU+F,IACjBa,EAAO,IAAIT,MAAMJ,GACjBc,EAAO,IAAIV,MAAMJ,GACjBe,EAAO,IAAIX,MAAMJ,GACjBgB,EAAO,IAAIZ,MAAMJ,GACjBiB,EAAO,IAAIb,MAAMJ,MAEH,EAAPmB,EAAE,IAAoB,EAAPY,EAAE,KAExBiB,EAAO7B,GACP6B,EAAOjB,GACPe,IAQF,IANArB,EAAMZ,EAAMM,GACZM,EAAMoB,EAAGd,GACTkB,EAASnC,EAAM,GACfmC,EAASlC,EAAM,GACfkC,EAASjC,EAAM,GACfiC,EAAShC,EAAM,KACN,CACP,OAAmB,EAAVJ,EAAK,KAEZmC,EAAOnC,GACS,EAAVC,EAAK,IAAuB,EAAVC,EAAK,IAK3BwB,GAAKzB,EAAMiB,GACXiB,EAAOlC,GACPuB,GAAKtB,EAAMI,GACX6B,EAAOjC,KANPiC,EAAOlC,GACPkC,EAAOjC,IASX,OAAgB,EAAP8B,EAAE,KAETG,EAAOH,GACS,EAAV7B,EAAK,IAAuB,EAAVC,EAAK,IAK3BsB,GAAKvB,EAAMe,GACXiB,EAAOhC,GACPqB,GAAKpB,EAAME,GACX6B,EAAO/B,KANP+B,EAAOhC,GACPgC,EAAO/B,IAoBX,GAXKiC,EAAQL,EAAGhC,IAOdwB,GAAKQ,EAAGhC,GACRwB,GAAKrB,EAAMF,GACXuB,GAAKpB,EAAMF,KAPXsB,GAAKxB,EAAMgC,GACXR,GAAKvB,EAAME,GACXqB,GAAKtB,EAAME,IAOTkC,EAAUtC,EAAM,GAAI,CACtB,KAAOuC,EAASpC,IAEduB,GAAKvB,EAAMe,GACXM,GAAKpB,EAAME,GAMb,OAJAkC,GAASpC,GAAO,GAChBQ,EAAMgB,EAAGzB,GACTS,EAAMpC,EAAG4B,QACTqC,EAAWT,EAAGC,KAYb,SAASM,EAASjC,GAEvB,OAAQA,EAAEA,EAAElH,OAAS,IAAO4F,EAAM,EAAM,EAcnC,SAAS0D,EAAapC,EAAaY,EAAayB,GACrD,IAAI/I,EACAgJ,EAAKtC,EAAElH,OACPyJ,EAAK3B,EAAE9H,OAEX,IADA+F,EAAIyD,EAAKD,EAAQE,EAAKD,EAAKD,EAAQE,EAC9BjJ,EAAIiJ,EAAK,EAAIF,EAAO/I,EAAIgJ,GAAMhJ,GAAK,EAAGA,IAAK,GAAI0G,EAAE1G,GAAK,EAAG,OAAO,EACrE,IAAKA,EAAIgJ,EAAK,EAAID,EAAO/I,EAAIiJ,EAAIjJ,IAAK,GAAIsH,EAAEtH,GAAK,EAAG,OAAO,EAC3D,IAAKA,EAAIuF,EAAI,EAAGvF,GAAK+I,EAAO/I,IAC1B,IAAI0G,EAAE1G,EAAI+I,GAASzB,EAAEtH,GAAI,OAAO,EAC3B,GAAI0G,EAAE1G,EAAI+I,GAASzB,EAAEtH,GAAI,OAAO,EACvC,OAAO,EAaF,SAASyI,EAAQ/B,EAAaY,GACnC,IAAItH,EACAuF,EAAImB,EAAElH,OAAS8H,EAAE9H,OAASkH,EAAElH,OAAS8H,EAAE9H,OAE3C,IAAKQ,EAAI0G,EAAElH,OAAQQ,EAAIsH,EAAE9H,OAAQQ,IAAK,GAAIsH,EAAEtH,GAAI,OAAO,EAEvD,IAAKA,EAAIsH,EAAE9H,OAAQQ,EAAI0G,EAAElH,OAAQQ,IAAK,GAAI0G,EAAE1G,GAAI,OAAO,EAEvD,IAAKA,EAAIuF,EAAI,EAAGvF,GAAK,EAAGA,IACtB,IAAI0G,EAAE1G,GAAKsH,EAAEtH,GAAI,OAAO,EACnB,GAAI0G,EAAE1G,GAAKsH,EAAEtH,GAAI,OAAO,EAC/B,OAAO,EAuBF,SAASkJ,EACdxC,EACAY,EACA6B,EACA5H,GAEA,IAAIyH,EAAIC,EACJjJ,EAAMoJ,EAAIC,EAAIvI,EAAGkH,EAAGpD,EAExB,IADAoC,EAAMzF,EAAGmF,GACJuC,EAAK3B,EAAE9H,OAAsB,IAAd8H,EAAE2B,EAAK,GAAUA,KAIrC,IADArE,EAAI0C,EAAE2B,EAAK,GACNjB,EAAI,EAAGpD,EAAGoD,IAAKpD,IAAM,EAM1B,IAJAiE,EAAWvB,EADXU,EAAI5C,EAAM4C,GAEVa,EAAWtH,EAAGyG,GAGTgB,EAAKzH,EAAE/B,OAAsB,IAAd+B,EAAEyH,EAAK,IAAYA,EAAKC,EAAID,KAGhD,IADAR,EAASW,EAAG,IACJL,EAAaxB,EAAG/F,EAAGyH,EAAKC,IAE9BK,GAAU/H,EAAG+F,EAAG0B,EAAKC,GACrBE,EAAEH,EAAKC,KAGT,IAAKjJ,EAAIgJ,EAAK,EAAGhJ,GAAKiJ,EAAIjJ,IAAK,CAS7B,IARIuB,EAAEvB,IAAMsH,EAAE2B,EAAK,GAAIE,EAAEnJ,EAAIiJ,GAAM5D,EAC9B8D,EAAEnJ,EAAIiJ,GAAMhB,KAAKC,OAAO3G,EAAEvB,GAAKmF,EAAQ5D,EAAEvB,EAAI,IAAMsH,EAAE2B,EAAK,IAS7DnI,GADAuI,GAAMJ,EAAK,EAAI3B,EAAE2B,EAAK,GAAK,GAAKE,EAAEnJ,EAAIiJ,KAC5B7D,EACViE,GAAUhE,EAEVvE,GADAsI,EAAKtI,EAAIqI,EAAEnJ,EAAIiJ,GAAM3B,EAAE2B,EAAK,KAClB7D,EACVgE,GAAU/D,EAGRvE,GAAKS,EAAEvB,GACHoJ,GAAM7H,EAAEvB,EAAI,GAAKqJ,GAAMrJ,EAAI,EAAIuB,EAAEvB,EAAI,GAAK,GAAKoJ,EAAK7H,EAAEvB,EAAI,GAC1Dc,EAAIS,EAAEvB,IAEVmJ,EAAEnJ,EAAIiJ,KAIVM,GAAchI,EAAG+F,GAAI6B,EAAEnJ,EAAIiJ,GAAKjJ,EAAIiJ,GAChCN,EAASpH,KACXiI,GAAUjI,EAAG+F,EAAGtH,EAAIiJ,GACpBE,EAAEnJ,EAAIiJ,MAIVQ,EAAYnC,EAAGU,GACfyB,EAAYlI,EAAGyG,GAgCV,SAAS0B,EAAOhD,EAAaxE,GAClC,IAAIlC,EACAc,EAAI,EACR,IAAKd,EAAI0G,EAAElH,OAAS,EAAGQ,GAAK,EAAGA,IAAKc,GAAKA,EAAIqE,EAAQuB,EAAE1G,IAAMkC,EAC7D,OAAOpB,EAgBF,SAAS4E,EAAW/D,EAAWgI,EAAcC,GAClD,IAAOrE,EAEPA,EAAIqE,GADJrE,EAAI0C,KAAK4B,KAAKF,EAAOvE,GAAO,GACVwE,EAAUrE,EAC5B,IAAIC,EAAO,IAAIG,MAAMJ,GAErB,OADAiD,EAAShD,EAAM7D,GACR6D,EAgBF,SAASsE,EACdvH,EACAwH,EACAH,GAEA,IAAI7I,EAAGf,EAAG0G,EAAGY,EAAG0C,EACZzE,EAAIhD,EAAE/C,OACV,IAAc,IAAVuK,EAAa,CAGf,IADArD,EAAI,IAAIf,MAAM,KACL,CAEP,IADA2B,EAAI,IAAI3B,MAAMe,EAAElH,OAAS,GACpBQ,EAAI,EAAGA,EAAI0G,EAAElH,OAAQQ,IAAKsH,EAAEtH,EAAI,GAAK0G,EAAE1G,GAI5C,GAHAsH,EAAE,GAAKrE,SAASV,EAAG,IACnBmE,EAAIY,GACJvG,EAAIwB,EAAE0H,QAAQ,IAAK,IACX,EAAG,MAGX,GAAgB,IADhB1H,EAAIA,EAAE2H,UAAUnJ,EAAI,IACdvB,OAAa,MAGrB,OAAIkH,EAAElH,OAASoK,GAGb5C,EADAM,EAAI,IAAI3B,MAAMiE,GACLlD,GACFY,GAEFZ,EAIT,IADAA,EAAIhB,EAAW,EAAGqE,EAAOxE,EAAG,GACvBvF,EAAI,EAAGA,EAAIuF,IACdxE,EAAIuE,EAAU2E,QAAQ1H,EAAE2H,UAAUlK,EAAGA,EAAI,GAAI,GACzC+J,GAAQ,IAAMhJ,GAAK,KAErBA,GAAK,MACHA,GAAKgJ,GAAQhJ,EAAI,IALJf,IASjB4I,GAASlC,EAAGqD,GACZI,EAAQzD,EAAG3F,GAGb,IAAKwE,EAAImB,EAAElH,OAAQ+F,EAAI,IAAMmB,EAAEnB,EAAI,GAAIA,KAQvC,IANAA,EAAIqE,EAAUrE,EAAI,EAAIqE,EAAUrE,EAAI,EAEpC+B,EAAI,IAAI3B,MAAMJ,GAEdyE,EAAKzE,EAAImB,EAAElH,OAAS+F,EAAImB,EAAElH,OAErBQ,EAAI,EAAGA,EAAIgK,EAAIhK,IAAKsH,EAAEtH,GAAK0G,EAAE1G,GAElC,KAAOA,EAAIuF,EAAGvF,IAAKsH,EAAEtH,GAAK,EAC1B,OAAOsH,EA0EF,SAASoB,EAAUhC,EAAaY,GACrC,IAAItH,EACJ,GAAI0G,EAAE,IAAMY,EAAG,OAAO,EACtB,IAAKtH,EAAI,EAAGA,EAAI0G,EAAElH,OAAQQ,IAAK,GAAI0G,EAAE1G,GAAI,OAAO,EAChD,OAAO,EAYF,SAASoK,EAAO1D,EAAaY,GAClC,IAAItH,EACAuF,EAAImB,EAAElH,OAAS8H,EAAE9H,OAASkH,EAAElH,OAAS8H,EAAE9H,OAC3C,IAAKQ,EAAI,EAAGA,EAAIuF,EAAGvF,IAAK,GAAI0G,EAAE1G,KAAOsH,EAAEtH,GAAI,OAAO,EAClD,GAAI0G,EAAElH,OAAS8H,EAAE9H,QACf,KAAOQ,EAAI0G,EAAElH,OAAQQ,IAAK,GAAI0G,EAAE1G,GAAI,OAAO,OAE3C,KAAOA,EAAIsH,EAAE9H,OAAQQ,IAAK,GAAIsH,EAAEtH,GAAI,OAAO,EAE7C,OAAO,EAUF,SAASqK,EAAO3D,GACrB,IAAI1G,EACJ,IAAKA,EAAI,EAAGA,EAAI0G,EAAElH,OAAQQ,IAAK,GAAI0G,EAAE1G,GAAI,OAAO,EAChD,OAAO,EAaF,SAASsK,EAAW5D,EAAaqD,GACtC,IAAI/J,EACA2B,EACAY,EAAI,GAKR,GAHI0D,EAAGzG,SAAWkH,EAAElH,OAAQyG,EAAKiB,EAAIR,GAChCM,EAAMf,EAAIS,IAED,IAAVqD,EAAa,CAEf,IAAK/J,EAAI0G,EAAElH,OAAS,EAAGQ,EAAI,EAAGA,IAAKuC,GAAKmE,EAAE1G,GAAK,IAC/CuC,GAAKmE,EAAE,QAGP,MAAQ2D,EAAOpE,IACbtE,EAAI4I,GAAQtE,EAAI8D,GAChBxH,EAAI+C,EAAU4E,UAAUvI,EAAGA,EAAI,GAAKY,EAIxC,OADiB,IAAbA,EAAE/C,SAAc+C,EAAI,KACjBA,EAQF,SAASiI,EAAa9D,EAAa+D,GAAe,GACpDxE,EAAGzG,SAAWkH,EAAElH,OAAQyG,EAAKiB,EAAIR,GAC/BM,EAAMf,EAAIS,GAEf,MAAMgE,EAAgB,GAGtB,MAAOL,EAAOpE,IACZtE,EAAI4I,GAAQtE,EAAI,KAChByE,EAAIpK,KAAKqB,GAUX,OANG8I,GACDC,EAAIC,UAKCD,EAQF,SAASE,EAAIlE,EAAaY,GAC/B,OAAOmB,EAAQ/B,EAAGY,GAAK,EAAK8C,EAAO1D,EAAGY,GAAK,GAAK,EAsB3C,SAASJ,EAAIR,GAIlB,OADAM,EADAxB,EAAOG,MAAMe,EAAElH,QACHkH,GACLlB,EAaF,SAASwB,EAAMN,EAAaY,GACjC,IAAItH,EACAuF,EAAImB,EAAElH,OAAS8H,EAAE9H,OAASkH,EAAElH,OAAS8H,EAAE9H,OAC3C,IAAKQ,EAAI,EAAGA,EAAIuF,EAAGvF,IAAK0G,EAAE1G,GAAKsH,EAAEtH,GACjC,IAAKA,EAAIuF,EAAGvF,EAAI0G,EAAElH,OAAQQ,IAAK0G,EAAE1G,GAAK,EAWjC,SAASwI,EAAS9B,EAAaxE,GACpC,IAAIlC,EAAGc,EACHiC,EAAM2D,EAAElH,OACZ,IAAKsB,EAAIoB,EAAGlC,EAAI,EAAGA,EAAI+C,EAAK/C,IAC1B0G,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAcH,SAAS+E,EAAQzD,EAAaxE,GACnC,IAAIlC,EAAGuF,EAAGzE,EAAG8D,EAIb,IAHA8B,EAAE,IAAMxE,EACRqD,EAAImB,EAAElH,OACNsB,EAAI,EACCd,EAAI,EAAGA,EAAIuF,EAAGvF,IASjB,GAPA4E,EAAI,GADJ9D,GAAK4F,EAAE1G,IAEC,IAENc,IADA8D,IAAM9D,GAAKsE,IACFD,GAEXuB,EAAE1G,GAAKc,EAAIuE,IACXvE,GAAKA,GAAKsE,GAAOR,GACT,OAaL,SAAS6E,EAAY/C,EAAaxE,GACvC,IAAIlC,EACAuF,EAAI0C,KAAKC,MAAMhG,EAAIkD,GACvB,GAAIG,EAAG,CACL,IACEvF,EAAI,EACJA,EAAI0G,EAAElH,OAAS+F,EACfvF,IAEA0G,EAAE1G,GAAK0G,EAAE1G,EAAIuF,GACf,KAAOvF,EAAI0G,EAAElH,OAAQQ,IAAK0G,EAAE1G,GAAK,EAEjCkC,GAAKkD,EAEP,IAAKpF,EAAI,EAAGA,EAAI0G,EAAElH,OAAS,EAAGQ,IAC5B0G,EAAE1G,GAAKqF,GAASqB,EAAE1G,EAAI,IAAOoF,EAAMlD,EAAOwE,EAAE1G,IAAMkC,GAEpDwE,EAAE1G,KAAOkC,EASJ,SAASqG,EAAO7B,GACrB,IAAI1G,EACJ,IAAKA,EAAI,EAAGA,EAAI0G,EAAElH,OAAS,EAAGQ,IAC5B0G,EAAE1G,GAAKqF,GAASqB,EAAE1G,EAAI,IAAOoF,EAAM,EAAOsB,EAAE1G,IAAM,GAEpD0G,EAAE1G,GAAM0G,EAAE1G,IAAM,EAAM0G,EAAE1G,GAAMmF,GAAS,EAWlC,SAAS0D,EAAWnC,EAAaxE,GACtC,IAAIlC,EACAuF,EAAI0C,KAAKC,MAAMhG,EAAIkD,GACvB,GAAIG,EAAG,CACL,IACEvF,EAAI0G,EAAElH,OACNQ,GAAKuF,EACLvF,IAEA0G,EAAE1G,GAAK0G,EAAE1G,EAAIuF,GACf,KAAOvF,GAAK,EAAGA,IAAK0G,EAAE1G,GAAK,EAE3BkC,GAAKkD,EAEP,GAAKlD,EAAL,CACA,IAAKlC,EAAI0G,EAAElH,OAAS,EAAGQ,EAAI,EAAGA,IAC5B0G,EAAE1G,GAAKqF,GAASqB,EAAE1G,IAAMkC,EAAMwE,EAAE1G,EAAI,IAAOoF,EAAMlD,GAEnDwE,EAAE1G,GAAKqF,EAAQqB,EAAE1G,IAAMkC,GAYlB,SAAS0G,GAASlC,EAAaxE,GACpC,IAAIlC,EAAGuF,EAAGzE,EAAG8D,EACb,GAAK1C,EAGL,IAFAqD,EAAImB,EAAElH,OACNsB,EAAI,EACCd,EAAI,EAAGA,EAAIuF,EAAGvF,IAEjB4E,EAAI,GADJ9D,GAAK4F,EAAE1G,GAAKkC,GAEJ,IAENpB,IADA8D,IAAM9D,GAAKsE,IACFD,GAEXuB,EAAE1G,GAAKc,EAAIuE,EACXvE,GAAKA,GAAKsE,GAAOR,EAWd,SAAS2F,GAAQ7D,EAAaxE,GACnC,IAAIlC,EAEAuC,EADAhB,EAAI,EAER,IAAKvB,EAAI0G,EAAElH,OAAS,EAAGQ,GAAK,EAAGA,IAC7BuC,EAAIhB,EAAI4D,EAAQuB,EAAE1G,GAClB0G,EAAE1G,GAAKiI,KAAKC,MAAM3F,EAAIL,GACtBX,EAAIgB,EAAIL,EAEV,OAAOX,EAyCF,SAASgI,GACd7C,EACAY,EACA1C,EACAiG,GAEA,IAAI7K,EAAGc,EAAGyE,EAAGyE,EAGb,IAFAzE,EAAImB,EAAElH,OAASqL,EAAKvD,EAAE9H,OAASkH,EAAElH,OAASqL,EAAKvD,EAAE9H,OACjDwK,EAAKtD,EAAElH,OACFsB,EAAI,EAAGd,EAAI6K,EAAI7K,EAAIuF,EAAGvF,IACzBc,GAAK4F,EAAE1G,GAAK4E,EAAI0C,EAAEtH,EAAI6K,GACtBnE,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAER,IAAKpF,EAAIuF,EAAGzE,GAAKd,EAAIgK,EAAIhK,IACvBc,GAAK4F,EAAE1G,GACP0G,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAeH,SAASoE,GAAU9C,EAAaY,EAAauD,GAClD,IAAI7K,EAAGc,EAAGyE,EAAGyE,EAGb,IAFAzE,EAAImB,EAAElH,OAASqL,EAAKvD,EAAE9H,OAASkH,EAAElH,OAASqL,EAAKvD,EAAE9H,OACjDwK,EAAKtD,EAAElH,OACFsB,EAAI,EAAGd,EAAI6K,EAAI7K,EAAIuF,EAAGvF,IACzBc,GAAK4F,EAAE1G,GAAKsH,EAAEtH,EAAI6K,GAClBnE,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAER,IAAKpF,EAAIuF,EAAGzE,GAAKd,EAAIgK,EAAIhK,IACvBc,GAAK4F,EAAE1G,GACP0G,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAcH,SAASkE,GAAU5C,EAAaY,EAAauD,GAClD,IAAI7K,EAAGc,EAAGyE,EAAGyE,EAGb,IAFAzE,EAAImB,EAAElH,OAASqL,EAAKvD,EAAE9H,OAASkH,EAAElH,OAASqL,EAAKvD,EAAE9H,OACjDwK,EAAKtD,EAAElH,OACFsB,EAAI,EAAGd,EAAI6K,EAAI7K,EAAIuF,EAAGvF,IACzBc,GAAK4F,EAAE1G,GAAKsH,EAAEtH,EAAI6K,GAClBnE,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAER,IAAKpF,EAAIuF,EAAGzE,GAAKd,EAAIgK,EAAIhK,IACvBc,GAAK4F,EAAE1G,GACP0G,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAgBH,SAASwC,GAAKlB,EAAaY,GAChC,IAAItH,EAAGc,EAAGyE,EAEV,IADAA,EAAImB,EAAElH,OAAS8H,EAAE9H,OAASkH,EAAElH,OAAS8H,EAAE9H,OAClCsB,EAAI,EAAGd,EAAI,EAAGA,EAAIuF,EAAGvF,IACxBc,GAAK4F,EAAE1G,GAAKsH,EAAEtH,GACd0G,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAER,IAAKpF,EAAIuF,EAAGzE,GAAKd,EAAI0G,EAAElH,OAAQQ,IAC7Bc,GAAK4F,EAAE1G,GACP0G,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAcH,SAAS0C,GAAKpB,EAAaY,GAChC,IAAItH,EAAGc,EAAGyE,EAEV,IADAA,EAAImB,EAAElH,OAAS8H,EAAE9H,OAASkH,EAAElH,OAAS8H,EAAE9H,OAClCsB,EAAI,EAAGd,EAAI,EAAGA,EAAIuF,EAAGvF,IACxBc,GAAK4F,EAAE1G,GAAKsH,EAAEtH,GACd0G,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAER,IAAKpF,EAAIuF,EAAGzE,GAAKd,EAAI0G,EAAElH,OAAQQ,IAC7Bc,GAAK4F,EAAE1G,GACP0G,EAAE1G,GAAKc,EAAIuE,EACXvE,IAAMsE,EAcH,SAASmC,GAAMb,EAAaY,GACjC,IAAItH,EAGJ,IAFI4F,EAAGpG,QAAU,EAAIkH,EAAElH,SAAQoG,EAAK,IAAID,MAAM,EAAIe,EAAElH,SACpDgJ,EAAS5C,EAAI,GACR5F,EAAI,EAAGA,EAAIsH,EAAE9H,OAAQQ,IAASsH,EAAEtH,IAAIuJ,GAAc3D,EAAIc,EAAGY,EAAEtH,GAAIA,GACpEgH,EAAMN,EAAGd,GAWJ,SAASuB,GAAKT,EAAaxE,GAC5B6D,EAAGvG,SAAWkH,EAAElH,OAAQuG,EAAKmB,EAAIR,GAChCM,EAAMjB,EAAIW,GACXV,EAAGxG,SAAWkH,EAAElH,SAAQwG,EAAKkB,EAAIR,IACrCwC,EAAQnD,EAAI7D,EAAG8D,EAAIU,GAad,SAASoE,GAASpE,EAAaY,EAAapF,GACjD,IAAIlC,EAGJ,IAFI6F,EAAGrG,QAAU,EAAIkH,EAAElH,SAAQqG,EAAK,IAAIF,MAAM,EAAIe,EAAElH,SACpDgJ,EAAS3C,EAAI,GACR7F,EAAI,EAAGA,EAAIsH,EAAE9H,OAAQQ,IAASsH,EAAEtH,IAAIuJ,GAAc1D,EAAIa,EAAGY,EAAEtH,GAAIA,GACpEmH,GAAKtB,EAAI3D,GACT8E,EAAMN,EAAGb,GAWJ,SAASkF,GAAWrE,EAAaxE,GACtC,IAAIlC,EAAG2G,EAAM7F,EAAGkI,EAAQzD,EACxB,IAAKyD,EAAKtC,EAAElH,OAAQwJ,EAAK,IAAMtC,EAAEsC,EAAK,GAAIA,KAI1C,IAHAzD,EAAIyD,EAAK9G,EAAE1C,OAAS,EAAIwJ,EAAK,EAAI9G,EAAE1C,OAC/BqG,EAAGrG,QAAU+F,IAAGM,EAAK,IAAIF,MAAMJ,IACnCiD,EAAS3C,EAAI,GACR7F,EAAI,EAAGA,EAAIgJ,EAAIhJ,IAAK,CAIvB,IAHAc,EAAI+E,EAAG,EAAI7F,GAAK0G,EAAE1G,GAAK0G,EAAE1G,GACzB6F,EAAG,EAAI7F,GAAKc,EAAIuE,EAChBvE,IAAMsE,EACDuB,EAAI3G,EAAI,EAAG2G,EAAIqC,EAAIrC,IACtB7F,EAAI+E,EAAG7F,EAAI2G,GAAK,EAAID,EAAE1G,GAAK0G,EAAEC,GAAK7F,EAClC+E,EAAG7F,EAAI2G,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EAERS,EAAG7F,EAAIgJ,GAAMlI,EAEfqG,GAAKtB,EAAI3D,GACT8E,EAAMN,EAAGb,GAWJ,SAASuB,GAAKV,EAAanB,GAChC,IAAIvF,EAAGsH,EACP,IAAKtH,EAAI0G,EAAElH,OAAQQ,EAAI,IAAM0G,EAAE1G,EAAI,GAAIA,KAGvC,OADAgH,EADAM,EAAI,IAAI3B,MAAM3F,EAAIuF,GACTmB,GACFY,EAeF,SAASG,GAAQf,EAAaY,EAAapF,GAChD,IAAI8I,EAAIC,EAAIC,EAAIC,EAKhB,GAJIjF,EAAG1G,QAAU0C,EAAE1C,SAAQ0G,EAAKgB,EAAIhF,IAIlB,IAAN,EAAPA,EAAE,IAAP,CAaA,IADAsG,EAAStC,EAAI,GACRgF,EAAKhJ,EAAE1C,OAAQ0L,EAAK,IAAMhJ,EAAEgJ,EAAK,GAAIA,KAS1C,IARAC,EAAKhG,EAAQ4C,EAAc2B,EAAOxH,EAAGiD,GAAQA,GAC7Ce,EAAGgF,GAAM,EACTJ,GAASpE,EAAGR,EAAIhE,GAEZ4D,EAAGtG,QAAUkH,EAAElH,OAAQsG,EAAKoB,EAAIR,GAC/BM,EAAMlB,EAAIY,GAGVsE,EAAK1D,EAAE9H,OAAS,EAAIwL,EAAK,GAAM1D,EAAE0D,GAAKA,KAC3C,GAAa,GAAT1D,EAAE0D,GAAN,CAKA,IAAKC,EAAK,GAAM7F,EAAM,EAAI6F,KAAQ3D,EAAE0D,GAAMC,GAAKA,IAAO,GACtD,OAAS,CACP,KAAMA,IAAO,GAAI,CAGf,KADAD,EACS,EAEP,YADAI,GAAM1E,EAAGjB,EAAKvD,EAAGiJ,GAGnBF,EAAK,GAAM7F,EAAM,EAEnBgG,GAAM1E,EAAGA,EAAGxE,EAAGiJ,GAEXF,EAAK3D,EAAE0D,IAETI,GAAM1E,EAAGZ,EAAI5D,EAAGiJ,SAlBlB3C,EAAS9B,EAAG,QAtBZ,IAFAM,EAAMd,EAAIQ,GACV8B,EAAS9B,EAAG,IACJgC,EAAUpB,EAAG,IACR,EAAPA,EAAE,IAAQwD,GAASpE,EAAGR,EAAIhE,GAC9BqI,GAAQjD,EAAG,GACXyD,GAAW7E,EAAIhE,GA8Dd,SAASkJ,GAAM1E,EAAaY,EAAapF,EAAaiJ,GAC3D,IAAInL,EAAG2G,EAAG7F,EAAGuK,EAAI1J,EAAG2J,EAChBJ,EAAKhJ,EAAE1C,OACPyJ,EAAK3B,EAAE9H,OAMX,IAJI2G,EAAG3G,QAAU0L,IAAI/E,EAAK,IAAIR,MAAMuF,IAEpC1C,EAASrC,EAAI,GAEN+E,EAAK,GAAkB,GAAbhJ,EAAEgJ,EAAK,GAASA,KACjC,KAAOjC,EAAK,GAAkB,GAAb3B,EAAE2B,EAAK,GAASA,KAIjC,IAHAqC,EAAKnF,EAAG3G,OAAS,EAGZQ,EAAI,EAAGA,EAAIkL,EAAIlL,IAAK,CAQvB,IALAc,GAFAa,EAAIwE,EAAG,GAAKO,EAAE1G,GAAKsH,EAAE,KACrB+D,GAAO1J,EAAI0D,GAAQ8F,EAAM9F,GACXnD,EAAE,IAAOkD,EACvBzD,EAAI+E,EAAE1G,GAGN2G,EAAI,EACGA,EAAIsC,EAAK,GACdnI,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GAAKhF,EAAI2F,EAAEX,GAC/BR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IACA7F,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GAAKhF,EAAI2F,EAAEX,GAC/BR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IACA7F,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GAAKhF,EAAI2F,EAAEX,GAC/BR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IACA7F,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GAAKhF,EAAI2F,EAAEX,GAC/BR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IACA7F,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GAAKhF,EAAI2F,EAAEX,GAC/BR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IAEF,KAAOA,EAAIsC,GACTnI,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GAAKhF,EAAI2F,EAAEX,GAC/BR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IAEF,KAAOA,EAAIuE,EAAK,GACdpK,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GACpBR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IACA7F,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GACpBR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IACA7F,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GACpBR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IACA7F,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GACpBR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IACA7F,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GACpBR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IAEF,KAAOA,EAAIuE,GACTpK,GAAKqF,EAAGQ,GAAK0E,EAAKnJ,EAAEyE,GACpBR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IAEF,KAAOA,EAAI2E,GACTxK,GAAKqF,EAAGQ,GACRR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAChBvE,IAAMsE,EACNuB,IAEFR,EAAGQ,EAAI,GAAK7F,EAAIuE,EAGboD,EAAQvG,EAAGiE,IAAKyB,GAAKzB,EAAIjE,GAC9B8E,EAAMN,EAAGP,K,6BC9nEX,kCAQO,MAAMoF,EARb,KAQ8D,EAAMC,MAEvDC,EADuB,oBAAb,OAA2BC,OAASC,KAE5C,O,+CC8Hf,MAAMC,EAAe,IArHrB,cChBe,MAGN,SAASnJ,GACd,OAAOtD,KAAK0M,kBAA8B,YAAapJ,GAGlD,WAAWA,GAChB,OAAOtD,KAAK0M,kBAA4B,cAAepJ,GAGlD,OAAOkB,EAAoBmI,EAAkBC,GAClD,OAAO5M,KAAK0M,kBAA+B,SAAUlI,EAAQmI,EAAMC,GAG9D,WAAWtJ,EAAYuJ,EAAeC,GAC3C,OAAO9M,KAAK0M,kBAAqD,cAAe,YAAqBpJ,GACnG,YAAqBuJ,GAAW,YAAqBC,IAGlD,WAAWC,EAAqBF,EAAeC,GACpD,OAAO9M,KAAK0M,kBAA+B,cACzCK,EAAgBF,EAAUC,GACzBxL,KAAKgC,GAAS,YAAqBA,IAGjC,WAAW0J,EAAgD1J,GAChE,OAAOtD,KAAK0M,kBAA4B,cAAeM,EAAW1J,GAG7D,UAAUA,GACf,OAAOtD,KAAK0M,kBAAgD,YAAa,IAAIpJ,IAGxE,OAAOiE,EAAQY,EAAQzG,GAC5B,OAAO1B,KAAK0M,kBAA4B,UAAWnF,EAAGY,EAAGzG,GAGpD,eAAkB4B,EAAoBE,GAC3C,OAAOxD,KAAK0M,kBAAqB,iBAAkBpJ,EAAOE,GAGrD,WAAWyJ,EAAkBC,EAAYC,GAAQ,GACtD,OAAOnN,KAAK0M,kBAAkB,aAAcO,EAAUC,EAAOC,KDZ/D,cACEC,QAfM,KAAAC,WAA8B,EAC9B,KAAAC,OAAS,EACT,KAAAC,SAMJ,GACI,KAAAC,QAAuB,GACvB,KAAAnB,OAAQ,EAER,KAAAoB,MAAmD,GAIzDC,QAAQC,IAAI,kBAGZvM,QAAQK,IAAI,CACV,uCAAyBH,KAAKmM,IAC5BzL,OAAO4L,OAAO5N,KAAKyN,MAAO,CACxB,YAAaA,EAAMI,aACnB,cAAeJ,EAAMK,eACrB,OAAUL,EAAMM,YAChB,cAAeN,EAAMO,eACrB,cAAeP,EAAMQ,eACrB,cAAeR,EAAMS,WACrB,UAAaT,EAAMU,qBACnB,UAAWV,EAAMW,YACjB,eAAkBX,EAAMY,mBAI5B,6BAAgB/M,KAAKgN,IACnBtO,KAAKyN,MAAMc,WAAaD,EAAIC,eA4C3B,kBAAqBC,KAAiBjJ,GAI3C,OAHAvF,KAAKqM,OAASqB,QAAQC,IAAI,WAAYa,EAAMjJ,GAGrCnE,QAAQC,QAAWrB,KAAKyN,MAAMe,MAASjJ,MAkClD,IAAekJ,aAAehC,EACf,O,6BE3If,wEAQYiC,EARZ,QAQA,SAAYA,GACV,iBACA,mBACA,qBACA,qBAJF,CAAYA,MAAS,KAOrB,MAAMC,EAAYC,KAAKC,MACvB,SAASC,IACP,MAAO,MAAQF,KAAKC,MAAQF,GAAa,KAAMI,QAAQ,GAAK,IAGvD,SAASC,EAAOC,EAAgBC,EAAQR,EAAUf,IAAMe,EAAUS,KAAOT,EAAUU,OAOxF,SAASC,KAAO9J,GACd,OAAO2J,EAAQR,EAAUf,KAAOD,QAAQC,IAAImB,IAAMG,KAAW1J,GAiC/D,OAxCI,MACF2J,EAAQR,EAAUU,OASpBC,EAAIF,KAAO,YAAY5J,GACrB,OAAO2J,EAAQR,EAAUS,MAAQzB,QAAQyB,KAAKL,IAAMG,KAAW1J,IAGjE8J,EAAIC,KAAO,YAAY/J,GACrB,OAAO2J,EAAQR,EAAUf,KAAOD,QAAQ4B,KAAKR,IAAMG,KAAW1J,IAGhE8J,EAAID,MAAQ,YAAY7J,GACtB,OAAO2J,EAAQR,EAAUU,OAAS1B,QAAQ0B,MAAMN,IAAMG,KAAW1J,IAGnE8J,EAAIE,MAAQ,YAAYhK,GACtB,OAAO2J,EAAQR,EAAUf,KAAOD,QAAQ6B,MAAMT,IAAMG,KAAW1J,IAOjE8J,EAAIhD,MAAQ,YAAY9G,GACtB,OAAO2J,EAAQR,EAAUrC,OAASqB,QAAQrB,MAAMyC,IAAMG,KAAW1J,IAGnE8J,EAAIG,UAAY,SAASC,GACvBR,EAAS,IAAMQ,EAAU,MAG3BJ,EAAIG,UAAUP,GAEPI,I,6BClDT,MAAMK,EAAQ,CACZC,KAAMC,SAASC,OAAO/E,QAAQ,UAAY,EAC1CuB,MAAOuD,SAASC,OAAO/E,QAAQ,WAAa,EAC5CgF,MAAM,EACNC,KAAK,EACLC,qBAAqB,EACrBC,iBAAiB,GAOJ,O,6BClBR,SAASC,EAAcC,GAC5B,OAAOrH,KAAKC,MAAMD,KAAKsH,SAAWD,GAPpC,mC,6BCAA,iKA6BO,SAASE,EAASrN,GACvB,MAA0B,iBAAb,GAAoC,OAAXA,EAiEjC,SAASsN,EAAaC,EAAcC,GAMzC,MAAMC,EAAS,YAAWF,EAAK/M,SAAS,IAAK,GAAI,IAEjD,YAAWiN,EAAQ,IAEnB,YAAKA,EAAQ,YAAWD,EAAIhN,SAAS,IAAK,GAAI,KAO9C,OANa,YAAWiN,EAAQ,IAS3B,SAASC,EAAenN,GAC7B,OAAOA,EAAIoN,IAAIC,GACN,YAAWA,EAAM,KACvBC,KAAK,CAAChI,EAAGpD,IACH,YAAIoD,EAAGpD,IACbkL,IAAIF,GACE,YAAWA,EAAQ,KAIvB,SAASK,EAAWxN,EAAYyN,EAAoB,GAAIC,EAAkBC,GAAO,EAAOC,GAAU,GACvG,IACIC,EAAcJ,GADRzN,EAAMmB,YAAcnB,EAAMjD,QACC0Q,EACrC,GAAGI,EAAc,IAAMA,EAAcJ,GAAaE,GAAO,CAEvD,IAAIG,EAAU,IAAI5K,MAAM2K,GACxB,GAAGH,EACD,IAAI,IAAInQ,EAAI,EAAGA,EAAIsQ,EAAatQ,IAC9BuQ,EAAQvQ,GAAK,OAGf,IAAI,IAAIA,EAAI,EAAGA,EAAIuQ,EAAQ/Q,SAAUQ,EACnCuQ,EAAQvQ,GAAK,YAAc,KAK7ByC,EADCA,aAAiBgB,aACT4M,EAAU,YAAcE,EAAS9N,GAAS,YAAcA,EAAO8N,IAAU5M,OAC1ElB,aAAiBqB,WACjBuM,EAAU,YAAcE,EAAS9N,GAAS,YAAcA,EAAO8N,GAE/DF,EAAUE,EAAQC,OAAO/N,GAASA,EAAM+N,OAAOD,GAI3D,OAAO9N,I,6BCtJT,sCAAIgO,EAAI,IAAI3M,WAAW,KACnB4M,EAAK,IAAI5M,WAAW,KACpB6M,EAAK,IAAIzL,YAAY,KACrB0L,EAAK,IAAI1L,YAAY,KACrB2L,EAAK,IAAI3L,YAAY,KACrB4L,EAAK,IAAI5L,YAAY,KACrB6L,EAAK,IAAI7L,YAAY,KACrB8L,EAAK,IAAI9L,YAAY,KACrB+L,EAAK,IAAI/L,YAAY,KACrBgM,EAAK,IAAIhM,YAAY,KAqDzB,SAASiM,EAASnP,GACd,GAAIA,aAAekD,YACf,OAAOlD,EAEX,GAAmB,iBAARA,EAAkB,CACzB,GAAIA,EAAIxC,OAAS,GAAM,EACnB,IAAK,IAAIQ,EAAIgC,EAAIxC,OAAS,EAAGQ,GAAK,EAAGA,IACjCgC,GAAO,QACf,IAAIoP,EAAM,IAAIlM,YAAYlD,EAAIxC,OAAS,GACvC,IAASQ,EAAI,EAAGA,EAAIgC,EAAIxC,OAAQQ,GAAK,EACjCoR,EAAIpR,EAAI,IArBFqR,EAqBgBrR,GArBrBsR,EAqBgBtP,GApBbuP,WAAWF,IAAQ,GACzBC,EAAIC,WAAWF,EAAM,IAAM,GAC3BC,EAAIC,WAAWF,EAAM,IAAM,EAC3BC,EAAIC,WAAWF,EAAM,IAkBvB,OAAOD,EAtBf,IAAaE,EAAKD,EAwBd,GAAIrP,aAAe8B,WAAY,CAE3B,IADIsN,EAAM,IAAIlM,YAAYlD,EAAIxC,OAAS,GAC9BQ,EAAI,EAAGA,EAAIgC,EAAIxC,OAAQQ,GAAK,EACjCoR,EAAIpR,EAAI,GAAMgC,EAAIhC,IAAM,GAClBgC,EAAIhC,EAAI,IAAM,GACdgC,EAAIhC,EAAI,IAAM,EACdgC,EAAIhC,EAAI,GAElB,OAAOoR,EAEX,MAAM,IAAII,MAAM,iCAEpB,SAASC,EAAIC,EAAMC,EAAOC,QACX,IAAPA,IAAiBA,EAAKF,GAC1B,IAAK,IAAI1R,EAAI,EAAGA,EAAI0R,EAAKlS,OAAQQ,IAC7B4R,EAAG5R,GAAK0R,EAAK1R,GAAK2R,EAAM3R,IAhFhC,WAYI,IAXA,IAEI6R,EACAC,EAEAvP,EACAwP,EACAC,EAPAjR,EAAI,IAAI+C,WAAW,KACnBnC,EAAI,IAAImC,WAAW,KAOnB4C,EAAI,EACJuL,EAAO,EAEFjS,EAAI,EAAGA,EAAI,IAAKA,IACrBe,EAAEf,GAAKA,GAAK,EAAe,KAAVA,GAAK,GACtB2B,EAAEZ,EAAEf,GAAKA,GAAKA,EAElB,MAAQyQ,EAAE/J,GAAIA,GAAKmL,GAAM,EAGrBtP,GADAA,EAAI0P,EAAOA,GAAQ,EAAIA,GAAQ,EAAIA,GAAQ,EAAIA,GAAQ,IAC9C,EAAQ,IAAJ1P,EAAU,GACvBkO,EAAE/J,GAAKnE,EACPmO,EAAGnO,GAAKmE,EAGRsL,EAAY,SADPjR,EAAE+Q,EAAK/Q,EAAE8Q,EAAK9Q,EAAE2F,KACQ,MAALoL,EAAoB,IAALD,EAAiB,SAAJnL,EACpDqL,EAAc,IAAPhR,EAAEwB,GAAiB,SAAJA,EACtBoO,EAAGjK,GAAKqL,EAAOA,GAAQ,GAAKA,IAAS,EACrCnB,EAAGlK,GAAKqL,EAAOA,GAAQ,GAAKA,IAAS,EACrClB,EAAGnK,GAAKqL,EAAOA,GAAQ,GAAKA,IAAS,EACrCjB,EAAGpK,GAAKqL,EAAOA,GAAQ,GAAKA,IAAS,EACrChB,EAAGxO,GAAKyP,EAAOA,GAAQ,GAAKA,IAAS,EACrChB,EAAGzO,GAAKyP,EAAOA,GAAQ,GAAKA,IAAS,EACrCf,EAAG1O,GAAKyP,EAAOA,GAAQ,GAAKA,IAAS,EACrCd,EAAG3O,GAAKyP,EAAOA,GAAQ,GAAKA,IAAS,EACrCC,EAAOtQ,EAAEsQ,IAAS,EAiD1BC,GAIA,IAAIC,EAAqB,WACrB,SAASA,EAAIC,GACT,IAAIpQ,EAAMmP,EAASiB,GACnB,GAAmB,IAAfpQ,EAAIxC,QAA+B,IAAfwC,EAAIxC,QAA+B,IAAfwC,EAAIxC,OAC5C,MAAM,IAAIgS,MAAM,oBAEpBrS,KAAKkT,OAAS,IAAInN,YAAY,EAAIlD,EAAIxC,OAAS,IAC/CL,KAAKmT,OAAS,IAAIpN,YAAY,EAAIlD,EAAIxC,OAAS,IAC/CL,KAAKkT,OAAO7N,IAAIxC,GAKhB,IAJA,IAEIuC,EAFAgO,EAAO,EACPvS,EAAIgC,EAAIxC,OAGLQ,EAAI,EAAIgC,EAAIxC,OAAS,GAAIQ,IAC5BuE,EAAMpF,KAAKkT,OAAOrS,EAAI,IAElBA,EAAIgC,EAAIxC,QAAW,GAAqB,IAAfwC,EAAIxC,QAAgBQ,EAAIgC,EAAIxC,QAAW,KAChE+E,EAAMkM,EAAElM,IAAQ,KAAO,GAAKkM,EAAGlM,GAAO,GAAM,MAAQ,GAAKkM,EAAGlM,GAAO,EAAK,MAAQ,EAAIkM,EAAQ,IAANlM,GAElFvE,EAAIgC,EAAIxC,QAAW,IACnB+E,EAAMA,GAAO,EAAIA,IAAQ,GAAMgO,GAAQ,GACvCA,EAAOA,GAAQ,EAAkB,KAAbA,GAAQ,KAGpCpT,KAAKkT,OAAOrS,GAAKb,KAAKkT,OAAOrS,EAAIgC,EAAIxC,QAAU+E,EAGnD,IAAK,IAAIoC,EAAI,EAAG3G,EAAG2G,IAAK3G,IACpBuE,EAAMpF,KAAKkT,OAAW,EAAJ1L,EAAQ3G,EAAIA,EAAI,GAE9Bb,KAAKmT,OAAO3L,GADZ3G,GAAK,GAAK2G,EAAI,EACGpC,EAGCwM,EAAGN,EAAElM,IAAQ,KACzByM,EAAGP,EAAGlM,GAAO,GAAM,MACnB0M,EAAGR,EAAGlM,GAAO,EAAK,MAClB2M,EAAGT,EAAQ,IAANlM,IAiFvB,OA7EA4N,EAAI9P,UAAUmQ,QAAU,SAAUC,GAa9B,IAZA,IAQIC,EACAC,EACAC,EAVAC,EAAU1B,EAASsB,GACnB/H,EAAM,IAAIxF,YAAY,GACtB8C,EAAI6K,EAAQ,GAAK1T,KAAKkT,OAAO,GAC7BzN,EAAIiO,EAAQ,GAAK1T,KAAKkT,OAAO,GAC7BvR,EAAI+R,EAAQ,GAAK1T,KAAKkT,OAAO,GAC7BtR,EAAI8R,EAAQ,GAAK1T,KAAKkT,OAAO,GAC7BS,EAAS3T,KAAKkT,OAAO7S,OAAS,EAAI,EAClC+F,EAAI,EAKCvF,EAAI,EAAGA,EAAI8S,EAAQ9S,IACxB0S,EAAK/B,EAAG3I,IAAM,IAAM4I,EAAIhM,GAAK,GAAM,KAAOiM,EAAI/P,GAAK,EAAK,KAAOgQ,EAAO,IAAJ/P,GAAW5B,KAAKkT,OAAO9M,GACzFoN,EAAKhC,EAAG/L,IAAM,IAAMgM,EAAI9P,GAAK,GAAM,KAAO+P,EAAI9P,GAAK,EAAK,KAAO+P,EAAO,IAAJ9I,GAAW7I,KAAKkT,OAAO9M,EAAI,GAC7FqN,EAAKjC,EAAG7P,IAAM,IAAM8P,EAAI7P,GAAK,GAAM,KAAO8P,EAAI7I,GAAK,EAAK,KAAO8I,EAAO,IAAJlM,GAAWzF,KAAKkT,OAAO9M,EAAI,GAC7FxE,EAAI4P,EAAG5P,IAAM,IAAM6P,EAAI5I,GAAK,GAAM,KAAO6I,EAAIjM,GAAK,EAAK,KAAOkM,EAAO,IAAJhQ,GAAW3B,KAAKkT,OAAO9M,EAAI,GAC5FyC,EAAI0K,EACJ9N,EAAI+N,EACJ7R,EAAI8R,EACJrN,GAAK,EAIT,IAASvF,EAAI,EAAGA,EAAI,EAAGA,IACnB0K,EAAI1K,GAAMyQ,EAAEzI,IAAM,KAAO,GACnByI,EAAG7L,GAAK,GAAM,MAAQ,GACtB6L,EAAG3P,GAAK,EAAK,MAAQ,EACrB2P,EAAM,IAAJ1P,GACF5B,KAAKkT,OAAO9M,KAClBmN,EAAK1K,EACLA,EAAIpD,EACJA,EAAI9D,EACJA,EAAIC,EACJA,EAAI2R,EAER,OAAOhI,GAEXyH,EAAI9P,UAAU0Q,QAAU,SAAUN,GAa9B,IAZA,IAOIC,EACAC,EACAC,EATAC,EAAU1B,EAASsB,GACnB/H,EAAM,IAAIxF,YAAY,GACtB8C,EAAI6K,EAAQ,GAAK1T,KAAKmT,OAAO,GAC7B1N,EAAIiO,EAAQ,GAAK1T,KAAKmT,OAAO,GAC7BxR,EAAI+R,EAAQ,GAAK1T,KAAKmT,OAAO,GAC7BvR,EAAI8R,EAAQ,GAAK1T,KAAKmT,OAAO,GAC7BQ,EAAS3T,KAAKmT,OAAO9S,OAAS,EAAI,EAIlC+F,EAAI,EAECvF,EAAI,EAAGA,EAAI8S,EAAQ9S,IACxB0S,EAAK3B,EAAG/I,IAAM,IAAMgJ,EAAIpM,GAAK,GAAM,KAAOqM,EAAInQ,GAAK,EAAK,KAAOoQ,EAAO,IAAJnQ,GAAW5B,KAAKmT,OAAO/M,GACzFoN,EAAK5B,EAAGnM,IAAM,IAAMoM,EAAIlQ,GAAK,GAAM,KAAOmQ,EAAIlQ,GAAK,EAAK,KAAOmQ,EAAO,IAAJlJ,GAAW7I,KAAKmT,OAAO/M,EAAI,GAC7FqN,EAAK7B,EAAGjQ,IAAM,IAAMkQ,EAAIjQ,GAAK,GAAM,KAAOkQ,EAAIjJ,GAAK,EAAK,KAAOkJ,EAAO,IAAJtM,GAAWzF,KAAKmT,OAAO/M,EAAI,GAC7FxE,EAAIgQ,EAAGhQ,IAAM,IAAMiQ,EAAIhJ,GAAK,GAAM,KAAOiJ,EAAIrM,GAAK,EAAK,KAAOsM,EAAO,IAAJpQ,GAAW3B,KAAKmT,OAAO/M,EAAI,GAC5FyC,EAAI0K,EACJ9N,EAAI+N,EACJ7R,EAAI8R,EACJrN,GAAK,EAGT,IAASvF,EAAI,EAAGA,EAAI,EAAGA,IACnB0K,EAAI,GAAK1K,GAAM0Q,EAAG1I,IAAM,KAAO,GACzB0I,EAAI9L,GAAK,GAAM,MAAQ,GACvB8L,EAAI5P,GAAK,EAAK,MAAQ,EACtB4P,EAAO,IAAJ3P,GACH5B,KAAKmT,OAAO/M,KAClBmN,EAAK1K,EACLA,EAAIpD,EACJA,EAAI9D,EACJA,EAAIC,EACJA,EAAI2R,EAER,OAAOhI,GAEJyH,EArHa,GA2HpBa,EAAyB,WACzB,SAASA,EAAQhR,EAAKiR,EAAI/C,QACJ,IAAdA,IAAwBA,EAAY,IACxC/Q,KAAK6C,IAAMmP,EAASnP,GACpB7C,KAAK8T,GAAK9B,EAAS8B,GACnB9T,KAAK+T,OAAS,IAAIf,EAAInQ,GACtB7C,KAAK+Q,UAAYA,EAAY,EA4CjC,OAvCA8C,EAAQ3Q,UAAUmQ,QAAU,SAAUK,EAASzB,GAM3C,IALA,IAAI+B,EAAOhC,EAAS0B,GAChBO,EAAahC,GAAO,IAAIlM,YAAYiO,EAAK3T,QACzC6T,EAAQlU,KAAK8T,GAAGK,SAASnU,KAAK+Q,UAAW/Q,KAAK8T,GAAGzT,QACjD+T,EAAQpU,KAAK8T,GAAGK,SAAS,EAAGnU,KAAK+Q,WACjCsD,EAAO,IAAItO,YAAY/F,KAAK+Q,WACvBlQ,EAAI,EAAGA,EAAImT,EAAK3T,OAAQQ,GAAKb,KAAK+Q,UAAW,CAClD,IAAIxJ,EAAIyM,EAAKG,SAAStT,EAAGA,EAAIb,KAAK+Q,WAClCuB,EAAI/K,EAAG6M,EAAOC,GACd,IAAIlM,EAAInI,KAAK+T,OAAOV,QAAQgB,GAC5B/B,EAAInK,EAAG+L,GACPA,EAAQ3M,EACR6M,EAAQjM,EACR,IAAK,IAAIX,EAAI3G,EAAGuF,EAAI,EAAGoB,EAAIwM,EAAK3T,QAAU+F,EAAI,EAAGoB,IAAKpB,IAClD6N,EAAWzM,GAAKW,EAAE/B,GAE1B,OAAO6N,GAKXJ,EAAQ3Q,UAAU0Q,QAAU,SAAUF,EAASzB,GAM3C,IALA,IAAIgC,EAAajC,EAAS0B,GACtBM,EAAO/B,GAAO,IAAIlM,YAAYkO,EAAW5T,QACzC+T,EAAQpU,KAAK8T,GAAGK,SAASnU,KAAK+Q,UAAW/Q,KAAK8T,GAAGzT,QACjD6T,EAAQlU,KAAK8T,GAAGK,SAAS,EAAGnU,KAAK+Q,WACjCsD,EAAO,IAAItO,YAAY/F,KAAK+Q,WACvBlQ,EAAI,EAAGA,EAAImT,EAAK3T,OAAQQ,GAAKb,KAAK+Q,UAAW,CAClD,IAAIxJ,EAAI0M,EAAWE,SAAStT,EAAGA,EAAIb,KAAK+Q,WACxCuB,EAAI/K,EAAG6M,EAAOC,GACd,IAAIlM,EAAInI,KAAK+T,OAAOH,QAAQS,GAC5B/B,EAAInK,EAAG+L,GACPA,EAAQ3M,EACR6M,EAAQjM,EACR,IAAK,IAAIX,EAAI3G,EAAGuF,EAAI,EAAGoB,EAAIwM,EAAK3T,QAAU+F,EAAI,EAAGoB,IAAKpB,IAClD4N,EAAKxM,GAAKW,EAAE/B,GAEpB,OAAO4N,GAEJH,EAlDiB,IAwDG,WAC3B,SAASA,EAAQhR,EAAKyR,EAASvD,GAO3B,QANkB,IAAdA,IAAwBA,EAAY,IACxC/Q,KAAKuU,OAAS,EACdvU,KAAK6C,IAAMmP,EAASnP,GACpB7C,KAAKsU,QAAUtC,EAASsC,GACxBtU,KAAK+T,OAAS,IAAIf,EAAInQ,GACtB7C,KAAK+Q,UAAYA,EAAY,EACD,IAAxB/Q,KAAKsU,QAAQjU,OACb,MAAM,IAAIgS,MAAM,gDAMxBwB,EAAQ3Q,UAAUmQ,QAAU,SAAUK,EAASzB,GAI3C,IAHA,IAAI+B,EAAOhC,EAAS0B,GAChBO,EAAahC,GAAO,IAAIlM,YAAYiO,EAAK3T,QACzCkU,EAASvU,KAAKuU,OACT1T,EAAI,EAAGA,EAAImT,EAAK3T,OAAQQ,GAAKb,KAAK+Q,UAAW,CAElD,IADA,IAAIxJ,EAAIvH,KAAK+T,OAAOV,QAAQrT,KAAKsU,SACxB9M,EAAI3G,EAAGuF,EAAImO,EAAQ/M,EAAIwM,EAAK3T,QAAU+F,EAAIpG,KAAK+Q,UAAWvJ,IAAKpB,IACpE6N,EAAWzM,GAAKD,EAAEnB,GAAK4N,EAAKxM,GAC5BwM,EAAK3T,OAASQ,GAAKb,KAAK+Q,WACxB/Q,KAAKwU,mBACLD,IACA1T,GAAK0T,EACLA,EAAS,GAIjB,OADAvU,KAAKuU,QAAUvU,KAAKuU,OAAUP,EAAK3T,OAAS,GAAM,EAC3C4T,GAKXJ,EAAQ3Q,UAAU0Q,QAAU,SAAUF,EAASzB,GAC3C,OAAOjS,KAAKqT,QAAQK,EAASzB,IAEjC4B,EAAQ3Q,UAAUsR,iBAAmB,WAEjC,IAAK,IAAIC,EAAQzU,KAAKsU,QAAQjU,OAAS,EAAGoU,GAAS,OACzCzU,KAAKsU,QAAQG,GAAS,YADsBA,OAzChC,GAiDf,O,ojBClUf,SAASC,EAAIvC,EAAKD,GACd,OAAQC,EAAIC,WAAWF,IAAQ,GACzBC,EAAIC,WAAWF,EAAM,IAAM,GAC3BC,EAAIC,WAAWF,EAAM,IAAM,EAC3BC,EAAIC,WAAWF,EAAM,GAK/B,SAASyC,EAAIC,GACT,OAAQC,OAAOC,aAAcF,GAAQ,GAAM,KACrCC,OAAOC,aAAcF,GAAQ,GAAM,KACnCC,OAAOC,aAAcF,GAAQ,EAAK,KAClCC,OAAOC,aAAoB,IAAPF,GAK9B,SAASG,EAAIH,GACT,OAAQ,WAAaA,EAAKpR,SAAS,KAAKwR,OAAO,GAMnD,SAASC,EAAKC,GAYV,OAXKA,IACDA,EAAI,IAAInP,YAAY,IAExBmP,EAAE,GAAK,WACPA,EAAE,GAAK,WACPA,EAAE,GAAK,WACPA,EAAE,GAAK,WACPA,EAAE,GAAK,WACPA,EAAE,GAAK,WACPA,EAAE,GAAK,UACPA,EAAE,GAAK,WACAA,EAGX,IAAI,EAAQ,IAAInP,YAAY,IAExBoP,EAAK,IAAIpP,YAAY,CACrB,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,aAKxC,SAASqP,EAAMlI,EAAO0H,GAElB,IAAI/L,EAAIqE,EAAM,GACVzH,EAAIyH,EAAM,GACVvL,EAAIuL,EAAM,GACVtL,EAAIsL,EAAM,GACVlM,EAAIkM,EAAM,GACVmI,EAAInI,EAAM,GACVhE,EAAIgE,EAAM,GACVgI,EAAIhI,EAAM,GACd,EAAM7H,IAAIuP,GACV,IAAK,IAAI/T,EAAI,GAAIA,EAAI,GAAIA,GAAK,EAAG,CAG7ByU,IADIA,EAAK,EAAMzU,EAAI,MACL,GAAOyU,GAAM,KACnBA,IAAO,GAAOA,GAAM,IACrBA,IAAO,GAGdC,IADIA,EAAK,EAAM1U,EAAI,OACL,EAAM0U,GAAM,KAClBA,IAAO,GAAOA,GAAM,IACrBA,IAAO,EAEd,EAAM1U,GAAMyU,EAAK,EAAMzU,EAAI,GAAK0U,EAAK,EAAM1U,EAAI,IAGnD,IAASA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAE5B,IAaI0U,EAPA7O,GAAOmC,IAAM,EAAMA,GAAK,KACpBA,IAAM,GAAOA,GAAK,KAClBA,IAAM,GAAOA,GAAK,IAEtB2M,EAAO3M,EAAIpD,EAAM9D,GAAKkH,EAAIpD,GAE1B6P,EAAKJ,IAZElU,IAAM,EAAMA,GAAK,KACpBA,IAAM,GAAOA,GAAK,KAClBA,IAAM,GAAOA,GAAK,KAEjBkI,EAAKlI,GAAKqU,EAAInM,IAQAiM,EAAGtU,GAAK,EAAMA,GAErCqU,EAAIhM,EACJA,EAAImM,EACJA,EAAIrU,EACJA,EAAKY,EAAI0T,EAAM,EACf1T,EAAID,EACJA,EAAI8D,EACJA,EAAIoD,EACJA,EAAKyM,GARDC,EAAK7O,EAAK8O,GAQE,EAGpBtI,EAAM,IAAMrE,EACZqE,EAAM,IAAMzH,EACZyH,EAAM,IAAMvL,EACZuL,EAAM,IAAMtL,EACZsL,EAAM,IAAMlM,EACZkM,EAAM,IAAMmI,EACZnI,EAAM,IAAMhE,EACZgE,EAAM,IAAMgI,EAKhB,SAASO,EAAWtD,EAAKF,EAAK/E,EAAOqH,GAEjC,SADe,IAAXA,IAAqBA,EAAS,GAC3BpC,EAAI9R,QAAU,IAAI,CACrB,IAAK,IAAIQ,EAAI0T,EAAQ1T,EAAI,GAAIA,IACzBoR,EAAIpR,GAAK6T,EAAIvC,EAAS,EAAJtR,GACtBsR,EAAMA,EAAI6C,MAAM,GAAc,EAATT,GACrBA,EAAS,EACTa,EAAMlI,EAAO+E,GAEjB,OAAOE,EAKX,SAASuD,EAAQ9P,EAAOqM,EAAK/E,EAAOqH,GAEhC,SADe,IAAXA,IAAqBA,EAAS,GAC3B3O,EAAMvF,QAAU4R,EAAI5R,OAASkU,GAChCtC,EAAI5M,IAAIO,EAAMuO,SAAS,EAAGlC,EAAI5R,OAASkU,GAASA,GAChD3O,EAAQA,EAAMuO,SAASlC,EAAI5R,OAASkU,GACpCA,EAAS,EACTa,EAAMlI,EAAO+E,GAMjB,OAJIrM,EAAMvF,OAAS,IACf4R,EAAI5M,IAAIO,EAAO2O,GACfA,GAAU3O,EAAMvF,QAEbkU,EAKX,SAASoB,EAAO/R,EAAKqO,EAAK/E,EAAOqH,QACd,IAAXA,IAAqBA,EAAS,GAGlC,IAFA,IAAIqB,EAAWhS,EAAM,aAAiB,EAClCiS,EAAUjS,IAAQ,EACb/C,EAAI0T,EAAS,EAAG1T,EAAIoR,EAAI5R,OAAQQ,IACrCoR,EAAIpR,GAAK,EACb,GAAI0T,GAAU,GAAI,CACda,EAAMlI,EAAO+E,GACb,IAASpR,EAAI,EAAGA,EAAIoR,EAAI5R,OAAQQ,IAC5BoR,EAAIpR,GAAK,EAEjBoR,EAAI,IAAO2D,GAAW,EAAMA,IAAY,GACxC3D,EAAI,IAAM4D,GAAW,EACrBT,EAAMlI,EAAO+E,GAKjB,SAAS6D,EAAYC,EAAOnS,EAAKqO,EAAK/E,EAAOqH,GAEzC,SADe,IAAXA,IAAqBA,EAAS,GAC3BwB,EAAM1V,QAAU,EAAGkU,IACtBtC,EAAIsC,GAAUG,EAAIqB,EAAO,GACzBA,EAAQA,EAAMf,MAAM,GAEpBT,GAAU,KACVa,EAAMlI,EAAO+E,GACbsC,EAAS,GAEbtC,EAAIsC,GAAUG,EAAIqB,EAAQ,UAAgB,GAC1CJ,EAAO/R,EAAKqO,EAAK/E,EAAOqH,GAK5B,SAASyB,EAASpS,EAAKqO,EAAK/E,EAAOqH,QAChB,IAAXA,IAAqBA,EAAS,GAClCtC,EAAIsC,GAAU,WACdoB,EAAO/R,EAAKqO,EAAK/E,EAAOqH,GAE5B,SAAShJ,EAAI2B,EAAO+I,GAEhB,YADe,IAAXA,IAAqBA,EAAS,SAC1BA,GACJ,IAAK,MAAO,OAAQlB,EAAI7H,EAAM,IACxB6H,EAAI7H,EAAM,IACV6H,EAAI7H,EAAM,IACV6H,EAAI7H,EAAM,IACV6H,EAAI7H,EAAM,IACV6H,EAAI7H,EAAM,IACV6H,EAAI7H,EAAM,IACV6H,EAAI7H,EAAM,IAChB,IAAK,SAAU,OAAQyH,EAAIzH,EAAM,IAC3ByH,EAAIzH,EAAM,IACVyH,EAAIzH,EAAM,IACVyH,EAAIzH,EAAM,IACVyH,EAAIzH,EAAM,IACVyH,EAAIzH,EAAM,IACVyH,EAAIzH,EAAM,IACVyH,EAAIzH,EAAM,IAChB,QAAS,OAAOA,GAMxB,IAAIgJ,EAAwB,WACxB,SAASA,EAAOjE,GACZjS,KAAKwE,OAAS,IAAIuB,YAAY,IAC9B/F,KAAKkN,MAAQ+H,EAAKhD,GAClBjS,KAAKK,OAAS,EACdL,KAAKuU,OAAS,EACdvU,KAAKmW,KAAO,GAgChB,OA9BAD,EAAOhT,UAAUkT,OAAS,SAAUL,GAChC,GAAqB,iBAAVA,EACP/V,KAAKK,QAAU0V,EAAM1V,OACrBL,KAAKmW,KAAOV,EAAWzV,KAAKmW,KAAOJ,EAAO/V,KAAKwE,OAAQxE,KAAKkN,MAAOlN,KAAKuU,QACxEvU,KAAKuU,OAAS,MAEb,CACD,GAAIvU,KAAKmW,KAAK9V,OAAS,EACnB,MAAM,IAAIgS,MAAM,2CACpBrS,KAAKK,QAAyB,EAAf0V,EAAM1V,OACrBL,KAAKuU,OAASmB,EAAQK,EAAO/V,KAAKwE,OAAQxE,KAAKkN,MAAOlN,KAAKuU,QAE/D,OAAOvU,MAEXkW,EAAOhT,UAAUmT,OAAS,SAAUJ,GAQhC,YAPe,IAAXA,IAAqBA,EAAS,SAC9BjW,KAAKmW,KAAK9V,OAAS,EACnByV,EAAY9V,KAAKmW,KAAMnW,KAAKK,OAAQL,KAAKwE,OAAQxE,KAAKkN,MAAOlN,KAAKuU,QAGlEyB,EAAShW,KAAKK,OAAQL,KAAKwE,OAAQxE,KAAKkN,MAAOlN,KAAKuU,QAEjDhJ,EAAIvL,KAAKkN,MAAO+I,IAE3BC,EAAOhT,UAAUoT,MAAQ,WACrBtW,KAAKkN,MAAQ+H,IACbjV,KAAKK,OAAS,EACdL,KAAKuU,OAAS,EACdvU,KAAKmW,KAAO,IAETD,EAtCgB,GAwC3B,SAASK,EAAO7C,EAASuC,QACN,IAAXA,IAAqBA,EAAS,SAClC,IAAIhE,EAAM,IAAIlM,YAAY,IACtBmH,EAAQ+H,IAKZ,MAJuB,iBAAZvB,EACPoC,EAAYL,EAAW/B,EAASzB,EAAK/E,GAAQwG,EAAQrT,OAAQ4R,EAAK/E,GAElE8I,EAA0B,EAAjBtC,EAAQrT,OAAY4R,EAAK/E,EAAOwI,EAAQhC,EAASzB,EAAK/E,IAC5D3B,EAAI2B,EAAO+I,GAKtBM,EAAOC,OAAS,SAAUvE,GAAO,OAAO,IAAIiE,EAAOjE,IACnDsE,EAAOE,YAAc,GACrBF,EAAOG,aAAe,GAEP,Q,0VChQR,SAASC,EAAYC,GAkB1B,OAHc,YAAW,YAAa,YAAWA,EAAO,KAAK,GAAQ,GAAG,GAAM,GAAO,GAMhF,SAAS/I,EAAavK,GAG3B,MAAMuT,EAAsB,GAE5B,IAAIC,EAAO,IAAKjC,OAAOC,aAAaiC,MAAM,KACxCzT,aAAiBqB,WAAa,IAAIrB,GAAS,IAAI,IAAIqB,WAAWrB,MAChE,IAAI,IAAIzC,EAAI,EAAGA,EAAIiW,EAAKzW,SAAUQ,EAChCgW,EAAU1V,KAAK2V,EAAK1E,WAAWvR,IAKjC,OAAO,IAAI8D,WAAWkS,GAGjB,SAAS/I,EAAexK,GAG7B,IAAIwC,EAA0B,iBAAZ,EAAuBxC,EAAQ,YAAcA,GAC3DwT,EAAO,EAAOhR,GAIlB,OAAO,YAAgBgR,GAGlB,SAAS9I,EAAe1K,EAAoBuJ,EAAuBC,GAGxExJ,EAAQ,YAAWA,GAGnB,MACMyJ,EADS,IAAI,IAAI,YAAcF,GAAW,YAAcC,IAChCuG,QAAQ,YAAc/P,IAGpD,OAAO,YAAgByJ,GAGlB,SAASkB,EAAe3K,EAAmBuJ,EAAsBC,GAGtE,MACMkK,EADS,IAAI,IAAI,YAAcnK,GAAW,YAAcC,IAChC8G,QAAQ,YAActQ,IAIpD,OAAO,YAAgB0T,GAGlB,SAAS9I,EAAWlB,EAAgD1J,GAGzEA,EAAQ,YAAWA,EAAO,KAE1B,IAAI2T,EAAI,YAAWjK,EAAUkK,QAAS,IAClCC,EAAI,YAAWnK,EAAUoK,SAAU,IACnCC,EAAI,YAAW,YAAW/T,GAAQ,IAElCgU,EAAkB,YAAOD,EAAGF,EAAGF,GAKnC,OAJqB,YAAa,YAAWK,EAAiB,KAOzD,SAAevJ,EAAoCvJ,EAAamI,EAAWC,G,yCAChF,IAAI2K,EAA4B,oBAAb,QAA4B,WAAYhL,OAASA,OAAOiL,OAAOD,OAAS/K,KAAKgL,OAAOD,OAEnGE,QAAkBF,EAAOE,UAC3B,MACAjT,EACA,CACE3C,KAAM,WAER,EACA,CAAC,YAAa,eA8BhB,aA3B4B0V,EAAOG,UACjC,CACE,KAAQ,SACR/K,KAAMA,EACNC,WAAYA,EACZkK,KAAM,CAACjV,KAAM,YAEf4V,EACA,CACE5V,KAAM,UAENxB,OAAQ,MAEV,EACA,CAAC,UAAW,YAGHkX,EAAOI,WAAW,CACzB,KAAQ,SACRhL,KAAMA,EACNC,WAAYA,EACZkK,KAAM,CAACjV,KAAM,YAEf4V,EACA,QAMG,SAAStJ,EAAqByJ,GACnC,IAAIC,EAIJ,IAEEA,EAASC,EAAc,YAAW,YAAWF,GAAU,GAAI9O,KAAK4B,KAAK,GAAK,KAAO,IAEjF,MAAO1J,GACP0M,QAAQ0B,MAAM,sBAAuBpO,GAKvC,OAAO6W,EAGF,SAASC,EAAcC,GAC5B,IAGIlX,EAAGmJ,EACHxC,EAAGwQ,EACHC,EACAC,EALAC,EAASrP,KAAK4B,KADJ,GACmB,KAAO,EACpC0N,EAAK,EAKLvP,EAAI,IAAIrC,MAAM2R,GACd1S,EAAI,IAAIe,MAAM2R,GACdxW,EAAI,IAAI6E,MAAM2R,GACdjP,EAAI,IAAI1C,MAAM2R,GACd1Q,EAAI,IAAIjB,MAAM2R,GACd5Q,EAAI,IAAIf,MAAM2R,GACdhQ,EAAI,IAAI3B,MAAM2R,GAElB,IAAItX,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAMrB,IALAmJ,EAAgC,IAAN,GAArB,YAAc,MACnB,YAASzC,EAAG,YAAc,KAAc,GACxC,YAAMY,EAAGZ,GACTyQ,EAAM,GAAMnX,EAAI,GAEX2G,EAAI,EAAGA,EAAIwQ,IAAOxQ,EAAG,CAMxB,MALE4Q,EACF,YAAMvP,EAAGtB,GACT,YAAM9B,EAAG8B,GACT,YAAS5F,EAAGqI,IAEL,YAAOvE,IACF,EAAPA,EAAE,KACH,YAAK9D,EAAGkH,GACL,YAAQlH,EAAGoW,IACZ,YAAKpW,EAAGoW,IAGZ,YAAKlP,EAAGA,GACL,YAAQA,EAAGkP,IACZ,YAAKlP,EAAGkP,GAEV,YAAYtS,EAAG,GAYjB,GATA,YAAM8B,EAAG5F,GACN,YAAQ4F,EAAGY,IACZ,YAAMV,EAAGF,GACT,YAAKE,EAAGU,KAER,YAAMV,EAAGU,GACT,YAAKV,EAAGF,IAEV,YAAME,EAAGsQ,EAAM7O,EAAGL,EAAGpD,IACjB,YAAUyD,EAAG,GACf,MAEmB,IAAjB1B,EAAKA,EAAI,IACX,YAAMW,EAAGZ,GAGb,GAAG,YAAQ2B,EAAG,KACZ,MAgBJ,OAZA,YAAQ6O,EAAM7O,EAAG3B,EAAGY,GAEjB,YAAQe,EAAG3B,IACZ0Q,EAAI1Q,EACJ2Q,EAAIhP,IAEJ+O,EAAI/O,EACJgP,EAAI3Q,GAKC,CAAC,YAAa0Q,GAAI,YAAaC,GAAIE,GAGrC,SAAShK,EAAY7G,EAAQY,EAAQzG,GAC1C,IACE,IAAI2W,EAAU,YAAW,YAAW9Q,GAAI,IACpC+Q,EAAU,YAAW,YAAWnQ,GAAI,IACpCoQ,EAAU,YAAW,YAAW7W,GAAI,IACpC8W,EAAY,YAAOH,EAASC,EAASC,GAEzC,OAAO,YAAa,YAAWC,EAAW,KAC1C,MAAMxX,GACN0M,QAAQ0B,MAAM,gBAAiBpO,IAQ5B,SAASqN,EAAe/K,EAAoBE,GAIjD,OAFa,IAAKiV,QAAQnV,EAAOE,EAAW,CAACiP,GAAI,eAAYlO,K,6BCvQ/D,SAASmU,EAAW9D,GAChB,OAAQC,OAAOC,aAAcF,GAAQ,GAAM,KACrCC,OAAOC,aAAcF,GAAQ,GAAM,KACnCC,OAAOC,aAAcF,GAAQ,EAAK,KAClCC,OAAOC,aAAoB,IAAPF,GAb9B5S,OAAOC,eAAetB,EAAS,aAAc,CAAE4B,OAAO,IAiBtD,IADA,IAAIoW,EAAW9D,OAAOC,aAAa,KAC1BjU,EAAI,GAAIA,KACb8X,GAAY9D,OAAOC,aAAa,GAwKpCnU,EAAQiY,QAxCR,SAAclF,GAMV,IAJA,IAAI9P,EAAM8P,EAAQrT,OACduV,EAAWhS,EAAM,aAAiB,EAClCiS,EAAUjS,IAAQ,EAClBiV,EAAO,CAAC,EAAG,GACNhY,EAAIgY,EAAKxY,OAAS,EAAGQ,GAAK,EAAGA,GAAK,EACvCgY,EAAKhY,IAAMgV,EACXA,EAAUD,GAAYiD,EAAKhY,GAAK,aAAiB,GACjDgY,EAAKhY,MAAQ,EACb+U,EAAYC,EAAU,aAAiB,EAE3C,IAUIiD,EAVAC,EAAMrF,EAMNsF,EAAuB,GAJXH,EAAKA,EAAKxY,OAAS,GAAK,EAKxC0Y,GAAOJ,EAAS3U,OAAO,EAAG,GAAKgV,GAK/B,IAAIxO,EAAiB,EAAVqO,EAAK,GAChB,IAAShY,EAAI,EAAGA,EAAIgY,EAAKxY,OAAS,EAAGQ,GAAK,EAItCkY,GAAOL,GADPlO,IAFAsO,EAAqB,EAAdD,EAAKhY,EAAI,IACA,aAAiB,KAEN,GAC3B2J,EAAOsO,IAAS,EAGpB,IAAI5L,EA7JR,SAAgB0H,GAqBZ,IApBA,IAAI/L,EACApD,EACA9D,EACAC,EACAZ,EAzBYmR,EAAKD,EA0BjBrR,EAAI,EAEJ2B,EAAI,EAEJsD,EAAQ,IAAIC,YAAY,IAExBkT,EAAK,WACLC,EAAK,WACLC,EAAK,WACLC,EAAK,UACLC,EAAK,WACLzV,EAAMgR,EAAKvU,OACXmB,EAAI,EAGDoC,GAAO,IAAI,CAQd,IANAiF,EAAIoQ,EACJxT,EAAIyT,EACJvX,EAAIwX,EACJvX,EAAIwX,EACJpY,EAAIqY,EAECxY,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrBiF,EAAMjF,IAlDOqR,EAkDe1Q,GAlDpB2Q,EAkDcyC,GAjDlBxC,WAAWF,IAAQ,GACzBC,EAAIC,WAAWF,EAAM,IAAM,GAC3BC,EAAIC,WAAWF,EAAM,IAAM,EAC3BC,EAAIC,WAAWF,EAAM,IA+CnB1Q,GAAK,EAELgB,GAAMqG,GAAK,EAAMA,IAAM,KADnBjH,EAAK6D,GAAK9D,EAAIC,IACgBZ,EAAI,WAAa8E,EAAMjF,GACzDG,EAAIY,EACJA,EAAID,EAEJA,GAAM8D,GAAK,GAAOA,IAAM,KAAQ,EAChCA,EAAIoD,EACJA,EAAIrG,EAER,KAAO3B,EAAI,GAAIA,GAAK,EAEhB2B,GADAA,EAAKsD,EAAMjF,EAAI,GAAKiF,EAAMjF,EAAI,GAAKiF,EAAMjF,EAAI,IAAMiF,EAAMjF,EAAI,MACnD,EAAM2B,IAAM,GACtBsD,EAAMjF,GAAK2B,EAEXA,GAAMqG,GAAK,EAAMA,IAAM,KADnBjH,EAAK6D,GAAK9D,EAAIC,IACgBZ,EAAI,WAAawB,EACnDxB,EAAIY,EACJA,EAAID,EAEJA,GAAM8D,GAAK,GAAOA,IAAM,KAAQ,EAChCA,EAAIoD,EACJA,EAAIrG,EAGR,KAAO3B,EAAI,GAAIA,GAAK,EAEhB2B,GADAA,EAAKsD,EAAMjF,EAAI,GAAKiF,EAAMjF,EAAI,GAAKiF,EAAMjF,EAAI,IAAMiF,EAAMjF,EAAI,MACnD,EAAM2B,IAAM,GACtBsD,EAAMjF,GAAK2B,EAEXA,GAAMqG,GAAK,EAAMA,IAAM,KADnBpD,EAAI9D,EAAIC,GACsBZ,EAAI,WAAawB,EACnDxB,EAAIY,EACJA,EAAID,EAEJA,GAAM8D,GAAK,GAAOA,IAAM,KAAQ,EAChCA,EAAIoD,EACJA,EAAIrG,EAER,KAAO3B,EAAI,GAAIA,GAAK,EAEhB2B,GADAA,EAAKsD,EAAMjF,EAAI,GAAKiF,EAAMjF,EAAI,IAAMiF,EAAMjF,EAAI,IAAMiF,EAAMjF,EAAI,MACpD,EAAM2B,IAAM,GACtBsD,EAAMjF,GAAK2B,EAEXA,GAAMqG,GAAK,EAAMA,IAAM,KADnBpD,EAAI9D,EAAIC,GACsBZ,EAAI,WAAawB,EACnDxB,EAAIY,EACJA,EAAID,EAEJA,GAAM8D,GAAK,GAAOA,IAAM,KAAQ,EAChCA,EAAIoD,EACJA,EAAIrG,EAGR,KAAO3B,EAAI,GAAIA,GAAK,EAEhB2B,GADAA,EAAKsD,EAAMjF,EAAI,GAAKiF,EAAMjF,EAAI,IAAMiF,EAAMjF,EAAI,IAAMiF,EAAMjF,EAAI,MACpD,EAAM2B,IAAM,GACtBsD,EAAMjF,GAAK2B,EAEXA,GAAMqG,GAAK,EAAMA,IAAM,KADlBpD,EAAI9D,EAAMC,GAAK6D,EAAI9D,IACUX,EAAI,WAAawB,EACnDxB,EAAIY,EACJA,EAAID,EAEJA,GAAM8D,GAAK,GAAOA,IAAM,KAAQ,EAChCA,EAAIoD,EACJA,EAAIrG,EAGR,KAAO3B,EAAI,GAAIA,GAAK,EAEhB2B,GADAA,EAAKsD,EAAMjF,EAAI,GAAKiF,EAAMjF,EAAI,IAAMiF,EAAMjF,EAAI,IAAMiF,EAAMjF,EAAI,MACpD,EAAM2B,IAAM,GACtBsD,EAAMjF,GAAK2B,EAEXA,GAAMqG,GAAK,EAAMA,IAAM,KADnBpD,EAAI9D,EAAIC,GACsBZ,EAAI,WAAawB,EACnDxB,EAAIY,EACJA,EAAID,EAEJA,GAAM8D,GAAK,GAAOA,IAAM,KAAQ,EAChCA,EAAIoD,EACJA,EAAIrG,EAGRyW,EAAMA,EAAKpQ,EAAK,EAChBqQ,EAAMA,EAAKzT,EAAK,EAChB0T,EAAMA,EAAKxX,EAAK,EAChByX,EAAMA,EAAKxX,EAAK,EAChByX,EAAMA,EAAKrY,EAAK,EAChB4C,GAAO,GAEX,MAAO,CACHqV,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,GAuC5BjD,CADZ2C,GAAOL,EAAWlO,IAElB,OAAOkO,EAAWxL,EAAM+L,IAClBP,EAAWxL,EAAMgM,IACjBR,EAAWxL,EAAMiM,IACjBT,EAAWxL,EAAMkM,IACjBV,EAAWxL,EAAMmM,M,gBCzL0CzY,EAAOD,QAAkN,SAASyB,EAAEL,EAAEqB,EAAEiS,GAAG,SAASvU,EAAE0B,EAAExB,GAAG,IAAIoC,EAAEZ,GAAG,CAAC,IAAIT,EAAES,GAAG,CAAmE,GAAGZ,EAAE,OAAOA,EAAEY,GAAE,GAAI,IAAIO,EAAE,IAAIsP,MAAM,uBAAuB7P,EAAE,KAAK,MAAMO,EAAEuW,KAAK,mBAAmBvW,EAAE,IAAI8F,EAAEzF,EAAEZ,GAAG,CAAC7B,QAAQ,IAAIoB,EAAES,GAAG,GAAGzB,KAAK8H,EAAElI,SAAQ,SAASK,GAAG,OAAOF,EAAEiB,EAAES,GAAG,GAAGxB,IAAIA,KAAI6H,EAAEA,EAAElI,QAAQyB,EAAEL,EAAEqB,EAAEiS,GAAG,OAAOjS,EAAEZ,GAAG7B,QAAQ,IAAI,IAAIiB,GAAE,EAAoCZ,EAAE,EAAEA,EAAEqU,EAAEhV,OAAOW,IAAIF,EAAEuU,EAAErU,IAAI,OAAOF,EAAza,CAA4a,CAACyY,EAAE,CAAC,SAASvY,EAAEwB,EAAE3B,GAAG,aAAa,IAAIkC,EAAE,oBAAoB4B,YAAY,oBAAoB6U,aAAa,oBAAoBC,WAAW5Y,EAAE+M,OAAO,SAAS5M,GAAG,IAAI,IAAIwB,EAAE3B,EAAEkC,EAAEyD,MAAMtD,UAAU8R,MAAMjU,KAAK2Y,UAAU,GAAG3W,EAAE1C,QAAQ,CAAC,IAAIwI,EAAE9F,EAAE6G,QAAQ,GAAGf,EAAE,CAAC,GAAG,iBAAiBA,EAAE,MAAM,IAAI8Q,UAAU9Q,EAAE,sBAAsB,IAAI,IAAIzG,KAAKyG,EAAErG,EAAEqG,EAAEhI,EAAEuB,EAAEJ,OAAOkB,UAAUC,eAAepC,KAAKyB,EAAE3B,KAAKG,EAAEoB,GAAGyG,EAAEzG,KAAK,OAAOpB,GAAGH,EAAE+Y,UAAU,SAAS5Y,EAAEwB,GAAG,OAAOxB,EAAEX,SAASmC,EAAExB,EAAEA,EAAEmT,SAASnT,EAAEmT,SAAS,EAAE3R,IAAIxB,EAAEX,OAAOmC,EAAExB,IAAI,IAAI6H,EAAE,CAACgR,SAAS,SAAS7Y,EAAEwB,EAAE3B,EAAEkC,EAAE8F,GAAG,GAAGrG,EAAE2R,UAAUnT,EAAEmT,SAASnT,EAAEqE,IAAI7C,EAAE2R,SAAStT,EAAEA,EAAEkC,GAAG8F,QAAQ,IAAI,IAAIzG,EAAE,EAAEA,EAAEW,EAAEX,IAAIpB,EAAE6H,EAAEzG,GAAGI,EAAE3B,EAAEuB,IAAI0X,cAAc,SAAS9Y,GAAG,IAAIwB,EAAE3B,EAAEkC,EAAE8F,EAAEzG,EAAEL,EAAE,IAAIS,EAAEO,EAAE,EAAElC,EAAEG,EAAEX,OAAOmC,EAAE3B,EAAE2B,IAAIO,GAAG/B,EAAEwB,GAAGnC,OAAO,IAAI0B,EAAE,IAAI4C,WAAW5B,GAAGP,EAAEqG,EAAE,EAAEhI,EAAEG,EAAEX,OAAOmC,EAAE3B,EAAE2B,IAAIJ,EAAEpB,EAAEwB,GAAGT,EAAEsD,IAAIjD,EAAEyG,GAAGA,GAAGzG,EAAE/B,OAAO,OAAO0B,IAAIK,EAAE,CAACyX,SAAS,SAAS7Y,EAAEwB,EAAE3B,EAAEkC,EAAE8F,GAAG,IAAI,IAAIzG,EAAE,EAAEA,EAAEW,EAAEX,IAAIpB,EAAE6H,EAAEzG,GAAGI,EAAE3B,EAAEuB,IAAI0X,cAAc,SAAS9Y,GAAG,MAAM,GAAGqQ,OAAO0F,MAAM,GAAG/V,KAAKH,EAAEkZ,SAAS,SAAS/Y,GAAGA,GAAGH,EAAEmZ,KAAKrV,WAAW9D,EAAEoZ,MAAMT,YAAY3Y,EAAEqZ,MAAMT,WAAW5Y,EAAE+M,OAAO/M,EAAEgI,KAAKhI,EAAEmZ,KAAKxT,MAAM3F,EAAEoZ,MAAMzT,MAAM3F,EAAEqZ,MAAM1T,MAAM3F,EAAE+M,OAAO/M,EAAEuB,KAAKvB,EAAEkZ,SAAShX,IAAI,IAAIoX,EAAE,CAAC,SAASnZ,EAAEwB,EAAE3B,GAAG,aAAa,IAAIwU,EAAErU,EAAE,YAAY6H,GAAE,EAAGzG,GAAE,EAAG,IAAIyS,OAAOC,aAAaiC,MAAM,KAAK,CAAC,IAAI,MAAM/V,GAAG6H,GAAE,EAAG,IAAIgM,OAAOC,aAAaiC,MAAM,KAAK,IAAIpS,WAAW,IAAI,MAAM3D,GAAGoB,GAAE,EAAG,IAAI,IAAItB,EAAE,IAAIuU,EAAE2E,KAAK,KAAKjX,EAAE,EAAEA,EAAE,IAAIA,IAAIjC,EAAEiC,GAAG,KAAKA,EAAE,EAAE,KAAKA,EAAE,EAAE,KAAKA,EAAE,EAAE,KAAKA,EAAE,EAAE,KAAKA,EAAE,EAAE,EAAE,SAASnB,EAAEZ,EAAEwB,GAAG,GAAGA,EAAE,QAAQxB,EAAEmT,UAAU/R,IAAIpB,EAAEmT,UAAUtL,GAAG,OAAOgM,OAAOC,aAAaiC,MAAM,KAAK1B,EAAEuE,UAAU5Y,EAAEwB,IAAI,IAAI,IAAI3B,EAAE,GAAGkC,EAAE,EAAEA,EAAEP,EAAEO,IAAIlC,GAAGgU,OAAOC,aAAa9T,EAAE+B,IAAI,OAAOlC,EAAEC,EAAE,KAAKA,EAAE,KAAK,EAAED,EAAEuZ,WAAW,SAASpZ,GAAG,IAAIwB,EAAE3B,EAAEkC,EAAE8F,EAAEzG,EAAEL,EAAEf,EAAEX,OAAO+C,EAAE,EAAE,IAAIyF,EAAE,EAAEA,EAAE9G,EAAE8G,IAAI,QAAQ,OAAOhI,EAAEG,EAAEoR,WAAWvJ,MAAMA,EAAE,EAAE9G,GAAG,QAAQ,OAAOgB,EAAE/B,EAAEoR,WAAWvJ,EAAE,OAAOhI,EAAE,OAAOA,EAAE,OAAO,KAAKkC,EAAE,OAAO8F,KAAKzF,GAAGvC,EAAE,IAAI,EAAEA,EAAE,KAAK,EAAEA,EAAE,MAAM,EAAE,EAAE,IAAI2B,EAAE,IAAI6S,EAAE2E,KAAK5W,GAAGyF,EAAEzG,EAAE,EAAEA,EAAEgB,EAAEyF,IAAI,QAAQ,OAAOhI,EAAEG,EAAEoR,WAAWvJ,MAAMA,EAAE,EAAE9G,GAAG,QAAQ,OAAOgB,EAAE/B,EAAEoR,WAAWvJ,EAAE,OAAOhI,EAAE,OAAOA,EAAE,OAAO,KAAKkC,EAAE,OAAO8F,KAAKhI,EAAE,IAAI2B,EAAEJ,KAAKvB,GAAGA,EAAE,KAAK2B,EAAEJ,KAAK,IAAIvB,IAAI,GAAGA,EAAE,MAAM2B,EAAEJ,KAAK,IAAIvB,IAAI,IAAI2B,EAAEJ,KAAK,IAAIvB,IAAI,GAAG2B,EAAEJ,KAAK,IAAIvB,IAAI,GAAG,IAAI2B,EAAEJ,KAAK,IAAIvB,IAAI,EAAE,IAAI2B,EAAEJ,KAAK,IAAI,GAAGvB,GAAG,OAAO2B,GAAG3B,EAAEwZ,cAAc,SAASrZ,GAAG,OAAOY,EAAEZ,EAAEA,EAAEX,SAASQ,EAAEyZ,cAAc,SAAStZ,GAAG,IAAI,IAAIwB,EAAE,IAAI6S,EAAE2E,KAAKhZ,EAAEX,QAAQQ,EAAE,EAAEkC,EAAEP,EAAEnC,OAAOQ,EAAEkC,EAAElC,IAAI2B,EAAE3B,GAAGG,EAAEoR,WAAWvR,GAAG,OAAO2B,GAAG3B,EAAE0Z,WAAW,SAASvZ,EAAEwB,GAAG,IAAI3B,EAAEkC,EAAE8F,EAAEzG,EAAEL,EAAES,GAAGxB,EAAEX,OAAO+C,EAAE,IAAIoD,MAAM,EAAEzE,GAAG,IAAIlB,EAAEkC,EAAE,EAAElC,EAAEkB,GAAG,IAAI8G,EAAE7H,EAAEH,MAAM,IAAIuC,EAAEL,KAAK8F,OAAO,GAAG,GAAGzG,EAAEtB,EAAE+H,IAAIzF,EAAEL,KAAK,MAAMlC,GAAGuB,EAAE,MAAM,CAAC,IAAIyG,GAAG,IAAIzG,EAAE,GAAG,IAAIA,EAAE,GAAG,EAAE,EAAEA,GAAGvB,EAAEkB,GAAG8G,EAAEA,GAAG,EAAE,GAAG7H,EAAEH,KAAKuB,IAAI,EAAEA,EAAEgB,EAAEL,KAAK,MAAM8F,EAAE,MAAMzF,EAAEL,KAAK8F,GAAGA,GAAG,MAAMzF,EAAEL,KAAK,MAAM8F,GAAG,GAAG,KAAKzF,EAAEL,KAAK,MAAM,KAAK8F,GAAG,OAAOjH,EAAEwB,EAAEL,IAAIlC,EAAE2Z,WAAW,SAASxZ,EAAEwB,GAAG,IAAI3B,EAAE,KAAK2B,EAAEA,GAAGxB,EAAEX,QAAQW,EAAEX,SAASmC,EAAExB,EAAEX,QAAQQ,EAAE2B,EAAE,EAAE,GAAG3B,GAAG,MAAM,IAAIG,EAAEH,KAAKA,IAAI,OAAOA,EAAE,GAAI,IAAIA,EAAN2B,EAAU3B,EAAEC,EAAEE,EAAEH,IAAI2B,EAAE3B,EAAE2B,IAAI,CAAC,WAAW,IAAIiY,EAAE,CAAC,SAASzZ,EAAEwB,EAAE3B,GAAG,aAAa2B,EAAE7B,QAAQ,SAASK,EAAEwB,EAAE3B,EAAEkC,GAAG,IAAI,IAAI8F,EAAE,MAAM7H,EAAE,EAAEoB,EAAEpB,IAAI,GAAG,MAAM,EAAEe,EAAE,EAAE,IAAIlB,GAAG,CAAC,IAAIA,GAAGkB,EAAE,IAAIlB,EAAE,IAAIA,EAAEuB,EAAEA,GAAGyG,EAAEA,EAAErG,EAAEO,KAAK,GAAG,IAAIhB,IAAI8G,GAAG,MAAMzG,GAAG,MAAM,OAAOyG,EAAEzG,GAAG,GAAG,IAAI,IAAIsY,EAAE,CAAC,SAAS1Z,EAAEwB,EAAE3B,GAAG,aAAa2B,EAAE7B,QAAQ,CAACga,WAAW,EAAEC,gBAAgB,EAAEC,aAAa,EAAEC,aAAa,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,aAAa,EAAEC,YAAY,EAAEC,SAAS,EAAEC,gBAAgB,EAAEC,cAAc,EAAEC,aAAa,EAAEC,iBAAiB,EAAEC,aAAa,EAAEC,mBAAmB,EAAEC,uBAAuB,EAAEC,WAAW,EAAEC,eAAe,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,mBAAmB,EAAEC,SAAS,EAAEC,OAAO,EAAEC,UAAU,EAAEC,WAAW,IAAI,IAAIC,EAAE,CAAC,SAAStb,EAAEwB,EAAE3B,GAAG,aAAa,IAAIuC,EAAE,WAAW,IAAI,IAAIpC,EAAEwB,EAAE,GAAG3B,EAAE,EAAEA,EAAE,IAAIA,IAAI,CAACG,EAAEH,EAAE,IAAI,IAAIkC,EAAE,EAAEA,EAAE,EAAEA,IAAI/B,EAAE,EAAEA,EAAE,WAAWA,IAAI,EAAEA,IAAI,EAAEwB,EAAE3B,GAAGG,EAAE,OAAOwB,EAA5G,GAAiHA,EAAE7B,QAAQ,SAASK,EAAEwB,EAAE3B,EAAEkC,GAAG,IAAI8F,EAAEzF,EAAEhB,EAAEW,EAAElC,EAAEG,IAAI,EAAE,IAAI,IAAIe,EAAEgB,EAAEhB,EAAEK,EAAEL,IAAIf,EAAEA,IAAI,EAAE6H,EAAE,KAAK7H,EAAEwB,EAAET,KAAK,OAAO,EAAEf,IAAI,IAAIub,EAAE,CAAC,SAASvb,EAAEwB,EAAE3B,GAAG,aAAa2B,EAAE7B,QAAQ,WAAWX,KAAKgU,KAAK,EAAEhU,KAAKwc,KAAK,EAAExc,KAAKyc,OAAO,EAAEzc,KAAK0c,GAAG,EAAE1c,KAAK2c,MAAM,KAAK3c,KAAK4c,UAAU,EAAE5c,KAAK6B,KAAK,GAAG7B,KAAK6c,QAAQ,GAAG7c,KAAK8c,KAAK,EAAE9c,KAAK+c,MAAK,IAAK,IAAIC,EAAE,CAAC,SAAShc,EAAEwB,EAAE3B,GAAG,aAAa2B,EAAE7B,QAAQ,SAASK,EAAEwB,GAAG,IAAI3B,EAAEkC,EAAE8F,EAAEzG,EAAEL,EAAEqB,EAAEiS,EAAEvU,EAAEc,EAAED,EAAEsb,EAAE/H,EAAEzP,EAAE/D,EAAEgG,EAAEtB,EAAE8W,EAAEhU,EAAED,EAAEzH,EAAE+F,EAAEY,EAAEmJ,EAAE6F,EAAEgG,EAAEtc,EAAEG,EAAEkM,MAAMnK,EAAE/B,EAAEoc,QAAQjG,EAAEnW,EAAE4E,MAAMiD,EAAE9F,GAAG/B,EAAEqc,SAAS,GAAGjb,EAAEpB,EAAEsc,SAASH,EAAEnc,EAAEuc,OAAOxb,EAAEK,GAAGI,EAAExB,EAAEwc,WAAWpa,EAAEhB,GAAGpB,EAAEwc,UAAU,KAAKnI,EAAExU,EAAE4c,KAAK3c,EAAED,EAAE6c,MAAM9b,EAAEf,EAAE8c,MAAMhc,EAAEd,EAAE+c,MAAMX,EAAEpc,EAAE0L,OAAO2I,EAAErU,EAAEgd,KAAKpY,EAAE5E,EAAE2J,KAAK9I,EAAEb,EAAEid,QAAQpW,EAAE7G,EAAEkd,SAAS3X,GAAG,GAAGvF,EAAEmd,SAAS,EAAEd,GAAG,GAAGrc,EAAEod,UAAU,EAAEjd,EAAE,EAAE,CAACyE,EAAE,KAAKyP,GAAGiC,EAAEpU,MAAM0C,EAAEA,GAAG,EAAEyP,GAAGiC,EAAEpU,MAAM0C,EAAEA,GAAG,GAAGyD,EAAExH,EAAEwT,EAAE9O,GAAG5D,EAAE,OAAO,CAAC,GAAG0S,KAAKjM,EAAEC,IAAI,GAAGzD,GAAGwD,EAAE,IAAKA,EAAEC,IAAI,GAAG,KAAKiU,EAAE/a,KAAK,MAAM8G,MAAM,CAAC,KAAK,GAAGD,GAAG,CAAC,GAAG,IAAI,GAAGA,GAAG,CAACC,EAAExH,GAAG,MAAMwH,IAAIgM,GAAG,GAAGjM,GAAG,IAAI,SAASzG,EAAE,GAAG,GAAGyG,EAAE,CAACpI,EAAE4B,KAAK,GAAG,MAAMzB,EAAEA,EAAEkd,IAAI,8BAA8Brd,EAAE4B,KAAK,GAAG,MAAMzB,EAAEQ,EAAE,MAAM0H,GAAGD,GAAG,MAAMxD,EAAEwD,IAAIiM,GAAGiC,EAAEpU,MAAM0C,EAAEA,GAAG,GAAGjE,GAAG0T,GAAG,GAAGjM,GAAG,EAAEiM,KAAKjM,EAAExD,GAAGwD,GAAGxD,EAAE,KAAKyP,GAAGiC,EAAEpU,MAAM0C,EAAEA,GAAG,EAAEyP,GAAGiC,EAAEpU,MAAM0C,EAAEA,GAAG,GAAGyD,EAAExB,EAAEwN,EAAEgI,GAAGrc,EAAE,OAAO,CAAC,GAAGqU,KAAKjM,EAAEC,IAAI,GAAGzD,GAAGwD,IAAI,IAAIA,EAAEC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,GAAGD,GAAG,CAACC,EAAExB,GAAG,MAAMwB,IAAIgM,GAAG,GAAGjM,GAAG,IAAI,SAASpI,EAAEG,EAAEkd,IAAI,wBAAwBrd,EAAE4B,KAAK,GAAG,MAAMzB,EAAE,GAAGuG,EAAE,MAAM2B,EAAEzD,GAAGwD,GAAG,MAAMiM,GAAGiC,EAAEpU,MAAM0C,GAAGA,GAAG,GAAGwD,IAAIiM,GAAGiC,EAAEpU,MAAM0C,EAAEA,GAAG,IAAI4P,GAAG9N,GAAG2N,GAAG,GAAGjM,GAAG,GAAG,CAACjI,EAAEkd,IAAI,gCAAgCrd,EAAE4B,KAAK,GAAG,MAAMzB,EAAE,GAAGkU,KAAKjM,EAAExD,GAAGwD,GAAGA,EAAE7G,EAAEL,GAAGwF,EAAE,CAAC,GAAG3F,GAAGqH,EAAE1B,EAAE0B,IAAIpI,EAAEsd,KAAK,CAACnd,EAAEkd,IAAI,gCAAgCrd,EAAE4B,KAAK,GAAG,MAAMzB,EAAE,GAAGsQ,EAAE2L,GAAG9U,EAAE,KAAKxG,GAAG,GAAGwG,GAAGrH,EAAEmI,EAAEA,EAAEzH,EAAE,CAAC,IAAIA,GAAGyH,EAAEkU,EAAE/a,KAAK6a,EAAE9U,OAAOc,IAAId,EAAE/F,EAAEmF,EAAE+J,EAAE6L,QAAQ,GAAGxb,EAAEsH,GAAG,GAAGd,GAAGrH,EAAEa,EAAEsH,GAAGA,GAAGtH,GAAGH,EAAE,CAAC,IAAIA,GAAGyH,EAAEkU,EAAE/a,KAAK6a,EAAE9U,OAAOc,IAAI,GAAGd,EAAE,EAAExG,EAAEH,EAAE,CAAC,IAAIA,GAAGyH,EAAEtH,EAAEwb,EAAE/a,KAAK6a,EAAE9U,OAAOc,IAAId,EAAE/F,EAAEmF,EAAE+J,EAAE6L,SAAS,GAAGhV,GAAGxG,EAAEsH,EAAEA,EAAEzH,EAAE,CAAC,IAAIA,GAAGyH,EAAEkU,EAAE/a,KAAK6a,EAAE9U,OAAOc,IAAId,EAAE/F,EAAEmF,EAAE+J,EAAE6L,EAAE,KAAK,EAAE3b,GAAG2b,EAAE/a,KAAKkP,EAAEnJ,KAAKgV,EAAE/a,KAAKkP,EAAEnJ,KAAKgV,EAAE/a,KAAKkP,EAAEnJ,KAAK3G,GAAG,EAAEA,IAAI2b,EAAE/a,KAAKkP,EAAEnJ,KAAK,EAAE3G,IAAI2b,EAAE/a,KAAKkP,EAAEnJ,WAAW,CAAC,IAAIA,EAAE/F,EAAEmF,EAAE4V,EAAE/a,KAAK+a,EAAEhV,KAAKgV,EAAE/a,KAAK+a,EAAEhV,KAAKgV,EAAE/a,KAAK+a,EAAEhV,KAAK,GAAG3G,GAAG,KAAKA,IAAI2b,EAAE/a,KAAK+a,EAAEhV,KAAK,EAAE3G,IAAI2b,EAAE/a,KAAK+a,EAAEhV,OAAO,OAAO,aAAapF,EAAE8F,GAAGzG,EAAEgB,GAAGL,GAAGvB,EAAEiE,GAAG,EAAEyP,IAAI,IAAIzP,GAAGjE,GAAG,IAAI,EAAER,EAAEoc,QAAQra,EAAE/B,EAAEsc,SAASlb,EAAEpB,EAAEqc,SAASta,EAAE8F,EAAEA,EAAE9F,EAAE,EAAE,GAAGA,EAAE8F,GAAG7H,EAAEwc,UAAUpb,EAAEgB,EAAEA,EAAEhB,EAAE,IAAI,KAAKA,EAAEgB,GAAGvC,EAAEgd,KAAK3I,EAAErU,EAAE2J,KAAK/E,IAAI,IAAI2Y,EAAE,CAAC,SAASpd,EAAEwB,EAAE3B,GAAG,aAAa,IAAI4G,EAAEzG,EAAE,mBAAmBqd,EAAErd,EAAE,aAAaiW,EAAEjW,EAAE,WAAWsd,EAAEtd,EAAE,aAAaud,EAAEvd,EAAE,cAA0Bwd,GAAG,EAAkB,SAASC,EAAEzd,GAAG,OAAOA,IAAI,GAAG,MAAMA,IAAI,EAAE,SAAS,MAAMA,IAAI,KAAK,IAAIA,IAAI,IAAI,SAASoB,IAAIpC,KAAKyC,KAAK,EAAEzC,KAAK0e,MAAK,EAAG1e,KAAK2e,KAAK,EAAE3e,KAAK4e,UAAS,EAAG5e,KAAK6e,MAAM,EAAE7e,KAAKyd,KAAK,EAAEzd,KAAK8e,MAAM,EAAE9e,KAAK+e,MAAM,EAAE/e,KAAKgf,KAAK,KAAKhf,KAAKif,MAAM,EAAEjf,KAAK0d,MAAM,EAAE1d,KAAK2d,MAAM,EAAE3d,KAAK4d,MAAM,EAAE5d,KAAKuM,OAAO,KAAKvM,KAAK6d,KAAK,EAAE7d,KAAKwK,KAAK,EAAExK,KAAKK,OAAO,EAAEL,KAAKuU,OAAO,EAAEvU,KAAK2c,MAAM,EAAE3c,KAAK8d,QAAQ,KAAK9d,KAAK+d,SAAS,KAAK/d,KAAKge,QAAQ,EAAEhe,KAAKie,SAAS,EAAEje,KAAKkf,MAAM,EAAElf,KAAKmf,KAAK,EAAEnf,KAAKof,MAAM,EAAEpf,KAAKqf,KAAK,EAAErf,KAAK8Y,KAAK,KAAK9Y,KAAKsf,KAAK,IAAI7X,EAAEwS,MAAM,KAAKja,KAAKuf,KAAK,IAAI9X,EAAEwS,MAAM,KAAKja,KAAKwf,OAAO,KAAKxf,KAAKyf,QAAQ,KAAKzf,KAAKme,KAAK,EAAEne,KAAK0f,KAAK,EAAE1f,KAAK2f,IAAI,EAAE,SAAS5d,EAAEf,GAAG,IAAIwB,EAAE,OAAOxB,GAAGA,EAAEkM,OAAO1K,EAAExB,EAAEkM,MAAMlM,EAAE4e,SAAS5e,EAAE6e,UAAUrd,EAAEuc,MAAM,EAAE/d,EAAEkd,IAAI,GAAG1b,EAAEmc,OAAO3d,EAAE8e,MAAM,EAAEtd,EAAEmc,MAAMnc,EAAEC,KAA9tB,EAAquBD,EAAEkc,KAAK,EAAElc,EAAEoc,SAAS,EAAEpc,EAAEib,KAAK,MAAMjb,EAAEwc,KAAK,KAAKxc,EAAEqb,KAAK,EAAErb,EAAEgI,KAAK,EAAEhI,EAAEsb,QAAQtb,EAAEgd,OAAO,IAAI/X,EAAEyS,MAA3zB,KAAo0B1X,EAAEub,SAASvb,EAAEid,QAAQ,IAAIhY,EAAEyS,MAAz1B,KAAk2B1X,EAAE2b,KAAK,EAAE3b,EAAEkd,MAAM,EAAt4B,GAA24BlB,EAAE,SAASpb,EAAEpC,GAAG,IAAIwB,EAAE,OAAOxB,GAAGA,EAAEkM,QAAQ1K,EAAExB,EAAEkM,OAAOwQ,MAAM,EAAElb,EAAEmb,MAAM,EAAEnb,EAAEob,MAAM,EAAE7b,EAAEf,IAAIwd,EAAE,SAASnJ,EAAErU,EAAEwB,GAAG,IAAI3B,EAAEkC,EAAE,OAAO/B,GAAGA,EAAEkM,OAAOnK,EAAE/B,EAAEkM,MAAM1K,EAAE,GAAG3B,EAAE,EAAE2B,GAAGA,IAAI3B,EAAE,GAAG2B,GAAG,GAAGA,EAAE,KAAKA,GAAG,KAAKA,IAAIA,EAAE,GAAG,GAAGA,GAAGgc,GAAG,OAAOzb,EAAEwJ,QAAQxJ,EAAEkc,QAAQzc,IAAIO,EAAEwJ,OAAO,MAAMxJ,EAAE4b,KAAK9d,EAAEkC,EAAEkc,MAAMzc,EAAEY,EAAEpC,KAAKwd,EAAE,SAAS1d,EAAEE,EAAEwB,GAAG,IAAI3B,EAAEkC,EAAE,OAAO/B,GAAG+B,EAAE,IAAIX,GAAGpB,EAAEkM,MAAMnK,GAAGwJ,OAAO,KAA5tC,KAAkuC1L,EAAEwU,EAAErU,EAAEwB,MAAUxB,EAAEkM,MAAM,MAAMrM,GAAG2d,EAAE,IAAI5c,EAAED,EAAEsb,GAAE,EAAG,SAAS8C,EAAE/e,GAAG,GAAGic,EAAE,CAAC,IAAIza,EAAE,IAAIZ,EAAE,IAAI6F,EAAEyS,MAAM,KAAKvY,EAAE,IAAI8F,EAAEyS,MAAM,IAAI1X,EAAE,EAAEA,EAAE,KAAKxB,EAAEse,KAAK9c,KAAK,EAAE,KAAKA,EAAE,KAAKxB,EAAEse,KAAK9c,KAAK,EAAE,KAAKA,EAAE,KAAKxB,EAAEse,KAAK9c,KAAK,EAAE,KAAKA,EAAE,KAAKxB,EAAEse,KAAK9c,KAAK,EAAE,IAAI+b,EAAx8C,EAA48Cvd,EAAEse,KAAK,EAAE,IAAI1d,EAAE,EAAEZ,EAAEue,KAAK,CAAC/U,KAAK,IAAIhI,EAAE,EAAEA,EAAE,IAAIxB,EAAEse,KAAK9c,KAAK,EAAE+b,EAAlgD,EAAsgDvd,EAAEse,KAAK,EAAE,GAAG3d,EAAE,EAAEX,EAAEue,KAAK,CAAC/U,KAAK,IAAIyS,GAAE,EAAGjc,EAAE8c,QAAQlc,EAAEZ,EAAEgd,QAAQ,EAAEhd,EAAE+c,SAASpc,EAAEX,EAAEid,SAAS,EAAE,SAASzW,EAAExG,EAAEwB,EAAE3B,EAAEkC,GAAG,IAAI8F,EAAEzG,EAAEpB,EAAEkM,MAAM,OAAO,OAAO9K,EAAEmK,SAASnK,EAAEsb,MAAM,GAAGtb,EAAE6c,MAAM7c,EAAEwb,MAAM,EAAExb,EAAEub,MAAM,EAAEvb,EAAEmK,OAAO,IAAI9E,EAAEuS,KAAK5X,EAAEsb,QAAQ3a,GAAGX,EAAEsb,OAAOjW,EAAEoS,SAASzX,EAAEmK,OAAO/J,EAAE3B,EAAEuB,EAAEsb,MAAMtb,EAAEsb,MAAM,GAAGtb,EAAEwb,MAAM,EAAExb,EAAEub,MAAMvb,EAAEsb,QAAQ3a,GAAG8F,EAAEzG,EAAEsb,MAAMtb,EAAEwb,SAAS/U,EAAE9F,GAAG0E,EAAEoS,SAASzX,EAAEmK,OAAO/J,EAAE3B,EAAEkC,EAAE8F,EAAEzG,EAAEwb,QAAQ7a,GAAG8F,IAAIpB,EAAEoS,SAASzX,EAAEmK,OAAO/J,EAAE3B,EAAEkC,EAAEA,EAAE,GAAGX,EAAEwb,MAAM7a,EAAEX,EAAEub,MAAMvb,EAAEsb,QAAQtb,EAAEwb,OAAO/U,EAAEzG,EAAEwb,QAAQxb,EAAEsb,QAAQtb,EAAEwb,MAAM,GAAGxb,EAAEub,MAAMvb,EAAEsb,QAAQtb,EAAEub,OAAO9U,KAAK,EAAEhI,EAAEmf,aAAa5c,EAAEvC,EAAEof,cAAc5K,EAAExU,EAAEqf,iBAAiBne,EAAElB,EAAEsf,YAAY,SAASnf,GAAG,OAAOF,EAAEE,EAAE,KAAKH,EAAEuf,aAAatf,EAAED,EAAE4X,QAAQ,SAASzX,EAAEwB,GAAG,IAAI3B,EAAEkC,EAAE8F,EAAEzG,EAAEL,EAAEqB,EAAEiS,EAAEvU,EAAEc,EAAED,EAAEsb,EAAE/H,EAAEzP,EAAE/D,EAAEgG,EAAEtB,EAAE8W,EAAEhU,EAAED,EAAEzH,EAAE+F,EAAEY,EAAEmJ,EAAE6F,EAAEgG,EAAE,EAAEkD,EAAE,IAAI5Y,EAAEuS,KAAK,GAAGsG,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAItf,IAAIA,EAAEkM,QAAQlM,EAAEuc,SAASvc,EAAE4E,OAAO,IAAI5E,EAAEqc,SAAS,OAAOmB,EAAE,MAAM3d,EAAEG,EAAEkM,OAAOzK,OAAO5B,EAAE4B,KAAK,IAAIV,EAAEf,EAAEsc,SAASzU,EAAE7H,EAAEuc,OAAOlI,EAAErU,EAAEwc,UAAUpb,EAAEpB,EAAEoc,QAAQra,EAAE/B,EAAE4E,MAAMxC,EAAEpC,EAAEqc,SAASvc,EAAED,EAAEgd,KAAKjc,EAAEf,EAAE2J,KAAK7I,EAAEyB,EAAE6Z,EAAE5H,EAAElN,EAA18E,EAA88EnH,EAAE,OAAO,OAAOH,EAAE4B,MAAM,KAA79E,EAAo+E,GAAG,IAAI5B,EAAE8d,KAAK,CAAC9d,EAAE4B,KAAK,GAAG,MAAM,KAAKb,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAG,EAAEf,EAAE8d,MAAM,QAAQ7d,EAAE,CAACuf,EAAExf,EAAEie,MAAM,GAAG,IAAIhe,EAAEuf,EAAE,GAAGvf,IAAI,EAAE,IAAID,EAAEie,MAAM7H,EAAEpW,EAAEie,MAAMuB,EAAE,EAAE,GAAGze,EAAEd,EAAE,EAAED,EAAE4B,KAAK,EAAE,MAAM,GAAG5B,EAAEge,MAAM,EAAEhe,EAAEme,OAAOne,EAAEme,KAAKjC,MAAK,KAAM,EAAElc,EAAE8d,UAAU,IAAI7d,IAAI,IAAIA,GAAG,IAAI,GAAG,CAACE,EAAEkd,IAAI,yBAAyBrd,EAAE4B,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG3B,GAAG,CAACE,EAAEkd,IAAI,6BAA6Brd,EAAE4B,KAAK,GAAG,MAAM,GAAGb,GAAG,EAAE2F,EAAE,GAAG,IAAIzG,KAAK,IAAI,IAAID,EAAEoe,MAAMpe,EAAEoe,MAAM1X,OAAO,GAAGA,EAAE1G,EAAEoe,MAAM,CAACje,EAAEkd,IAAI,sBAAsBrd,EAAE4B,KAAK,GAAG,MAAM5B,EAAE4c,KAAK,GAAGlW,EAAEvG,EAAE8e,MAAMjf,EAAEie,MAAM,EAAEje,EAAE4B,KAAK,IAAI3B,EAAE,GAAG,GAAGc,EAAEd,EAAE,EAAE,MAAM,KAAK,EAAE,KAAKc,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAGf,EAAEge,MAAM/d,EAAE,IAAI,IAAID,EAAEge,OAAO,CAAC7d,EAAEkd,IAAI,6BAA6Brd,EAAE4B,KAAK,GAAG,MAAM,GAAG,MAAM5B,EAAEge,MAAM,CAAC7d,EAAEkd,IAAI,2BAA2Brd,EAAE4B,KAAK,GAAG,MAAM5B,EAAEme,OAAOne,EAAEme,KAAKhL,KAAKlT,GAAG,EAAE,GAAG,IAAID,EAAEge,QAAQwB,EAAE,GAAG,IAAIvf,EAAEuf,EAAE,GAAGvf,IAAI,EAAE,IAAID,EAAEie,MAAM7H,EAAEpW,EAAEie,MAAMuB,EAAE,EAAE,IAAIze,EAAEd,EAAE,EAAED,EAAE4B,KAAK,EAAE,KAAK,EAAE,KAAKb,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEf,EAAEme,OAAOne,EAAEme,KAAKxC,KAAK1b,GAAG,IAAID,EAAEge,QAAQwB,EAAE,GAAG,IAAIvf,EAAEuf,EAAE,GAAGvf,IAAI,EAAE,IAAIuf,EAAE,GAAGvf,IAAI,GAAG,IAAIuf,EAAE,GAAGvf,IAAI,GAAG,IAAID,EAAEie,MAAM7H,EAAEpW,EAAEie,MAAMuB,EAAE,EAAE,IAAIze,EAAEd,EAAE,EAAED,EAAE4B,KAAK,EAAE,KAAK,EAAE,KAAKb,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEf,EAAEme,OAAOne,EAAEme,KAAKvC,OAAO,IAAI3b,EAAED,EAAEme,KAAKtC,GAAG5b,GAAG,GAAG,IAAID,EAAEge,QAAQwB,EAAE,GAAG,IAAIvf,EAAEuf,EAAE,GAAGvf,IAAI,EAAE,IAAID,EAAEie,MAAM7H,EAAEpW,EAAEie,MAAMuB,EAAE,EAAE,IAAIze,EAAEd,EAAE,EAAED,EAAE4B,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK5B,EAAEge,MAAM,CAAC,KAAKjd,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEf,EAAER,OAAOS,EAAED,EAAEme,OAAOne,EAAEme,KAAKpC,UAAU9b,GAAG,IAAID,EAAEge,QAAQwB,EAAE,GAAG,IAAIvf,EAAEuf,EAAE,GAAGvf,IAAI,EAAE,IAAID,EAAEie,MAAM7H,EAAEpW,EAAEie,MAAMuB,EAAE,EAAE,IAAIze,EAAEd,EAAE,OAAOD,EAAEme,OAAOne,EAAEme,KAAKrC,MAAM,MAAM9b,EAAE4B,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK5B,EAAEge,QAAQzb,GAAG8R,EAAErU,EAAER,UAAU6U,EAAE9R,GAAG8R,IAAIrU,EAAEme,OAAOzX,EAAE1G,EAAEme,KAAKpC,UAAU/b,EAAER,OAAOQ,EAAEme,KAAKrC,QAAQ9b,EAAEme,KAAKrC,MAAM,IAAInW,MAAM3F,EAAEme,KAAKpC,YAAYnV,EAAEoS,SAAShZ,EAAEme,KAAKrC,MAAM5Z,EAAEX,EAAE8S,EAAE3N,IAAI,IAAI1G,EAAEge,QAAQhe,EAAEie,MAAM7H,EAAEpW,EAAEie,MAAM/b,EAAEmS,EAAE9S,IAAIgB,GAAG8R,EAAE9S,GAAG8S,EAAErU,EAAER,QAAQ6U,GAAGrU,EAAER,QAAQ,MAAMW,EAAEH,EAAER,OAAO,EAAEQ,EAAE4B,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK5B,EAAEge,MAAM,CAAC,GAAG,IAAIzb,EAAE,MAAMpC,EAAE,IAAIkU,EAAE,EAAE3N,EAAExE,EAAEX,EAAE8S,KAAKrU,EAAEme,MAAMzX,GAAG1G,EAAER,OAAO,QAAQQ,EAAEme,KAAKnd,MAAMgT,OAAOC,aAAavN,IAAIA,GAAG2N,EAAE9R,IAAI,GAAG,IAAIvC,EAAEge,QAAQhe,EAAEie,MAAM7H,EAAEpW,EAAEie,MAAM/b,EAAEmS,EAAE9S,IAAIgB,GAAG8R,EAAE9S,GAAG8S,EAAE3N,EAAE,MAAMvG,OAAOH,EAAEme,OAAOne,EAAEme,KAAKnd,KAAK,MAAMhB,EAAER,OAAO,EAAEQ,EAAE4B,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK5B,EAAEge,MAAM,CAAC,GAAG,IAAIzb,EAAE,MAAMpC,EAAE,IAAIkU,EAAE,EAAE3N,EAAExE,EAAEX,EAAE8S,KAAKrU,EAAEme,MAAMzX,GAAG1G,EAAER,OAAO,QAAQQ,EAAEme,KAAKnC,SAAShI,OAAOC,aAAavN,IAAIA,GAAG2N,EAAE9R,IAAI,GAAG,IAAIvC,EAAEge,QAAQhe,EAAEie,MAAM7H,EAAEpW,EAAEie,MAAM/b,EAAEmS,EAAE9S,IAAIgB,GAAG8R,EAAE9S,GAAG8S,EAAE3N,EAAE,MAAMvG,OAAOH,EAAEme,OAAOne,EAAEme,KAAKnC,QAAQ,MAAMhc,EAAE4B,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI5B,EAAEge,MAAM,CAAC,KAAKjd,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAGd,KAAK,MAAMD,EAAEie,OAAO,CAAC9d,EAAEkd,IAAI,sBAAsBrd,EAAE4B,KAAK,GAAG,MAAMb,EAAEd,EAAE,EAAED,EAAEme,OAAOne,EAAEme,KAAKlC,KAAKjc,EAAEge,OAAO,EAAE,EAAEhe,EAAEme,KAAKjC,MAAK,GAAI/b,EAAE8e,MAAMjf,EAAEie,MAAM,EAAEje,EAAE4B,KAAK,GAAG,MAAM,KAAK,GAAG,KAAKb,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEZ,EAAE8e,MAAMjf,EAAEie,MAAML,EAAE3d,GAAGc,EAAEd,EAAE,EAAED,EAAE4B,KAAK,GAAG,KAAK,GAAG,GAAG,IAAI5B,EAAE+d,SAAS,OAAO5d,EAAEsc,SAASvb,EAAEf,EAAEwc,UAAUnI,EAAErU,EAAEoc,QAAQhb,EAAEpB,EAAEqc,SAASja,EAAEvC,EAAEgd,KAAK/c,EAAED,EAAE2J,KAAK5I,EAAE,EAAEZ,EAAE8e,MAAMjf,EAAEie,MAAM,EAAEje,EAAE4B,KAAK,GAAG,KAAK,GAAG,GAAG,IAAID,GAAG,IAAIA,EAAE,MAAMxB,EAAE,KAAK,GAAG,GAAGH,EAAE6d,KAAK,CAAC5d,KAAK,EAAEc,EAAEA,GAAG,EAAEA,EAAEf,EAAE4B,KAAK,GAAG,MAAM,KAAKb,EAAE,GAAG,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,OAAOf,EAAE6d,KAAK,EAAE5d,EAAEc,GAAG,EAAE,GAAGd,KAAK,IAAI,KAAK,EAAED,EAAE4B,KAAK,GAAG,MAAM,KAAK,EAAE,GAAGsd,EAAElf,GAAGA,EAAE4B,KAAK,GAAG,IAAID,EAAE,MAAM1B,KAAK,EAAEc,GAAG,EAAE,MAAMZ,EAAE,KAAK,EAAEH,EAAE4B,KAAK,GAAG,MAAM,KAAK,EAAEzB,EAAEkd,IAAI,qBAAqBrd,EAAE4B,KAAK,GAAG3B,KAAK,EAAEc,GAAG,EAAE,MAAM,KAAK,GAAG,IAAId,KAAK,EAAEc,EAAEA,GAAG,EAAEA,EAAEA,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,IAAI,MAAMd,KAAKA,IAAI,GAAG,OAAO,CAACE,EAAEkd,IAAI,+BAA+Brd,EAAE4B,KAAK,GAAG,MAAM,GAAG5B,EAAER,OAAO,MAAMS,EAAEc,EAAEd,EAAE,EAAED,EAAE4B,KAAK,GAAG,IAAID,EAAE,MAAMxB,EAAE,KAAK,GAAGH,EAAE4B,KAAK,GAAG,KAAK,GAAG,GAAGyS,EAAErU,EAAER,OAAO,CAAC,GAAG+C,EAAE8R,IAAIA,EAAE9R,GAAGiS,EAAEH,IAAIA,EAAEG,GAAG,IAAIH,EAAE,MAAMlU,EAAEyG,EAAEoS,SAAShR,EAAE9F,EAAEX,EAAE8S,EAAEnT,GAAGqB,GAAG8R,EAAE9S,GAAG8S,EAAEG,GAAGH,EAAEnT,GAAGmT,EAAErU,EAAER,QAAQ6U,EAAE,MAAMrU,EAAE4B,KAAK,GAAG,MAAM,KAAK,GAAG,KAAKb,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAGf,EAAEse,KAAK,KAAK,GAAGre,GAAGA,KAAK,EAAEc,GAAG,EAAEf,EAAEue,MAAM,GAAG,GAAGte,GAAGA,KAAK,EAAEc,GAAG,EAAEf,EAAEqe,MAAM,GAAG,GAAGpe,GAAGA,KAAK,EAAEc,GAAG,EAAE,IAAIf,EAAEse,MAAM,GAAGte,EAAEue,MAAM,CAACpe,EAAEkd,IAAI,sCAAsCrd,EAAE4B,KAAK,GAAG,MAAM5B,EAAEwe,KAAK,EAAExe,EAAE4B,KAAK,GAAG,KAAK,GAAG,KAAK5B,EAAEwe,KAAKxe,EAAEqe,OAAO,CAAC,KAAKtd,EAAE,GAAG,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEf,EAAEye,KAAKgB,EAAEzf,EAAEwe,SAAS,EAAEve,EAAEA,KAAK,EAAEc,GAAG,EAAE,KAAKf,EAAEwe,KAAK,IAAIxe,EAAEye,KAAKgB,EAAEzf,EAAEwe,SAAS,EAAE,GAAGxe,EAAEid,QAAQjd,EAAE2e,OAAO3e,EAAEmd,QAAQ,EAAE1M,EAAE,CAAC9G,KAAK3J,EAAEmd,SAAS7V,EAAEoW,EAAE,EAAE1d,EAAEye,KAAK,EAAE,GAAGze,EAAEid,QAAQ,EAAEjd,EAAE0e,KAAKjO,GAAGzQ,EAAEmd,QAAQ1M,EAAE9G,KAAKrC,EAAE,CAACnH,EAAEkd,IAAI,2BAA2Brd,EAAE4B,KAAK,GAAG,MAAM5B,EAAEwe,KAAK,EAAExe,EAAE4B,KAAK,GAAG,KAAK,GAAG,KAAK5B,EAAEwe,KAAKxe,EAAEse,KAAKte,EAAEue,OAAO,CAAC,KAAKhZ,GAAG+W,EAAEtc,EAAEid,QAAQhd,GAAG,GAAGD,EAAEmd,SAAS,MAAM,GAAG,IAAId,EAAE,MAAMC,KAAKzV,EAAEyV,IAAI,KAAKvb,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAGsb,EAAE,GAAGpc,KAAK4G,EAAE9F,GAAG8F,EAAE7G,EAAEye,KAAKze,EAAEwe,QAAQnC,MAAM,CAAC,GAAG,KAAKA,EAAE,CAAC,IAAI/F,EAAEzP,EAAE,EAAE9F,EAAEuV,GAAG,CAAC,GAAG,IAAI/T,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAGd,KAAK4G,EAAE9F,GAAG8F,EAAE,IAAI7G,EAAEwe,KAAK,CAACre,EAAEkd,IAAI,4BAA4Brd,EAAE4B,KAAK,GAAG,MAAM8E,EAAE1G,EAAEye,KAAKze,EAAEwe,KAAK,GAAGnK,EAAE,GAAG,EAAEpU,GAAGA,KAAK,EAAEc,GAAG,OAAO,GAAG,KAAKsb,EAAE,CAAC,IAAI/F,EAAEzP,EAAE,EAAE9F,EAAEuV,GAAG,CAAC,GAAG,IAAI/T,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEA,GAAG8F,EAAEH,EAAE,EAAE2N,EAAE,GAAG,GAAGpU,KAAK4G,IAAI5G,KAAK,EAAEc,GAAG,MAAM,CAAC,IAAIuV,EAAEzP,EAAE,EAAE9F,EAAEuV,GAAG,CAAC,GAAG,IAAI/T,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEA,GAAG8F,EAAEH,EAAE,EAAE2N,EAAE,IAAI,KAAKpU,KAAK4G,IAAI5G,KAAK,EAAEc,GAAG,EAAE,GAAGf,EAAEwe,KAAKnK,EAAErU,EAAEse,KAAKte,EAAEue,MAAM,CAACpe,EAAEkd,IAAI,4BAA4Brd,EAAE4B,KAAK,GAAG,MAAM,KAAKyS,KAAKrU,EAAEye,KAAKze,EAAEwe,QAAQ9X,GAAG,GAAG,KAAK1G,EAAE4B,KAAK,MAAM,GAAG,IAAI5B,EAAEye,KAAK,KAAK,CAACte,EAAEkd,IAAI,uCAAuCrd,EAAE4B,KAAK,GAAG,MAAM,GAAG5B,EAAEmd,QAAQ,EAAE1M,EAAE,CAAC9G,KAAK3J,EAAEmd,SAAS7V,EAAEoW,EAAltO,EAAstO1d,EAAEye,KAAK,EAAEze,EAAEse,KAAKte,EAAEid,QAAQ,EAAEjd,EAAE0e,KAAKjO,GAAGzQ,EAAEmd,QAAQ1M,EAAE9G,KAAKrC,EAAE,CAACnH,EAAEkd,IAAI,8BAA8Brd,EAAE4B,KAAK,GAAG,MAAM,GAAG5B,EAAEod,SAAS,EAAEpd,EAAEkd,SAASld,EAAE4e,QAAQnO,EAAE,CAAC9G,KAAK3J,EAAEod,UAAU9V,EAAEoW,EAA33O,EAA+3O1d,EAAEye,KAAKze,EAAEse,KAAKte,EAAEue,MAAMve,EAAEkd,SAAS,EAAEld,EAAE0e,KAAKjO,GAAGzQ,EAAEod,SAAS3M,EAAE9G,KAAKrC,EAAE,CAACnH,EAAEkd,IAAI,wBAAwBrd,EAAE4B,KAAK,GAAG,MAAM,GAAG5B,EAAE4B,KAAK,GAAG,IAAID,EAAE,MAAMxB,EAAE,KAAK,GAAGH,EAAE4B,KAAK,GAAG,KAAK,GAAG,GAAG,GAAGW,GAAG,KAAKiS,EAAE,CAACrU,EAAEsc,SAASvb,EAAEf,EAAEwc,UAAUnI,EAAErU,EAAEoc,QAAQhb,EAAEpB,EAAEqc,SAASja,EAAEvC,EAAEgd,KAAK/c,EAAED,EAAE2J,KAAK5I,EAAE0c,EAAEtd,EAAEic,GAAGlb,EAAEf,EAAEsc,SAASzU,EAAE7H,EAAEuc,OAAOlI,EAAErU,EAAEwc,UAAUpb,EAAEpB,EAAEoc,QAAQra,EAAE/B,EAAE4E,MAAMxC,EAAEpC,EAAEqc,SAASvc,EAAED,EAAEgd,KAAKjc,EAAEf,EAAE2J,KAAK,KAAK3J,EAAE4B,OAAO5B,EAAE6e,MAAM,GAAG,MAAM,IAAI7e,EAAE6e,KAAK,EAAEtZ,GAAG+W,EAAEtc,EAAEid,QAAQhd,GAAG,GAAGD,EAAEmd,SAAS,MAAM,GAAG,IAAId,EAAE,MAAMC,KAAKzV,EAAEyV,IAAI,KAAKvb,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAGwE,GAAG,IAAI,IAAIA,GAAG,CAAC,IAAI8C,EAAExB,EAAEuB,EAAE7C,EAAE5E,EAAE0b,EAAE9W,GAAG+W,EAAEtc,EAAEid,QAAQtc,IAAIV,GAAG,GAAGoI,EAAED,GAAG,IAAIC,OAAO,GAAG,IAAIgU,EAAE,MAAMC,IAAIjU,GAAGxB,EAAEyV,IAAI,KAAKvb,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEd,KAAKoI,EAAEtH,GAAGsH,EAAErI,EAAE6e,MAAMxW,EAAE,GAAGpI,KAAK4G,EAAE9F,GAAG8F,EAAE7G,EAAE6e,MAAMhY,EAAE7G,EAAER,OAAO6c,EAAE,IAAI9W,EAAE,CAACvF,EAAE4B,KAAK,GAAG,MAAM,GAAG,GAAG2D,EAAE,CAACvF,EAAE6e,MAAM,EAAE7e,EAAE4B,KAAK,GAAG,MAAM,GAAG,GAAG2D,EAAE,CAACpF,EAAEkd,IAAI,8BAA8Brd,EAAE4B,KAAK,GAAG,MAAM5B,EAAE8b,MAAM,GAAGvW,EAAEvF,EAAE4B,KAAK,GAAG,KAAK,GAAG,GAAG5B,EAAE8b,MAAM,CAAC,IAAIxF,EAAEtW,EAAE8b,MAAM/a,EAAEuV,GAAG,CAAC,GAAG,IAAI/T,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEf,EAAER,QAAQS,GAAG,GAAGD,EAAE8b,OAAO,EAAE7b,KAAKD,EAAE8b,MAAM/a,GAAGf,EAAE8b,MAAM9b,EAAE6e,MAAM7e,EAAE8b,MAAM9b,EAAE8e,IAAI9e,EAAER,OAAOQ,EAAE4B,KAAK,GAAG,KAAK,GAAG,KAAK2D,GAAG+W,EAAEtc,EAAEkd,SAASjd,GAAG,GAAGD,EAAEod,UAAU,MAAM,GAAG,IAAIf,EAAE,MAAMC,KAAKzV,EAAEyV,IAAI,KAAKvb,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAG,IAAI,IAAIwE,GAAG,CAAC,IAAI8C,EAAExB,EAAEuB,EAAE7C,EAAE5E,EAAE0b,EAAE9W,GAAG+W,EAAEtc,EAAEkd,SAASvc,IAAIV,GAAG,GAAGoI,EAAED,GAAG,IAAIC,OAAO,GAAG,IAAIgU,EAAE,MAAMC,IAAIjU,GAAGxB,EAAEyV,IAAI,KAAKvb,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEd,KAAKoI,EAAEtH,GAAGsH,EAAErI,EAAE6e,MAAMxW,EAAE,GAAGpI,KAAK4G,EAAE9F,GAAG8F,EAAE7G,EAAE6e,MAAMhY,EAAE,GAAGtB,EAAE,CAACpF,EAAEkd,IAAI,wBAAwBrd,EAAE4B,KAAK,GAAG,MAAM5B,EAAE0T,OAAO2I,EAAErc,EAAE8b,MAAM,GAAGvW,EAAEvF,EAAE4B,KAAK,GAAG,KAAK,GAAG,GAAG5B,EAAE8b,MAAM,CAAC,IAAIxF,EAAEtW,EAAE8b,MAAM/a,EAAEuV,GAAG,CAAC,GAAG,IAAI/T,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAEf,EAAE0T,QAAQzT,GAAG,GAAGD,EAAE8b,OAAO,EAAE7b,KAAKD,EAAE8b,MAAM/a,GAAGf,EAAE8b,MAAM9b,EAAE6e,MAAM7e,EAAE8b,MAAM,GAAG9b,EAAE0T,OAAO1T,EAAE4c,KAAK,CAACzc,EAAEkd,IAAI,gCAAgCrd,EAAE4B,KAAK,GAAG,MAAM5B,EAAE4B,KAAK,GAAG,KAAK,GAAG,GAAG,IAAI4S,EAAE,MAAMrU,EAAE,GAAGkU,EAAE+H,EAAE5H,EAAExU,EAAE0T,OAAOW,EAAE,CAAC,IAAIA,EAAErU,EAAE0T,OAAOW,GAAGrU,EAAE8c,OAAO9c,EAAEsd,KAAK,CAACnd,EAAEkd,IAAI,gCAAgCrd,EAAE4B,KAAK,GAAG,MAAMyS,EAAErU,EAAE+c,OAAO1I,GAAGrU,EAAE+c,MAAMnY,EAAE5E,EAAE6c,MAAMxI,GAAGzP,EAAE5E,EAAE+c,MAAM1I,EAAEA,EAAErU,EAAER,SAAS6U,EAAErU,EAAER,QAAQqB,EAAEb,EAAE0L,YAAY7K,EAAEmH,EAAEpD,EAAE1D,EAAElB,EAAE0T,OAAOW,EAAErU,EAAER,OAAO,IAAIgV,EAAEH,IAAIA,EAAEG,GAAGA,GAAGH,EAAErU,EAAER,QAAQ6U,EAAErM,EAAE9G,KAAKL,EAAE+D,OAAOyP,IAAI,IAAIrU,EAAER,SAASQ,EAAE4B,KAAK,IAAI,MAAM,KAAK,GAAG,GAAG,IAAI4S,EAAE,MAAMrU,EAAE6H,EAAE9G,KAAKlB,EAAER,OAAOgV,IAAIxU,EAAE4B,KAAK,GAAG,MAAM,KAAK,GAAG,GAAG5B,EAAE8d,KAAK,CAAC,KAAK/c,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAGqb,GAAG5H,EAAErU,EAAE6e,WAAW5C,EAAEpc,EAAEke,OAAO9B,EAAEA,IAAIjc,EAAE8e,MAAMjf,EAAEie,MAAMje,EAAEge,MAAM5H,EAAEpW,EAAEie,MAAMjW,EAAEoU,EAAElb,EAAEkb,GAAGoB,EAAExd,EAAEie,MAAMjW,EAAEoU,EAAElb,EAAEkb,IAAIA,EAAE5H,GAAGxU,EAAEge,MAAM/d,EAAE2d,EAAE3d,MAAMD,EAAEie,MAAM,CAAC9d,EAAEkd,IAAI,uBAAuBrd,EAAE4B,KAAK,GAAG,MAAMb,EAAEd,EAAE,EAAED,EAAE4B,KAAK,GAAG,KAAK,GAAG,GAAG5B,EAAE8d,MAAM9d,EAAEge,MAAM,CAAC,KAAKjd,EAAE,IAAI,CAAC,GAAG,IAAIwB,EAAE,MAAMpC,EAAEoC,IAAItC,GAAGiC,EAAEX,MAAMR,EAAEA,GAAG,EAAE,GAAGd,KAAK,WAAWD,EAAEke,OAAO,CAAC/d,EAAEkd,IAAI,yBAAyBrd,EAAE4B,KAAK,GAAG,MAAMb,EAAEd,EAAE,EAAED,EAAE4B,KAAK,GAAG,KAAK,GAAG0F,EAAE,EAAE,MAAMnH,EAAE,KAAK,GAAGmH,GAAG,EAAE,MAAMnH,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,QAAQ,OAAOwd,EAAE,OAAOxd,EAAEsc,SAASvb,EAAEf,EAAEwc,UAAUnI,EAAErU,EAAEoc,QAAQhb,EAAEpB,EAAEqc,SAASja,EAAEvC,EAAEgd,KAAK/c,EAAED,EAAE2J,KAAK5I,GAAGf,EAAE6c,OAAOT,IAAIjc,EAAEwc,WAAW3c,EAAE4B,KAAK,KAAK5B,EAAE4B,KAAK,IAAI,IAAID,KAAKgF,EAAExG,EAAEA,EAAEuc,OAAOvc,EAAEsc,SAASL,EAAEjc,EAAEwc,YAAY3c,EAAE4B,KAAK,IAAI,IAAId,GAAGX,EAAEqc,SAASJ,GAAGjc,EAAEwc,UAAUxc,EAAE4e,UAAUje,EAAEX,EAAE6e,WAAW5C,EAAEpc,EAAEke,OAAO9B,EAAEpc,EAAE8d,MAAM1B,IAAIjc,EAAE8e,MAAMjf,EAAEie,MAAMje,EAAEge,MAAM5H,EAAEpW,EAAEie,MAAMjW,EAAEoU,EAAEjc,EAAEsc,SAASL,GAAGoB,EAAExd,EAAEie,MAAMjW,EAAEoU,EAAEjc,EAAEsc,SAASL,IAAIjc,EAAEuf,UAAU1f,EAAE2J,MAAM3J,EAAE6d,KAAK,GAAG,IAAI,KAAK7d,EAAE4B,KAAK,IAAI,IAAI,KAAK5B,EAAE4B,MAAM,KAAK5B,EAAE4B,KAAK,IAAI,IAAI,IAAId,GAAG,IAAIsb,GAAG,IAAIza,IAA91U,IAAk2U2F,IAAQA,GAAG,GAAGA,IAAItH,EAAE2f,WAAW,SAASxf,GAAG,IAAIA,IAAIA,EAAEkM,MAAM,OAAOsR,EAAE,IAAIhc,EAAExB,EAAEkM,MAAM,OAAO1K,EAAE+J,SAAS/J,EAAE+J,OAAO,MAAMvL,EAAEkM,MAAM,KAA79U,GAAq+UrM,EAAE4f,iBAAiB,SAASzf,EAAEwB,GAAG,IAAI3B,EAAE,OAAOG,GAAGA,EAAEkM,MAAM,IAAI,GAAGrM,EAAEG,EAAEkM,OAAOyR,MAAMH,IAAI3d,EAAEme,KAAKxc,GAAGua,MAAK,EAAzkV,GAA+kVyB,GAAG3d,EAAE6f,qBAAqB,SAAS1f,EAAEwB,GAAG,IAAI3B,EAAEkC,EAAEP,EAAEnC,OAAO,OAAOW,GAAGA,EAAEkM,MAAM,KAAKrM,EAAEG,EAAEkM,OAAOyR,MAAM,KAAK9d,EAAE4B,KAAK+b,EAAE,KAAK3d,EAAE4B,MAAM4b,EAAE,EAAE7b,EAAEO,EAAE,KAAKlC,EAAEie,OAAO,EAAEtX,EAAExG,EAAEwB,EAAEO,EAAEA,IAAIlC,EAAE4B,KAAK,IAAI,IAAI5B,EAAE+d,SAAS,EAAzwV,GAA8wVJ,GAAG3d,EAAE8f,YAAY,sCAAsC,CAAC,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,IAAIC,EAAE,CAAC,SAAS5f,EAAEwB,EAAE3B,GAAG,aAAa,IAAIggB,EAAE7f,EAAE,mBAAmB8f,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,GAAGC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIvC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,EAAE,GAAGwC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIxe,EAAE7B,QAAQ,SAASK,EAAEwB,EAAE3B,EAAEkC,EAAE8F,EAAEzG,EAAEL,EAAEqB,GAAG,IAAIiS,EAAEvU,EAAEc,EAAED,EAAEsb,EAAE/H,EAAEzP,EAAE/D,EAAEgG,EAAEtB,EAAEhD,EAAEoH,KAAK0S,EAAE,EAAEhU,EAAE,EAAED,EAAE,EAAEzH,EAAE,EAAE+F,EAAE,EAAEY,EAAE,EAAEmJ,EAAE,EAAE6F,EAAE,EAAEgG,EAAE,EAAEkD,EAAE,EAAEC,EAAE,KAAK7Y,EAAE,EAAE4W,EAAE,IAAIwC,EAAE5G,MAAM,IAAIhD,EAAE,IAAI4J,EAAE5G,MAAM,IAAIqE,EAAE,KAAKC,EAAE,EAAE,IAAIrB,EAAE,EAAEA,GAAG,GAAGA,IAAImB,EAAEnB,GAAG,EAAE,IAAIhU,EAAE,EAAEA,EAAEnG,EAAEmG,IAAImV,EAAE7b,EAAE3B,EAAEqI,MAAM,IAAI3B,EAAEnB,EAAE5E,EAAE,GAAG,GAAGA,GAAG,IAAI6c,EAAE7c,GAAGA,KAAK,GAAGA,EAAE+F,IAAIA,EAAE/F,GAAG,IAAIA,EAAE,OAAOqH,EAAEzG,KAAK,SAASyG,EAAEzG,KAAK,SAASgB,EAAEoH,KAAK,EAAE,EAAE,IAAIvB,EAAE,EAAEA,EAAEzH,GAAG,IAAI6c,EAAEpV,GAAGA,KAAK,IAAI1B,EAAE0B,IAAI1B,EAAE0B,GAAGiU,EAAE/F,EAAE,EAAE+F,GAAG,GAAGA,IAAI,GAAG/F,IAAI,GAAGA,GAAGkH,EAAEnB,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE/F,IAAI,IAAInW,GAAG,IAAIQ,GAAG,OAAO,EAAE,IAAIyV,EAAE,GAAG,EAAEiG,EAAE,EAAEA,EAAE,GAAGA,IAAIjG,EAAEiG,EAAE,GAAGjG,EAAEiG,GAAGmB,EAAEnB,GAAG,IAAIhU,EAAE,EAAEA,EAAEnG,EAAEmG,IAAI,IAAI1G,EAAE3B,EAAEqI,KAAKnH,EAAEkV,EAAEzU,EAAE3B,EAAEqI,OAAOA,GAAG,GAAG,IAAIlI,GAAGsf,EAAEhC,EAAEvc,EAAEmT,EAAE,IAAI,IAAIlU,GAAGsf,EAAEQ,EAAErZ,GAAG,IAAI6W,EAAEyC,EAAExC,GAAG,IAAIrJ,EAAE,MAAMoL,EAAE9B,EAAEF,EAAE0C,EAAE9L,GAAG,GAAGgI,EAAEjU,EAAEgU,EAAE7a,EAAEkP,EAAEpI,EAAEmX,EAAE,EAAEze,GAAG,EAAED,GAAGwb,EAAE,IAAIhV,EAAEZ,IAAI,EAAE,IAAIvG,GAAG,IAAImc,GAAG,IAAInc,GAAG,IAAImc,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI1X,EAAEyX,EAAE5L,EAAEvP,EAAEmH,GAAGgM,GAAGxT,EAAE,EAAEgG,EAAE3F,EAAEmH,IAAInH,EAAEmH,GAAGgM,GAAGxT,EAAE4c,EAAEC,EAAExc,EAAEmH,IAAIxB,EAAE4Y,EAAE7Y,EAAE1F,EAAEmH,MAAMxH,EAAE,GAAGgG,EAAE,GAAG2N,EAAE,GAAG6H,EAAE5L,EAAErI,EAAEnI,EAAE,GAAGqH,EAAEU,EAAEoU,GAAGoD,GAAG/O,IAAIxQ,GAAGuU,IAAI5P,GAAG,GAAG/D,GAAG,GAAGgG,EAAE,EAAE,IAAI5G,IAAI,IAAIuU,EAAE,GAAG6H,EAAE,EAAEmD,EAAEhL,GAAGA,IAAI,EAAE,GAAG,IAAIA,GAAGgL,GAAGhL,EAAE,EAAEgL,GAAGhL,GAAGgL,EAAE,EAAEnX,IAAI,KAAKmV,EAAEnB,GAAG,CAAC,GAAGA,IAAI1b,EAAE,MAAM0b,EAAE1a,EAAE3B,EAAEkB,EAAEmH,IAAI,GAAG3B,EAAE2V,IAAImD,EAAE1e,KAAKC,EAAE,CAAC,IAAI,IAAI0P,IAAIA,EAAE/J,GAAG0V,GAAGhU,EAAEkO,EAAE,IAAIhP,EAAE+U,EAAE5L,GAAGnJ,EAAEmJ,EAAE9P,MAAM2V,GAAGkH,EAAElW,EAAEmJ,KAAK,IAAInJ,IAAIgP,IAAI,EAAE,GAAGgG,GAAG,GAAGhV,EAAE,IAAInH,GAAG,IAAImc,GAAG,IAAInc,GAAG,IAAImc,EAAE,OAAO,EAAEtU,EAAEjH,EAAEye,EAAE1e,GAAG4F,GAAG,GAAGY,GAAG,GAAG8U,EAAE7a,EAAE,GAAG,OAAO,IAAIie,IAAIxX,EAAEoU,EAAEoD,GAAGnD,EAAE5L,GAAG,GAAG,IAAI,GAAG,GAAGlO,EAAEoH,KAAKjD,EAAE,IAAI,CAAC,kBAAkB,IAAI0Z,GAAG,CAAC,SAASjgB,EAAEwB,EAAE3B,GAAG,aAAa2B,EAAE7B,QAAQ,CAACwZ,EAAE,kBAAkBZ,EAAE,aAAa9Y,EAAE,GAAG,KAAK,aAAa,KAAK,eAAe,KAAK,aAAa,KAAK,sBAAsB,KAAK,eAAe,KAAK,yBAAyB,IAAIygB,GAAG,CAAC,SAASlgB,EAAEwB,EAAE3B,GAAG,aAAa2B,EAAE7B,QAAQ,WAAWX,KAAK4F,MAAM,KAAK5F,KAAKod,QAAQ,EAAEpd,KAAKqd,SAAS,EAAErd,KAAK4f,SAAS,EAAE5f,KAAKud,OAAO,KAAKvd,KAAKsd,SAAS,EAAEtd,KAAKwd,UAAU,EAAExd,KAAK6f,UAAU,EAAE7f,KAAKke,IAAI,GAAGle,KAAKkN,MAAM,KAAKlN,KAAKugB,UAAU,EAAEvgB,KAAK8f,MAAM,IAAI,IAAI,kBAAkB,CAAC,SAAS9e,EAAEwB,EAAE3B,GAAG,aAAa,IAAIc,EAAEX,EAAE,kBAAkBic,EAAEjc,EAAE,kBAAkBkU,EAAElU,EAAE,mBAAmByE,EAAEzE,EAAE,oBAAoB+B,EAAE/B,EAAE,mBAAmB6H,EAAE7H,EAAE,kBAAkBoB,EAAEpB,EAAE,mBAAmBU,EAAEM,OAAOkB,UAAUM,SAAS,SAASzB,EAAEf,GAAG,KAAKhB,gBAAgB+B,GAAG,OAAO,IAAIA,EAAEf,GAAGhB,KAAKmhB,QAAQlE,EAAErP,OAAO,CAACwT,UAAU,MAAMC,WAAW,EAAE5O,GAAG,IAAIzR,GAAG,IAAI,IAAIwB,EAAExC,KAAKmhB,QAAQ3e,EAAE8e,KAAK,GAAG9e,EAAE6e,YAAY7e,EAAE6e,WAAW,KAAK7e,EAAE6e,YAAY7e,EAAE6e,WAAW,IAAI7e,EAAE6e,aAAa7e,EAAE6e,YAAY,OAAO,GAAG7e,EAAE6e,YAAY7e,EAAE6e,WAAW,KAAKrgB,GAAGA,EAAEqgB,aAAa7e,EAAE6e,YAAY,IAAI,GAAG7e,EAAE6e,YAAY7e,EAAE6e,WAAW,IAAI,IAAI,GAAG7e,EAAE6e,cAAc7e,EAAE6e,YAAY,IAAIrhB,KAAKuhB,IAAI,EAAEvhB,KAAKke,IAAI,GAAGle,KAAKwhB,OAAM,EAAGxhB,KAAKyhB,OAAO,GAAGzhB,KAAK0hB,KAAK,IAAI7Y,EAAE7I,KAAK0hB,KAAKlE,UAAU,EAAE,IAAI3c,EAAEc,EAAEye,aAAapgB,KAAK0hB,KAAKlf,EAAE6e,YAAY,GAAGxgB,IAAI4E,EAAEyV,KAAK,MAAM,IAAI7I,MAAMtP,EAAElC,IAAI,GAAGb,KAAK2hB,OAAO,IAAIvf,EAAET,EAAE8e,iBAAiBzgB,KAAK0hB,KAAK1hB,KAAK2hB,QAAQnf,EAAEof,aAAa,iBAAiBpf,EAAEof,WAAWpf,EAAEof,WAAW1M,EAAEkF,WAAW5X,EAAEof,YAAY,yBAAyBlgB,EAAEX,KAAKyB,EAAEof,cAAcpf,EAAEof,WAAW,IAAIjd,WAAWnC,EAAEof,aAAapf,EAAE8e,MAAMzgB,EAAEc,EAAE+e,qBAAqB1gB,KAAK0hB,KAAKlf,EAAEof,eAAenc,EAAEyV,MAAM,MAAM,IAAI7I,MAAMtP,EAAElC,IAAI,SAASuC,EAAEpC,EAAEwB,GAAG,IAAI3B,EAAE,IAAIkB,EAAES,GAAG,GAAG3B,EAAEM,KAAKH,GAAE,GAAIH,EAAE0gB,IAAI,MAAM1gB,EAAEqd,KAAKnb,EAAElC,EAAE0gB,KAAK,OAAO1gB,EAAEgX,OAAO9V,EAAEmB,UAAU/B,KAAK,SAASH,EAAEwB,GAAG,IAAI3B,EAAEkC,EAAE8F,EAAEzG,EAAEL,EAAEqB,EAAEpD,KAAK0hB,KAAKrM,EAAErV,KAAKmhB,QAAQC,UAAUtgB,EAAEd,KAAKmhB,QAAQS,WAAWhgB,GAAE,EAAG,GAAG5B,KAAKwhB,MAAM,OAAM,EAAGze,EAAEP,MAAMA,EAAEA,GAAE,IAAKA,EAAEiD,EAAEsV,SAAStV,EAAEkV,WAAW,iBAAiB3Z,EAAEoC,EAAEwC,MAAMsP,EAAEoF,cAActZ,GAAG,yBAAyBU,EAAEX,KAAKC,GAAGoC,EAAEwC,MAAM,IAAIjB,WAAW3D,GAAGoC,EAAEwC,MAAM5E,EAAEoC,EAAEga,QAAQ,EAAEha,EAAEia,SAASja,EAAEwC,MAAMvF,OAAO,EAAE,CAAC,GAAG,IAAI+C,EAAEoa,YAAYpa,EAAEma,OAAO,IAAIN,EAAEjD,KAAK3E,GAAGjS,EAAEka,SAAS,EAAEla,EAAEoa,UAAUnI,IAAIxU,EAAEc,EAAE8W,QAAQrV,EAAEqC,EAAEkV,eAAelV,EAAE2V,aAAata,IAAID,EAAEc,EAAE+e,qBAAqB1gB,KAAK0hB,KAAK5gB,IAAID,IAAI4E,EAAE+V,cAAa,IAAK5Z,IAAIf,EAAE4E,EAAEyV,KAAKtZ,GAAE,GAAIf,IAAI4E,EAAE0V,cAActa,IAAI4E,EAAEyV,KAAK,OAAOlb,KAAK6hB,MAAMhhB,KAAKb,KAAKwhB,OAAM,GAAIpe,EAAEka,WAAW,IAAIla,EAAEoa,WAAW3c,IAAI4E,EAAE0V,eAAe,IAAI/X,EAAEia,UAAUta,IAAI0C,EAAEsV,UAAUhY,IAAI0C,EAAEoV,gBAAgB,WAAW7a,KAAKmhB,QAAQ1O,IAAI5J,EAAEqM,EAAEsF,WAAWpX,EAAEma,OAAOna,EAAEka,UAAUlb,EAAEgB,EAAEka,SAASzU,EAAE9G,EAAEmT,EAAEqF,WAAWnX,EAAEma,OAAO1U,GAAGzF,EAAEka,SAASlb,EAAEgB,EAAEoa,UAAUnI,EAAEjT,EAAEA,GAAG6a,EAAEpD,SAASzW,EAAEma,OAAOna,EAAEma,OAAO1U,EAAEzG,EAAE,GAAGpC,KAAK8hB,OAAO/f,IAAI/B,KAAK8hB,OAAO7E,EAAErD,UAAUxW,EAAEma,OAAOna,EAAEka,aAAa,IAAIla,EAAEia,UAAU,IAAIja,EAAEoa,YAAY5b,GAAE,UAAW,EAAEwB,EAAEia,UAAU,IAAIja,EAAEoa,YAAY3c,IAAI4E,EAAE0V,cAAc,OAAOta,IAAI4E,EAAE0V,eAAepY,EAAE0C,EAAEsV,UAAUhY,IAAI0C,EAAEsV,UAAUla,EAAEc,EAAE6e,WAAWxgB,KAAK0hB,MAAM1hB,KAAK6hB,MAAMhhB,GAAGb,KAAKwhB,OAAM,EAAG3gB,IAAI4E,EAAEyV,MAAMnY,IAAI0C,EAAEoV,eAAe7a,KAAK6hB,MAAMpc,EAAEyV,QAAQ9X,EAAEoa,UAAU,KAAKzb,EAAEmB,UAAU4e,OAAO,SAAS9gB,GAAGhB,KAAKyhB,OAAOtgB,KAAKH,IAAIe,EAAEmB,UAAU2e,MAAM,SAAS7gB,GAAGA,IAAIyE,EAAEyV,OAAO,WAAWlb,KAAKmhB,QAAQ1O,GAAGzS,KAAK6X,OAAO7X,KAAKyhB,OAAOhe,KAAK,IAAIzD,KAAK6X,OAAOoF,EAAEnD,cAAc9Z,KAAKyhB,SAASzhB,KAAKyhB,OAAO,GAAGzhB,KAAKuhB,IAAIvgB,EAAEhB,KAAKke,IAAIle,KAAK0hB,KAAKxD,KAAKrd,EAAEkhB,QAAQhgB,EAAElB,EAAE4X,QAAQrV,EAAEvC,EAAEmhB,WAAW,SAAShhB,EAAEwB,GAAG,OAAOA,EAAEA,GAAG,IAAI8e,KAAI,EAAGle,EAAEpC,EAAEwB,IAAI3B,EAAEohB,OAAO7e,GAAG,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,GAAG,iBAAiB,MAAM,GAAG,GAAl2rB,CAAs2rB,oB,uGCWposBpB,OAAOC,eAAe0C,WAAWzB,UAAW,MAAO,CACjDf,IAAK,WACH,OAAO,YAAW,IAAInC,QAGxBqF,IAAK,SAAS8M,GACZnS,KAAKqF,IAAI,YAAa8M,KAExBjQ,YAAY,EACZggB,cAAc,IAGhBvd,WAAWzB,UAAUif,UAAY,WAE/B,IAAI,IAAIthB,EAAI,EAAGA,EAAIb,KAAKK,SAAUQ,EAChCb,KAAKa,GAAK,YAAc,KAE1B,OAAOb,MAGT2E,WAAWzB,UAAUmO,OAAS,YAAY9L,GACxC,OAAO,YAAcvF,QAASuF,IAOhCZ,WAAWzB,UAAUkf,OAAS,WAC5B,MAAO,IAAIpiB,OAIbwG,MAAMtD,UAAUmf,cAAgB,SAAYC,GAC1C,IAAIC,EAAQviB,KAAKwiB,UAAUF,GAC3B,OAAkB,IAAXC,EAAeviB,KAAKyiB,OAAOF,EAAO,GAAG,QAAKhe,GAGnDsQ,OAAO3R,UAAUwf,SAAW,SAASC,GAAW,GAC9C,MAAMC,EAAU9e,SAAS9D,KAAO,GAAI,IAC9B6iB,EAAQ/Z,KAAKC,MAAM6Z,EAAU,MACnC,IAAIE,EAAeha,KAAKC,OAAO6Z,EAAmB,KAARC,GAAiB,IACvDE,EAAeH,EAAmB,KAARC,EAA2B,GAAVC,EAK/C,OAHGD,IAAOF,GAAW,GAClBG,EAAU,KAAIA,EAAUH,EAAW,IAAMG,EAAUA,GACnDC,EAAU,KAAIA,EAAU,IAAMA,IACzBF,EAAqCA,EAAQ,IAAM,IAAMC,EAAU,IAAMC,GAYnF3hB,QAAQ8B,UAAU8f,QAAU5hB,QAAQ8B,UAAU8f,SAAW,SAA8BC,GACrF,MAAMC,EAAaC,GAAwB/hB,QAAQC,QAAQ4hB,KAAM3hB,KAAK6hB,GACtE,OAAOnjB,KAAKsB,KACVuW,GAAUqL,EAAU,IAAMrL,GAC1BuL,GAAUF,EAAU,IAAM9hB,QAAQiiB,OAAOD,M,kBCrD9B,MAVE,CACfvhB,KAAM,QAAU,IAAM8N,KAAO,QAAU,IACvC2T,QAAS,EACTC,OAAQ,CAAC,CACP1hB,KAAM,WACL,CACDA,KAAM,iBCKH,SAAS2hB,EAAcC,EAAgBC,EAAmB,IAC/D,IAAIC,EACJ,MAAMC,EAcD,SAA0BF,GAC/B,IAayB,IAbtB,CACD,aACA,YACA,YACA,aACA,YACA,YACA,aACA,kBACA,YACA,aACA,YACA,oBACA5Y,QAAQ4Y,GACR,MAAO,2BAGT,OAAOA,EAhCcG,CAAiBH,GACtC,IACEC,EAAO,IAAIG,KAAKL,EAAW,CAACM,KAAMH,IAClC,MAAM5iB,GAEN,IAAIgjB,EAAK,IAAIC,YACbR,EAAUje,QAAS0e,IACjBF,EAAGG,OAAOD,KAEZP,EAAOK,EAAGI,QAAQR,GAEpB,OAAOD,E,WCEM,MAAM,EAYnB,YAAYxC,GAVL,KAAAkD,oBAAqB,EAEpB,KAAA1W,IAAiC,OAAAqB,EAAA,GAAO,OAEzC,KAAAnN,KAAe,EAASA,KACxB,KAAAyhB,QAAkB,EAASA,QAC3B,KAAAC,OAAqB,EAASA,OC+FhC,SAAoBvgB,EAAashB,GACtC,GAAIA,EAEJ,IAAI,IAAIzjB,KAAKyjB,OACU/f,IAAlB+f,EAAWzjB,KACZmC,EAAOnC,GAAKyjB,EAAWzjB,ID/FzB0jB,CAAWvkB,KAAMmhB,GAEjBnhB,KAAKwkB,cAAa,GAGb,cACL,OAAOxkB,KAAKqkB,mBAGP,aAAaI,GAAY,GAC9B,GAAGzkB,KAAK0kB,gBAAkBD,EACxB,OAAOzkB,KAAK0kB,cAad,IACE,IAAIC,EAAUC,UAAUC,KAAK7kB,KAAK6B,KAAM7B,KAAKsjB,SAE7C,IAAIqB,EACF,MAAM,IAAItS,MAEZ,MAAMjD,GAGN,OAFApP,KAAK2N,IAAIyB,MAAM,mBAAoBA,EAAMsE,SACzC1T,KAAKqkB,oBAAqB,EACnBjjB,QAAQiiB,OAAOjU,GAGxB,IAAI0V,GAAW,EAOf,OANAC,WAAW,KACLD,GACFH,EAAQK,QAAQ,CAACjB,KAAM,wBAExB,KAEI/jB,KAAK0kB,cAAgB,IAAItjB,QAAqB,CAACC,EAASgiB,KAC7DsB,EAAQM,UAAaC,IACnBJ,GAAW,EACX,MAAMK,EAAKR,EAAQ9M,OACnB,IAAIuN,GAAY,EAEhBplB,KAAK2N,IAAI,UAETwX,EAAGH,QAAW5V,IACZpP,KAAKqkB,oBAAqB,EAC1BrkB,KAAK2N,IAAIyB,MAAM,8CAA+CA,GAC9DiU,EAAOjU,IAGT+V,EAAGE,QAAWrkB,IACZhB,KAAK2N,IAAIyB,MAAM,UAAWpO,IACzBokB,GAAaplB,KAAKwkB,gBAGrBW,EAAGG,QAAWtkB,IACZhB,KAAK2N,IAAIyB,MAAM,SAAUpO,GACzB,MAAMukB,EAAcvkB,EAAEwkB,OAEtBxlB,KAAKwkB,aAAaY,GAAY,GAE3BG,EAAYP,SACbO,EAAYP,QAAQhkB,GAGtBmkB,EAAGM,SAGLN,EAAGO,gBAAmB1kB,IACpBhB,KAAK2N,IAAIyB,MAAM,0BAGjB/N,EAAQ8jB,IAGVR,EAAQK,QAAWE,IACjBJ,GAAW,EACX9kB,KAAKqkB,oBAAqB,EAC1BrkB,KAAK2N,IAAIyB,MAAM,8CAA+C8V,GAC9D7B,EAAO6B,IAGTP,EAAQgB,gBAAmBT,IACzBJ,GAAW,EACX9kB,KAAK2N,IAAIwB,KAAK,8BAA+B+V,EAAMU,WAAY,KAAMV,EAAMW,YAG3E,IAAIV,EAAKD,EAAMM,OAAO3N,OACtB7X,KAAKujB,OAAO/d,QAASsgB,IAOfX,EAAGY,iBAAiBC,SAASF,EAAMjkB,OAxFnB,EAACsjB,EAAiBW,K,MAC1C,MAAMpJ,EAAKyI,EAAGc,kBAAkBH,EAAMjkB,MAEtC,GAAgB,QAAhB,EAAGikB,EAAMI,eAAO,eAAE7lB,OAChB,IAAI,MAAMkiB,KAASuD,EAAMI,QACvBxJ,EAAGyJ,YAAY5D,EAAM6D,UAAW7D,EAAM8D,QAAS9D,EAAM+D,mBAoFnDL,CAAkBd,EAAIW,QAOzB,OAAOS,GAEZ,OAAOvmB,KAAKwkB,eAAeljB,KAAM6jB,IAC/B,IAEE,IAGIR,EAHcQ,EAAGI,YAAY,CAACvlB,KAAKwmB,WAAY,aAChDC,YAAYzmB,KAAKwmB,WAEME,OAAOH,GACjC,MAAMnX,GACN,OAAOhO,QAAQiiB,OAAOjU,GAGxB,OAAO,IAAIhO,QAAQ,CAACC,EAASgiB,KAC3B,MAAMsD,EAAU5B,WAAW,KACzB/kB,KAAK2N,IAAIyB,MAAM,gCAAiCmX,EAAW5B,GAC3DtjB,KACC,KAEHsjB,EAAQM,UAAaC,IAEnB7jB,IACAulB,aAAaD,IAGfhC,EAAQK,QAAW5V,IACjBiU,EAAOjU,GACPwX,aAAaD,QAMd,YACL,OAAO3mB,KAAKwkB,eAAeljB,KAAM6jB,IAG/B,IACE,MAAMI,EAAcJ,EAAGI,YAAY,CAACvlB,KAAKwmB,WAAY,aAGrD,IAAI7B,EADgBY,EAAYkB,YAAYzmB,KAAKwmB,WACvBlQ,QAC1B,MAAMlH,GACN,OAAOhO,QAAQiiB,OAAOjU,GAGxB,OAAO,IAAIhO,QAAc,CAACC,EAASgiB,KACjC,MAAMsD,EAAU5B,WAAW,KACzB/kB,KAAK2N,IAAIyB,MAAM,kCAAmCuV,IACjD,KAEHA,EAAQM,UAAaC,IACnB7jB,IACAulB,aAAaD,IAGfhC,EAAQK,QAAW5V,IACjBiU,EAAOjU,GACPwX,aAAaD,QAMd,KAAKJ,EAAmBhkB,GAC7B,OAAOvC,KAAKwkB,eAAeljB,KAAM6jB,IAG/B,MAAM0B,EAAezX,IACnBpP,KAAK2N,IAAIyB,MAAM,2BAA4BmX,EAAWhkB,EAAO4iB,EAAI/V,EAAOA,GAASA,EAAMvN,MAClFuN,GAAwB,sBAAfA,EAAMvN,MAClBkjB,WAAW,KACT/kB,KAAK8mB,KAAKP,EAAWhkB,IACpB,MAMP,IACE,MAAMgjB,EAAcJ,EAAGI,YAAY,CAACvlB,KAAKwmB,WAAY,aACrDjB,EAAYP,QAAWhkB,IACrB6lB,EAAYtB,EAAYnW,QAY1B,IAAIuV,EADgBY,EAAYkB,YAAYzmB,KAAKwmB,WACvBO,IAAIxkB,EAAOgkB,GACrC,MAAMnX,GAEN,OADAyX,EAAYzX,GACLhO,QAAQiiB,OAAOjU,GAMxB,OAAO,IAAIhO,QAAc,CAACC,EAASgiB,KACjC,MAAMsD,EAAU5B,WAAW,KACzB/kB,KAAK2N,IAAIyB,MAAM,6BAA8BmX,EAAW5B,IACvD,KAEHA,EAAQM,UAAaC,IACnB7jB,IACAulB,aAAaD,IAGfhC,EAAQK,QAAW5V,IACjBiU,EAAOjU,GACPwX,aAAaD,QAMd,SAASK,EAAkBrD,GAMhC,OAJKA,aAAgBG,OACnBH,EAAOH,EAAc,CAACG,KAGjB3jB,KAAK8mB,KAAKE,EAAUrD,GAmEtB,IAAO4C,GAEZ,OAAOvmB,KAAKwkB,eAAeljB,KAAM6jB,IAG/B,IACE,MAAMI,EAAcJ,EAAGI,YAAY,CAACvlB,KAAKwmB,WAAY,YAKrD,IAAI7B,EADgBY,EAAYkB,YAAYzmB,KAAKwmB,WACvBrkB,IAAIokB,GAG9B,MAAMhF,GACNvhB,KAAK2N,IAAIyB,MAAM,aAAcmS,EAAKgF,EAAW5B,EAASA,EAAQvV,OAGhE,OAAO,IAAIhO,QAAQ,CAACC,EAASgiB,KAC3B,MAAMsD,EAAU5B,WAAW,KACzB/kB,KAAK2N,IAAIyB,MAAM,4BAA6BmX,EAAW5B,GACvDtB,KACC,KAEHsB,EAAQM,UAAY,SAASC,GAC3B,MAAMrN,EAAS8M,EAAQ9M,YACTtT,IAAXsT,EACDwL,EAAO,kBAKPhiB,EAAQwW,GAGV+O,aAAaD,IAGfhC,EAAQK,QAAU,KAChB4B,aAAaD,GACbtD,U,0SE9XV,MAAM4D,EAAiB,ICER,MAOb,YAAYC,GAHJ,KAAAC,MAA0B,GAC1B,KAAAC,YAAa,EAGnBpnB,KAAKqnB,QAAU,IAAI,EAAWH,GAGzB,WACL,OAAOlnB,KAAKmnB,MAGP,aAAatkB,GAClB,OAAO7C,KAAKmnB,MAAMtkB,GAGb,WAAWA,EAAoBN,GACpC,OAAOvC,KAAKmnB,MAAMtkB,GAAON,EAGd,IAAIM,G,yCACf,GAAG7C,KAAKmnB,MAAMhkB,eAAeN,GAC3B,OAAO7C,KAAKsnB,aAAazkB,GACpB,GAAG7C,KAAKonB,WAAY,CACzB,IAAI7kB,EACJ,IACEA,QAAcvC,KAAKqnB,QAAQllB,IAAIU,GAG/B,MAAM7B,GACG,mBAANA,IACDhB,KAAKonB,YAAa,EAClB1Z,QAAQ0B,MAAM,mBAAoBpO,EAAG6B,EAAKN,IAI9C,OAAOvC,KAAKmnB,MAAMtkB,GAAON,EAEzB,KAAM,0BAIG,IAAIglB,EAAuBC,GAAY,G,yCAGlD,IAAI,MAAM3kB,KAAO0kB,EACf,GAAGA,EAAIpkB,eAAeN,GAAM,CAC1B,MAAMN,EAAQglB,EAAI1kB,GAiBlB,GAhBA7C,KAAKynB,WAAW5kB,EAAKN,GAgBlBvC,KAAKonB,aAAeI,EACrB,UAIQxnB,KAAKqnB,QAAQP,KAAKjkB,EAAKN,GAE7B,MAAMvB,GAEN0M,QAAQ0B,MAAM,mBAAoBpO,EAAG6B,QAOlC,OAAOA,EAAoB6kB,GAAY,G,yCASlD,GAJIA,UACK1nB,KAAKmnB,MAAMtkB,GAGjB7C,KAAKonB,WACN,UACQpnB,KAAKqnB,QAAQX,OAAO7jB,GAC1B,MAAM7B,GACNhB,KAAKonB,YAAa,EAClB1Z,QAAQ0B,MAAM,sBAAuBpO,OAKpC,QACL,OAAOhB,KAAKqnB,QAAQM,cD1Fb,CACTnB,UAAW,YAEb,IAAeoB,WAAaX,EACb,Q,cELA,GAAC,QAAU,CAAC,aAAe,CAAC,CAAC,GAAK,YAAY,UAAY,SAAS,OAAS,GAAG,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,QAAQ,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,KAAK,KAAO,SAAS,CAAC,KAAO,iCAAiC,KAAO,iBAAiB,KAAO,SAAS,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,mBAAmB,KAAO,UAAU,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,MAAM,KAAO,UAAU,KAAO,wBAAwB,CAAC,GAAK,aAAa,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,+BAA+B,CAAC,GAAK,aAAa,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,+BAA+B,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,+BAA+B,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,wBAAwB,KAAO,eAAe,CAAC,GAAK,YAAY,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,cAAc,CAAC,GAAK,aAAa,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,qBAAqB,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,YAAY,KAAO,eAAe,CAAC,GAAK,YAAY,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,UAAU,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,SAAS,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,eAAe,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,CAAC,KAAO,mBAAmB,KAAO,QAAQ,CAAC,KAAO,mBAAmB,KAAO,QAAQ,CAAC,KAAO,kBAAkB,KAAO,QAAQ,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,wBAAwB,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,sBAAsB,QAAU,CAAC,CAAC,GAAK,aAAa,OAAS,SAAS,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,SAAS,CAAC,GAAK,WAAW,OAAS,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,SAAS,CAAC,GAAK,WAAW,OAAS,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,yBAAyB,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,oBAAoB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,+BAA+B,CAAC,GAAK,aAAa,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,aAAa,OAAS,OAAO,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,mBAAmB,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,YAAY,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,YAAY,CAAC,GAAK,WAAW,OAAS,mBAAmB,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,uBAAuB,IAAM,CAAC,aAAe,CAAC,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,aAAa,UAAY,OAAO,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,YAAY,UAAY,SAAS,OAAS,GAAG,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,QAAQ,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,SAAS,CAAC,GAAK,aAAa,UAAY,OAAO,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,gBAAgB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,cAAc,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,kBAAkB,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,sBAAsB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,iBAAiB,KAAO,mBAAmB,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,eAAe,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,kBAAkB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,aAAa,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,sBAAsB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,kBAAkB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,aAAa,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,aAAa,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,wBAAwB,CAAC,KAAO,eAAe,KAAO,4BAA4B,CAAC,KAAO,wBAAwB,KAAO,8BAA8B,KAAO,QAAQ,CAAC,GAAK,YAAY,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,oBAAoB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,KAAO,kBAAkB,KAAO,+BAA+B,CAAC,KAAO,WAAW,KAAO,2BAA2B,CAAC,KAAO,gBAAgB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,2BAA2B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,4BAA4B,KAAO,kBAAkB,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,4BAA4B,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,2BAA2B,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,iBAAiB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,4BAA4B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,8BAA8B,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,wBAAwB,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,2BAA2B,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,mBAAmB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,qBAAqB,KAAO,sCAAsC,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,YAAY,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,8BAA8B,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,aAAa,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,SAAS,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,wBAAwB,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,KAAO,MAAM,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,wBAAwB,CAAC,KAAO,YAAY,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,SAAS,CAAC,GAAK,WAAW,UAAY,QAAQ,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,cAAc,KAAO,6BAA6B,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,SAAS,CAAC,GAAK,YAAY,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,gBAAgB,OAAS,GAAG,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,KAAO,YAAY,CAAC,GAAK,aAAa,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,yBAAyB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,2BAA2B,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,YAAY,CAAC,KAAO,WAAW,KAAO,8BAA8B,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,YAAY,UAAY,+BAA+B,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,YAAY,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,KAAO,wBAAwB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,gBAAgB,KAAO,eAAe,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,eAAe,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,2BAA2B,CAAC,KAAO,kBAAkB,KAAO,0BAA0B,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,uBAAuB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,uBAAuB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,mBAAmB,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,4BAA4B,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,yBAAyB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,qBAAqB,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,eAAe,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,oBAAoB,CAAC,KAAO,WAAW,KAAO,SAAS,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,yBAAyB,KAAO,4BAA4B,CAAC,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,yBAAyB,KAAO,4BAA4B,CAAC,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,GAAG,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,4BAA4B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,8BAA8B,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,4BAA4B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,8BAA8B,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,aAAa,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,aAAa,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,GAAK,YAAY,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,eAAe,CAAC,GAAK,YAAY,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,mBAAmB,KAAO,YAAY,CAAC,GAAK,YAAY,UAAY,SAAS,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,qBAAqB,KAAO,gBAAgB,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,4BAA4B,KAAO,gBAAgB,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,oBAAoB,CAAC,KAAO,qBAAqB,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,sBAAsB,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,wBAAwB,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,sBAAsB,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,OAAO,CAAC,KAAO,uBAAuB,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,wBAAwB,KAAO,OAAO,CAAC,KAAO,uBAAuB,KAAO,OAAO,CAAC,KAAO,6BAA6B,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,2BAA2B,KAAO,OAAO,CAAC,KAAO,4BAA4B,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,uBAAuB,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,yBAAyB,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,UAAU,CAAC,KAAO,wBAAwB,KAAO,kBAAkB,CAAC,KAAO,sBAAsB,KAAO,kBAAkB,CAAC,KAAO,wBAAwB,KAAO,mBAAmB,CAAC,KAAO,sBAAsB,KAAO,mBAAmB,CAAC,KAAO,uBAAuB,KAAO,mBAAmB,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,sBAAsB,KAAO,kBAAkB,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,yBAAyB,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,MAAM,KAAO,mBAAmB,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,YAAY,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,oBAAoB,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,UAAU,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,SAAS,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,GAAG,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,kBAAkB,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,iCAAiC,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,kBAAkB,KAAO,iCAAiC,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,qBAAqB,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,6BAA6B,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,YAAY,CAAC,GAAK,YAAY,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,6BAA6B,CAAC,KAAO,eAAe,KAAO,6BAA6B,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,8BAA8B,KAAO,YAAY,CAAC,GAAK,YAAY,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,uBAAuB,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,iCAAiC,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,aAAa,UAAY,sBAAsB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,cAAc,CAAC,KAAO,QAAQ,KAAO,wBAAwB,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,iCAAiC,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,iCAAiC,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,oCAAoC,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,eAAe,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,GAAG,KAAO,eAAe,CAAC,GAAK,aAAa,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,eAAe,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,eAAe,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,YAAY,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,cAAc,KAAO,uBAAuB,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,kBAAkB,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,qBAAqB,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,iBAAiB,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,kCAAkC,OAAS,GAAG,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,uBAAuB,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,aAAa,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,sCAAsC,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,iBAAiB,KAAO,0BAA0B,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,2BAA2B,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,4BAA4B,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,kBAAkB,KAAO,yBAAyB,CAAC,KAAO,gBAAgB,KAAO,UAAU,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,kBAAkB,KAAO,iCAAiC,KAAO,4BAA4B,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,2BAA2B,CAAC,KAAO,oBAAoB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,sBAAsB,KAAO,iCAAiC,KAAO,iCAAiC,CAAC,GAAK,YAAY,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,WAAW,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,yBAAyB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,yBAAyB,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,eAAe,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,6BAA6B,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,cAAc,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,YAAY,KAAO,qBAAqB,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,MAAM,KAAO,iBAAiB,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,MAAM,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,4BAA4B,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,sCAAsC,CAAC,KAAO,yBAAyB,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,oBAAoB,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,uBAAuB,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,2BAA2B,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,iBAAiB,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,iBAAiB,KAAO,eAAe,CAAC,GAAK,YAAY,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,8BAA8B,KAAO,eAAe,CAAC,GAAK,aAAa,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,wBAAwB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,MAAM,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,qCAAqC,CAAC,KAAO,eAAe,KAAO,4BAA4B,CAAC,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,KAAO,wBAAwB,KAAO,6BAA6B,CAAC,KAAO,qBAAqB,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,yBAAyB,CAAC,GAAK,aAAa,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,iBAAiB,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,qBAAqB,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,KAAO,kBAAkB,KAAO,+BAA+B,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,wBAAwB,KAAO,eAAe,CAAC,KAAO,uBAAuB,KAAO,eAAe,CAAC,KAAO,gBAAgB,KAAO,eAAe,CAAC,KAAO,aAAa,KAAO,sBAAsB,CAAC,KAAO,mBAAmB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,4BAA4B,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,2BAA2B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,sBAAsB,KAAO,2BAA2B,CAAC,KAAO,4BAA4B,KAAO,kBAAkB,KAAO,YAAY,CAAC,GAAK,YAAY,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,yBAAyB,KAAO,yBAAyB,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,WAAW,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,8BAA8B,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,gCAAgC,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,sBAAsB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,+BAA+B,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,6BAA6B,CAAC,GAAK,aAAa,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,YAAY,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,KAAO,uBAAuB,CAAC,GAAK,aAAa,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,wBAAwB,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,GAAG,KAAO,sBAAsB,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,qBAAqB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,aAAa,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,4BAA4B,CAAC,KAAO,UAAU,KAAO,4BAA4B,CAAC,KAAO,eAAe,KAAO,0BAA0B,KAAO,wBAAwB,CAAC,GAAK,aAAa,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,UAAU,KAAO,uBAAuB,CAAC,KAAO,eAAe,KAAO,qBAAqB,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,6BAA6B,CAAC,KAAO,UAAU,KAAO,2BAA2B,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,uBAAuB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,oBAAoB,CAAC,KAAO,YAAY,KAAO,+BAA+B,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,oBAAoB,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,oCAAoC,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,YAAY,UAAY,2BAA2B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,aAAa,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,uBAAuB,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,mBAAmB,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,8BAA8B,KAAO,eAAe,CAAC,GAAK,YAAY,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,mBAAmB,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,4BAA4B,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,gCAAgC,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,aAAa,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,gCAAgC,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,eAAe,KAAO,0BAA0B,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,0BAA0B,KAAO,wBAAwB,CAAC,GAAK,YAAY,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,eAAe,KAAO,qBAAqB,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,2BAA2B,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,2BAA2B,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,mBAAmB,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,gCAAgC,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,oBAAoB,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,gCAAgC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uCAAuC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,6BAA6B,CAAC,KAAO,SAAS,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,GAAK,aAAa,UAAY,6BAA6B,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,qCAAqC,OAAS,GAAG,KAAO,2BAA2B,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,2BAA2B,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,8BAA8B,KAAO,6BAA6B,CAAC,GAAK,YAAY,UAAY,0CAA0C,OAAS,GAAG,KAAO,oCAAoC,CAAC,GAAK,YAAY,UAAY,0CAA0C,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,8BAA8B,KAAO,oCAAoC,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,cAAc,CAAC,KAAO,QAAQ,KAAO,aAAa,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,cAAc,CAAC,KAAO,SAAS,KAAO,qBAAqB,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,eAAe,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,kBAAkB,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,qBAAqB,KAAO,QAAQ,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,0BAA0B,KAAO,wBAAwB,CAAC,GAAK,aAAa,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,aAAa,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,uBAAuB,CAAC,GAAK,aAAa,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,GAAG,KAAO,YAAY,CAAC,GAAK,aAAa,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,aAAa,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,aAAa,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,aAAa,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,aAAa,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,qBAAqB,KAAO,YAAY,CAAC,GAAK,YAAY,UAAY,uBAAuB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,YAAY,CAAC,KAAO,iBAAiB,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,yBAAyB,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,cAAc,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,eAAe,CAAC,KAAO,IAAI,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,kBAAkB,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,sBAAsB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,mCAAmC,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,aAAa,UAAY,+BAA+B,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,eAAe,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,+BAA+B,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,6BAA6B,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,yBAAyB,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,4BAA4B,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,UAAU,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,YAAY,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,qBAAqB,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,gCAAgC,CAAC,KAAO,qBAAqB,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,kBAAkB,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,6BAA6B,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,iBAAiB,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,gBAAgB,CAAC,GAAK,YAAY,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,mBAAmB,KAAO,wBAAwB,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,SAAS,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,2BAA2B,CAAC,GAAK,YAAY,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,8BAA8B,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,8BAA8B,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,wBAAwB,CAAC,GAAK,YAAY,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,kBAAkB,CAAC,KAAO,gBAAgB,KAAO,oBAAoB,CAAC,KAAO,aAAa,KAAO,gCAAgC,CAAC,KAAO,oBAAoB,KAAO,mCAAmC,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,kBAAkB,CAAC,KAAO,mBAAmB,KAAO,mCAAmC,KAAO,mCAAmC,CAAC,GAAK,aAAa,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,0BAA0B,CAAC,GAAK,aAAa,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,gCAAgC,CAAC,KAAO,WAAW,KAAO,0BAA0B,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,CAAC,KAAO,oBAAoB,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,2BAA2B,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,iCAAiC,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,KAAO,2BAA2B,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,2BAA2B,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,SAAS,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,yBAAyB,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,SAAS,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,gCAAgC,CAAC,KAAO,qBAAqB,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,SAAS,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,uBAAuB,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,cAAc,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,qBAAqB,CAAC,KAAO,eAAe,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,qBAAqB,CAAC,KAAO,cAAc,KAAO,2BAA2B,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,kCAAkC,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,mBAAmB,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,kCAAkC,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,gBAAgB,KAAO,SAAS,CAAC,KAAO,cAAc,KAAO,qBAAqB,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,UAAU,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,YAAY,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,2BAA2B,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,uBAAuB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,GAAK,YAAY,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,qBAAqB,KAAO,sBAAsB,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,WAAW,KAAO,6BAA6B,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,WAAW,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,wCAAwC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,wCAAwC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,2CAA2C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,wCAAwC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,YAAY,KAAO,UAAU,KAAO,8BAA8B,CAAC,GAAK,YAAY,UAAY,0CAA0C,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,8BAA8B,CAAC,GAAK,YAAY,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,yCAAyC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,wCAAwC,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,WAAW,CAAC,KAAO,cAAc,KAAO,YAAY,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,0CAA0C,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,8BAA8B,CAAC,GAAK,YAAY,UAAY,4CAA4C,OAAS,GAAG,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,6CAA6C,OAAS,GAAG,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,8CAA8C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,iDAAiD,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,KAAO,kBAAkB,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,mDAAmD,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,KAAO,kBAAkB,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,YAAY,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,+BAA+B,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,gCAAgC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,4BAA4B,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,kBAAkB,KAAO,+BAA+B,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,+BAA+B,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,oCAAoC,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,qBAAqB,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,sBAAsB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,kBAAkB,KAAO,mBAAmB,CAAC,KAAO,iBAAiB,KAAO,oBAAoB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,aAAa,KAAO,2BAA2B,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,mDAAmD,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,gCAAgC,KAAO,gBAAgB,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,gCAAgC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,eAAe,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,sBAAsB,KAAO,eAAe,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,uBAAuB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,0CAA0C,OAAS,GAAG,KAAO,gCAAgC,CAAC,GAAK,aAAa,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,iBAAiB,KAAO,4BAA4B,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,uCAAuC,OAAS,GAAG,KAAO,6BAA6B,CAAC,GAAK,aAAa,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,8BAA8B,KAAO,6BAA6B,CAAC,GAAK,aAAa,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,8BAA8B,KAAO,eAAe,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,wBAAwB,KAAO,6BAA6B,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,cAAc,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,0BAA0B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,+BAA+B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,kCAAkC,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,sCAAsC,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,uCAAuC,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,aAAa,KAAO,sBAAsB,CAAC,KAAO,eAAe,KAAO,sBAAsB,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,cAAc,KAAO,8BAA8B,CAAC,KAAO,QAAQ,KAAO,8BAA8B,CAAC,KAAO,aAAa,KAAO,2BAA2B,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,aAAa,KAAO,2BAA2B,CAAC,KAAO,eAAe,KAAO,2BAA2B,CAAC,KAAO,SAAS,KAAO,2BAA2B,CAAC,KAAO,cAAc,KAAO,mCAAmC,CAAC,KAAO,QAAQ,KAAO,mCAAmC,CAAC,KAAO,aAAa,KAAO,4BAA4B,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,8BAA8B,CAAC,KAAO,SAAS,KAAO,uBAAuB,CAAC,KAAO,SAAS,KAAO,4BAA4B,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,mBAAmB,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,yBAAyB,CAAC,GAAK,YAAY,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,uBAAuB,CAAC,KAAO,cAAc,KAAO,+BAA+B,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,yBAAyB,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,2BAA2B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,eAAe,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,kDAAkD,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,yBAAyB,CAAC,GAAK,YAAY,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,CAAC,KAAO,gBAAgB,KAAO,SAAS,CAAC,KAAO,mBAAmB,KAAO,SAAS,KAAO,wBAAwB,CAAC,GAAK,YAAY,UAAY,oEAAoE,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,KAAK,KAAO,UAAU,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,oBAAoB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,+BAA+B,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,aAAa,KAAO,uBAAuB,CAAC,GAAK,YAAY,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,cAAc,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,WAAW,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,SAAS,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,YAAY,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,YAAY,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,QAAQ,KAAO,YAAY,CAAC,GAAK,YAAY,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,oBAAoB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,YAAY,CAAC,KAAO,OAAO,KAAO,yBAAyB,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,SAAS,KAAO,aAAa,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,gBAAgB,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gCAAgC,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,KAAO,sBAAsB,CAAC,GAAK,YAAY,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,YAAY,CAAC,KAAO,WAAW,KAAO,+BAA+B,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,YAAY,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,sBAAsB,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,QAAQ,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,oCAAoC,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,gBAAgB,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,oBAAoB,KAAO,kCAAkC,KAAO,eAAe,CAAC,GAAK,YAAY,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,kBAAkB,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,oBAAoB,KAAO,kCAAkC,KAAO,cAAc,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,aAAa,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,WAAW,KAAO,6BAA6B,CAAC,GAAK,YAAY,UAAY,gDAAgD,OAAS,CAAC,CAAC,KAAO,qBAAqB,KAAO,oBAAoB,CAAC,KAAO,oBAAoB,KAAO,qBAAqB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,qCAAqC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,8BAA8B,CAAC,GAAK,YAAY,UAAY,gCAAgC,OAAS,GAAG,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,sBAAsB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,eAAe,CAAC,KAAO,0BAA0B,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,gBAAgB,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,aAAa,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,wBAAwB,CAAC,KAAO,SAAS,KAAO,wBAAwB,CAAC,KAAO,OAAO,KAAO,yBAAyB,KAAO,gCAAgC,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,GAAK,YAAY,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,yBAAyB,KAAO,2BAA2B,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,aAAa,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,SAAS,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,KAAO,yBAAyB,KAAO,gBAAgB,CAAC,KAAO,8BAA8B,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,2BAA2B,KAAO,OAAO,CAAC,KAAO,6BAA6B,KAAO,OAAO,CAAC,KAAO,8BAA8B,KAAO,OAAO,CAAC,KAAO,gCAAgC,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,sBAAsB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,YAAY,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,0BAA0B,CAAC,GAAK,YAAY,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,cAAc,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,yCAAyC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,4CAA4C,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,oBAAoB,CAAC,GAAK,YAAY,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,uCAAuC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,wBAAwB,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,2CAA2C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,oBAAoB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,2CAA2C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,mBAAmB,KAAO,gCAAgC,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,qCAAqC,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,QAAQ,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,iBAAiB,KAAO,QAAQ,KAAO,SAAS,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,kBAAkB,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,yBAAyB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,uBAAuB,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,uBAAuB,KAAO,iBAAiB,KAAO,2BAA2B,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,8BAA8B,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,aAAa,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,uBAAuB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,0BAA0B,CAAC,KAAO,qBAAqB,KAAO,8BAA8B,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,aAAa,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,uBAAuB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,sBAAsB,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,4BAA4B,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,oBAAoB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,kBAAkB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,2BAA2B,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,4BAA4B,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,aAAa,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,iBAAiB,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,eAAe,KAAO,qBAAqB,CAAC,KAAO,gBAAgB,KAAO,qBAAqB,CAAC,KAAO,gBAAgB,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,yBAAyB,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,yBAAyB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,sBAAsB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,aAAa,KAAO,mBAAmB,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,YAAY,KAAO,wBAAwB,CAAC,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,KAAO,kBAAkB,KAAO,wBAAwB,CAAC,KAAO,wBAAwB,KAAO,qBAAqB,CAAC,KAAO,eAAe,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,aAAa,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,qBAAqB,KAAO,cAAc,CAAC,KAAO,wBAAwB,KAAO,cAAc,CAAC,KAAO,wBAAwB,KAAO,cAAc,CAAC,KAAO,gCAAgC,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,8BAA8B,KAAO,uCAAuC,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,mBAAmB,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,mBAAmB,KAAO,aAAa,CAAC,GAAK,YAAY,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,cAAc,CAAC,GAAK,YAAY,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,YAAY,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,UAAU,KAAO,wBAAwB,CAAC,KAAO,WAAW,KAAO,wBAAwB,CAAC,KAAO,UAAU,KAAO,wBAAwB,CAAC,KAAO,UAAU,KAAO,wBAAwB,CAAC,KAAO,eAAe,KAAO,cAAc,CAAC,KAAO,gBAAgB,KAAO,cAAc,CAAC,KAAO,8BAA8B,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,iBAAiB,KAAO,cAAc,CAAC,KAAO,gBAAgB,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,iBAAiB,KAAO,cAAc,CAAC,KAAO,cAAc,KAAO,+BAA+B,CAAC,KAAO,aAAa,KAAO,8BAA8B,CAAC,KAAO,eAAe,KAAO,gCAAgC,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,wCAAwC,KAAO,iBAAiB,KAAO,yBAAyB,CAAC,GAAK,aAAa,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,aAAa,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,0BAA0B,CAAC,KAAO,WAAW,KAAO,2BAA2B,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,gBAAgB,KAAO,6BAA6B,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,GAAG,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,wBAAwB,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,2BAA2B,KAAO,gBAAgB,CAAC,GAAK,aAAa,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,wBAAwB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,yBAAyB,CAAC,GAAK,YAAY,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,qBAAqB,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,KAAO,sBAAsB,CAAC,GAAK,aAAa,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,wBAAwB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,GAAK,YAAY,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,aAAa,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,IAAI,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,4BAA4B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,eAAe,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,kBAAkB,CAAC,GAAK,aAAa,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,aAAa,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,YAAY,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,mBAAmB,CAAC,KAAO,oBAAoB,KAAO,kBAAkB,KAAO,wBAAwB,CAAC,GAAK,YAAY,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,eAAe,KAAO,gCAAgC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,eAAe,KAAO,gCAAgC,CAAC,KAAO,2BAA2B,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,gCAAgC,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,2BAA2B,CAAC,GAAK,YAAY,UAAY,+BAA+B,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,aAAa,UAAY,+BAA+B,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,aAAa,UAAY,+BAA+B,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,YAAY,UAAY,2CAA2C,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,4CAA4C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,8CAA8C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,mDAAmD,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,aAAa,KAAO,2BAA2B,CAAC,GAAK,YAAY,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,aAAa,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,gCAAgC,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,kCAAkC,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,2BAA2B,CAAC,KAAO,kBAAkB,KAAO,2BAA2B,CAAC,KAAO,SAAS,KAAO,8BAA8B,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,aAAa,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,8BAA8B,CAAC,KAAO,kBAAkB,KAAO,8BAA8B,CAAC,KAAO,SAAS,KAAO,8BAA8B,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,YAAY,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,8BAA8B,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,gCAAgC,CAAC,GAAK,YAAY,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,+BAA+B,CAAC,GAAK,YAAY,UAAY,sCAAsC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,aAAa,KAAO,sBAAsB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,+BAA+B,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,8BAA8B,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,gCAAgC,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,wBAAwB,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,gCAAgC,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,kCAAkC,CAAC,GAAK,aAAa,UAAY,oDAAoD,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,iDAAiD,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,iDAAiD,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,+CAA+C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,sBAAsB,CAAC,KAAO,aAAa,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,8CAA8C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,KAAO,8BAA8B,CAAC,GAAK,aAAa,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,WAAW,KAAO,qCAAqC,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,YAAY,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kCAAkC,QAAU,CAAC,CAAC,GAAK,WAAW,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,GAAK,aAAa,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,GAAK,WAAW,OAAS,gBAAgB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,cAAc,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,cAAc,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,sBAAsB,CAAC,GAAK,aAAa,OAAS,cAAc,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,8BAA8B,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,UAAU,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,SAAS,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,WAAW,KAAO,4BAA4B,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,oBAAoB,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,YAAY,CAAC,GAAK,YAAY,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,GAAG,KAAO,yBAAyB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,yBAAyB,KAAO,6BAA6B,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,sBAAsB,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,mBAAmB,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,yBAAyB,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,YAAY,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,qBAAqB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,YAAY,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,YAAY,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,4BAA4B,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iCAAiC,CAAC,GAAK,aAAa,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,gBAAgB,CAAC,GAAK,WAAW,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,GAAK,YAAY,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,mBAAmB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,YAAY,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,aAAa,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,eAAe,KAAO,gBAAgB,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,iBAAiB,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,WAAW,OAAS,iBAAiB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,YAAY,OAAS,oBAAoB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,aAAa,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,aAAa,OAAS,qBAAqB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,YAAY,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,UAAU,KAAO,iBAAiB,CAAC,GAAK,aAAa,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,SAAS,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,iCAAiC,CAAC,GAAK,aAAa,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,uBAAuB,KAAO,iCAAiC,CAAC,GAAK,YAAY,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,iCAAiC,CAAC,GAAK,aAAa,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,aAAa,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,uBAAuB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,mBAAmB,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,4BAA4B,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,GAAK,WAAW,OAAS,kBAAkB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,YAAY,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,GAAK,YAAY,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,oBAAoB,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,6BAA6B,KAAO,wBAAwB,CAAC,GAAK,aAAa,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,wBAAwB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,YAAY,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,mBAAmB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,yBAAyB,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,aAAa,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,YAAY,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,WAAW,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,gBAAgB,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,sBAAsB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,4BAA4B,CAAC,GAAK,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,eAAe,KAAO,kCAAkC,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,GAAG,KAAO,yBAAyB,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,GAAK,YAAY,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,sBAAsB,CAAC,GAAK,aAAa,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,aAAa,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,oBAAoB,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,WAAW,KAAO,SAAS,KAAO,oCAAoC,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,oBAAoB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,yBAAyB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,4BAA4B,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,yBAAyB,KAAO,qBAAqB,CAAC,GAAK,YAAY,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,6BAA6B,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,gCAAgC,CAAC,GAAK,aAAa,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,+BAA+B,CAAC,GAAK,YAAY,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,yBAAyB,KAAO,kBAAkB,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,aAAa,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,yBAAyB,CAAC,KAAO,UAAU,KAAO,mBAAmB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,yBAAyB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,aAAa,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,YAAY,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,yBAAyB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,gCAAgC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,8BAA8B,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,YAAY,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,YAAY,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,4BAA4B,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,2BAA2B,CAAC,KAAO,UAAU,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,8BAA8B,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,YAAY,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,wBAAwB,OAAS,GAAG,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,aAAa,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,2BAA2B,CAAC,GAAK,YAAY,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,YAAY,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,GAAK,aAAa,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,wBAAwB,KAAO,6BAA6B,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,2BAA2B,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,uBAAuB,CAAC,GAAK,YAAY,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,2BAA2B,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,uBAAuB,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,wBAAwB,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,oBAAoB,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,wBAAwB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,2BAA2B,CAAC,GAAK,aAAa,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,yBAAyB,KAAO,mCAAmC,CAAC,GAAK,YAAY,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,kBAAkB,CAAC,KAAO,qBAAqB,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,4BAA4B,KAAO,0BAA0B,CAAC,GAAK,aAAa,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,YAAY,OAAS,wBAAwB,OAAS,GAAG,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,mBAAmB,KAAO,mCAAmC,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,gCAAgC,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,UAAU,KAAO,wBAAwB,KAAO,uBAAuB,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,eAAe,KAAO,gBAAgB,CAAC,GAAK,aAAa,OAAS,sBAAsB,OAAS,GAAG,KAAO,YAAY,CAAC,GAAK,aAAa,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,mBAAmB,CAAC,GAAK,aAAa,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,mBAAmB,CAAC,GAAK,YAAY,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,mBAAmB,CAAC,GAAK,YAAY,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,0BAA0B,CAAC,KAAO,gBAAgB,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,aAAa,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,gBAAgB,KAAO,UAAU,KAAO,oBAAoB,CAAC,GAAK,aAAa,OAAS,oBAAoB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,0BAA0B,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,aAAa,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,4BAA4B,CAAC,GAAK,aAAa,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,gBAAgB,KAAO,qBAAqB,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,uCAAuC,CAAC,KAAO,SAAS,KAAO,6BAA6B,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,4BAA4B,CAAC,GAAK,aAAa,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,WAAW,OAAS,sCAAsC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,oBAAoB,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,0BAA0B,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,4BAA4B,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,4BAA4B,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,OAAO,KAAO,uBAAuB,KAAO,iBAAiB,CAAC,GAAK,YAAY,OAAS,+BAA+B,OAAS,GAAG,KAAO,6BAA6B,CAAC,GAAK,YAAY,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,iCAAiC,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,YAAY,OAAS,+BAA+B,OAAS,GAAG,KAAO,6BAA6B,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,aAAa,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,aAAa,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,oBAAoB,CAAC,KAAO,mBAAmB,KAAO,SAAS,KAAO,eAAe,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,6BAA6B,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,6BAA6B,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,2BAA2B,CAAC,KAAO,cAAc,KAAO,+BAA+B,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,aAAa,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,yBAAyB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,GAAG,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,KAAO,mBAAmB,CAAC,GAAK,YAAY,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,GAAG,KAAO,wBAAwB,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,oBAAoB,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,gCAAgC,OAAS,GAAG,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,0BAA0B,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,aAAa,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,0BAA0B,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,8BAA8B,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,iBAAiB,CAAC,GAAK,aAAa,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,uCAAuC,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uCAAuC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,4BAA4B,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,kBAAkB,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,eAAe,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uCAAuC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,gBAAgB,KAAO,qBAAqB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,mBAAmB,KAAO,aAAa,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,aAAa,CAAC,GAAK,aAAa,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,kCAAkC,OAAS,GAAG,KAAO,gCAAgC,CAAC,GAAK,aAAa,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,yBAAyB,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,2BAA2B,CAAC,GAAK,YAAY,OAAS,sCAAsC,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,KAAO,2BAA2B,CAAC,GAAK,aAAa,OAAS,qCAAqC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,KAAO,yBAAyB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,aAAa,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,4BAA4B,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,UAAU,KAAO,2BAA2B,KAAO,kCAAkC,CAAC,GAAK,WAAW,OAAS,kCAAkC,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,aAAa,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,GAAK,aAAa,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,8BAA8B,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,aAAa,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,gBAAgB,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,+BAA+B,KAAO,SAAS,CAAC,GAAK,aAAa,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,+BAA+B,KAAO,SAAS,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,uBAAuB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,SAAS,CAAC,GAAK,YAAY,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,mBAAmB,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,GAAG,KAAO,2BAA2B,CAAC,GAAK,YAAY,OAAS,+BAA+B,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,aAAa,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,2BAA2B,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,4BAA4B,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,yBAAyB,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,GAAG,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,qCAAqC,OAAS,GAAG,KAAO,iCAAiC,CAAC,GAAK,YAAY,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,yBAAyB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,iBAAiB,KAAO,cAAc,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,uBAAuB,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,YAAY,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,mCAAmC,OAAS,GAAG,KAAO,yBAAyB,CAAC,GAAK,YAAY,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,yBAAyB,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,aAAa,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,YAAY,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,aAAa,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,8BAA8B,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,4BAA4B,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,aAAa,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,mBAAmB,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,qBAAqB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,2BAA2B,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,iBAAiB,KAAO,kCAAkC,CAAC,GAAK,aAAa,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,gCAAgC,CAAC,GAAK,YAAY,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,0BAA0B,CAAC,GAAK,YAAY,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,eAAe,KAAO,gBAAgB,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,aAAa,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,gCAAgC,CAAC,GAAK,aAAa,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,+BAA+B,CAAC,GAAK,WAAW,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,+BAA+B,CAAC,GAAK,aAAa,OAAS,4CAA4C,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,cAAc,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,oCAAoC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,kCAAkC,CAAC,GAAK,YAAY,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,gCAAgC,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,cAAc,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,YAAY,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,aAAa,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,qCAAqC,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,YAAY,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,mCAAoC,MAAS,K,OCJp/5P,MAAMY,GAAa,EAAOC,IAAIC,aAAaC,KAAKrmB,GAAqB,cAAhBA,EAAEsmB,WAA2BC,KAAO,EACnFC,GAAY,EAAOL,IAAIC,aAAaC,KAAKrmB,GAAqB,aAAhBA,EAAEsmB,WAA0BC,KAAO,EACjFE,GAAU,EAAON,IAAIC,aAAaC,KAAKrmB,GAAqB,WAAhBA,EAAEsmB,WAAwBC,KAAO,EAC7EG,GAAc,EAAOC,QAAQP,aAAaC,KAAKrmB,GAAqB,gBAAhBA,EAAEsmB,WAA6BC,KAAO,EAIhG,MAAM,EAUJ,YAAY/G,EAA4D,IATjE,KAAAoH,UAAY,KACZ,KAAAhU,OAAS,EACT,KAAAiU,SAAU,EACT,KAAAnc,OAAQ,EAOdrM,KAAKuoB,UAAYpH,EAAQsH,gBAAkB,KAC3CzoB,KAAKwoB,QAAUrH,EAAQqH,UAAW,EAClCxoB,KAAK0oB,eAGA,eACL1oB,KAAKwE,OAAS,IAAIF,YAAYtE,KAAKuoB,WACnCvoB,KAAK2oB,QAAU,IAAIlP,WAAWzZ,KAAKwE,QACnCxE,KAAK8E,SAAW,IAAIH,WAAW3E,KAAKwE,QAG/B,WACL,MAAMokB,EAAe,IAAItkB,YAAYtE,KAAKuU,QAQpCsU,EAAc,IAAIpP,WAAWmP,GAQnC,OAPAC,EAAYxjB,IAAIrF,KAAK2oB,QAAQxU,SAAS,EAAGnU,KAAKuU,OAAS,IAOhDsU,EAGF,YACL,OAAO7oB,KAAK8oB,WAAWtkB,OAKlB,SAASukB,GACd,GAAGA,EAAO,CACR,MAAMH,EAAe,IAAItkB,YAAYtE,KAAKuU,QACpCyU,EAAc,IAAIrkB,WAAWikB,GAInC,OAFAI,EAAY3jB,IAAIrF,KAAK8E,SAASqP,SAAS,EAAGnU,KAAKuU,SAExCyU,EAGT,MAAM1lB,EAAkB,GACxB,IAAI,IAAIzC,EAAI,EAAGA,EAAIb,KAAKuU,OAAQ1T,IAC9ByC,EAAMnC,KAAKnB,KAAK8E,SAASjE,IAE3B,OAAOyC,EAGF,YAAY2lB,GACjB,GAAGjpB,KAAKuU,OAAS0U,EAAYjpB,KAAKuoB,UAChC,OAIFvoB,KAAKuoB,UAAwF,EAA5Ezf,KAAK4B,KAAK5B,KAAKK,IAAqB,EAAjBnJ,KAAKuoB,UAAevoB,KAAKuU,OAAS0U,EAAY,IAAM,GACxF,MAAMC,EAAiBlpB,KAAKwE,OAEtB2kB,EAAgB,IAAI1P,WAAWyP,GAErClpB,KAAK0oB,eAEL,IAAIjP,WAAWzZ,KAAKwE,QAAQa,IAAI8jB,GAK3B,SAAStoB,EAAWuoB,GACzBppB,KAAKqM,OAASqB,QAAQC,IAAI,MAAO9M,EAAE2C,SAAS,IAAK3C,EAAGuoB,GAEpD,MAAM7U,EAASvU,KAAKuU,OAAS,EAK7B,OAJAvU,KAAKqpB,YAAY,GACjBrpB,KAAK2oB,QAAQpU,GAAU1T,EACvBb,KAAKuU,QAAU,EAERA,EAGF,SAAS1T,EAAWuoB,GACzB,OAAOppB,KAAKspB,SAASzoB,GAAIuoB,GAAS,IAAM,QAGnC,UAAUvoB,EAAYuoB,GACxBvoB,EACDb,KAAKspB,SAASnB,GAAWiB,GAAS,IAAM,SAExCppB,KAAKspB,SAASzB,GAAYuB,GAAS,IAAM,SAItC,WAAWG,EAAeC,EAAcJ,GAC7CppB,KAAKspB,SAASE,GAAOJ,GAAS,IAAM,cACpCppB,KAAKspB,SAASC,GAAQH,GAAS,IAAM,eAGhC,UAAUxS,EAAwCwS,GACvD,GAAG5iB,MAAMijB,QAAQ7S,GACf,OAAoB,IAAjBA,EAAMvW,OACAL,KAAK0pB,WAAW9S,EAAM,GAAIA,EAAM,GAAIwS,GAEpCppB,KAAK2pB,cAAc/S,EAAO,GAAIwS,GAIrB,iBAAVxS,IACRA,EAAQA,EAAQA,EAAMpT,WAAa,KAGrC,MAAM6a,EAAI,WAGJxV,EAAI,YAAW+N,EAAO,GAAI,IAC1B5M,EAAI,YAAInB,GACRzG,EAAI,YAAIyG,GACd,YAAQA,EAAG,YAAW,EAAIrF,SAAS,IAAK,GAAI,IAAKwG,EAAG5H,GAGpD,MAAMmO,GAAQ,YAAWvG,EAAG,IAC5B,IAAIwG,GAAO,YAAWpO,EAAG,IAEtBmO,EAAOC,IACRA,GAAO6N,GAOTre,KAAKspB,SAAS9Y,GAAM4Y,GAAS,IAAM,cACnCppB,KAAKspB,SAAS/Y,GAAO6Y,GAAS,IAAM,eAG/B,YAAY/T,EAAQ+T,GACzB,MAAM5kB,EAAS,IAAIF,YAAY,GACzBqkB,EAAU,IAAIlP,WAAWjV,GACZ,IAAIolB,aAAaplB,GAEzB,GAAK6Q,EAEhBrV,KAAKspB,SAASX,EAAQ,IAAKS,GAAS,IAAM,gBAC1CppB,KAAKspB,SAASX,EAAQ,IAAKS,GAAS,IAAM,iBAGrC,YAAYhmB,EAAWgmB,GAC5BppB,KAAKqM,OAASqB,QAAQC,IAAI,MAAOvK,GAAIgmB,GAAS,IAAM,gBAE3C7kB,IAANnB,IACDA,EAAI,IAEN,MAAMymB,EAAQC,SAASC,mBAAmB3mB,IAE1CpD,KAAKqpB,YAAYQ,EAAMxpB,OAAS,GAEhC,MAAMuD,EAAMimB,EAAMxpB,OACfuD,GAAO,IACR5D,KAAK8E,SAAS9E,KAAKuU,UAAY3Q,GAE/B5D,KAAK8E,SAAS9E,KAAKuU,UAAY,IAC/BvU,KAAK8E,SAAS9E,KAAKuU,UAAkB,IAAN3Q,EAC/B5D,KAAK8E,SAAS9E,KAAKuU,WAAmB,MAAN3Q,IAAiB,EACjD5D,KAAK8E,SAAS9E,KAAKuU,WAAmB,SAAN3Q,IAAmB,IAErD,IAAI,IAAI/C,EAAI,EAAGA,EAAI+C,EAAK/C,IACtBb,KAAK8E,SAAS9E,KAAKuU,UAAYsV,EAAMzX,WAAWvR,GAIlD,KAAMb,KAAKuU,OAAS,GAClBvU,KAAK8E,SAAS9E,KAAKuU,UAAY,EAI5B,WAAWjR,EAA4C8lB,GACzD9lB,aAAiBgB,YAClBhB,EAAQ,IAAIqB,WAAWrB,QACLiB,IAAVjB,IACRA,EAAQ,IAEVtD,KAAKqM,OAASqB,QAAQC,IAAI,MAAO,YAAWrK,IAAqB8lB,GAAS,IAAM,UAGhF,MAAMxlB,EAAON,EAAsBmB,YAAenB,EAAqBjD,OAevE,IAdAL,KAAKqpB,YAAYzlB,EAAM,GACpBA,GAAO,IACR5D,KAAK8E,SAAS9E,KAAKuU,UAAY3Q,GAE/B5D,KAAK8E,SAAS9E,KAAKuU,UAAY,IAC/BvU,KAAK8E,SAAS9E,KAAKuU,UAAkB,IAAN3Q,EAC/B5D,KAAK8E,SAAS9E,KAAKuU,WAAmB,MAAN3Q,IAAiB,EACjD5D,KAAK8E,SAAS9E,KAAKuU,WAAmB,SAAN3Q,IAAmB,IAGrD5D,KAAK8E,SAASO,IAAI/B,EAAqBtD,KAAKuU,QAC5CvU,KAAKuU,QAAU3Q,EAGT5D,KAAKuU,OAAS,GAClBvU,KAAK8E,SAAS9E,KAAKuU,UAAY,EAI5B,cAAcjR,EAAYkH,EAAW4e,GACvC9lB,aAAiBgB,cAClBhB,EAAQ,IAAIqB,WAAWrB,IAGzB,MAAMM,EAAMN,EAAMjD,OAClB,GAAImK,EAAO,IAAc,EAAN5G,IAAa4G,EAAM,CACpC,MAAM4E,EAAQ,IAAIiD,MAAM,iBAAmB7H,EAAO,KAAOlH,EAAMjD,QAE/D,MADAqN,QAAQ0B,MAAMA,EAAO9L,EAAO8lB,GACtBha,EAGRpP,KAAKqM,OAASqB,QAAQC,IAAI,MAAO,YAAWrK,IAAS8lB,GAAS,IAAM,OAAS5e,GAC7ExK,KAAKqpB,YAAYzlB,GAEjB5D,KAAK8E,SAASO,IAAI/B,EAAOtD,KAAKuU,QAC9BvU,KAAKuU,QAAU3Q,EAGV,cAAcN,EAA0B8lB,GAC1C9lB,aAAiBgB,cAClBhB,EAAQ,IAAIqB,WAAWrB,IAGzB,MAAMM,EAAMN,EAAMjD,OAElBL,KAAKqM,OAASqB,QAAQC,IAAI,MAAO,YAAWrK,GAAS8lB,GAAS,IAC9DppB,KAAKqpB,YAAYzlB,GAEjB5D,KAAK8E,SAASO,IAAI/B,EAAOtD,KAAKuU,QAC9BvU,KAAKuU,QAAU3Q,EAGV,YAAYomB,EAAoBC,GACrC,MACMC,GADSlqB,KAAKwoB,QAAU,EAAOF,QAAU,EAAOR,KAC5BqC,QAAQnC,KAAKtmB,GAAKA,EAAE0oB,SAAWJ,GAEzD,IAAIE,EACF,MAAM,IAAI7X,MAAM,aAAe2X,EAAa,UAG9ChqB,KAAKqqB,SAASH,EAAWhC,GAAI8B,EAAa,QAE1C,MAAMM,EAASL,EAAOK,QAAUL,EAC1BM,EAA8C,GAEpD,IAAI,MAAMC,KAASN,EAAWD,OAAQ,CACpC,IAAIlG,EAAOyG,EAAMzG,KAEjB,IAA0B,IAAvBA,EAAKjZ,QAAQ,KAAa,CAC3B,MAAM2f,EAAW1G,EAAK2G,MAAM,KACtBC,EAAWF,EAAS,GAAGC,MAAM,KAEnC,KAAKT,EAAOU,EAAS,IAAO,IAAMA,EAAS,IAAM,CAC/C,KAAmB,SAAhBF,EAAS,GAAgBH,EAAOE,EAAM3oB,WAA+B0C,IAAvB0lB,EAAOO,EAAM3oB,OAI5D,SAFAooB,EAAOU,EAAS,KAAO,IAAMA,EAAS,GAO1C5G,EAAO0G,EAAS,GAIlB,MAAM5S,EAAS7X,KAAK4qB,YAAYX,EAAOO,EAAM3oB,MAAOkiB,EAAMiG,EAAa,IAAMQ,EAAM3oB,KAAO,KAE9E,MAATkiB,IACDkG,EAAOO,EAAM3oB,MAAQooB,EAAOO,EAAM3oB,OAAS,EAC3C0oB,EAAaC,EAAM3oB,MAAQgW,GAI/B,IAAI,IAAIgT,KAAaN,EACnBvqB,KAAK2oB,QAAQ4B,EAAaM,IAAcZ,EAAOY,GAGjD,OAAOX,EAAWnG,KAGb,YAAYwD,EAAUxD,EAAcqF,GAEzC,OAAOrF,GACL,IAAK,IACHwD,EAAMA,GAAO,EACf,IAAK,MACH,OAAOvnB,KAAKqqB,SAAS9C,EAAK6B,GAC5B,IAAK,OACH,OAAOppB,KAAK8qB,UAAUvD,EAAK6B,GAC7B,IAAK,SACH,OAAOppB,KAAK2pB,cAAcpC,EAAK,IAAK6B,GACtC,IAAK,SACH,OAAOppB,KAAK2pB,cAAcpC,EAAK,IAAK6B,GACtC,IAAK,SACH,OAAOppB,KAAK2pB,cAAcpC,EAAK,IAAK6B,GACtC,IAAK,SACH,OAAOppB,KAAK+qB,YAAYxD,EAAK6B,GAC/B,IAAK,QACH,OAAOppB,KAAKgrB,WAAWzD,EAAK6B,GAC9B,IAAK,SACH,OAAOppB,KAAKirB,YAAY1D,EAAK6B,GAC/B,IAAK,OACH,OAAOppB,KAAKkrB,UAAU3D,EAAK6B,GAC7B,IAAK,OACH,OAGJ,GAAG5iB,MAAMijB,QAAQlC,GAAM,CACrB,GAAyB,WAAtBxD,EAAK/f,OAAO,EAAG,GAChBhE,KAAKspB,SAASlB,EAAQgB,EAAQ,aACzB,GAA0B,WAAtBrF,EAAK/f,OAAO,EAAG,GACxB,MAAM,IAAIqO,MAAM,uBAAyB0R,GAG3C,MAAMoH,EAAWpH,EAAK/f,OAAO,EAAG+f,EAAK1jB,OAAS,GAC9CL,KAAKspB,SAAS/B,EAAIlnB,OAAQ+oB,EAAQ,WAClC,IAAI,IAAIvoB,EAAI,EAAGA,EAAI0mB,EAAIlnB,OAAQQ,IAC7Bb,KAAK4qB,YAAYrD,EAAI1mB,GAAIsqB,EAAU/B,EAAQ,IAAMvoB,EAAI,KAGvD,OAAO,EACF,GAAwC,WAApCkjB,EAAK/f,OAAO,EAAG,GAAGonB,cAC3B,MAAM,IAAI/Y,MAAM,yBAGlB,IAAI,YAASkV,GACX,MAAM,IAAIlV,MAAM,2BAA6B0R,GAG/C,MAAMsH,EAASrrB,KAAKwoB,QAAU,EAAOF,QAAU,EAAOR,IAChDG,EAAYV,EAAO,EACzB,IAAI+D,GAAS,EACb,MAAMC,EAAsCF,EAAOtD,aAAaC,KAAKrmB,GAAKA,EAAEsmB,YAAcA,GAM1F,IAJGqD,EAA6B,MAAnBvH,EAAKhgB,OAAO,MACvBggB,EAAOA,EAAK/f,OAAO,KAGjBunB,EACF,MAAM,IAAIlZ,MAAM,gBAAkB4V,EAAY,UAG7CA,IAAclE,IACfuH,GAAS,GAGPA,GACFtrB,KAAKspB,SAASiC,EAAgBrD,GAAIkB,EAAQ,IAAMnB,EAAY,SAG9D,MAAMqC,EAAS/C,EAAI+C,OACbC,EAA8C,GAEpD,IAAI,MAAMC,KAASe,EAAgBtB,OAAQ,CACzC,IAAIlG,EAAOyG,EAAMzG,KAGjB,IAA0B,IAAvBA,EAAKjZ,QAAQ,KAAa,CAC3B,MAAM2f,EAAW1G,EAAK2G,MAAM,KACtBC,EAAWF,EAAS,GAAGC,MAAM,KAInC,KAAKnD,EAAIoD,EAAS,IAAO,IAAMA,EAAS,IAAM,CAC5C,KAAmB,SAAhBF,EAAS,GAAgBH,GAAUA,EAAOE,EAAM3oB,WAA4B0C,IAApBgjB,EAAIiD,EAAM3oB,OAInE,SAFA0lB,EAAIoD,EAAS,KAAO,IAAMA,EAAS,GAMvC5G,EAAO0G,EAAS,GAIlB,MAAM5S,EAAS7X,KAAK4qB,YAAYrD,EAAIiD,EAAM3oB,MAAOkiB,EAAMqF,EAAQ,IAAMnB,EAAY,KAAOuC,EAAM3oB,KAAO,KAEzF,MAATkiB,IACDwD,EAAIiD,EAAM3oB,MAAQ0lB,EAAIiD,EAAM3oB,OAAS,EACrC0oB,EAAaC,EAAM3oB,MAAQgW,GAI/B,IAAI,IAAIgT,KAAaN,EACnBvqB,KAAK2oB,QAAQ4B,EAAaM,IAActD,EAAIsD,GAG9C,OAAOU,EAAgBxH,MAI3B,MAAM,EAYJ,YAAYvf,EAAkC2c,EAAgE,IAXvG,KAAA5M,OAAS,EAQT,KAAAiU,SAAmB,EAKrBhkB,aAAkBF,aACnBtE,KAAKwE,OAASA,EACdxE,KAAK8E,SAAW,IAAIH,WAAW3E,KAAKwE,UAEpCxE,KAAKwE,OAASA,EAAOA,OACrBxE,KAAK8E,SAAWN,GAUlBxE,KAAKwrB,SAAW,aAAcrK,EAAUA,EAAQqK,SAAW,GAC3DxrB,KAAKwoB,QAAU,YAAarH,GAAUA,EAAQqH,QAC9CxoB,KAAKqM,WAA0B9H,IAAlB4c,EAAQ9U,OAAsB8U,EAAQ9U,MAG9C,QAAQ+c,GAEb,GAAIppB,KAAK8E,SAASzE,OAASL,KAAKuU,OAAU,EAExC,MADA7G,QAAQ0B,MAAMpP,KAAK8E,SAAU9E,KAAKuU,QAC5B,IAAIlC,MAAM,qBAAuB+W,GAIzC,MAAMvoB,EAAI,IAAIkF,YAAY/F,KAAK8E,SAASN,OAAOwQ,MAAMhV,KAAKuU,OAAQvU,KAAKuU,OAAS,IAAI,GASpF,OAPAvU,KAAKqM,OACAqB,QAAQC,IAAI,MAAO9M,EAAE2C,SAAS,IAAK3C,EAAGuoB,EACzCppB,KAAK8E,SAASkQ,MAAMhV,KAAKuU,OAAS,GAAIvU,KAAKuU,OAAS,IACpDvU,KAAK8E,SAASkQ,MAAMhV,KAAKuU,OAAS,GAAIvU,KAAKuU,OAAS,IAAIkX,KAE1DzrB,KAAKuU,QAAU,EAER1T,EAGF,SAASuoB,GACd,OAAOppB,KAAK0rB,SAAStC,GAAS,IAAM,QAG/B,YAAYA,GACjB,MAAM5kB,EAAS,IAAIF,YAAY,GACzBqkB,EAAU,IAAIlP,WAAWjV,GACzBmnB,EAAa,IAAI/B,aAAaplB,GAKpC,OAHAmkB,EAAQ,GAAK3oB,KAAK0rB,SAAStC,GAAS,IAAM,gBAC1CT,EAAQ,GAAK3oB,KAAK0rB,SAAStC,GAAS,IAAM,iBAEnCuC,EAAW,GAGb,UAAUvC,GACf,MAAMI,EAAOxpB,KAAK0rB,SAAStC,GAAS,IAAM,cACpCG,EAAQvpB,KAAK0rB,SAAStC,GAAS,IAAM,eAK3C,OAFgB,YAAaG,EAAOC,GAK/B,UAAUJ,GACf,MAAMvoB,EAAIb,KAAK0rB,SAAStC,GAAS,IAAM,SACvC,OAAGvoB,IAAMsnB,GAECtnB,IAAMgnB,IAIhB7nB,KAAKuU,QAAU,EACRvU,KAAK4rB,YAAY,SAAUxC,IAG7B,YAAYA,GACjB,IAAIxlB,EAAM5D,KAAK8E,SAAS9E,KAAKuU,UAElB,MAAR3Q,IACDA,EAAM5D,KAAK8E,SAAS9E,KAAKuU,UACtBvU,KAAK8E,SAAS9E,KAAKuU,WAAa,EAChCvU,KAAK8E,SAAS9E,KAAKuU,WAAa,IAGrC,IAUInR,EAVAymB,EAAQ,GACZ,IAAI,IAAIhpB,EAAI,EAAGA,EAAI+C,EAAK/C,IACtBgpB,GAAShV,OAAOC,aAAa9U,KAAK8E,SAAS9E,KAAKuU,WAIlD,KAAMvU,KAAKuU,OAAS,GAClBvU,KAAKuU,SAIP,IACEnR,EAAIyoB,mBAAmBC,OAAOjC,IAC9B,MAAO7oB,GACPoC,EAAIymB,EAKN,OAFA7pB,KAAKqM,OAASqB,QAAQC,IAAI,MAAOvK,GAAIgmB,GAAS,IAAM,WAE7ChmB,EAGF,WAAWgmB,GAChB,IAAIxlB,EAAM5D,KAAK8E,SAAS9E,KAAKuU,UAElB,MAAR3Q,IACDA,EAAM5D,KAAK8E,SAAS9E,KAAKuU,UACtBvU,KAAK8E,SAAS9E,KAAKuU,WAAa,EAChCvU,KAAK8E,SAAS9E,KAAKuU,WAAa,IAGrC,MAAMjR,EAAQtD,KAAK8E,SAASqP,SAASnU,KAAKuU,OAAQvU,KAAKuU,OAAS3Q,GAIhE,IAHA5D,KAAKuU,QAAU3Q,EAGT5D,KAAKuU,OAAS,GAClBvU,KAAKuU,SAKP,OAFAvU,KAAKqM,OAASqB,QAAQC,IAAI,MAAO,YAAWrK,IAAS8lB,GAAS,IAAM,UAE7D9lB,EAKF,cAAckH,EAAcue,EAAiBK,GAClD,GAAG5e,EAAO,GACR,MAAM,IAAI6H,MAAM,iBAAmB7H,GAGrC,MAAM5G,EAAM4G,EAAO,EACnB,GAAGue,EAAO,CACR,MAAMlR,EAAS7X,KAAK8E,SAASqP,SAASnU,KAAKuU,OAAQvU,KAAKuU,OAAS3Q,GAEjE,OADA5D,KAAKuU,QAAU3Q,EACRiU,EAGT,MAAMvU,EAAkB,GACxB,IAAI,IAAIzC,EAAI,EAAGA,EAAI+C,EAAK/C,IACtByC,EAAMnC,KAAKnB,KAAK8E,SAAS9E,KAAKuU,WAKhC,OAFAvU,KAAKqM,OAASqB,QAAQC,IAAI,MAAO,YAAWrK,IAAS8lB,GAAS,IAAM,OAAS5e,GAEtElH,EAKF,cAAcM,EAAUmlB,EAAgBK,GAC7C,IAAW,IAARxlB,IACDA,EAAM5D,KAAK0rB,SAAStC,GAAS,IAAM,YAC1BppB,KAAK8E,SAASL,WACrB,MAAM,IAAI4N,MAAM,6BAA+BzO,EAAM,iBAAmB5D,KAAK8E,SAASL,YAI1F,GAAGskB,EAAO,CACR,MAAMzlB,EAAQ,IAAIqB,WAAWf,GAG7B,OAFAN,EAAM+B,IAAIrF,KAAK8E,SAASqP,SAASnU,KAAKuU,OAAQvU,KAAKuU,OAAS3Q,IAC5D5D,KAAKuU,QAAU3Q,EACRN,EAGT,MAAMA,EAAkB,GACxB,IAAI,IAAIzC,EAAI,EAAGA,EAAI+C,EAAK/C,IACtByC,EAAMnC,KAAKnB,KAAK8E,SAAS9E,KAAKuU,WAKhC,OAFAvU,KAAKqM,OAASqB,QAAQC,IAAI,MAAO,YAAWrK,GAAS8lB,GAAS,IAEvD9lB,EAGF,YAAYygB,EAAWqF,GAC5B,OAAOrF,GACL,IAAK,IACL,IAAK,MACH,OAAO/jB,KAAK+rB,SAAS3C,GACvB,IAAK,OACH,OAAOppB,KAAKgsB,UAAU5C,GACxB,IAAK,SACH,OAAOppB,KAAKisB,cAAc,KAAK,EAAO7C,GACxC,IAAK,SACH,OAAOppB,KAAKisB,cAAc,KAAK,EAAO7C,GACxC,IAAK,SACH,OAAOppB,KAAKisB,cAAc,KAAK,EAAO7C,GACxC,IAAK,SACH,OAAOppB,KAAKksB,YAAY9C,GAC1B,IAAK,QACH,OAAOppB,KAAKmsB,WAAW/C,GACzB,IAAK,SACH,OAAOppB,KAAKosB,YAAYhD,GAC1B,IAAK,OACH,OAAOppB,KAAKqsB,UAAUjD,GACxB,IAAK,OACH,OAAO,EAKX,GAFAA,EAAQA,GAASrF,GAAQ,SAEA,WAAtBA,EAAK/f,OAAO,EAAG,IAAyC,WAAtB+f,EAAK/f,OAAO,EAAG,GAAiB,CACnE,GAAsB,MAAnB+f,EAAKhgB,OAAO,GAAY,CACzB,MAAMuoB,EAActsB,KAAK0rB,QAAQtC,EAAQ,QACnCmD,EAAiBD,EAEvB,GAAGC,IAAmBlE,EAAY,CAChC,MAAMmE,EAAaxsB,KAAKmsB,WAAW/C,EAAQ,mBACrCqD,EAAe,yBAAeD,GAGpC,OAFwB,IAAI,EAAkBC,GAEvBb,YAAY7H,EAAMqF,GAG3C,GAAGmD,IAAmBnE,EACpB,MAAM,IAAI/V,MAAM,8BAAgCia,GAIpD,MAAM1oB,EAAM5D,KAAK0rB,QAAQtC,EAAQ,WAC3BvR,EAAc,GACpB,GAAGjU,EAAM,EAAG,CACV,MAAMunB,EAAWpH,EAAK/f,OAAO,EAAG+f,EAAK1jB,OAAS,GAC9C,IAAI,IAAIQ,EAAI,EAAGA,EAAI+C,EAAK/C,IACtBgX,EAAO1W,KAAKnB,KAAK4rB,YAAYT,EAAU/B,EAAQ,IAAMvoB,EAAI,MAI7D,OAAOgX,EAGT,MAAMwT,EAASrrB,KAAKwoB,QAAU,EAAOF,QAAU,EAAOR,IACtD,IAAIyD,EAAsC,KACtCmB,GAAW,EAEf,GAAsB,MAAnB3I,EAAKhgB,OAAO,GAAY,CACzB,MAAM4oB,EAAY5I,EAAK/f,OAAO,GAE9B,GADAunB,EAAkBF,EAAOtD,aAAaC,KAAKrmB,GAAKA,EAAEoiB,OAAS4I,IACvDpB,EACF,MAAM,IAAIlZ,MAAM,mCAAqC0R,QAElD,GAAGA,EAAKhgB,OAAO,IAAM,IAAMggB,EAAKhgB,OAAO,IAAM,KAElD,GADAwnB,EAAkBF,EAAOtD,aAAaC,KAAKrmB,GAAKA,EAAEsmB,YAAclE,IAC5DwH,EACF,MAAM,IAAIlZ,MAAM,wCAA0C0R,OAEvD,CACL,MAAMuI,EAActsB,KAAK0rB,QAAQtC,EAAQ,QACnCmD,EAAiBD,EAEvB,GAAGC,IAAmBlE,EAAY,CAChC,MAAMmE,EAAaxsB,KAAKmsB,WAAW/C,EAAQ,mBACrCqD,EAAe,yBAAeD,GAGpC,OAFwB,IAAI,EAAkBC,GAEvBb,YAAY7H,EAAMqF,GAG3C,IAAI7G,EAAQ8I,EAAOuB,kBACnB,IAAIrK,EAAO,CACT8I,EAAOuB,kBAAoBrK,EAAQ,GACnC,IAAI,IAAI1hB,EAAI,EAAG+C,EAAMynB,EAAOtD,aAAa1nB,OAAQQ,EAAI+C,EAAK/C,IACxD0hB,EAAM8I,EAAOtD,aAAalnB,GAAGqnB,IAAMrnB,EAIvC,MAAMA,EAAI0hB,EAAMgK,GAKhB,GAJG1rB,IACD0qB,EAAkBF,EAAOtD,aAAalnB,KAGpC0qB,GAAmBvrB,KAAKwoB,QAAS,CACnC,MAAMqE,EAAiB,EAAO/E,IAC9B,IAAI,IAAIjnB,EAAI,EAAG+C,EAAMipB,EAAe9E,aAAa1nB,OAAQQ,EAAI+C,EAAK/C,IAChE,IAAIgsB,EAAe9E,aAAalnB,GAAGqnB,KAAOqE,EAAgB,CACxDhB,EAAkBsB,EAAe9E,aAAalnB,UAEvCb,KAAKwoB,QACZkE,GAAW,EACX,OAKN,IAAInB,EAAiB,CAGnB,IAAIuB,EAAcC,EAFlBrf,QAAQ0B,MAAM,yBAA0Bkd,GAGxC,IACEQ,EAAO9sB,KAAK+rB,SAAS3C,GACrB2D,EAAO/sB,KAAK+rB,SAAS3C,GACrB,MAAM7H,IAIR,MAAM,IAAIlP,MAAM,0BAA4Bia,EAAc,IAAMQ,EAAO,IAAMC,EAAO,IAAM3D,IAI9F,MAAMnB,EAAYsD,EAAgBtD,UAE5BpQ,EAAc,CAAC,EAAKoQ,GACpB+E,GAAehtB,KAAKwoB,QAAU,MAAQ,IAAMP,EAClD,GAAGjoB,KAAKwrB,SAASwB,GACfhtB,KAAKwrB,SAASwB,GAAanV,EAAQuR,EAAQ,IAAMnB,EAAY,UAE7D,IAAI,IAAIpnB,EAAI,EAAG+C,EAAM2nB,EAAgBtB,OAAO5pB,OAAQQ,EAAI+C,EAAK/C,IAAK,CAChE,MAAM2pB,EAAQe,EAAgBtB,OAAOppB,GACrC,IAAIkjB,EAAOyG,EAAMzG,KAEL,MAATA,QAAkCxf,IAAlBsT,EAAOyS,SACxBzS,EAAOyS,OAAS,IAGlB,MAAM2C,GAAiC,IAAvBlJ,EAAKjZ,QAAQ,KAC7B,GAAGmiB,EAAQ,CACT,MAAMxC,EAAW1G,EAAK2G,MAAM,KACtBC,EAAWF,EAAS,GAAGC,MAAM,KAEnC,KAAK7S,EAAO8S,EAAS,IAAO,IAAMA,EAAS,IAEzC,SAKF5G,EAAO0G,EAAS,GAGlB,MAAMloB,EAAQvC,KAAK4rB,YAAY7H,EAAMqF,EAAQ,IAAMnB,EAAY,KAAOuC,EAAM3oB,KAAO,KAEhForB,GAAmB,SAATlJ,EACXlM,EAAOyS,OAAOE,EAAM3oB,MAAQU,EAM5BsV,EAAO2S,EAAM3oB,MAAQU,EAS3B,OAJGmqB,IACD1sB,KAAKwoB,SAAU,GAGV3Q,EAGF,YACL,OAAO7X,KAAKuU,OAGP,WACL,GAAGvU,KAAKuU,SAAWvU,KAAK8E,SAASzE,OAC/B,MAAM,IAAIgS,MAAM,mCAGlB,OAAO,GAIX,IAAe6a,kBAAoB,EACnC,IAAeC,gBAAkB,E,WC3uBjC,MAAMC,EAAc,IAvDb,MAIL,cAHQ,KAAAC,cAAgB,CAAC,EAAG,GACpB,KAAAC,WAAa,EAGnB,EAAenrB,IAAI,sBAAsBb,KAAMmR,IAC1CA,IACDzS,KAAKstB,WAAa7a,KAKjB,aACL,MAAM8a,EAAY3e,KAAKC,MAKvB,IAAI2e,EAAY,CAJJ1kB,KAAKC,MAAMwkB,EAAY,KAAQvtB,KAAKstB,WACnCC,EAAY,KAGc,GAF5B,YAAc,QAE+B,EAAK,IAC1DvtB,KAAKqtB,cAAc,GAAKG,EAAU,IACnCxtB,KAAKqtB,cAAc,KAAOG,EAAU,IAAMxtB,KAAKqtB,cAAc,IAAMG,EAAU,MAC7EA,EAAY,CAACxtB,KAAKqtB,cAAc,GAAIrtB,KAAKqtB,cAAc,GAAK,IAG9DrtB,KAAKqtB,cAAgBG,EAWrB,OATY,YAAaA,EAAU,GAAIA,EAAU,IAY5C,gBAAgBC,EAAoBC,GAEzC,MAAMC,EAAgBF,GADtBC,GAAaA,GAAa9e,KAAKC,OAAS,IAAO,GAEzC+e,EAAU9kB,KAAK+kB,IAAI7tB,KAAKstB,WAAaK,GAAiB,GAU5D,OATA,EAAetoB,IAAI,CACjByoB,mBAAoBH,IAGtB3tB,KAAKqtB,cAAgB,CAAC,EAAG,GACzBrtB,KAAKstB,WAAaK,EAIXC,IAKX,IAAeR,YAAcA,EACd,QC1DA,MAXH,CACVlF,GAAI,QACJpR,KAAM,mCACNwM,QAAS,QACTyK,gBAAiB,QACjBC,SAAU,QACVC,aAAc,KACdC,QAAS,GACTC,SAAU,G,0SCyDZ,IAAIC,EAEW,MAAM,EAqDnB,YAAmBC,EAAsBC,EAA2BC,EAClEC,EAA8BC,EAAwBtN,EAA4B,IADjE,KAAAkN,OAAsB,KAAAC,UAA2B,KAAAC,YACpC,KAAAE,YA/CxB,KAAAC,mBAAoC,GAEpC,KAAAC,aAEJ,GAEI,KAAAC,gBAA6C,GAC7C,KAAAC,YAA6B,GAC7B,KAAAC,eAAgC,GAChC,KAAAC,kBAAmB,EAanB,KAAAC,MAAgB,EAKhB,KAAAC,cAGG,KAKJ,KAAAC,UAAW,EACV,KAAAC,iBAAmB,EAEnB,KAAA9iB,MAAQ,KAAwB,IAAMA,MAU5CrM,KAAKovB,aAAe,YAAoBpvB,KAAKsuB,SAC7CtuB,KAAKwuB,WAAa,YAAoBA,GAEtCxuB,KAAKqvB,eAAiBlO,EAAQmO,WAC9BtvB,KAAKuvB,iBAAmBpO,EAAQqO,aAChCxvB,KAAKyvB,gBAAkBzvB,KAAKqvB,cAAgBrvB,KAAKuvB,eAEjD,MAAMG,EAAS1vB,KAAKqvB,aAAe,KAAOrvB,KAAKuvB,eAAiB,KAAO,GACvEvvB,KAAK6B,KAAO,OAASwsB,EAAOqB,EAE5B1vB,KAAK2N,IAAM,OAAAqB,EAAA,GAAOhP,KAAK6B,KAAM,IAAU8L,IAAM,IAAUyB,MAAQ,IAAU/C,MAAQ,IAAU8C,MAC3FnP,KAAK2N,IAAI,eAQT3N,KAAK2vB,gBAqBF3vB,KAAKyuB,UAA4BmB,UAAY5vB,KAW5CA,KAAKyuB,UAA4BoB,WACnC7vB,KAAK8vB,qBAAoB,GAItB,gBACL9vB,KAAKgvB,MAAQ,EACbhvB,KAAK+vB,cAAgB/vB,KAAKgwB,UAC1BhwB,KAAKgwB,UAAY,IAAIrrB,WAAW,GAAGwd,YAY9B,kBAAkB8N,GACvB,MAAMC,EAAclwB,KAAK2uB,aAAasB,GACtC,QAAIC,IAIDA,EAAYC,WCjLZ,SAA2BC,EAAiBjN,GACjD,IAAI,IAA2BtiB,EAAduvB,EAAM/vB,OAAqB,EAAGQ,GAAK,IAAKA,EACvDsiB,EAASiN,EAAMvvB,GAAIA,EAAGuvB,GDgLpBC,CAAeH,EAAYI,MAAO,CAACC,EAAoBC,KACrD,MAAMC,EAAmBzwB,KAAK0wB,kBAAkBH,GAC5CE,EAGFP,EAAYI,MAAME,GAAOC,EAAiBE,OAF1CT,EAAYI,MAAM7N,OAAO+N,EAAK,KAOpCN,EAAYS,OAAS,EAAYC,aACjCV,EAAYW,OAAS7wB,KAAK8wB,cAAcZ,EAAYa,mBAAqBb,EAAYC,WAMrFnwB,KAAK2uB,aAAauB,EAAYS,QAAUT,SACjClwB,KAAK2uB,aAAasB,GAElBC,GAGF,cAAca,GACnB,IAAI/B,EAAqB,EAAbhvB,KAAKgvB,MAOjB,OALI+B,IACF/B,IACAhvB,KAAKgvB,SAGAA,EAGF,YAAY5E,EAAgBH,EAAa9I,GAC9C,MAAM6P,EAAa,IAAI,EAAgB,CAACxI,SAAS,IAEjDwI,EAAWC,YAAY7G,EAAQH,GAE/B,MAAMuD,EAAY,EAAYoD,aACxB5B,EAAQhvB,KAAK8wB,gBACbpd,EAAU,CACdid,OAAQnD,EACRqD,OAAQ7B,EACRkC,KAAMF,EAAWG,UAAS,IAO5B,OAJG,IAAM9kB,OACPrM,KAAK2N,IAAI,UAAWyc,EAAQH,EAAQuD,EAAWwB,GAG1ChvB,KAAKoxB,YAAY1d,EAASyN,GAG5B,eAAene,EAAame,GACjC,MAAM6P,EAAa,IAAI,EAAgB,CAACxI,SAAS,IACjDwI,EAAWpG,YAAY5nB,EAAQ,UAE/B,MAAMwqB,EAAY,EAAYoD,aACxB5B,EAAQhvB,KAAK8wB,cAAc3P,EAAQ4P,mBACnCrd,EAAU,CACdid,OAAQnD,EACRqD,OAAQ7B,EACRkC,KAAMF,EAAWG,UAAS,IAO5B,OAJG,IAAM9kB,OACPrM,KAAK2N,IAAI,aAAc3K,EAAQwqB,EAAWwB,GAGrChvB,KAAKoxB,YAAY1d,EAASyN,GAG5B,YAAYiJ,EAAgBH,EAAc,GAAI9I,EAA4B,IAC/E,MAAM6P,EAAa,IAAI,EAAgB7P,GAEvC,IAAInhB,KAAK+uB,iBAAkB,CAGzB,MAAMsC,EAAkB,EAAOvJ,IAAIqC,QAAQnC,KAAKtmB,GAAkB,oBAAbA,EAAE0oB,QACvD,IAAIiH,EAAiB,MAAM,IAAIhf,MAAM,uBACrC2e,EAAW3G,UAAUgH,EAAgBnJ,KAAO,EAAG,mBAG/C8I,EAAW3G,SAAS,EAAOiH,MAAO,SAElC,MAAMC,EAAiB,EAAOzJ,IAAIqC,QAAQnC,KAAKtmB,GAAkB,mBAAbA,EAAE0oB,QACtD,IAAImH,EAAgB,MAAM,IAAIlf,MAAM,sBAEpC2e,EAAW3G,UAAUkH,EAAerJ,KAAO,EAAG,kBAC9C8I,EAAW3G,SAAS,EAAK,SACzB2G,EAAW3G,SAAS,EAAInC,GAAI,UAC5B8I,EAAWjG,YAAYyG,UAAUC,WAAa,oBAAqB,gBACnET,EAAWjG,YAAYyG,UAAUE,UAAY,mBAAoB,kBACjEV,EAAWjG,YAAY,EAAIzH,QAAS,eACpC0N,EAAWjG,YAAYyG,UAAUG,UAAY,KAAM,oBACnDX,EAAWjG,YAAY,EAAIiD,SAAU,aACrCgD,EAAWjG,YAAYyG,UAAUG,UAAY,KAAM,aAcrD,GAAGxQ,EAAQyQ,eAAgB,CACzB,QAAiCrtB,IAA9B6pB,EAAyC,CAC1C,MAAM1sB,EAAI,EAAOomB,IAAIqC,QAAQnC,KAAKtmB,GAAkB,mBAAbA,EAAE0oB,QACzCgE,EAA4B1sB,GAAKA,EAAEwmB,KAAO,EAAI,EAG7CkG,GAKD4C,EAAW3G,SAAS+D,EAA2B,kBAC/C4C,EAAWlG,UAAU3J,EAAQyQ,eAAgB,WAE7C5xB,KAAK2N,IAAIyB,MAAM,sBAInB+R,EAAQ0Q,WAAab,EAAWC,YAAY7G,EAAQH,GAMpD,MAEMvW,EAAU,CACdid,OAHgB,EAAYC,aAI5BC,OAHY7wB,KAAK8wB,gBAIjBI,KAAMF,EAAWG,UAAS,GAC1BW,OAAO,GAST,OANG,IAAMzlB,MACPrM,KAAK2N,IAAI,WAAYyc,EAAQ1W,EAASuW,EAAQ9I,GACtCnhB,KAAKqM,OACbrM,KAAK2N,IAAI,WAAYyc,EAAQH,EAAQ9I,GAGhCnhB,KAAKoxB,YAAY1d,EAASyN,GA0R5B,YAAYzN,EAKhByN,GACD,MAAM4Q,EAAU,IAAI3wB,QAAQ,CAACC,EAASgiB,KACpCrjB,KAAK2uB,aAAajb,EAAQid,QAAU3uB,OAAO4L,OAAO8F,EAASyN,EAASA,EAAQ4P,uBACxExsB,EACA,CACAytB,SAAU,CAAC3wB,UAASgiB,YAMxBrjB,KAAK4uB,gBAAgBlb,EAAQid,QAAU,EAEnCxP,EAAQ8Q,YACVjyB,KAAKkyB,kBAGJ,YAAS/Q,KACVA,EAAQqM,UAAY9Z,EAAQid,UAIhC,IAAIxP,EAAQ4P,oBAAsB5P,EAAQgR,WAAY,CACpD,MAAMxL,EAAU5B,WAAW,KACtB/kB,KAAKmvB,kBAAqBvgB,KAAKC,MAAQ7O,KAAKmvB,iBArlB5B,MAylBnBnvB,KAAK2N,IAAIyB,MAAM,UAAWsE,GAC1B1T,KAAK8vB,qBAAoB,KA1lBN,KAimBrBiC,EAAQ/O,QAAQ,KACd4D,aAAaD,GACb3mB,KAAK8vB,qBAAoB,KAI7B,OAAOiC,EAGF,oBAAoBK,GACzB,MAAMC,EAAaryB,KAAKkvB,WAAakD,EACrCpyB,KAAKkvB,SAAWkD,EAEbC,GACE,EAAiBC,0BAClB,EAAiBA,yBAAyB,CACxCpV,EAAG,kBACHkV,OAAQpyB,KAAKkvB,SACbb,KAAMruB,KAAKquB,KACXxsB,KAAM7B,KAAK6B,KACX4tB,gBAAiBzvB,KAAKyvB,gBACtBF,eAAgBvvB,KAAKuvB,eACrBF,aAAcrvB,KAAKqvB,eAepB,WAAW7B,EAAmB+E,EAAQ,KAC3C,MAAMhwB,EAAQgwB,EAAQ3jB,KAAKC,MAAQ0jB,EAAQ,EACrCrC,EAAclwB,KAAK2uB,aAAanB,GACtC,GAAG0C,EAAYC,UACb,IAAI,MAAMqC,KAActC,EAAYI,MAClCtwB,KAAK4uB,gBAAgB4D,GAAcjwB,OAGrCvC,KAAK4uB,gBAAgBpB,GAAajrB,EAGjC2tB,EAAYuC,OACbzyB,KAAK2N,IAAIyB,MAAM,6BAA8B8gB,GAG5ClwB,KAAKqM,OACNrM,KAAK2N,IAAI,cAAe6f,EAAW0C,EAAalwB,KAAK4uB,gBAAiB2D,GAGxEvyB,KAAKkyB,gBAAgBK,GAIV,UAAUG,EAA8BC,G,yCACnD,MAAMprB,EAAIorB,EAAQ,EAAI,EAChBC,EAAmB,YAAa5yB,KAAKovB,aAAajb,SAAS,GAAK5M,EAAG,GAAKA,EAAI,IAAKmrB,GAEjFG,QAAoB,IAAaC,WAAWF,GAElD,OADe,IAAIjuB,WAAWkuB,GAAa1e,SAAS,EAAG,OAKlD,YAAY4e,EAA+BJ,GAChD,MAAMprB,EAAIorB,EAAQ,EAAI,EAChBK,EAAY,IAAIruB,WAAW,IAC3BsuB,EAAY,IAAItuB,WAAW,IAC3BzD,EAAqC,GAU3C,OARA8xB,EAAU3tB,IAAI0tB,EAAQ,GACtBC,EAAU3tB,IAAIrF,KAAKovB,aAAajb,SAAS5M,EAAGA,EAAI,IAAK,IACrDrG,EAASC,KAAK,IAAa2xB,WAAWE,IAEtCC,EAAU5tB,IAAIrF,KAAKovB,aAAajb,SAAS,GAAK5M,EAAG,GAAKA,EAAI,IAAK,GAC/D0rB,EAAU5tB,IAAI0tB,EAAQ,IACtB7xB,EAASC,KAAK,IAAa2xB,WAAWG,IAE/B7xB,QAAQK,IAAIP,GAAUI,KAAM4xB,IACjC,MAAMC,EAAS,IAAIxuB,WAAW,IACxByuB,EAAQ,IAAIzuB,WAAW,IACvB0uB,EAAQ,IAAI1uB,WAAWuuB,EAAQ,IAC/BI,EAAQ,IAAI3uB,WAAWuuB,EAAQ,IAUrC,OARAC,EAAO9tB,IAAIguB,EAAMlf,SAAS,EAAG,IAC7Bgf,EAAO9tB,IAAIiuB,EAAMnf,SAAS,EAAG,IAAK,GAClCgf,EAAO9tB,IAAIguB,EAAMlf,SAAS,GAAI,IAAK,IAEnCif,EAAM/tB,IAAIiuB,EAAMnf,SAAS,EAAG,IAC5Bif,EAAM/tB,IAAIguB,EAAMlf,SAAS,EAAG,IAAK,GACjCif,EAAM/tB,IAAIiuB,EAAMnf,SAAS,GAAI,IAAK,IAE3B,CAACgf,EAAQC,KAIZ,0BAGN,GAAGpzB,KAAK6uB,YAAYxuB,OAAQ,CAC1B,MAAMkzB,EAA2BvzB,KAAK6uB,YAAY7Z,QAGlDhV,KAAKwzB,eAAe,CAClBtW,EAAG,WACHuW,QAASF,GACR,CACDxC,mBAAmB,EACnBkB,YAAY,IAIhB,GAAGjyB,KAAK8uB,eAAezuB,OAAQ,CAC7B,MAAMqzB,EAA8B1zB,KAAK8uB,eAAe9Z,QAClD2e,EAA+B,CACnC1B,YAAY,EACZlB,mBAAmB,EACnBvD,UAAW,IAIbxtB,KAAKwzB,eAAe,CAClBtW,EAAG,iBACHuW,QAASC,GACRC,GAEH3zB,KAAKivB,cAAgB,CACnB2E,WAAYD,EAAWnG,UACvBqG,eAAgBH,GAIpB,IAAII,EACJ,MAAMC,EAAgC,GAGtC,IAAIC,EAAkB,EAOlBC,GAAiB,EAGrB,MAAMC,EAAO,YAAelyB,OAAOkyB,KAAKl0B,KAAK4uB,kBAC7C,IAAI,MAAMpB,KAAa0G,EAAM,CAIzB,MAAMxgB,EAAU1T,KAAK2uB,aAAanB,GAClC,GAAG9Z,GAAWA,EAAQwd,KAAM,CAK1B,MAAMiD,EAAoBzgB,EAAQwd,KAAK7wB,OAAS,GAEhD,GAAI2zB,EAAkBG,EAAqB,SACzCn0B,KAAK2N,IAAIwB,KAAK,iBAAkBuE,EAASqgB,GACzCE,GAAiB,EAEdH,GACD,MAIJC,EAAS5yB,KAAKuS,GACdsgB,GAAmBG,EAUnBL,EAAapgB,SAKR1T,KAAK4uB,gBAAgBpB,GAwBhC,IAAIuG,EAAS1zB,OAEX,OAOF,GAAG0zB,EAAS1zB,OAAS,EAAG,CACtB,MAAM8vB,EAAYnwB,KAAKo0B,yBAAyBJ,EAAiBD,GACjED,EAAa3D,EAAUkE,gBAEvBr0B,KAAK2uB,aAAamF,EAAWnD,QAAUR,EAAUzc,aAEjD1T,KAAK2uB,aAAamF,EAAWnD,QAAUmD,EAGzC9zB,KAAK6uB,YAAc,GAEH7uB,KAAKs0B,qBAAqBR,GAU1C9zB,KAAKu0B,cAMFN,GACDj0B,KAAKkyB,kBAID,yBAAyB8B,EAAyBD,GACxD,MAAM5D,EAAY,IAAI,EAAgB,CACpC3H,SAAS,EACTC,eAAgBuL,EAAkB,KAGpC7D,EAAU9F,SAAS,WAAY,iBAC/B8F,EAAU9F,SAAS0J,EAAS1zB,OAAQ,oBAEpC,MAAMm0B,EAA0B,GAChCT,EAASvuB,QAAQ,CAACkO,EAAS7S,KACzB2zB,EAAcrzB,KAAKuS,EAAQid,QAC3BR,EAAUrF,UAAUpX,EAAQid,OAAQ,aAAe9vB,EAAI,aACvDsvB,EAAU9F,SAAS3W,EAAQmd,OAAQ,aAAehwB,EAAI,aACtDsvB,EAAU9F,SAAS3W,EAAQwd,KAAK7wB,OAAQ,aAAeQ,EAAI,YAC3DsvB,EAAUsE,cAAc/gB,EAAQwd,KAAM,aAAerwB,EAAI,aAG3D,MAAM6S,EAAqB,CACzBid,OAAQ,EAAYC,aACpBC,OAAQ7wB,KAAK8wB,eAAc,GAC3BX,WAAW,EACXG,MAAOkE,GAOT,OAJG,IAAMnoB,OACPrM,KAAK2N,IAAIwB,KAAK,YAAaqlB,EAAe9gB,EAAQid,OAAQjd,EAAQmd,QAG7D,CACLnd,UACA2gB,gBAAiBryB,OAAO4L,OAAO,CAACsjB,KAAMf,EAAUgB,UAAS,IAAQzd,IAIxD,oBAAoBgf,G,yCAC/B,MAAMK,QAAe/yB,KAAK00B,UAAUhC,GAAiB,GAC/CiC,QAAc30B,KAAK40B,YAAY7B,GAAQ,GAM7C,MAAO,CACLzvB,YAJ2B,IAAauxB,WAAWnC,EAAiBiC,EAAM,GAAIA,EAAM,IAKpF5B,aAIG,oBAAoBA,EAA+B+B,GAExD,OAAO90B,KAAK40B,YAAY7B,GAAQ,GAAOzxB,KAAMqzB,GAEpC,IAAaI,WAAWD,EAAeH,EAAM,GAAIA,EAAM,KAI3D,mBAAmBjhB,GASxB,MAAMkB,EAAO,IAAI,EAAgB,CAC/B6T,eAAgB/U,EAAQwd,KAAK7wB,OAAS,OAGxCuU,EAAK+U,cAAc3pB,KAAKwuB,WAAY,GAAI,QACxC5Z,EAAK+U,cAAc3pB,KAAKgwB,UAAW,GAAI,cAEvCpb,EAAKkW,UAAUpX,EAAQid,OAAQ,cAC/B/b,EAAKyV,SAAS3W,EAAQmd,OAAQ,UAE9Bjc,EAAKyV,SAAS3W,EAAQwd,KAAK7wB,OAAQ,uBACnCuU,EAAK6f,cAAc/gB,EAAQwd,KAAM,gBAmBjC,MAAM8D,EAAapgB,EAAKqgB,YAMlBC,EAAiB,GAAMtgB,EAAKL,OAAS,GAAO,IAAM,EAAI,YAAc,IACpEnD,EAA4C,IAAIzM,WAAWuwB,GAAe/S,YAS1EuQ,EAAkB,YAAasC,EAAY5jB,GAajD,OAAOpR,KAAKm1B,oBAAoBzC,GAAiBpxB,KAAM8zB,IAKrD,MAAMzQ,EAAU,IAAI,EAAgB,CAClC8D,eAAgB2M,EAAgB9xB,MAAMjD,OAAS,MAEjDskB,EAAQgF,cAAc3pB,KAAKuuB,UAAW,GAAI,eAC1C5J,EAAQgF,cAAcyL,EAAgBrC,OAAQ,IAAK,WACnDpO,EAAQ8P,cAAcW,EAAgB9xB,MAAO,kBAW7C,OAToBqhB,EAAQwM,UAAS,KAalC,qBAAqBzd,GAC1B,OAAO1T,KAAKq1B,mBAAmB3hB,GAASpS,KAAKg0B,IAC3Ct1B,KAAKqM,OAASrM,KAAK2N,IAAI,sDAAuD+F,EAAS,CAACA,EAAQid,QAAQtf,OAAOqC,EAAQ4c,OAAS,KAIhI,OAFqCtwB,KAAKyuB,UAAU8G,KAAKD,KA8BtD,cAAcE,GAMnBx1B,KAAKmvB,iBAAmBvgB,KAAKC,MAE7B,MAAM4mB,EAAe,IAAI,EAAkBD,GAErCjH,EAAYkH,EAAaxJ,cAAc,IAAI,EAAM,eACvD,IAAI,YAASsC,EAAWvuB,KAAKuuB,WAC3B,MAAM,IAAIlc,MAAM,oCAAsCkc,EAAU9C,KAGlE,MAAMsH,EAAS0C,EAAaxJ,cAAc,KAAK,EAAM,WAC/C6I,EAAgBW,EAAaC,cAAcF,EAAe/wB,WAAagxB,EAAaE,aAAa,EAAM,kBAE7G,OAAO31B,KAAK41B,oBAAoB7C,EAAQ+B,GAAexzB,KAAMoxB,GAEpD1yB,KAAK00B,UAAUhC,GAAiB,GAAOpxB,KAAMu0B,IAClD,IAAI,YAAS9C,EAAQ8C,GAGnB,MAFA71B,KAAK2N,IAAIwB,KAAK,gBAAiB4jB,EAAQ8C,GACvC71B,KAAK2vB,gBACC,IAAItd,MAAM,iDAIlB,IAAIojB,EAAe,IAAI,EAAkB/C,EAAiB,CAAClK,SAAS,IAEjDiN,EAAaxJ,cAAc,IAAI,EAAO,QACzD,MAAM+D,EAAYyF,EAAaxJ,cAAc,IAAI,EAAO,cAClDuB,EAAYiI,EAAazJ,UAAU,cAEzC,KAAI,YAASgE,EAAWhwB,KAAKgwB,YACzBhwB,KAAK+vB,eAAkB,YAASC,EAAWhwB,KAAK+vB,gBAIlD,MAHA/vB,KAAK2N,IAAIwB,KAAK,WAAY6gB,EAAWhwB,KAAKgwB,UAAWhwB,KAAK+vB,cAAe2C,GAGnE,IAAIrgB,MAAM,mCAAqC,YAAW2d,IAGlE,MAAMhB,EAAQyG,EAAa1J,SAAS,UAE9B+J,EAAcpD,EAAgBjuB,WAE9BsxB,EAAoBN,EAAa1J,SAAS,wBAChD,IAAIxX,EAASkhB,EAAaE,YAE1B,GAAII,EAAoB,GACtBA,EAAoBD,EAAcvhB,EAClC,MAAM,IAAIlC,MAAM,6BAA+B0jB,GAEjD,MAAMC,EAAcP,EAAaC,cAAcK,GAAmB,EAAM,gBAExExhB,EAASkhB,EAAaE,YACtB,MAAMT,EAAgBY,EAAcvhB,EACpC,GAAG2gB,EAAgB,IAAMA,EAAgB,KACvC,MAAM,IAAI7iB,MAAM,gCAAkC6iB,GAIpDO,EAAe,IAAI,EAA8BO,EAAa,CAC5DxN,SAAS,EACTgD,SAAU,CACRyK,WAAY,CAACpe,EAAauR,KACxBvR,EAAO8Y,OAAS8E,EAAazJ,UAAU5C,EAAQ,YAC/CvR,EAAOqe,MAAQT,EAAa1J,SAAS3C,EAAQ,WAC7CvR,EAAOvU,MAAQmyB,EAAa1J,SAAS3C,EAAQ,WAE7C,MAAM7U,EAASkhB,EAAaE,YAI5B,IACE9d,EAAOqZ,KAAOuE,EAAa7J,YAAY,SAAUxC,EAAQ,UACzD,MAAMpoB,GACNhB,KAAK2N,IAAIyB,MAAM,cAAepO,EAAE0S,QAAS1S,EAAEm1B,OAC3Cte,EAAOqZ,KAAO,CACZhU,EAAG,cACH9N,MAAOpO,GAIRy0B,EAAalhB,SAAWA,EAASsD,EAAOvU,QAGzCmyB,EAAalhB,OAASA,EAASsD,EAAOvU,QAI1C8yB,cAAe,CAACve,EAAauR,KAC3BvR,EAAO+b,WAAa6B,EAAazJ,UAAU5C,EAAQ,gBAEnD,MAAM8G,EAAclwB,KAAK2uB,aAAa9W,EAAO+b,YACvC7P,EAAOmM,GAAeA,EAAY2B,YAAc,SAEnDha,EAAO+b,aAAe1D,IAKzBrY,EAAOA,OAAS4d,EAAa7J,YAAY7H,EAAMqF,EAAQ,iBAQ7D,MAAO,CACLiN,SAHeZ,EAAa7J,YAAY,GAAI,SAI5C4B,YACAwC,YACAhB,YAMD,gBAAgBsH,GACrB,MAAM9H,EAAa,sBAAY8H,GAE/B,EAAejxB,IAAI,CACjB,CAAC,KAAOrF,KAAKquB,KAAO,gBAAiB,YAAWG,KAGlDxuB,KAAKwuB,WAAa,IAAI7pB,WAAW6pB,GAI5B,gBAAgB+D,GAcrB,MAAMgE,EAAU3nB,KAAKC,OAAS0jB,GAAS,GACvC,GAAGvyB,KAAKu2B,eAAsBhyB,IAAVguB,GAAuBvyB,KAAKu2B,SAAWA,GAEzD,OAUCv2B,KAAKw2B,gBACN5P,aAAa5mB,KAAKw2B,gBAGpB,MAAMC,EAAK,KAGTz2B,KAAKw2B,eAAiB,EACtBx2B,KAAKu2B,QAAU,EAYfv2B,KAAK02B,2BAIP12B,KAAKu2B,QAAUA,EAEZhE,EACDvyB,KAAKw2B,eAAiBhqB,KAAKuY,WAAW0R,EAAIlE,GAE1CkE,IAIG,WAAWE,GAEhB32B,KAAK6uB,YAAY1tB,KAAKw1B,GAKtB32B,KAAKkyB,kBAIA,iBAAiByE,GACnB32B,KAAKqM,OACNrM,KAAK2N,IAAI,aAAcgpB,GAGzB32B,KAAK8uB,eAAe3tB,KAAKw1B,GACzB32B,KAAKkyB,gBAAgB,KAGhB,cACL,IAAI0E,GAAW,EAwBf,OAtBA50B,OAAOkyB,KAAKl0B,KAAK2uB,cAAcnpB,QAASmxB,IACtC,MAAMjjB,EAAU1T,KAAK2uB,aAAagI,GAGlC,GAAGjjB,EAAQqd,wBAAqDxsB,IAAhCvE,KAAK4uB,gBAAgB+H,UAE5C32B,KAAK2uB,aAAagI,QACpB,GAAGjjB,EAAQyc,UAAW,CAC3B,IAAI,MAAMqC,KAAc9e,EAAQ4c,MAC9B,QAAqC/rB,IAAlCvE,KAAK2uB,aAAa6D,GAGnB,YADAoE,GAAW,UAKR52B,KAAK2uB,aAAagI,QAEzBC,GAAW,KAIPA,EAGH,kBAAkBpJ,GACvB,MAAM0C,EAAclwB,KAAK2uB,aAAanB,GACnC0C,IAAgBA,EAAYuC,QAE7BvC,EAAYuC,OAAQ,GAIjB,aAAaoE,GAClB,MAAMC,GAAWD,EAASE,eAAiB,IAAIC,MAAM,6BAA+B,GAGpF,OAFAH,EAASI,WAAaJ,EAASI,WAExB,CACL3d,MAAOud,EAASI,YAAcJ,EAASI,YAAc,EAAI,IAAMJ,EAASI,WACxElT,KAAM+S,EAAQ,IAAM,UACpBI,YAAaJ,EAAQ,IAAO,QAAUD,EAASI,WAAa,IAAMJ,EAASE,cAC3EI,cAAeN,GAQZ,SACL,IAAI,MAAM3O,KAAMloB,KAAK2uB,aAAc,CACjC,MAAMzQ,EAAMle,KAAK2uB,aAAazG,IAC3BhK,EAAIgT,MAAQhT,EAAIiS,YACjBnwB,KAAKo3B,WAAWlP,IAyBf,eAAexU,EAAc8Z,EAAmBwC,GACrD,GAAiB,iBAAdtc,EAAQwJ,EAET,YADAld,KAAK2N,IAAIwB,KAAK,+BAAgCuE,EAAS8Z,GAKzD,GADiB1pB,SAAS0pB,EAAUxpB,OAAO,GAAI,IAAK,IACtC,EACZhE,KAAK2N,IAAIwB,KAAK,2BAA4Bqe,EAAW9Z,QAQvD,OAAOA,EAAQwJ,GACb,IAAK,gBACH,IAAI,MAAMma,KAAgB3jB,EAAQqgB,SAChC/zB,KAAKs3B,eAAeD,EAAcA,EAAa1G,OAAQX,GAGzD,MAGF,IAAK,kBACHhwB,KAAK2N,IAAI,kBAAmB+F,GAE5B1T,KAAKu3B,gBAAgB7jB,EAAQ8jB,iBAE1Bx3B,KAAK2uB,aAAajb,EAAQ+jB,aAC3Bz3B,KAAKo3B,WAAW1jB,EAAQ+jB,YAG1Bz3B,KAAK03B,WAAWlK,GAWhB,MAGF,IAAK,uBAGH,OAFAxtB,KAAK2N,IAAIyB,MAAM,uBAAwBsE,GAEhCA,EAAQujB,YACb,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GAAI,CAEP,MAAMxmB,EAAS,YAAW+c,EAAW,IACrC,YAAY/c,EAAQ,IACpB,MAAMknB,EAAgB,EAAYC,iBAAiB,YAAWnnB,EAAQ,MAC5C,KAAvBiD,EAAQujB,YAAqBU,KAC9B33B,KAAK2N,IAAI,kBACT3N,KAAK2vB,iBAGP,MAAMkI,EAAa73B,KAAK0wB,kBAAkBhd,EAAQ+jB,YAC/CI,GAAY73B,KAAKo3B,WAAWS,EAAWlH,SAkB9C,MAGF,IAAK,UACH,IAAmD,IAAhD3wB,KAAK0uB,mBAAmB5jB,QAAQ0iB,GAGjC,YADAxtB,KAAK03B,WAAWlK,GAIlBxtB,KAAK0uB,mBAAmBvtB,KAAKqsB,GAC1BxtB,KAAK0uB,mBAAmBruB,OAAS,KAClCL,KAAK0uB,mBAAmB9kB,QAG1B5J,KAAKs3B,eAAe5jB,EAAQwd,KAAMxd,EAAQid,OAAQX,GAClD,MAIF,IAAK,sBACHhwB,KAAK03B,WAAWlK,GAEbxtB,KAAKqM,OACNrM,KAAK2N,IAAItB,MAAM,sBAAuBqH,GAIxC1T,KAAK83B,kBAAkBpkB,EAAQqkB,cAC/B/3B,KAAKu3B,gBAAgB7jB,EAAQskB,aAE7B,EAAe71B,IAAI,MAAMb,KAAM6sB,IAC1BA,IAAanuB,KAAKquB,OAASruB,KAAKyvB,iBAAmB,EAAiBwI,kBACrE,EAAiBA,iBAAiBvkB,KAGtC,MAGF,IAAK,WACH,IAAI,MAAMijB,KAASjjB,EAAQ+f,QACzBzzB,KAAK83B,kBAAkBnB,GAGzB,MAGF,IAAK,oBACH,IAAI32B,KAAK2uB,aAAajb,EAAQid,QAAS,CACrC3wB,KAAK03B,WAAWhkB,EAAQwkB,eACxB,MAEJ,IAAK,wBACH,GAAGl4B,KAAK6uB,YAAY/jB,QAAQ4I,EAAQwkB,eAClC,MAEFl4B,KAAKm4B,iBAAiBzkB,EAAQwkB,eAC9B,MAEF,IAAK,kBAEH,GADAl4B,KAAK03B,WAAWhkB,EAAQwkB,eACrBl4B,KAAKivB,eACNjvB,KAAKivB,cAAc2E,aAAelgB,EAAQkgB,YAC1C5zB,KAAK8uB,eAAezuB,OAEpB,IAAI,MAAM+3B,KAAYp4B,KAAKivB,cAAc4E,eAAgB,CACvD,MAAM3hB,EAAMlS,KAAK8uB,eAAehkB,QAAQstB,IAC5B,IAATlmB,GACDlS,KAAK8uB,eAAerM,OAAOvQ,EAAK,GAKtC,MAGF,IAAK,aAAc,CACjBlS,KAAK03B,WAAWlK,GAEhB,MAAMyC,EAAgBvc,EAAQkgB,WACxB1D,EAAclwB,KAAK2uB,aAAasB,GAGtC,GADAjwB,KAAK83B,kBAAkB7H,GACpBC,EAAa,CACd,MAAM8B,EAAW9B,EAAY8B,SAC7B,GAAwB,cAArBte,EAAQmE,OAAOqF,EAAmB,CACnC,MAAM9N,EAAQpP,KAAKq4B,aAAa3kB,EAAQmE,QACxC7X,KAAK2N,IAAI,YAAayB,GACnB4iB,GACDA,EAAS3O,OAAOjU,QAGf4iB,GAKDA,EAAS3wB,QAAQqS,EAAQmE,QAGxBqY,EAAY4B,QAAU9xB,KAAK+uB,mBAC5B/uB,KAAK+uB,kBAAmB,UAKrB/uB,KAAK2uB,aAAasB,QAEtBjwB,KAAKqM,OACNrM,KAAK2N,IAAI,kCAAmCsiB,EAAevc,GAI/D,MAGF,IAAK,OACH,GAAI1T,KAAKyuB,UAA4BmB,UAAW,CAC9C,MAAMK,EAAgBvc,EAAQid,OACxBT,EAAclwB,KAAK2uB,aAAasB,GAEnCC,IACDA,EAAY8B,SAAS3wB,QAAQqS,UACtB1T,KAAK2uB,aAAasB,IAI7B,MAGF,QACEjwB,KAAK03B,WAAWlK,GAMyB,OAAtC,EAAiByK,kBAClB,EAAiBA,iBAAiBvkB,KEzkD7B,UAdR,MAAP,cACS,KAAAukB,iBAAuC,KACvC,KAAA3F,yBAAmE,KAEnE,oBAAoBnP,GACzBnjB,KAAKi4B,iBAAmB9U,EAGnB,aAAakL,EAAcC,EAAmBgK,EAAuB9J,EAAsBC,EAAwBtN,GAExH,OAAO,IAAI,EAAakN,EAAMC,EAASgK,EAAW9J,EAAYC,EAAWtN,KC8B9D,MAAMoX,EAUnB,YAAYC,GACVx4B,KAAKy4B,aAAaD,GAGb,aAAaA,GAAe,GACjCx4B,KAAKw4B,aAAeA,EACpBx4B,KAAK04B,UAAY,GACjB14B,KAAK24B,gBAAkB,GAGlB,iBAAiB92B,EAAuBshB,EAAkCyV,G,MAC5E54B,KAAK24B,gBAAgBx1B,eAAetB,KACrCshB,KAAYnjB,KAAK24B,gBAAgB92B,IAE9B+2B,KAKgB,QAArB,EAAC54B,KAAK04B,UAAU72B,UAAK,QAAK7B,KAAK04B,UAAU72B,GAAQ,IAAKV,KAAK,CAACgiB,WAAUyV,SAIjE,oBAAoB/2B,EAAuBshB,GAC7CnjB,KAAK04B,UAAU72B,IAChB7B,KAAK04B,UAAU72B,GAAMwgB,cAAcvhB,GAAKA,EAAEqiB,WAAaA,GAMpD,cAActhB,KAA0B0D,GAC1CvF,KAAKw4B,eACNx4B,KAAK24B,gBAAgB92B,GAAQ0D,GAG/B,MAAMhC,EAAsD,GAKtDm1B,EAAY14B,KAAK04B,UAAU72B,GACjC,GAAG62B,EAAW,CAECA,EAAU1jB,QAClBxP,QAASqzB,KAEE,IADAH,EAAUlW,UAAW1hB,GAAWA,EAAEqiB,WAAa0V,EAAS1V,YAKtE5f,EAAIpC,KAAK03B,EAAS1V,YAAY5d,IAE3BszB,EAASD,MACV54B,KAAK84B,oBAAoBj3B,EAAMg3B,EAAS1V,aAgB9C,OAAO5f,EAGF,UACLvD,KAAK04B,UAAY,GACjB14B,KAAK24B,gBAAkB,ICjIZ,MAAM,UAAeJ,EASlC,YAAsBlK,EAAwB0K,EAAaC,GACzD5rB,QADoB,KAAAihB,OAAwB,KAAA0K,MAFtC,KAAA1sB,MAAQ,IAAMA,QAAS,EAkDvB,KAAA4sB,WAAa,KACnBj5B,KAAK2N,IAAI,UAET3N,KAAKqM,OAASrM,KAAK2N,IAAItB,MAAM,uBAC7BrM,KAAKk5B,cAAc,SAGb,KAAArS,YAAe7lB,IACrBhB,KAAK2N,IAAIyB,MAAM,cAAepO,GAC9BhB,KAAKylB,SAGC,KAAA0T,YAAc,KACpBn5B,KAAK2N,IAAI,UAET3N,KAAKo5B,kBACLp5B,KAAKk5B,cAAc,UAGb,KAAAG,cAAiBnU,IACvBllB,KAAKqM,OAASrM,KAAK2N,IAAItB,MAAM,KAAM,gBAA8B6Y,EAAMtQ,KAAKnQ,YAE5EzE,KAAKk5B,cAAc,UAAWhU,EAAMtQ,OAG/B,KAAA2gB,KAAQrE,IACblxB,KAAKqM,OAASrM,KAAK2N,IAAItB,MAAM,0BAA2B6kB,EAAK7wB,QAE7DL,KAAKs5B,GAAG/D,KAAKrE,IAzEb,IAAIqI,EAAW,IAAUnqB,MAAQ,IAAUzB,IAM3C,OALG3N,KAAKqM,QAAOktB,GAAY,IAAUltB,OACrCrM,KAAK2N,IAAM,OAAAqB,EAAA,GAAO,MAAMqf,EAAS2K,EAAWO,GAC5Cv5B,KAAK2N,IAAI,eACT3N,KAAKw5B,UAEEx5B,KAGD,kBACFA,KAAKs5B,KAITt5B,KAAKs5B,GAAGR,oBAAoB,OAAQ94B,KAAKi5B,YACzCj5B,KAAKs5B,GAAGR,oBAAoB,QAAS94B,KAAKm5B,aAC1Cn5B,KAAKs5B,GAAGR,oBAAoB,QAAS94B,KAAK6mB,aAC1C7mB,KAAKs5B,GAAGR,oBAAoB,UAAW94B,KAAKq5B,eAC5Cr5B,KAAKs5B,QAAK/0B,GAGJ,UACNvE,KAAKs5B,GAAK,IAAIG,UAAUz5B,KAAK+4B,IAAK,UAClC/4B,KAAKs5B,GAAGI,WAAa,cACrB15B,KAAKs5B,GAAGK,iBAAiB,OAAQ35B,KAAKi5B,YACtCj5B,KAAKs5B,GAAGK,iBAAiB,QAAS35B,KAAKm5B,aACvCn5B,KAAKs5B,GAAGK,iBAAiB,QAAS35B,KAAK6mB,aACvC7mB,KAAKs5B,GAAGK,iBAAiB,UAAW35B,KAAKq5B,eAGpC,QACL,GAAIr5B,KAAKs5B,GAAT,CAIAt5B,KAAK2N,IAAIyB,MAAM,mBAEf,IACEpP,KAAKs5B,GAAG7T,QACR,MAAMlE,IAGRvhB,KAAKm5B,gB,WCtDT,MAAMS,EAGJ,YAAYC,GACV75B,KAAK85B,SAAWD,EAGlB,YACE,IAAI,IAAIh5B,EAAI,GAAIA,GAAK,EAAGA,IAAK,CAC3B,GAAwB,MAArBb,KAAK85B,SAASj5B,GAEV,CACLb,KAAK85B,SAASj5B,KACd,MAHAb,KAAK85B,SAASj5B,GAAK,IAS3B,MAAM,EAMJ,YAAYgC,EAAiByR,GAJ7B,KAAAylB,kBAAgC,KAChC,KAAAC,uBAAyB,GAIvBh6B,KAAK85B,SAAW,IAAIF,EAAQtlB,GAC5BtU,KAAKi6B,KAAO,IAAI,IAAIp3B,GAGtB,OAAOq3B,GACL,MAAMC,EAAYD,EAAQllB,QAE1B,IAAI,IAAInU,EAAI,EAAGA,EAAIs5B,EAAU95B,OAAQQ,IACA,KAAhCb,KAAKg6B,yBACNh6B,KAAK+5B,kBAAoB,IAAIp1B,WAAW,YAAgB3E,KAAKi6B,KAAK5mB,QAAQrT,KAAK85B,SAASA,YACxF95B,KAAKg6B,uBAAyB,EAC9Bh6B,KAAK85B,SAASM,aAGhBD,EAAUt5B,IAAMb,KAAK+5B,kBAAkB/5B,KAAKg6B,0BAG9C,OAAOG,GAOI,MAAME,EAOZ,KAAKC,GACV,MAAMC,EAAc,IAAI51B,WAAW,IAGnC,IAFA41B,EAAYpY,cAEA,CACV,IAAIqY,EAAOD,EAAY,IAAM,GAAOA,EAAY,IAAM,GAAOA,EAAY,IAAM,EAAMA,EAAY,GAC7FE,EAAQF,EAAY,IAAM,GAAOA,EAAY,IAAM,GAAOA,EAAY,IAAM,EAAMA,EAAY,GAClG,GAAsB,MAAnBA,EAAY,IACH,aAARC,GACQ,aAARA,GACQ,YAARA,GACQ,aAARA,GACQ,aAARA,GACQ,aAARA,GACS,IAATC,EAEA,MAEJF,EAAYpY,YAOd,MAAMuY,EAAkBH,EAAYvlB,QAAQxJ,UAEtC0H,EAASqnB,EAAYvlB,MAAM,EAAG,IAC9B2lB,EAAQJ,EAAYvlB,MAAM,GAAI,IAC9B7B,EAASunB,EAAgB1lB,MAAM,EAAG,IAClC4lB,EAAQF,EAAgB1lB,MAAM,GAAI,IAQxChV,KAAK66B,OAAS,IAAI,EAAI3nB,EAAQynB,GAC9B36B,KAAK86B,OAAS,IAAI,EAAI3nB,EAAQynB,GAE9BL,EAAYl1B,IAAIi1B,EAAMS,aAAc,IACpC,MAAMZ,EAAYn6B,KAAKg7B,OAAOT,GAM9B,OAFAA,EAAYl1B,IAAI80B,EAAUnlB,MAAM,GAAI,IAAK,IAElCulB,EAoCF,OAAOL,GACZ,OAAOl6B,KAAK66B,OAAOzkB,OAAO8jB,GAGrB,OAAOA,GACZ,OAAOl6B,KAAK86B,OAAO1kB,OAAO8jB,IC5Hf,UAzBR,MAAP,cACS,KAAAe,IAAM,IACN,KAAAF,aAAe,IAAIp2B,WAAW,CAAC3E,KAAKi7B,IAAKj7B,KAAKi7B,IAAKj7B,KAAKi7B,IAAKj7B,KAAKi7B,MAIlE,aAAarmB,GACdA,EAAKvU,OAAS,GAAO,GACvBqN,QAAQ0B,MAAM,gBAAiBwF,EAAKvU,OAAQuU,GAG9C,MAAMhR,EAAMgR,EAAKvU,OAIjB,OAHe,IAAIsE,WAAW,IAAI8U,WAAW,CAAuC7V,IAAMY,QAG5E6M,OAAOuD,GAGhB,WAAWA,GAChB,MAAMvU,EAASuU,EAAK,GAAMA,EAAK,IAAM,EAAMA,EAAK,IAAM,GAAOA,EAAK,IAAM,GAExE,OAAOA,EAAKI,MAAM,EAAG,EAAI3U,KChBd,MAAM,EAqBnB,YAAoB66B,EAA+C7M,EAAsB0K,EAAqBC,EAA0BmC,GAApH,KAAAD,aAA+C,KAAA7M,OAAsB,KAAA0K,MAAqB,KAAAC,YAA0B,KAAAmC,eApBhI,KAAAb,MAAQc,EACR,KAAAC,YAAc,IAAIhB,EAGlB,KAAA7sB,QAMF,GAEE,KAAAnB,MAAQ,IAAMA,QAAS,EAExB,KAAAwjB,WAAY,EAeX,KAAAyL,OAAS,KACft7B,KAAK6vB,WAAY,EAEjB,MAAM0K,EAAcv6B,KAAKq7B,YAAYpmB,KAAKjV,KAAKs6B,OAI/C,GAFAt6B,KAAKu7B,WAAWhG,KAAKgF,GAElBv6B,KAAK4vB,UACN5vB,KAAKwN,QAAQnN,OAAS,EACtBL,KAAK4vB,UAAUE,qBAAoB,GACnC9vB,KAAK4vB,UAAU2E,cACfv0B,KAAK4vB,UAAU4L,cAEf,IAAI,MAAMhuB,KAAWxN,KAAKwN,QACrBA,EAAQiuB,SAAWjuB,EAAQ0jB,OAC5B1jB,EAAQiuB,QAAUz7B,KAAK07B,WAAWluB,EAAQ0jB,OAKhDnM,WAAW,KACT/kB,KAAK27B,kBACJ,IAGG,KAAAC,UAAap3B,IACnB,IAAIoQ,EAAO5U,KAAKq7B,YAAYQ,OAAO,IAAIl3B,WAAWH,IAGlD,GAFAoQ,EAAO5U,KAAKs6B,MAAMwB,WAAWlnB,GAE1B5U,KAAK4vB,UAmBN,OAhBA5vB,KAAKqM,OAASrM,KAAK2N,IAAItB,MAAM,2BAA4BuI,EAAKvU,aAC9DL,KAAK4vB,UAAUmM,cAAcnnB,GAAMtT,KAAK+0B,IACtCr2B,KAAKqM,OAASrM,KAAK2N,IAAItB,MAAM,qCAAsCgqB,GAEnE,IACEr2B,KAAK4vB,UAAU0H,eAAejB,EAASA,SAAUA,EAAS7I,UAAW6I,EAASrG,WAC9E,MAAMzO,GACNvhB,KAAK2N,IAAIyB,MAAM,+CAAgDmS,MAIhEya,MAAMza,IACPvhB,KAAK2N,IAAIyB,MAAM,8CAA+CmS,KAQlE,MAAM/T,EAAUxN,KAAKwN,QAAQ5D,QACzB4D,EAKJA,EAAQnM,QAAQuT,GAJd5U,KAAKqM,OAASrM,KAAK2N,IAAItB,MAAM,sBAAuBuI,EAAK6W,MAOrD,KAAAwQ,QAAU,KAChBj8B,KAAK6vB,WAAY,EAEjB7vB,KAAKu7B,WAAWzC,oBAAoB,OAAQ94B,KAAKs7B,QACjDt7B,KAAKu7B,WAAWzC,oBAAoB,QAAS94B,KAAKi8B,SAClDj8B,KAAKu7B,WAAWzC,oBAAoB,UAAW94B,KAAK47B,WACpD57B,KAAKu7B,gBAAah3B,EAElB,MACM23B,EADOttB,KAAKC,MACE7O,KAAKm8B,cACnBC,GAAeC,MAAMH,IAASA,EAAOl8B,KAAKm7B,aAAen7B,KAAKm7B,aAAee,EAAO,EAEvFl8B,KAAK4vB,YACN5vB,KAAK4vB,UAAUE,qBAAoB,GACnC9vB,KAAKwN,QAAQnN,OAAS,GAGxBL,KAAK2N,IAAI,uCAAwCyuB,EAAc,KAC/DrX,WAAW,KAIT,GAHA/kB,KAAK2N,IAAI,0BACT3N,KAAKm8B,cAAgBvtB,KAAKC,OAEtB7O,KAAK4vB,UACP,IAAI,MAAMpiB,KAAWxN,KAAKwN,QACrBA,EAAQ8uB,WACT9uB,EAAQ8uB,UAAW,GAKzBt8B,KAAKw5B,WACJ4C,IApGH,IAAI7C,EAAW,IAAUnqB,MAAQ,IAAUzB,IACxC3N,KAAKqM,QAAOktB,GAAY,IAAUltB,OACrCrM,KAAK2N,IAAM,OAAAqB,EAAA,GAAO,OAAOqf,EAAS2K,EAAWO,GAC7Cv5B,KAAK2N,IAAI,eAET3N,KAAKw5B,UAkGC,UACNx5B,KAAKu7B,WAAa,IAAIv7B,KAAKk7B,WAAWl7B,KAAKquB,KAAMruB,KAAK+4B,IAAK/4B,KAAKg5B,WAChEh5B,KAAKu7B,WAAW5B,iBAAiB,OAAQ35B,KAAKs7B,QAC9Ct7B,KAAKu7B,WAAW5B,iBAAiB,QAAS35B,KAAKi8B,SAC/Cj8B,KAAKu7B,WAAW5B,iBAAiB,UAAW35B,KAAK47B,WAG3C,WAAW1K,GACjB,MAAMqL,EAAWv8B,KAAKs6B,MAAMkC,aAAatL,GAMzC,OAHgBlxB,KAAKq7B,YAAYL,OAAOuB,GAMnC,KAAKrL,GACVlxB,KAAKqM,OAASrM,KAAK2N,IAAItB,MAAM,6BAA8B6kB,EAAK7wB,QAEhE,MAAMo7B,EAAuBz7B,KAAK6vB,UAAY7vB,KAAK07B,WAAWxK,QAAQ3sB,EAItE,IAAGvE,KAAK4vB,UAGD,CACL,MAAMmC,EAAU,IAAI3wB,QAAqB,CAACC,EAASgiB,KACjDrjB,KAAKwN,QAAQrM,KAAK,CAACE,UAASgiB,SAAQ6N,OAAMuK,cAK5C,OAFAz7B,KAAK27B,iBAEE5J,EATP/xB,KAAKwN,QAAQrM,KAAK,CAAC+vB,OAAMuK,YACzBz7B,KAAK27B,iBAYD,iBACN,IAAI37B,KAAK6vB,UAEP,OASF,IAAIxvB,EAASL,KAAKwN,QAAQnN,OAE1B,IAAI,IAAIQ,EAAI,EAAGA,EAAIR,IAAUQ,EAAG,CAK9B,MAAM2M,EAAUxN,KAAKwN,QAAQ3M,IACvB,KAACqwB,EAAI,SAAEoL,GAAY9uB,EACzB,IAAIiuB,EAAUjuB,EAAQiuB,QACnBvK,IAASoL,IAIVt8B,KAAKqM,OAASrM,KAAK2N,IAAItB,MAAM,0BAA2B6kB,EAAK7wB,QAWzDo7B,IACFA,EAAUjuB,EAAQiuB,QAAUz7B,KAAK07B,WAAWxK,IAK5ClxB,KAAKu7B,WAAWhG,KAAKkG,GAInBjuB,EAAQnM,QAIVmM,EAAQ8uB,UAAW,GAHnBt8B,KAAKwN,QAAQiV,OAAO5hB,IAAK,GACzBR,QC3NH,MAAMoxB,EAAYD,UAAYA,UAAUC,UAAY,KAa9CgL,GAZUjL,UAAUC,UAAU5hB,OAAO,yBACzB2hB,UAAUC,UAAUrG,cAActgB,QAAQ,WACzC,SAAS6E,KAAK6hB,UAAUC,YAAc,aAAa9hB,KAAK6hB,UAAUkL,QAUtD,oBAAb,OAA2BnwB,OAASC,MAOhDmwB,IAJiB,mBAAmBhtB,KAAK6hB,UAAUE,WACtC,aAAvBF,UAAUE,UAA2BF,UAAUoL,eAAiB,IAChEH,EAAII,YAEoB,WAAYJ,OAAWhL,KAAc,yBAAyB9hB,KAAK8hB,IAAiBA,EAAUuF,MAAM,YAAcvF,EAAUuF,MAAM,aCpBhJ8F,GDwBuDtL,UAAUC,UAAU5hB,OAAO,kHCxBvC,oBAAtBktB,mBAAqCvwB,gBAAgBuwB,mBAC1EC,EAAsD,oBAA7BC,0BAA4CzwB,gBAAgBywB,yBAK5FC,EAAsB,CAACz7B,KAAiB8D,KAC3CiH,KACA2wB,QACAC,SAAS,CAAEC,qBAAqB,EAAOtZ,KAAM,WAC7CziB,KAAMo3B,IACDA,EAAUr4B,QAKdq4B,EAAU1jB,MAAMvT,EAAM,GAAK,GAAG+D,QAAQqzB,IAEpCA,EAASyE,eAAe/3B,QAKxBg4B,EAAe,IAAIh4B,KAEtBiH,KAA2C8wB,eAAe/3B,IAGvDi4B,EAAO,OAEAC,EAAgBT,EAAkBE,EAAoBp6B,KAAK,MAAM,GAAUg6B,EAAcS,EAAeC,EACxGE,EAAYV,EAAkBE,EAAoBp6B,KAAK,MAAM,GAASg6B,EAAcS,EAAeC,ECDhH,IAAIG,EAAW,EACf,MAAMC,EAAc,IAAMjuB,KAAO,QAAU,GAG3C,MAAM,UAAsB4oB,EAO1B,YAAsBlK,EAAwB0K,EAAaC,GACzD5rB,QADoB,KAAAihB,OAAwB,KAAA0K,MAE5C/4B,KAAKkoB,KAAOyV,EACZE,EAAex4B,IAAIrF,KAAKkoB,GAAIloB,MAE5B09B,EAAU,CACR3Z,KAAM,cACNmW,QAAS,CACPnW,KAAM,QACNmW,QAAS,CACP7L,OACA0K,MACAC,aAEF9Q,GAAIloB,KAAKkoB,MAKR,KAAKgS,GACV,MAAM1rB,EAAY,CAChBuV,KAAM,cACNmW,QAAS,CACPnW,KAAM,OACNmW,UACAhS,GAAIloB,KAAKkoB,KAIbwV,EAAUlvB,GAGL,QACL,MAAMA,EAAY,CAChBuV,KAAM,cACNmW,QAAS,CACPnW,KAAM,QACNmE,GAAIloB,KAAKkoB,KAIbwV,EAAUlvB,IAKP,MAAMqvB,EAA6C,IAAIC,IAsG/C,WApGR,MAAP,cACU,KAAAC,cAAgB,CAAC,QAAS,QAAS,SAAU,QAAS,SAEtD,KAAAC,UAAY,IAAMruB,KACtB,CACA,CAACuY,GAAI,EAAG+V,KAAM,iBAAmBC,KAAM,IACvC,CAAChW,GAAI,EAAG+V,KAAM,iBAAmBC,KAAM,IACvC,CAAChW,GAAI,EAAG+V,KAAM,kBAAmBC,KAAM,KAEvC,CACA,CAAChW,GAAI,EAAG+V,KAAM,iBAAmBC,KAAM,IACvC,CAAChW,GAAI,EAAG+V,KAAM,iBAAmBC,KAAM,IACvC,CAAChW,GAAI,EAAG+V,KAAM,kBAAmBC,KAAM,IACvC,CAAChW,GAAI,EAAG+V,KAAM,iBAAmBC,KAAM,IACvC,CAAChW,GAAI,EAAG+V,KAAM,gBAAmBC,KAAM,KAGnC,KAAAC,cAAyB,GAGzB,KAAAC,gBAAkB,CAAC/P,EAAcgQ,KACvC,MAAMC,EAAYt+B,KAAK+9B,cAAc1P,EAAO,GAS5C,OAAO,IAAI,EAFwCsO,GAAYG,QAAyC,IAApB,EAAiD,EAAgB,EAE5GzO,EAPpB,SAAWiQ,EAAY,sBAD/B,QAAUV,GAEc,WAAnBS,EAA8B,KAA0B,aAAnBA,EAAgC,KAAO,GAE3C,MA0B9C,aAAahQ,EAAcgQ,EAAiC,SAAUE,EAA+B,YAAaC,GAAQ,GAK3Hx+B,KAAKm+B,cAAch7B,eAAeo7B,KACpCv+B,KAAKm+B,cAAcI,GAAiB,CAClCE,OAAQ,GACRC,SAAU,GACVC,OAAQ,KAIZ,MAAMC,EAAU5+B,KAAKm+B,cAAcI,GAAeF,GAE7ChQ,KAAQuQ,IACXA,EAAQvQ,GAAQ,IAGlB,MAAMwQ,EAAaD,EAAQvQ,GAE3B,IAAIwQ,EAAWx+B,SAAWm+B,EAAkD,CAC1E,IAAI/P,EAUJ,OALAA,EAAYzuB,KAAKo+B,gBAAgB/P,EAAMgQ,GAKnC5P,GAKD+P,GACDK,EAAW19B,KAAKstB,GAGXA,IARL/gB,QAAQ0B,MAAM,mBAAoBif,GAC3B,MAUX,OAAOwQ,EAAW,K,uSClCP,WA7IR,MAAP,cA2DU,KAAAC,cAAgB,CAAC,CACvB5nB,QAAS,mgBACTE,SAAU,UACT,CACDF,QAAS,mgBACTE,SAAU,UACT,CACDF,QAAS,mgBACTE,SAAU,UACT,CACDF,QAAS,mgBACTE,SAAU,UACT,CACDF,QAAS,mgBACTE,SAAU,WAGJ,KAAA2nB,iBAKJ,GACI,KAAAC,UAAW,EACX,KAAAC,eAAgC,KAGjC,UACL,OAAGj/B,KAAKi/B,eAAuBj/B,KAAKi/B,eAC5Bj/B,KAAKg/B,SACJ59B,QAAQC,UAGVrB,KAAKi/B,eAAiB79B,QAAQK,IAAIzB,KAAK8+B,cAAcnuB,IAAIuuB,IAC9D,IAAIC,EAAe,IAAI,EACvBA,EAAanU,WAAW,YAAakU,EAAUhoB,SAAU,KACzDioB,EAAanU,WAAW,YAAakU,EAAU9nB,UAAW,KAE1D,IAAI5S,EAAS26B,EAAalK,YAE1B,OAAO,IAAamK,SAAS56B,GAAQlD,KAAKwV,IACxC,IAAIuoB,EAAmB,YAAqBvoB,GAAM9B,OAAO,GACzDqqB,EAAiB7zB,UAEjBxL,KAAK++B,iBAAiB,YAAWM,GAAkBjU,eAAiB,CAClElU,QAASgoB,EAAUhoB,QACnBE,SAAU8nB,EAAU9nB,eAGtB9V,KAAK,KACPtB,KAAKg/B,UAAW,EAGhBh/B,KAAKi/B,eAAiB,OAKb,OAAOK,G,0CAGlB,IAAIC,EAAgBC,EAAU3+B,EAC9B,UAHMb,KAAKy/B,UAGP5+B,EAAI,EAAGA,EAAIy+B,EAAaj/B,OAAQQ,IASlC,IAPA0+B,EAAiB,YAAW,YAAWD,EAAaz+B,GAAI,IAAK,IAAIuqB,eAE/C/qB,OAAS,KACzBk/B,EAAiB,IAAI/4B,MAAM,GAAK+4B,EAAel/B,QAAQq/B,KAAK,KAAKj8B,KAAK,IAAM87B,GAI3EC,EAAWx/B,KAAK++B,iBAAiBQ,GAClC,OAAOv9B,OAAO4L,OAAO,CACnB+xB,YAAaL,EAAaz+B,IACzB2+B,GAIP,OAAO,O,uSCicI,WAthBR,MAOL,cANQ,KAAAI,OAEJ,GAKF5/B,KAAK2N,IAAM,OAAAqB,EAAA,GAAO,aAAc,IAAUI,MAAQ,IAAUzB,KAGvD,oBAAoB0gB,EAAcwR,GACvC,MAAMC,EAAgBD,EAAap7B,WAG7Bkd,EAAS,IAAI,EACnBA,EAAO+H,WAAW,EAAG,EAAG,eACxB/H,EAAOmJ,UAAU,EAAY8F,aAAc,UAC3CjP,EAAO0I,SAASyV,EAAe,kBAE/B,MAAMC,EAAcpe,EAAOwP,UAAS,GAC9BnI,EAAc,IAAIrkB,WAAWo7B,EAAYt7B,WAAaq7B,GAC5D9W,EAAY3jB,IAAI06B,GAChB/W,EAAY3jB,IAAIw6B,EAAcE,EAAY1/B,QAa1C,MAAMouB,EAAYuR,GAAeC,aAAa5R,GACxC6R,EAAY,CAChB5mB,KAAM,IACNyK,KAAM,uBACN0K,UAAWA,GAGV,KACDzuB,KAAK2N,IAAI,gDAIX,OADgB8gB,EAAU8G,KAAKvM,GAChB1nB,KAAKuW,IAKlB,GAJG,KACD7X,KAAK2N,IAAI,sCAAuCkK,IAG9CA,IAAWA,EAAOpT,WACpB,OAAOrD,QAAQiiB,OAAO6c,GAGxB,IAIE,MAAMzK,EAAe,IAAI,EAAkB5d,EAAQ,CAAC2Q,SAAS,IACvD2X,EAAc1K,EAAazJ,UAAU,eACxB,MAAhBmU,GAAqBngC,KAAK2N,IAAIyB,MAAM,oBAAqB+wB,GAE5D,MAAMxP,EAAS8E,EAAazJ,UAAU,UACxB,MAAX2E,GAAgB3wB,KAAK2N,IAAIyB,MAAM,eAAgBuhB,GAElD,MAAMyP,EAAU3K,EAAa1J,SAAS,WAGtC,OAFIqU,GAASpgC,KAAK2N,IAAIyB,MAAM,aAAcgxB,GAEnC3K,EACP,MAAMz0B,GACNhB,KAAK2N,IAAIyB,MAAM,gDAAiDpO,GAEhE,MADcgB,OAAO4L,OAAOsyB,EAAW,CAAC/I,cAAen2B,MAGxDoO,IACGA,EAAMsE,SAAYtE,EAAM2U,OAC1B3U,EAAQpN,OAAO4L,OAAOsyB,EAAW,CAC/B/I,cAAe/nB,KAIZhO,QAAQiiB,OAAOjU,KAIb,aAAaixB,G,0CACxB,IAAI1b,EAAU,IAAI,EAAgB,CAAC6D,SAAS,IAE5C7D,EAAQsM,YAAY,eAAgB,CAACqP,MAAOD,EAAKC,QAGjDC,GAAed,UAAUn+B,KAAK,QAE3B,KACDtB,KAAK2N,IAAI,cAAe0yB,EAAKC,MAAM7U,KAErC,IACE,IAAIgK,QAAqBz1B,KAAKwgC,oBAAoBH,EAAKhS,KAAM1J,EAAQwM,UAAS,IAC9E,MAAM/hB,GAEN,MADApP,KAAK2N,IAAIyB,MAAM,eAAgBA,EAAMsE,SAC/BtE,EAGR,IAAIinB,EAAWZ,EAAa7J,YAAY,SAExC,GAAkB,UAAfyK,EAASnZ,EACV,MAAM,IAAI7K,MAAM,gCAAkCgkB,EAASnZ,GAG7D,IAAI,YAASmjB,EAAKC,MAAOjK,EAASiK,OAEhC,MADAtgC,KAAK2N,IAAIyB,MAAMixB,EAAKC,MAAOjK,EAASiK,OAC9B,IAAIjuB,MAAM,6BAIlBguB,EAAKI,YAAc,IAAI97B,WAAW0xB,EAASqK,cAC3CL,EAAKM,GAAKtK,EAASsK,GACnBN,EAAKf,aAAejJ,EAASuK,+BAE1B,KACD5gC,KAAK2N,IAAI,YAAa,YAAW0yB,EAAKI,aAAc,YAAWJ,EAAKM,IAAKN,EAAKf,cAGhF,IAAItyB,QAAkBuzB,GAAeM,OAAOR,EAAKf,cACjD,IAAItyB,EACF,MAAM,IAAIqF,MAAM,4BAGlBguB,EAAKrzB,UAAYA,EAEd,KACDhN,KAAK2N,IAAI,yBAA0B0yB,EAAKM,IAG1C,IACE,IAAIG,QAAc,IAAaC,UAAUV,EAAKM,IAC9C,MAAMvxB,GAEN,MADApP,KAAK2N,IAAIyB,MAAM,yBAA0BA,GACnCA,EAaR,OAVAixB,EAAK7+B,EAAIs/B,EAAM,GACfT,EAAKr2B,EAAI82B,EAAM,GAEZ,KACD9gC,KAAK2N,IAAI,wBAAyBmzB,GAM7B9gC,KAAKghC,mBAAmBX,MAGpB,mBAAmBA,G,0CAC9BA,EAAKY,SAAW,IAAIt8B,WAAW,IAAIwd,YAUnC,IAAI+e,EAAiB,CACnBhkB,EAAG,iBACHyjB,GAAIN,EAAKM,GACTn/B,EAAG6+B,EAAK7+B,EACRwI,EAAGq2B,EAAKr2B,EACRs2B,MAAOD,EAAKC,MACZI,aAAcL,EAAKI,YACnBU,UAAWd,EAAKY,UAGdrsB,EAAO,IAAI,EAAgB,CAAC4T,SAAS,IACzC5T,EAAKgW,YAAYsW,EAAgB,iBAAkB,kBAMnD,IAAIE,EAAYxsB,EAAKuc,UAAS,GAI1BkQ,SAHmB,IAAajC,SAASgC,IAGf/vB,OAAO+vB,GAMjCE,QAAqB,IAAapzB,WAAWmyB,EAAKrzB,UAAWq0B,GAK7DE,EAAgB,CAClBjB,MAAOD,EAAKC,MACZI,aAAcL,EAAKI,YACnBj/B,EAAG6+B,EAAK7+B,EACRwI,EAAGq2B,EAAKr2B,EACRw3B,uBAAwBnB,EAAKrzB,UAAU2yB,YACvC8B,eAAgBH,GAGlB,IAAI3c,EAAU,IAAI,EAAgB,CAAC6D,SAAS,IAC5C7D,EAAQsM,YAAY,gBAAiBsQ,GAErC,IAAIG,EAAe/c,EAAQwM,UAAS,GAEjC,KACDnxB,KAAK2N,IAAI,qBAAsB4zB,GAGjC,IACE,IAAI9L,QAAqBz1B,KAAKwgC,oBAAoBH,EAAKhS,KAAMqT,GAC7D,MAAMtyB,GAEN,MADApP,KAAK2N,IAAIyB,MAAM,2BAA4BA,GACrCA,EAGR,IAAIinB,EAAWZ,EAAa7J,YAAY,mBAAoB,YAM5D,GAJG,KACD5rB,KAAK2N,IAAI,gCAAiC0oB,GAG1B,0BAAfA,EAASnZ,GAAgD,wBAAfmZ,EAASnZ,EACpD,MAAM,IAAI7K,MAAM,2CAA6CgkB,EAASnZ,GAGxE,IAAI,YAASmjB,EAAKC,MAAOjK,EAASiK,OAChC,MAAM,IAAIjuB,MAAM,wCAGlB,IAAI,YAASguB,EAAKI,YAAapK,EAASqK,cACtC,MAAM,IAAIruB,MAAM,+CAGlB,GAAkB,0BAAfgkB,EAASnZ,EAA+B,CAEzC,IAAIykB,SAAsB,IAAavC,SAASiB,EAAKY,WAAWjsB,OAAO,IACvE,IAAI,YAAS2sB,EAActL,EAASuL,gBAClC,MAAM,IAAIvvB,MAAM,sDAGlB,MAAM,IAAIA,MAAM,8BAIlB,UACQrS,KAAK6hC,6BAA6BxB,EAAMhK,EAASyL,kBACvD,MAAM9gC,GAEN,MADAhB,KAAK2N,IAAIyB,MAAM,uCAAwCpO,GACjDA,EAKR,OAAOhB,KAAK+hC,yBAAyB1B,MAG1B,6BAA6BA,EAAmB2B,G,0CAC3D3B,EAAK3S,UAAY9e,KAAKC,MAKtBwxB,EAAK4B,iBAAmB,IAAa7C,SAASiB,EAAKY,SAAS5vB,OAAOgvB,EAAKI,eACvEpvB,cAAc,IAAa+tB,SAASiB,EAAKI,YAAYpvB,OAAOgvB,EAAKY,YAAYjsB,MAAM,EAAG,KAEvFqrB,EAAK6B,gBAAkB,IAAa9C,SAASiB,EAAKI,YAAYpvB,OAAOgvB,EAAKY,YAAYjsB,MAAM,IAC3F3D,aAAa,IAAa+tB,SAASiB,EAAKY,SAAS5vB,OAAOgvB,EAAKY,WAAYZ,EAAKY,SAASjsB,MAAM,EAAG,IASjG,IAAImtB,EAAiB,IAAIx9B,iBAAiB,IAAaowB,WAAWiN,EAAiB3B,EAAK4B,UAAW5B,EAAK6B,WAEpGprB,EAAOqrB,EAAentB,MAAM,EAAG,IAC/BotB,EAAoBD,EAAentB,MAAM,IAIzCygB,EAAe,IAAI,EAAkB2M,EAAmB,CAAC5Z,SAAS,IAClE6N,EAAWZ,EAAa7J,YAAY,wBAExC,GAAkB,yBAAfyK,EAASnZ,EACV,MAAM,IAAI7K,MAAM,+CAAiDgkB,GAGnE,IAAI,YAASgK,EAAKC,MAAOjK,EAASiK,OAChC,MAAM,IAAIjuB,MAAM,4CAGlB,IAAI,YAASguB,EAAKI,YAAapK,EAASqK,cACtC,MAAM,IAAIruB,MAAM,kDAGf,KACDrS,KAAK2N,IAAI,0BAEX0yB,EAAKn3B,EAAImtB,EAASntB,EAClBm3B,EAAKgC,QAAUhM,EAASiM,SACxBjC,EAAKkC,GAAKlM,EAASmM,IACnBnC,EAAK5S,WAAa4I,EAASoM,YAC3BpC,EAAKqC,MAAQ,EAEb1iC,KAAK2iC,kBAAkBtC,EAAKn3B,EAAGm3B,EAAKgC,QAAShC,EAAKkC,IAElD,IAAIhuB,EAASkhB,EAAaE,YAG1B,IAAI,YAAS7e,QAAY,IAAasoB,SAASgD,EAAkBptB,MAAM,EAAGT,KACxE,MAAM,IAAIlC,MAAM,gDAGlB,EAAYulB,gBAAgByI,EAAK5S,WAAY4S,EAAK3S,cAG7C,kBAAkBxkB,EAAWm5B,EAAqBE,GACpD,KACDviC,KAAK2N,IAAI,sBAAuBzE,EAAGm5B,EAASE,GAG9C,IAAIK,EAAa,YAAWP,GAC5B,GAAS,IAANn5B,GAA0B,qgBAAf05B,EAEZ,MAAM,IAAIvwB,MAAM,oDAGf,KACDrS,KAAK2N,IAAI,kBAIX,MAAMk1B,EAAY,YAAW,YAAWN,GAAK,IAEvCO,EAAiB,YAAWF,EAAY,IAI9C,GAAG,YAAIC,EAAW,MAAQ,EACxB,MAAM,IAAIxwB,MAAM,4CAMlB,GAAG,YAAIwwB,EAAW,YAAIC,EAAgB,OAAS,EAC7C,MAAM,IAAIzwB,MAAM,sDAGf,KACDrS,KAAK2N,IAAI,yBAMX,MAAMo1B,EAAO,YAAW,EAAG,GAAI,GAE/B,IAAIC,EAAOC,YAAYp0B,MAGvBm0B,EAAOC,YAAYp0B,MACnB,MAAMq0B,EAAU,YAAIH,EAAM,MAM1B,GAAG,YAAIF,EAAWK,GAAW,EAC3B,MAAM,IAAI7wB,MAAM,qDAGlB,GAAG,YAAIwwB,EAAW,YAAIC,EAAgBI,KAAa,EACjD,MAAM,IAAI7wB,MAAM,+DAOlB,OAJG,KACDrS,KAAK2N,IAAI,8CAGJ,EAGI,yBAAyB0yB,G,0CACpC,IAAI8C,EAAS,YAAa9C,EAAKn3B,EAAE1F,SAAS,KAE1C68B,EAAK56B,EAAI,IAAIe,MAAM,KACnB65B,EAAK56B,EAAI,IAAI,IAAId,WAAW07B,EAAK56B,EAAEpF,QAAQ8hB,aAG3C,IACE,IAAIihB,QAAW,IAAaC,OAAOF,EAAQ9C,EAAK56B,EAAG46B,EAAKgC,SACxD,MAAMjzB,GACN,MAAMA,EAGR,IAAIwF,EAAO,IAAI,EAAgB,CAAC4T,SAAS,IACzC5T,EAAKgW,YAAY,CACf1N,EAAG,uBACHojB,MAAOD,EAAKC,MACZI,aAAcL,EAAKI,YACnB6C,SAAU,CAAC,EAAGjD,EAAKqC,SACnBa,IAAKH,GACJ,wBAGH,IAAI/B,SAAsB,IAAajC,SAASxqB,EAAKqgB,cAAc5jB,OAAOuD,EAAKuc,YAG3E2D,QAAsB,IAAaD,WAAWwM,EAAchB,EAAK4B,UAAW5B,EAAK6B,UAEjFvd,EAAU,IAAI,EAAgB,CAAC6D,SAAS,IAC5C7D,EAAQsM,YAAY,uBAAwB,CAC1CqP,MAAOD,EAAKC,MACZI,aAAcL,EAAKI,YACnBgB,eAAgB3M,IAGf,KACD90B,KAAK2N,IAAI,6BAGX,IACE,IAAI8nB,QAAqBz1B,KAAKwgC,oBAAoBH,EAAKhS,KAAM1J,EAAQwM,UAAS,IAC9E,MAAM5P,GACN,MAAMA,EAGR,IAAI8U,EAAWZ,EAAa7J,YAAY,+BAExC,GAAkB,cAAfyK,EAASnZ,GAAoC,iBAAfmZ,EAASnZ,GAAuC,gBAAfmZ,EAASnZ,EACzE,MAAM,IAAI7K,MAAM,sDAAwDgkB,EAASnZ,GAGnF,IAAI,YAASmjB,EAAKC,MAAOjK,EAASiK,OAChC,MAAM,IAAIjuB,MAAM,mDAGlB,IAAI,YAASguB,EAAKI,YAAapK,EAASqK,cACtC,MAAM,IAAIruB,MAAM,0DAGlB,IACE,IAAIic,QAAgB,IAAa+U,OAAOhD,EAAKkC,GAAIlC,EAAK56B,EAAG46B,EAAKgC,SAC9D,MAAM9gB,GACN,MAAM+M,EAIR,IAAIkV,QAAoB,IAAapE,SAAS9Q,GAC9CmV,EAAaD,EAAYxuB,MAAM,EAAG,GAClCuZ,EAAYiV,EAAYxuB,OAAO,GAK/B,OAHG,KACDhV,KAAK2N,IAAI,kCAAmC0oB,EAASnZ,EAAGoR,GAEnD+H,EAASnZ,GACd,IAAK,YACH,IAAIwmB,SAAuB,IAAatE,SAASiB,EAAKY,SAAS5vB,OAAO,CAAC,GAAIoyB,KAAczuB,OAAO,IAGhG,IAAI,YAAS0uB,EAAerN,EAASsN,iBACnC,MAAM,IAAItxB,MAAM,6DAGlB,IAAImc,EAAa,YAAS6R,EAAKY,SAASjsB,MAAM,EAAG,GAAIqrB,EAAKI,YAAYzrB,MAAM,EAAG,IAS/E,OARG,KACDhV,KAAK2N,IAAI,oBAAqB4gB,EAAWD,EAASE,GAGpD6R,EAAK9R,UAAYA,EACjB8R,EAAK/R,QAAUA,EACf+R,EAAK7R,WAAaA,EAEX6R,EAGT,IAAK,eAEH,IAAIuD,SAAuB,IAAaxE,SAASiB,EAAKY,SAAS5vB,OAAO,CAAC,GAAIoyB,KAAczuB,OAAO,IAChG,IAAI,YAAS4uB,EAAevN,EAASwN,iBACnC,MAAM,IAAIxxB,MAAM,6DAGlB,OAAOrS,KAAK+hC,yBAAyB1B,GAEvC,IAAK,cAEH,IAAIyD,SAAuB,IAAa1E,SAASiB,EAAKY,SAAS5vB,OAAO,CAAC,GAAIoyB,KAAczuB,OAAO,IAChG,IAAI,YAAS8uB,EAAezN,EAAS0N,iBACnC,MAAM,IAAI1xB,MAAM,6DAGlB,MAAM,IAAIA,MAAM,6CAKT,KAAKgc,G,0CAChB,GAAGA,KAAQruB,KAAK4/B,OACd,OAAO5/B,KAAK4/B,OAAOvR,GAGrB,IAAIiS,EAAgC,IAAI37B,WAAW,IAAIwd,YAIvD,IAAI6d,GAAeC,aAAa5R,GAC9B,OAAOjtB,QAAQiiB,OAAO,IAAIhR,MAAM,+BAAiCgc,IAGnE,IACE,IAAI0D,EAAU/xB,KAAKgkC,aAAa,CAAC3V,OAAMiS,UAEvC,OADAtgC,KAAK4/B,OAAOvR,GAAQ0D,QACPA,EACb,MAAMxQ,GAEN,aADOvhB,KAAK4/B,OAAOvR,GACb9M,QChkBL,SAAS0iB,KACd,IAAIC,EAAsB,CACxBC,aAAa,EACbC,YAAY,EAEZC,OAAQ,OACR3G,UAAW,IAAIn4B,KACb2+B,EAAeI,WAAa/+B,EAC5B2+B,EAAexL,UAAUlzB,QAAS2d,GAAkBA,KAAY5d,KAGlE++B,gBAAY//B,EACZm0B,UAAW,GACX6L,kBAAoBphB,IACf+gB,EAAeI,YAChBnhB,KAAY+gB,EAAeI,YAG7BJ,EAAexL,UAAUv3B,KAAKgiB,KAI9B6O,EAAkC,IAAI5wB,QAAW,CAACC,EAASgiB,KAC7D6gB,EAAe7iC,QAAWkB,IACrByvB,EAASmS,cAEZnS,EAASmS,aAAc,EACvB9iC,EAAQkB,KAGV2hC,EAAe7gB,OAAS,IAAI9d,KACvBysB,EAASoS,aAEZpS,EAASoS,YAAa,EACtB/gB,KAAU9d,OAsBd,OAZAysB,EAAShP,QAAQ,KACfgP,EAASqS,OAAS,KAClBrS,EAAS0G,UAAUr4B,OAAS,EAC5B2xB,EAASsS,WAAa,KAEnBtS,EAASwS,SACVxS,EAASwS,OAAS,UAItBxiC,OAAO4L,OAAOokB,EAAUkS,GAEjBlS,E,2SC0WT,MAAMyS,GAAa,IApXZ,MAqBL,cApBO,KAAAC,iBAMH,GAEG,KAAAC,oBAAuD,GACtD,KAAAC,kBAAoE,GACrE,KAAAzW,SAAW,EAIV,KAAAxgB,IAAiC,OAAAqB,EAAA,GAAO,OAExC,KAAA61B,oBAAkD,GAsBnD,YAAYC,GACjB,EAAez/B,IAAI,CACjB0/B,UAAWD,IAUR,YAAYzW,GACjBruB,KAAKmuB,SAAWE,EAEhB,EAAehpB,IAAI,CACjB2/B,GAAIhlC,KAAKmuB,WAKA,S,0CACX,MAAM8W,EAA6B,GAGnC,IAAI,IAAI5W,EAAO,EAAGA,GAAQ,EAAGA,IAC3B4W,EAAY9jC,KAFC,KAEaktB,EAAO,aAKnC,MAAM6W,QAAsB9jC,QAAQK,IAAIwjC,EAAYt0B,IAAI9N,GAAO,EAAeV,IAAIU,KAE5EsiC,EAAiB,GACvB,IAAI,IAAItkC,EAAI,EAAGA,EAAIqkC,EAAc7kC,OAAQQ,IACpCqkC,EAAcrkC,IACfskC,EAAehkC,KAAKnB,KAAKolC,UAAU,cAAe,GAAI,CAAC/W,KAAMxtB,EAAI,EAAGwkC,cAAc,KAItF,MAAM/uB,EAAQ,KAGZtW,KAAKmuB,SAAW,EAEA,EAAe7X,QACvB0M,QAAQ,KACdxW,KAAK8wB,YAAY,CAACvZ,KAAM,cAQ5B,OAJAgB,WAAWzO,EAAO,KAIXlV,QAAQK,IAAI0jC,GAAgB7jC,KAAK,OACpC8N,IACFA,EAAMk2B,SAAU,IACftiB,QAAQ1M,MAMN,aAAa+X,EAAclN,EAA4B,IAC5D,MAAMkd,EAAiCld,EAAQqO,aAAe,WAAcrO,EAAQmO,WAAa,SAAW,SAStGiP,EAAgB,YAGlBv+B,KAAK0kC,iBAAiBvhC,eAAeo7B,KACvCv+B,KAAK0kC,iBAAiBnG,GAAiB,CACrCE,OAAQ,GACRC,SAAU,GACVC,OAAQ,KAIZ,MAAMxX,EAAQnnB,KAAK0kC,iBAAiBnG,GAAeF,GAC9ChQ,KAAQlH,IACXA,EAAMkH,GAAQ,IAGhB,MAAMkX,EAAape,EAAMkH,GACzB,GAAGkX,EAAWllC,SAAqC,WAAnBg+B,GAAiD,UAAlBE,EAA4B,EAAqC,GAAS,CACvI,IAAI19B,EAAI0kC,EAAWllC,OAAS,EAAGmlC,GAAQ,EACvC,KAAM3kC,GAAK,IAAKA,EACd,GAAG0kC,EAAW1kC,GAAGquB,SAAU,CACzBsW,GAAQ,EACR,MAIJ,MAAM5V,EAAY4V,EAAQD,EAAW9iB,OAAO5hB,EAAG,GAAG,GAAK0kC,EAAWhlC,MAElE,OADAglC,EAAWE,QAAQ7V,GACZxuB,QAAQC,QAAQuuB,GAGzB,MAAM8V,EAAS,CAACrX,EAAMkQ,EAAeF,GAAgB56B,KAAK,KAC1D,GAAGzD,KAAK4kC,kBAAkBc,GACxB,OAAO1lC,KAAK4kC,kBAAkBc,GAGhC,MAAMC,EAAK,KAAOtX,EAAO,YACnBuX,EAAO,KAAOvX,EAAO,cACrB5nB,EAAK,KAAO4nB,EAAO,eAEzB,OAAOruB,KAAK4kC,kBAAkBc,GAAUtkC,QAAQK,IAAI,CAACkkC,EAAIC,EAAMn/B,GAAIkK,IAAI9N,GAAO,EAAeV,IAAIU,KAChGvB,KAAK,EAAOukC,EAAYC,EAAcC,KAAmB,mCACxD,MAAMtX,EAAYuR,GAAeC,aAAa5R,EAAMgQ,EAAgBE,GAAe,GACnF,IAAI3O,EACJ,GAAGiW,GAAoC,MAAtBA,EAAWxlC,OAAgB,CACtC0lC,GAA0C,KAAzBA,EAAc1lC,SACjC0lC,EAAgB,oBAGlB,MAAMzX,EAAU,YAAauX,GACvBtX,EAAY,IAAI5pB,WAAW,YAAamhC,IACxCtX,EAAa,YAAauX,GAEhCnW,EAAYoW,EAAiBC,aAAa5X,EAAMC,EAASC,EAAWC,EAAYC,EAAWtN,QAE3F,IACE,MAAMkf,QAAa6F,GAAW7F,KAAKhS,GAE7B8X,EAAW,CACf,CAACR,GAAK,YAAWtF,EAAK/R,SACtB,CAACsX,GAAOvF,EAAK9R,UAAU9C,IACvB,CAAChlB,GAAK,YAAW45B,EAAK7R,aAGxB,EAAenpB,IAAI8gC,GAEnBvW,EAAYoW,EAAiBC,aAAa5X,EAAMgS,EAAK/R,QAAS+R,EAAK9R,UAAW8R,EAAK7R,WAAYC,EAAWtN,GAC1G,MAAM/R,GAGN,MAFApP,KAAK2N,IAAI,sBAAuByB,EAAOA,EAAM+mB,cACtCn2B,KAAK4kC,kBAAkBc,GACxBt2B,EAUV,cAFOpP,KAAK4kC,kBAAkBc,GAC9BH,EAAWE,QAAQ7V,GACZA,MAKJ,UAAyCxF,EAAWH,EAAkC,GAAI9I,EAA4B,IAQ3H,MAAM6Q,EAAWiS,KAEjB,IAAImC,EAAqBjlB,EAAQyQ,eAOjC,GANGwU,GACDpU,EAAShP,QAAQ,YACRhjB,KAAK6kC,oBAAoBuB,KAIjC,IAAgB,CACjBpU,EAAShP,QAAQ,KACfqjB,cAAcC,KAGhB,MAAMC,EAAY33B,KAAKC,MACjBy3B,EAAW7J,EAAI+J,YAAY,KAC/BxmC,KAAK2N,IAAIyB,MAAM,+BAAgCgb,EAAQH,EAAQ9I,EAAS,SAAUvS,KAAKC,MAAQ03B,GAAa,MAE3G,KAGL,MAAME,EAAiBr3B,IACjBA,EAEO,YAASA,KAClBA,EAAQ,CAACsE,QAAStE,IAFlBA,EAAQ,CAAC2U,KAAM,eAKjBiO,EAAS3O,OAAOjU,IAEG,MAAfA,EAAMkK,MAA+B,oBAAflK,EAAM2U,MACd,MAAf3U,EAAMkK,MAA+B,wBAAflK,EAAM2U,OAC7B/jB,KAAK0mC,SAGJvlB,EAAQkkB,eAIO,MAAfj2B,EAAMkK,OACPlK,EAAMk2B,SAAU,GAGdnkB,EAAQwlB,aACVv3B,EAAMxJ,MAAQwkB,EACdhb,EAAM+mB,MAAQA,GAAU/mB,EAAM+nB,eAAiB/nB,EAAM+nB,cAAchB,OAAU/mB,EAAM+mB,QAAS,IAAK9jB,OAAS8jB,MAC1GpR,WAAW,KACL3V,EAAMk2B,UACU,MAAfl2B,EAAMkK,MACPtZ,KAAK0mC,SAKPt3B,EAAMk2B,SAAU,IAEjB,QAIP,IAAIjX,EAEAuY,EACAzQ,GAAQ,IAAK9jB,OAAS8jB,OAAS,cACnC,MAAM0Q,EAAkBjX,IACnBwW,IACDjlB,EAAQyQ,eAAiB5xB,KAAK6kC,oBAAoBuB,IAEpD,MAAMrU,GAAW6U,EAAkBhX,GAAWkX,YAAY1c,EAAQH,EAAQ9I,GAK1E,OAJGA,EAAQ4lB,uBACT/mC,KAAK6kC,oBAAoB1jB,EAAQ4lB,sBAAyB5lB,EAAsBqM,WAG3EuE,EAAQzwB,KAAK0wB,EAAS3wB,QAAU+N,IAMrC,GAJkB,2BAAfA,EAAM2U,MAAoD,oBAAf3U,EAAM2U,MAClD/jB,KAAK2N,IAAIyB,MAAM,QAASA,EAAMkK,KAAMlK,EAAM2U,KAAM/jB,KAAKmuB,SAAUE,EAAMjE,EAAQH,GAG7D,MAAf7a,EAAMkK,MAAgBtZ,KAAKmuB,WAAaE,EACvB,4BAAfjf,EAAM2U,OACP,EAAeijB,OAAO,MACtB,EAAeA,OAAO,cAIxBP,EAAcr3B,QACT,GAAkB,MAAfA,EAAMkK,MAAgBtZ,KAAKmuB,UAAYE,IAASruB,KAAKmuB,SAAU,CACvE,QAAsC5pB,IAAnCvE,KAAK2kC,oBAAoBtW,GAAqB,CAC/C,MAAM0D,EAAU,IAAI3wB,QAAQ,CAAC6lC,EAAeC,KAC1ClnC,KAAKolC,UAAU,2BAA4B,CAAC+B,MAAO9Y,GAAO,CAACsY,YAAY,IAAOrlC,KAAM8lC,IAClFpnC,KAAKolC,UAAU,2BAA4B,CACzCld,GAAIkf,EAAalf,GACjB5kB,MAAO8jC,EAAa9jC,OACnB,CAAC+qB,OAAMsY,YAAY,IAAOrlC,KAAK2lC,EAAeC,IAChDA,KAGLlnC,KAAK2kC,oBAAoBtW,GAAQ0D,EAGnC/xB,KAAK2kC,oBAAoBtW,GAAM/sB,KAAK,KAElCtB,KAAKolC,UAAUhb,EAAQH,EAAQ9I,GAAS7f,KAAK0wB,EAAS3wB,QAASolC,IAC9DA,QACE,GAAkB,MAAfr3B,EAAMkK,KAAc,CAC5B,MAAM+tB,GAAWj4B,EAAM2U,KAAKiT,MAAM,uEAAuE,GACtGqQ,IAAYhZ,IACVlN,EAAQkN,KACTlN,EAAQkN,KAAOgZ,EAEfrnC,KAAKsnC,YAAYD,GAGnBrnC,KAAKimC,aAAaoB,EAASlmB,GAAS7f,KAAMsuB,IACxCA,EAAUkX,YAAY1c,EAAQH,EAAQ9I,GAAS7f,KAAK0wB,EAAS3wB,QAASolC,IACrEA,SAEA,GAAItlB,EAAQ0V,UAA2B,MAAfznB,EAAMkK,KAU9B,GAAI6H,EAAQ0V,UAA2B,MAAfznB,EAAMkK,KAqBnCmtB,EAAcr3B,OArBmC,CACjD,GAAkB,oBAAfA,EAAM2U,KAKP,OAJAqiB,OAAqB7hC,SACd4c,EAAQyQ,sBACR5xB,KAAK6kC,oBAAoB1jB,EAAQ4lB,2BACxCF,EAAeD,GAIjB,MAAM/3B,EAAMD,KAAKC,MACjB,GAAGsS,EAAQomB,UACN14B,GAAOsS,EAAQomB,SAChB,OAAOd,EAAcr3B,GAIzB+R,EAAQqmB,SAAWrmB,EAAQqmB,SAAW1+B,KAAK2+B,IAAI,GAAuB,IAAnBtmB,EAAQqmB,UAAkB,EAC7EziB,WAAW,KACT8hB,EAAeD,IACK,IAAnBzlB,EAAQqmB,cA7BsC,CACjD,MAAMA,GAAYp4B,EAAM2U,KAAKiT,MAAM,qBAAqB,IAAM,GAE9D,GAAGwQ,QAAwCjjC,IAA5B4c,EAAQumB,gBAAgCvmB,EAAQumB,gBAAkB,IAC/E,OAAOjB,EAAcr3B,GAGvB2V,WAAW,KACT8hB,EAAeD,IACiB,IAA/BY,OAmCT,OARGnZ,EAAQlN,EAAQkN,MAAQruB,KAAKmuB,UAC9BnuB,KAAKimC,aAAa5X,EAAMlN,GAAS7f,KAAKulC,EAAgBJ,GAEtD,EAAetkC,IAAI,MAAMb,KAAM6sB,IAC7BnuB,KAAKimC,aAAajmC,KAAKmuB,SAAWE,EAAOF,GAAY,EAAIA,SAAUhN,GAAS7f,KAAKulC,EAAgBJ,KAI9FzU,IAKX,IAAeyS,WAAaA,GACb,U,2SC9WA,WA9DR,MAGL,cAFO,KAAAkD,eAAgB,EAGrB,IACEnkB,EAAc,GAAI,IAClB,MAAMxiB,GACNhB,KAAK2nC,eAAgB,GAIlB,cACL,OAAO3nC,KAAK2nC,cAGP,MAAMC,EAA0DtkC,GACrE,OAAGA,aAAiBwgB,KACX,IAAI1iB,QAAQ,CAACC,EAASgiB,KAC3B,IAAIwkB,EAAa,IAAIC,WACrBD,EAAWE,OAAS,SAAS7iB,GAC3B,IAAI8iB,EAAc9iB,EAAMM,OAAO3N,OAE3BtU,EAAM,IAAIoB,WAAWqjC,GAEzBJ,EAAWK,MAAM1kC,GAAKjC,KAAKD,EAASgiB,IAGtCwkB,EAAWK,kBAAkB5kC,KAGxBskC,EAAWK,MAAM3kC,GAIrB,kBAAkBogB,EAAkBykB,GACzC,MAAM1kB,EAAwC,GAuB9C,MAtBuB,CACrBwkB,MAAaG,GAA8B,mCACzC,IAAIpoC,KAAK2nC,cACP,MAAM,EAGRlkB,EAAUtiB,KAAKinC,MAEjBC,SAAU,KACR5kB,EAAUpjB,OAAS,GAErB2V,SAAU,CAACsyB,GAAgB,KACzB,MAAM3kB,EAAOH,EAAcC,EAAWC,GAMtC,OAJG4kB,GAAiBH,GAClBA,EAAiBxkB,GAGZA,M,uSCvDA,MAAM,GAMnB,YAAmB4kB,GAAA,KAAAA,SACd,IAAM54B,OACP3P,KAAKuoC,QAAU,SAGjBvoC,KAAKwkB,eAGA,eACL,OAAGxkB,KAAK0kB,cACC1kB,KAAK0kB,cAGP1kB,KAAK0kB,cAAgB8jB,OAAO3jB,KAAK7kB,KAAKuoC,QAGxC,OAAOhiB,GACZ,OAAOvmB,KAAKyoC,iBAAuBthB,GAAU,yCACrBA,EAAMT,OAAO,IAAMH,OAItC,YACL,OAAOiiB,OAAO9hB,OAAO1mB,KAAKuoC,QAGrB,KAAKhiB,EAAmB8P,GAC7B,OAAOr2B,KAAKyoC,iBAAkBthB,GACrBA,EAAMJ,IAAI,IAAMR,EAAW8P,IAI/B,SAASrP,EAAkBrD,GAMhC,OAJKA,aAAgBG,OACnBH,EAAOH,EAAcG,IAGhB3jB,KAAK8mB,KAAKE,EAAU,IAAI0hB,SAAS/kB,IAAOriB,KAAK,IAC3CqiB,GAQJ,QAAQqD,EAAkBoD,EAAmC,QAOlE,OAAOpqB,KAAKyoC,iBAAuBthB,GAAU,mCAC3C,MAAMkP,QAAiBlP,EAAM6P,MAAM,IAAMhQ,GAEzC,IAAIqP,IAAalP,EAEf,KAAM,iBAOR,OAJgBkP,EAASjM,SAQrB,iBAAoBjH,GAC1B,OAAO,IAAI/hB,QAAW,CAAMC,EAASgiB,IAAW,mCAC9C,IAAIslB,GAAW,EACf,MAAMhiB,EAAU5B,WAAW,KACzB1B,IAEAslB,GAAW,GACV,MAEH,IACE,MAAMxhB,QAAcnnB,KAAKwkB,eACzB,IAAI2C,EACF,KAAM,YAGR,MAAMyhB,QAAYzlB,EAASgE,GAE3B,GAAGwhB,EAAU,OACbtnC,EAAQunC,GACR,MAAMrnB,GACN8B,EAAO9B,GAGTqF,aAAaD,OAIV,cAAcK,EAAkBtD,GACrC,MAAMmlB,EAAa,GAAYC,kBAAkBplB,EAAWC,GACnD3jB,KAAK+oC,SAAS/hB,EAAUrD,IAGjC,OAAOviB,QAAQC,QAAQwnC,I,2SCkd3B,MAAMG,GAAiB,IA5hBhB,MAAP,cACS,KAAAC,aAAe,IAAI,GAAuB,eAE1C,KAAAC,uBAEH,GAEG,KAAAC,eAEH,GAEG,KAAAC,cAWH,GACG,KAAAC,gBAA4C,GAE5C,KAAAC,oBAA4E,GAE3E,KAAA37B,IAAiC,OAAAqB,EAAA,GAAO,MAAO,IAAUI,MAAQ,IAAUzB,KAC3E,KAAA47B,OAAS,EACT,KAAAC,QAAU,EACV,KAAAn9B,MAAQ,IAAMA,MA8GtB,KAAAo9B,cAAgB,CAACnmC,EAAmB0jB,IAG3B,IAAa3Y,eAAuB/K,EAAM0R,QAAQxQ,QAAQ,GAGnE,KAAAklC,YAAc,CAACpmC,EAAmB0jB,KAChC,MAAM2iB,EAAiB1F,KAIvB,OADAxG,EADa,CAAC1Z,KAAM,cAAemW,QAAS,CAAClT,WAAU1jB,WAEhDtD,KAAKspC,oBAAoBtiB,GAAY2iB,GArHvC,gBAAgBtb,EAAuBnG,EAAYuO,EAAwCmT,EAAqBJ,EAAkB,QACvGjlC,IAA7BvE,KAAKopC,cAAc/a,KACpBruB,KAAKopC,cAAc/a,GAAQ,GAC3BruB,KAAKqpC,gBAAgBhb,GAAQ,GAG/B,MAAMwb,EAAe7pC,KAAKopC,cAAc/a,GAElC0D,EAAU,IAAI3wB,QAA6B,CAACC,EAASgiB,KACzDwmB,EAAa1oC,KAAK,CAAC+mB,KAAIshB,UAAS/S,KAAIzE,SAAU,CAAC3wB,UAASgiB,UAASumB,kBAOnE,OAJA7kB,WAAW,KACT/kB,KAAK8pC,cAAczb,IAClB,GAEI0D,EAGF,cAAc1D,GACnB,MAAMwb,EAAe7pC,KAAKopC,cAAc/a,GAIxC,GAAGruB,KAAKqpC,gBAAgBhb,IAHkB,KAGSwb,IAAiBA,EAAaxpC,OAC/E,OAAO,EAIT,MAAMuU,EAAOi1B,EAAaxnB,cAAczgB,GAAmB,IAAdA,EAAE4nC,UAAkBK,EAAaxnB,cAAczgB,GAAKA,EAAE4nC,UAAYxpC,KAAKwpC,UAAYK,EAAajgC,QACvIggC,EAAch1B,EAAKg1B,aAAe,EAExC5pC,KAAKqpC,gBAAgBhb,IAASub,EAE9Bh1B,EAAK6hB,KACJn1B,KAAMuW,IACL7X,KAAKqpC,gBAAgBhb,IAASub,EAC9B5pC,KAAK8pC,cAAczb,GAEnBzZ,EAAKod,SAAS3wB,QAAQwW,IACpBzI,IAEEA,GAAUA,EAAM2U,OAAwB,sBAAf3U,EAAM2U,MAA+C,oBAAf3U,EAAM2U,OACvE/jB,KAAK2N,IAAIyB,MAAM,uBAAwBA,GAGzCpP,KAAKqpC,gBAAgBhb,IAASub,EAC9B5pC,KAAK8pC,cAAczb,GAEnBzZ,EAAKod,SAAS3O,OAAOjU,KAIlB,WAAWo6B,GAEhBxpC,KAAKwpC,QAAUA,EAGV,iBACL,OAAOxpC,KAAKipC,aAGP,eAAejiB,GACpB,MAAM+K,EAAU/xB,KAAKkpC,uBAAuBliB,IAAahnB,KAAKmpC,eAAeniB,GAC7E,SAAG+K,GAAYA,EAAQqS,YAAerS,EAAQoS,eAC5CpS,EAAQyS,UACD,GAMJ,gBAAgBnW,EAAcze,EAA4C2E,EAAgBw1B,EAAe7hB,EAAK,EAAGshB,EAAU,EAAGQ,GACnI,OAAOhqC,KAAKiqC,gBAAgB5b,EAAMnG,EAAI,IAAW,mCAG/C,OAFA8hB,GAAeA,IAER,GAAW5E,UAAU,iBAAkB,CAC5Cx1B,WACA2E,SACAw1B,SACQ,CACR1b,OACAmB,cAAc,OAEfxvB,KAAKkqC,SAASH,GAAQP,GAOnB,SAASlmC,GACf,OAAOA,EAAQ,KAAO,IAGhB,aAAa6mC,GACnB,IAAI7mC,EAOJ,OALAA,EAAQ,IAKDA,OAiBF,aAAa6d,G,MAClB,IAAI,GAAYipB,cACd,OAAOhpC,QAAQiiB,OAAO,CAACU,KAAM,+BAG/B,IAGIrO,EAHAy0B,EAAmB,QAAf,EAAGhpB,EAAQgpB,YAAI,QAAI,GACvB,KAAC9b,EAAI,SAAEze,GAAYuR,EAIC,eAArBA,EAAQuC,UAA8B2mB,KAGV,4BAArBlpB,EAAQuC,WAChBhO,EAAU1V,KAAKypC,cACftoB,EAAQuC,SAAW,qBAJnBhO,EAAU1V,KAAK0pC,YACfvoB,EAAQuC,SAAW,aAMrB,MAAMsD,ECjNH,SAA+BpX,EAA4CuR,GAGhF,MACMmpB,EADW,MACajqC,OAAS,IAAM,GAE7C,OAAOuP,EAASsN,GACd,IAAK,yBACL,IAAK,4BAA6B,CAChC,MAAMqtB,EAAY36B,EAAS46B,WAAa,IAAM56B,EAAS46B,WAAa,GACpE,OAPa,GAOI,GAPJ,GAOkB,GAAK,IAAM,IAAM56B,EAASsY,GAAKqiB,GAAaD,EAAM,IAAMA,EAAMA,GAG/F,IAAK,6BACL,IAAK,6BACL,IAAK,uBACL,IAAK,oBACH,OAAO16B,EAAS66B,UAAY,IAAM76B,EAAS86B,UAAYJ,EAAM,IAAMA,EAAMA,GAG3E,QAEE,OADA58B,QAAQ0B,MAAM,yBAA0BQ,GACjC,ID2LQ+6B,CAAsB/6B,EAAqBuR,EAAQ6F,UAC9D4jB,EAAgB5qC,KAAKkpC,uBAAuBliB,GAC5C6jB,EAAc7qC,KAAK8qC,iBAQzB,GANA9qC,KAAKqM,OAASrM,KAAK2N,IAAI,eAAgBqZ,EAAUmjB,EAAMv6B,EAAUuR,EAAQuC,UAMtEknB,EAGD,OAAGT,EACMS,EAActpC,KAAMqiB,GACtBA,EAAKwmB,KAAOA,GACbnqC,KAAKqM,OAASrM,KAAK2N,IAAI,+CAAgDgW,EAAKwmB,KAAMA,GAE3EnqC,KAAK+qC,WAAW/jB,GAAU1lB,KAAK,IAC7BtB,KAAKgrC,aAAa7pB,IACxB6a,MAAM,IACAh8B,KAAKgrC,aAAa7pB,KAGpBwC,GAIJinB,EAIX,MAAM5Y,EAAWiS,KACXvgB,EAAWvC,EAAQuC,UAAY,aAErC,IAEIunB,EAFAC,GAAW,EACXC,GAAW,EAEXC,EAAgBh8B,WACXpP,KAAKkpC,uBAAuBliB,GACnCgL,EAAS3O,OAAOjU,GAChBg8B,EAAe,QAEZH,GAAqB77B,GAAwB,sBAAfA,EAAM2U,MACrCknB,EAAgB5C,YAIpB,MAAMngB,EAAKloB,KAAKupC,SAEhBsB,EAAYQ,QAAQrkB,GAAU1lB,KAAWqiB,GAAe,mCAItD,GAAGA,EAAKwmB,KAAOA,EAGb,YADMnqC,KAAK+qC,WAAW/jB,IAChB,EAGRgL,EAAS3wB,QAAQsiB,OAChBqY,MAAM,KAEmB6O,EAAYS,cAActkB,EAAUtD,GAE5CpiB,KAAMsmC,IACtBqD,EAAkBrD,EAClB,MAAMmC,EAAQ5oB,EAAQoqB,WAAavrC,KAAKwrC,aAAarB,GACrD,IAAI51B,EAGFk3B,EADEC,EAAgDtqC,QAAQC,UAG5D,MAIMsqC,EAAoB,CAAMroC,EAAmBiR,IAAmB,mCACpE,GAAGmB,EAAS,CAIV,aAFwBA,EAAQpS,EAAO0jB,GAKzC,OAAO1jB,KAGHsoC,EAAqB,GAC3Br3B,EApBkB,EAqBlB,GAEEk3B,EAAoBxH,KACpB2H,EAAQzqC,KAAK,CAACoT,SAAQm3B,mBAAkBD,sBACxCC,EAAmBD,EACnBl3B,GAAUw1B,QACJx1B,EAAS41B,GAEjB,IAAIptB,EAAO,EACX,MAAM8uB,EAAa,IAAW,mCAG5B,MAAM,OAACt3B,EAAM,iBAAEm3B,EAAgB,kBAAED,GAAqBG,EAAQhiC,QAC9D,IACE,MAAMiO,QAAe7X,KAAK8rC,gBAAgBzd,EAAMze,EAAU2E,EAAQw1B,EAAO7hB,EAAI/G,EAAQqoB,QAASQ,GAExF1mC,EAAoBuU,EAAOvU,MAE9BsoC,EAAQvrC,QACTwrC,IAGF7rC,KAAKqM,OAASrM,KAAK2N,IAAI,uCAAwCqZ,EAAUnP,GACzE,MAAMk0B,EAAUx3B,EAASw1B,GAASI,IAAS7mC,EAAMmB,WACjD,GAAGnB,EAAMmB,WAAY,CAEnBsY,GAAQzZ,EAAMmB,WAIZutB,EAASqS,OAAO,CAACtnB,OAAMxI,SAAQwK,MAAOorB,IAGxC,MAAM6B,QAAwBL,EAAkBroC,GAChD0mC,UAEM0B,EACN1B,UAEM,GAAY/B,MAAML,EAAYoE,GAGtCP,EAAkBpqC,UAEf0qC,IACDZ,GAAW,EAEXnZ,EAAS3wB,QAAQumC,EAAW5xB,SAASm0B,EAvTxB,OAyTf,MAAM5oB,GACN6pB,EAAa7pB,OAIjB,IAAI,IAAI1gB,EAAI,EAAGR,EAASyI,KAAK2+B,IAvETwE,IAuE0BL,EAAQvrC,QAASQ,EAAIR,IAAUQ,EAC3EgrC,QAKN,MAAM7B,EAAc,KAClB,GAAGkB,EAAU,CACX,MAAM97B,EAAQ,IAAIiD,MAAM,YAGxB,MADAjD,EAAM2U,KAAO,oBACP3U,IAkBV,OAdA4iB,EAASwS,OAAS,KACZ0G,GAAaC,IACfD,GAAW,SACJlrC,KAAKkpC,uBAAuBliB,GACnCokB,EAAa,CAACrnB,KAAM,wBAIxBiO,EAASqS,OAAU6H,IACjBxO,EAAU,CAACwO,SAAU,OAAF,QAAGllB,YAAaklB,MAGrClsC,KAAKkpC,uBAAuBliB,GAAYgL,EAEjCA,EAGF,WAAWhL,GAGhB,cADOhnB,KAAKkpC,uBAAuBliB,GAC5BhnB,KAAK8qC,iBAAiBpkB,OAAOM,GAG/B,YAAW,KAACmlB,EAAI,SAAEnlB,IACvB,MAAMolB,EAAWD,EAAKhC,KACpBkC,EAAYD,GAAY,SAE1B,IAAIlB,GAAW,EACbC,GAAW,EACXmB,EAAY,EACZC,EAAW,OAKAH,EAAW,SACtBG,EAAW,OACHH,EAAW,SACnBG,EAAW,OAGb,MAAM3C,EAAc5pC,KAAKkqC,SAASqC,GAE5BC,EAAa1jC,KAAK4B,KAAK0hC,EAAWG,GAClCE,EAA2B,CAAC,YAAc,YAAa,YAAc,aAE3E,IAAIC,EAAQ,EAEZ,MAAMC,EAA6B,CACjCzvB,EAAGmvB,EAAY,eAAiB,YAChCnkB,GAAIukB,EACJG,MAAOJ,EACP3qC,KAAMmlB,EACN6lB,aAAc,IAGV3I,EAIF,CACFG,OAASyI,OAEL9a,EAAuD,IAAI5wB,QAAQ,CAACC,EAASgiB,KACjF,GAAGmpB,EAAa,IACd,OAAOnpB,EAAO,CAACU,KAAM,iBAGvBmgB,EAAe7iC,QAAUA,EACzB6iC,EAAe7gB,OAASA,IAI1B,GAFArhB,OAAO4L,OAAOokB,EAAUkS,GAErBsI,EAAa,IACd,OAAOxa,EAGT,IAAIoZ,EAAgBh8B,IACC,qBAAhBA,aAAK,EAALA,EAAO2U,OACR/jB,KAAK2N,IAAIyB,MAAM,WAAYA,GAG7B4iB,EAAS3O,OAAOjU,GAChB87B,GAAW,EACXE,EAAe,QAGjB,MAAMhhB,EAASiiB,EAAY,yBAA2B,sBAEhDnkB,EAAKloB,KAAKupC,SAMV/8B,EAAOxM,KA6Eb,MAAMoY,EA5EN,YACE,IAAI,IAAI7D,EAAS,EAAGA,EAAS63B,EAAU73B,GAAUg4B,EAAU,CACzD,MAAMnE,EAAOsE,UACPlgC,EAAKy9B,gBAAgB,SAAU/hB,EAAI,IAChC,IAAI9mB,QAAc,CAAC2rC,EAAeC,KACvC,MAAMC,EAAS,IAAInF,WACbnkB,EAAOwoB,EAAKn3B,MAAMT,EAAQA,EAASg4B,GAEzCU,EAAOC,UAAalsC,IAClB,GAAGkqC,EAED,YADA8B,EAAa,CAACjpB,KAAM,oBAItB,GAAG/iB,EAAEwkB,OAAO2nB,aAAerF,WAAWsF,KAGpC,OAFA5gC,EAAKmB,IAAIyB,MAAM,0BACf49B,EAAa,CAACjpB,KAAM,sBAItB,IAAIvf,EAASxD,EAAEwkB,OAAO3N,OACtBrL,EAAKH,OAASG,EAAKmB,IAAI,2BAA4B0+B,EAAWjE,EAAM5jC,EAAOC,WAAY,IAAIE,WAAWH,GAAQnE,OAAQ,IAAIsE,WAAWH,GAAQwQ,QAAQ3U,QA0BrJ,GAAW+kC,UAAUhb,EAAQ,CAC3BijB,QAASZ,EACTa,UAAWlF,EACXmF,iBAAkBf,EAClBlpC,MAAOkB,GACC,CAER8qB,YAAY,IACXhuB,KAAMuW,IACPy0B,IACAS,IAIA/a,EAASqS,OAAO,CAACtnB,KAAMuvB,EAAYC,EAAUxtB,MAAOqtB,IAEjDE,GAAaE,IACdxa,EAAS3wB,QAAQsrC,GACjBxB,GAAW,IAEZC,IAGL6B,EAAO/E,kBAAkBvkB,KAE1BimB,GAAa5N,MAAMoP,IAIfoC,GACL93B,EAAU,KACd,GAAGw1B,EAAU,OACb,MAAM9oC,EAAIgW,EAAGU,OACV1W,EAAE2a,MAAQmuB,GACZ9oC,EAAEG,MAAwBjB,KAAKoU,IAQlC,IAAI,IAAI7U,EAAI,EAAGR,EAASyI,KAAK2+B,IALTwE,IAK0BO,GAAa3rC,EAAIR,IAAUQ,EACvE6U,IAmBF,OAhBAsc,EAASwS,OAAS,KAEZ0G,GAAaC,IACfD,GAAW,EACXE,EAAa,CAACrnB,KAAM,sBAIxBiO,EAASqS,OAAU6H,IACjBxO,EAAU,CAACwO,SAAU,OAAF,QAAGllB,YAAaklB,MAGrCla,EAAShP,QAAQ,YACRhjB,KAAKmpC,eAAeniB,KAGtBhnB,KAAKmpC,eAAeniB,GAAYgL,IAK3C,IAAegX,eAAiBA,GACjB,U,uSE1jBf,IAAIyE,IAAgB,EACb,MAAMpD,GAAkB,IACtBoD,GAGTzH,EAAiB0H,oBAAqBnmB,IACpCmW,EAAU,CAACtnB,OAAQmR,MAGrBye,EAAiB1T,yBAA4Bqb,IAC3CjQ,EAAU,CAAC3Z,KAAM,yBAA0BmW,QAASyT,KA0HtDlR,EAAI9C,iBAAiB,UAvHG34B,GAAW,qCACjC,IACE,MAAMwN,EAAOxN,EAAE4T,KACTtH,EAASkB,EAAKlB,OAEpB,GAAiB,gBAAdkB,EAAKuV,KAAwB,CAC9B,MAAM,SAACiD,EAAQ,MAAE1jB,GAASkL,EAAK0rB,QACzBlI,EAAW,GAAesX,oBAAoBtiB,GAMpD,YALGgL,IACDA,EAAS3wB,QAAQiC,UACV,GAAegmC,oBAAoBtiB,KAIvC,GAAwC,oBAApCxY,EAA2BuV,KAA4B,CAChE,MAAMvV,EAAOxN,EAAE4T,KACTg5B,EAA0C,CAC9C7pB,KAAMvV,EAAKuV,KACXmE,GAAI1Z,EAAK0Z,IAGX,IACE,MAAM0gB,QAAY,GAAekD,mBAAmBt9B,EAAK0rB,SACzD0T,EAAa1T,QAAU0O,EACvB,MAAMrnB,GACNqsB,EAAaC,gBAAkBr/B,EAAK0rB,QACpC0T,EAAax+B,MAAQmS,EAIvB,YADAmc,EAAUkQ,GAEL,GAAiB,gBAAdp/B,EAAKuV,KAEb,YADA0pB,GAAgBj/B,EAAK0rB,SAEhB,GAAiB,gBAAd1rB,EAAKuV,KAAwB,CACrC,MAAM+pB,EAAat/B,EAAK0rB,QAClBhS,EAAK4lB,EAAW5lB,GAEhB6lB,EAAgBlQ,EAAe17B,IAAI+lB,GAClB,YAApB4lB,EAAW/pB,KACZgqB,EAAc7U,cAAc,UAAW4U,EAAW5T,SACtB,SAApB4T,EAAW/pB,KACnBgqB,EAAc7U,cAAc,QACA,UAApB4U,EAAW/pB,OACnBgqB,EAAc7U,cAAc,SAC5B2E,EAAenX,OAAOwB,IAI1B,IAAI1Z,EAAKA,KACP,OAGF,OAAOA,EAAKA,MACV,IAAK,aACL,IAAK,iBAEH,OAAO,IAAaA,EAAKA,MAAMuI,MAAM,IAAcvI,EAAKjJ,MAAMjE,KAAKuW,IACjE6lB,EAAU,CAACpwB,SAAQuK,aAGvB,IAAK,aACL,IAAK,iBACL,IAAK,aACL,IAAK,eACH,IAEE,IAAIA,EAAS,GAAerJ,EAAKA,MAAMuI,MAAM,GAAgBvI,EAAKjJ,MAE/DsS,aAAkBzW,UAInByW,QAAeA,GAGjB6lB,EAAU,CAACpwB,SAAQuK,WACnB,MAAMzI,GACNsuB,EAAU,CAACpwB,SAAQ8B,UAGrB,MAGF,IAAK,eAEH,GAAWZ,EAAKA,MAAMuI,MAAM,GAAYvI,EAAKjJ,MAAMyd,QAAQ,KACzD0a,EAAU,CAACpwB,SAAQuK,OAAQ,SAG7B,MAGF,QACE,IAEE,IAAIA,EAAS,GAAWrJ,EAAKA,MAAMuI,MAAM,GAAYvI,EAAKjJ,MAEvDsS,aAAkBzW,UACnByW,QAAeA,GAKjB6lB,EAAU,CAACpwB,SAAQuK,WACnB,MAAMzI,GACNsuB,EAAU,CAACpwB,SAAQ8B,YAOzB,MAAMmS,SAOVmc,EAAU","file":"6b4e475df8d7100cbf33.worker.js","sourcesContent":[" \tthis[\"webpackChunk\"] = function webpackChunkCallback(chunkIds, moreModules) {\n \t\tfor(var moduleId in moreModules) {\n \t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t}\n \t\twhile(chunkIds.length)\n \t\t\tinstalledChunks[chunkIds.pop()] = 1;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded chunks\n \t// \"1\" means \"already loaded\"\n \tvar installedChunks = {\n \t\t0: 1\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n \t\tpromises.push(Promise.resolve().then(function() {\n \t\t\t// \"1\" is the signal for \"already loaded\"\n \t\t\tif(!installedChunks[chunkId]) {\n \t\t\t\timportScripts(__webpack_require__.p + \"\" + chunkId + \".\" + \"6b4e475df8d7100cbf33\" + \".worker.js\");\n \t\t\t}\n \t\t}));\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 12);\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function bytesToHex(bytes: ArrayLike<number>) {\r\n bytes = bytes || [];\r\n let arr: string[] = [];\r\n for(let i = 0; i < bytes.length; ++i) {\r\n arr.push((bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16));\r\n }\r\n return arr.join('');\r\n}\r\n\r\nexport function bytesFromHex(hexString: string) {\r\n const len = hexString.length;\r\n let start = 0;\r\n let bytes: number[] = [];\r\n\r\n if(len % 2) { // read 0x581 as 0x0581\r\n bytes.push(parseInt(hexString.charAt(0), 16));\r\n ++start;\r\n }\r\n\r\n for(let i = start; i < len; i += 2) {\r\n bytes.push(parseInt(hexString.substr(i, 2), 16));\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bytesToBase64(bytes: number[] | Uint8Array) {\r\n let mod3: number;\r\n let result = '';\r\n\r\n for(let nLen = bytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; ++nIdx) {\r\n mod3 = nIdx % 3;\r\n nUint24 |= bytes[nIdx] << (16 >>> mod3 & 24);\r\n if(mod3 === 2 || nLen - nIdx === 1) {\r\n result += String.fromCharCode(\r\n uint6ToBase64(nUint24 >>> 18 & 63),\r\n uint6ToBase64(nUint24 >>> 12 & 63),\r\n uint6ToBase64(nUint24 >>> 6 & 63),\r\n uint6ToBase64(nUint24 & 63)\r\n );\r\n nUint24 = 0;\r\n }\r\n }\r\n\r\n return result.replace(/A(?=A$|$)/g, '=');\r\n}\r\n\r\nexport function uint6ToBase64(nUint6: number) {\r\n return nUint6 < 26\r\n ? nUint6 + 65\r\n : nUint6 < 52\r\n ? nUint6 + 71\r\n : nUint6 < 62\r\n ? nUint6 - 4\r\n : nUint6 === 62\r\n ? 43\r\n : nUint6 === 63\r\n ? 47\r\n : 65\r\n}\r\n\r\nexport function bytesCmp(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\r\n const len = bytes1.length;\r\n if(len !== bytes2.length) {\r\n return false;\r\n }\r\n\r\n for(let i = 0; i < len; ++i) {\r\n if(bytes1[i] !== bytes2[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function bytesXor(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\r\n const len = bytes1.length;\r\n const bytes: number[] = [];\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = bytes1[i] ^ bytes2[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bytesToArrayBuffer(b: number[]) {\r\n return (new Uint8Array(b)).buffer;\r\n}\r\n\r\nexport function convertToArrayBuffer(bytes: any | ArrayBuffer | Uint8Array) {\r\n // Be careful with converting subarrays!!\r\n if(bytes instanceof ArrayBuffer) {\r\n return bytes;\r\n }\r\n if(bytes.buffer !== undefined &&\r\n bytes.buffer.byteLength === bytes.length * bytes.BYTES_PER_ELEMENT) {\r\n return bytes.buffer;\r\n }\r\n return bytesToArrayBuffer(bytes);\r\n}\r\n\r\nexport function convertToUint8Array(bytes: Uint8Array | number[]): Uint8Array {\r\n if((bytes as Uint8Array).buffer !== undefined) {\r\n return bytes as Uint8Array;\r\n }\r\n\r\n return new Uint8Array(bytes);\r\n}\r\n\r\nexport function bytesFromArrayBuffer(buffer: ArrayBuffer) {\r\n const len = buffer.byteLength;\r\n const byteView = new Uint8Array(buffer);\r\n const bytes: number[] = [];\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = byteView[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bufferConcat(buffer1: any, buffer2: any) {\r\n const l1 = buffer1.byteLength || buffer1.length;\r\n const l2 = buffer2.byteLength || buffer2.length;\r\n const tmp = new Uint8Array(l1 + l2);\r\n tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0);\r\n tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1);\r\n\r\n return tmp.buffer;\r\n}\r\n\r\nexport function bufferConcats(...args: any[]) {\r\n let length = 0;\r\n args.forEach(b => length += b.byteLength || b.length);\r\n\r\n const tmp = new Uint8Array(length);\r\n \r\n let lastLength = 0;\r\n args.forEach(b => {\r\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\r\n lastLength += b.byteLength || b.length;\r\n });\r\n\r\n return tmp/* .buffer */;\r\n}\r\n\r\nexport function bytesFromWordss(input: Uint32Array) {\r\n const o: number[] = [];\r\n for(let i = 0, length = input.length * 4; i < length; ++i) {\r\n o.push((input[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);\r\n }\r\n\r\n return o;\r\n}\r\n\r\nexport function bytesToWordss(input: ArrayBuffer | Uint8Array) {\r\n let bytes: Uint8Array;\r\n if(input instanceof ArrayBuffer) bytes = new Uint8Array(input);\r\n else bytes = input;\r\n\r\n const words: number[] = [];\r\n for(let i = 0, len = bytes.length; i < len; ++i) {\r\n words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8);\r\n }\r\n\r\n return new Uint32Array(words);\r\n}\r\n\r\n// * https://stackoverflow.com/a/52827031\r\n/* export const isBigEndian = (() => {\r\n const array = new Uint8Array(4);\r\n const view = new Uint32Array(array.buffer);\r\n return !((view[0] = 1) & array[0]);\r\n})(); */\r\n","'use strict'\r\n//@flow\r\n\r\n/** * * * * * * * * * *\r\n * Big Integer Library *\r\n * Created 2000 *\r\n * Leemon Baird *\r\n * www.leemon.com *\r\n * * * * * * * * * * * */\r\n\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n// These functions are designed to avoid frequent dynamic memory allocation in the inner loop.\r\n// For most functions, if it needs a BigInt as a local variable it will actually use\r\n// a global, and will only allocate to it only when it's not the right size. This ensures\r\n// that when a function is called repeatedly with same-sized parameters, it only allocates\r\n// memory on the first call.\r\n//\r\n// Note that for cryptographic purposes, the calls to Math.random() must\r\n// be replaced with calls to a better pseudorandom number generator.\r\n//\r\n// In the following, \"bigInt\" means a bigInt with at least one leading zero element,\r\n// and \"integer\" means a nonnegative integer less than radix. In some cases, integer\r\n// can be negative. Negative bigInts are 2s complement.\r\n//\r\n// The following functions do not modify their inputs.\r\n// Those returning a bigInt, string, or Array will dynamically allocate memory for that value.\r\n// Those returning a boolean will return the integer 0 (false) or 1 (true).\r\n// Those returning boolean or int will not allocate memory except possibly on the first\r\n// time they're called with a given parameter size.\r\n//\r\n// bigInt add(x,y) //return (x+y) for bigInts x and y.\r\n// bigInt addInt(x,n) //return (x+n) where x is a bigInt and n is an integer.\r\n// string bigInt2str(x,base) //return a string form of bigInt x in a given base, with 2 <= base <= 95\r\n// int bitSize(x) //return how many bits long the bigInt x is, not counting leading zeros\r\n// bigInt dup(x) //return a copy of bigInt x\r\n// boolean equals(x,y) //is the bigInt x equal to the bigint y?\r\n// boolean equalsInt(x,y) //is bigint x equal to integer y?\r\n// bigInt expand(x,n) //return a copy of x with at least n elements, adding leading zeros if needed\r\n// Array findPrimes(n) //return array of all primes less than integer n\r\n// bigInt GCD(x,y) //return greatest common divisor of bigInts x and y (each with same number of elements).\r\n// boolean greater(x,y) //is x>y? (x and y are nonnegative bigInts)\r\n// boolean greaterShift(x,y,shift)//is (x <<(shift*bpe)) > y?\r\n// bigInt int2bigInt(t,n,m) //return a bigInt equal to integer t, with at least n bits and m array elements\r\n// bigInt inverseMod(x,n) //return (x**(-1) mod n) for bigInts x and n. If no inverse exists, it returns null\r\n// int inverseModInt(x,n) //return x**(-1) mod n, for integers x and n. Return 0 if there is no inverse\r\n// boolean isZero(x) //is the bigInt x equal to zero?\r\n// boolean millerRabin(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime? (b is bigInt, 1<b<x)\r\n// boolean millerRabinInt(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime? (b is int, 1<b<x)\r\n// bigInt mod(x,n) //return a new bigInt equal to (x mod n) for bigInts x and n.\r\n// int modInt(x,n) //return x mod n for bigInt x and integer n.\r\n// bigInt mult(x,y) //return x*y for bigInts x and y. This is faster when y<x.\r\n// bigInt multMod(x,y,n) //return (x*y mod n) for bigInts x,y,n. For greater speed, let y<x.\r\n// boolean negative(x) //is bigInt x negative?\r\n// bigInt powMod(x,y,n) //return (x**y mod n) where x,y,n are bigInts and ** is exponentiation. 0**0=1. Faster for odd n.\r\n// bigInt randBigInt(n,s) //return an n-bit random BigInt (n>=1). If s=1, then the most significant of those n bits is set to 1.\r\n// bigInt randTruePrime(k) //return a new, random, k-bit, true prime bigInt using Maurer's algorithm.\r\n// bigInt randProbPrime(k) //return a new, random, k-bit, probable prime bigInt (probability it's composite less than 2^-80).\r\n// bigInt str2bigInt(s,b,n,m) //return a bigInt for number represented in string s in base b with at least n bits and m array elements\r\n// bigInt sub(x,y) //return (x-y) for bigInts x and y. Negative answers will be 2s complement\r\n// bigInt trim(x,k) //return a copy of x with exactly k leading zero elements\r\n//\r\n//\r\n// The following functions each have a non-underscored version, which most users should call instead.\r\n// These functions each write to a single parameter, and the caller is responsible for ensuring the array\r\n// passed in is large enough to hold the result.\r\n//\r\n// void addInt_(x,n) //do x=x+n where x is a bigInt and n is an integer\r\n// void add_(x,y) //do x=x+y for bigInts x and y\r\n// void copy_(x,y) //do x=y on bigInts x and y\r\n// void copyInt_(x,n) //do x=n on bigInt x and integer n\r\n// void GCD_(x,y) //set x to the greatest common divisor of bigInts x and y, (y is destroyed). (This never overflows its array).\r\n// boolean inverseMod_(x,n) //do x=x**(-1) mod n, for bigInts x and n. Returns 1 (0) if inverse does (doesn't) exist\r\n// void mod_(x,n) //do x=x mod n for bigInts x and n. (This never overflows its array).\r\n// void mult_(x,y) //do x=x*y for bigInts x and y.\r\n// void multMod_(x,y,n) //do x=x*y mod n for bigInts x,y,n.\r\n// void powMod_(x,y,n) //do x=x**y mod n, where x,y,n are bigInts (n is odd) and ** is exponentiation. 0**0=1.\r\n// void randBigInt_(b,n,s) //do b = an n-bit random BigInt. if s=1, then nth bit (most significant bit) is set to 1. n>=1.\r\n// void randTruePrime_(ans,k) //do ans = a random k-bit true random prime (not just probable prime) with 1 in the msb.\r\n// void sub_(x,y) //do x=x-y for bigInts x and y. Negative answers will be 2s complement.\r\n//\r\n// The following functions do NOT have a non-underscored version.\r\n// They each write a bigInt result to one or more parameters. The caller is responsible for\r\n// ensuring the arrays passed in are large enough to hold the results.\r\n//\r\n// void addShift_(x,y,ys) //do x=x+(y<<(ys*bpe))\r\n// void carry_(x) //do carries and borrows so each element of the bigInt x fits in bpe bits.\r\n// void divide_(x,y,q,r) //divide x by y giving quotient q and remainder r\r\n// int divInt_(x,n) //do x=floor(x/n) for bigInt x and integer n, and return the remainder. (This never overflows its array).\r\n// void eGCD_(x,y,d,a,b) //sets a,b,d to positive bigInts such that d = GCD_(x,y) = a*x-b*y\r\n// void halve_(x) //do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement. (This never overflows its array).\r\n// void leftShift_(x,n) //left shift bigInt x by n bits. n<bpe.\r\n// void linComb_(x,y,a,b) //do x=a*x+b*y for bigInts x and y and integers a and b\r\n// void linCombShift_(x,y,b,ys) //do x=x+b*(y<<(ys*bpe)) for bigInts x and y, and integers b and ys\r\n// void mont_(x,y,n,np) //Montgomery multiplication (see comments where the function is defined)\r\n// void multInt_(x,n) //do x=x*n where x is a bigInt and n is an integer.\r\n// void rightShift_(x,n) //right shift bigInt x by n bits. 0 <= n < bpe. (This never overflows its array).\r\n// void squareMod_(x,n) //do x=x*x mod n for bigInts x,n\r\n// void subShift_(x,y,ys) //do x=x-(y<<(ys*bpe)). Negative answers will be 2s complement.\r\n//\r\n// The following functions are based on algorithms from the _Handbook of Applied Cryptography_\r\n// powMod_() = algorithm 14.94, Montgomery exponentiation\r\n// eGCD_,inverseMod_() = algorithm 14.61, Binary extended GCD_\r\n// GCD_() = algorothm 14.57, Lehmer's algorithm\r\n// mont_() = algorithm 14.36, Montgomery multiplication\r\n// divide_() = algorithm 14.20 Multiple-precision division\r\n// squareMod_() = algorithm 14.16 Multiple-precision squaring\r\n// randTruePrime_() = algorithm 4.62, Maurer's algorithm\r\n// millerRabin() = algorithm 4.24, Miller-Rabin algorithm\r\n//\r\n// Profiling shows:\r\n// randTruePrime_() spends:\r\n// 10% of its time in calls to powMod_()\r\n// 85% of its time in calls to millerRabin()\r\n// millerRabin() spends:\r\n// 99% of its time in calls to powMod_() (always with a base of 2)\r\n// powMod_() spends:\r\n// 94% of its time in calls to mont_() (almost always with x==y)\r\n//\r\n// This suggests there are several ways to speed up this library slightly:\r\n// - convert powMod_ to use a Montgomery form of k-ary window (or maybe a Montgomery form of sliding window)\r\n// -- this should especially focus on being fast when raising 2 to a power mod n\r\n// - convert randTruePrime_() to use a minimum r of 1/3 instead of 1/2 with the appropriate change to the test\r\n// - tune the parameters in randTruePrime_(), including c, m, and recLimit\r\n// - speed up the single loop in mont_() that takes 95% of the runtime, perhaps by reducing checking\r\n// within the loop when all the parameters are the same length.\r\n//\r\n// There are several ideas that look like they wouldn't help much at all:\r\n// - replacing trial division in randTruePrime_() with a sieve (that speeds up something taking almost no time anyway)\r\n// - increase bpe from 15 to 30 (that would help if we had a 32*32->64 multiplier, but not with JavaScript's 32*32->32)\r\n// - speeding up mont_(x,y,n,np) when x==y by doing a non-modular, non-Montgomery square\r\n// followed by a Montgomery reduction. The intermediate answer will be twice as long as x, so that\r\n// method would be slower. This is unfortunate because the code currently spends almost all of its time\r\n// doing mont_(x,x,...), both for randTruePrime_() and powMod_(). A faster method for Montgomery squaring\r\n// would have a large impact on the speed of randTruePrime_() and powMod_(). HAC has a couple of poorly-worded\r\n// sentences that seem to imply it's faster to do a non-modular square followed by a single\r\n// Montgomery reduction, but that's obviously wrong.\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport type Bool = 1 | 0\r\n\r\n//globals\r\nexport var bpe = 0 //bits stored per array element\r\nvar mask = 0 //AND this with an array element to chop it down to bpe bits\r\nvar radix = mask + 1 //equals 2^bpe. A single 1 bit to the left of the last bit of mask.\r\n\r\n//the digits for converting to different bases\r\nvar digitsStr =\r\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\\\\\'\"+-'\r\n\r\n//initialize the global variables\r\n\r\n//bpe=number of bits in the mantissa on this platform\r\nfor (bpe = 0; 1 << (bpe + 1) > 1 << bpe; bpe++);\r\nbpe >>= 1 //bpe=number of bits in one element of the array representing the bigInt\r\nmask = (1 << bpe) - 1 //AND the mask with an integer to get its bpe least significant bits\r\nradix = mask + 1 //2^bpe. a single 1 bit to the left of the first bit of mask\r\nexport var one = int2bigInt(1, 1, 1) //constant used in powMod_()\r\nexport var zero = int2bigInt(0, 1, 1)\r\n\r\n//the following global variables are scratchpad memory to\r\n//reduce dynamic memory allocation in the inner loop\r\nvar t: number[] | number = new Array(0)\r\nvar ss = t //used in mult_()\r\nvar s0 = t //used in multMod_(), squareMod_()\r\n// var s1=t; //used in powMod_(), multMod_(), squareMod_()\r\n// var s2=t; //used in powMod_(), multMod_()\r\nvar s3 = t //used in powMod_()\r\nvar s4 = t,\r\n s5 = t //used in mod_()\r\nvar s6 = t //used in bigInt2str()\r\nvar s7 = t //used in powMod_()\r\nvar T = t //used in GCD_()\r\nvar sa = t //used in mont_()\r\nvar mr_x1 = t,\r\n mr_r = t,\r\n mr_a = t, //used in millerRabin()\r\n eg_v = t,\r\n eg_u = t,\r\n eg_A = t,\r\n eg_B = t,\r\n eg_C = t,\r\n eg_D = t, //used in eGCD_(), inverseMod_()\r\n //, md_q1=t, md_q2=t, md_q3=t, md_r=t, md_r1=t, md_r2=t, md_tt=t, //used in mod_()\r\n\r\n primes = t,\r\n pows = t,\r\n s_i = t,\r\n s_i2 = t,\r\n s_R = t,\r\n s_rm = t,\r\n s_q = t,\r\n s_n1 = t,\r\n s_a = t,\r\n s_r2 = t,\r\n s_n = t,\r\n s_b = t,\r\n s_d = t,\r\n s_x1 = t,\r\n s_x2 = t,\r\n s_aa = t, //used in randTruePrime_()\r\n rpprb = t //used in randProbPrimeRounds() (which also uses \"primes\")\r\n\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nvar k, buff\r\n\r\n/**\r\n * return array of all primes less than integer n\r\n *\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function findPrimes(n: number): number[] {\r\n var i, s, p, ans\r\n s = new Array(n)\r\n for (i = 0; i < n; i++) s[i] = 0\r\n s[0] = 2\r\n p = 0 //first p elements of s are primes, the rest are a sieve\r\n for (; s[p] < n; ) {\r\n //s[p] is the pth prime\r\n for (\r\n i = s[p] * s[p];\r\n i < n;\r\n i += s[p] //mark multiples of s[p]\r\n )\r\n s[i] = 1\r\n p++\r\n s[p] = s[p - 1] + 1\r\n for (; s[p] < n && s[s[p]]; s[p]++); //find next prime (where s[p]==0)\r\n }\r\n ans = new Array(p)\r\n for (i = 0; i < p; i++) ans[i] = s[i]\r\n return ans\r\n}\r\n\r\n/**\r\n * does a single round of Miller-Rabin base b consider x to be a possible prime?\r\n *\r\n * x is a bigInt, and b is an integer, with b<x\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} b\r\n * @returns {(0 | 1)}\r\n */\r\nexport function millerRabinInt(x: number[], b: number): Bool {\r\n if (mr_x1.length !== x.length) {\r\n mr_x1 = dup(x)\r\n mr_r = dup(x)\r\n mr_a = dup(x)\r\n }\r\n\r\n copyInt_(mr_a, b)\r\n return millerRabin(x, mr_a)\r\n}\r\n\r\n/**\r\n * does a single round of Miller-Rabin base b consider x to be a possible prime?\r\n *\r\n * x and b are bigInts with b<x\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} b\r\n * @returns {(0 | 1)}\r\n */\r\nexport function millerRabin(x: number[], b: number[]): Bool {\r\n var i, j, k, s\r\n\r\n if (mr_x1.length !== x.length) {\r\n mr_x1 = dup(x)\r\n mr_r = dup(x)\r\n mr_a = dup(x)\r\n }\r\n\r\n copy_(mr_a, b)\r\n copy_(mr_r, x)\r\n copy_(mr_x1, x)\r\n\r\n addInt_(mr_r, -1)\r\n addInt_(mr_x1, -1)\r\n\r\n //s=the highest power of two that divides mr_r\r\n k = 0\r\n for (i = 0; i < mr_r.length; i++)\r\n for (j = 1; j < mask; j <<= 1)\r\n if (x[i] & j) {\r\n s = k < mr_r.length + bpe ? k : 0\r\n i = mr_r.length\r\n j = mask\r\n } else k++\r\n\r\n if (s) rightShift_(mr_r, s)\r\n\r\n powMod_(mr_a, mr_r, x)\r\n\r\n if (!equalsInt(mr_a, 1) && !equals(mr_a, mr_x1)) {\r\n j = 1\r\n //$off\r\n while (j <= s - 1 && !equals(mr_a, mr_x1)) {\r\n squareMod_(mr_a, x)\r\n if (equalsInt(mr_a, 1)) {\r\n return 0\r\n }\r\n j++\r\n }\r\n if (!equals(mr_a, mr_x1)) {\r\n return 0\r\n }\r\n }\r\n return 1\r\n}\r\n\r\n/**\r\n * returns how many bits long the bigInt is, not counting leading zeros.\r\n *\r\n * @param {number[]} x\r\n * @returns {number}\r\n */\r\nexport function bitSize(x: number[]): number {\r\n var j, z, w\r\n for (j = x.length - 1; x[j] == 0 && j > 0; j--);\r\n for (z = 0, w = x[j]; w; w >>= 1, z++);\r\n z += bpe * j\r\n return z\r\n}\r\n\r\n/**\r\n * return a copy of x with at least n elements, adding leading zeros if needed\r\n *\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function expand(x: number[], n: number): number[] {\r\n var ans = int2bigInt(0, (x.length > n ? x.length : n) * bpe, 0)\r\n copy_(ans, x)\r\n return ans\r\n}\r\n\r\n/**\r\n * return a k-bit true random prime using Maurer's algorithm.\r\n *\r\n * @export\r\n * @param {number} k\r\n * @returns {number[]}\r\n */\r\nexport function randTruePrime(k: number): number[] {\r\n var ans = int2bigInt(0, k, 0)\r\n randTruePrime_(ans, k)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return a k-bit random probable prime with probability of error < 2^-80\r\n *\r\n * @export\r\n * @param {number} k\r\n * @returns {number[]}\r\n */\r\nexport function randProbPrime(k: number): number[] {\r\n if (k >= 600) return randProbPrimeRounds(k, 2) //numbers from HAC table 4.3\r\n if (k >= 550) return randProbPrimeRounds(k, 4)\r\n if (k >= 500) return randProbPrimeRounds(k, 5)\r\n if (k >= 400) return randProbPrimeRounds(k, 6)\r\n if (k >= 350) return randProbPrimeRounds(k, 7)\r\n if (k >= 300) return randProbPrimeRounds(k, 9)\r\n if (k >= 250) return randProbPrimeRounds(k, 12) //numbers from HAC table 4.4\r\n if (k >= 200) return randProbPrimeRounds(k, 15)\r\n if (k >= 150) return randProbPrimeRounds(k, 18)\r\n if (k >= 100) return randProbPrimeRounds(k, 27)\r\n return randProbPrimeRounds(k, 40) //number from HAC remark 4.26 (only an estimate)\r\n}\r\n\r\n/**\r\n * return a k-bit probable random prime using n rounds of Miller Rabin\r\n * (after trial division with small primes)\r\n *\r\n * @export\r\n * @param {number} k\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function randProbPrimeRounds(k: number, n: number): number[] {\r\n var ans, i, divisible, B\r\n B = 30000 //B is largest prime to use in trial division\r\n ans = int2bigInt(0, k, 0)\r\n\r\n //optimization: try larger and smaller B to find the best limit.\r\n\r\n if (primes.length === 0) primes = findPrimes(30000) //check for divisibility by primes <=30000\r\n\r\n if (rpprb.length !== ans.length) rpprb = dup(ans)\r\n\r\n for (;;) {\r\n //keep trying random values for ans until one appears to be prime\r\n //optimization: pick a random number times L=2*3*5*...*p, plus a\r\n // random element of the list of all numbers in [0,L) not divisible by any prime up to p.\r\n // This can reduce the amount of random number generation.\r\n\r\n randBigInt_(ans, k, 0) //ans = a random odd number to check\r\n ans[0] |= 1\r\n divisible = 0\r\n\r\n //check ans for divisibility by small primes up to B\r\n for (i = 0; i < primes.length && primes[i] <= B; i++)\r\n if (modInt(ans, primes[i]) === 0 && !equalsInt(ans, primes[i])) {\r\n divisible = 1\r\n break\r\n }\r\n\r\n //optimization: change millerRabin so the base can be bigger than the number being checked, then eliminate the while here.\r\n\r\n //do n rounds of Miller Rabin, with random bases less than ans\r\n for (i = 0; i < n && !divisible; i++) {\r\n randBigInt_(rpprb, k, 0)\r\n while (\r\n !greater(ans, rpprb) //pick a random rpprb that's < ans\r\n )\r\n randBigInt_(rpprb, k, 0)\r\n if (!millerRabin(ans, rpprb)) divisible = 1\r\n }\r\n\r\n if (!divisible) return ans\r\n }\r\n /*::\r\n declare var never: empty\r\n return never\r\n */\r\n}\r\n\r\n/**\r\n * return a new bigInt equal to (x mod n) for bigInts x and n.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @returns {number[]}\r\n */\r\nexport function mod(x: number[], n: number[]): number[] {\r\n var ans = dup(x)\r\n mod_(ans, n)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x+n) where x is a bigInt and n is an integer.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function addInt(x: number[], n: number): number[] {\r\n var ans = expand(x, x.length + 1)\r\n addInt_(ans, n)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return x*y for bigInts x and y. This is faster when y<x.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function mult(x: number[], y: number[]): number[] {\r\n var ans = expand(x, x.length + y.length)\r\n mult_(ans, y)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x**y mod n) where x,y,n are bigInts and ** is exponentiation.\r\n *\r\n * 0**0=1.\r\n *\r\n * Faster for odd n.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @returns {number[]}\r\n */\r\nexport function powMod(x: number[], y: number[], n: number[]): number[] {\r\n var ans = expand(x, n.length)\r\n powMod_(\r\n //this should work without the trim, but doesn't\r\n ans,\r\n trim(y, 2),\r\n trim(n, 2),\r\n )\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * Simple pow with no optimizations (in 40x times slower than jsbn's pow)\r\n * @param x bigInt\r\n * @param e\r\n */\r\nexport function pow(x: number[], e: number) {\r\n let ans = dup(x);\r\n e -= 1;\r\n for(let i = 0; i < e; ++i) {\r\n ans = mult(ans, x);\r\n }\r\n return trim(ans, 1);\r\n}\r\n\r\n/**\r\n * return (x-y) for bigInts x and y\r\n *\r\n * Negative answers will be 2s complement\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function sub(x: number[], y: number[]): number[] {\r\n var ans = expand(x, x.length > y.length ? x.length + 1 : y.length + 1)\r\n sub_(ans, y)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x+y) for bigInts x and y\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function add(x: number[], y: number[]): number[] {\r\n var ans = expand(x, x.length > y.length ? x.length + 1 : y.length + 1)\r\n add_(ans, y)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x**(-1) mod n) for bigInts x and n.\r\n *\r\n * If no inverse exists, it returns null\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @returns {(number[] | null)}\r\n */\r\nexport function inverseMod(x: number[], n: number[]): number[] | null {\r\n var ans = expand(x, n.length)\r\n var s = inverseMod_(ans, n)\r\n return s ? trim(ans, 1) : null\r\n}\r\n\r\n/**\r\n * return (x*y mod n) for bigInts x,y,n.\r\n *\r\n * For greater speed, let y<x.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @returns {number[]}\r\n */\r\nexport function multMod(x: number[], y: number[], n: number[]): number[] {\r\n var ans = expand(x, n.length)\r\n multMod_(ans, y, n)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * generate a k-bit true random prime using Maurer's algorithm, and put it into ans.\r\n *\r\n * The bigInt ans must be large enough to hold it.\r\n *\r\n * @export\r\n * @param {number[]} ans\r\n * @param {number} k\r\n * @return {void}\r\n */\r\nexport function randTruePrime_(ans: number[], k: number): void {\r\n var c, m, pm, dd, j, r, B, divisible, z, zz, recSize\r\n var w\r\n if (primes.length == 0) primes = findPrimes(30000) //check for divisibility by primes <=30000\r\n\r\n if (pows.length == 0) {\r\n pows = new Array(512)\r\n for (j = 0; j < 512; j++) {\r\n pows[j] = Math.pow(2, j / 511 - 1)\r\n }\r\n }\r\n\r\n //c and m should be tuned for a particular machine and value of k, to maximize speed\r\n c = 0.1 //c=0.1 in HAC\r\n m = 20 //generate this k-bit number by first recursively generating a number that has between k/2 and k-m bits\r\n var recLimit = 20 //stop recursion when k <=recLimit. Must have recLimit >= 2\r\n\r\n if (s_i2.length != ans.length) {\r\n s_i2 = dup(ans)\r\n s_R = dup(ans)\r\n s_n1 = dup(ans)\r\n s_r2 = dup(ans)\r\n s_d = dup(ans)\r\n s_x1 = dup(ans) //TODO Seems like a bug in eslint, reports as unused\r\n s_x2 = dup(ans)\r\n s_b = dup(ans)\r\n s_n = dup(ans)\r\n s_i = dup(ans)\r\n s_rm = dup(ans)\r\n s_q = dup(ans)\r\n s_a = dup(ans)\r\n s_aa = dup(ans)\r\n }\r\n\r\n if (k <= recLimit) {\r\n //generate small random primes by trial division up to its square root\r\n pm = (1 << ((k + 2) >> 1)) - 1 //pm is binary number with all ones, just over sqrt(2^k)\r\n copyInt_(ans, 0)\r\n for (dd = 1; dd; ) {\r\n dd = 0\r\n ans[0] = 1 | (1 << (k - 1)) | Math.floor(Math.random() * (1 << k)) //random, k-bit, odd integer, with msb 1\r\n for (j = 1; j < primes.length && (primes[j] & pm) == primes[j]; j++) {\r\n //trial division by all primes 3...sqrt(2^k)\r\n if (0 == ans[0] % primes[j]) {\r\n dd = 1\r\n break\r\n }\r\n }\r\n }\r\n carry_(ans)\r\n return\r\n }\r\n\r\n B = c * k * k //try small primes up to B (or all the primes[] array if the largest is less than B).\r\n if (k > 2 * m)\r\n //generate this k-bit number by first recursively generating a number that has between k/2 and k-m bits\r\n for (r = 1; k - k * r <= m; ) r = pows[Math.floor(Math.random() * 512)] //r=Math.pow(2,Math.random()-1);\r\n else r = 0.5\r\n\r\n //simulation suggests the more complex algorithm using r=.333 is only slightly faster.\r\n\r\n recSize = Math.floor(r * k) + 1\r\n\r\n randTruePrime_(s_q, recSize)\r\n copyInt_(s_i2, 0)\r\n s_i2[Math.floor((k - 2) / bpe)] |= 1 << ((k - 2) % bpe) //s_i2=2^(k-2)\r\n divide_(s_i2, s_q, s_i, s_rm) //s_i=floor((2^(k-1))/(2q))\r\n\r\n z = bitSize(s_i)\r\n\r\n for (;;) {\r\n for (;;) {\r\n //generate z-bit numbers until one falls in the range [0,s_i-1]\r\n randBigInt_(s_R, z, 0)\r\n if (greater(s_i, s_R)) break\r\n } //now s_R is in the range [0,s_i-1]\r\n addInt_(s_R, 1) //now s_R is in the range [1,s_i]\r\n add_(s_R, s_i) //now s_R is in the range [s_i+1,2*s_i]\r\n\r\n copy_(s_n, s_q)\r\n mult_(s_n, s_R)\r\n multInt_(s_n, 2)\r\n addInt_(s_n, 1) //s_n=2*s_R*s_q+1\r\n\r\n copy_(s_r2, s_R)\r\n multInt_(s_r2, 2) //s_r2=2*s_R\r\n\r\n //check s_n for divisibility by small primes up to B\r\n for (divisible = 0, j = 0; j < primes.length && primes[j] < B; j++)\r\n if (modInt(s_n, primes[j]) == 0 && !equalsInt(s_n, primes[j])) {\r\n divisible = 1\r\n break\r\n }\r\n\r\n if (!divisible)\r\n if (!millerRabinInt(s_n, 2))\r\n //if it passes small primes check, then try a single Miller-Rabin base 2\r\n //this line represents 75% of the total runtime for randTruePrime_\r\n divisible = 1\r\n\r\n if (!divisible) {\r\n //if it passes that test, continue checking s_n\r\n addInt_(s_n, -3)\r\n for (j = s_n.length - 1; s_n[j] == 0 && j > 0; j--); //strip leading zeros\r\n for (zz = 0, w = s_n[j]; w; w >>= 1, zz++);\r\n zz += bpe * j //zz=number of bits in s_n, ignoring leading zeros\r\n for (;;) {\r\n //generate z-bit numbers until one falls in the range [0,s_n-1]\r\n randBigInt_(s_a, zz, 0)\r\n if (greater(s_n, s_a)) break\r\n } //now s_a is in the range [0,s_n-1]\r\n addInt_(s_n, 3) //now s_a is in the range [0,s_n-4]\r\n addInt_(s_a, 2) //now s_a is in the range [2,s_n-2]\r\n copy_(s_b, s_a)\r\n copy_(s_n1, s_n)\r\n addInt_(s_n1, -1)\r\n powMod_(s_b, s_n1, s_n) //s_b=s_a^(s_n-1) modulo s_n\r\n addInt_(s_b, -1)\r\n if (isZero(s_b)) {\r\n copy_(s_b, s_a)\r\n powMod_(s_b, s_r2, s_n)\r\n addInt_(s_b, -1)\r\n copy_(s_aa, s_n)\r\n copy_(s_d, s_b)\r\n GCD_(s_d, s_n) //if s_b and s_n are relatively prime, then s_n is a prime\r\n if (equalsInt(s_d, 1)) {\r\n copy_(ans, s_aa)\r\n return //if we've made it this far, then s_n is absolutely guaranteed to be prime\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Return an n-bit random BigInt (n>=1). If s=1, then the most significant of those n bits is set to 1.\r\n *\r\n * @export\r\n * @param {number} n\r\n * @param {number} s\r\n * @returns {number[]}\r\n */\r\nexport function randBigInt(n: number, s: number): number[] {\r\n var a, b\r\n a = Math.floor((n - 1) / bpe) + 2 //# array elements to hold the BigInt with a leading 0 element\r\n b = int2bigInt(0, 0, a)\r\n randBigInt_(b, n, s)\r\n return b\r\n}\r\n\r\n/**\r\n * Set b to an n-bit random BigInt. If s=1, then the most significant of those n bits is set to 1.\r\n *\r\n * Array b must be big enough to hold the result. Must have n>=1\r\n *\r\n * @export\r\n * @param {number[]} b\r\n * @param {number} n\r\n * @param {number} s\r\n * @return {void}\r\n */\r\nexport function randBigInt_(b: number[], n: number, s: number): void {\r\n var i, a\r\n for (i = 0; i < b.length; i++) b[i] = 0\r\n a = Math.floor((n - 1) / bpe) + 1 //# array elements to hold the BigInt\r\n for (i = 0; i < a; i++) {\r\n b[i] = Math.floor(Math.random() * (1 << (bpe - 1)))\r\n }\r\n b[a - 1] &= (2 << ((n - 1) % bpe)) - 1\r\n if (s == 1) b[a - 1] |= 1 << ((n - 1) % bpe)\r\n}\r\n\r\n/**\r\n * Return the greatest common divisor of bigInts x and y (each with same number of elements).\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function GCD(x: number[], y: number[]): number[] {\r\n var xc, yc\r\n xc = dup(x)\r\n yc = dup(y)\r\n GCD_(xc, yc)\r\n return xc\r\n}\r\n\r\n/**\r\n * set x to the greatest common divisor of bigInts x and y (each with same number of elements).\r\n *\r\n * y is destroyed.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n */\r\nexport function GCD_(x: number[], y: number[]): void {\r\n var i: number, xp: number, yp: number, A: number, B, C: number, D: number, q, sing\r\n var qp\r\n if (T.length !== x.length) T = dup(x)\r\n\r\n sing = 1\r\n while (sing) {\r\n //while y has nonzero elements other than y[0]\r\n sing = 0\r\n for (\r\n i = 1;\r\n i < y.length;\r\n i++ //check if y has nonzero elements other than 0\r\n )\r\n if (y[i]) {\r\n sing = 1\r\n break\r\n }\r\n if (!sing) break //quit when y all zero elements except possibly y[0]\r\n\r\n for (i = x.length; !x[i] && i >= 0; i--); //find most significant element of x\r\n xp = x[i]\r\n yp = y[i]\r\n A = 1\r\n B = 0\r\n C = 0\r\n D = 1\r\n while (yp + C && yp + D) {\r\n q = Math.floor((xp + A) / (yp + C))\r\n qp = Math.floor((xp + B) / (yp + D))\r\n if (q != qp) break\r\n t = A - q * C\r\n A = C\r\n C = t // do (A,B,xp, C,D,yp) = (C,D,yp, A,B,xp) - q*(0,0,0, C,D,yp)\r\n t = B - q * D\r\n B = D\r\n D = t\r\n t = xp - q * yp\r\n xp = yp\r\n yp = t\r\n }\r\n if (B) {\r\n copy_(T, x)\r\n linComb_(x, y, A, B) //x=A*x+B*y\r\n linComb_(y, T, D, C) //y=D*y+C*T\r\n } else {\r\n mod_(x, y)\r\n copy_(T, x)\r\n copy_(x, y)\r\n copy_(y, T)\r\n }\r\n }\r\n if (y[0] === 0) return\r\n t = modInt(x, y[0])\r\n copyInt_(x, y[0])\r\n y[0] = t\r\n while (y[0]) {\r\n x[0] %= y[0]\r\n t = x[0]\r\n x[0] = y[0]\r\n y[0] = t\r\n }\r\n}\r\n\r\n/**\r\n * do x=x**(-1) mod n, for bigInts x and n.\r\n *\r\n * If no inverse exists, it sets x to zero and returns 0, else it returns 1.\r\n * The x array must be at least as large as the n array.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @returns {(0 | 1)}\r\n */\r\nexport function inverseMod_(x: number[], n: number[]): Bool {\r\n var k = 1 + 2 * Math.max(x.length, n.length)\r\n\r\n if (!(x[0] & 1) && !(n[0] & 1)) {\r\n //if both inputs are even, then inverse doesn't exist\r\n copyInt_(x, 0)\r\n return 0\r\n }\r\n\r\n if (eg_u.length != k) {\r\n eg_u = new Array(k)\r\n eg_v = new Array(k)\r\n eg_A = new Array(k)\r\n eg_B = new Array(k)\r\n eg_C = new Array(k)\r\n eg_D = new Array(k)\r\n }\r\n\r\n copy_(eg_u, x)\r\n copy_(eg_v, n)\r\n copyInt_(eg_A, 1)\r\n copyInt_(eg_B, 0)\r\n copyInt_(eg_C, 0)\r\n copyInt_(eg_D, 1)\r\n for (;;) {\r\n while (!(eg_u[0] & 1)) {\r\n //while eg_u is even\r\n halve_(eg_u)\r\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\r\n //if eg_A==eg_B==0 mod 2\r\n halve_(eg_A)\r\n halve_(eg_B)\r\n } else {\r\n add_(eg_A, n)\r\n halve_(eg_A)\r\n sub_(eg_B, x)\r\n halve_(eg_B)\r\n }\r\n }\r\n\r\n while (!(eg_v[0] & 1)) {\r\n //while eg_v is even\r\n halve_(eg_v)\r\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\r\n //if eg_C==eg_D==0 mod 2\r\n halve_(eg_C)\r\n halve_(eg_D)\r\n } else {\r\n add_(eg_C, n)\r\n halve_(eg_C)\r\n sub_(eg_D, x)\r\n halve_(eg_D)\r\n }\r\n }\r\n\r\n if (!greater(eg_v, eg_u)) {\r\n //eg_v <= eg_u\r\n sub_(eg_u, eg_v)\r\n sub_(eg_A, eg_C)\r\n sub_(eg_B, eg_D)\r\n } else {\r\n //eg_v > eg_u\r\n sub_(eg_v, eg_u)\r\n sub_(eg_C, eg_A)\r\n sub_(eg_D, eg_B)\r\n }\r\n\r\n if (equalsInt(eg_u, 0)) {\r\n while (\r\n negative(eg_C) //make sure answer is nonnegative\r\n )\r\n add_(eg_C, n)\r\n copy_(x, eg_C)\r\n\r\n if (!equalsInt(eg_v, 1)) {\r\n //if GCD_(x,n)!=1, then there is no inverse\r\n copyInt_(x, 0)\r\n return 0\r\n }\r\n return 1\r\n }\r\n }\r\n /*::\r\n declare var never: empty\r\n return never\r\n */\r\n}\r\n\r\n/**\r\n * return x**(-1) mod n, for integers x and n.\r\n *\r\n * Return 0 if there is no inverse\r\n *\r\n * @param {number} x\r\n * @param {number} n\r\n * @returns {number}\r\n */\r\nexport function inverseModInt(x: number, n: number): number {\r\n var a = 1,\r\n b = 0,\r\n t\r\n for (;;) {\r\n if (x === 1) return a\r\n if (x === 0) return 0\r\n b -= a * Math.floor(n / x)\r\n //$off\r\n n %= x\r\n\r\n if (n === 1) return b //to avoid negatives, change this b to n-b, and each -= to +=\r\n if (n === 0) return 0\r\n a -= b * Math.floor(x / n)\r\n //$off\r\n x %= n\r\n }\r\n /*::\r\n declare var never: empty\r\n return never\r\n */\r\n}\r\n\r\n//this deprecated function is for backward compatibility only.\r\nfunction inverseModInt_(x: number, n: number) {\r\n return inverseModInt(x, n)\r\n}\r\n\r\n/**\r\n * Given positive bigInts x and y, change the bigints v, a, and b to positive bigInts such that:\r\n *\r\n * v = GCD_(x,y) = a*x-b*y\r\n *\r\n * The bigInts v, a, b, must have exactly as many elements as the larger of x and y.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} v\r\n * @param {number[]} a\r\n * @param {number[]} b\r\n * @return {void}\r\n */\r\nexport function eGCD_(\r\n x: number[],\r\n y: number[],\r\n v: number[],\r\n a: number[],\r\n b: number[],\r\n): void {\r\n var g = 0\r\n var k = Math.max(x.length, y.length)\r\n if (eg_u.length != k) {\r\n eg_u = new Array(k)\r\n eg_A = new Array(k)\r\n eg_B = new Array(k)\r\n eg_C = new Array(k)\r\n eg_D = new Array(k)\r\n }\r\n while (!(x[0] & 1) && !(y[0] & 1)) {\r\n //while x and y both even\r\n halve_(x)\r\n halve_(y)\r\n g++\r\n }\r\n copy_(eg_u, x)\r\n copy_(v, y)\r\n copyInt_(eg_A, 1)\r\n copyInt_(eg_B, 0)\r\n copyInt_(eg_C, 0)\r\n copyInt_(eg_D, 1)\r\n for (;;) {\r\n while (!(eg_u[0] & 1)) {\r\n //while u is even\r\n halve_(eg_u)\r\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\r\n //if A==B==0 mod 2\r\n halve_(eg_A)\r\n halve_(eg_B)\r\n } else {\r\n add_(eg_A, y)\r\n halve_(eg_A)\r\n sub_(eg_B, x)\r\n halve_(eg_B)\r\n }\r\n }\r\n\r\n while (!(v[0] & 1)) {\r\n //while v is even\r\n halve_(v)\r\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\r\n //if C==D==0 mod 2\r\n halve_(eg_C)\r\n halve_(eg_D)\r\n } else {\r\n add_(eg_C, y)\r\n halve_(eg_C)\r\n sub_(eg_D, x)\r\n halve_(eg_D)\r\n }\r\n }\r\n\r\n if (!greater(v, eg_u)) {\r\n //v<=u\r\n sub_(eg_u, v)\r\n sub_(eg_A, eg_C)\r\n sub_(eg_B, eg_D)\r\n } else {\r\n //v>u\r\n sub_(v, eg_u)\r\n sub_(eg_C, eg_A)\r\n sub_(eg_D, eg_B)\r\n }\r\n if (equalsInt(eg_u, 0)) {\r\n while (negative(eg_C)) {\r\n //make sure a (C) is nonnegative\r\n add_(eg_C, y)\r\n sub_(eg_D, x)\r\n }\r\n multInt_(eg_D, -1) ///make sure b (D) is nonnegative\r\n copy_(a, eg_C)\r\n copy_(b, eg_D)\r\n leftShift_(v, g)\r\n return\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * is bigInt x negative?\r\n *\r\n * @param {number[]} x\r\n * @returns {(1 | 0)}\r\n */\r\nexport function negative(x: number[]) {\r\n //TODO Flow Bool type inference\r\n return (x[x.length - 1] >> (bpe - 1)) & 1\r\n}\r\n\r\n/**\r\n * is (x << (shift*bpe)) > y?\r\n *\r\n * x and y are nonnegative bigInts\r\n * shift is a nonnegative integer\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} shift\r\n * @returns {(1 | 0)}\r\n */\r\nexport function greaterShift(x: number[], y: number[], shift: number): Bool {\r\n var i,\r\n kx = x.length,\r\n ky = y.length\r\n k = kx + shift < ky ? kx + shift : ky\r\n for (i = ky - 1 - shift; i < kx && i >= 0; i++) if (x[i] > 0) return 1 //if there are nonzeros in x to the left of the first column of y, then x is bigger\r\n for (i = kx - 1 + shift; i < ky; i++) if (y[i] > 0) return 0 //if there are nonzeros in y to the left of the first column of x, then x is not bigger\r\n for (i = k - 1; i >= shift; i--)\r\n if (x[i - shift] > y[i]) return 1\r\n else if (x[i - shift] < y[i]) return 0\r\n return 0\r\n}\r\n\r\n/**\r\n * is x > y?\r\n *\r\n * x and y both nonnegative\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {(1 | 0)}\r\n */\r\nexport function greater(x: number[], y: number[]): Bool {\r\n var i\r\n var k = x.length < y.length ? x.length : y.length\r\n\r\n for (i = x.length; i < y.length; i++) if (y[i]) return 0 //y has more digits\r\n\r\n for (i = y.length; i < x.length; i++) if (x[i]) return 1 //x has more digits\r\n\r\n for (i = k - 1; i >= 0; i--)\r\n if (x[i] > y[i]) return 1\r\n else if (x[i] < y[i]) return 0\r\n return 0\r\n}\r\n\r\n/**\r\n * divide x by y giving quotient q and remainder r.\r\n *\r\n * q = floor(x/y)\r\n * r = x mod y\r\n *\r\n * All 4 are bigints.\r\n *\r\n * * x must have at least one leading zero element.\r\n * * y must be nonzero.\r\n * * q and r must be arrays that are exactly the same length as x. (Or q can have more).\r\n * * Must have x.length >= y.length >= 2.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} q\r\n * @param {number[]} r\r\n * @return {void}\r\n */\r\nexport function divide_(\r\n x: number[],\r\n y: number[],\r\n q: number[],\r\n r: number[],\r\n): void {\r\n var kx, ky\r\n var i, j, y1, y2, c, a, b\r\n copy_(r, x)\r\n for (ky = y.length; y[ky - 1] === 0; ky--); //ky is number of elements in y, not including leading zeros\r\n\r\n //normalize: ensure the most significant element of y has its highest bit set\r\n b = y[ky - 1]\r\n for (a = 0; b; a++) b >>= 1\r\n a = bpe - a //a is how many bits to shift so that the high order bit of y is leftmost in its array element\r\n leftShift_(y, a) //multiply both by 1<<a now, then divide both by that at the end\r\n leftShift_(r, a)\r\n\r\n //Rob Visser discovered a bug: the following line was originally just before the normalization.\r\n for (kx = r.length; r[kx - 1] === 0 && kx > ky; kx--); //kx is number of elements in normalized x, not including leading zeros\r\n\r\n copyInt_(q, 0) // q=0\r\n while (!greaterShift(y, r, kx - ky)) {\r\n // while (leftShift_(y,kx-ky) <= r) {\r\n subShift_(r, y, kx - ky) // r=r-leftShift_(y,kx-ky)\r\n q[kx - ky]++ // q[kx-ky]++;\r\n } // }\r\n\r\n for (i = kx - 1; i >= ky; i--) {\r\n if (r[i] == y[ky - 1]) q[i - ky] = mask\r\n else q[i - ky] = Math.floor((r[i] * radix + r[i - 1]) / y[ky - 1])\r\n\r\n //The following for(;;) loop is equivalent to the commented while loop,\r\n //except that the uncommented version avoids overflow.\r\n //The commented loop comes from HAC, which assumes r[-1]==y[-1]==0\r\n // while (q[i-ky]*(y[ky-1]*radix+y[ky-2]) > r[i]*radix*radix+r[i-1]*radix+r[i-2])\r\n // q[i-ky]--;\r\n for (;;) {\r\n y2 = (ky > 1 ? y[ky - 2] : 0) * q[i - ky]\r\n c = y2 >> bpe\r\n y2 = y2 & mask\r\n y1 = c + q[i - ky] * y[ky - 1]\r\n c = y1 >> bpe\r\n y1 = y1 & mask\r\n\r\n if (\r\n c == r[i]\r\n ? y1 == r[i - 1] ? y2 > (i > 1 ? r[i - 2] : 0) : y1 > r[i - 1]\r\n : c > r[i]\r\n )\r\n q[i - ky]--\r\n else break\r\n }\r\n\r\n linCombShift_(r, y, -q[i - ky], i - ky) //r=r-q[i-ky]*leftShift_(y,i-ky)\r\n if (negative(r)) {\r\n addShift_(r, y, i - ky) //r=r+leftShift_(y,i-ky)\r\n q[i - ky]--\r\n }\r\n }\r\n\r\n rightShift_(y, a) //undo the normalization step\r\n rightShift_(r, a) //undo the normalization step\r\n}\r\n\r\n/**\r\n * do carries and borrows so each element of the bigInt x fits in bpe bits.\r\n *\r\n * @param {number[]} x\r\n */\r\nexport function carry_(x: number[]): void {\r\n var i, k, c, b\r\n k = x.length\r\n c = 0\r\n for (i = 0; i < k; i++) {\r\n c += x[i]\r\n b = 0\r\n if (c < 0) {\r\n b = -(c >> bpe)\r\n c += b * radix\r\n }\r\n x[i] = c & mask\r\n c = (c >> bpe) - b\r\n }\r\n}\r\n\r\n/**\r\n * return x mod n for bigInt x and integer n.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number}\r\n */\r\nexport function modInt(x: number[], n: number): number {\r\n var i,\r\n c = 0\r\n for (i = x.length - 1; i >= 0; i--) c = (c * radix + x[i]) % n\r\n return c\r\n}\r\n\r\n/**\r\n * convert the integer t into a bigInt with at least the given number of bits.\r\n * the returned array stores the bigInt in bpe-bit chunks, little endian (buff[0] is least significant word)\r\n * Pad the array with leading zeros so that it has at least minSize elements.\r\n *\r\n * There will always be at least one leading 0 element.\r\n *\r\n * @export\r\n * @param {number} t\r\n * @param {number} bits\r\n * @param {number} minSize\r\n * @returns {number[]}\r\n */\r\nexport function int2bigInt(t: number, bits: number, minSize: number): number[] {\r\n var i, k\r\n k = Math.ceil(bits / bpe) + 1\r\n k = minSize > k ? minSize : k\r\n var buff = new Array(k)\r\n copyInt_(buff, t)\r\n return buff\r\n}\r\n\r\n/**\r\n * return the bigInt given a string representation in a given base.\r\n * Pad the array with leading zeros so that it has at least minSize elements.\r\n * If base=-1, then it reads in a space-separated list of array elements in decimal.\r\n *\r\n * The array will always have at least one leading zero, unless base=-1.\r\n *\r\n * @export\r\n * @param {string} s\r\n * @param {number} base\r\n * @param {number} [minSize]\r\n * @returns {number[]}\r\n */\r\nexport function str2bigInt(\r\n s: string,\r\n base: number,\r\n minSize?: number,\r\n): number[] {\r\n var d, i, x, y, kk\r\n var k = s.length\r\n if (base === -1) {\r\n //comma-separated list of array elements in decimal\r\n x = new Array(0)\r\n for (;;) {\r\n y = new Array(x.length + 1)\r\n for (i = 0; i < x.length; i++) y[i + 1] = x[i]\r\n y[0] = parseInt(s, 10) //TODO PERF Should we replace that with ~~ (not not)? https://jsperf.com/number-vs-parseint-vs-plus/7\r\n x = y\r\n d = s.indexOf(',', 0)\r\n if (d < 1) break\r\n //$off\r\n s = s.substring(d + 1)\r\n if (s.length == 0) break\r\n }\r\n //$off\r\n if (x.length < minSize) {\r\n //$off\r\n y = new Array(minSize)\r\n copy_(y, x)\r\n return y\r\n }\r\n return x\r\n }\r\n\r\n x = int2bigInt(0, base * k, 0)\r\n for (i = 0; i < k; i++) {\r\n d = digitsStr.indexOf(s.substring(i, i + 1), 0)\r\n if (base <= 36 && d >= 36)\r\n //convert lowercase to uppercase if base<=36\r\n d -= 26\r\n if (d >= base || d < 0) {\r\n //stop at first illegal character\r\n break\r\n }\r\n multInt_(x, base)\r\n addInt_(x, d)\r\n }\r\n\r\n for (k = x.length; k > 0 && !x[k - 1]; k--); //strip off leading zeros\r\n //$off\r\n k = minSize > k + 1 ? minSize : k + 1\r\n //$off\r\n y = new Array(k)\r\n //$off\r\n kk = k < x.length ? k : x.length\r\n //$off\r\n for (i = 0; i < kk; i++) y[i] = x[i]\r\n //$off\r\n for (; i < k; i++) y[i] = 0\r\n return y\r\n}\r\n\r\n//return the bigInt given a string representation in a given base.\r\n//Pad the array with leading zeros so that it has at least minSize elements.\r\n//If base=-1, then it reads in a space-separated list of array elements in decimal.\r\n//The array will always have at least one leading zero, unless base=-1.\r\n// function str2bigInt(s,b,minSize) {\r\n// var d, i, j, base, str, x, y, kk;\r\n// if (typeof b === 'string') {\r\n// base = b.length;\r\n// str = b;\r\n// } else {\r\n// base = b;\r\n// str = digitsStr;\r\n// }\r\n// var k=s.length;\r\n// if (base==-1) { //comma-separated list of array elements in decimal\r\n// x=new Array(0);\r\n// for (;;) {\r\n// y=new Array(x.length+1);\r\n// for (i=0;i<x.length;i++)\r\n// y[i+1]=x[i];\r\n// y[0]=parseInt(s,10);\r\n// x=y;\r\n// d=s.indexOf(',',0);\r\n// if (d<1)\r\n// break;\r\n// s=s.substring(d+1);\r\n// if (s.length==0)\r\n// break;\r\n// }\r\n// if (x.length<minSize) {\r\n// y=new Array(minSize);\r\n// copy_(y,x);\r\n// return y;\r\n// }\r\n// return x;\r\n// }\r\n\r\n// x=int2bigInt(0,base*k,0);\r\n// for (i=0;i<k;i++) {\r\n// d=str.indexOf(s.substring(i,i+1),0);\r\n// if (base<=36 && d>=36) { //convert lowercase to uppercase if base<=36\r\n// d-=26;\r\n// }\r\n// if (d>=base || d<0) { //ignore illegal characters\r\n// continue;\r\n// }\r\n// multInt_(x,base);\r\n// addInt_(x,d);\r\n// }\r\n\r\n// for (k=x.length;k>0 && !x[k-1];k--); //strip off leading zeros\r\n// k=minSize>k+1 ? minSize : k+1;\r\n// y=new Array(k);\r\n// kk=k<x.length ? k : x.length;\r\n// for (i=0;i<kk;i++)\r\n// y[i]=x[i];\r\n// for (;i<k;i++)\r\n// y[i]=0;\r\n// return y;\r\n// }\r\n\r\n/**\r\n * is bigint x equal to integer y?\r\n *\r\n * y must have less than bpe bits\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} y\r\n * @returns {(1 | 0)}\r\n */\r\nexport function equalsInt(x: number[], y: number): Bool {\r\n var i\r\n if (x[0] != y) return 0\r\n for (i = 1; i < x.length; i++) if (x[i]) return 0\r\n return 1\r\n}\r\n\r\n/**\r\n * are bigints x and y equal?\r\n *\r\n * this works even if x and y are different lengths and have arbitrarily many leading zeros\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {(1 | 0)}\r\n */\r\nexport function equals(x: number[], y: number[]): Bool {\r\n var i\r\n var k = x.length < y.length ? x.length : y.length\r\n for (i = 0; i < k; i++) if (x[i] !== y[i]) return 0\r\n if (x.length > y.length) {\r\n for (; i < x.length; i++) if (x[i]) return 0\r\n } else {\r\n for (; i < y.length; i++) if (y[i]) return 0\r\n }\r\n return 1\r\n}\r\n\r\n/**\r\n * is the bigInt x equal to zero?\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @returns {(1 | 0)}\r\n */\r\nexport function isZero(x: number[]): Bool {\r\n var i\r\n for (i = 0; i < x.length; i++) if (x[i]) return 0\r\n return 1\r\n}\r\n\r\n/**\r\n * Convert a bigInt into a string in a given base, from base 2 up to base 95.\r\n *\r\n * Base -1 prints the contents of the array representing the number.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} base\r\n * @returns {string}\r\n */\r\nexport function bigInt2str(x: number[], base: number): string {\r\n var i,\r\n t,\r\n s = ''\r\n\r\n if (s6.length !== x.length) s6 = dup(x)\r\n else copy_(s6, x)\r\n\r\n if (base === -1) {\r\n //return the list of array contents\r\n for (i = x.length - 1; i > 0; i--) s += x[i] + ','\r\n s += x[0]\r\n } else {\r\n //return it in the given base\r\n while (!isZero(s6)) {\r\n t = divInt_(s6, base) //t=s6 % base; s6=floor(s6/base);\r\n s = digitsStr.substring(t, t + 1) + s\r\n }\r\n }\r\n if (s.length === 0) s = '0'\r\n return s\r\n}\r\n\r\n/**\r\n * Convert a bigInt into bytes\r\n * @param x bigInt\r\n * @param littleEndian byte order by default\r\n */\r\nexport function bigInt2bytes(x: number[], littleEndian = true) {\r\n if(s6.length !== x.length) s6 = dup(x);\r\n else copy_(s6, x);\r\n\r\n const out: number[] = [];\r\n\r\n //console.log('bigInt2bytes');\r\n while(!isZero(s6)) {\r\n t = divInt_(s6, 256); //t=s6 % base; s6=floor(s6/base);\r\n out.push(t);\r\n //console.log('bigInt2bytes', t);\r\n }\r\n\r\n if(littleEndian) {\r\n out.reverse();\r\n }\r\n\r\n //console.log('bigInt2bytes', out);\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Compare two bigInts and return -1 if x is less, 0 if equals, 1 if greater\r\n * @param x bigInt\r\n * @param y bigInt\r\n */\r\nexport function cmp(x: number[], y: number[]) {\r\n return greater(x, y) ? 1 : (equals(x, y) ? 0 : -1);\r\n}\r\n\r\n/* Object.assign(self, {\r\n cmp,\r\n str2bigInt,\r\n int2bigInt,\r\n bigInt2str,\r\n one,\r\n divide_,\r\n divInt_,\r\n dup,\r\n negative\r\n}); */\r\n\r\n/**\r\n * Returns a duplicate of bigInt x\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @returns {number[]}\r\n */\r\nexport function dup(x: number[]): number[] {\r\n var i\r\n buff = Array(x.length)\r\n copy_(buff, x)\r\n return buff\r\n}\r\n\r\n/**\r\n * do x=y on bigInts x and y.\r\n *\r\n * x must be an array at least as big as y (not counting the leading zeros in y).\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {void}\r\n */\r\nexport function copy_(x: number[], y: number[]): void {\r\n var i\r\n var k = x.length < y.length ? x.length : y.length\r\n for (i = 0; i < k; i++) x[i] = y[i]\r\n for (i = k; i < x.length; i++) x[i] = 0\r\n}\r\n\r\n/**\r\n * do x=y on bigInt x and integer y.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function copyInt_(x: number[], n: number): void {\r\n var i, c\r\n var len = x.length //TODO .length in for loop have perfomance costs. Bench this\r\n for (c = n, i = 0; i < len; i++) {\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x+n where x is a bigInt and n is an integer.\r\n *\r\n * x must be large enough to hold the result.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function addInt_(x: number[], n: number): void {\r\n var i, k, c, b\r\n x[0] += n\r\n k = x.length\r\n c = 0\r\n for (i = 0; i < k; i++) {\r\n c += x[i]\r\n b = 0\r\n if (c < 0) {\r\n b = -(c >> bpe)\r\n c += b * radix\r\n }\r\n x[i] = c & mask\r\n c = (c >> bpe) - b\r\n if (!c) return //stop carrying as soon as the carry is zero\r\n }\r\n}\r\n\r\n/**\r\n * right shift bigInt x by n bits.\r\n *\r\n * 0 <= n < bpe.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n */\r\nexport function rightShift_(x: number[], n: number): void {\r\n var i\r\n var k = Math.floor(n / bpe)\r\n if (k) {\r\n for (\r\n i = 0;\r\n i < x.length - k;\r\n i++ //right shift x by k elements\r\n )\r\n x[i] = x[i + k]\r\n for (; i < x.length; i++) x[i] = 0\r\n //$off\r\n n %= bpe\r\n }\r\n for (i = 0; i < x.length - 1; i++) {\r\n x[i] = mask & ((x[i + 1] << (bpe - n)) | (x[i] >> n))\r\n }\r\n x[i] >>= n\r\n}\r\n\r\n/**\r\n * do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement\r\n *\r\n * @param {number[]} x\r\n * @returns {void}\r\n */\r\nexport function halve_(x: number[]): void {\r\n var i\r\n for (i = 0; i < x.length - 1; i++) {\r\n x[i] = mask & ((x[i + 1] << (bpe - 1)) | (x[i] >> 1))\r\n }\r\n x[i] = (x[i] >> 1) | (x[i] & (radix >> 1)) //most significant bit stays the same\r\n}\r\n\r\n/**\r\n * left shift bigInt x by n bits\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function leftShift_(x: number[], n: number): void {\r\n var i\r\n var k = Math.floor(n / bpe)\r\n if (k) {\r\n for (\r\n i = x.length;\r\n i >= k;\r\n i-- //left shift x by k elements\r\n )\r\n x[i] = x[i - k]\r\n for (; i >= 0; i--) x[i] = 0\r\n //$off\r\n n %= bpe\r\n }\r\n if (!n) return\r\n for (i = x.length - 1; i > 0; i--) {\r\n x[i] = mask & ((x[i] << n) | (x[i - 1] >> (bpe - n)))\r\n }\r\n x[i] = mask & (x[i] << n)\r\n}\r\n\r\n/**\r\n * do x=x*n where x is a bigInt and n is an integer.\r\n *\r\n * x must be large enough to hold the result.\r\n *\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function multInt_(x: number[], n: number): void {\r\n var i, k, c, b\r\n if (!n) return\r\n k = x.length\r\n c = 0\r\n for (i = 0; i < k; i++) {\r\n c += x[i] * n\r\n b = 0\r\n if (c < 0) {\r\n b = -(c >> bpe)\r\n c += b * radix\r\n }\r\n x[i] = c & mask\r\n c = (c >> bpe) - b\r\n }\r\n}\r\n\r\n/**\r\n * do x=floor(x/n) for bigInt x and integer n, and return the remainder\r\n *\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number} remainder\r\n */\r\nexport function divInt_(x: number[], n: number): number {\r\n var i,\r\n r = 0,\r\n s\r\n for (i = x.length - 1; i >= 0; i--) {\r\n s = r * radix + x[i]\r\n x[i] = Math.floor(s / n)\r\n r = s % n\r\n }\r\n return r\r\n}\r\n\r\n/**\r\n * do the linear combination x=a*x+b*y for bigInts x and y, and integers a and b.\r\n *\r\n * x must be large enough to hold the answer.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} a\r\n * @param {number} b\r\n * @returns {void}\r\n */\r\nexport function linComb_(x: number[], y: number[], a: number, b: number): void {\r\n var i, c, k, kk\r\n k = x.length < y.length ? x.length : y.length\r\n kk = x.length\r\n for (c = 0, i = 0; i < k; i++) {\r\n c += a * x[i] + b * y[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; i < kk; i++) {\r\n c += a * x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do the linear combination x=a*x+b*(y<<(ys*bpe)) for bigInts x and y, and integers a, b and ys.\r\n *\r\n * x must be large enough to hold the answer.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} b\r\n * @param {number} ys\r\n * @returns {void}\r\n */\r\nexport function linCombShift_(\r\n x: number[],\r\n y: number[],\r\n b: number,\r\n ys: number,\r\n): void {\r\n var i, c, k, kk\r\n k = x.length < ys + y.length ? x.length : ys + y.length\r\n kk = x.length\r\n for (c = 0, i = ys; i < k; i++) {\r\n c += x[i] + b * y[i - ys]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < kk; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x+(y<<(ys*bpe)) for bigInts x and y, and integer ys.\r\n *\r\n * x must be large enough to hold the answer.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} ys\r\n * @return {void}\r\n */\r\nexport function addShift_(x: number[], y: number[], ys: number): void {\r\n var i, c, k, kk\r\n k = x.length < ys + y.length ? x.length : ys + y.length\r\n kk = x.length\r\n for (c = 0, i = ys; i < k; i++) {\r\n c += x[i] + y[i - ys]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < kk; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x-(y<<(ys*bpe)) for bigInts x and y, and integer ys\r\n *\r\n * x must be large enough to hold the answer\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} ys\r\n * @return {void}\r\n */\r\nexport function subShift_(x: number[], y: number[], ys: number): void {\r\n var i, c, k, kk\r\n k = x.length < ys + y.length ? x.length : ys + y.length\r\n kk = x.length\r\n for (c = 0, i = ys; i < k; i++) {\r\n c += x[i] - y[i - ys]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < kk; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x-y for bigInts x and y\r\n *\r\n * x must be large enough to hold the answer\r\n *\r\n * negative answers will be 2s complement\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @return {void}\r\n */\r\nexport function sub_(x: number[], y: number[]): void {\r\n var i, c, k, kk\r\n k = x.length < y.length ? x.length : y.length\r\n for (c = 0, i = 0; i < k; i++) {\r\n c += x[i] - y[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < x.length; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x+y for bigInts x and y\r\n *\r\n * x must be large enough to hold the answer\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @return {void}\r\n */\r\nexport function add_(x: number[], y: number[]): void {\r\n var i, c, k, kk\r\n k = x.length < y.length ? x.length : y.length\r\n for (c = 0, i = 0; i < k; i++) {\r\n c += x[i] + y[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < x.length; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x*y for bigInts x and y.\r\n *\r\n * This is faster when y<x.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @return {void}\r\n */\r\nexport function mult_(x: number[], y: number[]): void {\r\n var i\r\n if (ss.length != 2 * x.length) ss = new Array(2 * x.length)\r\n copyInt_(ss, 0)\r\n for (i = 0; i < y.length; i++) if (y[i]) linCombShift_(ss, x, y[i], i) //ss=1*ss+y[i]*(x<<(i*bpe))\r\n copy_(x, ss)\r\n}\r\n\r\n/**\r\n * do x=x mod n for bigInts x and n\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function mod_(x: number[], n: number[]): void {\r\n if (s4.length !== x.length) s4 = dup(x)\r\n else copy_(s4, x)\r\n if (s5.length !== x.length) s5 = dup(x)\r\n divide_(s4, n, s5, x) //x = remainder of s4 / n\r\n}\r\n\r\n/**\r\n * do x=x*y mod n for bigInts x,y,n.\r\n *\r\n * for greater speed, let y<x.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function multMod_(x: number[], y: number[], n: number[]): void {\r\n var i\r\n if (s0.length != 2 * x.length) s0 = new Array(2 * x.length)\r\n copyInt_(s0, 0)\r\n for (i = 0; i < y.length; i++) if (y[i]) linCombShift_(s0, x, y[i], i) //s0=1*s0+y[i]*(x<<(i*bpe))\r\n mod_(s0, n)\r\n copy_(x, s0)\r\n}\r\n\r\n/**\r\n * do x=x*x mod n for bigInts x,n.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function squareMod_(x: number[], n: number[]): void {\r\n var i, j, d, c, kx, kn, k\r\n for (kx = x.length; kx > 0 && !x[kx - 1]; kx--); //ignore leading zeros in x\r\n k = kx > n.length ? 2 * kx : 2 * n.length //k=# elements in the product, which is twice the elements in the larger of x and n\r\n if (s0.length != k) s0 = new Array(k)\r\n copyInt_(s0, 0)\r\n for (i = 0; i < kx; i++) {\r\n c = s0[2 * i] + x[i] * x[i]\r\n s0[2 * i] = c & mask\r\n c >>= bpe\r\n for (j = i + 1; j < kx; j++) {\r\n c = s0[i + j] + 2 * x[i] * x[j] + c\r\n s0[i + j] = c & mask\r\n c >>= bpe\r\n }\r\n s0[i + kx] = c\r\n }\r\n mod_(s0, n)\r\n copy_(x, s0)\r\n}\r\n\r\n/**\r\n * return x with exactly k leading zero elements\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} k\r\n * @returns {number[]}\r\n */\r\nexport function trim(x: number[], k: number): number[] {\r\n var i, y\r\n for (i = x.length; i > 0 && !x[i - 1]; i--);\r\n y = new Array(i + k)\r\n copy_(y, x)\r\n return y\r\n}\r\n\r\n/**\r\n * do `x=x**y mod n`, where x,y,n are bigInts and `**` is exponentiation. `0**0=1`.\r\n *\r\n * this is faster when n is odd.\r\n *\r\n * x usually needs to have as many elements as n.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function powMod_(x: number[], y: number[], n: number[]): void {\r\n var k1, k2, kn, np\r\n if (s7.length != n.length) s7 = dup(n)\r\n\r\n //for even modulus, use a simple square-and-multiply algorithm,\r\n //rather than using the more complex Montgomery algorithm.\r\n if ((n[0] & 1) == 0) {\r\n copy_(s7, x)\r\n copyInt_(x, 1)\r\n while (!equalsInt(y, 0)) {\r\n if (y[0] & 1) multMod_(x, s7, n)\r\n divInt_(y, 2)\r\n squareMod_(s7, n)\r\n }\r\n return\r\n }\r\n\r\n //calculate np from n for the Montgomery multiplications\r\n copyInt_(s7, 0)\r\n for (kn = n.length; kn > 0 && !n[kn - 1]; kn--);\r\n np = radix - inverseModInt(modInt(n, radix), radix)\r\n s7[kn] = 1\r\n multMod_(x, s7, n) // x = x * 2**(kn*bp) mod n\r\n\r\n if (s3.length != x.length) s3 = dup(x)\r\n else copy_(s3, x)\r\n //$off\r\n // @ts-ignore\r\n for (k1 = y.length - 1; (k1 > 0) & !y[k1]; k1--); //k1=first nonzero element of y\r\n if (y[k1] == 0) {\r\n //anything to the 0th power is 1\r\n copyInt_(x, 1)\r\n return\r\n }\r\n for (k2 = 1 << (bpe - 1); k2 && !(y[k1] & k2); k2 >>= 1); //k2=position of first 1 bit in y[k1]\r\n for (;;) {\r\n if (!(k2 >>= 1)) {\r\n //look at next bit of y\r\n k1--\r\n if (k1 < 0) {\r\n mont_(x, one, n, np)\r\n return\r\n }\r\n k2 = 1 << (bpe - 1)\r\n }\r\n mont_(x, x, n, np)\r\n\r\n if (k2 & y[k1])\r\n //if next bit is a 1\r\n mont_(x, s3, n, np)\r\n }\r\n}\r\n\r\n/**\r\n * do x=x*y*Ri mod n for bigInts x,y,n,\r\n * where Ri = 2**(-kn*bpe) mod n, and kn is the\r\n * number of elements in the n array, not\r\n * counting leading zeros.\r\n *\r\n * x array must have at least as many elemnts as the n array\r\n * It's OK if x and y are the same variable.\r\n *\r\n * must have:\r\n * * x,y < n\r\n * * n is odd\r\n * * np = -(n^(-1)) mod radix\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @param {number} np\r\n * @return {void}\r\n */\r\nexport function mont_(x: number[], y: number[], n: number[], np: number): void {\r\n var i, j, c, ui, t, ks\r\n var kn = n.length\r\n var ky = y.length\r\n\r\n if (sa.length != kn) sa = new Array(kn)\r\n\r\n copyInt_(sa, 0)\r\n\r\n for (; kn > 0 && n[kn - 1] == 0; kn--); //ignore leading zeros of n\r\n for (; ky > 0 && y[ky - 1] == 0; ky--); //ignore leading zeros of y\r\n ks = sa.length - 1 //sa will never have more than this many nonzero elements.\r\n\r\n //the following loop consumes 95% of the runtime for randTruePrime_() and powMod_() for large numbers\r\n for (i = 0; i < kn; i++) {\r\n t = sa[0] + x[i] * y[0]\r\n ui = ((t & mask) * np) & mask //the inner \"& mask\" was needed on Safari (but not MSIE) at one time\r\n c = (t + ui * n[0]) >> bpe\r\n t = x[i]\r\n\r\n //do sa=(sa+x[i]*y+ui*n)/b where b=2**bpe. Loop is unrolled 5-fold for speed\r\n j = 1\r\n for (; j < ky - 4; ) {\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < ky; ) {\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < kn - 4; ) {\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < kn; ) {\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < ks; ) {\r\n c += sa[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n sa[j - 1] = c & mask\r\n }\r\n\r\n if (!greater(n, sa)) sub_(sa, n)\r\n copy_(x, sa)\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport CryptoWorkerMethods from './crypto_methods';\r\n\r\ntype Task = {\r\n taskId: number,\r\n task: string,\r\n args: any[]\r\n};\r\n\r\nclass CryptoWorker extends CryptoWorkerMethods {\r\n private webWorker: Worker | boolean = false;\r\n private taskId = 0;\r\n private awaiting: {\r\n [id: number]: {\r\n resolve: any,\r\n reject: any,\r\n taskName: string\r\n }\r\n } = {} as any;\r\n private pending: Array<Task> = [];\r\n private debug = false;\r\n\r\n private utils: {[name: string]: (...args: any[]) => any} = {};\r\n\r\n constructor() {\r\n super();\r\n console.log('CW constructor');\r\n\r\n//////////////////////////\r\n Promise.all([\r\n import('./crypto_utils').then(utils => {\r\n Object.assign(this.utils, {\r\n 'sha1-hash': utils.sha1HashSync,\r\n 'sha256-hash': utils.sha256HashSync,\r\n 'pbkdf2': utils.hash_pbkdf2,\r\n 'aes-encrypt': utils.aesEncryptSync,\r\n 'aes-decrypt': utils.aesDecryptSync,\r\n 'rsa-encrypt': utils.rsaEncrypt,\r\n 'factorize': utils.pqPrimeFactorization,\r\n 'mod-pow': utils.bytesModPow,\r\n 'gzipUncompress': utils.gzipUncompress,\r\n });\r\n }),\r\n\r\n import('./srp').then(srp => {\r\n this.utils.computeSRP = srp.computeSRP;\r\n })/* ,\r\n\r\n import('../bin_utils').then(utils => {\r\n this.utils.unzip = utils.gzipUncompress;\r\n }) */\r\n ]);\r\n\r\n return;\r\n/////////////\r\n///////////////////////\r\n//////////////////////////////////////////////////////////\r\n/////////////////////////////////////////////\r\n///////////////////////////////////////\r\n///////////////////////////////////////////\r\n///////////////////////////////\r\n///////////////////////////////////////\r\n/////////////////////////////////////////////\r\n//////////////////////////////////\r\n//////////////////\r\n////////////////////////////////////////////////////////////\r\n///////////\r\n//////////\r\n\r\n/////////////////////////////////////////////\r\n///////////////////////////////////////////\r\n/////////////////////////////////\r\n//////////\r\n/////////\r\n/////\r\n//////////////\r\n }\r\n\r\n/////////////////////////\r\n/////////////////////////////////////////////////////\r\n/////////////////////////////////////////\r\n////////////////////////////////\r\n//////////////////////////////////////////////////////////////////////\r\n///////////////////////////////\r\n///////////////////////////////////\r\n/////\r\n///\r\n////////////\r\n\r\n public performTaskWorker<T>(task: string, ...args: any[]) {\r\n this.debug && console.log('CW start', task, args);\r\n\r\n//////////////////////////\r\n return Promise.resolve<T>(this.utils[task](...args));\r\n/////////////\r\n////////////////////////////////////////////////\r\n/////////////////////////////////////////////////////////////////////\r\n//\r\n////////////////////\r\n/////////////\r\n////////////////////////////\r\n////////////\r\n////////\r\n\r\n///////////////////////////////////////////////////////\r\n////////////////////////////////\r\n////////////////////////////\r\n//\r\n////////////////////\r\n///////\r\n//////////////\r\n }\r\n\r\n/////////////////////////\r\n////////////////////////////\r\n////////////////////////\r\n///////////////////////////////////////\r\n////////////////////////////////////////////////////////\r\n/////////\r\n\r\n//////////////////////////////\r\n/////\r\n///\r\n////////////\r\n}\r\n\r\nconst cryptoWorker = new CryptoWorker();\r\nMOUNT_CLASS_TO.CryptoWorker = cryptoWorker;\r\nexport default cryptoWorker;\r\n","import { convertToArrayBuffer } from \"../../helpers/bytes\";\r\nimport type { InputCheckPasswordSRP } from \"../../layer\";\r\nimport type { aesEncryptSync } from \"./crypto_utils\";\r\n\r\nexport default abstract class CryptoWorkerMethods {\r\n abstract performTaskWorker<T>(task: string, ...args: any[]): Promise<T>;\r\n\r\n public sha1Hash(bytes: number[] | ArrayBuffer | Uint8Array): Promise<Uint8Array> {\r\n return this.performTaskWorker<Uint8Array>('sha1-hash', bytes);\r\n }\r\n\r\n public sha256Hash(bytes: any) {\r\n return this.performTaskWorker<number[]>('sha256-hash', bytes);\r\n }\r\n\r\n public pbkdf2(buffer: Uint8Array, salt: Uint8Array, iterations: number) {\r\n return this.performTaskWorker<ArrayBuffer>('pbkdf2', buffer, salt, iterations);\r\n }\r\n\r\n public aesEncrypt(bytes: any, keyBytes: any, ivBytes: any) {\r\n return this.performTaskWorker<ReturnType<typeof aesEncryptSync>>('aes-encrypt', convertToArrayBuffer(bytes), \r\n convertToArrayBuffer(keyBytes), convertToArrayBuffer(ivBytes));\r\n }\r\n\r\n public aesDecrypt(encryptedBytes: any, keyBytes: any, ivBytes: any): Promise<ArrayBuffer> {\r\n return this.performTaskWorker<ArrayBuffer>('aes-decrypt', \r\n encryptedBytes, keyBytes, ivBytes)\r\n .then(bytes => convertToArrayBuffer(bytes));\r\n }\r\n\r\n public rsaEncrypt(publicKey: {modulus: string, exponent: string}, bytes: any): Promise<number[]> {\r\n return this.performTaskWorker<number[]>('rsa-encrypt', publicKey, bytes);\r\n }\r\n\r\n public factorize(bytes: Uint8Array) {\r\n return this.performTaskWorker<[number[], number[], number]>('factorize', [...bytes]);\r\n }\r\n\r\n public modPow(x: any, y: any, m: any) {\r\n return this.performTaskWorker<number[]>('mod-pow', x, y, m);\r\n }\r\n\r\n public gzipUncompress<T>(bytes: ArrayBuffer, toString?: boolean) {\r\n return this.performTaskWorker<T>('gzipUncompress', bytes, toString);\r\n }\r\n\r\n public computeSRP(password: string, state: any, isNew = false): Promise<InputCheckPasswordSRP> {\r\n return this.performTaskWorker('computeSRP', password, state, isNew);\r\n }\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport DEBUG from \"../config/debug\";\r\n\r\nexport enum LogLevels {\r\n log = 1,\r\n warn = 2,\r\n error = 4,\r\n debug = 8\r\n};\r\n\r\nconst _logTimer = Date.now();\r\nfunction dT() {\r\n return '[' + ((Date.now() - _logTimer) / 1000).toFixed(3) + ']';\r\n}\r\n\r\nexport function logger(prefix: string, level = LogLevels.log | LogLevels.warn | LogLevels.error) {\r\n if(!DEBUG/* || true */) {\r\n level = LogLevels.error;\r\n }\r\n\r\n //level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\r\n\r\n function Log(...args: any[]) {\r\n return level & LogLevels.log && console.log(dT(), prefix, ...args);\r\n }\r\n \r\n Log.warn = function(...args: any[]) {\r\n return level & LogLevels.warn && console.warn(dT(), prefix, ...args);\r\n };\r\n \r\n Log.info = function(...args: any[]) {\r\n return level & LogLevels.log && console.info(dT(), prefix, ...args);\r\n };\r\n \r\n Log.error = function(...args: any[]) {\r\n return level & LogLevels.error && console.error(dT(), prefix, ...args);\r\n };\r\n \r\n Log.trace = function(...args: any[]) {\r\n return level & LogLevels.log && console.trace(dT(), prefix, ...args);\r\n };\r\n\r\n /* Log.debug = function(...args: any[]) {\r\n return level & LogLevels.debug && console.log(dT(), prefix, ...args);\r\n }; */\r\n\r\n Log.debug = function(...args: any[]) {\r\n return level & LogLevels.debug && console.debug(dT(), prefix, ...args);\r\n };\r\n\r\n Log.setPrefix = function(_prefix: string) {\r\n prefix = '[' + _prefix + ']:';\r\n };\r\n\r\n Log.setPrefix(prefix);\r\n \r\n return Log;\r\n};","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n//////////////////\r\n/////////////////////////////\r\n//////////\r\n\r\nexport default Modes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport function nextRandomInt(maxValue: number) {\r\n return Math.floor(Math.random() * maxValue);\r\n}\r\n\r\nexport function randomLong() {\r\n return '' + nextRandomInt(0xFFFFFFFF) + nextRandomInt(0xFFFFFF);\r\n //return '' + parseInt(nextRandomInt(0xFFFFFFFF).toString(16) + nextRandomInt(0xFFFFFFFF).toString(16), 16);\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { bufferConcats } from '../../helpers/bytes';\r\nimport { add_, bigInt2str, cmp, leftShift_, str2bigInt } from '../../vendor/leemon';\r\nimport { nextRandomInt } from '../../helpers/random';\r\n\r\n///////////////////////\r\n/////////////\r\n/////////////////////////////////////////////////\r\n\r\n///////////////////////////////////////////////////////////////////////////\r\n/////////////////////////////////////////////////////////////////////////////////\r\n/////////////////////////////////////////////////////////////////////////////////////////////\r\n///////////////////////////////////////////////\r\n//////////////////////////////////////////////////////////////////////////\r\n//////////////////////////////////////////////////////////////\r\n////////////////\r\n \r\n//////////\r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\n/* export function bigint(num: number) {\r\n return new BigInteger(num.toString(16), 16);\r\n} */\r\n\r\n/* export function bigStringInt(strNum: string) {\r\n return new BigInteger(strNum, 10);\r\n} */\r\n\r\n/* export function base64ToBlob(base64str: string, mimeType: string) {\r\n var sliceSize = 1024;\r\n var byteCharacters = atob(base64str);\r\n var bytesLength = byteCharacters.length;\r\n var slicesCount = Math.ceil(bytesLength / sliceSize);\r\n var byteArrays = new Array(slicesCount);\r\n\r\n for(var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\r\n var begin = sliceIndex * sliceSize;\r\n var end = Math.min(begin + sliceSize, bytesLength);\r\n\r\n var bytes = new Array(end - begin);\r\n for(var offset = begin, i = 0; offset < end; ++i, ++offset) {\r\n bytes[i] = byteCharacters[offset].charCodeAt(0);\r\n }\r\n byteArrays[sliceIndex] = new Uint8Array(bytes);\r\n }\r\n\r\n return blobConstruct(byteArrays, mimeType);\r\n}\r\n\r\nexport function dataUrlToBlob(url: string) {\r\n // var name = 'b64blob ' + url.length\r\n // console.time(name)\r\n var urlParts = url.split(',');\r\n var base64str = urlParts[1];\r\n var mimeType = urlParts[0].split(':')[1].split(';')[0];\r\n var blob = base64ToBlob(base64str, mimeType);\r\n // console.timeEnd(name)\r\n return blob;\r\n} */\r\n\r\n/* export function bytesFromBigInt(bigInt: BigInteger, len?: number) {\r\n var bytes = bigInt.toByteArray();\r\n\r\n if(len && bytes.length < len) {\r\n var padding = [];\r\n for(var i = 0, needPadding = len - bytes.length; i < needPadding; i++) {\r\n padding[i] = 0;\r\n }\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = bufferConcat(padding, bytes);\r\n } else {\r\n bytes = padding.concat(bytes);\r\n }\r\n } else {\r\n while (!bytes[0] && (!len || bytes.length > len)) {\r\n bytes = bytes.slice(1);\r\n }\r\n }\r\n\r\n return bytes;\r\n} */\r\n\r\nexport function longFromInts(high: number, low: number): string {\r\n //let perf = performance.now();\r\n //let str = bigint(high).shiftLeft(32).add(bigint(low)).toString(10);\r\n //console.log('longFromInts jsbn', performance.now() - perf);\r\n \r\n //perf = performance.now();\r\n const bigInt = str2bigInt(high.toString(16), 16, 32);//int2bigInt(high, 64, 64);\r\n //console.log('longFromInts construct high', bigint(high).toString(10), bigInt2str(bigInt, 10));\r\n leftShift_(bigInt, 32);\r\n //console.log('longFromInts shiftLeft', bigint(high).shiftLeft(32).toString(10), bigInt2str(bigInt, 10));\r\n add_(bigInt, str2bigInt(low.toString(16), 16, 32));\r\n const _str = bigInt2str(bigInt, 10);\r\n\r\n //console.log('longFromInts leemon', performance.now() - perf);\r\n\r\n //console.log('longFromInts', high, low, str, _str, str === _str);\r\n\r\n return _str;\r\n}\r\n\r\nexport function sortLongsArray(arr: string[]) {\r\n return arr.map(long => {\r\n return str2bigInt(long, 10);\r\n }).sort((a, b) => {\r\n return cmp(a, b);\r\n }).map(bigInt => {\r\n return bigInt2str(bigInt, 10);\r\n });\r\n}\r\n\r\nexport function addPadding(bytes: any, blockSize: number = 16, zeroes?: boolean, full = false, prepend = false) {\r\n let len = bytes.byteLength || bytes.length;\r\n let needPadding = blockSize - (len % blockSize);\r\n if(needPadding > 0 && (needPadding < blockSize || full)) {\r\n ////console.log('addPadding()', len, blockSize, needPadding);\r\n let padding = new Array(needPadding);\r\n if(zeroes) {\r\n for(let i = 0; i < needPadding; i++) {\r\n padding[i] = 0;\r\n }\r\n } else {\r\n for(let i = 0; i < padding.length; ++i) {\r\n padding[i] = nextRandomInt(255);\r\n }\r\n }\r\n\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer;\r\n } else if(bytes instanceof Uint8Array) {\r\n bytes = prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding);\r\n } else {\r\n bytes = prepend ? padding.concat(bytes) : bytes.concat(padding);\r\n }\r\n }\r\n\r\n return bytes;\r\n}\r\n","var S = new Uint8Array(256);\nvar Si = new Uint8Array(256);\nvar T1 = new Uint32Array(256);\nvar T2 = new Uint32Array(256);\nvar T3 = new Uint32Array(256);\nvar T4 = new Uint32Array(256);\nvar T5 = new Uint32Array(256);\nvar T6 = new Uint32Array(256);\nvar T7 = new Uint32Array(256);\nvar T8 = new Uint32Array(256);\nfunction computeTables() {\n var d = new Uint8Array(256);\n var t = new Uint8Array(256);\n var x2;\n var x4;\n var x8;\n var s;\n var tEnc;\n var tDec;\n var x = 0;\n var xInv = 0;\n // Compute double and third tables\n for (var i = 0; i < 256; i++) {\n d[i] = i << 1 ^ (i >> 7) * 283;\n t[d[i] ^ i] = i;\n }\n for (; !S[x]; x ^= x2 || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n S[x] = s;\n Si[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n T1[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T2[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T3[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T4[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T5[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T6[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T7[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T8[s] = tDec = tDec << 24 ^ tDec >>> 8;\n xInv = t[xInv] || 1;\n }\n}\n\n/**\n * Gets a uint32 from string in big-endian order order\n */\nfunction s2i(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n\n/* eslint-disable import/prefer-default-export */\n/**\n * Helper function for transforming string key to Uint32Array\n */\nfunction getWords(key) {\n if (key instanceof Uint32Array) {\n return key;\n }\n if (typeof key === 'string') {\n if (key.length % 4 !== 0)\n for (var i = key.length % 4; i <= 4; i++)\n key += '\\0x00';\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4)\n buf[i / 4] = s2i(key, i);\n return buf;\n }\n if (key instanceof Uint8Array) {\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4) {\n buf[i / 4] = (key[i] << 24\n ^ key[i + 1] << 16\n ^ key[i + 2] << 8\n ^ key[i + 3]);\n }\n return buf;\n }\n throw new Error('Unable to create 32-bit words');\n}\nfunction xor(left, right, to) {\n if (to === void 0) { to = left; }\n for (var i = 0; i < left.length; i++)\n to[i] = left[i] ^ right[i];\n}\n\ncomputeTables();\n/**\n * Low-level AES Cipher\n */\nvar AES = /** @class */ (function () {\n function AES(_key) {\n var key = getWords(_key);\n if (key.length !== 4 && key.length !== 6 && key.length !== 8) {\n throw new Error('Invalid key size');\n }\n this.encKey = new Uint32Array(4 * key.length + 28);\n this.decKey = new Uint32Array(4 * key.length + 28);\n this.encKey.set(key);\n var rcon = 1;\n var i = key.length;\n var tmp;\n // schedule encryption keys\n for (; i < 4 * key.length + 28; i++) {\n tmp = this.encKey[i - 1];\n // apply sbox\n if (i % key.length === 0 || (key.length === 8 && i % key.length === 4)) {\n tmp = S[tmp >>> 24] << 24 ^ S[(tmp >> 16) & 255] << 16 ^ S[(tmp >> 8) & 255] << 8 ^ S[tmp & 255];\n // shift rows and add rcon\n if (i % key.length === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ (rcon << 24);\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n this.encKey[i] = this.encKey[i - key.length] ^ tmp;\n }\n // schedule decryption keys\n for (var j = 0; i; j++, i--) {\n tmp = this.encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n this.decKey[j] = tmp;\n }\n else {\n this.decKey[j] = (T5[S[tmp >>> 24]]\n ^ T6[S[(tmp >> 16) & 255]]\n ^ T7[S[(tmp >> 8) & 255]]\n ^ T8[S[tmp & 255]]);\n }\n }\n }\n AES.prototype.encrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.encKey[0];\n var b = message[1] ^ this.encKey[1];\n var c = message[2] ^ this.encKey[2];\n var d = message[3] ^ this.encKey[3];\n var rounds = this.encKey.length / 4 - 2;\n var k = 4;\n var a2;\n var b2;\n var c2;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T1[a >>> 24] ^ T2[(b >> 16) & 255] ^ T3[(c >> 8) & 255] ^ T4[d & 255] ^ this.encKey[k];\n b2 = T1[b >>> 24] ^ T2[(c >> 16) & 255] ^ T3[(d >> 8) & 255] ^ T4[a & 255] ^ this.encKey[k + 1];\n c2 = T1[c >>> 24] ^ T2[(d >> 16) & 255] ^ T3[(a >> 8) & 255] ^ T4[b & 255] ^ this.encKey[k + 2];\n d = T1[d >>> 24] ^ T2[(a >> 16) & 255] ^ T3[(b >> 8) & 255] ^ T4[c & 255] ^ this.encKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n // console.log(a, b, c, d);\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[i] = (S[a >>> 24] << 24\n ^ S[(b >> 16) & 255] << 16\n ^ S[(c >> 8) & 255] << 8\n ^ S[d & 255]\n ^ this.encKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n AES.prototype.decrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.decKey[0];\n var b = message[3] ^ this.decKey[1];\n var c = message[2] ^ this.decKey[2];\n var d = message[1] ^ this.decKey[3];\n var rounds = this.decKey.length / 4 - 2;\n var a2;\n var b2;\n var c2;\n var k = 4;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T5[a >>> 24] ^ T6[(b >> 16) & 255] ^ T7[(c >> 8) & 255] ^ T8[d & 255] ^ this.decKey[k];\n b2 = T5[b >>> 24] ^ T6[(c >> 16) & 255] ^ T7[(d >> 8) & 255] ^ T8[a & 255] ^ this.decKey[k + 1];\n c2 = T5[c >>> 24] ^ T6[(d >> 16) & 255] ^ T7[(a >> 8) & 255] ^ T8[b & 255] ^ this.decKey[k + 2];\n d = T5[d >>> 24] ^ T6[(a >> 16) & 255] ^ T7[(b >> 8) & 255] ^ T8[c & 255] ^ this.decKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[3 & -i] = (Si[a >>> 24] << 24\n ^ Si[(b >> 16) & 255] << 16\n ^ Si[(c >> 8) & 255] << 8\n ^ Si[d & 255]\n ^ this.decKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n return AES;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE = /** @class */ (function () {\n function AES_IGE(key, iv, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.key = getWords(key);\n this.iv = getWords(iv);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var prevX = this.iv.subarray(this.blockSize, this.iv.length);\n var prevY = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = text.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.encrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n cipherText[j] = y[k];\n }\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n var cipherText = getWords(message);\n var text = buf || new Uint32Array(cipherText.length);\n var prevY = this.iv.subarray(this.blockSize, this.iv.length);\n var prevX = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = cipherText.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.decrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n text[j] = y[k];\n }\n return text;\n };\n return AES_IGE;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE$1 = /** @class */ (function () {\n function AES_IGE(key, counter, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.offset = 0;\n this.key = getWords(key);\n this.counter = getWords(counter);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n if (this.counter.length !== 4) {\n throw new Error('AES-CTR mode counter must be 16 bytes length');\n }\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var offset = this.offset;\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = this.cipher.encrypt(this.counter);\n for (var j = i, k = offset; j < text.length && k < this.blockSize; j++, k++)\n cipherText[j] = x[k] ^ text[j];\n if (text.length - i >= this.blockSize)\n this.incrementCounter();\n if (offset) {\n i -= offset;\n offset = 0;\n }\n }\n this.offset = (this.offset + (text.length % 4)) % 4;\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n return this.encrypt(message, buf);\n };\n AES_IGE.prototype.incrementCounter = function () {\n // increment counter\n for (var carry = this.counter.length - 1; carry >= 0; carry--) {\n if (++this.counter[carry] < 0xFFFFFFFF)\n break; // If overflowing, it'll be 0 and we'll have to continue propagating the carry\n }\n };\n return AES_IGE;\n}());\n\nexport default AES;\nexport { AES_IGE$1 as CTR, AES_IGE as IGE };\n","/**\n * Gets a uint32 from string in big-endian order order\n */\nfunction s2i(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n/**\n * Returns a uint32 as a string in big-endian order order\n */\nfunction i2s(data) {\n return (String.fromCharCode((data >> 24) & 0xFF)\n + String.fromCharCode((data >> 16) & 0xFF)\n + String.fromCharCode((data >> 8) & 0xFF)\n + String.fromCharCode(data & 0xFF));\n}\n/**\n * Returns a uint32 as a hex-string in big-endian order order\n */\nfunction i2h(data) {\n return (\"00000000\" + data.toString(16)).slice(-8);\n}\n\n/**\n * Creates new SHA-256 state\n */\nfunction init(h) {\n if (!h)\n h = new Uint32Array(8);\n // SHA-256 state contains eight 32-bit integers\n h[0] = 0x6A09E667;\n h[1] = 0xBB67AE85;\n h[2] = 0x3C6EF372;\n h[3] = 0xA54FF53A;\n h[4] = 0x510E527F;\n h[5] = 0x9B05688C;\n h[6] = 0x1F83D9AB;\n h[7] = 0x5BE0CD19;\n return h;\n}\n/** Array to use to store round words. */\nvar words = new Uint32Array(64);\n/** K table for SHA-256 */\nvar _k = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n/**\n * Perform round function\n */\nfunction round(state, data) {\n // initialize hash value for this chunk\n var a = state[0];\n var b = state[1];\n var c = state[2];\n var d = state[3];\n var e = state[4];\n var f = state[5];\n var g = state[6];\n var h = state[7];\n words.set(data);\n for (var i = 16; i < 64; i += 1) {\n // XOR word 2 words ago rot right 17, rot right 19, shft right 10\n var t1 = words[i - 2];\n t1 = ((t1 >>> 17) | (t1 << 15))\n ^ ((t1 >>> 19) | (t1 << 13))\n ^ (t1 >>> 10);\n // XOR word 15 words ago rot right 7, rot right 18, shft right 3\n var t2 = words[i - 15];\n t2 = ((t2 >>> 7) | (t2 << 25))\n ^ ((t2 >>> 18) | (t2 << 14))\n ^ (t2 >>> 3);\n // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^32\n words[i] = (t1 + words[i - 7] + t2 + words[i - 16]);\n }\n // Round Function\n for (var i = 0; i < 64; i += 1) {\n // Sum1(e)\n var s1 = ((e >>> 6) | (e << 26))\n ^ ((e >>> 11) | (e << 21))\n ^ ((e >>> 25) | (e << 7));\n // Ch(e, f, g) (optimized the same way as SHA-1)\n var ch = g ^ (e & (f ^ g));\n // Sum0(a)\n var s0 = ((a >>> 2) | (a << 30))\n ^ ((a >>> 13) | (a << 19))\n ^ ((a >>> 22) | (a << 10));\n // Maj(a, b, c) (optimized the same way as SHA-1)\n var maj = (a & b) | (c & (a ^ b));\n // main algorithm\n var t1 = h + s1 + ch + _k[i] + words[i];\n var t2 = s0 + maj;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n // update hash state\n state[0] += a;\n state[1] += b;\n state[2] += c;\n state[3] += d;\n state[4] += e;\n state[5] += f;\n state[6] += g;\n state[7] += h;\n}\n/**\n * Pre-processing round buffer for string input\n */\nfunction preprocess(str, buf, state, offset) {\n if (offset === void 0) { offset = 0; }\n while (str.length >= 64) {\n for (var i = offset; i < 16; i++)\n buf[i] = s2i(str, i * 4);\n str = str.slice(64 - offset * 4);\n offset = 0;\n round(state, buf);\n }\n return str;\n}\n/**\n * Process input buffer\n */\nfunction process(input, buf, state, offset) {\n if (offset === void 0) { offset = 0; }\n while (input.length >= buf.length - offset) {\n buf.set(input.subarray(0, buf.length - offset), offset);\n input = input.subarray(buf.length - offset);\n offset = 0;\n round(state, buf);\n }\n if (input.length > 0) {\n buf.set(input, offset);\n offset += input.length;\n }\n return offset;\n}\n/**\n * Repeatable part\n */\nfunction finish(len, buf, state, offset) {\n if (offset === void 0) { offset = 0; }\n var len64hi = (len / 0x100000000) >>> 0;\n var len64lo = len >>> 0;\n for (var i = offset + 1; i < buf.length; i++)\n buf[i] = 0;\n if (offset >= 14) {\n round(state, buf);\n for (var i = 0; i < buf.length; i++)\n buf[i] = 0;\n }\n buf[14] = (len64hi << 3) | (len64hi >>> 28);\n buf[15] = len64lo << 3;\n round(state, buf);\n}\n/**\n * Adds padding to message\n */\nfunction finalizestr(chunk, len, buf, state, offset) {\n if (offset === void 0) { offset = 0; }\n for (; chunk.length >= 4; offset++) {\n buf[offset] = s2i(chunk, 0);\n chunk = chunk.slice(4);\n }\n if (offset >= 16) {\n round(state, buf);\n offset = 0;\n }\n buf[offset] = s2i(chunk + \"\\u0080\\0\\0\\0\", 0);\n finish(len, buf, state, offset);\n}\n/**\n * Adds padding to buffer\n */\nfunction finalize(len, buf, state, offset) {\n if (offset === void 0) { offset = 0; }\n buf[offset] = 0x80000000;\n finish(len, buf, state, offset);\n}\nfunction out(state, format) {\n if (format === void 0) { format = 'array'; }\n switch (format) {\n case 'hex': return (i2h(state[0])\n + i2h(state[1])\n + i2h(state[2])\n + i2h(state[3])\n + i2h(state[4])\n + i2h(state[5])\n + i2h(state[6])\n + i2h(state[7]));\n case 'binary': return (i2s(state[0])\n + i2s(state[1])\n + i2s(state[2])\n + i2s(state[3])\n + i2s(state[4])\n + i2s(state[5])\n + i2s(state[6])\n + i2s(state[7]));\n default: return state;\n }\n}\n/**\n * Stream handler for hashing\n */\nvar Stream = /** @class */ (function () {\n function Stream(buf) {\n this.buffer = new Uint32Array(16);\n this.state = init(buf);\n this.length = 0;\n this.offset = 0;\n this.tail = '';\n }\n Stream.prototype.update = function (chunk) {\n if (typeof chunk === 'string') {\n this.length += chunk.length;\n this.tail = preprocess(this.tail + chunk, this.buffer, this.state, this.offset);\n this.offset = 0;\n }\n else {\n if (this.tail.length > 0)\n throw new Error('Unable to update hash-stream with array');\n this.length += chunk.length * 4;\n this.offset = process(chunk, this.buffer, this.state, this.offset);\n }\n return this;\n };\n Stream.prototype.digest = function (format) {\n if (format === void 0) { format = 'array'; }\n if (this.tail.length > 0) {\n finalizestr(this.tail, this.length, this.buffer, this.state, this.offset);\n }\n else {\n finalize(this.length, this.buffer, this.state, this.offset);\n }\n return out(this.state, format);\n };\n Stream.prototype.clear = function () {\n this.state = init();\n this.length = 0;\n this.offset = 0;\n this.tail = '';\n };\n return Stream;\n}());\nfunction sha256(message, format) {\n if (format === void 0) { format = 'array'; }\n var buf = new Uint32Array(16);\n var state = init();\n if (typeof message === 'string')\n finalizestr(preprocess(message, buf, state), message.length, buf, state);\n else\n finalize(message.length * 4, buf, state, process(message, buf, state));\n return out(state, format);\n}\n/**\n * Hash with stream constructor\n */\nsha256.stream = function (buf) { return new Stream(buf); };\nsha256.blockLength = 64;\nsha256.digestLength = 32;\n\nexport default sha256;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport sha1 from '@cryptography/sha1';\r\nimport sha256 from '@cryptography/sha256';\r\nimport {IGE} from '@cryptography/aes';\r\n\r\n// @ts-ignore\r\nimport pako from 'pako/dist/pako_inflate.min.js';\r\n\r\nimport {str2bigInt, bpe, equalsInt, greater, \r\n copy_, eGCD_, add_, rightShift_, sub_, copyInt_, isZero,\r\n divide_, one, bigInt2str, powMod, bigInt2bytes} from '../../vendor/leemon';//from 'leemon';\r\n\r\nimport { addPadding } from '../mtproto/bin_utils';\r\nimport { bytesToWordss, bytesFromWordss, bytesToHex, bytesFromHex } from '../../helpers/bytes';\r\nimport { nextRandomInt } from '../../helpers/random';\r\n\r\nexport function longToBytes(sLong: string): Array<number> {\r\n /* let perf = performance.now();\r\n for(let i = 0; i < 1000000; ++i) {\r\n bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\r\n }\r\n console.log('longToBytes JSBN', sLong, performance.now() - perf);\r\n \r\n //const bytes = bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\r\n \r\n perf = performance.now();\r\n for(let i = 0; i < 1000000; ++i) {\r\n bigInt2bytes(str2bigInt(sLong, 10));\r\n }\r\n console.log('longToBytes LEEMON', sLong, performance.now() - perf); */\r\n\r\n const bytes = addPadding(bigInt2bytes(str2bigInt(sLong, 10), false), 8, true, false, false);\r\n //console.log('longToBytes', bytes, b);\r\n \r\n return bytes;\r\n}\r\n\r\nexport function sha1HashSync(bytes: number[] | ArrayBuffer | Uint8Array) {\r\n //console.trace(dT(), 'SHA-1 hash start', bytes);\r\n\r\n const hashBytes: number[] = [];\r\n\r\n let hash = sha1(String.fromCharCode.apply(null, \r\n bytes instanceof Uint8Array ? [...bytes] : [...new Uint8Array(bytes)]));\r\n for(let i = 0; i < hash.length; ++i) {\r\n hashBytes.push(hash.charCodeAt(i));\r\n }\r\n\r\n //console.log(dT(), 'SHA-1 hash finish', hashBytes, bytesToHex(hashBytes));\r\n\r\n return new Uint8Array(hashBytes);\r\n}\r\n\r\nexport function sha256HashSync(bytes: Uint8Array | ArrayBuffer | string) {\r\n //console.log(dT(), 'SHA-256 hash start');\r\n\r\n let words = typeof(bytes) === 'string' ? bytes : bytesToWordss(bytes);\r\n let hash = sha256(words);\r\n\r\n //console.log(dT(), 'SHA-256 hash finish', hash);\r\n\r\n return bytesFromWordss(hash);\r\n}\r\n\r\nexport function aesEncryptSync(bytes: ArrayBuffer, keyBytes: ArrayBuffer, ivBytes: ArrayBuffer) {\r\n //console.log(dT(), 'AES encrypt start', bytes, keyBytes, ivBytes);\r\n // console.log('aes before padding bytes:', bytesToHex(bytes));\r\n bytes = addPadding(bytes);\r\n // console.log('aes after padding bytes:', bytesToHex(bytes));\r\n\r\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\r\n const encryptedBytes = cipher.encrypt(bytesToWordss(bytes));\r\n //console.log(dT(), 'AES encrypt finish');\r\n\r\n return bytesFromWordss(encryptedBytes);\r\n}\r\n\r\nexport function aesDecryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\r\n //console.log(dT(), 'AES decrypt start', bytes, keyBytes, ivBytes);\r\n\r\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\r\n const decryptedBytes = cipher.decrypt(bytesToWordss(bytes));\r\n\r\n //console.log(dT(), 'AES decrypt finish');\r\n\r\n return bytesFromWordss(decryptedBytes);\r\n}\r\n\r\nexport function rsaEncrypt(publicKey: {modulus: string, exponent: string}, bytes: any): number[] {\r\n //console.log(dT(), 'RSA encrypt start', publicKey, bytes);\r\n\r\n bytes = addPadding(bytes, 255);\r\n\r\n var N = str2bigInt(publicKey.modulus, 16);\r\n var E = str2bigInt(publicKey.exponent, 16);\r\n var X = str2bigInt(bytesToHex(bytes), 16);\r\n\r\n var encryptedBigInt = powMod(X, E, N);\r\n var encryptedBytes = bytesFromHex(bigInt2str(encryptedBigInt, 16));\r\n\r\n //console.log(dT(), 'RSA encrypt finish');\r\n\r\n return encryptedBytes;\r\n}\r\n\r\nexport async function hash_pbkdf2(/* hasher: 'string', */buffer: any, salt: any, iterations: number) {\r\n let subtle = typeof(window) !== 'undefined' && 'crypto' in window ? window.crypto.subtle : self.crypto.subtle;\r\n // @ts-ignore\r\n let importKey = await subtle.importKey(\r\n \"raw\", //only \"raw\" is allowed\r\n buffer, //your password\r\n {\r\n name: \"PBKDF2\",\r\n },\r\n false, //whether the key is extractable (i.e. can be used in exportKey)\r\n [\"deriveKey\", \"deriveBits\"] //can be any combination of \"deriveKey\" and \"deriveBits\"\r\n );\r\n \r\n /* let deriveKey = */await subtle.deriveKey(\r\n {\r\n \"name\": \"PBKDF2\",\r\n salt: salt,\r\n iterations: iterations,\r\n hash: {name: \"SHA-512\"}, //can be \"SHA-1\", \"SHA-256\", \"SHA-384\", or \"SHA-512\"\r\n },\r\n importKey, //your key from generateKey or importKey\r\n { //the key type you want to create based on the derived bits\r\n name: \"AES-CTR\", //can be any AES algorithm (\"AES-CTR\", \"AES-CBC\", \"AES-CMAC\", \"AES-GCM\", \"AES-CFB\", \"AES-KW\", \"ECDH\", \"DH\", or \"HMAC\")\r\n //the generateKey parameters for that type of algorithm\r\n length: 256, //can be 128, 192, or 256\r\n },\r\n false, //whether the derived key is extractable (i.e. can be used in exportKey)\r\n [\"encrypt\", \"decrypt\"] //limited to the options in that algorithm's importKey\r\n );\r\n\r\n let bits = subtle.deriveBits({\r\n \"name\": \"PBKDF2\",\r\n salt: salt,\r\n iterations: iterations,\r\n hash: {name: \"SHA-512\"}, //can be \"SHA-1\", \"SHA-256\", \"SHA-384\", or \"SHA-512\"\r\n },\r\n importKey, //your key from generateKey or importKey\r\n 512 //the number of bits you want to derive\r\n );\r\n\r\n return bits;\r\n}\r\n\r\nexport function pqPrimeFactorization(pqBytes: number[]) {\r\n let result: ReturnType<typeof pqPrimeLeemon>;\r\n\r\n //console.log('PQ start', pqBytes, bytesToHex(pqBytes));\r\n\r\n try {\r\n //console.time('PQ leemon');\r\n result = pqPrimeLeemon(str2bigInt(bytesToHex(pqBytes), 16, Math.ceil(64 / bpe) + 1));\r\n //console.timeEnd('PQ leemon');\r\n } catch (e) {\r\n console.error('Pq leemon Exception', e);\r\n }\r\n\r\n //console.log('PQ finish', result);\r\n\r\n return result;\r\n}\r\n\r\nexport function pqPrimeLeemon(what: any) {\r\n var minBits = 64;\r\n var minLen = Math.ceil(minBits / bpe) + 1;\r\n var it = 0;\r\n var i, q;\r\n var j, lim;\r\n var P;\r\n var Q;\r\n var a = new Array(minLen);\r\n var b = new Array(minLen);\r\n var c = new Array(minLen);\r\n var g = new Array(minLen);\r\n var z = new Array(minLen);\r\n var x = new Array(minLen);\r\n var y = new Array(minLen);\r\n\r\n for(i = 0; i < 3; ++i) {\r\n q = (nextRandomInt(128) & 15) + 17;\r\n copyInt_(x, nextRandomInt(1000000000) + 1);\r\n copy_(y, x);\r\n lim = 1 << (i + 18);\r\n\r\n for (j = 1; j < lim; ++j) {\r\n ++it;\r\n copy_(a, x);\r\n copy_(b, x);\r\n copyInt_(c, q);\r\n\r\n while(!isZero(b)) {\r\n if(b[0] & 1) {\r\n add_(c, a);\r\n if(greater(c, what)) {\r\n sub_(c, what);\r\n }\r\n }\r\n add_(a, a);\r\n if(greater(a, what)) {\r\n sub_(a, what);\r\n }\r\n rightShift_(b, 1);\r\n }\r\n\r\n copy_(x, c);\r\n if(greater(x, y)) {\r\n copy_(z, x);\r\n sub_(z, y);\r\n } else {\r\n copy_(z, y);\r\n sub_(z, x);\r\n }\r\n eGCD_(z, what, g, a, b);\r\n if(!equalsInt(g, 1)) {\r\n break;\r\n }\r\n if((j & (j - 1)) === 0) {\r\n copy_(y, x);\r\n }\r\n }\r\n if(greater(g, one)) {\r\n break;\r\n }\r\n }\r\n\r\n divide_(what, g, x, y);\r\n\r\n if(greater(g, x)) {\r\n P = x;\r\n Q = g;\r\n } else {\r\n P = g;\r\n Q = x;\r\n }\r\n\r\n // console.log(dT(), 'done', bigInt2str(what, 10), bigInt2str(P, 10), bigInt2str(Q, 10))\r\n\r\n return [bigInt2bytes(P), bigInt2bytes(Q), it];\r\n}\r\n\r\nexport function bytesModPow(x: any, y: any, m: any) {\r\n try {\r\n var xBigInt = str2bigInt(bytesToHex(x), 16);\r\n var yBigInt = str2bigInt(bytesToHex(y), 16);\r\n var mBigInt = str2bigInt(bytesToHex(m), 16);\r\n var resBigInt = powMod(xBigInt, yBigInt, mBigInt);\r\n\r\n return bytesFromHex(bigInt2str(resBigInt, 16));\r\n } catch(e) {\r\n console.error('mod pow error', e);\r\n }\r\n\r\n //return bytesFromBigInt(new BigInteger(x).modPow(new BigInteger(y), new BigInteger(m)), 256);\r\n}\r\n\r\nexport function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\r\nexport function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\r\nexport function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\r\n //console.log(dT(), 'Gzip uncompress start');\r\n var result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\r\n //console.log(dT(), 'Gzip uncompress finish'/* , result */);\r\n return result;\r\n}\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/** Gets a uint32 from string in big-endian order order */\nfunction strToInt32(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n/** Returns a uint32 as a string in big-endian order order */\nfunction int32ToStr(data) {\n return (String.fromCharCode((data >> 24) & 0xFF)\n + String.fromCharCode((data >> 16) & 0xFF)\n + String.fromCharCode((data >> 8) & 0xFF)\n + String.fromCharCode(data & 0xFF));\n}\n// padding\nvar _padding = String.fromCharCode(128);\nfor (var i = 64; i--;)\n _padding += String.fromCharCode(0);\n/**\n * Updates a SHA-1 state with the given byte buffer.\n */\nfunction update(data) {\n var a;\n var b;\n var c;\n var d;\n var e;\n var i = 0;\n var f = 0;\n var t = 0;\n // Array to use to store words.\n var words = new Uint32Array(80);\n // SHA-256 state contains five 32-bit integers\n var h1 = 0x67452301;\n var h2 = 0xEFCDAB89;\n var h3 = 0x98BADCFE;\n var h4 = 0x10325476;\n var h5 = 0xC3D2E1F0;\n var len = data.length;\n var p = 0; // let ni = 64;\n // consume 512 bit (64 byte) chunks\n // While decrementing loop is much faster than for\n while (len >= 64) {\n // initialize hash value for this chunk\n a = h1;\n b = h2;\n c = h3;\n d = h4;\n e = h5;\n // round 1\n for (i = 0; i < 16; i += 1) {\n words[i] = strToInt32(data, p);\n p += 4;\n f = d ^ (b & (c ^ d));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + words[i];\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n for (; i < 20; i += 1) {\n t = (words[i - 3] ^ words[i - 8] ^ words[i - 14] ^ words[i - 16]);\n t = (t << 1) | (t >>> 31);\n words[i] = t;\n f = d ^ (b & (c ^ d));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 2\n for (; i < 32; i += 1) {\n t = (words[i - 3] ^ words[i - 8] ^ words[i - 14] ^ words[i - 16]);\n t = (t << 1) | (t >>> 31);\n words[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n for (; i < 40; i += 1) {\n t = (words[i - 6] ^ words[i - 16] ^ words[i - 28] ^ words[i - 32]);\n t = (t << 2) | (t >>> 30);\n words[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 3\n for (; i < 60; i += 1) {\n t = (words[i - 6] ^ words[i - 16] ^ words[i - 28] ^ words[i - 32]);\n t = (t << 2) | (t >>> 30);\n words[i] = t;\n f = (b & c) | (d & (b ^ c));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x8F1BBCDC + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 4\n for (; i < 80; i += 1) {\n t = (words[i - 6] ^ words[i - 16] ^ words[i - 28] ^ words[i - 32]);\n t = (t << 2) | (t >>> 30);\n words[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0xCA62C1D6 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // update hash state\n h1 = (h1 + a) | 0;\n h2 = (h2 + b) | 0;\n h3 = (h3 + c) | 0;\n h4 = (h4 + d) | 0;\n h5 = (h5 + e) | 0;\n len -= 64;\n }\n return {\n h1: h1, h2: h2, h3: h3, h4: h4, h5: h5,\n };\n}\n/**\n * Calculates sha1 hash from string\n */\nfunction sha1(message) {\n // 56-bit length of message so far (does not including padding)\n var len = message.length;\n var len64hi = (len / 0x100000000) >>> 0;\n var len64lo = len >>> 0;\n var flen = [0, 0];\n for (var i = flen.length - 1; i >= 0; i -= 1) {\n flen[i] += len64lo;\n len64lo = len64hi + ((flen[i] / 0x100000000) >>> 0);\n flen[i] >>>= 0;\n len64hi = ((len64lo / 0x100000000) >>> 0);\n }\n var pad = message;\n // compute remaining size to be digested (include message length size)\n var remaining = flen[flen.length - 1] + 8;\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & 63;\n pad += _padding.substr(0, 64 - overflow);\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next;\n var carry;\n var bits = flen[0] * 8;\n for (var i = 0; i < flen.length - 1; i += 1) {\n next = flen[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n pad += int32ToStr(bits >>> 0);\n bits = next >>> 0;\n }\n pad += int32ToStr(bits);\n var state = update(pad);\n return int32ToStr(state.h1)\n + int32ToStr(state.h2)\n + int32ToStr(state.h3)\n + int32ToStr(state.h4)\n + int32ToStr(state.h5);\n}\nexports.default = sha1;\n//# sourceMappingURL=index.js.map","!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).pako=e()}}(function(){return function r(o,s,f){function l(t,e){if(!s[t]){if(!o[t]){var i=\"function\"==typeof require&&require;if(!e&&i)return i(t,!0);if(d)return d(t,!0);var n=new Error(\"Cannot find module '\"+t+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var a=s[t]={exports:{}};o[t][0].call(a.exports,function(e){return l(o[t][1][e]||e)},a,a.exports,r,o,s,f)}return s[t].exports}for(var d=\"function\"==typeof require&&require,e=0;e<f.length;e++)l(f[e]);return l}({1:[function(e,t,i){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;i.assign=function(e){for(var t,i,n=Array.prototype.slice.call(arguments,1);n.length;){var a=n.shift();if(a){if(\"object\"!=typeof a)throw new TypeError(a+\"must be non-object\");for(var r in a)t=a,i=r,Object.prototype.hasOwnProperty.call(t,i)&&(e[r]=a[r])}}return e},i.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var a={arraySet:function(e,t,i,n,a){if(t.subarray&&e.subarray)e.set(t.subarray(i,i+n),a);else for(var r=0;r<n;r++)e[a+r]=t[i+r]},flattenChunks:function(e){var t,i,n,a,r,o;for(t=n=0,i=e.length;t<i;t++)n+=e[t].length;for(o=new Uint8Array(n),t=a=0,i=e.length;t<i;t++)r=e[t],o.set(r,a),a+=r.length;return o}},r={arraySet:function(e,t,i,n,a){for(var r=0;r<n;r++)e[a+r]=t[i+r]},flattenChunks:function(e){return[].concat.apply([],e)}};i.setTyped=function(e){e?(i.Buf8=Uint8Array,i.Buf16=Uint16Array,i.Buf32=Int32Array,i.assign(i,a)):(i.Buf8=Array,i.Buf16=Array,i.Buf32=Array,i.assign(i,r))},i.setTyped(n)},{}],2:[function(e,t,i){\"use strict\";var f=e(\"./common\"),a=!0,r=!0;try{String.fromCharCode.apply(null,[0])}catch(e){a=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){r=!1}for(var l=new f.Buf8(256),n=0;n<256;n++)l[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function d(e,t){if(t<65534&&(e.subarray&&r||!e.subarray&&a))return String.fromCharCode.apply(null,f.shrinkBuf(e,t));for(var i=\"\",n=0;n<t;n++)i+=String.fromCharCode(e[n]);return i}l[254]=l[254]=1,i.string2buf=function(e){var t,i,n,a,r,o=e.length,s=0;for(a=0;a<o;a++)55296==(64512&(i=e.charCodeAt(a)))&&a+1<o&&56320==(64512&(n=e.charCodeAt(a+1)))&&(i=65536+(i-55296<<10)+(n-56320),a++),s+=i<128?1:i<2048?2:i<65536?3:4;for(t=new f.Buf8(s),a=r=0;r<s;a++)55296==(64512&(i=e.charCodeAt(a)))&&a+1<o&&56320==(64512&(n=e.charCodeAt(a+1)))&&(i=65536+(i-55296<<10)+(n-56320),a++),i<128?t[r++]=i:(i<2048?t[r++]=192|i>>>6:(i<65536?t[r++]=224|i>>>12:(t[r++]=240|i>>>18,t[r++]=128|i>>>12&63),t[r++]=128|i>>>6&63),t[r++]=128|63&i);return t},i.buf2binstring=function(e){return d(e,e.length)},i.binstring2buf=function(e){for(var t=new f.Buf8(e.length),i=0,n=t.length;i<n;i++)t[i]=e.charCodeAt(i);return t},i.buf2string=function(e,t){var i,n,a,r,o=t||e.length,s=new Array(2*o);for(i=n=0;i<o;)if((a=e[i++])<128)s[n++]=a;else if(4<(r=l[a]))s[n++]=65533,i+=r-1;else{for(a&=2===r?31:3===r?15:7;1<r&&i<o;)a=a<<6|63&e[i++],r--;1<r?s[n++]=65533:a<65536?s[n++]=a:(a-=65536,s[n++]=55296|a>>10&1023,s[n++]=56320|1023&a)}return d(s,n)},i.utf8border=function(e,t){var i;for((t=t||e.length)>e.length&&(t=e.length),i=t-1;0<=i&&128==(192&e[i]);)i--;return i<0?t:0===i?t:i+l[e[i]]>t?i:t}},{\"./common\":1}],3:[function(e,t,i){\"use strict\";t.exports=function(e,t,i,n){for(var a=65535&e|0,r=e>>>16&65535|0,o=0;0!==i;){for(i-=o=2e3<i?2e3:i;r=r+(a=a+t[n++]|0)|0,--o;);a%=65521,r%=65521}return a|r<<16|0}},{}],4:[function(e,t,i){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],5:[function(e,t,i){\"use strict\";var s=function(){for(var e,t=[],i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t}();t.exports=function(e,t,i,n){var a=s,r=n+i;e^=-1;for(var o=n;o<r;o++)e=e>>>8^a[255&(e^t[o])];return-1^e}},{}],6:[function(e,t,i){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],7:[function(e,t,i){\"use strict\";t.exports=function(e,t){var i,n,a,r,o,s,f,l,d,c,u,h,b,m,w,k,_,g,v,p,x,y,S,E,Z;i=e.state,n=e.next_in,E=e.input,a=n+(e.avail_in-5),r=e.next_out,Z=e.output,o=r-(t-e.avail_out),s=r+(e.avail_out-257),f=i.dmax,l=i.wsize,d=i.whave,c=i.wnext,u=i.window,h=i.hold,b=i.bits,m=i.lencode,w=i.distcode,k=(1<<i.lenbits)-1,_=(1<<i.distbits)-1;e:do{b<15&&(h+=E[n++]<<b,b+=8,h+=E[n++]<<b,b+=8),g=m[h&k];t:for(;;){if(h>>>=v=g>>>24,b-=v,0===(v=g>>>16&255))Z[r++]=65535&g;else{if(!(16&v)){if(0==(64&v)){g=m[(65535&g)+(h&(1<<v)-1)];continue t}if(32&v){i.mode=12;break e}e.msg=\"invalid literal/length code\",i.mode=30;break e}p=65535&g,(v&=15)&&(b<v&&(h+=E[n++]<<b,b+=8),p+=h&(1<<v)-1,h>>>=v,b-=v),b<15&&(h+=E[n++]<<b,b+=8,h+=E[n++]<<b,b+=8),g=w[h&_];i:for(;;){if(h>>>=v=g>>>24,b-=v,!(16&(v=g>>>16&255))){if(0==(64&v)){g=w[(65535&g)+(h&(1<<v)-1)];continue i}e.msg=\"invalid distance code\",i.mode=30;break e}if(x=65535&g,b<(v&=15)&&(h+=E[n++]<<b,(b+=8)<v&&(h+=E[n++]<<b,b+=8)),f<(x+=h&(1<<v)-1)){e.msg=\"invalid distance too far back\",i.mode=30;break e}if(h>>>=v,b-=v,(v=r-o)<x){if(d<(v=x-v)&&i.sane){e.msg=\"invalid distance too far back\",i.mode=30;break e}if(S=u,(y=0)===c){if(y+=l-v,v<p){for(p-=v;Z[r++]=u[y++],--v;);y=r-x,S=Z}}else if(c<v){if(y+=l+c-v,(v-=c)<p){for(p-=v;Z[r++]=u[y++],--v;);if(y=0,c<p){for(p-=v=c;Z[r++]=u[y++],--v;);y=r-x,S=Z}}}else if(y+=c-v,v<p){for(p-=v;Z[r++]=u[y++],--v;);y=r-x,S=Z}for(;2<p;)Z[r++]=S[y++],Z[r++]=S[y++],Z[r++]=S[y++],p-=3;p&&(Z[r++]=S[y++],1<p&&(Z[r++]=S[y++]))}else{for(y=r-x;Z[r++]=Z[y++],Z[r++]=Z[y++],Z[r++]=Z[y++],2<(p-=3););p&&(Z[r++]=Z[y++],1<p&&(Z[r++]=Z[y++]))}break}}break}}while(n<a&&r<s);n-=p=b>>3,h&=(1<<(b-=p<<3))-1,e.next_in=n,e.next_out=r,e.avail_in=n<a?a-n+5:5-(n-a),e.avail_out=r<s?s-r+257:257-(r-s),i.hold=h,i.bits=b}},{}],8:[function(e,t,i){\"use strict\";var z=e(\"../utils/common\"),R=e(\"./adler32\"),N=e(\"./crc32\"),O=e(\"./inffast\"),C=e(\"./inftrees\"),I=1,D=2,T=0,U=-2,F=1,n=852,a=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function r(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new z.Buf16(320),this.work=new z.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function o(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=F,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new z.Buf32(n),t.distcode=t.distdyn=new z.Buf32(a),t.sane=1,t.back=-1,T):U}function s(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,o(e)):U}function f(e,t){var i,n;return e&&e.state?(n=e.state,t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,s(e))):U}function l(e,t){var i,n;return e?(n=new r,(e.state=n).window=null,(i=f(e,t))!==T&&(e.state=null),i):U}var d,c,u=!0;function H(e){if(u){var t;for(d=new z.Buf32(512),c=new z.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(C(I,e.lens,0,288,d,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;C(D,e.lens,0,32,c,0,e.work,{bits:5}),u=!1}e.lencode=d,e.lenbits=9,e.distcode=c,e.distbits=5}function j(e,t,i,n){var a,r=e.state;return null===r.window&&(r.wsize=1<<r.wbits,r.wnext=0,r.whave=0,r.window=new z.Buf8(r.wsize)),n>=r.wsize?(z.arraySet(r.window,t,i-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n<(a=r.wsize-r.wnext)&&(a=n),z.arraySet(r.window,t,i-n,a,r.wnext),(n-=a)?(z.arraySet(r.window,t,i-n,n,0),r.wnext=n,r.whave=r.wsize):(r.wnext+=a,r.wnext===r.wsize&&(r.wnext=0),r.whave<r.wsize&&(r.whave+=a))),0}i.inflateReset=s,i.inflateReset2=f,i.inflateResetKeep=o,i.inflateInit=function(e){return l(e,15)},i.inflateInit2=l,i.inflate=function(e,t){var i,n,a,r,o,s,f,l,d,c,u,h,b,m,w,k,_,g,v,p,x,y,S,E,Z=0,B=new z.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(i=e.state).mode&&(i.mode=13),o=e.next_out,a=e.output,f=e.avail_out,r=e.next_in,n=e.input,s=e.avail_in,l=i.hold,d=i.bits,c=s,u=f,y=T;e:for(;;)switch(i.mode){case F:if(0===i.wrap){i.mode=13;break}for(;d<16;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if(2&i.wrap&&35615===l){B[i.check=0]=255&l,B[1]=l>>>8&255,i.check=N(i.check,B,2,0),d=l=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg=\"incorrect header check\",i.mode=30;break}if(8!=(15&l)){e.msg=\"unknown compression method\",i.mode=30;break}if(d-=4,x=8+(15&(l>>>=4)),0===i.wbits)i.wbits=x;else if(x>i.wbits){e.msg=\"invalid window size\",i.mode=30;break}i.dmax=1<<x,e.adler=i.check=1,i.mode=512&l?10:12,d=l=0;break;case 2:for(;d<16;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if(i.flags=l,8!=(255&i.flags)){e.msg=\"unknown compression method\",i.mode=30;break}if(57344&i.flags){e.msg=\"unknown header flags set\",i.mode=30;break}i.head&&(i.head.text=l>>8&1),512&i.flags&&(B[0]=255&l,B[1]=l>>>8&255,i.check=N(i.check,B,2,0)),d=l=0,i.mode=3;case 3:for(;d<32;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}i.head&&(i.head.time=l),512&i.flags&&(B[0]=255&l,B[1]=l>>>8&255,B[2]=l>>>16&255,B[3]=l>>>24&255,i.check=N(i.check,B,4,0)),d=l=0,i.mode=4;case 4:for(;d<16;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}i.head&&(i.head.xflags=255&l,i.head.os=l>>8),512&i.flags&&(B[0]=255&l,B[1]=l>>>8&255,i.check=N(i.check,B,2,0)),d=l=0,i.mode=5;case 5:if(1024&i.flags){for(;d<16;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}i.length=l,i.head&&(i.head.extra_len=l),512&i.flags&&(B[0]=255&l,B[1]=l>>>8&255,i.check=N(i.check,B,2,0)),d=l=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&(s<(h=i.length)&&(h=s),h&&(i.head&&(x=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),z.arraySet(i.head.extra,n,r,h,x)),512&i.flags&&(i.check=N(i.check,n,h,r)),s-=h,r+=h,i.length-=h),i.length))break e;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===s)break e;for(h=0;x=n[r+h++],i.head&&x&&i.length<65536&&(i.head.name+=String.fromCharCode(x)),x&&h<s;);if(512&i.flags&&(i.check=N(i.check,n,h,r)),s-=h,r+=h,x)break e}else i.head&&(i.head.name=null);i.length=0,i.mode=8;case 8:if(4096&i.flags){if(0===s)break e;for(h=0;x=n[r+h++],i.head&&x&&i.length<65536&&(i.head.comment+=String.fromCharCode(x)),x&&h<s;);if(512&i.flags&&(i.check=N(i.check,n,h,r)),s-=h,r+=h,x)break e}else i.head&&(i.head.comment=null);i.mode=9;case 9:if(512&i.flags){for(;d<16;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if(l!==(65535&i.check)){e.msg=\"header crc mismatch\",i.mode=30;break}d=l=0}i.head&&(i.head.hcrc=i.flags>>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=12;break;case 10:for(;d<32;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}e.adler=i.check=L(l),d=l=0,i.mode=11;case 11:if(0===i.havedict)return e.next_out=o,e.avail_out=f,e.next_in=r,e.avail_in=s,i.hold=l,i.bits=d,2;e.adler=i.check=1,i.mode=12;case 12:if(5===t||6===t)break e;case 13:if(i.last){l>>>=7&d,d-=7&d,i.mode=27;break}for(;d<3;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}switch(i.last=1&l,d-=1,3&(l>>>=1)){case 0:i.mode=14;break;case 1:if(H(i),i.mode=20,6!==t)break;l>>>=2,d-=2;break e;case 2:i.mode=17;break;case 3:e.msg=\"invalid block type\",i.mode=30}l>>>=2,d-=2;break;case 14:for(l>>>=7&d,d-=7&d;d<32;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if((65535&l)!=(l>>>16^65535)){e.msg=\"invalid stored block lengths\",i.mode=30;break}if(i.length=65535&l,d=l=0,i.mode=15,6===t)break e;case 15:i.mode=16;case 16:if(h=i.length){if(s<h&&(h=s),f<h&&(h=f),0===h)break e;z.arraySet(a,n,r,h,o),s-=h,r+=h,f-=h,o+=h,i.length-=h;break}i.mode=12;break;case 17:for(;d<14;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if(i.nlen=257+(31&l),l>>>=5,d-=5,i.ndist=1+(31&l),l>>>=5,d-=5,i.ncode=4+(15&l),l>>>=4,d-=4,286<i.nlen||30<i.ndist){e.msg=\"too many length or distance symbols\",i.mode=30;break}i.have=0,i.mode=18;case 18:for(;i.have<i.ncode;){for(;d<3;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}i.lens[A[i.have++]]=7&l,l>>>=3,d-=3}for(;i.have<19;)i.lens[A[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,S={bits:i.lenbits},y=C(0,i.lens,0,19,i.lencode,0,i.work,S),i.lenbits=S.bits,y){e.msg=\"invalid code lengths set\",i.mode=30;break}i.have=0,i.mode=19;case 19:for(;i.have<i.nlen+i.ndist;){for(;k=(Z=i.lencode[l&(1<<i.lenbits)-1])>>>16&255,_=65535&Z,!((w=Z>>>24)<=d);){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if(_<16)l>>>=w,d-=w,i.lens[i.have++]=_;else{if(16===_){for(E=w+2;d<E;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if(l>>>=w,d-=w,0===i.have){e.msg=\"invalid bit length repeat\",i.mode=30;break}x=i.lens[i.have-1],h=3+(3&l),l>>>=2,d-=2}else if(17===_){for(E=w+3;d<E;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}d-=w,x=0,h=3+(7&(l>>>=w)),l>>>=3,d-=3}else{for(E=w+7;d<E;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}d-=w,x=0,h=11+(127&(l>>>=w)),l>>>=7,d-=7}if(i.have+h>i.nlen+i.ndist){e.msg=\"invalid bit length repeat\",i.mode=30;break}for(;h--;)i.lens[i.have++]=x}}if(30===i.mode)break;if(0===i.lens[256]){e.msg=\"invalid code -- missing end-of-block\",i.mode=30;break}if(i.lenbits=9,S={bits:i.lenbits},y=C(I,i.lens,0,i.nlen,i.lencode,0,i.work,S),i.lenbits=S.bits,y){e.msg=\"invalid literal/lengths set\",i.mode=30;break}if(i.distbits=6,i.distcode=i.distdyn,S={bits:i.distbits},y=C(D,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,S),i.distbits=S.bits,y){e.msg=\"invalid distances set\",i.mode=30;break}if(i.mode=20,6===t)break e;case 20:i.mode=21;case 21:if(6<=s&&258<=f){e.next_out=o,e.avail_out=f,e.next_in=r,e.avail_in=s,i.hold=l,i.bits=d,O(e,u),o=e.next_out,a=e.output,f=e.avail_out,r=e.next_in,n=e.input,s=e.avail_in,l=i.hold,d=i.bits,12===i.mode&&(i.back=-1);break}for(i.back=0;k=(Z=i.lencode[l&(1<<i.lenbits)-1])>>>16&255,_=65535&Z,!((w=Z>>>24)<=d);){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if(k&&0==(240&k)){for(g=w,v=k,p=_;k=(Z=i.lencode[p+((l&(1<<g+v)-1)>>g)])>>>16&255,_=65535&Z,!(g+(w=Z>>>24)<=d);){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}l>>>=g,d-=g,i.back+=g}if(l>>>=w,d-=w,i.back+=w,i.length=_,0===k){i.mode=26;break}if(32&k){i.back=-1,i.mode=12;break}if(64&k){e.msg=\"invalid literal/length code\",i.mode=30;break}i.extra=15&k,i.mode=22;case 22:if(i.extra){for(E=i.extra;d<E;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}i.length+=l&(1<<i.extra)-1,l>>>=i.extra,d-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;k=(Z=i.distcode[l&(1<<i.distbits)-1])>>>16&255,_=65535&Z,!((w=Z>>>24)<=d);){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if(0==(240&k)){for(g=w,v=k,p=_;k=(Z=i.distcode[p+((l&(1<<g+v)-1)>>g)])>>>16&255,_=65535&Z,!(g+(w=Z>>>24)<=d);){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}l>>>=g,d-=g,i.back+=g}if(l>>>=w,d-=w,i.back+=w,64&k){e.msg=\"invalid distance code\",i.mode=30;break}i.offset=_,i.extra=15&k,i.mode=24;case 24:if(i.extra){for(E=i.extra;d<E;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}i.offset+=l&(1<<i.extra)-1,l>>>=i.extra,d-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg=\"invalid distance too far back\",i.mode=30;break}i.mode=25;case 25:if(0===f)break e;if(h=u-f,i.offset>h){if((h=i.offset-h)>i.whave&&i.sane){e.msg=\"invalid distance too far back\",i.mode=30;break}h>i.wnext?(h-=i.wnext,b=i.wsize-h):b=i.wnext-h,h>i.length&&(h=i.length),m=i.window}else m=a,b=o-i.offset,h=i.length;for(f<h&&(h=f),f-=h,i.length-=h;a[o++]=m[b++],--h;);0===i.length&&(i.mode=21);break;case 26:if(0===f)break e;a[o++]=i.length,f--,i.mode=21;break;case 27:if(i.wrap){for(;d<32;){if(0===s)break e;s--,l|=n[r++]<<d,d+=8}if(u-=f,e.total_out+=u,i.total+=u,u&&(e.adler=i.check=i.flags?N(i.check,a,u,o-u):R(i.check,a,u,o-u)),u=f,(i.flags?l:L(l))!==i.check){e.msg=\"incorrect data check\",i.mode=30;break}d=l=0}i.mode=28;case 28:if(i.wrap&&i.flags){for(;d<32;){if(0===s)break e;s--,l+=n[r++]<<d,d+=8}if(l!==(4294967295&i.total)){e.msg=\"incorrect length check\",i.mode=30;break}d=l=0}i.mode=29;case 29:y=1;break e;case 30:y=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=o,e.avail_out=f,e.next_in=r,e.avail_in=s,i.hold=l,i.bits=d,(i.wsize||u!==e.avail_out&&i.mode<30&&(i.mode<27||4!==t))&&j(e,e.output,e.next_out,u-e.avail_out)?(i.mode=31,-4):(c-=e.avail_in,u-=e.avail_out,e.total_in+=c,e.total_out+=u,i.total+=u,i.wrap&&u&&(e.adler=i.check=i.flags?N(i.check,a,u,e.next_out-u):R(i.check,a,u,e.next_out-u)),e.data_type=i.bits+(i.last?64:0)+(12===i.mode?128:0)+(20===i.mode||15===i.mode?256:0),(0===c&&0===u||4===t)&&y===T&&(y=-5),y)},i.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,T},i.inflateGetHeader=function(e,t){var i;return e&&e.state?0==(2&(i=e.state).wrap)?U:((i.head=t).done=!1,T):U},i.inflateSetDictionary=function(e,t){var i,n=t.length;return e&&e.state?0!==(i=e.state).wrap&&11!==i.mode?U:11===i.mode&&R(1,t,n,0)!==i.check?-3:j(e,t,n,n)?(i.mode=31,-4):(i.havedict=1,T):U},i.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":1,\"./adler32\":3,\"./crc32\":5,\"./inffast\":7,\"./inftrees\":9}],9:[function(e,t,i){\"use strict\";var I=e(\"../utils/common\"),D=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],T=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],F=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,i,n,a,r,o,s){var f,l,d,c,u,h,b,m,w,k=s.bits,_=0,g=0,v=0,p=0,x=0,y=0,S=0,E=0,Z=0,B=0,A=null,z=0,R=new I.Buf16(16),N=new I.Buf16(16),O=null,C=0;for(_=0;_<=15;_++)R[_]=0;for(g=0;g<n;g++)R[t[i+g]]++;for(x=k,p=15;1<=p&&0===R[p];p--);if(p<x&&(x=p),0===p)return a[r++]=20971520,a[r++]=20971520,s.bits=1,0;for(v=1;v<p&&0===R[v];v++);for(x<v&&(x=v),_=E=1;_<=15;_++)if(E<<=1,(E-=R[_])<0)return-1;if(0<E&&(0===e||1!==p))return-1;for(N[1]=0,_=1;_<15;_++)N[_+1]=N[_]+R[_];for(g=0;g<n;g++)0!==t[i+g]&&(o[N[t[i+g]]++]=g);if(0===e?(A=O=o,h=19):1===e?(A=D,z-=257,O=T,C-=257,h=256):(A=U,O=F,h=-1),_=v,u=r,S=g=B=0,d=-1,c=(Z=1<<(y=x))-1,1===e&&852<Z||2===e&&592<Z)return 1;for(;;){for(b=_-S,o[g]<h?(m=0,w=o[g]):o[g]>h?(m=O[C+o[g]],w=A[z+o[g]]):(m=96,w=0),f=1<<_-S,v=l=1<<y;a[u+(B>>S)+(l-=f)]=b<<24|m<<16|w|0,0!==l;);for(f=1<<_-1;B&f;)f>>=1;if(0!==f?(B&=f-1,B+=f):B=0,g++,0==--R[_]){if(_===p)break;_=t[i+o[g]]}if(x<_&&(B&c)!==d){for(0===S&&(S=x),u+=v,E=1<<(y=_-S);y+S<p&&!((E-=R[y+S])<=0);)y++,E<<=1;if(Z+=1<<y,1===e&&852<Z||2===e&&592<Z)return 1;a[d=B&c]=x<<24|y<<16|u-r|0}}return 0!==B&&(a[u+B]=_-S<<24|64<<16|0),s.bits=x,0}},{\"../utils/common\":1}],10:[function(e,t,i){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],11:[function(e,t,i){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],\"/lib/inflate.js\":[function(e,t,i){\"use strict\";var c=e(\"./zlib/inflate\"),u=e(\"./utils/common\"),h=e(\"./utils/strings\"),b=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),a=e(\"./zlib/zstream\"),r=e(\"./zlib/gzheader\"),m=Object.prototype.toString;function o(e){if(!(this instanceof o))return new o(e);this.options=u.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new a,this.strm.avail_out=0;var i=c.inflateInit2(this.strm,t.windowBits);if(i!==b.Z_OK)throw new Error(n[i]);if(this.header=new r,c.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===m.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=c.inflateSetDictionary(this.strm,t.dictionary))!==b.Z_OK))throw new Error(n[i])}function s(e,t){var i=new o(t);if(i.push(e,!0),i.err)throw i.msg||n[i.err];return i.result}o.prototype.push=function(e,t){var i,n,a,r,o,s=this.strm,f=this.options.chunkSize,l=this.options.dictionary,d=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?b.Z_FINISH:b.Z_NO_FLUSH,\"string\"==typeof e?s.input=h.binstring2buf(e):\"[object ArrayBuffer]\"===m.call(e)?s.input=new Uint8Array(e):s.input=e,s.next_in=0,s.avail_in=s.input.length;do{if(0===s.avail_out&&(s.output=new u.Buf8(f),s.next_out=0,s.avail_out=f),(i=c.inflate(s,b.Z_NO_FLUSH))===b.Z_NEED_DICT&&l&&(i=c.inflateSetDictionary(this.strm,l)),i===b.Z_BUF_ERROR&&!0===d&&(i=b.Z_OK,d=!1),i!==b.Z_STREAM_END&&i!==b.Z_OK)return this.onEnd(i),!(this.ended=!0);s.next_out&&(0!==s.avail_out&&i!==b.Z_STREAM_END&&(0!==s.avail_in||n!==b.Z_FINISH&&n!==b.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(a=h.utf8border(s.output,s.next_out),r=s.next_out-a,o=h.buf2string(s.output,a),s.next_out=r,s.avail_out=f-r,r&&u.arraySet(s.output,s.output,a,r,0),this.onData(o)):this.onData(u.shrinkBuf(s.output,s.next_out)))),0===s.avail_in&&0===s.avail_out&&(d=!0)}while((0<s.avail_in||0===s.avail_out)&&i!==b.Z_STREAM_END);return i===b.Z_STREAM_END&&(n=b.Z_FINISH),n===b.Z_FINISH?(i=c.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===b.Z_OK):n!==b.Z_SYNC_FLUSH||(this.onEnd(b.Z_OK),!(s.avail_out=0))},o.prototype.onData=function(e){this.chunks.push(e)},o.prototype.onEnd=function(e){e===b.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=u.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},i.Inflate=o,i.inflate=s,i.inflateRaw=function(e,t){return(t=t||{}).raw=!0,s(e,t)},i.ungzip=s},{\"./utils/common\":1,\"./utils/strings\":2,\"./zlib/constants\":4,\"./zlib/gzheader\":6,\"./zlib/inflate\":8,\"./zlib/messages\":10,\"./zlib/zstream\":11}]},{},[])(\"/lib/inflate.js\")});\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { bytesToHex, bytesFromHex, bufferConcats } from '../helpers/bytes';\r\nimport { nextRandomInt } from '../helpers/random';\r\n\r\n//export const secureRandom = new SecureRandom();\r\n\r\nObject.defineProperty(Uint8Array.prototype, 'hex', {\r\n get: function(): string {\r\n return bytesToHex([...this]);\r\n },\r\n \r\n set: function(str: string) {\r\n this.set(bytesFromHex(str));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\nUint8Array.prototype.randomize = function() {\r\n //secureRandom.nextBytes(this);\r\n for(let i = 0; i < this.length; ++i) {\r\n this[i] = nextRandomInt(255);\r\n }\r\n return this;\r\n};\r\n\r\nUint8Array.prototype.concat = function(...args: Array<Uint8Array | ArrayBuffer | number[]>) {\r\n return bufferConcats(this, ...args);\r\n};\r\n\r\n/* Uint8Array.prototype.toString = function() {\r\n return String.fromCharCode.apply(null, [...this]);\r\n}; */\r\n\r\nUint8Array.prototype.toJSON = function() {\r\n return [...this];\r\n //return {type: 'bytes', value: [...this]};\r\n};\r\n\r\nArray.prototype.findAndSplice = function<T>(verify: (value: T, index?: number, array?: Array<T>) => boolean) {\r\n let index = this.findIndex(verify);\r\n return index !== -1 ? this.splice(index, 1)[0] : undefined;\r\n};\r\n\r\nString.prototype.toHHMMSS = function(leadZero = false) {\r\n const sec_num = parseInt(this + '', 10);\r\n const hours = Math.floor(sec_num / 3600);\r\n let minutes: any = Math.floor((sec_num - (hours * 3600)) / 60);\r\n let seconds: any = sec_num - (hours * 3600) - (minutes * 60);\r\n \r\n if(hours) leadZero = true;\r\n if(minutes < 10) minutes = leadZero ? \"0\" + minutes : minutes;\r\n if(seconds < 10) seconds = \"0\" + seconds;\r\n return (hours ? /* ('0' + hours).slice(-2) */hours + ':' : '') + minutes + ':' + seconds;\r\n};\r\n\r\n/* Promise.prototype.finally = Promise.prototype.finally || {\r\n finally(fn: () => any) {\r\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\r\n return this.then(\r\n result => onFinally(() => result),\r\n reason => onFinally(() => Promise.reject(reason))\r\n );\r\n }\r\n}.finally; */\r\nPromise.prototype.finally = Promise.prototype.finally || function<T>(this: Promise<T>, fn: () => any) {\r\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\r\n return this.then(\r\n result => onFinally(() => result),\r\n reason => onFinally(() => Promise.reject(reason))\r\n );\r\n};\r\n\r\ndeclare global {\r\n interface Uint8Array {\r\n hex: string;\r\n randomize: () => Uint8Array,\r\n concat: (...args: Array<Uint8Array | ArrayBuffer | number[]>) => Uint8Array,\r\n //toString: () => string,\r\n toJSON: () => number[],\r\n //toJSON: () => {type: 'bytes', value: number[]},\r\n }\r\n \r\n interface Array<T> {\r\n findAndSplice(verify: (value: T, index?: number, array?: Array<T>) => boolean): T;\r\n }\r\n \r\n interface String {\r\n toHHMMSS(leadZero?: boolean): string;\r\n }\r\n\r\n interface Promise<T> {\r\n finally: (onfinally?: () => void) => Promise<T>;\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { IDBStore } from \"../lib/idb\";\r\nimport Modes from \"./modes\";\r\n\r\nexport type DatabaseStoreName = 'session' | 'stickerSets';\r\nexport type DatabaseStore = Omit<IDBStore, 'name'> & {name: DatabaseStoreName};\r\nconst Database = {\r\n name: 'tweb' + (Modes.test ? '_test' : ''),\r\n version: 5,\r\n stores: [{\r\n name: 'session'\r\n }, {\r\n name: 'stickerSets'\r\n }] as DatabaseStore[],\r\n};\r\n\r\nexport default Database;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport const readBlobAsText = (blob: Blob) => {\r\n return new Promise<string>(resolve => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', (e) => {\r\n // @ts-ignore\r\n resolve(e.srcElement.result);\r\n });\r\n reader.readAsText(blob);\r\n });\r\n};\r\n\r\nexport function blobConstruct(blobParts: any, mimeType: string = ''): Blob {\r\n let blob;\r\n const safeMimeType = blobSafeMimeType(mimeType);\r\n try {\r\n blob = new Blob(blobParts, {type: safeMimeType});\r\n } catch(e) {\r\n // @ts-ignore\r\n let bb = new BlobBuilder;\r\n blobParts.forEach((blobPart: any) => {\r\n bb.append(blobPart);\r\n });\r\n blob = bb.getBlob(safeMimeType);\r\n }\r\n return blob;\r\n}\r\n\r\nexport function blobSafeMimeType(mimeType: string) {\r\n if([\r\n 'image/jpeg',\r\n 'image/png',\r\n 'image/gif',\r\n 'image/webp',\r\n 'image/bmp',\r\n 'video/mp4',\r\n 'video/webm',\r\n 'video/quicktime',\r\n 'audio/ogg',\r\n 'audio/mpeg',\r\n 'audio/mp4',\r\n 'application/json'\r\n ].indexOf(mimeType) === -1) {\r\n return 'application/octet-stream';\r\n }\r\n\r\n return mimeType;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport Database from '../config/database';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport { safeAssign } from '../helpers/object';\r\nimport { logger } from './logger';\r\n\r\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\r\n */\r\nexport type IDBIndex = {\r\n indexName: string,\r\n keyPath: string,\r\n objectParameters: IDBIndexParameters\r\n};\r\n\r\nexport type IDBStore = {\r\n name: string, \r\n indexes?: IDBIndex[]\r\n};\r\n\r\nexport type IDBOptions = {\r\n name?: string,\r\n storeName: string,\r\n stores?: IDBStore[],\r\n version?: number\r\n};\r\n\r\nexport default class IDBStorage {\r\n public openDbPromise: Promise<IDBDatabase>;\r\n public storageIsAvailable = true;\r\n\r\n private log: ReturnType<typeof logger> = logger('IDB');\r\n \r\n public name: string = Database.name;\r\n public version: number = Database.version;\r\n public stores: IDBStore[] = Database.stores;\r\n\r\n public storeName: string;\r\n\r\n constructor(options: IDBOptions) {\r\n safeAssign(this, options);\r\n\r\n this.openDatabase(true);\r\n }\r\n\r\n public isAvailable() {\r\n return this.storageIsAvailable;\r\n }\r\n\r\n public openDatabase(createNew = false): Promise<IDBDatabase> {\r\n if(this.openDbPromise && !createNew) {\r\n return this.openDbPromise;\r\n }\r\n\r\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\r\n const os = db.createObjectStore(store.name);\r\n\r\n if(store.indexes?.length) {\r\n for(const index of store.indexes) {\r\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\r\n }\r\n }\r\n };\r\n\r\n try {\r\n var request = indexedDB.open(this.name, this.version);\r\n\r\n if(!request) {\r\n throw new Error();\r\n }\r\n } catch(error) {\r\n this.log.error('error opening db', error.message)\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n let finished = false;\r\n setTimeout(() => {\r\n if(!finished) {\r\n request.onerror({type: 'IDB_CREATE_TIMEOUT'} as Event);\r\n }\r\n }, 3000);\r\n\r\n return this.openDbPromise = new Promise<IDBDatabase>((resolve, reject) => {\r\n request.onsuccess = (event) => {\r\n finished = true;\r\n const db = request.result;\r\n let calledNew = false;\r\n\r\n this.log('Opened');\r\n \r\n db.onerror = (error) => {\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', error);\r\n reject(error);\r\n };\r\n\r\n db.onclose = (e) => {\r\n this.log.error('closed:', e);\r\n !calledNew && this.openDatabase();\r\n };\r\n\r\n db.onabort = (e) => {\r\n this.log.error('abort:', e);\r\n const transaction = e.target as IDBTransaction;\r\n \r\n this.openDatabase(calledNew = true);\r\n\r\n if(transaction.onerror) {\r\n transaction.onerror(e);\r\n }\r\n\r\n db.close();\r\n };\r\n\r\n db.onversionchange = (e) => {\r\n this.log.error('onversionchange, lol?');\r\n };\r\n\r\n resolve(db);\r\n };\r\n \r\n request.onerror = (event) => {\r\n finished = true;\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', event);\r\n reject(event);\r\n };\r\n \r\n request.onupgradeneeded = (event) => {\r\n finished = true;\r\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\r\n\r\n // @ts-ignore\r\n var db = event.target.result as IDBDatabase;\r\n this.stores.forEach((store) => {\r\n /* if(db.objectStoreNames.contains(store.name)) {\r\n //if(event.oldVersion === 1) {\r\n db.deleteObjectStore(store.name);\r\n //}\r\n } */\r\n \r\n if(!db.objectStoreNames.contains(store.name)) {\r\n createObjectStore(db, store);\r\n }\r\n });\r\n };\r\n });\r\n }\r\n\r\n public delete(entryName: string): Promise<void> {\r\n //return Promise.resolve();\r\n return this.openDatabase().then((db) => {\r\n try {\r\n //this.log('delete: `' + entryName + '`');\r\n var objectStore = db.transaction([this.storeName], 'readwrite')\r\n .objectStore(this.storeName);\r\n\r\n var request = objectStore.delete(entryName);\r\n } catch(error) {\r\n return Promise.reject(error);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n this.log.error('delete: request not finished!', entryName, request);\r\n resolve();\r\n }, 3000);\r\n\r\n request.onsuccess = (event) => {\r\n //this.log('delete: deleted file', event);\r\n resolve();\r\n clearTimeout(timeout);\r\n };\r\n \r\n request.onerror = (error) => {\r\n reject(error);\r\n clearTimeout(timeout);\r\n };\r\n });\r\n });\r\n }\r\n\r\n public deleteAll() {\r\n return this.openDatabase().then((db) => {\r\n //this.log('deleteAll');\r\n\r\n try {\r\n const transaction = db.transaction([this.storeName], 'readwrite');\r\n\r\n const objectStore = transaction.objectStore(this.storeName);\r\n var request = objectStore.clear();\r\n } catch(error) {\r\n return Promise.reject(error);\r\n }\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n this.log.error('deleteAll: request not finished', request);\r\n }, 3000);\r\n\r\n request.onsuccess = (event) => {\r\n resolve();\r\n clearTimeout(timeout);\r\n };\r\n \r\n request.onerror = (error) => {\r\n reject(error);\r\n clearTimeout(timeout);\r\n };\r\n });\r\n });\r\n }\r\n\r\n public save(entryName: string, value: any) {\r\n return this.openDatabase().then((db) => {\r\n //this.log('save:', entryName, value);\r\n\r\n const handleError = (error: Error) => {\r\n this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\r\n if((!error || error.name === 'InvalidStateError')/* && false */) {\r\n setTimeout(() => {\r\n this.save(entryName, value);\r\n }, 2e3);\r\n } else {\r\n //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\r\n }\r\n };\r\n\r\n try {\r\n const transaction = db.transaction([this.storeName], 'readwrite');\r\n transaction.onerror = (e) => {\r\n handleError(transaction.error);\r\n };\r\n /* transaction.oncomplete = (e) => {\r\n this.log('save: transaction complete:', entryName);\r\n }; */\r\n\r\n /* transaction.addEventListener('abort', (e) => {\r\n //handleError();\r\n this.log.error('IndexedDB: save transaction abort!', transaction.error);\r\n }); */\r\n\r\n const objectStore = transaction.objectStore(this.storeName);\r\n var request = objectStore.put(value, entryName);\r\n } catch(error) {\r\n handleError(error);\r\n return Promise.reject(error);\r\n \r\n /* this.storageIsAvailable = false;\r\n throw error; */\r\n }\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n this.log.error('save: request not finished', entryName, request);\r\n }, 10000);\r\n\r\n request.onsuccess = (event) => {\r\n resolve();\r\n clearTimeout(timeout);\r\n };\r\n \r\n request.onerror = (error) => {\r\n reject(error);\r\n clearTimeout(timeout);\r\n };\r\n });\r\n });\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct([blob]) as Blob;\r\n }\r\n\r\n return this.save(fileName, blob);\r\n }\r\n\r\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise<Blob> {\r\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\r\n return Promise.reject();\r\n }\r\n\r\n if(!(blob instanceof Blob)) {\r\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\r\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\r\n return this.storagePutB64String(db, fileName, address).then(() => {\r\n return blob;\r\n });\r\n }\r\n\r\n try {\r\n var reader = new FileReader();\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n let promise = new Promise<Blob>((resolve, reject) => {\r\n reader.onloadend = () => {\r\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\r\n resolve(blob);\r\n }, reject);\r\n }\r\n \r\n reader.onerror = reject;\r\n });\r\n \r\n\r\n try {\r\n reader.readAsDataURL(blob);\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\r\n try {\r\n var objectStore = db.transaction([this.storeName], 'readwrite')\r\n .objectStore(this.storeName);\r\n var request = objectStore.put(b64string, fileName);\r\n } catch(error) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n resolve();\r\n };\r\n \r\n request.onerror = reject;\r\n });\r\n }\r\n\r\n public getBlobSize(blob: any) {\r\n return blob.size || blob.byteLength || blob.length;\r\n } */\r\n\r\n public get<T>(entryName: string): Promise<T> {\r\n //return Promise.reject();\r\n return this.openDatabase().then((db) => {\r\n //this.log('get pre:', fileName);\r\n\r\n try {\r\n const transaction = db.transaction([this.storeName], 'readonly');\r\n /* transaction.onabort = (e) => {\r\n this.log.error('get transaction onabort?', e);\r\n }; */\r\n const objectStore = transaction.objectStore(this.storeName);\r\n var request = objectStore.get(entryName);\r\n \r\n //this.log.log('IDB get:', fileName, request);\r\n } catch(err) {\r\n this.log.error('get error:', err, entryName, request, request.error);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n this.log.error('get request not finished!', entryName, request);\r\n reject();\r\n }, 3000);\r\n\r\n request.onsuccess = function(event) {\r\n const result = request.result;\r\n if(result === undefined) {\r\n reject('NO_ENTRY_FOUND');\r\n } /* else if(typeof result === 'string' &&\r\n result.substr(0, 5) === 'data:') {\r\n resolve(dataUrlToBlob(result));\r\n } */else {\r\n resolve(result);\r\n }\r\n\r\n clearTimeout(timeout);\r\n }\r\n \r\n request.onerror = () => {\r\n clearTimeout(timeout);\r\n reject();\r\n };\r\n });\r\n });\r\n }\r\n\r\n /* public getAllKeys(): Promise<Array<string>> {\r\n console.time('getAllEntries');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.getAllKeys();\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var result = event.target.result;\r\n resolve(result);\r\n console.timeEnd('getAllEntries');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public isFileExists(fileName: string): Promise<boolean> {\r\n console.time('isFileExists');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.openCursor(fileName);\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var cursor = event.target.result;\r\n resolve(!!cursor);\r\n console.timeEnd('isFileExists');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public getFileWriter(fileName: string, mimeType: string) {\r\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n } */\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function copy<T>(obj: T): T {\r\n //in case of premitives\r\n if(obj === null || typeof(obj) !== \"object\") {\r\n return obj;\r\n }\r\n \r\n //date objects should be \r\n if(obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n \r\n //handle Array\r\n if(Array.isArray(obj)) {\r\n // @ts-ignore\r\n const clonedArr: T = obj.map(el => copy(el)) as any as T;\r\n return clonedArr;\r\n }\r\n \r\n //lastly, handle objects\r\n // @ts-ignore\r\n let clonedObj = new obj.constructor();\r\n for(var prop in obj){\r\n if(obj.hasOwnProperty(prop)) {\r\n clonedObj[prop] = copy(obj[prop]);\r\n }\r\n }\r\n return clonedObj;\r\n}\r\n\r\nexport function deepEqual(x: any, y: any): boolean {\r\n const ok = Object.keys, tx = typeof x, ty = typeof y;\r\n return x && y && tx === 'object' && tx === ty ? (\r\n ok(x).length === ok(y).length &&\r\n ok(x).every(key => deepEqual(x[key], y[key]))\r\n ) : (x === y);\r\n}\r\n\r\nexport function defineNotNumerableProperties(obj: {[key: string]: any}, names: string[]) {\r\n //const perf = performance.now();\r\n const props = {writable: true, configurable: true};\r\n const out: {[name: string]: typeof props} = {};\r\n names.forEach(name => {\r\n if(obj[name] === undefined) {\r\n out[name] = props;\r\n }\r\n });\r\n Object.defineProperties(obj, out);\r\n //console.log('defineNotNumerableProperties time:', performance.now() - perf);\r\n}\r\n\r\nexport function getObjectKeysAndSort(object: any, sort: 'asc' | 'desc' = 'asc') {\r\n if(!object) return [];\r\n const ids = Object.keys(object).map(i => +i);\r\n if(sort === 'asc') return ids.sort((a, b) => a - b);\r\n else return ids.sort((a, b) => b - a);\r\n}\r\n\r\nexport function safeReplaceObject(wasObject: any, newObject: any) {\r\n if(!wasObject) {\r\n return newObject;\r\n }\r\n\r\n for(var key in wasObject) {\r\n if(!newObject.hasOwnProperty(key) && key.charAt(0) !== '$') {\r\n delete wasObject[key];\r\n }\r\n }\r\n\r\n for(var key in newObject) {\r\n //if (newObject.hasOwnProperty(key)) { // useless\r\n wasObject[key] = newObject[key];\r\n //}\r\n }\r\n \r\n return wasObject;\r\n}\r\n\r\n/**\r\n * Will be used for FILE_REFERENCE_EXPIRED\r\n * @param key \r\n * @param wasObject \r\n * @param newObject \r\n */\r\nexport function safeReplaceArrayInObject<K>(key: K, wasObject: any, newObject: any) {\r\n if('byteLength' in newObject[key]) { // Uint8Array\r\n newObject[key] = [...newObject[key]];\r\n }\r\n\r\n if(wasObject && wasObject[key] !== newObject[key]) {\r\n wasObject[key].length = newObject[key].length;\r\n (newObject[key] as any[]).forEach((v, i) => {\r\n wasObject[key][i] = v;\r\n });\r\n\r\n /* wasObject[key].set(newObject[key]); */\r\n newObject[key] = wasObject[key];\r\n }\r\n}\r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\nexport function getDeepProperty(object: any, key: string) {\r\n const splitted = key.split('.');\r\n let o: any = object;\r\n splitted.forEach(key => {\r\n // @ts-ignore\r\n o = o[key];\r\n });\r\n \r\n return o;\r\n}\r\n\r\nexport function setDeepProperty(object: any, key: string, value: any) {\r\n const splitted = key.split('.');\r\n getDeepProperty(object, splitted.slice(0, -1).join('.'))[splitted.pop()] = value;\r\n}\r\n\r\nexport function validateInitObject(initObject: any, currentObject: any) {\r\n for(const i in initObject) {\r\n if(typeof(currentObject[i]) !== typeof(initObject[i])) {\r\n currentObject[i] = copy(initObject[i]);\r\n } else if(isObject(initObject[i])) {\r\n validateInitObject(initObject[i], currentObject[i]);\r\n }\r\n }\r\n}\r\n\r\nexport function safeAssign(object: any, fromObject: any) {\r\n if(!fromObject) return;\r\n \r\n for(let i in fromObject) {\r\n if(fromObject[i] !== undefined) {\r\n object[i] = fromObject[i];\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { ChatSavedPosition } from './appManagers/appImManager';\r\nimport type { State } from './appManagers/appStateManager';\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport { LangPackDifference } from '../layer';\r\nimport AppStorage from './storage';\r\n\r\nconst sessionStorage = new AppStorage<{\r\n dc: number,\r\n user_auth: number,\r\n dc1_auth_key: any,\r\n dc2_auth_key: any,\r\n dc3_auth_key: any,\r\n dc4_auth_key: any,\r\n dc5_auth_key: any,\r\n max_seen_msg: number,\r\n server_time_offset: number,\r\n\r\n chatPositions: {\r\n [peerId_threadId: string]: ChatSavedPosition\r\n },\r\n langPack: LangPackDifference\r\n} & State>({\r\n storeName: 'session'\r\n});\r\nMOUNT_CLASS_TO.appStorage = sessionStorage;\r\nexport default sessionStorage;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { DatabaseStore, DatabaseStoreName } from \"../config/database\";\r\nimport IDBStorage, { IDBOptions } from \"./idb\";\r\n\r\nexport default class AppStorage<Storage extends Record<string, any>/* Storage extends {[name: string]: any} *//* Storage extends Record<string, any> */> {\r\n private storage: IDBStorage;//new CacheStorageController('session');\r\n\r\n //private cache: Partial<{[key: string]: Storage[typeof key]}> = {};\r\n private cache: Partial<Storage> = {};\r\n private useStorage = true;\r\n\r\n constructor(storageOptions: Omit<IDBOptions, 'storeName' | 'stores'> & {stores?: DatabaseStore[], storeName: DatabaseStoreName}) {\r\n this.storage = new IDBStorage(storageOptions);\r\n }\r\n\r\n public getCache() {\r\n return this.cache;\r\n }\r\n\r\n public getFromCache(key: keyof Storage) {\r\n return this.cache[key];\r\n }\r\n\r\n public setToCache(key: keyof Storage, value: Storage[typeof key]) {\r\n return this.cache[key] = value;\r\n }\r\n\r\n public async get(key: keyof Storage): Promise<Storage[typeof key]> {\r\n if(this.cache.hasOwnProperty(key)) {\r\n return this.getFromCache(key);\r\n } else if(this.useStorage) {\r\n let value: any;\r\n try {\r\n value = await this.storage.get(key as string);\r\n //console.log('[AS]: get result:', key, value);\r\n //value = JSON.parse(value);\r\n } catch(e) {\r\n if(e !== 'NO_ENTRY_FOUND') {\r\n this.useStorage = false;\r\n console.error('[AS]: get error:', e, key, value);\r\n }\r\n }\r\n\r\n return this.cache[key] = value;\r\n } else {\r\n throw 'something went wrong';\r\n }\r\n }\r\n\r\n public async set(obj: Partial<Storage>, onlyLocal = false) {\r\n //console.log('storageSetValue', obj, callback, arguments);\r\n\r\n for(const key in obj) {\r\n if(obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n this.setToCache(key, value);\r\n\r\n // let perf = /* DEBUG */false ? performance.now() : 0;\r\n // value = JSON.stringify(value);\r\n\r\n // if(perf) {\r\n // let elapsedTime = performance.now() - perf;\r\n // if(elapsedTime > 10) {\r\n // console.warn('LocalStorage set: stringify time by JSON.stringify:', elapsedTime, key);\r\n // }\r\n // }\r\n \r\n /* perf = performance.now();\r\n value = stringify(value);\r\n console.log('LocalStorage set: stringify time by own stringify:', performance.now() - perf); */\r\n\r\n if(this.useStorage && !onlyLocal) {\r\n try {\r\n //console.log('setItem: will set', key/* , value */);\r\n //await this.cacheStorage.delete(key); // * try to prevent memory leak in Chrome leading to 'Unexpected internal error.'\r\n //await this.storage.save(key, new Response(value, {headers: {'Content-Type': 'application/json'}}));\r\n await this.storage.save(key, value);\r\n //console.log('setItem: have set', key/* , value */);\r\n } catch(e) {\r\n //this.useCS = false;\r\n console.error('[AS]: set error:', e, key/* , value */);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public async remove(key: keyof Storage, saveLocal = false) {\r\n /* if(!this.cache.hasOwnProperty(key)) {\r\n return;\r\n } */\r\n\r\n if(!saveLocal) {\r\n delete this.cache[key];\r\n }\r\n \r\n if(this.useStorage) {\r\n try {\r\n await this.storage.delete(key as string);\r\n } catch(e) {\r\n this.useStorage = false;\r\n console.error('[AS]: remove error:', e);\r\n }\r\n }\r\n }\r\n\r\n public clear() {\r\n return this.storage.deleteAll();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport type MTProtoConstructor = {\r\n id: number,\r\n predicate: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\nexport type MTProtoMethod = {\r\n id: number,\r\n method: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\nexport default {\"MTProto\":{\"constructors\":[{\"id\":\"481674261\",\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":\"85337187\",\"predicate\":\"resPQ\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"server_public_key_fingerprints\",\"type\":\"Vector<long>\"}],\"type\":\"ResPQ\"},{\"id\":2211011308,\"predicate\":\"p_q_inner_data\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"}],\"type\":\"P_Q_inner_data\"},{\"id\":2851430293,\"predicate\":\"p_q_inner_data_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":\"1013613780\",\"predicate\":\"p_q_inner_data_temp\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"expires_in\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":\"1459478408\",\"predicate\":\"p_q_inner_data_temp_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"},{\"name\":\"expires_in\",\"type\":\"int\"}],\"type\":\"P_Q_inner_d\"},{\"id\":\"2043348061\",\"predicate\":\"server_DH_params_fail\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash\",\"type\":\"int128\"}],\"type\":\"Server_DH_Params\"},{\"id\":3504867164,\"predicate\":\"server_DH_params_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_answer\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":3045658042,\"predicate\":\"server_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"dh_prime\",\"type\":\"bytes\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"server_time\",\"type\":\"int\"}],\"type\":\"Server_DH_inner_data\"},{\"id\":\"1715713620\",\"predicate\":\"client_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"retry_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"}],\"type\":\"Client_DH_Inner_Data\"},{\"id\":\"1003222836\",\"predicate\":\"dh_gen_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash1\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":\"1188831161\",\"predicate\":\"dh_gen_retry\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash2\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":2795351554,\"predicate\":\"dh_gen_fail\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash3\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":4082920705,\"predicate\":\"rpc_result\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"result\",\"type\":\"Object\"}],\"type\":\"RpcResult\"},{\"id\":\"558156313\",\"predicate\":\"rpc_error\",\"params\":[{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"error_message\",\"type\":\"string\"}],\"type\":\"RpcError\"},{\"id\":\"1579864942\",\"predicate\":\"rpc_answer_unknown\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":3447252358,\"predicate\":\"rpc_answer_dropped_running\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":2755319991,\"predicate\":\"rpc_answer_dropped\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seq_no\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"}],\"type\":\"RpcDropAnswer\"},{\"id\":\"155834844\",\"predicate\":\"future_salt\",\"params\":[{\"name\":\"valid_since\",\"type\":\"int\"},{\"name\":\"valid_until\",\"type\":\"int\"},{\"name\":\"salt\",\"type\":\"long\"}],\"type\":\"FutureSalt\"},{\"id\":2924480661,\"predicate\":\"future_salts\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"now\",\"type\":\"int\"},{\"name\":\"salts\",\"type\":\"vector<future_salt>\"}],\"type\":\"FutureSalts\"},{\"id\":\"880243653\",\"predicate\":\"pong\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":2663516424,\"predicate\":\"new_session_created\",\"params\":[{\"name\":\"first_msg_id\",\"type\":\"long\"},{\"name\":\"unique_id\",\"type\":\"long\"},{\"name\":\"server_salt\",\"type\":\"long\"}],\"type\":\"NewSession\"},{\"id\":\"1945237724\",\"predicate\":\"msg_container\",\"params\":[{\"name\":\"messages\",\"type\":\"vector<%Message>\"}],\"type\":\"MessageContainer\"},{\"id\":\"1538843921\",\"predicate\":\"message\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seqno\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"body\",\"type\":\"Object\"}],\"type\":\"Message\"},{\"id\":3764405938,\"predicate\":\"msg_copy\",\"params\":[{\"name\":\"orig_message\",\"type\":\"Message\"}],\"type\":\"MessageCopy\"},{\"id\":\"812830625\",\"predicate\":\"gzip_packed\",\"params\":[{\"name\":\"packed_data\",\"type\":\"bytes\"}],\"type\":\"Object\"},{\"id\":\"1658238041\",\"predicate\":\"msgs_ack\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"}],\"type\":\"MsgsAck\"},{\"id\":2817521681,\"predicate\":\"bad_msg_notification\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"}],\"type\":\"BadMsgNotification\"},{\"id\":3987424379,\"predicate\":\"bad_server_salt\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"new_server_salt\",\"type\":\"long\"}],\"type\":\"BadMsgNotification\"},{\"id\":\"2105940488\",\"predicate\":\"msg_resend_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"}],\"type\":\"MsgResendReq\"},{\"id\":2249243371,\"predicate\":\"msg_resend_ans_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"}],\"type\":\"MsgResendReq\"},{\"id\":3664378706,\"predicate\":\"msgs_state_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"}],\"type\":\"MsgsStateReq\"},{\"id\":\"81704317\",\"predicate\":\"msgs_state_info\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsStateInfo\"},{\"id\":2361446705,\"predicate\":\"msgs_all_info\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsAllInfo\"},{\"id\":\"661470918\",\"predicate\":\"msg_detailed_info\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":2157819615,\"predicate\":\"msg_new_detailed_info\",\"params\":[{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":\"1973679973\",\"predicate\":\"bind_auth_key_inner\",\"params\":[{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"temp_auth_key_id\",\"type\":\"long\"},{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"temp_session_id\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"}],\"type\":\"BindAuthKeyInner\"},{\"id\":4133544404,\"predicate\":\"destroy_auth_key_ok\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":\"178201177\",\"predicate\":\"destroy_auth_key_none\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":3926956819,\"predicate\":\"destroy_auth_key_fail\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":3793765884,\"predicate\":\"destroy_session_ok\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":\"1658015945\",\"predicate\":\"destroy_session_none\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"}],\"methods\":[{\"id\":\"1615239032\",\"method\":\"req_pq\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":3195965169,\"method\":\"req_pq_multi\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":3608339646,\"method\":\"req_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"public_key_fingerprint\",\"type\":\"long\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":4110704415,\"method\":\"set_client_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":\"1491380032\",\"method\":\"rpc_drop_answer\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"}],\"type\":\"RpcDropAnswer\"},{\"id\":3105996036,\"method\":\"get_future_salts\",\"params\":[{\"name\":\"num\",\"type\":\"int\"}],\"type\":\"FutureSalts\"},{\"id\":\"2059302892\",\"method\":\"ping\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":4081220492,\"method\":\"ping_delay_disconnect\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"},{\"name\":\"disconnect_delay\",\"type\":\"int\"}],\"type\":\"Pong\"},{\"id\":2459514271,\"method\":\"http_wait\",\"params\":[{\"name\":\"max_delay\",\"type\":\"int\"},{\"name\":\"wait_after\",\"type\":\"int\"},{\"name\":\"max_wait\",\"type\":\"int\"}],\"type\":\"HttpWait\"},{\"id\":3510849888,\"method\":\"destroy_auth_key\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":3880853798,\"method\":\"destroy_session\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"}]},\"API\":{\"constructors\":[{\"id\":3162085175,\"predicate\":\"boolFalse\",\"params\":[],\"type\":\"Bool\"},{\"id\":2574415285,\"predicate\":\"boolTrue\",\"params\":[],\"type\":\"Bool\"},{\"id\":\"1072550713\",\"predicate\":\"true\",\"params\":[],\"type\":\"True\"},{\"id\":\"481674261\",\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":3300522427,\"predicate\":\"error\",\"params\":[{\"name\":\"code\",\"type\":\"int\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"Error\"},{\"id\":\"1450380236\",\"predicate\":\"null\",\"params\":[],\"type\":\"Null\"},{\"id\":\"2134579434\",\"predicate\":\"inputPeerEmpty\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":\"2107670217\",\"predicate\":\"inputPeerSelf\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":\"396093539\",\"predicate\":\"inputPeerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":3112732367,\"predicate\":\"inputUserEmpty\",\"params\":[],\"type\":\"InputUser\"},{\"id\":4156666175,\"predicate\":\"inputUserSelf\",\"params\":[],\"type\":\"InputUser\"},{\"id\":4086478836,\"predicate\":\"inputPhoneContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"InputContact\"},{\"id\":4113560191,\"predicate\":\"inputFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"md5_checksum\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":2523198847,\"predicate\":\"inputMediaEmpty\",\"params\":[],\"type\":\"InputMedia\"},{\"id\":\"505969924\",\"predicate\":\"inputMediaUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector<InputDocument>\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":3015312949,\"predicate\":\"inputMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputPhoto\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":4190388548,\"predicate\":\"inputMediaGeoPoint\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"}],\"type\":\"InputMedia\"},{\"id\":4171988475,\"predicate\":\"inputMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":\"480546647\",\"predicate\":\"inputChatPhotoEmpty\",\"params\":[],\"type\":\"InputChatPhoto\"},{\"id\":3326243406,\"predicate\":\"inputChatUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"}],\"type\":\"InputChatPhoto\"},{\"id\":2303962423,\"predicate\":\"inputChatPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputChatPhoto\"},{\"id\":3837862870,\"predicate\":\"inputGeoPointEmpty\",\"params\":[],\"type\":\"InputGeoPoint\"},{\"id\":\"1210199983\",\"predicate\":\"inputGeoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"InputGeoPoint\"},{\"id\":\"483901197\",\"predicate\":\"inputPhotoEmpty\",\"params\":[],\"type\":\"InputPhoto\"},{\"id\":\"1001634122\",\"predicate\":\"inputPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputPhoto\"},{\"id\":3755650017,\"predicate\":\"inputFileLocation\",\"params\":[{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputFileLocation\"},{\"id\":2645671021,\"predicate\":\"peerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":3134252475,\"predicate\":\"peerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":2861972229,\"predicate\":\"storage.fileUnknown\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":\"1086091090\",\"predicate\":\"storage.filePartial\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":\"8322574\",\"predicate\":\"storage.fileJpeg\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":3403786975,\"predicate\":\"storage.fileGif\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":\"172975040\",\"predicate\":\"storage.filePng\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":2921222285,\"predicate\":\"storage.filePdf\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":\"1384777335\",\"predicate\":\"storage.fileMp3\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":\"1258941372\",\"predicate\":\"storage.fileMov\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":3016663268,\"predicate\":\"storage.fileMp4\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":\"276907596\",\"predicate\":\"storage.fileWebp\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":\"537022650\",\"predicate\":\"userEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"User\"},{\"id\":\"1326562017\",\"predicate\":\"userProfilePhotoEmpty\",\"params\":[],\"type\":\"UserProfilePhoto\"},{\"id\":\"1775479590\",\"predicate\":\"userProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"photo_small\",\"type\":\"FileLocation\"},{\"name\":\"photo_big\",\"type\":\"FileLocation\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"UserProfilePhoto\"},{\"id\":\"164646985\",\"predicate\":\"userStatusEmpty\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":3988339017,\"predicate\":\"userStatusOnline\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":\"9203775\",\"predicate\":\"userStatusOffline\",\"params\":[{\"name\":\"was_online\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":2611140608,\"predicate\":\"chatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Chat\"},{\"id\":\"1004149726\",\"predicate\":\"chat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"kicked\",\"type\":\"flags.1?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"deactivated\",\"type\":\"flags.5?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"migrated_to\",\"type\":\"flags.6?InputChannel\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"}],\"type\":\"Chat\"},{\"id\":\"120753115\",\"predicate\":\"chatForbidden\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Chat\"},{\"id\":2317232515,\"predicate\":\"chatFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_set_username\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants\",\"type\":\"ChatParticipants\"},{\"name\":\"chat_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.13?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"flags.3?Vector<BotInfo>\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"call\",\"type\":\"flags.12?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.15?Peer\"}],\"type\":\"ChatFull\"},{\"id\":3369552190,\"predicate\":\"chatParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":4237298731,\"predicate\":\"chatParticipantsForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"self_participant\",\"type\":\"flags.0?ChatParticipant\"}],\"type\":\"ChatParticipants\"},{\"id\":\"1061556205\",\"predicate\":\"chatParticipants\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector<ChatParticipant>\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"ChatParticipants\"},{\"id\":\"935395612\",\"predicate\":\"chatPhotoEmpty\",\"params\":[],\"type\":\"ChatPhoto\"},{\"id\":3523977020,\"predicate\":\"chatPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_small\",\"type\":\"FileLocation\"},{\"name\":\"photo_big\",\"type\":\"FileLocation\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"ChatPhoto\"},{\"id\":2426849924,\"predicate\":\"messageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"peer_id\",\"type\":\"flags.0?Peer\"}],\"type\":\"Message\"},{\"id\":3169027026,\"predicate\":\"message\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"from_scheduled\",\"type\":\"flags.18?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"edit_hide\",\"type\":\"flags.21?true\"},{\"name\":\"pinned\",\"type\":\"flags.24?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.6?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"name\":\"views\",\"type\":\"flags.10?int\"},{\"name\":\"forwards\",\"type\":\"flags.10?int\"},{\"name\":\"replies\",\"type\":\"flags.23?MessageReplies\"},{\"name\":\"edit_date\",\"type\":\"flags.15?int\"},{\"name\":\"post_author\",\"type\":\"flags.16?string\"},{\"name\":\"grouped_id\",\"type\":\"flags.17?long\"},{\"name\":\"restriction_reason\",\"type\":\"flags.22?Vector<RestrictionReason>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":\"721967202\",\"predicate\":\"messageService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"MessageAction\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":\"1038967584\",\"predicate\":\"messageMediaEmpty\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":\"1766936791\",\"predicate\":\"messageMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":\"1457575028\",\"predicate\":\"messageMediaGeo\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"}],\"type\":\"MessageMedia\"},{\"id\":3421653312,\"predicate\":\"messageMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageMedia\"},{\"id\":2676290718,\"predicate\":\"messageMediaUnsupported\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":3064919984,\"predicate\":\"messageActionEmpty\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":2791541658,\"predicate\":\"messageActionChatCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"MessageAction\"},{\"id\":3047280218,\"predicate\":\"messageActionChatEditTitle\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":\"2144015272\",\"predicate\":\"messageActionChatEditPhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":2514746351,\"predicate\":\"messageActionChatDeletePhoto\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":\"1217033015\",\"predicate\":\"messageActionChatAddUser\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"MessageAction\"},{\"id\":2997787404,\"predicate\":\"messageActionChatDeleteUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":\"739712882\",\"predicate\":\"dialog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"unread_mark\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"flags.1?DraftMessage\"},{\"name\":\"folder_id\",\"type\":\"flags.4?int\"}],\"type\":\"Dialog\"},{\"id\":\"590459437\",\"predicate\":\"photoEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Photo\"},{\"id\":4212750949,\"predicate\":\"photo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_stickers\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector<PhotoSize>\"},{\"name\":\"video_sizes\",\"type\":\"flags.1?Vector<VideoSize>\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"Photo\"},{\"id\":\"236446268\",\"predicate\":\"photoSizeEmpty\",\"params\":[{\"name\":\"type\",\"type\":\"string\"}],\"type\":\"PhotoSize\"},{\"id\":\"2009052699\",\"predicate\":\"photoSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"location\",\"type\":\"FileLocation\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"}],\"type\":\"PhotoSize\"},{\"id\":3920049402,\"predicate\":\"photoCachedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"location\",\"type\":\"FileLocation\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":\"286776671\",\"predicate\":\"geoPointEmpty\",\"params\":[],\"type\":\"GeoPoint\"},{\"id\":2997024355,\"predicate\":\"geoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"GeoPoint\"},{\"id\":\"1577067778\",\"predicate\":\"auth.sentCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"auth.SentCodeType\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"next_type\",\"type\":\"flags.1?auth.CodeType\"},{\"name\":\"timeout\",\"type\":\"flags.2?int\"}],\"type\":\"auth.SentCode\"},{\"id\":3439659286,\"predicate\":\"auth.authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"auth.Authorization\"},{\"id\":3751189549,\"predicate\":\"auth.exportedAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":3099351820,\"predicate\":\"inputNotifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputNotifyPeer\"},{\"id\":\"423314455\",\"predicate\":\"inputNotifyUsers\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":\"1251338318\",\"predicate\":\"inputNotifyChats\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":2621249934,\"predicate\":\"inputPeerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?string\"}],\"type\":\"InputPeerNotifySettings\"},{\"id\":2941295904,\"predicate\":\"peerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?string\"}],\"type\":\"PeerNotifySettings\"},{\"id\":\"1933519201\",\"predicate\":\"peerSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"report_spam\",\"type\":\"flags.0?true\"},{\"name\":\"add_contact\",\"type\":\"flags.1?true\"},{\"name\":\"block_contact\",\"type\":\"flags.2?true\"},{\"name\":\"share_contact\",\"type\":\"flags.3?true\"},{\"name\":\"need_contacts_exception\",\"type\":\"flags.4?true\"},{\"name\":\"report_geo\",\"type\":\"flags.5?true\"},{\"name\":\"autoarchived\",\"type\":\"flags.7?true\"},{\"name\":\"invite_members\",\"type\":\"flags.8?true\"},{\"name\":\"geo_distance\",\"type\":\"flags.6?int\"}],\"type\":\"PeerSettings\"},{\"id\":2755118061,\"predicate\":\"wallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"pattern\",\"type\":\"flags.3?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"Document\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":\"1490799288\",\"predicate\":\"inputReportReasonSpam\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":\"505595789\",\"predicate\":\"inputReportReasonViolence\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":\"777640226\",\"predicate\":\"inputReportReasonPornography\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":2918469347,\"predicate\":\"inputReportReasonChildAbuse\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":3252986545,\"predicate\":\"inputReportReasonOther\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":\"328899191\",\"predicate\":\"userFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"phone_calls_available\",\"type\":\"flags.4?true\"},{\"name\":\"phone_calls_private\",\"type\":\"flags.5?true\"},{\"name\":\"can_pin_message\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.12?true\"},{\"name\":\"video_calls_available\",\"type\":\"flags.13?true\"},{\"name\":\"user\",\"type\":\"User\"},{\"name\":\"about\",\"type\":\"flags.1?string\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"profile_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"bot_info\",\"type\":\"flags.3?BotInfo\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"common_chats_count\",\"type\":\"int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"}],\"type\":\"UserFull\"},{\"id\":4178692500,\"predicate\":\"contact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"mutual\",\"type\":\"Bool\"}],\"type\":\"Contact\"},{\"id\":3489825848,\"predicate\":\"importedContact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"client_id\",\"type\":\"long\"}],\"type\":\"ImportedContact\"},{\"id\":3546811489,\"predicate\":\"contactStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"ContactStatus\"},{\"id\":3075189202,\"predicate\":\"contacts.contactsNotModified\",\"params\":[],\"type\":\"contacts.Contacts\"},{\"id\":3941105218,\"predicate\":\"contacts.contacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector<Contact>\"},{\"name\":\"saved_count\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Contacts\"},{\"id\":\"2010127419\",\"predicate\":\"contacts.importedContacts\",\"params\":[{\"name\":\"imported\",\"type\":\"Vector<ImportedContact>\"},{\"name\":\"popular_invites\",\"type\":\"Vector<PopularContact>\"},{\"name\":\"retry_contacts\",\"type\":\"Vector<long>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":\"182326673\",\"predicate\":\"contacts.blocked\",\"params\":[{\"name\":\"blocked\",\"type\":\"Vector<PeerBlocked>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Blocked\"},{\"id\":3781575060,\"predicate\":\"contacts.blockedSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"blocked\",\"type\":\"Vector<PeerBlocked>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Blocked\"},{\"id\":\"364538944\",\"predicate\":\"messages.dialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector<Dialog>\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Dialogs\"},{\"id\":\"1910543603\",\"predicate\":\"messages.dialogsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"dialogs\",\"type\":\"Vector<Dialog>\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Dialogs\"},{\"id\":2356252295,\"predicate\":\"messages.messages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Messages\"},{\"id\":\"978610270\",\"predicate\":\"messages.messagesSlice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"next_rate\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Messages\"},{\"id\":\"1694474197\",\"predicate\":\"messages.chats\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<Chat>\"}],\"type\":\"messages.Chats\"},{\"id\":3856126364,\"predicate\":\"messages.chatFull\",\"params\":[{\"name\":\"full_chat\",\"type\":\"ChatFull\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ChatFull\"},{\"id\":3025955281,\"predicate\":\"messages.affectedHistory\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":\"1474492012\",\"predicate\":\"inputMessagesFilterEmpty\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2517214492,\"predicate\":\"inputMessagesFilterPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2680163941,\"predicate\":\"inputMessagesFilterVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":\"1458172132\",\"predicate\":\"inputMessagesFilterPhotoVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2665345416,\"predicate\":\"inputMessagesFilterDocument\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":\"2129714567\",\"predicate\":\"inputMessagesFilterUrl\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":4291323271,\"predicate\":\"inputMessagesFilterGif\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":\"522914557\",\"predicate\":\"updateNewMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"1318109142\",\"predicate\":\"updateMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":2718806245,\"predicate\":\"updateDeleteMessages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"1548249383\",\"predicate\":\"updateUserTyping\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":2261441388,\"predicate\":\"updateChatUserTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":\"125178264\",\"predicate\":\"updateChatParticipants\",\"params\":[{\"name\":\"participants\",\"type\":\"ChatParticipants\"}],\"type\":\"Update\"},{\"id\":\"469489699\",\"predicate\":\"updateUserStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"Update\"},{\"id\":2805148531,\"predicate\":\"updateUserName\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":2503031564,\"predicate\":\"updateUserPhoto\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"UserProfilePhoto\"},{\"name\":\"previous\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":2775329342,\"predicate\":\"updates.state\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"}],\"type\":\"updates.State\"},{\"id\":\"1567990072\",\"predicate\":\"updates.differenceEmpty\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":\"16030880\",\"predicate\":\"updates.difference\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector<Message>\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector<EncryptedMessage>\"},{\"name\":\"other_updates\",\"type\":\"Vector<Update>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":2835028353,\"predicate\":\"updates.differenceSlice\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector<Message>\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector<EncryptedMessage>\"},{\"name\":\"other_updates\",\"type\":\"Vector<Update>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"intermediate_state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":3809980286,\"predicate\":\"updatesTooLong\",\"params\":[],\"type\":\"Updates\"},{\"id\":4210030643,\"predicate\":\"updateShortMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":\"290961496\",\"predicate\":\"updateShortChatMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"int\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":\"2027216577\",\"predicate\":\"updateShort\",\"params\":[{\"name\":\"update\",\"type\":\"Update\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":\"1918567619\",\"predicate\":\"updatesCombined\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector<Update>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq_start\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":\"1957577280\",\"predicate\":\"updates\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector<Update>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2378853029,\"predicate\":\"photos.photos\",\"params\":[{\"name\":\"photos\",\"type\":\"Vector<Photo>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"photos.Photos\"},{\"id\":\"352657236\",\"predicate\":\"photos.photosSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"photos\",\"type\":\"Vector<Photo>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"photos.Photos\"},{\"id\":\"539045032\",\"predicate\":\"photos.photo\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"photos.Photo\"},{\"id\":\"157948117\",\"predicate\":\"upload.file\",\"params\":[{\"name\":\"type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.File\"},{\"id\":\"414687501\",\"predicate\":\"dcOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"ipv6\",\"type\":\"flags.0?true\"},{\"name\":\"media_only\",\"type\":\"flags.1?true\"},{\"name\":\"tcpo_only\",\"type\":\"flags.2?true\"},{\"name\":\"cdn\",\"type\":\"flags.3?true\"},{\"name\":\"static\",\"type\":\"flags.4?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"ip_address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"flags.10?bytes\"}],\"type\":\"DcOption\"},{\"id\":\"856375399\",\"predicate\":\"config\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phonecalls_enabled\",\"type\":\"flags.1?true\"},{\"name\":\"default_p2p_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"preload_featured_stickers\",\"type\":\"flags.4?true\"},{\"name\":\"ignore_phone_entities\",\"type\":\"flags.5?true\"},{\"name\":\"revoke_pm_inbox\",\"type\":\"flags.6?true\"},{\"name\":\"blocked_mode\",\"type\":\"flags.8?true\"},{\"name\":\"pfs_enabled\",\"type\":\"flags.13?true\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"test_mode\",\"type\":\"Bool\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"dc_options\",\"type\":\"Vector<DcOption>\"},{\"name\":\"dc_txt_domain_name\",\"type\":\"string\"},{\"name\":\"chat_size_max\",\"type\":\"int\"},{\"name\":\"megagroup_size_max\",\"type\":\"int\"},{\"name\":\"forwarded_count_max\",\"type\":\"int\"},{\"name\":\"online_update_period_ms\",\"type\":\"int\"},{\"name\":\"offline_blur_timeout_ms\",\"type\":\"int\"},{\"name\":\"offline_idle_timeout_ms\",\"type\":\"int\"},{\"name\":\"online_cloud_timeout_ms\",\"type\":\"int\"},{\"name\":\"notify_cloud_delay_ms\",\"type\":\"int\"},{\"name\":\"notify_default_delay_ms\",\"type\":\"int\"},{\"name\":\"push_chat_period_ms\",\"type\":\"int\"},{\"name\":\"push_chat_limit\",\"type\":\"int\"},{\"name\":\"saved_gifs_limit\",\"type\":\"int\"},{\"name\":\"edit_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_pm_time_limit\",\"type\":\"int\"},{\"name\":\"rating_e_decay\",\"type\":\"int\"},{\"name\":\"stickers_recent_limit\",\"type\":\"int\"},{\"name\":\"stickers_faved_limit\",\"type\":\"int\"},{\"name\":\"channels_read_media_period\",\"type\":\"int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"pinned_dialogs_count_max\",\"type\":\"int\"},{\"name\":\"pinned_infolder_count_max\",\"type\":\"int\"},{\"name\":\"call_receive_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_ring_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_connect_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_packet_timeout_ms\",\"type\":\"int\"},{\"name\":\"me_url_prefix\",\"type\":\"string\"},{\"name\":\"autoupdate_url_prefix\",\"type\":\"flags.7?string\"},{\"name\":\"gif_search_username\",\"type\":\"flags.9?string\"},{\"name\":\"venue_search_username\",\"type\":\"flags.10?string\"},{\"name\":\"img_search_username\",\"type\":\"flags.11?string\"},{\"name\":\"static_maps_provider\",\"type\":\"flags.12?string\"},{\"name\":\"caption_length_max\",\"type\":\"int\"},{\"name\":\"message_length_max\",\"type\":\"int\"},{\"name\":\"webfile_dc_id\",\"type\":\"int\"},{\"name\":\"suggested_lang_code\",\"type\":\"flags.2?string\"},{\"name\":\"lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"base_lang_pack_version\",\"type\":\"flags.2?int\"}],\"type\":\"Config\"},{\"id\":2384074613,\"predicate\":\"nearestDc\",\"params\":[{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"nearest_dc\",\"type\":\"int\"}],\"type\":\"NearestDc\"},{\"id\":\"497489295\",\"predicate\":\"help.appUpdate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_not_skip\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"help.AppUpdate\"},{\"id\":3294258486,\"predicate\":\"help.noAppUpdate\",\"params\":[],\"type\":\"help.AppUpdate\"},{\"id\":\"415997816\",\"predicate\":\"help.inviteText\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"help.InviteText\"},{\"id\":\"314359194\",\"predicate\":\"updateNewEncryptedMessage\",\"params\":[{\"name\":\"message\",\"type\":\"EncryptedMessage\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"386986326\",\"predicate\":\"updateEncryptedChatTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3030575245,\"predicate\":\"updateEncryption\",\"params\":[{\"name\":\"chat\",\"type\":\"EncryptedChat\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"956179895\",\"predicate\":\"updateEncryptedMessagesRead\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2877210784,\"predicate\":\"encryptedChatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":\"1006044124\",\"predicate\":\"encryptedChatWaiting\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":\"1651608194\",\"predicate\":\"encryptedChatRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":4199992886,\"predicate\":\"encryptedChat\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":\"505183301\",\"predicate\":\"encryptedChatDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"history_deleted\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":4047615457,\"predicate\":\"inputEncryptedChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedChat\"},{\"id\":3256830334,\"predicate\":\"encryptedFileEmpty\",\"params\":[],\"type\":\"EncryptedFile\"},{\"id\":\"1248893260\",\"predicate\":\"encryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"EncryptedFile\"},{\"id\":\"406307684\",\"predicate\":\"inputEncryptedFileEmpty\",\"params\":[],\"type\":\"InputEncryptedFile\"},{\"id\":\"1690108678\",\"predicate\":\"inputEncryptedFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":\"1511503333\",\"predicate\":\"inputEncryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedFile\"},{\"id\":4112735573,\"predicate\":\"inputEncryptedFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":3977822488,\"predicate\":\"encryptedMessage\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"EncryptedMessage\"},{\"id\":\"594758406\",\"predicate\":\"encryptedMessageService\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"EncryptedMessage\"},{\"id\":3236054581,\"predicate\":\"messages.dhConfigNotModified\",\"params\":[{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":\"740433629\",\"predicate\":\"messages.dhConfig\",\"params\":[{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":\"1443858741\",\"predicate\":\"messages.sentEncryptedMessage\",\"params\":[{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":2492727090,\"predicate\":\"messages.sentEncryptedFile\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":4199484341,\"predicate\":\"inputFileBig\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":\"767652808\",\"predicate\":\"inputEncryptedFileBigUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":3930787420,\"predicate\":\"updateChatParticipantAdd\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"1851755554\",\"predicate\":\"updateChatParticipantDelete\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2388564083,\"predicate\":\"updateDcOptions\",\"params\":[{\"name\":\"dc_options\",\"type\":\"Vector<DcOption>\"}],\"type\":\"Update\"},{\"id\":\"1530447553\",\"predicate\":\"inputMediaUploadedDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nosound_video\",\"type\":\"flags.3?true\"},{\"name\":\"force_file\",\"type\":\"flags.4?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector<InputDocument>\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":\"860303448\",\"predicate\":\"inputMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"},{\"name\":\"query\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":2628808919,\"predicate\":\"messageMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":\"1928391342\",\"predicate\":\"inputDocumentEmpty\",\"params\":[],\"type\":\"InputDocument\"},{\"id\":\"448771445\",\"predicate\":\"inputDocument\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputDocument\"},{\"id\":3134223748,\"predicate\":\"inputDocumentFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":\"922273905\",\"predicate\":\"documentEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Document\"},{\"id\":\"512177195\",\"predicate\":\"document\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"thumbs\",\"type\":\"flags.0?Vector<PhotoSize>\"},{\"name\":\"video_thumbs\",\"type\":\"flags.1?Vector<VideoSize>\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"Document\"},{\"id\":\"398898678\",\"predicate\":\"help.support\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"help.Support\"},{\"id\":2681474008,\"predicate\":\"notifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"NotifyPeer\"},{\"id\":3033021260,\"predicate\":\"notifyUsers\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":3221737155,\"predicate\":\"notifyChats\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":3200411887,\"predicate\":\"updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"NotifyPeer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"}],\"type\":\"Update\"},{\"id\":\"381645902\",\"predicate\":\"sendMessageTypingAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":4250847477,\"predicate\":\"sendMessageCancelAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2710034031,\"predicate\":\"sendMessageRecordVideoAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":3916839660,\"predicate\":\"sendMessageUploadVideoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":3576656887,\"predicate\":\"sendMessageRecordAudioAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":4082227115,\"predicate\":\"sendMessageUploadAudioAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":3520285222,\"predicate\":\"sendMessageUploadPhotoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":2852968932,\"predicate\":\"sendMessageUploadDocumentAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":\"393186209\",\"predicate\":\"sendMessageGeoLocationAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":\"1653390447\",\"predicate\":\"sendMessageChooseContactAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":3004386717,\"predicate\":\"contacts.found\",\"params\":[{\"name\":\"my_results\",\"type\":\"Vector<Peer>\"},{\"name\":\"results\",\"type\":\"Vector<Peer>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Found\"},{\"id\":3957614617,\"predicate\":\"updateServiceNotification\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"inbox_date\",\"type\":\"flags.1?int\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"MessageMedia\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"}],\"type\":\"Update\"},{\"id\":3798942449,\"predicate\":\"userStatusRecently\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":\"129960444\",\"predicate\":\"userStatusLastWeek\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":\"2011940674\",\"predicate\":\"userStatusLastMonth\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":3996854058,\"predicate\":\"updatePrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"PrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector<PrivacyRule>\"}],\"type\":\"Update\"},{\"id\":\"1335282456\",\"predicate\":\"inputPrivacyKeyStatusTimestamp\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":3157175088,\"predicate\":\"privacyKeyStatusTimestamp\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":\"218751099\",\"predicate\":\"inputPrivacyValueAllowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":\"407582158\",\"predicate\":\"inputPrivacyValueAllowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":\"320652927\",\"predicate\":\"inputPrivacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<InputUser>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":\"195371015\",\"predicate\":\"inputPrivacyValueDisallowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":3597362889,\"predicate\":\"inputPrivacyValueDisallowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":2417034343,\"predicate\":\"inputPrivacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<InputUser>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":4294843308,\"predicate\":\"privacyValueAllowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":\"1698855810\",\"predicate\":\"privacyValueAllowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":\"1297858060\",\"predicate\":\"privacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":4169726490,\"predicate\":\"privacyValueDisallowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":2339628899,\"predicate\":\"privacyValueDisallowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":\"209668535\",\"predicate\":\"privacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":\"1352683077\",\"predicate\":\"account.privacyRules\",\"params\":[{\"name\":\"rules\",\"type\":\"Vector<PrivacyRule>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"account.PrivacyRules\"},{\"id\":3100684255,\"predicate\":\"accountDaysTTL\",\"params\":[{\"name\":\"days\",\"type\":\"int\"}],\"type\":\"AccountDaysTTL\"},{\"id\":\"314130811\",\"predicate\":\"updateUserPhone\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":\"1815593308\",\"predicate\":\"documentAttributeImageSize\",\"params\":[{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":\"297109817\",\"predicate\":\"documentAttributeAnimated\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":\"1662637586\",\"predicate\":\"documentAttributeSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"mask\",\"type\":\"flags.1?true\"},{\"name\":\"alt\",\"type\":\"string\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"DocumentAttribute\"},{\"id\":\"250621158\",\"predicate\":\"documentAttributeVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"round_message\",\"type\":\"flags.0?true\"},{\"name\":\"supports_streaming\",\"type\":\"flags.1?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":2555574726,\"predicate\":\"documentAttributeAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"voice\",\"type\":\"flags.10?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"},{\"name\":\"waveform\",\"type\":\"flags.2?bytes\"}],\"type\":\"DocumentAttribute\"},{\"id\":\"358154344\",\"predicate\":\"documentAttributeFilename\",\"params\":[{\"name\":\"file_name\",\"type\":\"string\"}],\"type\":\"DocumentAttribute\"},{\"id\":4050950690,\"predicate\":\"messages.stickersNotModified\",\"params\":[],\"type\":\"messages.Stickers\"},{\"id\":3831077821,\"predicate\":\"messages.stickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"stickers\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.Stickers\"},{\"id\":\"313694676\",\"predicate\":\"stickerPack\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"documents\",\"type\":\"Vector<long>\"}],\"type\":\"StickerPack\"},{\"id\":3898999491,\"predicate\":\"messages.allStickersNotModified\",\"params\":[],\"type\":\"messages.AllStickers\"},{\"id\":3992797279,\"predicate\":\"messages.allStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSet>\"}],\"type\":\"messages.AllStickers\"},{\"id\":2627162079,\"predicate\":\"updateReadHistoryInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"791617983\",\"predicate\":\"updateReadHistoryOutbox\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2228326789,\"predicate\":\"messages.affectedMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":\"2139689491\",\"predicate\":\"updateWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3943987176,\"predicate\":\"webPageEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"WebPage\"},{\"id\":3313949212,\"predicate\":\"webPagePending\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":3902555570,\"predicate\":\"webPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"display_url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"type\",\"type\":\"flags.0?string\"},{\"name\":\"site_name\",\"type\":\"flags.1?string\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"embed_url\",\"type\":\"flags.5?string\"},{\"name\":\"embed_type\",\"type\":\"flags.5?string\"},{\"name\":\"embed_width\",\"type\":\"flags.6?int\"},{\"name\":\"embed_height\",\"type\":\"flags.6?int\"},{\"name\":\"duration\",\"type\":\"flags.7?int\"},{\"name\":\"author\",\"type\":\"flags.8?string\"},{\"name\":\"document\",\"type\":\"flags.9?Document\"},{\"name\":\"cached_page\",\"type\":\"flags.10?Page\"},{\"name\":\"attributes\",\"type\":\"flags.12?Vector<WebPageAttribute>\"}],\"type\":\"WebPage\"},{\"id\":2737690112,\"predicate\":\"messageMediaWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"}],\"type\":\"MessageMedia\"},{\"id\":2902578717,\"predicate\":\"authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.0?true\"},{\"name\":\"official_app\",\"type\":\"flags.1?true\"},{\"name\":\"password_pending\",\"type\":\"flags.2?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"app_name\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"Authorization\"},{\"id\":\"307276766\",\"predicate\":\"account.authorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector<Authorization>\"}],\"type\":\"account.Authorizations\"},{\"id\":2904965624,\"predicate\":\"account.password\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_recovery\",\"type\":\"flags.0?true\"},{\"name\":\"has_secure_values\",\"type\":\"flags.1?true\"},{\"name\":\"has_password\",\"type\":\"flags.2?true\"},{\"name\":\"current_algo\",\"type\":\"flags.2?PasswordKdfAlgo\"},{\"name\":\"srp_B\",\"type\":\"flags.2?bytes\"},{\"name\":\"srp_id\",\"type\":\"flags.2?long\"},{\"name\":\"hint\",\"type\":\"flags.3?string\"},{\"name\":\"email_unconfirmed_pattern\",\"type\":\"flags.4?string\"},{\"name\":\"new_algo\",\"type\":\"PasswordKdfAlgo\"},{\"name\":\"new_secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_random\",\"type\":\"bytes\"}],\"type\":\"account.Password\"},{\"id\":2589733861,\"predicate\":\"account.passwordSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"email\",\"type\":\"flags.0?string\"},{\"name\":\"secure_settings\",\"type\":\"flags.1?SecureSecretSettings\"}],\"type\":\"account.PasswordSettings\"},{\"id\":3258394569,\"predicate\":\"account.passwordInputSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"new_algo\",\"type\":\"flags.0?PasswordKdfAlgo\"},{\"name\":\"new_password_hash\",\"type\":\"flags.0?bytes\"},{\"name\":\"hint\",\"type\":\"flags.0?string\"},{\"name\":\"email\",\"type\":\"flags.1?string\"},{\"name\":\"new_secure_settings\",\"type\":\"flags.2?SecureSecretSettings\"}],\"type\":\"account.PasswordInputSettings\"},{\"id\":\"326715557\",\"predicate\":\"auth.passwordRecovery\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"}],\"type\":\"auth.PasswordRecovery\"},{\"id\":3242007569,\"predicate\":\"inputMediaVenue\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":\"784356159\",\"predicate\":\"messageMediaVenue\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":2743383929,\"predicate\":\"receivedNotifyMessage\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"flags\",\"type\":\"int\"}],\"type\":\"ReceivedNotifyMessage\"},{\"id\":\"1847917725\",\"predicate\":\"chatInviteExported\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.0?true\"},{\"name\":\"permanent\",\"type\":\"flags.5?true\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"start_date\",\"type\":\"flags.4?int\"},{\"name\":\"expire_date\",\"type\":\"flags.1?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.2?int\"},{\"name\":\"usage\",\"type\":\"flags.3?int\"}],\"type\":\"ExportedChatInvite\"},{\"id\":\"1516793212\",\"predicate\":\"chatInviteAlready\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"}],\"type\":\"ChatInvite\"},{\"id\":3754096014,\"predicate\":\"chatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"flags.0?true\"},{\"name\":\"broadcast\",\"type\":\"flags.1?true\"},{\"name\":\"public\",\"type\":\"flags.2?true\"},{\"name\":\"megagroup\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"flags.4?Vector<User>\"}],\"type\":\"ChatInvite\"},{\"id\":4171036136,\"predicate\":\"messageActionChatJoinedByLink\",\"params\":[{\"name\":\"inviter_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":\"1757493555\",\"predicate\":\"updateReadMessagesContents\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":4290128789,\"predicate\":\"inputStickerSetEmpty\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":2649203305,\"predicate\":\"inputStickerSetID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputStickerSet\"},{\"id\":2250033312,\"predicate\":\"inputStickerSetShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":\"1088567208\",\"predicate\":\"stickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archived\",\"type\":\"flags.1?true\"},{\"name\":\"official\",\"type\":\"flags.2?true\"},{\"name\":\"masks\",\"type\":\"flags.3?true\"},{\"name\":\"animated\",\"type\":\"flags.5?true\"},{\"name\":\"installed_date\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumbs\",\"type\":\"flags.4?Vector<PhotoSize>\"},{\"name\":\"thumb_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"StickerSet\"},{\"id\":3054118054,\"predicate\":\"messages.stickerSet\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector<StickerPack>\"},{\"name\":\"documents\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.StickerSet\"},{\"id\":2474924225,\"predicate\":\"user\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"self\",\"type\":\"flags.10?true\"},{\"name\":\"contact\",\"type\":\"flags.11?true\"},{\"name\":\"mutual_contact\",\"type\":\"flags.12?true\"},{\"name\":\"deleted\",\"type\":\"flags.13?true\"},{\"name\":\"bot\",\"type\":\"flags.14?true\"},{\"name\":\"bot_chat_history\",\"type\":\"flags.15?true\"},{\"name\":\"bot_nochats\",\"type\":\"flags.16?true\"},{\"name\":\"verified\",\"type\":\"flags.17?true\"},{\"name\":\"restricted\",\"type\":\"flags.18?true\"},{\"name\":\"min\",\"type\":\"flags.20?true\"},{\"name\":\"bot_inline_geo\",\"type\":\"flags.21?true\"},{\"name\":\"support\",\"type\":\"flags.23?true\"},{\"name\":\"scam\",\"type\":\"flags.24?true\"},{\"name\":\"apply_min_photo\",\"type\":\"flags.25?true\"},{\"name\":\"fake\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"flags.0?long\"},{\"name\":\"first_name\",\"type\":\"flags.1?string\"},{\"name\":\"last_name\",\"type\":\"flags.2?string\"},{\"name\":\"username\",\"type\":\"flags.3?string\"},{\"name\":\"phone\",\"type\":\"flags.4?string\"},{\"name\":\"photo\",\"type\":\"flags.5?UserProfilePhoto\"},{\"name\":\"status\",\"type\":\"flags.6?UserStatus\"},{\"name\":\"bot_info_version\",\"type\":\"flags.14?int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.18?Vector<RestrictionReason>\"},{\"name\":\"bot_inline_placeholder\",\"type\":\"flags.19?string\"},{\"name\":\"lang_code\",\"type\":\"flags.22?string\"}],\"type\":\"User\"},{\"id\":3262826695,\"predicate\":\"botCommand\",\"params\":[{\"name\":\"command\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"BotCommand\"},{\"id\":2565348666,\"predicate\":\"botInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector<BotCommand>\"}],\"type\":\"BotInfo\"},{\"id\":2734311552,\"predicate\":\"keyboardButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":\"2002815875\",\"predicate\":\"keyboardButtonRow\",\"params\":[{\"name\":\"buttons\",\"type\":\"Vector<KeyboardButton>\"}],\"type\":\"KeyboardButtonRow\"},{\"id\":2688441221,\"predicate\":\"replyKeyboardHide\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":4094724768,\"predicate\":\"replyKeyboardForceReply\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":\"889353612\",\"predicate\":\"replyKeyboardMarkup\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"resize\",\"type\":\"flags.0?true\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"rows\",\"type\":\"Vector<KeyboardButtonRow>\"}],\"type\":\"ReplyMarkup\"},{\"id\":\"2072935910\",\"predicate\":\"inputPeerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":3626575894,\"predicate\":\"inputUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":3146955413,\"predicate\":\"messageEntityUnknown\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":4194588573,\"predicate\":\"messageEntityMention\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"1868782349\",\"predicate\":\"messageEntityHashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"1827637959\",\"predicate\":\"messageEntityBotCommand\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"1859134776\",\"predicate\":\"messageEntityUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"1692693954\",\"predicate\":\"messageEntityEmail\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":3177253833,\"predicate\":\"messageEntityBold\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":2188348256,\"predicate\":\"messageEntityItalic\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"681706865\",\"predicate\":\"messageEntityCode\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"1938967520\",\"predicate\":\"messageEntityPre\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":\"1990644519\",\"predicate\":\"messageEntityTextUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":2417352961,\"predicate\":\"updateShortSentMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":4002160262,\"predicate\":\"inputChannelEmpty\",\"params\":[],\"type\":\"InputChannel\"},{\"id\":2951442734,\"predicate\":\"inputChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":3185435954,\"predicate\":\"peerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":\"548253432\",\"predicate\":\"inputPeerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":3541734942,\"predicate\":\"channel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"verified\",\"type\":\"flags.7?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"restricted\",\"type\":\"flags.9?true\"},{\"name\":\"signatures\",\"type\":\"flags.11?true\"},{\"name\":\"min\",\"type\":\"flags.12?true\"},{\"name\":\"scam\",\"type\":\"flags.19?true\"},{\"name\":\"has_link\",\"type\":\"flags.20?true\"},{\"name\":\"has_geo\",\"type\":\"flags.21?true\"},{\"name\":\"slowmode_enabled\",\"type\":\"flags.22?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"fake\",\"type\":\"flags.25?true\"},{\"name\":\"gigagroup\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"flags.13?long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"flags.6?string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.9?Vector<RestrictionReason>\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"banned_rights\",\"type\":\"flags.15?ChatBannedRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"},{\"name\":\"participants_count\",\"type\":\"flags.17?int\"}],\"type\":\"Chat\"},{\"id\":\"681420594\",\"predicate\":\"channelForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"until_date\",\"type\":\"flags.16?int\"}],\"type\":\"Chat\"},{\"id\":\"2131196633\",\"predicate\":\"contacts.resolvedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":\"1418477459\",\"predicate\":\"channelFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_view_participants\",\"type\":\"flags.3?true\"},{\"name\":\"can_set_username\",\"type\":\"flags.6?true\"},{\"name\":\"can_set_stickers\",\"type\":\"flags.7?true\"},{\"name\":\"hidden_prehistory\",\"type\":\"flags.10?true\"},{\"name\":\"can_set_location\",\"type\":\"flags.16?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.19?true\"},{\"name\":\"can_view_stats\",\"type\":\"flags.20?true\"},{\"name\":\"blocked\",\"type\":\"flags.22?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants_count\",\"type\":\"flags.0?int\"},{\"name\":\"admins_count\",\"type\":\"flags.1?int\"},{\"name\":\"kicked_count\",\"type\":\"flags.2?int\"},{\"name\":\"banned_count\",\"type\":\"flags.2?int\"},{\"name\":\"online_count\",\"type\":\"flags.13?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chat_photo\",\"type\":\"Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.23?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"Vector<BotInfo>\"},{\"name\":\"migrated_from_chat_id\",\"type\":\"flags.4?int\"},{\"name\":\"migrated_from_max_id\",\"type\":\"flags.4?int\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.5?int\"},{\"name\":\"stickerset\",\"type\":\"flags.8?StickerSet\"},{\"name\":\"available_min_id\",\"type\":\"flags.9?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"linked_chat_id\",\"type\":\"flags.14?int\"},{\"name\":\"location\",\"type\":\"flags.15?ChannelLocation\"},{\"name\":\"slowmode_seconds\",\"type\":\"flags.17?int\"},{\"name\":\"slowmode_next_send_date\",\"type\":\"flags.18?int\"},{\"name\":\"stats_dc\",\"type\":\"flags.12?int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"flags.21?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.24?int\"},{\"name\":\"pending_suggestions\",\"type\":\"flags.25?Vector<string>\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.26?Peer\"}],\"type\":\"ChatFull\"},{\"id\":\"182649427\",\"predicate\":\"messageRange\",\"params\":[{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"MessageRange\"},{\"id\":\"1682413576\",\"predicate\":\"messages.channelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Messages\"},{\"id\":2513611922,\"predicate\":\"messageActionChannelCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":3942934523,\"predicate\":\"updateChannelTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":3067369046,\"predicate\":\"updateChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"1656358105\",\"predicate\":\"updateNewChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"856380452\",\"predicate\":\"updateReadChannelInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3279233481,\"predicate\":\"updateDeleteChannelMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2560699211,\"predicate\":\"updateChannelMessageViews\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"1041346555\",\"predicate\":\"updates.channelDifferenceEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":2763835134,\"predicate\":\"updates.channelDifferenceTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"dialog\",\"type\":\"Dialog\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":\"543450958\",\"predicate\":\"updates.channelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"new_messages\",\"type\":\"Vector<Message>\"},{\"name\":\"other_updates\",\"type\":\"Vector<Update>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":2496933607,\"predicate\":\"channelMessagesFilterEmpty\",\"params\":[],\"type\":\"ChannelMessagesFilter\"},{\"id\":3447183703,\"predicate\":\"channelMessagesFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_new_messages\",\"type\":\"flags.1?true\"},{\"name\":\"ranges\",\"type\":\"Vector<MessageRange>\"}],\"type\":\"ChannelMessagesFilter\"},{\"id\":\"367766557\",\"predicate\":\"channelParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":2737347181,\"predicate\":\"channelParticipantSelf\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":\"1149094475\",\"predicate\":\"channelParticipantCreator\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.0?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":3728686201,\"predicate\":\"channelParticipantsRecent\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":3026225513,\"predicate\":\"channelParticipantsAdmins\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2746567045,\"predicate\":\"channelParticipantsKicked\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":4117684904,\"predicate\":\"channels.channelParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector<ChannelParticipant>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":3503927651,\"predicate\":\"channels.channelParticipant\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":3658699658,\"predicate\":\"chatParticipantCreator\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":3805733942,\"predicate\":\"chatParticipantAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":3062896985,\"predicate\":\"updateChatParticipantAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"is_admin\",\"type\":\"Bool\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"1371385889\",\"predicate\":\"messageActionChatMigrateTo\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":2958420718,\"predicate\":\"messageActionChannelMigrateFrom\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":2966521435,\"predicate\":\"channelParticipantsBots\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":\"2013922064\",\"predicate\":\"help.termsOfService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"DataJSON\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"},{\"name\":\"min_age_confirm\",\"type\":\"flags.1?int\"}],\"type\":\"help.TermsOfService\"},{\"id\":\"1753886890\",\"predicate\":\"updateNewStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"messages.StickerSet\"}],\"type\":\"Update\"},{\"id\":\"196268545\",\"predicate\":\"updateStickerSetsOrder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"order\",\"type\":\"Vector<long>\"}],\"type\":\"Update\"},{\"id\":\"1135492588\",\"predicate\":\"updateStickerSets\",\"params\":[],\"type\":\"Update\"},{\"id\":3892468898,\"predicate\":\"messages.savedGifsNotModified\",\"params\":[],\"type\":\"messages.SavedGifs\"},{\"id\":\"772213157\",\"predicate\":\"messages.savedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"gifs\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.SavedGifs\"},{\"id\":2473931806,\"predicate\":\"updateSavedGifs\",\"params\":[],\"type\":\"Update\"},{\"id\":\"864077702\",\"predicate\":\"inputBotInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":\"1036876423\",\"predicate\":\"inputBotInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":2294256409,\"predicate\":\"inputBotInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?InputWebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?InputWebDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":\"1984755728\",\"predicate\":\"botInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":2357159394,\"predicate\":\"botInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":\"295067450\",\"predicate\":\"botInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?WebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":2491197512,\"predicate\":\"messages.botResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"next_offset\",\"type\":\"flags.1?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.2?InlineBotSwitchPM\"},{\"name\":\"results\",\"type\":\"Vector<BotInlineResult>\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.BotResults\"},{\"id\":\"1059076315\",\"predicate\":\"updateBotInlineQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"peer_type\",\"type\":\"flags.1?InlineQueryPeerType\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":\"239663460\",\"predicate\":\"updateBotInlineSend\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"flags.1?InputBotInlineMessageID\"}],\"type\":\"Update\"},{\"id\":\"1358283666\",\"predicate\":\"inputMessagesFilterVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":\"928101534\",\"predicate\":\"inputMessagesFilterMusic\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":3187344422,\"predicate\":\"inputPrivacyKeyChatInvite\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":\"1343122938\",\"predicate\":\"privacyKeyChatInvite\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":\"1571494644\",\"predicate\":\"exportedMessageLink\",\"params\":[{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"html\",\"type\":\"string\"}],\"type\":\"ExportedMessageLink\"},{\"id\":\"1601666510\",\"predicate\":\"messageFwdHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"imported\",\"type\":\"flags.7?true\"},{\"name\":\"from_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"from_name\",\"type\":\"flags.5?string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"channel_post\",\"type\":\"flags.2?int\"},{\"name\":\"post_author\",\"type\":\"flags.3?string\"},{\"name\":\"saved_from_peer\",\"type\":\"flags.4?Peer\"},{\"name\":\"saved_from_msg_id\",\"type\":\"flags.4?int\"},{\"name\":\"psa_type\",\"type\":\"flags.6?string\"}],\"type\":\"MessageFwdHeader\"},{\"id\":\"457133559\",\"predicate\":\"updateEditChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2495428845,\"predicate\":\"messageActionPinMessage\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":\"1923290508\",\"predicate\":\"auth.codeTypeSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":\"1948046307\",\"predicate\":\"auth.codeTypeCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":\"577556219\",\"predicate\":\"auth.codeTypeFlashCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":\"1035688326\",\"predicate\":\"auth.sentCodeTypeApp\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":3221273506,\"predicate\":\"auth.sentCodeTypeSms\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":\"1398007207\",\"predicate\":\"auth.sentCodeTypeCall\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":2869151449,\"predicate\":\"auth.sentCodeTypeFlashCall\",\"params\":[{\"name\":\"pattern\",\"type\":\"string\"}],\"type\":\"auth.SentCodeType\"},{\"id\":\"629866245\",\"predicate\":\"keyboardButtonUrl\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":\"901503851\",\"predicate\":\"keyboardButtonCallback\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requires_password\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"KeyboardButton\"},{\"id\":2976541737,\"predicate\":\"keyboardButtonRequestPhone\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":4235815743,\"predicate\":\"keyboardButtonRequestGeoLocation\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":\"90744648\",\"predicate\":\"keyboardButtonSwitchInline\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"same_peer\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":\"1218642516\",\"predicate\":\"replyInlineMarkup\",\"params\":[{\"name\":\"rows\",\"type\":\"Vector<KeyboardButtonRow>\"}],\"type\":\"ReplyMarkup\"},{\"id\":\"911761060\",\"predicate\":\"messages.botCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"has_url\",\"type\":\"flags.3?true\"},{\"name\":\"native_ui\",\"type\":\"flags.4?true\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":3879028705,\"predicate\":\"updateBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":\"649453030\",\"predicate\":\"messages.messageEditData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"caption\",\"type\":\"flags.0?true\"}],\"type\":\"messages.MessageEditData\"},{\"id\":3825430691,\"predicate\":\"updateEditMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2526190213,\"predicate\":\"inputBotInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":\"1098628881\",\"predicate\":\"inputBotInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":2800599037,\"predicate\":\"inputBotInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":\"85477117\",\"predicate\":\"botInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":2324063644,\"predicate\":\"botInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":\"416402882\",\"predicate\":\"botInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":2832753831,\"predicate\":\"inputBotInlineResultPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"InputPhoto\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":4294507972,\"predicate\":\"inputBotInlineResultDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":\"400266251\",\"predicate\":\"botInlineMediaResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":2299280777,\"predicate\":\"inputBotInlineMessageID\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"id\":4191320666,\"predicate\":\"updateInlineBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"msg_id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":\"1008755359\",\"predicate\":\"inlineBotSwitchPM\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"InlineBotSwitchPM\"},{\"id\":\"863093588\",\"predicate\":\"messages.peerDialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector<Dialog>\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":3989684315,\"predicate\":\"topPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"rating\",\"type\":\"double\"}],\"type\":\"TopPeer\"},{\"id\":2875595611,\"predicate\":\"topPeerCategoryBotsPM\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":\"344356834\",\"predicate\":\"topPeerCategoryBotsInline\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":\"104314861\",\"predicate\":\"topPeerCategoryCorrespondents\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":3172442442,\"predicate\":\"topPeerCategoryGroups\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":\"371037736\",\"predicate\":\"topPeerCategoryChannels\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":4219683473,\"predicate\":\"topPeerCategoryPeers\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector<TopPeer>\"}],\"type\":\"TopPeerCategoryPeers\"},{\"id\":3727060725,\"predicate\":\"contacts.topPeersNotModified\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":\"1891070632\",\"predicate\":\"contacts.topPeers\",\"params\":[{\"name\":\"categories\",\"type\":\"Vector<TopPeerCategoryPeers>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.TopPeers\"},{\"id\":\"892193368\",\"predicate\":\"messageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"546203849\",\"predicate\":\"inputMessageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"MessageEntity\"},{\"id\":\"975236280\",\"predicate\":\"inputMessagesFilterChatPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":\"634833351\",\"predicate\":\"updateReadChannelOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3995842921,\"predicate\":\"updateDraftMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"draft\",\"type\":\"DraftMessage\"}],\"type\":\"Update\"},{\"id\":\"453805082\",\"predicate\":\"draftMessageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"flags.0?int\"}],\"type\":\"DraftMessage\"},{\"id\":4253970719,\"predicate\":\"draftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"DraftMessage\"},{\"id\":2679813636,\"predicate\":\"messageActionHistoryClear\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":3336309862,\"predicate\":\"messages.featuredStickersNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":3064709953,\"predicate\":\"messages.featuredStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"},{\"name\":\"unread\",\"type\":\"Vector<long>\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":\"1461528386\",\"predicate\":\"updateReadFeaturedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":\"186120336\",\"predicate\":\"messages.recentStickersNotModified\",\"params\":[],\"type\":\"messages.RecentStickers\"},{\"id\":\"586395571\",\"predicate\":\"messages.recentStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector<StickerPack>\"},{\"name\":\"stickers\",\"type\":\"Vector<Document>\"},{\"name\":\"dates\",\"type\":\"Vector<int>\"}],\"type\":\"messages.RecentStickers\"},{\"id\":2588027936,\"predicate\":\"updateRecentStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":\"1338747336\",\"predicate\":\"messages.archivedStickers\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":\"946083368\",\"predicate\":\"messages.stickerSetInstallResultSuccess\",\"params\":[],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":\"904138920\",\"predicate\":\"messages.stickerSetInstallResultArchive\",\"params\":[{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":\"1678812626\",\"predicate\":\"stickerSetCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"cover\",\"type\":\"Document\"}],\"type\":\"StickerSetCovered\"},{\"id\":2720652550,\"predicate\":\"updateConfig\",\"params\":[],\"type\":\"Update\"},{\"id\":\"861169551\",\"predicate\":\"updatePtsChanged\",\"params\":[],\"type\":\"Update\"},{\"id\":3854302746,\"predicate\":\"inputMediaPhotoExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":4216511641,\"predicate\":\"inputMediaDocumentExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":\"872932635\",\"predicate\":\"stickerSetMultiCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"covers\",\"type\":\"Vector<Document>\"}],\"type\":\"StickerSetCovered\"},{\"id\":2933316530,\"predicate\":\"maskCoords\",\"params\":[{\"name\":\"n\",\"type\":\"int\"},{\"name\":\"x\",\"type\":\"double\"},{\"name\":\"y\",\"type\":\"double\"},{\"name\":\"zoom\",\"type\":\"double\"}],\"type\":\"MaskCoords\"},{\"id\":2550256375,\"predicate\":\"documentAttributeHasStickers\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":\"1251549527\",\"predicate\":\"inputStickeredMediaPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputStickeredMedia\"},{\"id\":\"70813275\",\"predicate\":\"inputStickeredMediaDocument\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"}],\"type\":\"InputStickeredMedia\"},{\"id\":3187238203,\"predicate\":\"game\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"}],\"type\":\"Game\"},{\"id\":\"1336154098\",\"predicate\":\"inputBotInlineResultGame\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":\"1262639204\",\"predicate\":\"inputBotInlineMessageGame\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":4256272392,\"predicate\":\"messageMediaGame\",\"params\":[{\"name\":\"game\",\"type\":\"Game\"}],\"type\":\"MessageMedia\"},{\"id\":3544138739,\"predicate\":\"inputMediaGame\",\"params\":[{\"name\":\"id\",\"type\":\"InputGame\"}],\"type\":\"InputMedia\"},{\"id\":\"53231223\",\"predicate\":\"inputGameID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGame\"},{\"id\":3274827786,\"predicate\":\"inputGameShortName\",\"params\":[{\"name\":\"bot_id\",\"type\":\"InputUser\"},{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputGame\"},{\"id\":\"1358175439\",\"predicate\":\"keyboardButtonGame\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":2460428406,\"predicate\":\"messageActionGameScore\",\"params\":[{\"name\":\"game_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":\"1493171408\",\"predicate\":\"highScore\",\"params\":[{\"name\":\"pos\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"HighScore\"},{\"id\":2587622809,\"predicate\":\"messages.highScores\",\"params\":[{\"name\":\"scores\",\"type\":\"Vector<HighScore>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.HighScores\"},{\"id\":\"1258196845\",\"predicate\":\"updates.differenceTooLong\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":\"1081547008\",\"predicate\":\"updateChannelWebPage\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2631405892,\"predicate\":\"messages.chatsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"}],\"type\":\"messages.Chats\"},{\"id\":3695018575,\"predicate\":\"textEmpty\",\"params\":[],\"type\":\"RichText\"},{\"id\":\"1950782688\",\"predicate\":\"textPlain\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":\"1730456516\",\"predicate\":\"textBold\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":3641877916,\"predicate\":\"textItalic\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":3240501956,\"predicate\":\"textUnderline\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":2616769429,\"predicate\":\"textStrike\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":\"1816074681\",\"predicate\":\"textFixed\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":\"1009288385\",\"predicate\":\"textUrl\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"}],\"type\":\"RichText\"},{\"id\":3730443734,\"predicate\":\"textEmail\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":\"2120376535\",\"predicate\":\"textConcat\",\"params\":[{\"name\":\"texts\",\"type\":\"Vector<RichText>\"}],\"type\":\"RichText\"},{\"id\":\"324435594\",\"predicate\":\"pageBlockUnsupported\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":\"1890305021\",\"predicate\":\"pageBlockTitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":2415565343,\"predicate\":\"pageBlockSubtitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":3132089824,\"predicate\":\"pageBlockAuthorDate\",\"params\":[{\"name\":\"author\",\"type\":\"RichText\"},{\"name\":\"published_date\",\"type\":\"int\"}],\"type\":\"PageBlock\"},{\"id\":3218105580,\"predicate\":\"pageBlockHeader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":4046173921,\"predicate\":\"pageBlockSubheader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":\"1182402406\",\"predicate\":\"pageBlockParagraph\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":3228621118,\"predicate\":\"pageBlockPreformatted\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":\"1216809369\",\"predicate\":\"pageBlockFooter\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":3676352904,\"predicate\":\"pageBlockDivider\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":3456972720,\"predicate\":\"pageBlockAnchor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":3840442385,\"predicate\":\"pageBlockList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageListItem>\"}],\"type\":\"PageBlock\"},{\"id\":\"641563686\",\"predicate\":\"pageBlockBlockquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":\"1329878739\",\"predicate\":\"pageBlockPullquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":\"391759200\",\"predicate\":\"pageBlockPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"},{\"name\":\"url\",\"type\":\"flags.0?string\"},{\"name\":\"webpage_id\",\"type\":\"flags.0?long\"}],\"type\":\"PageBlock\"},{\"id\":\"2089805750\",\"predicate\":\"pageBlockVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autoplay\",\"type\":\"flags.0?true\"},{\"name\":\"loop\",\"type\":\"flags.1?true\"},{\"name\":\"video_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":\"972174080\",\"predicate\":\"pageBlockCover\",\"params\":[{\"name\":\"cover\",\"type\":\"PageBlock\"}],\"type\":\"PageBlock\"},{\"id\":2826014149,\"predicate\":\"pageBlockEmbed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"full_width\",\"type\":\"flags.0?true\"},{\"name\":\"allow_scrolling\",\"type\":\"flags.3?true\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"html\",\"type\":\"flags.2?string\"},{\"name\":\"poster_photo_id\",\"type\":\"flags.4?long\"},{\"name\":\"w\",\"type\":\"flags.5?int\"},{\"name\":\"h\",\"type\":\"flags.5?int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":4065961995,\"predicate\":\"pageBlockEmbedPost\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"author_photo_id\",\"type\":\"long\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":\"1705048653\",\"predicate\":\"pageBlockCollage\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":\"52401552\",\"predicate\":\"pageBlockSlideshow\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":\"1930545681\",\"predicate\":\"webPageNotModified\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"cached_page_views\",\"type\":\"flags.0?int\"}],\"type\":\"WebPage\"},{\"id\":4206550111,\"predicate\":\"inputPrivacyKeyPhoneCall\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":\"1030105979\",\"predicate\":\"privacyKeyPhoneCall\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":3714748232,\"predicate\":\"sendMessageGamePlayAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2246320897,\"predicate\":\"phoneCallDiscardReasonMissed\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":3767910816,\"predicate\":\"phoneCallDiscardReasonDisconnect\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":\"1471006352\",\"predicate\":\"phoneCallDiscardReasonHangup\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":4210550985,\"predicate\":\"phoneCallDiscardReasonBusy\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":\"1852826908\",\"predicate\":\"updateDialogPinned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":4195302562,\"predicate\":\"updatePinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"order\",\"type\":\"flags.0?Vector<DialogPeer>\"}],\"type\":\"Update\"},{\"id\":\"2104790276\",\"predicate\":\"dataJSON\",\"params\":[{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"DataJSON\"},{\"id\":2199371971,\"predicate\":\"updateBotWebhookJSON\",\"params\":[{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":2610053286,\"predicate\":\"updateBotWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"},{\"name\":\"timeout\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3408489464,\"predicate\":\"labeledPrice\",\"params\":[{\"name\":\"label\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"LabeledPrice\"},{\"id\":3272254296,\"predicate\":\"invoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"test\",\"type\":\"flags.0?true\"},{\"name\":\"name_requested\",\"type\":\"flags.1?true\"},{\"name\":\"phone_requested\",\"type\":\"flags.2?true\"},{\"name\":\"email_requested\",\"type\":\"flags.3?true\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.4?true\"},{\"name\":\"flexible\",\"type\":\"flags.5?true\"},{\"name\":\"phone_to_provider\",\"type\":\"flags.6?true\"},{\"name\":\"email_to_provider\",\"type\":\"flags.7?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector<LabeledPrice>\"}],\"type\":\"Invoice\"},{\"id\":4108359363,\"predicate\":\"inputMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":3926049406,\"predicate\":\"paymentCharge\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"provider_charge_id\",\"type\":\"string\"}],\"type\":\"PaymentCharge\"},{\"id\":2402399015,\"predicate\":\"messageActionPaymentSentMe\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"charge\",\"type\":\"PaymentCharge\"}],\"type\":\"MessageAction\"},{\"id\":2220168007,\"predicate\":\"messageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"receipt_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":\"512535275\",\"predicate\":\"postAddress\",\"params\":[{\"name\":\"street_line1\",\"type\":\"string\"},{\"name\":\"street_line2\",\"type\":\"string\"},{\"name\":\"city\",\"type\":\"string\"},{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"country_iso2\",\"type\":\"string\"},{\"name\":\"post_code\",\"type\":\"string\"}],\"type\":\"PostAddress\"},{\"id\":2426158996,\"predicate\":\"paymentRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"flags.0?string\"},{\"name\":\"phone\",\"type\":\"flags.1?string\"},{\"name\":\"email\",\"type\":\"flags.2?string\"},{\"name\":\"shipping_address\",\"type\":\"flags.3?PostAddress\"}],\"type\":\"PaymentRequestedInfo\"},{\"id\":2950250427,\"predicate\":\"keyboardButtonBuy\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":\"1080663248\",\"predicate\":\"messageActionPaymentSent\",\"params\":[{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":3452074527,\"predicate\":\"paymentSavedCredentialsCard\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentSavedCredentials\"},{\"id\":\"475467473\",\"predicate\":\"webDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"WebDocument\"},{\"id\":2616017741,\"predicate\":\"inputWebDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"InputWebDocument\"},{\"id\":3258570374,\"predicate\":\"inputWebFileLocation\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWebFileLocation\"},{\"id\":\"568808380\",\"predicate\":\"upload.webFile\",\"params\":[{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"file_type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.WebFile\"},{\"id\":\"1062645411\",\"predicate\":\"payments.paymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_save_credentials\",\"type\":\"flags.2?true\"},{\"name\":\"password_missing\",\"type\":\"flags.3?true\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"native_provider\",\"type\":\"flags.4?string\"},{\"name\":\"native_params\",\"type\":\"flags.4?DataJSON\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"saved_credentials\",\"type\":\"flags.1?PaymentSavedCredentials\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"payments.PaymentForm\"},{\"id\":3510966403,\"predicate\":\"payments.validatedRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector<ShippingOption>\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":\"1314881805\",\"predicate\":\"payments.paymentResult\",\"params\":[{\"name\":\"updates\",\"type\":\"Updates\"}],\"type\":\"payments.PaymentResult\"},{\"id\":\"1342771681\",\"predicate\":\"payments.paymentReceipt\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping\",\"type\":\"flags.1?ShippingOption\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"credentials_title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":4220511292,\"predicate\":\"payments.savedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_saved_credentials\",\"type\":\"flags.1?true\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"}],\"type\":\"payments.SavedInfo\"},{\"id\":3238965967,\"predicate\":\"inputPaymentCredentialsSaved\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tmp_password\",\"type\":\"bytes\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":\"873977640\",\"predicate\":\"inputPaymentCredentials\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":3680828724,\"predicate\":\"account.tmpPassword\",\"params\":[{\"name\":\"tmp_password\",\"type\":\"bytes\"},{\"name\":\"valid_until\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":3055631583,\"predicate\":\"shippingOption\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector<LabeledPrice>\"}],\"type\":\"ShippingOption\"},{\"id\":3771582784,\"predicate\":\"updateBotShippingQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"shipping_address\",\"type\":\"PostAddress\"}],\"type\":\"Update\"},{\"id\":\"1563376297\",\"predicate\":\"updateBotPrecheckoutQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":4288717974,\"predicate\":\"inputStickerSetItem\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"emoji\",\"type\":\"string\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"InputStickerSetItem\"},{\"id\":2869914398,\"predicate\":\"updatePhoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"}],\"type\":\"Update\"},{\"id\":\"506920429\",\"predicate\":\"inputPhoneCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPhoneCall\"},{\"id\":\"1399245077\",\"predicate\":\"phoneCallEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"PhoneCall\"},{\"id\":\"462375633\",\"predicate\":\"phoneCallWaiting\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"receive_date\",\"type\":\"flags.0?int\"}],\"type\":\"PhoneCall\"},{\"id\":2280307539,\"predicate\":\"phoneCallRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":2575058250,\"predicate\":\"phoneCallAccepted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":2269294207,\"predicate\":\"phoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"p2p_allowed\",\"type\":\"flags.5?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"connections\",\"type\":\"Vector<PhoneConnection>\"},{\"name\":\"start_date\",\"type\":\"int\"}],\"type\":\"PhoneCall\"},{\"id\":\"1355435489\",\"predicate\":\"phoneCallDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"need_rating\",\"type\":\"flags.2?true\"},{\"name\":\"need_debug\",\"type\":\"flags.3?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"PhoneCall\"},{\"id\":2639009728,\"predicate\":\"phoneConnection\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"peer_tag\",\"type\":\"bytes\"}],\"type\":\"PhoneConnection\"},{\"id\":4236742600,\"predicate\":\"phoneCallProtocol\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"udp_p2p\",\"type\":\"flags.0?true\"},{\"name\":\"udp_reflector\",\"type\":\"flags.1?true\"},{\"name\":\"min_layer\",\"type\":\"int\"},{\"name\":\"max_layer\",\"type\":\"int\"},{\"name\":\"library_versions\",\"type\":\"Vector<string>\"}],\"type\":\"PhoneCallProtocol\"},{\"id\":3968000320,\"predicate\":\"phone.phoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"phone.PhoneCall\"},{\"id\":2160695144,\"predicate\":\"inputMessagesFilterPhoneCalls\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"missed\",\"type\":\"flags.0?true\"}],\"type\":\"MessagesFilter\"},{\"id\":2162236031,\"predicate\":\"messageActionPhoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call_id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"MessageAction\"},{\"id\":\"2054952868\",\"predicate\":\"inputMessagesFilterRoundVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":3041516115,\"predicate\":\"inputMessagesFilterRoundVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2297593788,\"predicate\":\"sendMessageRecordRoundAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":\"608050278\",\"predicate\":\"sendMessageUploadRoundAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":4052539972,\"predicate\":\"upload.fileCdnRedirect\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"encryption_key\",\"type\":\"bytes\"},{\"name\":\"encryption_iv\",\"type\":\"bytes\"},{\"name\":\"file_hashes\",\"type\":\"Vector<FileHash>\"}],\"type\":\"upload.File\"},{\"id\":4004045934,\"predicate\":\"upload.cdnFileReuploadNeeded\",\"params\":[{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":2845821519,\"predicate\":\"upload.cdnFile\",\"params\":[{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":3380800186,\"predicate\":\"cdnPublicKey\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"CdnPublicKey\"},{\"id\":\"1462101002\",\"predicate\":\"cdnConfig\",\"params\":[{\"name\":\"public_keys\",\"type\":\"Vector<CdnPublicKey>\"}],\"type\":\"CdnConfig\"},{\"id\":4011282869,\"predicate\":\"pageBlockChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"Chat\"}],\"type\":\"PageBlock\"},{\"id\":3402727926,\"predicate\":\"langPackString\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":\"1816636575\",\"predicate\":\"langPackStringPluralized\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"zero_value\",\"type\":\"flags.0?string\"},{\"name\":\"one_value\",\"type\":\"flags.1?string\"},{\"name\":\"two_value\",\"type\":\"flags.2?string\"},{\"name\":\"few_value\",\"type\":\"flags.3?string\"},{\"name\":\"many_value\",\"type\":\"flags.4?string\"},{\"name\":\"other_value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":\"695856818\",\"predicate\":\"langPackStringDeleted\",\"params\":[{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":4085629430,\"predicate\":\"langPackDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"strings\",\"type\":\"Vector<LangPackString>\"}],\"type\":\"LangPackDifference\"},{\"id\":4006239459,\"predicate\":\"langPackLanguage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"official\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.2?true\"},{\"name\":\"beta\",\"type\":\"flags.3?true\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"native_name\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"base_lang_code\",\"type\":\"flags.1?string\"},{\"name\":\"plural_code\",\"type\":\"string\"},{\"name\":\"strings_count\",\"type\":\"int\"},{\"name\":\"translated_count\",\"type\":\"int\"},{\"name\":\"translations_url\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":\"1180041828\",\"predicate\":\"updateLangPackTooLong\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":\"1442983757\",\"predicate\":\"updateLangPack\",\"params\":[{\"name\":\"difference\",\"type\":\"LangPackDifference\"}],\"type\":\"Update\"},{\"id\":3435051951,\"predicate\":\"channelParticipantAdmin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_edit\",\"type\":\"flags.0?true\"},{\"name\":\"self\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"flags.1?int\"},{\"name\":\"promoted_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.2?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":\"470789295\",\"predicate\":\"channelParticipantBanned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"left\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"kicked_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelParticipant\"},{\"id\":\"338142689\",\"predicate\":\"channelParticipantsBanned\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":\"106343499\",\"predicate\":\"channelParticipantsSearch\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":3873421349,\"predicate\":\"channelAdminLogEventActionChangeTitle\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1427671598\",\"predicate\":\"channelAdminLogEventActionChangeAbout\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1783299128\",\"predicate\":\"channelAdminLogEventActionChangeUsername\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1129042607\",\"predicate\":\"channelAdminLogEventActionChangePhoto\",\"params\":[{\"name\":\"prev_photo\",\"type\":\"Photo\"},{\"name\":\"new_photo\",\"type\":\"Photo\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"460916654\",\"predicate\":\"channelAdminLogEventActionToggleInvites\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"648939889\",\"predicate\":\"channelAdminLogEventActionToggleSignatures\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3924306968,\"predicate\":\"channelAdminLogEventActionUpdatePinned\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1889215493\",\"predicate\":\"channelAdminLogEventActionEditMessage\",\"params\":[{\"name\":\"prev_message\",\"type\":\"Message\"},{\"name\":\"new_message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1121994683\",\"predicate\":\"channelAdminLogEventActionDeleteMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"405815507\",\"predicate\":\"channelAdminLogEventActionParticipantJoin\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":4170676210,\"predicate\":\"channelAdminLogEventActionParticipantLeave\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3810276568,\"predicate\":\"channelAdminLogEventActionParticipantInvite\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3872931198,\"predicate\":\"channelAdminLogEventActionParticipantToggleBan\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3580323600,\"predicate\":\"channelAdminLogEventActionParticipantToggleAdmin\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"995769920\",\"predicate\":\"channelAdminLogEvent\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"ChannelAdminLogEventAction\"}],\"type\":\"ChannelAdminLogEvent\"},{\"id\":3985307469,\"predicate\":\"channels.adminLogResults\",\"params\":[{\"name\":\"events\",\"type\":\"Vector<ChannelAdminLogEvent>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":3926948580,\"predicate\":\"channelAdminLogEventsFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join\",\"type\":\"flags.0?true\"},{\"name\":\"leave\",\"type\":\"flags.1?true\"},{\"name\":\"invite\",\"type\":\"flags.2?true\"},{\"name\":\"ban\",\"type\":\"flags.3?true\"},{\"name\":\"unban\",\"type\":\"flags.4?true\"},{\"name\":\"kick\",\"type\":\"flags.5?true\"},{\"name\":\"unkick\",\"type\":\"flags.6?true\"},{\"name\":\"promote\",\"type\":\"flags.7?true\"},{\"name\":\"demote\",\"type\":\"flags.8?true\"},{\"name\":\"info\",\"type\":\"flags.9?true\"},{\"name\":\"settings\",\"type\":\"flags.10?true\"},{\"name\":\"pinned\",\"type\":\"flags.11?true\"},{\"name\":\"edit\",\"type\":\"flags.12?true\"},{\"name\":\"delete\",\"type\":\"flags.13?true\"},{\"name\":\"group_call\",\"type\":\"flags.14?true\"},{\"name\":\"invites\",\"type\":\"flags.15?true\"}],\"type\":\"ChannelAdminLogEventsFilter\"},{\"id\":\"511092620\",\"predicate\":\"topPeerCategoryPhoneCalls\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":2151899626,\"predicate\":\"pageBlockAudio\",\"params\":[{\"name\":\"audio_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":\"1558266229\",\"predicate\":\"popularContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"importers\",\"type\":\"int\"}],\"type\":\"PopularContact\"},{\"id\":\"1200788123\",\"predicate\":\"messageActionScreenshotTaken\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":2660214483,\"predicate\":\"messages.favedStickersNotModified\",\"params\":[],\"type\":\"messages.FavedStickers\"},{\"id\":4085198614,\"predicate\":\"messages.favedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector<StickerPack>\"},{\"name\":\"stickers\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.FavedStickers\"},{\"id\":3843135853,\"predicate\":\"updateFavedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":2307472197,\"predicate\":\"updateChannelReadMessagesContents\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"}],\"type\":\"Update\"},{\"id\":3254314650,\"predicate\":\"inputMessagesFilterMyMentions\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":\"1887741886\",\"predicate\":\"updateContactsReset\",\"params\":[],\"type\":\"Update\"},{\"id\":2982398631,\"predicate\":\"channelAdminLogEventActionChangeStickerSet\",\"params\":[{\"name\":\"prev_stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"new_stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":4209418070,\"predicate\":\"messageActionCustomAction\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":\"178373535\",\"predicate\":\"inputPaymentCredentialsApplePay\",\"params\":[{\"name\":\"payment_data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":3875695885,\"predicate\":\"inputMessagesFilterGeo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":3764575107,\"predicate\":\"inputMessagesFilterContacts\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":\"1893427255\",\"predicate\":\"updateChannelAvailableMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"available_min_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"1599903217\",\"predicate\":\"channelAdminLogEventActionTogglePreHistoryHidden\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":2535434307,\"predicate\":\"inputMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"stopped\",\"type\":\"flags.0?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.2?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"}],\"type\":\"InputMedia\"},{\"id\":3108030054,\"predicate\":\"messageMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.1?int\"}],\"type\":\"MessageMedia\"},{\"id\":\"1189204285\",\"predicate\":\"recentMeUrlUnknown\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"RecentMeUrl\"},{\"id\":2377921334,\"predicate\":\"recentMeUrlUser\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":2686132985,\"predicate\":\"recentMeUrlChat\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":3947431965,\"predicate\":\"recentMeUrlChatInvite\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_invite\",\"type\":\"ChatInvite\"}],\"type\":\"RecentMeUrl\"},{\"id\":3154794460,\"predicate\":\"recentMeUrlStickerSet\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"set\",\"type\":\"StickerSetCovered\"}],\"type\":\"RecentMeUrl\"},{\"id\":\"235081943\",\"predicate\":\"help.recentMeUrls\",\"params\":[{\"name\":\"urls\",\"type\":\"Vector<RecentMeUrl>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":4028055529,\"predicate\":\"channels.channelParticipantsNotModified\",\"params\":[],\"type\":\"channels.ChannelParticipants\"},{\"id\":\"1951620897\",\"predicate\":\"messages.messagesNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":\"482797855\",\"predicate\":\"inputSingleMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector<MessageEntity>\"}],\"type\":\"InputSingleMedia\"},{\"id\":3402187762,\"predicate\":\"webAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"domain\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"WebAuthorization\"},{\"id\":3981887996,\"predicate\":\"account.webAuthorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector<WebAuthorization>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"account.WebAuthorizations\"},{\"id\":2792792866,\"predicate\":\"inputMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":3134751637,\"predicate\":\"inputMessageReplyTo\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":2257003832,\"predicate\":\"inputMessagePinned\",\"params\":[],\"type\":\"InputMessage\"},{\"id\":2607407947,\"predicate\":\"messageEntityPhone\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"1280209983\",\"predicate\":\"messageEntityCashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":2884218878,\"predicate\":\"messageActionBotAllowed\",\"params\":[{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":4239064759,\"predicate\":\"inputDialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputDialogPeer\"},{\"id\":3849174789,\"predicate\":\"dialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"DialogPeer\"},{\"id\":\"223655517\",\"predicate\":\"messages.foundStickerSetsNotModified\",\"params\":[],\"type\":\"messages.FoundStickerSets\"},{\"id\":\"1359533640\",\"predicate\":\"messages.foundStickerSets\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":\"1648543603\",\"predicate\":\"fileHash\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"FileHash\"},{\"id\":4190682310,\"predicate\":\"webDocumentNoProxy\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"WebDocument\"},{\"id\":\"1968737087\",\"predicate\":\"inputClientProxy\",\"params\":[{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"}],\"type\":\"InputClientProxy\"},{\"id\":3811614591,\"predicate\":\"help.termsOfServiceUpdateEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":\"686618977\",\"predicate\":\"help.termsOfServiceUpdate\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"terms_of_service\",\"type\":\"help.TermsOfService\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":\"859091184\",\"predicate\":\"inputSecureFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"InputSecureFile\"},{\"id\":\"1399317950\",\"predicate\":\"inputSecureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputSecureFile\"},{\"id\":3418877480,\"predicate\":\"inputSecureFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":\"1679398724\",\"predicate\":\"secureFileEmpty\",\"params\":[],\"type\":\"SecureFile\"},{\"id\":3760683618,\"predicate\":\"secureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureFile\"},{\"id\":2330640067,\"predicate\":\"secureData\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureData\"},{\"id\":\"2103482845\",\"predicate\":\"securePlainPhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":\"569137759\",\"predicate\":\"securePlainEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":2636808675,\"predicate\":\"secureValueTypePersonalDetails\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":\"1034709504\",\"predicate\":\"secureValueTypePassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":\"115615172\",\"predicate\":\"secureValueTypeDriverLicense\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2698015819,\"predicate\":\"secureValueTypeIdentityCard\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2577698595,\"predicate\":\"secureValueTypeInternalPassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":3420659238,\"predicate\":\"secureValueTypeAddress\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":4231435598,\"predicate\":\"secureValueTypeUtilityBill\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2299755533,\"predicate\":\"secureValueTypeBankStatement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2340959368,\"predicate\":\"secureValueTypeRentalAgreement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2581823594,\"predicate\":\"secureValueTypePassportRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":3926060083,\"predicate\":\"secureValueTypeTemporaryRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":3005262555,\"predicate\":\"secureValueTypePhone\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2386339822,\"predicate\":\"secureValueTypeEmail\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":\"411017418\",\"predicate\":\"secureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?SecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?SecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?SecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector<SecureFile>\"},{\"name\":\"files\",\"type\":\"flags.4?Vector<SecureFile>\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValue\"},{\"id\":3676426407,\"predicate\":\"inputSecureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?InputSecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?InputSecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?InputSecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector<InputSecureFile>\"},{\"name\":\"files\",\"type\":\"flags.4?Vector<InputSecureFile>\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"}],\"type\":\"InputSecureValue\"},{\"id\":3978218928,\"predicate\":\"secureValueHash\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValueHash\"},{\"id\":3903065049,\"predicate\":\"secureValueErrorData\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"field\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":\"12467706\",\"predicate\":\"secureValueErrorFrontSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2257201829,\"predicate\":\"secureValueErrorReverseSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":3845639894,\"predicate\":\"secureValueErrorSelfie\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":\"2054162547\",\"predicate\":\"secureValueErrorFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":\"1717706985\",\"predicate\":\"secureValueErrorFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector<bytes>\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":\"871426631\",\"predicate\":\"secureCredentialsEncrypted\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureCredentialsEncrypted\"},{\"id\":2905480408,\"predicate\":\"account.authorizationForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"required_types\",\"type\":\"Vector<SecureRequiredType>\"},{\"name\":\"values\",\"type\":\"Vector<SecureValue>\"},{\"name\":\"errors\",\"type\":\"Vector<SecureValueError>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"privacy_policy_url\",\"type\":\"flags.0?string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":2166326607,\"predicate\":\"account.sentEmailCode\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"account.SentEmailCode\"},{\"id\":\"455635795\",\"predicate\":\"messageActionSecureValuesSentMe\",\"params\":[{\"name\":\"values\",\"type\":\"Vector<SecureValue>\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"MessageAction\"},{\"id\":3646710100,\"predicate\":\"messageActionSecureValuesSent\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureValueType>\"}],\"type\":\"MessageAction\"},{\"id\":\"1722786150\",\"predicate\":\"help.deepLinkInfoEmpty\",\"params\":[],\"type\":\"help.DeepLinkInfo\"},{\"id\":\"1783556146\",\"predicate\":\"help.deepLinkInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"update_app\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":\"289586518\",\"predicate\":\"savedPhoneContact\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"SavedContact\"},{\"id\":\"1304052993\",\"predicate\":\"account.takeout\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"account.Takeout\"},{\"id\":\"700340377\",\"predicate\":\"inputTakeoutFileLocation\",\"params\":[],\"type\":\"InputFileLocation\"},{\"id\":3781450179,\"predicate\":\"updateDialogUnreadMark\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":4041467286,\"predicate\":\"messages.dialogsNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":2669814217,\"predicate\":\"inputWebFileGeoPointLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputWebFileLocation\"},{\"id\":3039597469,\"predicate\":\"contacts.topPeersDisabled\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":2609510714,\"predicate\":\"inputReportReasonCopyright\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":3562713238,\"predicate\":\"passwordKdfAlgoUnknown\",\"params\":[],\"type\":\"PasswordKdfAlgo\"},{\"id\":\"4883767\",\"predicate\":\"securePasswordKdfAlgoUnknown\",\"params\":[],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":3153255840,\"predicate\":\"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":2252807570,\"predicate\":\"securePasswordKdfAlgoSHA512\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":\"354925740\",\"predicate\":\"secureSecretSettings\",\"params\":[{\"name\":\"secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_secret\",\"type\":\"bytes\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureSecretSettings\"},{\"id\":\"982592842\",\"predicate\":\"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow\",\"params\":[{\"name\":\"salt1\",\"type\":\"bytes\"},{\"name\":\"salt2\",\"type\":\"bytes\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"}],\"type\":\"PasswordKdfAlgo\"},{\"id\":2558588504,\"predicate\":\"inputCheckPasswordEmpty\",\"params\":[],\"type\":\"InputCheckPasswordSRP\"},{\"id\":3531600002,\"predicate\":\"inputCheckPasswordSRP\",\"params\":[{\"name\":\"srp_id\",\"type\":\"long\"},{\"name\":\"A\",\"type\":\"bytes\"},{\"name\":\"M1\",\"type\":\"bytes\"}],\"type\":\"InputCheckPasswordSRP\"},{\"id\":2258466191,\"predicate\":\"secureValueError\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2702460784,\"predicate\":\"secureValueErrorTranslationFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":\"878931416\",\"predicate\":\"secureValueErrorTranslationFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector<bytes>\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2191366618,\"predicate\":\"secureRequiredType\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"native_names\",\"type\":\"flags.0?true\"},{\"name\":\"selfie_required\",\"type\":\"flags.1?true\"},{\"name\":\"translation_required\",\"type\":\"flags.2?true\"},{\"name\":\"type\",\"type\":\"SecureValueType\"}],\"type\":\"SecureRequiredType\"},{\"id\":\"41187252\",\"predicate\":\"secureRequiredTypeOneOf\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureRequiredType>\"}],\"type\":\"SecureRequiredType\"},{\"id\":3216634967,\"predicate\":\"help.passportConfigNotModified\",\"params\":[],\"type\":\"help.PassportConfig\"},{\"id\":2694370991,\"predicate\":\"help.passportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"countries_langs\",\"type\":\"DataJSON\"}],\"type\":\"help.PassportConfig\"},{\"id\":\"488313413\",\"predicate\":\"inputAppEvent\",\"params\":[{\"name\":\"time\",\"type\":\"double\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"peer\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"JSONValue\"}],\"type\":\"InputAppEvent\"},{\"id\":3235781593,\"predicate\":\"jsonObjectValue\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"JSONValue\"}],\"type\":\"JSONObjectValue\"},{\"id\":\"1064139624\",\"predicate\":\"jsonNull\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":3342098026,\"predicate\":\"jsonBool\",\"params\":[{\"name\":\"value\",\"type\":\"Bool\"}],\"type\":\"JSONValue\"},{\"id\":\"736157604\",\"predicate\":\"jsonNumber\",\"params\":[{\"name\":\"value\",\"type\":\"double\"}],\"type\":\"JSONValue\"},{\"id\":3072226938,\"predicate\":\"jsonString\",\"params\":[{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"JSONValue\"},{\"id\":4148447075,\"predicate\":\"jsonArray\",\"params\":[{\"name\":\"value\",\"type\":\"Vector<JSONValue>\"}],\"type\":\"JSONValue\"},{\"id\":2579616925,\"predicate\":\"jsonObject\",\"params\":[{\"name\":\"value\",\"type\":\"Vector<JSONObjectValue>\"}],\"type\":\"JSONValue\"},{\"id\":2983951486,\"predicate\":\"inputNotifyBroadcasts\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":3591563503,\"predicate\":\"notifyBroadcasts\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":3983181060,\"predicate\":\"textSubscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":3355139585,\"predicate\":\"textSuperscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":\"55281185\",\"predicate\":\"textMarked\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":\"483104362\",\"predicate\":\"textPhone\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":\"136105807\",\"predicate\":\"textImage\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"RichText\"},{\"id\":\"504660880\",\"predicate\":\"pageBlockKicker\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":\"878078826\",\"predicate\":\"pageTableCell\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"header\",\"type\":\"flags.0?true\"},{\"name\":\"align_center\",\"type\":\"flags.3?true\"},{\"name\":\"align_right\",\"type\":\"flags.4?true\"},{\"name\":\"valign_middle\",\"type\":\"flags.5?true\"},{\"name\":\"valign_bottom\",\"type\":\"flags.6?true\"},{\"name\":\"text\",\"type\":\"flags.7?RichText\"},{\"name\":\"colspan\",\"type\":\"flags.1?int\"},{\"name\":\"rowspan\",\"type\":\"flags.2?int\"}],\"type\":\"PageTableCell\"},{\"id\":3770729957,\"predicate\":\"pageTableRow\",\"params\":[{\"name\":\"cells\",\"type\":\"Vector<PageTableCell>\"}],\"type\":\"PageTableRow\"},{\"id\":3209554562,\"predicate\":\"pageBlockTable\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bordered\",\"type\":\"flags.0?true\"},{\"name\":\"striped\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"rows\",\"type\":\"Vector<PageTableRow>\"}],\"type\":\"PageBlock\"},{\"id\":\"1869903447\",\"predicate\":\"pageCaption\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"credit\",\"type\":\"RichText\"}],\"type\":\"PageCaption\"},{\"id\":3106911949,\"predicate\":\"pageListItemText\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListItem\"},{\"id\":\"635466748\",\"predicate\":\"pageListItemBlocks\",\"params\":[{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"}],\"type\":\"PageListItem\"},{\"id\":\"1577484359\",\"predicate\":\"pageListOrderedItemText\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListOrderedItem\"},{\"id\":2564655414,\"predicate\":\"pageListOrderedItemBlocks\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"}],\"type\":\"PageListOrderedItem\"},{\"id\":2592793057,\"predicate\":\"pageBlockOrderedList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageListOrderedItem>\"}],\"type\":\"PageBlock\"},{\"id\":\"1987480557\",\"predicate\":\"pageBlockDetails\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"open\",\"type\":\"flags.0?true\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"title\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":3012615176,\"predicate\":\"pageRelatedArticle\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"photo_id\",\"type\":\"flags.2?long\"},{\"name\":\"author\",\"type\":\"flags.3?string\"},{\"name\":\"published_date\",\"type\":\"flags.4?int\"}],\"type\":\"PageRelatedArticle\"},{\"id\":\"370236054\",\"predicate\":\"pageBlockRelatedArticles\",\"params\":[{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"articles\",\"type\":\"Vector<PageRelatedArticle>\"}],\"type\":\"PageBlock\"},{\"id\":2756656886,\"predicate\":\"pageBlockMap\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":2556788493,\"predicate\":\"page\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"part\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.1?true\"},{\"name\":\"v2\",\"type\":\"flags.2?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"photos\",\"type\":\"Vector<Photo>\"},{\"name\":\"documents\",\"type\":\"Vector<Document>\"},{\"name\":\"views\",\"type\":\"flags.3?int\"}],\"type\":\"Page\"},{\"id\":3684593874,\"predicate\":\"inputPrivacyKeyPhoneP2P\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":\"961092808\",\"predicate\":\"privacyKeyPhoneP2P\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":\"894777186\",\"predicate\":\"textAnchor\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":2349199817,\"predicate\":\"help.supportName\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"help.SupportName\"},{\"id\":4088278765,\"predicate\":\"help.userInfoEmpty\",\"params\":[],\"type\":\"help.UserInfo\"},{\"id\":\"32192344\",\"predicate\":\"help.userInfo\",\"params\":[{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"help.UserInfo\"},{\"id\":4092747638,\"predicate\":\"messageActionContactSignUp\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":2896258427,\"predicate\":\"updateMessagePoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"poll\",\"type\":\"flags.0?Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"Update\"},{\"id\":\"1823064809\",\"predicate\":\"pollAnswer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"PollAnswer\"},{\"id\":2262925665,\"predicate\":\"poll\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"closed\",\"type\":\"flags.0?true\"},{\"name\":\"public_voters\",\"type\":\"flags.1?true\"},{\"name\":\"multiple_choice\",\"type\":\"flags.2?true\"},{\"name\":\"quiz\",\"type\":\"flags.3?true\"},{\"name\":\"question\",\"type\":\"string\"},{\"name\":\"answers\",\"type\":\"Vector<PollAnswer>\"},{\"name\":\"close_period\",\"type\":\"flags.4?int\"},{\"name\":\"close_date\",\"type\":\"flags.5?int\"}],\"type\":\"Poll\"},{\"id\":\"997055186\",\"predicate\":\"pollAnswerVoters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen\",\"type\":\"flags.0?true\"},{\"name\":\"correct\",\"type\":\"flags.1?true\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"voters\",\"type\":\"int\"}],\"type\":\"PollAnswerVoters\"},{\"id\":3135029667,\"predicate\":\"pollResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"results\",\"type\":\"flags.1?Vector<PollAnswerVoters>\"},{\"name\":\"total_voters\",\"type\":\"flags.2?int\"},{\"name\":\"recent_voters\",\"type\":\"flags.3?Vector<int>\"},{\"name\":\"solution\",\"type\":\"flags.4?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.4?Vector<MessageEntity>\"}],\"type\":\"PollResults\"},{\"id\":\"261416433\",\"predicate\":\"inputMediaPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"correct_answers\",\"type\":\"flags.0?Vector<bytes>\"},{\"name\":\"solution\",\"type\":\"flags.1?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.1?Vector<MessageEntity>\"}],\"type\":\"InputMedia\"},{\"id\":\"1272375192\",\"predicate\":\"messageMediaPoll\",\"params\":[{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"MessageMedia\"},{\"id\":4030849616,\"predicate\":\"chatOnlines\",\"params\":[{\"name\":\"onlines\",\"type\":\"int\"}],\"type\":\"ChatOnlines\"},{\"id\":\"1202287072\",\"predicate\":\"statsURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":3769678894,\"predicate\":\"photoStrippedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":\"1605510357\",\"predicate\":\"chatAdminRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"change_info\",\"type\":\"flags.0?true\"},{\"name\":\"post_messages\",\"type\":\"flags.1?true\"},{\"name\":\"edit_messages\",\"type\":\"flags.2?true\"},{\"name\":\"delete_messages\",\"type\":\"flags.3?true\"},{\"name\":\"ban_users\",\"type\":\"flags.4?true\"},{\"name\":\"invite_users\",\"type\":\"flags.5?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.7?true\"},{\"name\":\"add_admins\",\"type\":\"flags.9?true\"},{\"name\":\"anonymous\",\"type\":\"flags.10?true\"},{\"name\":\"manage_call\",\"type\":\"flags.11?true\"},{\"name\":\"other\",\"type\":\"flags.12?true\"}],\"type\":\"ChatAdminRights\"},{\"id\":2668758040,\"predicate\":\"chatBannedRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"view_messages\",\"type\":\"flags.0?true\"},{\"name\":\"send_messages\",\"type\":\"flags.1?true\"},{\"name\":\"send_media\",\"type\":\"flags.2?true\"},{\"name\":\"send_stickers\",\"type\":\"flags.3?true\"},{\"name\":\"send_gifs\",\"type\":\"flags.4?true\"},{\"name\":\"send_games\",\"type\":\"flags.5?true\"},{\"name\":\"send_inline\",\"type\":\"flags.6?true\"},{\"name\":\"embed_links\",\"type\":\"flags.7?true\"},{\"name\":\"send_polls\",\"type\":\"flags.8?true\"},{\"name\":\"change_info\",\"type\":\"flags.10?true\"},{\"name\":\"invite_users\",\"type\":\"flags.15?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.17?true\"},{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"ChatBannedRights\"},{\"id\":\"1421875280\",\"predicate\":\"updateChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"default_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3861952889,\"predicate\":\"inputWallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":\"1913199744\",\"predicate\":\"inputWallPaperSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputWallPaper\"},{\"id\":3144345741,\"predicate\":\"channelParticipantsContacts\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":\"771095562\",\"predicate\":\"channelAdminLogEventActionDefaultBannedRights\",\"params\":[{\"name\":\"prev_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"new_banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":2399639107,\"predicate\":\"channelAdminLogEventActionStopPoll\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"471437699\",\"predicate\":\"account.wallPapersNotModified\",\"params\":[],\"type\":\"account.WallPapers\"},{\"id\":\"1881892265\",\"predicate\":\"account.wallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"wallpapers\",\"type\":\"Vector<WallPaper>\"}],\"type\":\"account.WallPapers\"},{\"id\":3737042563,\"predicate\":\"codeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_flashcall\",\"type\":\"flags.0?true\"},{\"name\":\"current_number\",\"type\":\"flags.1?true\"},{\"name\":\"allow_app_hash\",\"type\":\"flags.4?true\"}],\"type\":\"CodeSettings\"},{\"id\":\"84438264\",\"predicate\":\"wallPaperSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blur\",\"type\":\"flags.1?true\"},{\"name\":\"motion\",\"type\":\"flags.2?true\"},{\"name\":\"background_color\",\"type\":\"flags.0?int\"},{\"name\":\"second_background_color\",\"type\":\"flags.4?int\"},{\"name\":\"intensity\",\"type\":\"flags.3?int\"},{\"name\":\"rotation\",\"type\":\"flags.4?int\"}],\"type\":\"WallPaperSettings\"},{\"id\":3762434803,\"predicate\":\"autoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"video_preload_large\",\"type\":\"flags.1?true\"},{\"name\":\"audio_preload_next\",\"type\":\"flags.2?true\"},{\"name\":\"phonecalls_less_data\",\"type\":\"flags.3?true\"},{\"name\":\"photo_size_max\",\"type\":\"int\"},{\"name\":\"video_size_max\",\"type\":\"int\"},{\"name\":\"file_size_max\",\"type\":\"int\"},{\"name\":\"video_upload_maxbitrate\",\"type\":\"int\"}],\"type\":\"AutoDownloadSettings\"},{\"id\":\"1674235686\",\"predicate\":\"account.autoDownloadSettings\",\"params\":[{\"name\":\"low\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"medium\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"high\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"account.AutoDownloadSettings\"},{\"id\":3585325561,\"predicate\":\"emojiKeyword\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector<string>\"}],\"type\":\"EmojiKeyword\"},{\"id\":\"594408994\",\"predicate\":\"emojiKeywordDeleted\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector<string>\"}],\"type\":\"EmojiKeyword\"},{\"id\":\"1556570557\",\"predicate\":\"emojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"keywords\",\"type\":\"Vector<EmojiKeyword>\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":2775937949,\"predicate\":\"emojiURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":3019592545,\"predicate\":\"emojiLanguage\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiLanguage\"},{\"id\":2765966344,\"predicate\":\"inputPrivacyKeyForwards\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":\"1777096355\",\"predicate\":\"privacyKeyForwards\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":\"1461304012\",\"predicate\":\"inputPrivacyKeyProfilePhoto\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":2517966829,\"predicate\":\"privacyKeyProfilePhoto\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":3162490573,\"predicate\":\"fileLocationToBeDeprecated\",\"params\":[{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"}],\"type\":\"FileLocation\"},{\"id\":\"1075322878\",\"predicate\":\"inputPhotoFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":3627312883,\"predicate\":\"inputPhotoLegacyFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":\"668375447\",\"predicate\":\"inputPeerPhotoFileLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":\"230353641\",\"predicate\":\"inputStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":4283715173,\"predicate\":\"folder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autofill_new_broadcasts\",\"type\":\"flags.0?true\"},{\"name\":\"autofill_public_groups\",\"type\":\"flags.1?true\"},{\"name\":\"autofill_new_correspondents\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.3?ChatPhoto\"}],\"type\":\"Folder\"},{\"id\":\"1908216652\",\"predicate\":\"dialogFolder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"folder\",\"type\":\"Folder\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"unread_muted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_muted_messages_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_messages_count\",\"type\":\"int\"}],\"type\":\"Dialog\"},{\"id\":\"1684014375\",\"predicate\":\"inputDialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputDialogPeer\"},{\"id\":\"1363483106\",\"predicate\":\"dialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"DialogPeer\"},{\"id\":4224893590,\"predicate\":\"inputFolderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputFolderPeer\"},{\"id\":3921323624,\"predicate\":\"folderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"FolderPeer\"},{\"id\":\"422972864\",\"predicate\":\"updateFolderPeers\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector<FolderPeer>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"756118935\",\"predicate\":\"inputUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputUser\"},{\"id\":\"707290417\",\"predicate\":\"inputChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputChannel\"},{\"id\":\"398123750\",\"predicate\":\"inputPeerUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":2627073979,\"predicate\":\"inputPeerChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":\"55761658\",\"predicate\":\"inputPrivacyKeyPhoneNumber\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":3516589165,\"predicate\":\"privacyKeyPhoneNumber\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":2822794409,\"predicate\":\"topPeerCategoryForwardUsers\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":4226728176,\"predicate\":\"topPeerCategoryForwardChats\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":2725218331,\"predicate\":\"channelAdminLogEventActionChangeLinkedChat\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3896830975,\"predicate\":\"messages.searchCounter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.SearchCounter\"},{\"id\":\"280464681\",\"predicate\":\"keyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"}],\"type\":\"KeyboardButton\"},{\"id\":3492708308,\"predicate\":\"inputKeyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.1?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":2463316494,\"predicate\":\"urlAuthResultRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"User\"},{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":2408320590,\"predicate\":\"urlAuthResultAccepted\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":2849430303,\"predicate\":\"urlAuthResultDefault\",\"params\":[],\"type\":\"UrlAuthResult\"},{\"id\":\"1283572154\",\"predicate\":\"inputPrivacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":3626197935,\"predicate\":\"inputPrivacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":\"415136107\",\"predicate\":\"privacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":2897086096,\"predicate\":\"privacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":2622389899,\"predicate\":\"messageEntityUnderline\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":3204879316,\"predicate\":\"messageEntityStrike\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"34469328\",\"predicate\":\"messageEntityBlockquote\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":\"1786671974\",\"predicate\":\"updatePeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"}],\"type\":\"Update\"},{\"id\":3216354699,\"predicate\":\"channelLocationEmpty\",\"params\":[],\"type\":\"ChannelLocation\"},{\"id\":\"547062491\",\"predicate\":\"channelLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"GeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"ChannelLocation\"},{\"id\":3393592157,\"predicate\":\"peerLocated\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":3031420848,\"predicate\":\"updatePeerLocated\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector<PeerLocated>\"}],\"type\":\"Update\"},{\"id\":\"241923758\",\"predicate\":\"channelAdminLogEventActionChangeLocation\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChannelLocation\"},{\"name\":\"new_value\",\"type\":\"ChannelLocation\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3688169197,\"predicate\":\"inputReportReasonGeoIrrelevant\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":\"1401984889\",\"predicate\":\"channelAdminLogEventActionToggleSlowMode\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1148485274\",\"predicate\":\"auth.authorizationSignUpRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"terms_of_service\",\"type\":\"flags.0?help.TermsOfService\"}],\"type\":\"auth.Authorization\"},{\"id\":3628142905,\"predicate\":\"payments.paymentVerificationNeeded\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.PaymentResult\"},{\"id\":\"42402760\",\"predicate\":\"inputStickerSetAnimatedEmoji\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":\"967122427\",\"predicate\":\"updateNewScheduledMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"Update\"},{\"id\":2424728814,\"predicate\":\"updateDeleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"}],\"type\":\"Update\"},{\"id\":3497176244,\"predicate\":\"restrictionReason\",\"params\":[{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RestrictionReason\"},{\"id\":\"1012306921\",\"predicate\":\"inputTheme\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputTheme\"},{\"id\":4119399921,\"predicate\":\"inputThemeSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputTheme\"},{\"id\":\"42930452\",\"predicate\":\"theme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?Document\"},{\"name\":\"settings\",\"type\":\"flags.3?ThemeSettings\"},{\"name\":\"installs_count\",\"type\":\"int\"}],\"type\":\"Theme\"},{\"id\":4095653410,\"predicate\":\"account.themesNotModified\",\"params\":[],\"type\":\"account.Themes\"},{\"id\":\"2137482273\",\"predicate\":\"account.themes\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"themes\",\"type\":\"Vector<Theme>\"}],\"type\":\"account.Themes\"},{\"id\":2182544291,\"predicate\":\"updateTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"Theme\"}],\"type\":\"Update\"},{\"id\":3508640733,\"predicate\":\"inputPrivacyKeyAddedByPhone\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":\"1124062251\",\"predicate\":\"privacyKeyAddedByPhone\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":2267003193,\"predicate\":\"updateGeoLiveViewed\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"1448076945\",\"predicate\":\"updateLoginToken\",\"params\":[],\"type\":\"Update\"},{\"id\":\"1654593920\",\"predicate\":\"auth.loginToken\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":\"110008598\",\"predicate\":\"auth.loginTokenMigrateTo\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":\"957176926\",\"predicate\":\"auth.loginTokenSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.LoginToken\"},{\"id\":\"1474462241\",\"predicate\":\"account.contentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"},{\"name\":\"sensitive_can_change\",\"type\":\"flags.1?true\"}],\"type\":\"account.ContentSettings\"},{\"id\":2837970629,\"predicate\":\"messages.inactiveChats\",\"params\":[{\"name\":\"dates\",\"type\":\"Vector<int>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.InactiveChats\"},{\"id\":3282117730,\"predicate\":\"baseThemeClassic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":4225242760,\"predicate\":\"baseThemeDay\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":3081969320,\"predicate\":\"baseThemeNight\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":\"1834973166\",\"predicate\":\"baseThemeTinted\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":\"1527845466\",\"predicate\":\"baseThemeArctic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":2217196460,\"predicate\":\"inputWallPaperNoFile\",\"params\":[],\"type\":\"InputWallPaper\"},{\"id\":2331249445,\"predicate\":\"wallPaperNoFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":3176168657,\"predicate\":\"inputThemeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?InputWallPaper\"},{\"name\":\"wallpaper_settings\",\"type\":\"flags.1?WallPaperSettings\"}],\"type\":\"InputThemeSettings\"},{\"id\":2618595402,\"predicate\":\"themeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?WallPaper\"}],\"type\":\"ThemeSettings\"},{\"id\":\"1421174295\",\"predicate\":\"webPageAttributeTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"documents\",\"type\":\"flags.0?Vector<Document>\"},{\"name\":\"settings\",\"type\":\"flags.1?ThemeSettings\"}],\"type\":\"WebPageAttribute\"},{\"id\":\"1123585836\",\"predicate\":\"updateMessagePollVote\",\"params\":[{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector<bytes>\"}],\"type\":\"Update\"},{\"id\":2727236953,\"predicate\":\"messageUserVote\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":\"909603888\",\"predicate\":\"messageUserVoteInputOption\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":\"244310238\",\"predicate\":\"messageUserVoteMultiple\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector<bytes>\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":\"136574537\",\"predicate\":\"messages.votesList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"votes\",\"type\":\"Vector<MessageUserVote>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.VotesList\"},{\"id\":3150401885,\"predicate\":\"keyboardButtonRequestPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"quiz\",\"type\":\"flags.0?Bool\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":\"1981704948\",\"predicate\":\"messageEntityBankCard\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":4117234314,\"predicate\":\"bankCardOpenUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"BankCardOpenUrl\"},{\"id\":\"1042605427\",\"predicate\":\"payments.bankCardData\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"open_urls\",\"type\":\"Vector<BankCardOpenUrl>\"}],\"type\":\"payments.BankCardData\"},{\"id\":4176226379,\"predicate\":\"peerSelfLocated\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":\"1949890536\",\"predicate\":\"dialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.1?true\"},{\"name\":\"groups\",\"type\":\"flags.2?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.3?true\"},{\"name\":\"bots\",\"type\":\"flags.4?true\"},{\"name\":\"exclude_muted\",\"type\":\"flags.11?true\"},{\"name\":\"exclude_read\",\"type\":\"flags.12?true\"},{\"name\":\"exclude_archived\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"emoticon\",\"type\":\"flags.25?string\"},{\"name\":\"pinned_peers\",\"type\":\"Vector<InputPeer>\"},{\"name\":\"include_peers\",\"type\":\"Vector<InputPeer>\"},{\"name\":\"exclude_peers\",\"type\":\"Vector<InputPeer>\"}],\"type\":\"DialogFilter\"},{\"id\":\"2004110666\",\"predicate\":\"dialogFilterSuggested\",\"params\":[{\"name\":\"filter\",\"type\":\"DialogFilter\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"DialogFilterSuggested\"},{\"id\":\"654302845\",\"predicate\":\"updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Update\"},{\"id\":2782339333,\"predicate\":\"updateDialogFilterOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector<int>\"}],\"type\":\"Update\"},{\"id\":\"889491791\",\"predicate\":\"updateDialogFilters\",\"params\":[],\"type\":\"Update\"},{\"id\":3057118639,\"predicate\":\"statsDateRangeDays\",\"params\":[{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"StatsDateRangeDays\"},{\"id\":3410210014,\"predicate\":\"statsAbsValueAndPrev\",\"params\":[{\"name\":\"current\",\"type\":\"double\"},{\"name\":\"previous\",\"type\":\"double\"}],\"type\":\"StatsAbsValueAndPrev\"},{\"id\":3419287520,\"predicate\":\"statsPercentValue\",\"params\":[{\"name\":\"part\",\"type\":\"double\"},{\"name\":\"total\",\"type\":\"double\"}],\"type\":\"StatsPercentValue\"},{\"id\":\"1244130093\",\"predicate\":\"statsGraphAsync\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":3202127906,\"predicate\":\"statsGraphError\",\"params\":[{\"name\":\"error\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":2393138358,\"predicate\":\"statsGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"json\",\"type\":\"DataJSON\"},{\"name\":\"zoom_token\",\"type\":\"flags.0?string\"}],\"type\":\"StatsGraph\"},{\"id\":2907687357,\"predicate\":\"messageInteractionCounters\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"MessageInteractionCounters\"},{\"id\":3187114900,\"predicate\":\"stats.broadcastStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"followers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"views_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"shares_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"enabled_notifications\",\"type\":\"StatsPercentValue\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"followers_graph\",\"type\":\"StatsGraph\"},{\"name\":\"mute_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"iv_interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"views_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_followers_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"recent_message_interactions\",\"type\":\"Vector<MessageInteractionCounters>\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":3866083195,\"predicate\":\"inputMediaDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":\"1065280907\",\"predicate\":\"messageMediaDice\",\"params\":[{\"name\":\"value\",\"type\":\"int\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":3867103758,\"predicate\":\"inputStickerSetDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":2566302837,\"predicate\":\"help.promoDataEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.PromoData\"},{\"id\":2352576831,\"predicate\":\"help.promoData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"proxy\",\"type\":\"flags.0?true\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"psa_type\",\"type\":\"flags.1?string\"},{\"name\":\"psa_message\",\"type\":\"flags.2?string\"}],\"type\":\"help.PromoData\"},{\"id\":3895575894,\"predicate\":\"videoSize\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"location\",\"type\":\"FileLocation\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"video_start_ts\",\"type\":\"flags.0?double\"}],\"type\":\"VideoSize\"},{\"id\":\"643940105\",\"predicate\":\"updatePhoneCallSignalingData\",\"params\":[{\"name\":\"phone_call_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Update\"},{\"id\":\"1634294960\",\"predicate\":\"chatInvitePeek\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ChatInvite\"},{\"id\":\"418631927\",\"predicate\":\"statsGroupTopPoster\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"int\"},{\"name\":\"avg_chars\",\"type\":\"int\"}],\"type\":\"StatsGroupTopPoster\"},{\"id\":\"1611985938\",\"predicate\":\"statsGroupTopAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"deleted\",\"type\":\"int\"},{\"name\":\"kicked\",\"type\":\"int\"},{\"name\":\"banned\",\"type\":\"int\"}],\"type\":\"StatsGroupTopAdmin\"},{\"id\":\"831924812\",\"predicate\":\"statsGroupTopInviter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"invitations\",\"type\":\"int\"}],\"type\":\"StatsGroupTopInviter\"},{\"id\":4018141462,\"predicate\":\"stats.megagroupStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"members\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"messages\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"viewers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"posters\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"members_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_members_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"messages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"actions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"weekdays_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_posters\",\"type\":\"Vector<StatsGroupTopPoster>\"},{\"name\":\"top_admins\",\"type\":\"Vector<StatsGroupTopAdmin>\"},{\"name\":\"top_inviters\",\"type\":\"Vector<StatsGroupTopInviter>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":3198350372,\"predicate\":\"globalPrivacySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archive_and_mute_new_noncontact_peers\",\"type\":\"flags.0?Bool\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":\"1667228533\",\"predicate\":\"phoneConnectionWebrtc\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"turn\",\"type\":\"flags.0?true\"},{\"name\":\"stun\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"string\"}],\"type\":\"PhoneConnection\"},{\"id\":\"1107543535\",\"predicate\":\"help.countryCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"country_code\",\"type\":\"string\"},{\"name\":\"prefixes\",\"type\":\"flags.0?Vector<string>\"},{\"name\":\"patterns\",\"type\":\"flags.1?Vector<string>\"}],\"type\":\"help.CountryCode\"},{\"id\":3280440867,\"predicate\":\"help.country\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hidden\",\"type\":\"flags.0?true\"},{\"name\":\"iso2\",\"type\":\"string\"},{\"name\":\"default_name\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"flags.1?string\"},{\"name\":\"country_codes\",\"type\":\"Vector<help.CountryCode>\"}],\"type\":\"help.Country\"},{\"id\":2479628082,\"predicate\":\"help.countriesListNotModified\",\"params\":[],\"type\":\"help.CountriesList\"},{\"id\":2278585758,\"predicate\":\"help.countriesList\",\"params\":[{\"name\":\"countries\",\"type\":\"Vector<help.Country>\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":\"1163625789\",\"predicate\":\"messageViews\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"views\",\"type\":\"flags.0?int\"},{\"name\":\"forwards\",\"type\":\"flags.1?int\"},{\"name\":\"replies\",\"type\":\"flags.2?MessageReplies\"}],\"type\":\"MessageViews\"},{\"id\":\"1854571743\",\"predicate\":\"updateChannelMessageForwards\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"1520986705\",\"predicate\":\"photoSizeProgressive\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"location\",\"type\":\"FileLocation\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector<int>\"}],\"type\":\"PhotoSize\"},{\"id\":3066361155,\"predicate\":\"messages.messageViews\",\"params\":[{\"name\":\"views\",\"type\":\"Vector<MessageViews>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.MessageViews\"},{\"id\":\"482860628\",\"predicate\":\"updateReadChannelDiscussionInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"},{\"name\":\"broadcast_id\",\"type\":\"flags.0?int\"},{\"name\":\"broadcast_post\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":\"1178116716\",\"predicate\":\"updateReadChannelDiscussionOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":4124938141,\"predicate\":\"messages.discussionMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"max_id\",\"type\":\"flags.0?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"flags.1?int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"flags.2?int\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":2799007587,\"predicate\":\"messageReplyHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"reply_to_peer_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"reply_to_top_id\",\"type\":\"flags.1?int\"}],\"type\":\"MessageReplyHeader\"},{\"id\":\"1093204652\",\"predicate\":\"messageReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"comments\",\"type\":\"flags.0?true\"},{\"name\":\"replies\",\"type\":\"int\"},{\"name\":\"replies_pts\",\"type\":\"int\"},{\"name\":\"recent_repliers\",\"type\":\"flags.1?Vector<Peer>\"},{\"name\":\"channel_id\",\"type\":\"flags.0?int\"},{\"name\":\"max_id\",\"type\":\"flags.2?int\"},{\"name\":\"read_max_id\",\"type\":\"flags.3?int\"}],\"type\":\"MessageReplies\"},{\"id\":\"610945826\",\"predicate\":\"updatePeerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"blocked\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":3908927508,\"predicate\":\"peerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"PeerBlocked\"},{\"id\":\"1796675352\",\"predicate\":\"updateChannelUserTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":2902071934,\"predicate\":\"inputMessageCallbackQuery\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"InputMessage\"},{\"id\":3284564331,\"predicate\":\"channelParticipantLeft\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":3763035371,\"predicate\":\"channelParticipantsMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":3984976565,\"predicate\":\"updatePinnedMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2240317323,\"predicate\":\"updatePinnedChannelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"464520273\",\"predicate\":\"inputMessagesFilterPinned\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2308567701,\"predicate\":\"stats.messageStats\",\"params\":[{\"name\":\"views_graph\",\"type\":\"StatsGraph\"}],\"type\":\"stats.MessageStats\"},{\"id\":2564871831,\"predicate\":\"messageActionGeoProximityReached\",\"params\":[{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"to_id\",\"type\":\"Peer\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":3626061121,\"predicate\":\"photoPathSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":3643548293,\"predicate\":\"speakingInGroupCallAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":\"2004925620\",\"predicate\":\"groupCallDiscarded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"duration\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":3233940782,\"predicate\":\"groupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join_muted\",\"type\":\"flags.1?true\"},{\"name\":\"can_change_join_muted\",\"type\":\"flags.2?true\"},{\"name\":\"join_date_asc\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"params\",\"type\":\"flags.0?DataJSON\"},{\"name\":\"title\",\"type\":\"flags.3?string\"},{\"name\":\"stream_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"record_start_date\",\"type\":\"flags.5?int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":3635053583,\"predicate\":\"inputGroupCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGroupCall\"},{\"id\":\"2047704898\",\"predicate\":\"messageActionGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"duration\",\"type\":\"flags.0?int\"}],\"type\":\"MessageAction\"},{\"id\":\"1991897370\",\"predicate\":\"messageActionInviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"MessageAction\"},{\"id\":\"430815881\",\"predicate\":\"groupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.1?true\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.2?true\"},{\"name\":\"just_joined\",\"type\":\"flags.4?true\"},{\"name\":\"versioned\",\"type\":\"flags.5?true\"},{\"name\":\"min\",\"type\":\"flags.8?true\"},{\"name\":\"muted_by_you\",\"type\":\"flags.9?true\"},{\"name\":\"volume_by_admin\",\"type\":\"flags.10?true\"},{\"name\":\"self\",\"type\":\"flags.12?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"active_date\",\"type\":\"flags.3?int\"},{\"name\":\"source\",\"type\":\"int\"},{\"name\":\"volume\",\"type\":\"flags.7?int\"},{\"name\":\"about\",\"type\":\"flags.11?string\"},{\"name\":\"raise_hand_rating\",\"type\":\"flags.13?long\"}],\"type\":\"GroupCallParticipant\"},{\"id\":\"321954198\",\"predicate\":\"updateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":4075543374,\"predicate\":\"updateGroupCallParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participants\",\"type\":\"Vector<GroupCallParticipant>\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2757671323,\"predicate\":\"updateGroupCall\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"GroupCall\"}],\"type\":\"Update\"},{\"id\":2658302637,\"predicate\":\"phone.groupCall\",\"params\":[{\"name\":\"call\",\"type\":\"GroupCall\"},{\"name\":\"participants\",\"type\":\"Vector<GroupCallParticipant>\"},{\"name\":\"participants_next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"phone.GroupCall\"},{\"id\":4101460406,\"predicate\":\"phone.groupParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector<GroupCallParticipant>\"},{\"name\":\"next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":\"813821341\",\"predicate\":\"inlineQueryPeerTypeSameBotPM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":2201751468,\"predicate\":\"inlineQueryPeerTypePM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":3613836554,\"predicate\":\"inlineQueryPeerTypeChat\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":\"1589952067\",\"predicate\":\"inlineQueryPeerTypeMegagroup\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":\"1664413338\",\"predicate\":\"inlineQueryPeerTypeBroadcast\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":\"589338437\",\"predicate\":\"channelAdminLogEventActionStartGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3684667712,\"predicate\":\"channelAdminLogEventActionDiscardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":4179895506,\"predicate\":\"channelAdminLogEventActionParticipantMute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3863226816,\"predicate\":\"channelAdminLogEventActionParticipantUnmute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1456906823\",\"predicate\":\"channelAdminLogEventActionToggleGroupCallSetting\",\"params\":[{\"name\":\"join_muted\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":2328045569,\"predicate\":\"inputPaymentCredentialsGooglePay\",\"params\":[{\"name\":\"payment_token\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":\"375566091\",\"predicate\":\"messages.historyImport\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"messages.HistoryImport\"},{\"id\":3688534598,\"predicate\":\"sendMessageHistoryImportAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":\"1578088377\",\"predicate\":\"messages.historyImportParsed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pm\",\"type\":\"flags.0?true\"},{\"name\":\"group\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"flags.2?string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":4124956391,\"predicate\":\"inputReportReasonFake\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":4019011180,\"predicate\":\"messages.affectedFoundMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":2853895165,\"predicate\":\"messageActionSetMessagesTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":3147544997,\"predicate\":\"updatePeerHistoryTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":4088625183,\"predicate\":\"updateChatParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChatParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChatParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"2146218476\",\"predicate\":\"updateChannelParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChannelParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"133777546\",\"predicate\":\"updateBotStopped\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"stopped\",\"type\":\"Bool\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":\"507405952\",\"predicate\":\"chatInviteImporter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatInviteImporter\"},{\"id\":3183881676,\"predicate\":\"messages.exportedChatInvites\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"invites\",\"type\":\"Vector<ExportedChatInvite>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":\"410107472\",\"predicate\":\"messages.exportedChatInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":\"572915951\",\"predicate\":\"messages.exportedChatInviteReplaced\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":2176233482,\"predicate\":\"messages.chatInviteImporters\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"importers\",\"type\":\"Vector<ChatInviteImporter>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":3755094799,\"predicate\":\"chatAdminWithInvites\",\"params\":[{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"invites_count\",\"type\":\"int\"},{\"name\":\"revoked_invites_count\",\"type\":\"int\"}],\"type\":\"ChatAdminWithInvites\"},{\"id\":3063640791,\"predicate\":\"messages.chatAdminsWithInvites\",\"params\":[{\"name\":\"admins\",\"type\":\"Vector<ChatAdminWithInvites>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":\"1557846647\",\"predicate\":\"channelAdminLogEventActionParticipantJoinByInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1515256996\",\"predicate\":\"channelAdminLogEventActionExportedInviteDelete\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1091179342\",\"predicate\":\"channelAdminLogEventActionExportedInviteRevoke\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3910056793,\"predicate\":\"channelAdminLogEventActionExportedInviteEdit\",\"params\":[{\"name\":\"prev_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1048537159\",\"predicate\":\"channelAdminLogEventActionParticipantVolume\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":\"1855199800\",\"predicate\":\"channelAdminLogEventActionChangeHistoryTTL\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":2723014423,\"predicate\":\"messages.checkedHistoryImportPeer\",\"params\":[{\"name\":\"confirm_text\",\"type\":\"string\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":3148158521,\"predicate\":\"inputGroupCallStream\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"time_ms\",\"type\":\"long\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":2951045695,\"predicate\":\"phone.joinAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector<Peer>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":\"541839704\",\"predicate\":\"phone.exportedGroupCallInvite\",\"params\":[{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"phone.ExportedGroupCallInvite\"}],\"methods\":[{\"id\":3416209197,\"method\":\"invokeAfterMsg\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":\"1036301552\",\"method\":\"invokeAfterMsgs\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":2792825935,\"method\":\"auth.sendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":2163139623,\"method\":\"auth.signUp\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":3168081281,\"method\":\"auth.signIn\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":\"1461180992\",\"method\":\"auth.logOut\",\"params\":[],\"type\":\"Bool\"},{\"id\":2678787354,\"method\":\"auth.resetAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":3854565325,\"method\":\"auth.exportAuthorization\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":3824129555,\"method\":\"auth.importAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.Authorization\"},{\"id\":3453233669,\"method\":\"auth.bindTempAuthKey\",\"params\":[{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"},{\"name\":\"encrypted_message\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":\"1754754159\",\"method\":\"account.registerDevice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_muted\",\"type\":\"flags.0?true\"},{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"app_sandbox\",\"type\":\"Bool\"},{\"name\":\"secret\",\"type\":\"bytes\"},{\"name\":\"other_uids\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":\"813089983\",\"method\":\"account.unregisterDevice\",\"params\":[{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"other_uids\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":2227067795,\"method\":\"account.updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"},{\"name\":\"settings\",\"type\":\"InputPeerNotifySettings\"}],\"type\":\"Bool\"},{\"id\":\"313765169\",\"method\":\"account.getNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"}],\"type\":\"PeerNotifySettings\"},{\"id\":3682473799,\"method\":\"account.resetNotifySettings\",\"params\":[],\"type\":\"Bool\"},{\"id\":\"2018596725\",\"method\":\"account.updateProfile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"first_name\",\"type\":\"flags.0?string\"},{\"name\":\"last_name\",\"type\":\"flags.1?string\"},{\"name\":\"about\",\"type\":\"flags.2?string\"}],\"type\":\"User\"},{\"id\":\"1713919532\",\"method\":\"account.updateStatus\",\"params\":[{\"name\":\"offline\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2864387939,\"method\":\"account.getWallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.WallPapers\"},{\"id\":3317316998,\"method\":\"account.reportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"227648840\",\"method\":\"users.getUsers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Vector<User>\"},{\"id\":3392185777,\"method\":\"users.getFullUser\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"UserFull\"},{\"id\":\"749357634\",\"method\":\"contacts.getContactIDs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"Vector<int>\"},{\"id\":3299038190,\"method\":\"contacts.getStatuses\",\"params\":[],\"type\":\"Vector<ContactStatus>\"},{\"id\":3223553183,\"method\":\"contacts.getContacts\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"contacts.Contacts\"},{\"id\":\"746589157\",\"method\":\"contacts.importContacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector<InputContact>\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":\"157945344\",\"method\":\"contacts.deleteContacts\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Updates\"},{\"id\":\"269745566\",\"method\":\"contacts.deleteByPhones\",\"params\":[{\"name\":\"phones\",\"type\":\"Vector<string>\"}],\"type\":\"Bool\"},{\"id\":\"1758204945\",\"method\":\"contacts.block\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":3198573904,\"method\":\"contacts.unblock\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":4118557967,\"method\":\"contacts.getBlocked\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Blocked\"},{\"id\":\"1673946374\",\"method\":\"messages.getMessages\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputMessage>\"}],\"type\":\"messages.Messages\"},{\"id\":2699967347,\"method\":\"messages.getDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":3703276128,\"method\":\"messages.getHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":\"204812012\",\"method\":\"messages.search\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"from_id\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":\"238054714\",\"method\":\"messages.readHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":\"469850889\",\"method\":\"messages.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"just_clear\",\"type\":\"flags.0?true\"},{\"name\":\"revoke\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":3851326930,\"method\":\"messages.deleteMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":\"94983360\",\"method\":\"messages.receivedMessages\",\"params\":[{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Vector<ReceivedNotifyMessage>\"},{\"id\":\"1486110434\",\"method\":\"messages.setTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Bool\"},{\"id\":\"1376532592\",\"method\":\"messages.sendMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":\"881978281\",\"method\":\"messages.sendMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":3657360910,\"method\":\"messages.forwardMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"with_my_score\",\"type\":\"flags.8?true\"},{\"name\":\"from_peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"},{\"name\":\"random_id\",\"type\":\"Vector<long>\"},{\"name\":\"to_peer\",\"type\":\"InputPeer\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":3474297563,\"method\":\"messages.reportSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":\"913498268\",\"method\":\"messages.getPeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"PeerSettings\"},{\"id\":2303961934,\"method\":\"messages.report\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"1013621127\",\"method\":\"messages.getChats\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.Chats\"},{\"id\":\"998448230\",\"method\":\"messages.getFullChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"messages.ChatFull\"},{\"id\":3695519829,\"method\":\"messages.editChatTitle\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":3394009560,\"method\":\"messages.editChatPhoto\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":4188056073,\"method\":\"messages.addChatUser\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"fwd_limit\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":3308537242,\"method\":\"messages.deleteChatUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":\"164303470\",\"method\":\"messages.createChat\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<InputUser>\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":3990128682,\"method\":\"updates.getState\",\"params\":[],\"type\":\"updates.State\"},{\"id\":\"630429265\",\"method\":\"updates.getDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_total_limit\",\"type\":\"flags.0?int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":\"1926525996\",\"method\":\"photos.updateProfilePhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"photos.Photo\"},{\"id\":2314407785,\"method\":\"photos.uploadProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"}],\"type\":\"photos.Photo\"},{\"id\":2278522671,\"method\":\"photos.deletePhotos\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputPhoto>\"}],\"type\":\"Vector<long>\"},{\"id\":3003426337,\"method\":\"upload.saveFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":2975505148,\"method\":\"upload.getFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"precise\",\"type\":\"flags.0?true\"},{\"name\":\"cdn_supported\",\"type\":\"flags.1?true\"},{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.File\"},{\"id\":3304659051,\"method\":\"help.getConfig\",\"params\":[],\"type\":\"Config\"},{\"id\":\"531836966\",\"method\":\"help.getNearestDc\",\"params\":[],\"type\":\"NearestDc\"},{\"id\":\"1378703997\",\"method\":\"help.getAppUpdate\",\"params\":[{\"name\":\"source\",\"type\":\"string\"}],\"type\":\"help.AppUpdate\"},{\"id\":\"1295590211\",\"method\":\"help.getInviteText\",\"params\":[],\"type\":\"help.InviteText\"},{\"id\":2446144168,\"method\":\"photos.getUserPhotos\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"photos.Photos\"},{\"id\":\"651135312\",\"method\":\"messages.getDhConfig\",\"params\":[{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random_length\",\"type\":\"int\"}],\"type\":\"messages.DhConfig\"},{\"id\":4132286275,\"method\":\"messages.requestEncryption\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":\"1035731989\",\"method\":\"messages.acceptEncryption\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":4086541984,\"method\":\"messages.discardEncryption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":\"2031374829\",\"method\":\"messages.setEncryptedTyping\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"typing\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":\"2135648522\",\"method\":\"messages.readEncryptedHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":\"1157265941\",\"method\":\"messages.sendEncrypted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":\"1431914525\",\"method\":\"messages.sendEncryptedFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":\"852769188\",\"method\":\"messages.sendEncryptedService\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":\"1436924774\",\"method\":\"messages.receivedQueue\",\"params\":[{\"name\":\"max_qts\",\"type\":\"int\"}],\"type\":\"Vector<long>\"},{\"id\":\"1259113487\",\"method\":\"messages.reportEncryptedSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"}],\"type\":\"Bool\"},{\"id\":3732629309,\"method\":\"upload.saveBigFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"file_total_parts\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":3251461801,\"method\":\"initConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"system_lang_code\",\"type\":\"string\"},{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"proxy\",\"type\":\"flags.0?InputClientProxy\"},{\"name\":\"params\",\"type\":\"flags.1?JSONValue\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":2631862477,\"method\":\"help.getSupport\",\"params\":[],\"type\":\"help.Support\"},{\"id\":\"916930423\",\"method\":\"messages.readMessageContents\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":\"655677548\",\"method\":\"account.checkUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"1040964988\",\"method\":\"account.updateUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":\"301470424\",\"method\":\"contacts.search\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Found\"},{\"id\":3671837008,\"method\":\"account.getPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"}],\"type\":\"account.PrivacyRules\"},{\"id\":3388480744,\"method\":\"account.setPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector<InputPrivacyRule>\"}],\"type\":\"account.PrivacyRules\"},{\"id\":\"1099779595\",\"method\":\"account.deleteAccount\",\"params\":[{\"name\":\"reason\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"150761757\",\"method\":\"account.getAccountTTL\",\"params\":[],\"type\":\"AccountDaysTTL\"},{\"id\":\"608323678\",\"method\":\"account.setAccountTTL\",\"params\":[{\"name\":\"ttl\",\"type\":\"AccountDaysTTL\"}],\"type\":\"Bool\"},{\"id\":3667594509,\"method\":\"invokeWithLayer\",\"params\":[{\"name\":\"layer\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":4181511075,\"method\":\"contacts.resolveUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":2186758885,\"method\":\"account.sendChangePhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":\"1891839707\",\"method\":\"account.changePhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":\"71126828\",\"method\":\"messages.getStickers\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Stickers\"},{\"id\":\"479598769\",\"method\":\"messages.getAllStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":\"954152242\",\"method\":\"account.updateDeviceLocked\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":\"1738800940\",\"method\":\"auth.importBotAuthorization\",\"params\":[{\"name\":\"flags\",\"type\":\"int\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"bot_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":2338894028,\"method\":\"messages.getWebPagePreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"}],\"type\":\"MessageMedia\"},{\"id\":3810574680,\"method\":\"account.getAuthorizations\",\"params\":[],\"type\":\"account.Authorizations\"},{\"id\":3749180348,\"method\":\"account.resetAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":\"1418342645\",\"method\":\"account.getPassword\",\"params\":[],\"type\":\"account.Password\"},{\"id\":2631199481,\"method\":\"account.getPasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"account.PasswordSettings\"},{\"id\":2778402863,\"method\":\"account.updatePasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"new_settings\",\"type\":\"account.PasswordInputSettings\"}],\"type\":\"Bool\"},{\"id\":3515567382,\"method\":\"auth.checkPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"auth.Authorization\"},{\"id\":3633822822,\"method\":\"auth.requestPasswordRecovery\",\"params\":[],\"type\":\"auth.PasswordRecovery\"},{\"id\":\"1319464594\",\"method\":\"auth.recoverPassword\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":3214170551,\"method\":\"invokeWithoutUpdates\",\"params\":[{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":\"347716823\",\"method\":\"messages.exportChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"legacy_revoke_permanent\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"}],\"type\":\"ExportedChatInvite\"},{\"id\":\"1051570619\",\"method\":\"messages.checkChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"ChatInvite\"},{\"id\":\"1817183516\",\"method\":\"messages.importChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":\"639215886\",\"method\":\"messages.getStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"messages.StickerSet\"},{\"id\":3348096096,\"method\":\"messages.installStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"archived\",\"type\":\"Bool\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":4184757726,\"method\":\"messages.uninstallStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":3873403768,\"method\":\"messages.startBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":2417028975,\"method\":\"help.getAppChangelog\",\"params\":[{\"name\":\"prev_app_version\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":\"1468322785\",\"method\":\"messages.getMessagesViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"},{\"name\":\"increment\",\"type\":\"Bool\"}],\"type\":\"messages.MessageViews\"},{\"id\":3423619383,\"method\":\"channels.readHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2227305806,\"method\":\"channels.deleteMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":3507345179,\"method\":\"channels.deleteUserHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":4261967888,\"method\":\"channels.reportSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":2911672867,\"method\":\"channels.getMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector<InputMessage>\"}],\"type\":\"messages.Messages\"},{\"id\":\"306054633\",\"method\":\"channels.getParticipants\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelParticipantsFilter\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":\"1416484774\",\"method\":\"channels.getParticipant\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":\"176122811\",\"method\":\"channels.getChannels\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputChannel>\"}],\"type\":\"messages.Chats\"},{\"id\":\"141781513\",\"method\":\"channels.getFullChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.ChatFull\"},{\"id\":\"1029681423\",\"method\":\"channels.createChannel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.0?true\"},{\"name\":\"megagroup\",\"type\":\"flags.1?true\"},{\"name\":\"for_import\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"geo_point\",\"type\":\"flags.2?InputGeoPoint\"},{\"name\":\"address\",\"type\":\"flags.2?string\"}],\"type\":\"Updates\"},{\"id\":3543959810,\"method\":\"channels.editAdmin\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":\"1450044624\",\"method\":\"channels.editTitle\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":4046346185,\"method\":\"channels.editPhoto\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":\"283557164\",\"method\":\"channels.checkUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"890549214\",\"method\":\"channels.updateUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"615851205\",\"method\":\"channels.joinChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":4164332181,\"method\":\"channels.leaveChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":\"429865580\",\"method\":\"channels.inviteToChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"users\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Updates\"},{\"id\":3222347747,\"method\":\"channels.deleteChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":\"51854712\",\"method\":\"updates.getChannelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelMessagesFilter\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":2850463534,\"method\":\"messages.editChatAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"is_admin\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":\"363051235\",\"method\":\"messages.migrateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":\"1271290010\",\"method\":\"messages.searchGlobal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":\"2016638777\",\"method\":\"messages.reorderStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"order\",\"type\":\"Vector<long>\"}],\"type\":\"Bool\"},{\"id\":\"864953444\",\"method\":\"messages.getDocumentByHash\",\"params\":[{\"name\":\"sha256\",\"type\":\"bytes\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":2210348370,\"method\":\"messages.getSavedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.SavedGifs\"},{\"id\":\"846868683\",\"method\":\"messages.saveGif\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":\"1364105629\",\"method\":\"messages.getInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"geo_point\",\"type\":\"flags.0?InputGeoPoint\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"messages.BotResults\"},{\"id\":3948847622,\"method\":\"messages.setInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"private\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"results\",\"type\":\"Vector<InputBotInlineResult>\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"next_offset\",\"type\":\"flags.2?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.3?InlineBotSwitchPM\"}],\"type\":\"Bool\"},{\"id\":\"570955184\",\"method\":\"messages.sendInlineBotResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"hide_via\",\"type\":\"flags.11?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":3862932971,\"method\":\"channels.exportMessageLink\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"grouped\",\"type\":\"flags.0?true\"},{\"name\":\"thread\",\"type\":\"flags.1?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ExportedMessageLink\"},{\"id\":\"527021574\",\"method\":\"channels.toggleSignatures\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":\"1056025023\",\"method\":\"auth.resendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"auth.SentCode\"},{\"id\":\"520357240\",\"method\":\"auth.cancelCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":4255550774,\"method\":\"messages.getMessageEditData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"messages.MessageEditData\"},{\"id\":\"1224152952\",\"method\":\"messages.editMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"},{\"name\":\"schedule_date\",\"type\":\"flags.15?int\"}],\"type\":\"Updates\"},{\"id\":2203418042,\"method\":\"messages.editInlineBotMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"}],\"type\":\"Bool\"},{\"id\":2470627847,\"method\":\"messages.getBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"game\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"password\",\"type\":\"flags.2?InputCheckPasswordSRP\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":3582923530,\"method\":\"messages.setBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":3566742965,\"method\":\"contacts.getTopPeers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"correspondents\",\"type\":\"flags.0?true\"},{\"name\":\"bots_pm\",\"type\":\"flags.1?true\"},{\"name\":\"bots_inline\",\"type\":\"flags.2?true\"},{\"name\":\"phone_calls\",\"type\":\"flags.3?true\"},{\"name\":\"forward_users\",\"type\":\"flags.4?true\"},{\"name\":\"forward_chats\",\"type\":\"flags.5?true\"},{\"name\":\"groups\",\"type\":\"flags.10?true\"},{\"name\":\"channels\",\"type\":\"flags.15?true\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"contacts.TopPeers\"},{\"id\":\"451113900\",\"method\":\"contacts.resetTopPeerRating\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":3832593661,\"method\":\"messages.getPeerDialogs\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector<InputDialogPeer>\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":3157909835,\"method\":\"messages.saveDraft\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"}],\"type\":\"Bool\"},{\"id\":\"1782549861\",\"method\":\"messages.getAllDrafts\",\"params\":[],\"type\":\"Updates\"},{\"id\":\"766298703\",\"method\":\"messages.getFeaturedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":\"1527873830\",\"method\":\"messages.readFeaturedStickers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<long>\"}],\"type\":\"Bool\"},{\"id\":\"1587647177\",\"method\":\"messages.getRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.RecentStickers\"},{\"id\":\"958863608\",\"method\":\"messages.saveRecentSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2308530221,\"method\":\"messages.clearRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":\"1475442322\",\"method\":\"messages.getArchivedStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"offset_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":\"457157256\",\"method\":\"account.sendConfirmPhoneCode\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":\"1596029123\",\"method\":\"account.confirmPhone\",\"params\":[{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":4172297903,\"method\":\"channels.getAdminedPublicChannels\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_location\",\"type\":\"flags.0?true\"},{\"name\":\"check_limit\",\"type\":\"flags.1?true\"}],\"type\":\"messages.Chats\"},{\"id\":\"1706608543\",\"method\":\"messages.getMaskStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":3428542412,\"method\":\"messages.getAttachedStickers\",\"params\":[{\"name\":\"media\",\"type\":\"InputStickeredMedia\"}],\"type\":\"Vector<StickerSetCovered>\"},{\"id\":2387124616,\"method\":\"auth.dropTempAuthKeys\",\"params\":[{\"name\":\"except_auth_keys\",\"type\":\"Vector<long>\"}],\"type\":\"Bool\"},{\"id\":2398678208,\"method\":\"messages.setGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":\"363700068\",\"method\":\"messages.setInlineGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":3894568093,\"method\":\"messages.getGameHighScores\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":\"258170395\",\"method\":\"messages.getInlineGameHighScores\",\"params\":[{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":\"218777796\",\"method\":\"messages.getCommonChats\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":3953659888,\"method\":\"messages.getAllChats\",\"params\":[{\"name\":\"except_ids\",\"type\":\"Vector<int>\"}],\"type\":\"messages.Chats\"},{\"id\":3961704397,\"method\":\"help.setBotUpdatesStatus\",\"params\":[{\"name\":\"pending_updates_count\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"852135825\",\"method\":\"messages.getWebPage\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":2805064279,\"method\":\"messages.toggleDialogPin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":\"991616823\",\"method\":\"messages.reorderPinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"int\"},{\"name\":\"order\",\"type\":\"Vector<InputDialogPeer>\"}],\"type\":\"Bool\"},{\"id\":3602468338,\"method\":\"messages.getPinnedDialogs\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":2854709741,\"method\":\"bots.sendCustomRequest\",\"params\":[{\"name\":\"custom_method\",\"type\":\"string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"DataJSON\"},{\"id\":3860938573,\"method\":\"bots.answerWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":\"619086221\",\"method\":\"upload.getWebFile\",\"params\":[{\"name\":\"location\",\"type\":\"InputWebFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.WebFile\"},{\"id\":2582681413,\"method\":\"payments.getPaymentForm\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"payments.PaymentForm\"},{\"id\":2693966208,\"method\":\"payments.getPaymentReceipt\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":\"1997180532\",\"method\":\"payments.validateRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"info\",\"type\":\"PaymentRequestedInfo\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":\"730364339\",\"method\":\"payments.sendPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"requested_info_id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"credentials\",\"type\":\"InputPaymentCredentials\"}],\"type\":\"payments.PaymentResult\"},{\"id\":\"1151208273\",\"method\":\"account.getTmpPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":\"578650699\",\"method\":\"payments.getSavedInfo\",\"params\":[],\"type\":\"payments.SavedInfo\"},{\"id\":3627905217,\"method\":\"payments.clearSavedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"credentials\",\"type\":\"flags.0?true\"},{\"name\":\"info\",\"type\":\"flags.1?true\"}],\"type\":\"Bool\"},{\"id\":3858133754,\"method\":\"messages.setBotShippingResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector<ShippingOption>\"}],\"type\":\"Bool\"},{\"id\":\"163765653\",\"method\":\"messages.setBotPrecheckoutResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":4043532160,\"method\":\"stickers.createStickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"animated\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"stickers\",\"type\":\"Vector<InputStickerSetItem>\"}],\"type\":\"messages.StickerSet\"},{\"id\":4151709521,\"method\":\"stickers.removeStickerFromSet\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":4290172106,\"method\":\"stickers.changeStickerPosition\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"position\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":2253651646,\"method\":\"stickers.addStickerToSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker\",\"type\":\"InputStickerSetItem\"}],\"type\":\"messages.StickerSet\"},{\"id\":\"1369162417\",\"method\":\"messages.uploadMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":\"1430593449\",\"method\":\"phone.getCallConfig\",\"params\":[],\"type\":\"DataJSON\"},{\"id\":\"1124046573\",\"method\":\"phone.requestCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":\"1003664544\",\"method\":\"phone.acceptCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":\"788404002\",\"method\":\"phone.confirmCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":\"399855457\",\"method\":\"phone.receivedCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"}],\"type\":\"Bool\"},{\"id\":2999697856,\"method\":\"phone.discardCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"reason\",\"type\":\"PhoneCallDiscardReason\"},{\"name\":\"connection_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":\"1508562471\",\"method\":\"phone.setCallRating\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_initiative\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"rating\",\"type\":\"int\"},{\"name\":\"comment\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":\"662363518\",\"method\":\"phone.saveCallDebug\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"debug\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":\"536919235\",\"method\":\"upload.getCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.CdnFile\"},{\"id\":2603046056,\"method\":\"upload.reuploadCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"Vector<FileHash>\"},{\"id\":\"1375900482\",\"method\":\"help.getCdnConfig\",\"params\":[],\"type\":\"CdnConfig\"},{\"id\":4075959050,\"method\":\"langpack.getLangPack\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackDifference\"},{\"id\":4025104387,\"method\":\"langpack.getStrings\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"keys\",\"type\":\"Vector<string>\"}],\"type\":\"Vector<LangPackString>\"},{\"id\":3449309861,\"method\":\"langpack.getDifference\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"LangPackDifference\"},{\"id\":\"1120311183\",\"method\":\"langpack.getLanguages\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"}],\"type\":\"Vector<LangPackLanguage>\"},{\"id\":\"1920559378\",\"method\":\"channels.editBanned\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":\"870184064\",\"method\":\"channels.getAdminLog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"events_filter\",\"type\":\"flags.0?ChannelAdminLogEventsFilter\"},{\"name\":\"admins\",\"type\":\"flags.1?Vector<InputUser>\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"min_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":\"1302676017\",\"method\":\"upload.getCdnFileHashes\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector<FileHash>\"},{\"id\":3380473888,\"method\":\"messages.sendScreenshotNotification\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":3935085817,\"method\":\"channels.setStickers\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":\"567151374\",\"method\":\"messages.getFavedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FavedStickers\"},{\"id\":3120547163,\"method\":\"messages.faveSticker\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unfave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":3937786936,\"method\":\"channels.readMessageContents\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":2274703345,\"method\":\"contacts.resetSaved\",\"params\":[],\"type\":\"Bool\"},{\"id\":\"1180140658\",\"method\":\"messages.getUnreadMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":2939592002,\"method\":\"channels.deleteHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":\"1036054804\",\"method\":\"help.getRecentMeUrls\",\"params\":[{\"name\":\"referer\",\"type\":\"string\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":3938171212,\"method\":\"channels.togglePreHistoryHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":\"251759059\",\"method\":\"messages.readMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":3150207753,\"method\":\"messages.getRecentLocations\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":3422621899,\"method\":\"messages.sendMultiMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"multi_media\",\"type\":\"Vector<InputSingleMedia>\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":\"1347929239\",\"method\":\"messages.uploadEncryptedFile\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"EncryptedFile\"},{\"id\":\"405695855\",\"method\":\"account.getWebAuthorizations\",\"params\":[],\"type\":\"account.WebAuthorizations\"},{\"id\":\"755087855\",\"method\":\"account.resetWebAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":\"1747789204\",\"method\":\"account.resetWebAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":3266826379,\"method\":\"messages.searchStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_featured\",\"type\":\"flags.0?true\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":3338819889,\"method\":\"upload.getFileHashes\",\"params\":[{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector<FileHash>\"},{\"id\":\"749019089\",\"method\":\"help.getTermsOfServiceUpdate\",\"params\":[],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":4000511898,\"method\":\"help.acceptTermsOfService\",\"params\":[{\"name\":\"id\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":2995305597,\"method\":\"account.getAllSecureValues\",\"params\":[],\"type\":\"Vector<SecureValue>\"},{\"id\":\"1936088002\",\"method\":\"account.getSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureValueType>\"}],\"type\":\"Vector<SecureValue>\"},{\"id\":2308956957,\"method\":\"account.saveSecureValue\",\"params\":[{\"name\":\"value\",\"type\":\"InputSecureValue\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureValue\"},{\"id\":3095444555,\"method\":\"account.deleteSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureValueType>\"}],\"type\":\"Bool\"},{\"id\":2429064373,\"method\":\"users.setSecureValueErrors\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"errors\",\"type\":\"Vector<SecureValueError>\"}],\"type\":\"Bool\"},{\"id\":3094063329,\"method\":\"account.getAuthorizationForm\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":3875699860,\"method\":\"account.acceptAuthorization\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"},{\"name\":\"value_hashes\",\"type\":\"Vector<SecureValueHash>\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"Bool\"},{\"id\":2778945273,\"method\":\"account.sendVerifyPhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":\"1305716726\",\"method\":\"account.verifyPhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"1880182943\",\"method\":\"account.sendVerifyEmailCode\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.SentEmailCode\"},{\"id\":3971627483,\"method\":\"account.verifyEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"},{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"1072547679\",\"method\":\"help.getDeepLinkInfo\",\"params\":[{\"name\":\"path\",\"type\":\"string\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":2196890527,\"method\":\"contacts.getSaved\",\"params\":[],\"type\":\"Vector<SavedContact>\"},{\"id\":2202135744,\"method\":\"channels.getLeftChannels\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":4032514052,\"method\":\"account.initTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"message_users\",\"type\":\"flags.1?true\"},{\"name\":\"message_chats\",\"type\":\"flags.2?true\"},{\"name\":\"message_megagroups\",\"type\":\"flags.3?true\"},{\"name\":\"message_channels\",\"type\":\"flags.4?true\"},{\"name\":\"files\",\"type\":\"flags.5?true\"},{\"name\":\"file_max_size\",\"type\":\"flags.5?int\"}],\"type\":\"account.Takeout\"},{\"id\":\"489050862\",\"method\":\"account.finishTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":\"486505992\",\"method\":\"messages.getSplitRanges\",\"params\":[],\"type\":\"Vector<MessageRange>\"},{\"id\":\"911373810\",\"method\":\"invokeWithMessagesRange\",\"params\":[{\"name\":\"range\",\"type\":\"MessageRange\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":2896821550,\"method\":\"invokeWithTakeout\",\"params\":[{\"name\":\"takeout_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":3263617423,\"method\":\"messages.markDialogUnread\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":\"585256482\",\"method\":\"messages.getDialogUnreadMarks\",\"params\":[],\"type\":\"Vector<DialogPeer>\"},{\"id\":2232729050,\"method\":\"contacts.toggleTopPeers\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":\"2119757468\",\"method\":\"messages.clearAllDrafts\",\"params\":[],\"type\":\"Bool\"},{\"id\":2559656208,\"method\":\"help.getAppConfig\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":\"1862465352\",\"method\":\"help.saveAppLog\",\"params\":[{\"name\":\"events\",\"type\":\"Vector<InputAppEvent>\"}],\"type\":\"Bool\"},{\"id\":3328290056,\"method\":\"help.getPassportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PassportConfig\"},{\"id\":\"1784243458\",\"method\":\"langpack.getLanguage\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":3534419948,\"method\":\"messages.updatePinnedMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"unpin\",\"type\":\"flags.1?true\"},{\"name\":\"pm_oneside\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2413762848,\"method\":\"account.confirmPasswordEmail\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"2055154197\",\"method\":\"account.resendPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":3251361206,\"method\":\"account.cancelPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":3546343212,\"method\":\"help.getSupportName\",\"params\":[],\"type\":\"help.SupportName\"},{\"id\":\"59377875\",\"method\":\"help.getUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"help.UserInfo\"},{\"id\":\"1723407216\",\"method\":\"help.editUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"}],\"type\":\"help.UserInfo\"},{\"id\":2668087080,\"method\":\"account.getContactSignUpNotification\",\"params\":[],\"type\":\"Bool\"},{\"id\":3488890721,\"method\":\"account.setContactSignUpNotification\",\"params\":[{\"name\":\"silent\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":\"1398240377\",\"method\":\"account.getNotifyExceptions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"compare_sound\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"flags.0?InputNotifyPeer\"}],\"type\":\"Updates\"},{\"id\":\"283795844\",\"method\":\"messages.sendVote\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector<bytes>\"}],\"type\":\"Updates\"},{\"id\":\"1941660731\",\"method\":\"messages.getPollResults\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":\"1848369232\",\"method\":\"messages.getOnlines\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"ChatOnlines\"},{\"id\":2167155430,\"method\":\"messages.getStatsURL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"params\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":3740665751,\"method\":\"messages.editChatAbout\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"about\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":2777049921,\"method\":\"messages.editChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":4237155306,\"method\":\"account.getWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"}],\"type\":\"WallPaper\"},{\"id\":3716494945,\"method\":\"account.uploadWallPaper\",\"params\":[{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":\"1817860919\",\"method\":\"account.saveWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"unsave\",\"type\":\"Bool\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":4276967273,\"method\":\"account.installWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":3141244932,\"method\":\"account.resetWallPapers\",\"params\":[],\"type\":\"Bool\"},{\"id\":\"1457130303\",\"method\":\"account.getAutoDownloadSettings\",\"params\":[],\"type\":\"account.AutoDownloadSettings\"},{\"id\":\"1995661875\",\"method\":\"account.saveAutoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"low\",\"type\":\"flags.0?true\"},{\"name\":\"high\",\"type\":\"flags.1?true\"},{\"name\":\"settings\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"Bool\"},{\"id\":\"899735650\",\"method\":\"messages.getEmojiKeywords\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":\"352892591\",\"method\":\"messages.getEmojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":\"1318675378\",\"method\":\"messages.getEmojiKeywordsLanguages\",\"params\":[{\"name\":\"lang_codes\",\"type\":\"Vector<string>\"}],\"type\":\"Vector<EmojiLanguage>\"},{\"id\":3585149990,\"method\":\"messages.getEmojiURL\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":\"1749536939\",\"method\":\"folders.editPeerFolders\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector<InputFolderPeer>\"}],\"type\":\"Updates\"},{\"id\":\"472471681\",\"method\":\"folders.deleteFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":\"1932455680\",\"method\":\"messages.getSearchCounters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"filters\",\"type\":\"Vector<MessagesFilter>\"}],\"type\":\"Vector<messages.SearchCounter>\"},{\"id\":4124758904,\"method\":\"channels.getGroupsForDiscussion\",\"params\":[],\"type\":\"messages.Chats\"},{\"id\":\"1079520178\",\"method\":\"channels.setDiscussionGroup\",\"params\":[{\"name\":\"broadcast\",\"type\":\"InputChannel\"},{\"name\":\"group\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":\"428848198\",\"method\":\"messages.requestUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":2972479781,\"method\":\"messages.acceptUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":\"1336717624\",\"method\":\"messages.hidePeerSettingsBar\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":3908330448,\"method\":\"contacts.addContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"add_phone_privacy_exception\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":4164002319,\"method\":\"contacts.acceptContact\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":2402864415,\"method\":\"channels.editCreator\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"Updates\"},{\"id\":3544759364,\"method\":\"contacts.getLocated\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"background\",\"type\":\"flags.1?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"self_expires\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":\"1491484525\",\"method\":\"channels.editLocation\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":3990134512,\"method\":\"channels.toggleSlowMode\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"seconds\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":3804391515,\"method\":\"messages.getScheduledHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":3183150180,\"method\":\"messages.getScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.Messages\"},{\"id\":3174597898,\"method\":\"messages.sendScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Updates\"},{\"id\":\"1504586518\",\"method\":\"messages.deleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Updates\"},{\"id\":\"473805619\",\"method\":\"account.uploadTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.0?InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":2217919007,\"method\":\"account.createTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":\"1555261397\",\"method\":\"account.updateTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"slug\",\"type\":\"flags.0?string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":4065792108,\"method\":\"account.saveTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":\"2061776695\",\"method\":\"account.installTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"format\",\"type\":\"flags.1?string\"},{\"name\":\"theme\",\"type\":\"flags.1?InputTheme\"}],\"type\":\"Bool\"},{\"id\":2375906347,\"method\":\"account.getTheme\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"Theme\"},{\"id\":\"676939512\",\"method\":\"account.getThemes\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.Themes\"},{\"id\":2981369111,\"method\":\"auth.exportLoginToken\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"except_ids\",\"type\":\"Vector<int>\"}],\"type\":\"auth.LoginToken\"},{\"id\":2511101156,\"method\":\"auth.importLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":3902057805,\"method\":\"auth.acceptLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"Authorization\"},{\"id\":3044323691,\"method\":\"account.setContentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":2342210990,\"method\":\"account.getContentSettings\",\"params\":[],\"type\":\"account.ContentSettings\"},{\"id\":\"300429806\",\"method\":\"channels.getInactiveChannels\",\"params\":[],\"type\":\"messages.InactiveChats\"},{\"id\":\"1705865692\",\"method\":\"account.getMultiWallPapers\",\"params\":[{\"name\":\"wallpapers\",\"type\":\"Vector<InputWallPaper>\"}],\"type\":\"Vector<WallPaper>\"},{\"id\":3094231054,\"method\":\"messages.getPollVotes\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"flags.0?bytes\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.VotesList\"},{\"id\":3037016042,\"method\":\"messages.toggleStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"uninstall\",\"type\":\"flags.0?true\"},{\"name\":\"archive\",\"type\":\"flags.1?true\"},{\"name\":\"unarchive\",\"type\":\"flags.2?true\"},{\"name\":\"stickersets\",\"type\":\"Vector<InputStickerSet>\"}],\"type\":\"Bool\"},{\"id\":\"779736953\",\"method\":\"payments.getBankCardData\",\"params\":[{\"name\":\"number\",\"type\":\"string\"}],\"type\":\"payments.BankCardData\"},{\"id\":4053719405,\"method\":\"messages.getDialogFilters\",\"params\":[],\"type\":\"Vector<DialogFilter>\"},{\"id\":2728186924,\"method\":\"messages.getSuggestedDialogFilters\",\"params\":[],\"type\":\"Vector<DialogFilterSuggested>\"},{\"id\":\"450142282\",\"method\":\"messages.updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Bool\"},{\"id\":3311649252,\"method\":\"messages.updateDialogFiltersOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":2873246746,\"method\":\"stats.getBroadcastStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":\"1646092192\",\"method\":\"stats.loadAsyncGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"x\",\"type\":\"flags.0?long\"}],\"type\":\"StatsGraph\"},{\"id\":2587250224,\"method\":\"stickers.setStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":2153596662,\"method\":\"bots.setBotCommands\",\"params\":[{\"name\":\"commands\",\"type\":\"Vector<BotCommand>\"}],\"type\":\"Bool\"},{\"id\":\"1608974939\",\"method\":\"messages.getOldFeaturedStickers\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":3231151137,\"method\":\"help.getPromoData\",\"params\":[],\"type\":\"help.PromoData\"},{\"id\":\"505748629\",\"method\":\"help.hidePromoData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":4286223235,\"method\":\"phone.sendSignalingData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":3705636359,\"method\":\"stats.getMegagroupStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":3945483510,\"method\":\"account.getGlobalPrivacySettings\",\"params\":[],\"type\":\"GlobalPrivacySettings\"},{\"id\":\"517647042\",\"method\":\"account.setGlobalPrivacySettings\",\"params\":[{\"name\":\"settings\",\"type\":\"GlobalPrivacySettings\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":4111317665,\"method\":\"help.dismissSuggestion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"suggestion\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"1935116200\",\"method\":\"help.getCountriesList\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":\"615875002\",\"method\":\"messages.getReplies\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":\"1147761405\",\"method\":\"messages.getDiscussionMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":4147227124,\"method\":\"messages.readDiscussion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":\"698914348\",\"method\":\"contacts.blockFromReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_message\",\"type\":\"flags.0?true\"},{\"name\":\"delete_history\",\"type\":\"flags.1?true\"},{\"name\":\"report_spam\",\"type\":\"flags.2?true\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":\"1445996571\",\"method\":\"stats.getMessagePublicForwards\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":3068175349,\"method\":\"stats.getMessageStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"stats.MessageStats\"},{\"id\":4029004939,\"method\":\"messages.unpinAllMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":3174935520,\"method\":\"phone.createGroupCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2972909435,\"method\":\"phone.joinGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"},{\"name\":\"invite_hash\",\"type\":\"flags.1?string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":\"1342404601\",\"method\":\"phone.leaveGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"source\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":\"2067345760\",\"method\":\"phone.inviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Updates\"},{\"id\":\"2054648117\",\"method\":\"phone.discardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":\"1958458429\",\"method\":\"phone.toggleGroupCallSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reset_invite_hash\",\"type\":\"flags.1?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_muted\",\"type\":\"flags.0?Bool\"}],\"type\":\"Updates\"},{\"id\":\"209498135\",\"method\":\"phone.getGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.GroupCall\"},{\"id\":3310934187,\"method\":\"phone.getGroupParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"ids\",\"type\":\"Vector<InputPeer>\"},{\"name\":\"sources\",\"type\":\"Vector<int>\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":3075111914,\"method\":\"phone.checkGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"source\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2200206609,\"method\":\"messages.deleteChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":4190888969,\"method\":\"messages.deletePhoneCallHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":\"1140726259\",\"method\":\"messages.checkHistoryImport\",\"params\":[{\"name\":\"import_head\",\"type\":\"string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":\"873008187\",\"method\":\"messages.initHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"media_count\",\"type\":\"int\"}],\"type\":\"messages.HistoryImport\"},{\"id\":\"713433234\",\"method\":\"messages.uploadImportedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":3023958852,\"method\":\"messages.startHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":2729812982,\"method\":\"messages.getExportedChatInvites\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"},{\"name\":\"offset_date\",\"type\":\"flags.2?int\"},{\"name\":\"offset_link\",\"type\":\"flags.2?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":\"1937010524\",\"method\":\"messages.getExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":\"48562110\",\"method\":\"messages.editExportedChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":\"1452833749\",\"method\":\"messages.deleteRevokedExportedChatInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"}],\"type\":\"Bool\"},{\"id\":3563365419,\"method\":\"messages.deleteExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"958457583\",\"method\":\"messages.getAdminsWithInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":\"654013065\",\"method\":\"messages.getChatInviteImporters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_user\",\"type\":\"InputUser\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":3087949796,\"method\":\"messages.setHistoryTTL\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":4203529973,\"method\":\"account.reportProfilePhoto\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"InputPhoto\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":\"187239529\",\"method\":\"channels.convertToGigagroup\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":\"1573261059\",\"method\":\"messages.checkHistoryImportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":3224004311,\"method\":\"phone.toggleGroupCallRecord\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"start\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"flags.1?string\"}],\"type\":\"Updates\"},{\"id\":3648383872,\"method\":\"phone.editGroupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"volume\",\"type\":\"flags.1?int\"},{\"name\":\"raise_hand\",\"type\":\"flags.2?Bool\"}],\"type\":\"Updates\"},{\"id\":\"480685066\",\"method\":\"phone.editGroupCallTitle\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":4017889594,\"method\":\"phone.getGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":3869926527,\"method\":\"phone.exportGroupCallInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.ExportedGroupCallInvite\"}]}, \"layer\": 125} as {\r\n MTProto: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n API: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n layer: number,\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { bytesToHex } from '../../helpers/bytes';\r\nimport { isObject, longFromInts } from './bin_utils';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport { str2bigInt, dup, divide_, bigInt2str } from '../../vendor/leemon';\r\nimport Schema, { MTProtoConstructor } from './schema';\r\n\r\n//////////////////////\r\n// @ts-ignore\r\nimport { gzipUncompress } from '../crypto/crypto_utils';\r\n//////////\r\n\r\nconst boolFalse = +Schema.API.constructors.find(c => c.predicate === 'boolFalse').id >>> 0;\r\nconst boolTrue = +Schema.API.constructors.find(c => c.predicate === 'boolTrue').id >>> 0;\r\nconst vector = +Schema.API.constructors.find(c => c.predicate === 'vector').id >>> 0;\r\nconst gzipPacked = +Schema.MTProto.constructors.find(c => c.predicate === 'gzip_packed').id >>> 0;\r\n\r\n//console.log('boolFalse', boolFalse === 0xbc799737);\r\n\r\nclass TLSerialization {\r\n public maxLength = 2048; // 2Kb\r\n public offset = 0; // in bytes\r\n public mtproto = false;\r\n private debug = false;//Modes.debug;\r\n\r\n public buffer: ArrayBuffer;\r\n public intView: Int32Array;\r\n public byteView: Uint8Array;\r\n\r\n constructor(options: Partial<{startMaxLength: number, mtproto: true}> = {}) {\r\n this.maxLength = options.startMaxLength || 2048; // 2Kb\r\n this.mtproto = options.mtproto || false;\r\n this.createBuffer();\r\n }\r\n\r\n public createBuffer() {\r\n this.buffer = new ArrayBuffer(this.maxLength);\r\n this.intView = new Int32Array(this.buffer);\r\n this.byteView = new Uint8Array(this.buffer);\r\n }\r\n\r\n public getArray() {\r\n const resultBuffer = new ArrayBuffer(this.offset);\r\n\r\n //let perf = performance.now();\r\n /* const resultUint8: any = new Uint8Array(resultBuffer);\r\n resultUint8.set(this.byteView.subarray(0, this.offset)); */\r\n //console.log('perf uint8', performance.now() - perf);\r\n\r\n //perf = performance.now();\r\n const resultInt32 = new Int32Array(resultBuffer);\r\n resultInt32.set(this.intView.subarray(0, this.offset / 4));\r\n //console.log('perf int32', performance.now() - perf);\r\n\r\n /* if(resultUint8.buffer.byteLength !== resultInt32.buffer.byteLength) {\r\n console.error(resultUint8, resultInt32);\r\n } */\r\n \r\n return resultInt32;\r\n }\r\n\r\n public getBuffer() {\r\n return this.getArray().buffer;\r\n }\r\n\r\n public getBytes(typed: true): Uint8Array;\r\n public getBytes(typed?: false): number[];\r\n public getBytes(typed?: boolean): number[] | Uint8Array {\r\n if(typed) {\r\n const resultBuffer = new ArrayBuffer(this.offset);\r\n const resultArray = new Uint8Array(resultBuffer);\r\n \r\n resultArray.set(this.byteView.subarray(0, this.offset));\r\n \r\n return resultArray;\r\n }\r\n \r\n const bytes: number[] = [];\r\n for(let i = 0; i < this.offset; i++) {\r\n bytes.push(this.byteView[i]);\r\n }\r\n return bytes;\r\n }\r\n\r\n public checkLength(needBytes: number) {\r\n if(this.offset + needBytes < this.maxLength) {\r\n return;\r\n }\r\n \r\n //console.log('Increase buffer start', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32));\r\n this.maxLength = Math.ceil(Math.max(this.maxLength * 2, this.offset + needBytes + 16) / 4) * 4;\r\n const previousBuffer = this.buffer;\r\n //const previousByteView = this.byteView;\r\n const previousArray = new Int32Array(previousBuffer);\r\n \r\n this.createBuffer();\r\n \r\n new Int32Array(this.buffer).set(previousArray);\r\n /* console.log('Increase buffer end', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32), \r\n bytesCmp(previousByteView, this.byteView.slice(0, previousByteView.length))); */\r\n }\r\n\r\n public writeInt(i: number, field: string) {\r\n this.debug && console.log('>>>', i.toString(16), i, field);\r\n \r\n const offset = this.offset / 4;\r\n this.checkLength(4);\r\n this.intView[offset] = i;\r\n this.offset += 4;\r\n\r\n return offset;\r\n }\r\n \r\n public storeInt(i: number, field?: string) {\r\n return this.writeInt(i, (field || '') + ':int');\r\n }\r\n \r\n public storeBool(i: boolean, field?: string) {\r\n if(i) {\r\n this.writeInt(boolTrue, (field || '') + ':bool');\r\n } else {\r\n this.writeInt(boolFalse, (field || '') + ':bool');\r\n }\r\n }\r\n \r\n public storeLongP(iHigh: number, iLow: number, field?: string) {\r\n this.writeInt(iLow, (field || '') + ':long[low]');\r\n this.writeInt(iHigh, (field || '') + ':long[high]');\r\n }\r\n\r\n public storeLong(sLong: Array<number> | string | number, field?: string) {\r\n if(Array.isArray(sLong)) {\r\n if(sLong.length === 2) {\r\n return this.storeLongP(sLong[0], sLong[1], field);\r\n } else {\r\n return this.storeIntBytes(sLong, 64, field);\r\n }\r\n }\r\n \r\n if(typeof sLong !== 'string') {\r\n sLong = sLong ? sLong.toString() : '0';\r\n }\r\n\r\n const R = 0x100000000;\r\n //const divRem = bigStringInt(sLong).divideAndRemainder(bigint(R));\r\n\r\n const a = str2bigInt(sLong, 10, 64);\r\n const q = dup(a);\r\n const r = dup(a);\r\n divide_(a, str2bigInt((R).toString(16), 16, 64), q, r);\r\n //divInt_(a, R);\r\n\r\n const high = +bigInt2str(q, 10);\r\n let low = +bigInt2str(r, 10);\r\n\r\n if(high < low) {\r\n low -= R; \r\n }\r\n\r\n //console.log('storeLong', sLong, divRem[0].intValue(), divRem[1].intValue(), high, low);\r\n \r\n //this.writeInt(divRem[1].intValue(), (field || '') + ':long[low]');\r\n //this.writeInt(divRem[0].intValue(), (field || '') + ':long[high]');\r\n this.writeInt(low, (field || '') + ':long[low]');\r\n this.writeInt(high, (field || '') + ':long[high]');\r\n }\r\n \r\n public storeDouble(f: any, field?: string) {\r\n const buffer = new ArrayBuffer(8);\r\n const intView = new Int32Array(buffer);\r\n const doubleView = new Float64Array(buffer);\r\n \r\n doubleView[0] = f;\r\n \r\n this.writeInt(intView[0], (field || '') + ':double[low]');\r\n this.writeInt(intView[1], (field || '') + ':double[high]');\r\n }\r\n \r\n public storeString(s: string, field?: string) {\r\n this.debug && console.log('>>>', s, (field || '') + ':string');\r\n \r\n if(s === undefined) {\r\n s = '';\r\n }\r\n const sUTF8 = unescape(encodeURIComponent(s));\r\n \r\n this.checkLength(sUTF8.length + 8);\r\n \r\n const len = sUTF8.length;\r\n if(len <= 253) {\r\n this.byteView[this.offset++] = len;\r\n } else {\r\n this.byteView[this.offset++] = 254;\r\n this.byteView[this.offset++] = len & 0xFF;\r\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\r\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\r\n }\r\n for(let i = 0; i < len; i++) {\r\n this.byteView[this.offset++] = sUTF8.charCodeAt(i);\r\n }\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.byteView[this.offset++] = 0;\r\n }\r\n }\r\n \r\n public storeBytes(bytes: ArrayBuffer | Uint8Array | number[], field?: string) {\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = new Uint8Array(bytes);\r\n } else if(bytes === undefined) {\r\n bytes = [];\r\n }\r\n this.debug && console.log('>>>', bytesToHex(bytes as number[]), (field || '') + ':bytes');\r\n \r\n // if uint8array were json.stringified, then will be: {'0': 123, '1': 123}\r\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\r\n this.checkLength(len + 8);\r\n if(len <= 253) {\r\n this.byteView[this.offset++] = len;\r\n } else {\r\n this.byteView[this.offset++] = 254;\r\n this.byteView[this.offset++] = len & 0xFF;\r\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\r\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\r\n }\r\n \r\n this.byteView.set(bytes as Uint8Array, this.offset);\r\n this.offset += len;\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.byteView[this.offset++] = 0;\r\n }\r\n }\r\n \r\n public storeIntBytes(bytes: any, bits: any, field?: string) {\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = new Uint8Array(bytes);\r\n }\r\n\r\n const len = bytes.length;\r\n if((bits % 32) || (len * 8) !== bits) {\r\n const error = new Error('Invalid bits: ' + bits + ', ' + bytes.length);\r\n console.error(error, bytes, field);\r\n throw error;\r\n }\r\n \r\n this.debug && console.log('>>>', bytesToHex(bytes), (field || '') + ':int' + bits);\r\n this.checkLength(len);\r\n \r\n this.byteView.set(bytes, this.offset);\r\n this.offset += len;\r\n }\r\n \r\n public storeRawBytes(bytes: ArrayLike<number>, field?: string) {\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = new Uint8Array(bytes);\r\n }\r\n\r\n const len = bytes.length;\r\n \r\n this.debug && console.log('>>>', bytesToHex(bytes), (field || ''));\r\n this.checkLength(len);\r\n \r\n this.byteView.set(bytes, this.offset);\r\n this.offset += len;\r\n }\r\n \r\n public storeMethod(methodName: string, params: any) {\r\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\r\n const methodData = schema.methods.find(m => m.method === methodName);\r\n\r\n if(!methodData) {\r\n throw new Error('No method ' + methodName + ' found');\r\n }\r\n \r\n this.storeInt(methodData.id, methodName + '[id]');\r\n\r\n const pFlags = params.pFlags || params; // * support pFlags, though am not expecting it to be there\r\n const flagsOffsets: {[paramName: string]: number} = {};\r\n //console.log('storeMethod', len, methodData);\r\n for(const param of methodData.params) {\r\n let type = param.type;\r\n\r\n if(type.indexOf('?') !== -1) {\r\n const condType = type.split('?');\r\n const fieldBit = condType[0].split('.');\r\n\r\n if(!(params[fieldBit[0]] & (1 << +fieldBit[1]))) {\r\n if(condType[1] === 'true' ? pFlags[param.name] : params[param.name] !== undefined) {\r\n //console.log('storeMethod autocompleting', methodName, param.name, params[param.name], type);\r\n params[fieldBit[0]] |= 1 << +fieldBit[1];\r\n } else {\r\n continue;\r\n }\r\n }\r\n \r\n //console.log('storeMethod', methodName, fieldBit, params[fieldBit[0]], params, param, condType, !!(params[fieldBit[0]] & (1 << +fieldBit[1])));\r\n type = condType[1];\r\n }\r\n \r\n //console.log('storeMethod', methodName, param.name, params[param.name], type);\r\n const result = this.storeObject(params[param.name], type, methodName + '[' + param.name + ']');\r\n\r\n if(type === '#') {\r\n params[param.name] = params[param.name] || 0;\r\n flagsOffsets[param.name] = result as number;\r\n }\r\n }\r\n\r\n for(let paramName in flagsOffsets) {\r\n this.intView[flagsOffsets[paramName]] = params[paramName];\r\n }\r\n\r\n return methodData.type;\r\n }\r\n \r\n public storeObject(obj: any, type: string, field?: string) {\r\n //console.log('storeObject', obj, type, field, this.offset, this.getBytes(true).hex);\r\n switch(type) {\r\n case '#':\r\n obj = obj || 0;\r\n case 'int':\r\n return this.storeInt(obj, field);\r\n case 'long':\r\n return this.storeLong(obj, field);\r\n case 'int128':\r\n return this.storeIntBytes(obj, 128, field);\r\n case 'int256':\r\n return this.storeIntBytes(obj, 256, field);\r\n case 'int512':\r\n return this.storeIntBytes(obj, 512, field);\r\n case 'string':\r\n return this.storeString(obj, field);\r\n case 'bytes':\r\n return this.storeBytes(obj, field);\r\n case 'double':\r\n return this.storeDouble(obj, field);\r\n case 'Bool':\r\n return this.storeBool(obj, field);\r\n case 'true':\r\n return\r\n }\r\n \r\n if(Array.isArray(obj)) {\r\n if(type.substr(0, 6) === 'Vector') {\r\n this.writeInt(vector, field + '[id]');\r\n } else if (type.substr(0, 6) !== 'vector') {\r\n throw new Error('Invalid vector type ' + type);\r\n }\r\n\r\n const itemType = type.substr(7, type.length - 8); // for \"Vector<itemType>\"\r\n this.writeInt(obj.length, field + '[count]');\r\n for(let i = 0; i < obj.length; i++) {\r\n this.storeObject(obj[i], itemType, field + '[' + i + ']');\r\n }\r\n\r\n return true;\r\n } else if (type.substr(0, 6).toLowerCase() === 'vector') {\r\n throw new Error('Invalid vector object');\r\n }\r\n \r\n if(!isObject(obj)) {\r\n throw new Error('Invalid object for type ' + type);\r\n }\r\n \r\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\r\n const predicate = obj['_'];\r\n let isBare = false;\r\n const constructorData: MTProtoConstructor = schema.constructors.find(c => c.predicate === predicate);\r\n \r\n if(isBare = (type.charAt(0) === '%')) {\r\n type = type.substr(1);\r\n }\r\n\r\n if(!constructorData) {\r\n throw new Error('No predicate ' + predicate + ' found');\r\n }\r\n \r\n if(predicate === type) {\r\n isBare = true;\r\n }\r\n \r\n if(!isBare) {\r\n this.writeInt(constructorData.id, field + '[' + predicate + '][id]');\r\n }\r\n\r\n const pFlags = obj.pFlags;\r\n const flagsOffsets: {[paramName: string]: number} = {};\r\n //console.log('storeObject', len, constructorData);\r\n for(const param of constructorData.params) {\r\n let type = param.type;\r\n\r\n //console.log('storeObject', param, type);\r\n if(type.indexOf('?') !== -1) {\r\n const condType = type.split('?');\r\n const fieldBit = condType[0].split('.');\r\n\r\n //console.log('storeObject fieldBit', fieldBit, obj[fieldBit[0]]);\r\n\r\n if(!(obj[fieldBit[0]] & (1 << +fieldBit[1]))) {\r\n if(condType[1] === 'true' ? pFlags && pFlags[param.name] : obj[param.name] !== undefined) {\r\n //console.log('storeObject autocompleting', param.name, obj[param.name], type);\r\n obj[fieldBit[0]] |= 1 << +fieldBit[1];\r\n } else {\r\n continue;\r\n }\r\n }\r\n\r\n type = condType[1];\r\n }\r\n //console.log('storeObject', param, type);\r\n \r\n const result = this.storeObject(obj[param.name], type, field + '[' + predicate + '][' + param.name + ']');\r\n\r\n if(type === '#') {\r\n obj[param.name] = obj[param.name] || 0;\r\n flagsOffsets[param.name] = result as number;\r\n }\r\n }\r\n\r\n for(let paramName in flagsOffsets) {\r\n this.intView[flagsOffsets[paramName]] = obj[paramName];\r\n }\r\n \r\n return constructorData.type;\r\n }\r\n}\r\n\r\nclass TLDeserialization {\r\n public offset = 0; // in bytes\r\n public override: {[key: string]: (result: any, field: string) => void};\r\n\r\n public buffer: ArrayBuffer;\r\n //public intView: Uint32Array;\r\n public byteView: Uint8Array;\r\n\r\n // this.debug = \r\n public mtproto: boolean = false;\r\n private debug: boolean;\r\n\r\n constructor(buffer: ArrayBuffer | Uint8Array, options: Partial<{override: any, mtproto: true, debug: true}> = {}) {\r\n //buffer = addPadding(buffer, 4, true); // fix 21.01.2020 for wss\r\n if(buffer instanceof ArrayBuffer) {\r\n this.buffer = buffer;\r\n this.byteView = new Uint8Array(this.buffer);\r\n } else {\r\n this.buffer = buffer.buffer;\r\n this.byteView = buffer;\r\n }\r\n \r\n //console.log(\"TCL: TLDeserialization -> constructor -> buffer\", buffer, this.byteView, this.byteView.hex);\r\n /* this.buffer = buffer;\r\n //this.intView = new Uint32Array(this.buffer);\r\n this.byteView = new Uint8Array(this.buffer); */\r\n\r\n //console.log(this.intView);\r\n\r\n this.override = 'override' in options ? options.override : {};\r\n this.mtproto = 'mtproto' in options ? options.mtproto : false;\r\n this.debug = options.debug !== undefined ? options.debug : /* Modes.debug */false;\r\n }\r\n\r\n public readInt(field: string) {\r\n //if(this.offset >= this.intView.length * 4) {\r\n if((this.byteView.length - this.offset) < 4) {\r\n console.error(this.byteView, this.offset);\r\n throw new Error('Nothing to fetch: ' + field);\r\n }\r\n \r\n //var i = this.intView[this.offset / 4];\r\n const i = new Uint32Array(this.byteView.buffer.slice(this.offset, this.offset + 4))[0];\r\n \r\n this.debug/* || field.includes('[dialog][read_outbox_max_id]') */ \r\n && console.log('<<<', i.toString(16), i, field, \r\n this.byteView.slice(this.offset - 16, this.offset + 16), \r\n this.byteView.slice(this.offset - 16, this.offset + 16).hex);\r\n \r\n this.offset += 4;\r\n \r\n return i;\r\n }\r\n \r\n public fetchInt(field?: string) {\r\n return this.readInt((field || '') + ':int');\r\n }\r\n \r\n public fetchDouble(field?: string) {\r\n const buffer = new ArrayBuffer(8);\r\n const intView = new Int32Array(buffer);\r\n const doubleView = new Float64Array(buffer);\r\n \r\n intView[0] = this.readInt((field || '') + ':double[low]'),\r\n intView[1] = this.readInt((field || '') + ':double[high]');\r\n \r\n return doubleView[0];\r\n }\r\n \r\n public fetchLong(field?: string): string {\r\n const iLow = this.readInt((field || '') + ':long[low]');\r\n const iHigh = this.readInt((field || '') + ':long[high]');\r\n \r\n //const longDec = bigint(iHigh).shiftLeft(32).add(bigint(iLow)).toString();\r\n const longDec = longFromInts(iHigh, iLow);\r\n \r\n return longDec;\r\n }\r\n \r\n public fetchBool(field?: string): boolean {\r\n const i = this.readInt((field || '') + ':bool');\r\n if(i === boolTrue) {\r\n return true;\r\n } else if(i === boolFalse) {\r\n return false;\r\n }\r\n\r\n this.offset -= 4;\r\n return this.fetchObject('Object', field);\r\n }\r\n \r\n public fetchString(field?: string): string {\r\n let len = this.byteView[this.offset++];\r\n \r\n if(len === 254) {\r\n len = this.byteView[this.offset++] |\r\n (this.byteView[this.offset++] << 8) |\r\n (this.byteView[this.offset++] << 16);\r\n }\r\n \r\n let sUTF8 = '';\r\n for(let i = 0; i < len; i++) {\r\n sUTF8 += String.fromCharCode(this.byteView[this.offset++]);\r\n }\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.offset++;\r\n }\r\n \r\n let s: string;\r\n try {\r\n s = decodeURIComponent(escape(sUTF8));\r\n } catch (e) {\r\n s = sUTF8;\r\n }\r\n \r\n this.debug && console.log('<<<', s, (field || '') + ':string');\r\n \r\n return s;\r\n }\r\n \r\n public fetchBytes(field?: string): Uint8Array {\r\n let len = this.byteView[this.offset++];\r\n \r\n if(len === 254) {\r\n len = this.byteView[this.offset++] |\r\n (this.byteView[this.offset++] << 8) |\r\n (this.byteView[this.offset++] << 16);\r\n }\r\n \r\n const bytes = this.byteView.subarray(this.offset, this.offset + len);\r\n this.offset += len;\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.offset++;\r\n }\r\n \r\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':bytes');\r\n \r\n return bytes;\r\n }\r\n \r\n public fetchIntBytes(bits: number, typed: true, field?: string): Uint8Array;\r\n public fetchIntBytes(bits: number, typed?: false, field?: string): number[];\r\n public fetchIntBytes(bits: number, typed?: boolean, field?: string) {\r\n if(bits % 32) {\r\n throw new Error('Invalid bits: ' + bits);\r\n }\r\n \r\n const len = bits / 8;\r\n if(typed) {\r\n const result = this.byteView.subarray(this.offset, this.offset + len);\r\n this.offset += len;\r\n return result;\r\n }\r\n \r\n const bytes: number[] = [];\r\n for(let i = 0; i < len; i++) {\r\n bytes.push(this.byteView[this.offset++]);\r\n }\r\n \r\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':int' + bits);\r\n \r\n return bytes;\r\n }\r\n \r\n public fetchRawBytes(len: any, typed: true, field: string): Uint8Array;\r\n public fetchRawBytes(len: any, typed: false, field: string): number[];\r\n public fetchRawBytes(len: any, typed: boolean, field: string) {\r\n if(len === false) {\r\n len = this.readInt((field || '') + '_length');\r\n if(len > this.byteView.byteLength) {\r\n throw new Error('Invalid raw bytes length: ' + len + ', buffer len: ' + this.byteView.byteLength);\r\n }\r\n }\r\n \r\n if(typed) {\r\n const bytes = new Uint8Array(len);\r\n bytes.set(this.byteView.subarray(this.offset, this.offset + len));\r\n this.offset += len;\r\n return bytes;\r\n }\r\n \r\n const bytes: number[] = [];\r\n for(let i = 0; i < len; i++) {\r\n bytes.push(this.byteView[this.offset++]);\r\n }\r\n \r\n this.debug && console.log('<<<', bytesToHex(bytes), (field || ''));\r\n \r\n return bytes;\r\n }\r\n \r\n public fetchObject(type: any, field?: string): any {\r\n switch(type) {\r\n case '#':\r\n case 'int':\r\n return this.fetchInt(field);\r\n case 'long':\r\n return this.fetchLong(field);\r\n case 'int128':\r\n return this.fetchIntBytes(128, false, field);\r\n case 'int256':\r\n return this.fetchIntBytes(256, false, field);\r\n case 'int512':\r\n return this.fetchIntBytes(512, false, field);\r\n case 'string':\r\n return this.fetchString(field);\r\n case 'bytes':\r\n return this.fetchBytes(field);\r\n case 'double':\r\n return this.fetchDouble(field);\r\n case 'Bool':\r\n return this.fetchBool(field);\r\n case 'true':\r\n return true;\r\n }\r\n \r\n field = field || type || 'Object';\r\n \r\n if(type.substr(0, 6) === 'Vector' || type.substr(0, 6) === 'vector') {\r\n if(type.charAt(0) === 'V') {\r\n const constructor = this.readInt(field + '[id]');\r\n const constructorCmp = constructor;\r\n \r\n if(constructorCmp === gzipPacked) { // Gzip packed\r\n const compressed = this.fetchBytes(field + '[packed_string]');\r\n const uncompressed = gzipUncompress(compressed);\r\n const newDeserializer = new TLDeserialization(uncompressed);\r\n \r\n return newDeserializer.fetchObject(type, field);\r\n }\r\n\r\n if(constructorCmp !== vector) {\r\n throw new Error('Invalid vector constructor ' + constructor);\r\n }\r\n }\r\n\r\n const len = this.readInt(field + '[count]');\r\n const result: any = [];\r\n if(len > 0) {\r\n const itemType = type.substr(7, type.length - 8); // for \"Vector<itemType>\"\r\n for(let i = 0; i < len; i++) {\r\n result.push(this.fetchObject(itemType, field + '[' + i + ']'));\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n \r\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\r\n let constructorData: MTProtoConstructor = null;\r\n let fallback = false;\r\n \r\n if(type.charAt(0) === '%') {\r\n const checkType = type.substr(1);\r\n constructorData = schema.constructors.find(c => c.type === checkType);\r\n if(!constructorData) {\r\n throw new Error('Constructor not found for type: ' + type);\r\n }\r\n } else if(type.charAt(0) >= 97 && type.charAt(0) <= 122) {\r\n constructorData = schema.constructors.find(c => c.predicate === type);\r\n if(!constructorData) {\r\n throw new Error('Constructor not found for predicate: ' + type);\r\n }\r\n } else {\r\n const constructor = this.readInt(field + '[id]');\r\n const constructorCmp = constructor;\r\n \r\n if(constructorCmp === gzipPacked) { // Gzip packed\r\n const compressed = this.fetchBytes(field + '[packed_string]');\r\n const uncompressed = gzipUncompress(compressed);\r\n const newDeserializer = new TLDeserialization(uncompressed);\r\n \r\n return newDeserializer.fetchObject(type, field);\r\n }\r\n \r\n let index = schema.constructorsIndex;\r\n if(!index) {\r\n schema.constructorsIndex = index = {};\r\n for(let i = 0, len = schema.constructors.length; i < len; i++) {\r\n index[schema.constructors[i].id] = i;\r\n }\r\n }\r\n\r\n const i = index[constructorCmp];\r\n if(i) {\r\n constructorData = schema.constructors[i];\r\n }\r\n \r\n if(!constructorData && this.mtproto) {\r\n const schemaFallback = Schema.API;\r\n for(let i = 0, len = schemaFallback.constructors.length; i < len; i++) {\r\n if(+schemaFallback.constructors[i].id === constructorCmp) {\r\n constructorData = schemaFallback.constructors[i];\r\n \r\n delete this.mtproto;\r\n fallback = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if(!constructorData) {\r\n console.error('Constructor not found:', constructor);\r\n \r\n let int1: number, int2: number;\r\n try {\r\n int1 = this.fetchInt(field);\r\n int2 = this.fetchInt(field);\r\n } catch(err) {\r\n\r\n }\r\n\r\n throw new Error('Constructor not found: ' + constructor + ' ' + int1 + ' ' + int2 + ' ' + field);\r\n }\r\n }\r\n \r\n const predicate = constructorData.predicate;\r\n \r\n const result: any = {'_': predicate};\r\n const overrideKey = (this.mtproto ? 'mt_' : '') + predicate;\r\n if(this.override[overrideKey]) {\r\n this.override[overrideKey](result, field + '[' + predicate + ']');\r\n } else {\r\n for(let i = 0, len = constructorData.params.length; i < len; i++) {\r\n const param = constructorData.params[i];\r\n let type = param.type;\r\n\r\n if(type === '#' && result.pFlags === undefined) {\r\n result.pFlags = {};\r\n }\r\n\r\n const isCond = (type.indexOf('?') !== -1);\r\n if(isCond) {\r\n const condType = type.split('?');\r\n const fieldBit = condType[0].split('.');\r\n\r\n if(!(result[fieldBit[0]] & (1 << +fieldBit[1]))) {\r\n //console.log('fetchObject bad', constructorData, result[fieldBit[0]], fieldBit);\r\n continue;\r\n }\r\n\r\n //console.log('fetchObject good', constructorData, result[fieldBit[0]], fieldBit);\r\n\r\n type = condType[1];\r\n }\r\n \r\n const value = this.fetchObject(type, field + '[' + predicate + '][' + param.name + ']');\r\n \r\n if(isCond && type === 'true') {\r\n result.pFlags[param.name] = value;\r\n } else {\r\n /* if(param.name === 'read_outbox_max_id') {\r\n console.log(result, param.name, value, field + '[' + predicate + '][' + param.name + ']');\r\n } */\r\n \r\n result[param.name] = value;\r\n }\r\n }\r\n }\r\n \r\n if(fallback) {\r\n this.mtproto = true;\r\n }\r\n \r\n return result;\r\n }\r\n \r\n public getOffset() {\r\n return this.offset;\r\n }\r\n \r\n public fetchEnd() {\r\n if(this.offset !== this.byteView.length) {\r\n throw new Error('Fetch end with non-empty buffer');\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nMOUNT_CLASS_TO.TLDeserialization = TLDeserialization;\r\nMOUNT_CLASS_TO.TLSerialization = TLSerialization;\r\nexport { TLDeserialization, TLSerialization };\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport sessionStorage from '../sessionStorage';\r\nimport { longFromInts } from './bin_utils';\r\nimport { nextRandomInt } from '../../helpers/random';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\n\r\n/*\r\nlet lol: any = {};\r\nfor(var i = 0; i < 100; i++) {\r\n timeManager.generateId();\r\n}\r\n*/\r\n\r\nexport class TimeManager {\r\n private lastMessageId = [0, 0];\r\n private timeOffset = 0;\r\n\r\n constructor() {\r\n sessionStorage.get('server_time_offset').then((to: any) => {\r\n if(to) {\r\n this.timeOffset = to;\r\n }\r\n });\r\n }\r\n\r\n public generateId(): string {\r\n const timeTicks = Date.now(),\r\n timeSec = Math.floor(timeTicks / 1000) + this.timeOffset,\r\n timeMSec = timeTicks % 1000,\r\n random = nextRandomInt(0xFFFF);\r\n\r\n let messageId = [timeSec, (timeMSec << 21) | (random << 3) | 4];\r\n if(this.lastMessageId[0] > messageId[0] ||\r\n this.lastMessageId[0] === messageId[0] && this.lastMessageId[1] >= messageId[1]) {\r\n messageId = [this.lastMessageId[0], this.lastMessageId[1] + 4];\r\n }\r\n\r\n this.lastMessageId = messageId;\r\n\r\n const ret = longFromInts(messageId[0], messageId[1]);\r\n\r\n /* if(lol[ret]) {\r\n console.error('[TimeManager]: Generated SAME msg id', messageId, this.timeOffset, ret);\r\n }\r\n lol[ret] = true;\r\n\r\n console.log('[TimeManager]: Generated msg id', messageId, this.timeOffset, ret); */\r\n\r\n return ret\r\n }\r\n\r\n public applyServerTime(serverTime: number, localTime?: number) {\r\n localTime = (localTime || Date.now()) / 1000 | 0;\r\n const newTimeOffset = serverTime - localTime;\r\n const changed = Math.abs(this.timeOffset - newTimeOffset) > 10;\r\n sessionStorage.set({\r\n server_time_offset: newTimeOffset\r\n });\r\n\r\n this.lastMessageId = [0, 0];\r\n this.timeOffset = newTimeOffset;\r\n \r\n //console.log('[TimeManager]: Apply server time', serverTime, localTime, newTimeOffset, changed);\r\n\r\n return changed;\r\n }\r\n}\r\n\r\nconst timeManager = new TimeManager();\r\nMOUNT_CLASS_TO.timeManager = timeManager;\r\nexport default timeManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst App = {\r\n id: 1025907,\r\n hash: '452b0359b988148995f22ff0f4229750',\r\n version: '0.4.3',\r\n langPackVersion: '0.1.6',\r\n langPack: 'macos',\r\n langPackCode: 'en',\r\n domains: [] as string[],\r\n baseDcId: 2\r\n};\r\n\r\nexport default App;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport {isObject, sortLongsArray} from './bin_utils';\r\nimport {TLDeserialization, TLSerialization} from './tl_utils';\r\nimport CryptoWorker from '../crypto/cryptoworker';\r\nimport sessionStorage from '../sessionStorage';\r\nimport Schema from './schema';\r\nimport timeManager from './timeManager';\r\nimport NetworkerFactory from './networkerFactory';\r\nimport { logger, LogLevels } from '../logger';\r\nimport { InvokeApiOptions } from '../../types';\r\nimport { longToBytes } from '../crypto/crypto_utils';\r\nimport MTTransport from './transports/transport';\r\nimport { convertToUint8Array, bufferConcat, bytesCmp, bytesToHex } from '../../helpers/bytes';\r\nimport { nextRandomInt } from '../../helpers/random';\r\nimport App from '../../config/app';\r\nimport DEBUG from '../../config/debug';\r\nimport Modes from '../../config/modes';\r\n\r\n///////////////////////////////////////////\r\n/////////////////////////////////////\r\n//////////\r\n\r\nimport type TcpObfuscated from './transports/tcpObfuscated';\r\nimport { bigInt2str, cmp, rightShift_, str2bigInt } from '../../vendor/leemon';\r\nimport { forEachReverse } from '../../helpers/array';\r\n\r\n//console.error('networker included!', new Error().stack);\r\n\r\nexport type MTMessageOptions = InvokeApiOptions & Partial<{\r\n noResponse: true, // http_wait\r\n longPoll: true,\r\n \r\n notContentRelated: true, // ACK\r\n noSchedule: true,\r\n messageId: string,\r\n}>;\r\n\r\nexport type MTMessage = InvokeApiOptions & MTMessageOptions & {\r\n msg_id: string,\r\n seq_no: number,\r\n body?: Uint8Array | number[],\r\n isAPI?: boolean,\r\n // only these four are important\r\n\r\n acked?: boolean,\r\n\r\n deferred?: {\r\n resolve: any,\r\n reject: any\r\n },\r\n\r\n container?: boolean,\r\n inner?: string[],\r\n\r\n // below - options\r\n\r\n notContentRelated?: true,\r\n noSchedule?: true,\r\n\r\n resultType?: string,\r\n\r\n longPoll?: true,\r\n noResponse?: true, // only with http (http_wait for longPoll)\r\n};\r\n\r\nconst CONNECTION_TIMEOUT = 5000;\r\nlet invokeAfterMsgConstructor: number;\r\n\r\nexport default class MTPNetworker {\r\n private authKeyUint8: Uint8Array;\r\n\r\n private isFileNetworker: boolean;\r\n private isFileUpload: boolean;\r\n private isFileDownload: boolean;\r\n\r\n private lastServerMessages: Array<string> = [];\r\n\r\n private sentMessages: {\r\n [msgId: string]: MTMessage\r\n } = {};\r\n\r\n private pendingMessages: {[msgId: string]: number} = {};\r\n private pendingAcks: Array<string> = [];\r\n private pendingResends: Array<string> = [];\r\n private connectionInited = false;\r\n\r\n/////////////////////////////////////////////\r\n////////////////////////////////\r\n//////////////////////////////\r\n/////////////////////////////////\r\n//////////////////////////////\r\n/////////////////////////////////////////\r\n////////////////////////////////////\r\n/////////////////////////\r\n//////////////////////////\r\n////////////\r\n\r\n private seqNo: number = 0;\r\n private prevSessionId: Uint8Array;\r\n private sessionId: Uint8Array;\r\n private serverSalt: Uint8Array;\r\n\r\n private lastResendReq: {\r\n req_msg_id: string,\r\n resend_msg_ids: Array<string>\r\n } | null = null;\r\n\r\n private name: string;\r\n private log: ReturnType<typeof logger>;\r\n \r\n public isOnline = false;\r\n private lastResponseTime = 0;\r\n\r\n private debug = DEBUG /* && false */ || Modes.debug;\r\n\r\n //private disconnectDelay: number;\r\n //private pingPromise: CancellablePromise<any>;\r\n //public onConnectionStatusChange: (online: boolean) => void;\r\n\r\n //private debugRequests: Array<{before: Uint8Array, after: Uint8Array}> = [];\r\n\r\n constructor(public dcId: number, private authKey: number[], private authKeyId: Uint8Array,\r\n serverSalt: number[], private transport: MTTransport, options: InvokeApiOptions = {}) {\r\n this.authKeyUint8 = convertToUint8Array(this.authKey);\r\n this.serverSalt = convertToUint8Array(serverSalt);\r\n\r\n this.isFileUpload = !!options.fileUpload;\r\n this.isFileDownload = !!options.fileDownload;\r\n this.isFileNetworker = this.isFileUpload || this.isFileDownload;\r\n\r\n const suffix = this.isFileUpload ? '-U' : this.isFileDownload ? '-D' : '';\r\n this.name = 'NET-' + dcId + suffix;\r\n //this.log = logger(this.name, this.upload && this.dcId === 2 ? LogLevels.debug | LogLevels.warn | LogLevels.log | LogLevels.error : LogLevels.error);\r\n this.log = logger(this.name, LogLevels.log | LogLevels.error | LogLevels.debug | LogLevels.warn);\r\n this.log('constructor'/* , this.authKey, this.authKeyID, this.serverSalt */);\r\n\r\n // Test resend after bad_server_salt\r\n /* if(this.dcId === 2 && this.upload) {\r\n //timeManager.applyServerTime((Date.now() / 1000 - 86400) | 0);\r\n this.serverSalt[0] = 0;\r\n } */\r\n\r\n this.updateSession();\r\n\r\n // if(!NetworkerFactory.offlineInited) {\r\n // NetworkerFactory.offlineInited = true;\r\n // /* rootScope.offline = true\r\n // rootScope.offlineConnecting = true */\r\n // }\r\n\r\n///////////////////////////////\r\n////////////////////////////////////////\r\n//////////////////////////////////////////////////////////////////////\r\n///////////////////////////\r\n////////////\r\n/////////////////////////////////////////////////////////\r\n/////\r\n//////////////////////////\r\n//////////////////////////////////////////\r\n//////////////////////////////////////////////////////////////////////\r\n///////////////////////////\r\n/////////////\r\n //} else {\r\n (this.transport as TcpObfuscated).networker = this;\r\n //}\r\n//////////////\r\n\r\n // * handle outcoming dead socket, server will close the connection\r\n // if((this.transport as TcpObfuscated).networker) {\r\n // this.disconnectDelay = /* (this.transport as TcpObfuscated).retryTimeout */75;\r\n // //setInterval(this.sendPingDelayDisconnect, (this.disconnectDelay - 5) * 1000);\r\n // this.sendPingDelayDisconnect();\r\n // }\r\n\r\n if((this.transport as TcpObfuscated).connected) {\r\n this.setConnectionStatus(true);\r\n }\r\n }\r\n\r\n public updateSession() {\r\n this.seqNo = 0;\r\n this.prevSessionId = this.sessionId;\r\n this.sessionId = new Uint8Array(8).randomize();\r\n }\r\n\r\n /* private clearContainers() {\r\n for(const messageId in this.sentMessages) {\r\n const message = this.sentMessages[messageId];\r\n if(message.container) {\r\n delete this.sentMessages[messageId];\r\n }\r\n }\r\n } */\r\n\r\n public updateSentMessage(sentMessageId: string) {\r\n const sentMessage = this.sentMessages[sentMessageId];\r\n if(!sentMessage) {\r\n return false;\r\n }\r\n\r\n if(sentMessage.container) {\r\n forEachReverse(sentMessage.inner, (innerSentMessageId, idx) => {\r\n const innerSentMessage = this.updateSentMessage(innerSentMessageId);\r\n if(!innerSentMessage) {\r\n sentMessage.inner.splice(idx, 1);\r\n } else {\r\n sentMessage.inner[idx] = innerSentMessage.msg_id;\r\n }\r\n });\r\n }\r\n \r\n sentMessage.msg_id = timeManager.generateId();\r\n sentMessage.seq_no = this.generateSeqNo(sentMessage.notContentRelated || sentMessage.container);\r\n\r\n /* if(DEBUG) {\r\n this.log('updateSentMessage', sentMessage.msg_id, sentMessageId);\r\n } */\r\n\r\n this.sentMessages[sentMessage.msg_id] = sentMessage;\r\n delete this.sentMessages[sentMessageId];\r\n \r\n return sentMessage;\r\n }\r\n\r\n public generateSeqNo(notContentRelated?: boolean) {\r\n let seqNo = this.seqNo * 2;\r\n \r\n if(!notContentRelated) {\r\n seqNo++;\r\n this.seqNo++;\r\n }\r\n \r\n return seqNo;\r\n }\r\n\r\n public wrapMtpCall(method: string, params: any, options: MTMessageOptions) {\r\n const serializer = new TLSerialization({mtproto: true});\r\n \r\n serializer.storeMethod(method, params);\r\n \r\n const messageId = timeManager.generateId();\r\n const seqNo = this.generateSeqNo();\r\n const message = {\r\n msg_id: messageId,\r\n seq_no: seqNo,\r\n body: serializer.getBytes(true)\r\n };\r\n \r\n if(Modes.debug) {\r\n this.log('MT call', method, params, messageId, seqNo);\r\n }\r\n \r\n return this.pushMessage(message, options);\r\n }\r\n \r\n public wrapMtpMessage(object: any, options: MTMessageOptions) {\r\n const serializer = new TLSerialization({mtproto: true});\r\n serializer.storeObject(object, 'Object');\r\n \r\n const messageId = timeManager.generateId();\r\n const seqNo = this.generateSeqNo(options.notContentRelated);\r\n const message = {\r\n msg_id: messageId,\r\n seq_no: seqNo,\r\n body: serializer.getBytes(true)\r\n };\r\n \r\n if(Modes.debug) {\r\n this.log('MT message', object, messageId, seqNo);\r\n }\r\n \r\n return this.pushMessage(message, options);\r\n }\r\n\r\n public wrapApiCall(method: string, params: any = {}, options: InvokeApiOptions = {}) {\r\n const serializer = new TLSerialization(options);\r\n \r\n if(!this.connectionInited) { // this will call once for each new session\r\n ///////this.log('Wrap api call !this.connectionInited');\r\n \r\n const invokeWithLayer = Schema.API.methods.find(m => m.method === 'invokeWithLayer');\r\n if(!invokeWithLayer) throw new Error('no invokeWithLayer!');\r\n serializer.storeInt(+invokeWithLayer.id >>> 0, 'invokeWithLayer');\r\n\r\n // @ts-ignore\r\n serializer.storeInt(Schema.layer, 'layer');\r\n \r\n const initConnection = Schema.API.methods.find(m => m.method === 'initConnection');\r\n if(!initConnection) throw new Error('no initConnection!');\r\n \r\n serializer.storeInt(+initConnection.id >>> 0, 'initConnection');\r\n serializer.storeInt(0x0, 'flags');\r\n serializer.storeInt(App.id, 'api_id');\r\n serializer.storeString(navigator.userAgent || 'Unknown UserAgent', 'device_model');\r\n serializer.storeString(navigator.platform || 'Unknown Platform', 'system_version');\r\n serializer.storeString(App.version, 'app_version');\r\n serializer.storeString(navigator.language || 'en', 'system_lang_code');\r\n serializer.storeString(App.langPack, 'lang_pack');\r\n serializer.storeString(navigator.language || 'en', 'lang_code');\r\n //serializer.storeInt(0x0, 'proxy');\r\n /* serializer.storeMethod('initConnection', {\r\n 'flags': 0,\r\n 'api_id': App.id,\r\n 'device_model': navigator.userAgent || 'Unknown UserAgent',\r\n 'system_version': navigator.platform || 'Unknown Platform',\r\n 'app_version': App.version,\r\n 'system_lang_code': navigator.language || 'en',\r\n 'lang_pack': '',\r\n 'lang_code': navigator.language || 'en'\r\n }); */\r\n }\r\n \r\n if(options.afterMessageId) {\r\n if(invokeAfterMsgConstructor === undefined) {\r\n const m = Schema.API.methods.find(m => m.method === 'invokeAfterMsg');\r\n invokeAfterMsgConstructor = m ? +m.id >>> 0 : 0;\r\n }\r\n \r\n if(invokeAfterMsgConstructor) {\r\n //if(this.debug) {\r\n //this.log('Api call options.afterMessageId!');\r\n //}\r\n \r\n serializer.storeInt(invokeAfterMsgConstructor, 'invokeAfterMsg');\r\n serializer.storeLong(options.afterMessageId, 'msg_id');\r\n } else {\r\n this.log.error('no invokeAfterMsg!');\r\n }\r\n }\r\n \r\n options.resultType = serializer.storeMethod(method, params);\r\n\r\n /* if(method === 'account.updateNotifySettings') {\r\n this.log('api call body:', serializer.getBytes(true));\r\n } */\r\n \r\n const messageId = timeManager.generateId();\r\n const seqNo = this.generateSeqNo();\r\n const message = {\r\n msg_id: messageId,\r\n seq_no: seqNo,\r\n body: serializer.getBytes(true),\r\n isAPI: true\r\n };\r\n \r\n if(Modes.debug/* || true */) {\r\n this.log('Api call', method, message, params, options);\r\n } else if(this.debug) {\r\n this.log('Api call', method, params, options);\r\n }\r\n \r\n return this.pushMessage(message, options);\r\n }\r\n\r\n // private sendPingDelayDisconnect = () => {\r\n // if(this.pingPromise || true) return;\r\n\r\n // if(!this.isOnline) {\r\n // if((this.transport as TcpObfuscated).connected) {\r\n // (this.transport as TcpObfuscated).handleClose();\r\n // }\r\n\r\n // return;\r\n // }\r\n\r\n // this.log('sendPingDelayDisconnect', this.sentPingTimes);\r\n\r\n // /* if(this.tt) clearTimeout(this.tt);\r\n // this.tt = self.setTimeout(() => { \r\n // (this.transport as any).ws.close(1000);\r\n // this.tt = 0;\r\n // }, this.disconnectDelay * 1000); */\r\n // /* this.wrapMtpCall('ping_delay_disconnect', {\r\n // ping_id: randomLong(),\r\n // disconnect_delay: this.disconnectDelay\r\n // }, {\r\n // noResponse: true,\r\n // notContentRelated: true\r\n // }); */\r\n // const deferred = this.pingPromise = deferredPromise<void>();\r\n\r\n // const timeoutTime = this.disconnectDelay * 1000;\r\n\r\n // /* if(!this.sentPingTimes || true) {\r\n // ++this.sentPingTimes; */\r\n // const startTime = Date.now();\r\n // this.wrapMtpCall('ping', {\r\n // ping_id: randomLong()\r\n // }, {}).then(pong => {\r\n // const elapsedTime = Date.now() - startTime;\r\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\r\n\r\n // if(elapsedTime > timeoutTime) {\r\n // deferred.reject();\r\n // } else {\r\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\r\n // }\r\n // }, deferred.reject).finally(() => {\r\n // clearTimeout(rejectTimeout);\r\n // //--this.sentPingTimes;\r\n // });\r\n // //}\r\n\r\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\r\n\r\n // deferred.catch(() => {\r\n // (this.transport as Socket).handleClose();\r\n // });\r\n\r\n // deferred.finally(() => {\r\n // this.pingPromise = null;\r\n // this.sendPingDelayDisconnect();\r\n // });\r\n // };\r\n\r\n // private sendPingDelayDisconnect = () => {\r\n // if(this.pingPromise || true) return;\r\n\r\n // /* if(!this.isOnline) {\r\n // if((this.transport as TcpObfuscated).connected) {\r\n // (this.transport as TcpObfuscated).connection.close();\r\n // }\r\n\r\n // return;\r\n // } */\r\n\r\n // const deferred = this.pingPromise = deferredPromise<void>();\r\n\r\n // const timeoutTime = this.disconnectDelay * 1000;\r\n\r\n // const startTime = Date.now();\r\n // this.wrapMtpCall('ping_delay_disconnect', {\r\n // ping_id: randomLong(),\r\n // disconnect_delay: this.disconnectDelay\r\n // }, {}).then(pong => {\r\n // const elapsedTime = Date.now() - startTime;\r\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\r\n\r\n // if(elapsedTime > timeoutTime) {\r\n // deferred.reject();\r\n // } else {\r\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\r\n // }\r\n // }, deferred.reject).finally(() => {\r\n // clearTimeout(rejectTimeout);\r\n // //--this.sentPingTimes;\r\n // });\r\n\r\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\r\n\r\n // deferred.catch(() => {\r\n // this.log.error('sendPingDelayDisconnect: catch, closing connection if exists');\r\n // (this.transport as TcpObfuscated).connection.close();\r\n // });\r\n\r\n // deferred.finally(() => {\r\n // this.pingPromise = null;\r\n // this.sendPingDelayDisconnect();\r\n // });\r\n // };\r\n\r\n/////////////////////////////////////////////\r\n////////////////////////////////\r\n///////////////////////////////////////\r\n/////////////////////////////////////////////////////////////////////////////////\r\n/////////////////////////////////////////////////////////////////////\r\n/////////////////////\r\n////////////////////////////////////\r\n///////////////////\r\n/////\r\n\r\n/////////////////////////////////////////////////\r\n/////////////////////\r\n///////////////////////////////////\r\n/////////////////////////////////\r\n///////////////////////////////////////////////////////////\r\n////////////\r\n/////////////////////////////////////////////////////////////////////////////////////////////\r\n///////////////\r\n///////\r\n\r\n//////////////////////////\r\n///////\r\n////\r\n\r\n/////////////////////////\r\n//////////////////////////\r\n\r\n////////////////////////////////////////////////\r\n///////////////////////////////////////////////////////\r\n//\r\n///////////////////////////////////\r\n/////////////////////\r\n//////////////////////\r\n///////////////////////\r\n////////\r\n///////////////////////\r\n////////////////////\r\n///////////////////\r\n///////////////////////////////\r\n////////////////////////////////////////\r\n///////////////////////////////\r\n//////////////////////////////////////////\r\n///////\r\n///\r\n\r\n///////////////////////////////////////////////////////\r\n////////////////////////////////////////////\r\n//\r\n////////////////////////////////////////\r\n//////////////////////////////////////////////\r\n////////////////////////////////////\r\n//\r\n////////////////////////////////////////////////////////////\r\n//////////////////////////////////////////////////////////////////////////\r\n//\r\n////////////////////////////////////\r\n/////////////////////\r\n///////\r\n//\r\n/////////////////////////\r\n///////////////////////////////////////\r\n///////////////////////////////////////\r\n/////////////////////////////////\r\n//////\r\n\r\n/////////////////////////////////////////////////////////////\r\n//////////////////////////////////////////////\r\n////////////////////////////////\r\n//////////////\r\n////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n//////////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////\r\n//////////////////////////////////////////\r\n//////////////////\r\n///////\r\n////\r\n\r\n//////////////////////////////////////////\r\n////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////\r\n///////////////////\r\n/////\r\n//\r\n///////////////////////////\r\n///////////////////////////////////\r\n///////////////////////////////////////////\r\n\r\n//////////////////////\r\n////////////////////////////////////////\r\n//////////////////////////////\r\n///////////////////////\r\n//\r\n////////////////////////////////////////////\r\n///////////////////////////////////////\r\n///////\r\n//\r\n////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n//\r\n/////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////\r\n///////////////////////////////////////////////////////////////////////////\r\n////////////////\r\n////////////\r\n///////////////////////////\r\n\r\n/////////////////////////////\r\n//\r\n/////////////////////////////\r\n////////////////////////////////////////////////////////////////////////\r\n///////////////////////////////////////////////////////////////////////\r\n////////////////\r\n\r\n////////////////////////////////////////////////\r\n//////////////////////////////////////\r\n/////\r\n////\r\n///\r\n\r\n///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n///////////\r\n///////////////////////\r\n////////////////////////////////\r\n///////////////////////////////////////\r\n/////////////////////////////////////////////////////\r\n/////////////////////////\r\n////////////////////////////////////////////////\r\n/////////\r\n//\r\n///////////////////////////////////////////////////////////////////////////////////////\r\n//\r\n///////////////////////////////////////////\r\n////////////////////////////////////////\r\n///////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////\r\n///////////////////////////////\r\n///////////\r\n///////////\r\n\r\n/////////////////////////////\r\n//\r\n//////////////////////////////////////////////////////////////////////////////////////////\r\n/////////\r\n///////////////////\r\n/////////////////////////////////////////////////////////////////\r\n//\r\n/////////////////////////////\r\n//////////////////////////////////////////////////\r\n//////////////////////////////////////////\r\n///////////\r\n\r\n/////////////////////////////////////////////////\r\n//////////////\r\n/////////////////////////////////////////////////\r\n///////\r\n//\r\n/////////////////////////////////////////\r\n//////////////////////////////////////\r\n/////////////////////////////////////////////////////////////\r\n//////////////////////////////////////////\r\n/////////////////////////////////////////////\r\n////////////////////////////\r\n/////////\r\n////////\r\n//\r\n///////////////////////////////\r\n///////\r\n///\r\n////////////\r\n\r\n // тут можно сделать таймаут и выводить дисконнект\r\n public pushMessage(message: {\r\n msg_id: string,\r\n seq_no: number,\r\n body: Uint8Array | number[],\r\n isAPI?: boolean\r\n }, options: MTMessageOptions) {\r\n const promise = new Promise((resolve, reject) => {\r\n this.sentMessages[message.msg_id] = Object.assign(message, options, options.notContentRelated \r\n ? undefined \r\n : {\r\n deferred: {resolve, reject}\r\n }\r\n );\r\n\r\n //this.log.error('Networker pushMessage:', this.sentMessages[message.msg_id]);\r\n\r\n this.pendingMessages[message.msg_id] = 0;\r\n \r\n if(!options.noSchedule) {\r\n this.scheduleRequest();\r\n }\r\n\r\n if(isObject(options)) {\r\n options.messageId = message.msg_id;\r\n }\r\n });\r\n\r\n if(!options.notContentRelated && !options.noResponse) {\r\n const timeout = setTimeout(() => {\r\n if(this.lastResponseTime && (Date.now() - this.lastResponseTime) < CONNECTION_TIMEOUT) {\r\n return;\r\n }\r\n\r\n this.log.error('timeout', message);\r\n this.setConnectionStatus(false);\r\n\r\n /* this.getEncryptedOutput(message).then(bytes => {\r\n this.log.error('timeout encrypted', bytes);\r\n }); */\r\n }, CONNECTION_TIMEOUT);\r\n \r\n promise.finally(() => {\r\n clearTimeout(timeout);\r\n this.setConnectionStatus(true);\r\n });\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public setConnectionStatus(online: boolean) {\r\n const willChange = this.isOnline !== online;\r\n this.isOnline = online;\r\n\r\n if(willChange) {\r\n if(NetworkerFactory.onConnectionStatusChange) {\r\n NetworkerFactory.onConnectionStatusChange({\r\n _: 'networkerStatus', \r\n online: this.isOnline, \r\n dcId: this.dcId,\r\n name: this.name,\r\n isFileNetworker: this.isFileNetworker,\r\n isFileDownload: this.isFileDownload,\r\n isFileUpload: this.isFileUpload\r\n });\r\n }\r\n\r\n // if((this.transport as TcpObfuscated).networker) {\r\n // this.sendPingDelayDisconnect();\r\n // }\r\n /* this.sentPingTimes = 0;\r\n this.sendPingDelayDisconnect(); */\r\n }\r\n /* if(this.onConnectionStatusChange) {\r\n this.onConnectionStatusChange(this.isOnline);\r\n } */\r\n }\r\n\r\n public pushResend(messageId: string, delay = 100) {\r\n const value = delay ? Date.now() + delay : 0;\r\n const sentMessage = this.sentMessages[messageId];\r\n if(sentMessage.container) {\r\n for(const innerMsgId of sentMessage.inner) {\r\n this.pendingMessages[innerMsgId] = value;\r\n }\r\n } else {\r\n this.pendingMessages[messageId] = value;\r\n }\r\n\r\n if(sentMessage.acked) {\r\n this.log.error('pushResend: acked message?', sentMessage);\r\n }\r\n \r\n if(this.debug) {\r\n this.log('pushResend:', messageId, sentMessage, this.pendingMessages, delay);\r\n }\r\n \r\n this.scheduleRequest(delay);\r\n }\r\n\r\n // * correct, fully checked\r\n public async getMsgKey(dataWithPadding: ArrayBuffer, isOut: boolean) {\r\n const x = isOut ? 0 : 8;\r\n const msgKeyLargePlain = bufferConcat(this.authKeyUint8.subarray(88 + x, 88 + x + 32), dataWithPadding);\r\n\r\n const msgKeyLarge = await CryptoWorker.sha256Hash(msgKeyLargePlain);\r\n const msgKey = new Uint8Array(msgKeyLarge).subarray(8, 24);\r\n return msgKey;\r\n };\r\n\r\n // * correct, fully checked\r\n public getAesKeyIv(msgKey: Uint8Array | number[], isOut: boolean): Promise<[Uint8Array, Uint8Array]> {\r\n const x = isOut ? 0 : 8;\r\n const sha2aText = new Uint8Array(52);\r\n const sha2bText = new Uint8Array(52);\r\n const promises: Array<Promise<number[]>> = [];\r\n \r\n sha2aText.set(msgKey, 0);\r\n sha2aText.set(this.authKeyUint8.subarray(x, x + 36), 16);\r\n promises.push(CryptoWorker.sha256Hash(sha2aText));\r\n \r\n sha2bText.set(this.authKeyUint8.subarray(40 + x, 40 + x + 36), 0);\r\n sha2bText.set(msgKey, 36);\r\n promises.push(CryptoWorker.sha256Hash(sha2bText));\r\n\r\n return Promise.all(promises).then((results) => {\r\n const aesKey = new Uint8Array(32);\r\n const aesIv = new Uint8Array(32);\r\n const sha2a = new Uint8Array(results[0]);\r\n const sha2b = new Uint8Array(results[1]);\r\n \r\n aesKey.set(sha2a.subarray(0, 8));\r\n aesKey.set(sha2b.subarray(8, 24), 8);\r\n aesKey.set(sha2a.subarray(24, 32), 24);\r\n \r\n aesIv.set(sha2b.subarray(0, 8));\r\n aesIv.set(sha2a.subarray(8, 24), 8);\r\n aesIv.set(sha2b.subarray(24, 32), 24);\r\n \r\n return [aesKey, aesIv];\r\n });\r\n }\r\n\r\n private performScheduledRequest() {\r\n // this.log('scheduled', this.dcId, this.iii)\r\n\r\n if(this.pendingAcks.length) {\r\n const ackMsgIds: Array<string> = this.pendingAcks.slice();\r\n\r\n // this.log('acking messages', ackMsgIDs)\r\n this.wrapMtpMessage({\r\n _: 'msgs_ack',\r\n msg_ids: ackMsgIds\r\n }, {\r\n notContentRelated: true,\r\n noSchedule: true\r\n });\r\n }\r\n \r\n if(this.pendingResends.length) {\r\n const resendMsgIds: Array<string> = this.pendingResends.slice();\r\n const resendOpts: MTMessageOptions = {\r\n noSchedule: true,\r\n notContentRelated: true,\r\n messageId: '' // will set in wrapMtpMessage->pushMessage\r\n };\r\n\r\n //this.log('resendReq messages', resendMsgIds);\r\n this.wrapMtpMessage({\r\n _: 'msg_resend_req',\r\n msg_ids: resendMsgIds\r\n }, resendOpts);\r\n\r\n this.lastResendReq = {\r\n req_msg_id: resendOpts.messageId,\r\n resend_msg_ids: resendMsgIds\r\n };\r\n }\r\n \r\n let outMessage: MTPNetworker['sentMessages'][keyof MTPNetworker['sentMessages']];\r\n const messages: typeof outMessage[] = [];\r\n \r\n //const currentTime = Date.now();\r\n let messagesByteLen = 0;\r\n\r\n///////////////////////////////////////////////\r\n///////////////////////////\r\n////////////////////////////\r\n//////////////\r\n\r\n let lengthOverflow = false;\r\n\r\n // * Сюда никогда не попадут контейнеры, так как их не будет в pendingMessages\r\n const keys = sortLongsArray(Object.keys(this.pendingMessages));\r\n for(const messageId of keys) {\r\n //const value = this.pendingMessages[messageId];\r\n\r\n //if(!value || value <= currentTime) {\r\n const message = this.sentMessages[messageId];\r\n if(message && message.body) {\r\n /* if(message.fileUpload) {\r\n this.log('performScheduledRequest message:', message, message.body.length, (message.body as Uint8Array).byteLength, (message.body as Uint8Array).buffer.byteLength);\r\n } */\r\n\r\n const messageByteLength = message.body.length + 32;\r\n\r\n if((messagesByteLen + messageByteLength) > 655360) { // 640 Kb\r\n this.log.warn('lengthOverflow', message, messages);\r\n lengthOverflow = true;\r\n\r\n if(outMessage) { // if it's not a first message\r\n break;\r\n }\r\n }\r\n\r\n messages.push(message);\r\n messagesByteLen += messageByteLength;\r\n\r\n/////////////////////////////////////////////////////\r\n/////////////////////////////\r\n//////////////////////////////\r\n///////////////////////////////////////\r\n///////////////////////////////\r\n///////////\r\n////////////////////\r\n\r\n outMessage = message;\r\n } else {\r\n // this.log(message, messageId)\r\n }\r\n\r\n delete this.pendingMessages[messageId];\r\n //}\r\n }\r\n \r\n///////////////////////////////\r\n//////////////////////////////////////\r\n//////////////\r\n///////////////////////////////////////////////\r\n////////////////////////////////////\r\n//////////////////////////////////////////////////////////////\r\n///////////////////////////////////////////\r\n///////////////////////\r\n////////////////////////\r\n//////////////////////\r\n/////////\r\n\r\n/////////////////////\r\n/////////////////////////////////////////\r\n/////////////////////////////////////\r\n///////////////////////////////////\r\n/////////\r\n/////\r\n//////////////\r\n \r\n if(!messages.length) {\r\n // this.log('no scheduled messages')\r\n return;\r\n }\r\n \r\n///////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n//////////////\r\n \r\n if(messages.length > 1) {\r\n const container = this.generateContainerMessage(messagesByteLen, messages);\r\n outMessage = container.messageWithBody;\r\n \r\n this.sentMessages[outMessage.msg_id] = container.message;\r\n } else {\r\n this.sentMessages[outMessage.msg_id] = outMessage;\r\n }\r\n \r\n this.pendingAcks = [];\r\n\r\n const promise = this.sendEncryptedRequest(outMessage);\r\n \r\n///////////////////////////////\r\n///////////////////////////////////////////\r\n///////////////////////////////////////////////////////////////////////////////////////////\r\n//////////////////////////////////////\r\n////////////\r\n///////////////////////////////////////////////////////////////////////////////\r\n/////\r\n///////////////////////////\r\n this.cleanupSent(); // ! WARNING\r\n/////////////\r\n/////////////////////////////////////////////////////////////////////////////\r\n///////\r\n///////////////\r\n \r\n if(lengthOverflow) {\r\n this.scheduleRequest();\r\n }\r\n };\r\n\r\n private generateContainerMessage(messagesByteLen: number, messages: MTMessage[]) {\r\n const container = new TLSerialization({\r\n mtproto: true,\r\n startMaxLength: messagesByteLen + 64\r\n });\r\n\r\n container.storeInt(0x73f1f8dc, 'CONTAINER[id]');\r\n container.storeInt(messages.length, 'CONTAINER[count]');\r\n\r\n const innerMessages: string[] = [];\r\n messages.forEach((message, i) => {\r\n innerMessages.push(message.msg_id);\r\n container.storeLong(message.msg_id, 'CONTAINER[' + i + '][msg_id]');\r\n container.storeInt(message.seq_no, 'CONTAINER[' + i + '][seq_no]');\r\n container.storeInt(message.body.length, 'CONTAINER[' + i + '][bytes]');\r\n container.storeRawBytes(message.body, 'CONTAINER[' + i + '][body]');\r\n });\r\n\r\n const message: MTMessage = {\r\n msg_id: timeManager.generateId(),\r\n seq_no: this.generateSeqNo(true),\r\n container: true,\r\n inner: innerMessages\r\n };\r\n\r\n if(Modes.debug/* || true */) {\r\n this.log.warn('Container', innerMessages, message.msg_id, message.seq_no);\r\n }\r\n\r\n return {\r\n message,\r\n messageWithBody: Object.assign({body: container.getBytes(true)}, message),\r\n };\r\n }\r\n\r\n public async getEncryptedMessage(dataWithPadding: ArrayBuffer) {\r\n const msgKey = await this.getMsgKey(dataWithPadding, true);\r\n const keyIv = await this.getAesKeyIv(msgKey, true);\r\n // this.log('after msg key iv')\r\n\r\n const encryptedBytes = await CryptoWorker.aesEncrypt(dataWithPadding, keyIv[0], keyIv[1]);\r\n // this.log('Finish encrypt')\r\n\r\n return {\r\n bytes: encryptedBytes,\r\n msgKey\r\n };\r\n }\r\n\r\n public getDecryptedMessage(msgKey: Uint8Array | number[], encryptedData: Uint8Array | number[]): Promise<ArrayBuffer> {\r\n // this.log('get decrypted start')\r\n return this.getAesKeyIv(msgKey, false).then((keyIv) => {\r\n // this.log('after msg key iv')\r\n return CryptoWorker.aesDecrypt(encryptedData, keyIv[0], keyIv[1]);\r\n });\r\n }\r\n\r\n public getEncryptedOutput(message: MTMessage) {\r\n /* if(DEBUG) {\r\n this.log.debug('Send encrypted', message, this.authKeyId);\r\n } */\r\n /* if(!this.isOnline) {\r\n this.log('trying to send message when offline:', Object.assign({}, message));\r\n //debugger;\r\n } */\r\n\r\n const data = new TLSerialization({\r\n startMaxLength: message.body.length + 2048\r\n });\r\n\r\n data.storeIntBytes(this.serverSalt, 64, 'salt');\r\n data.storeIntBytes(this.sessionId, 64, 'session_id');\r\n \r\n data.storeLong(message.msg_id, 'message_id');\r\n data.storeInt(message.seq_no, 'seq_no');\r\n\r\n data.storeInt(message.body.length, 'message_data_length');\r\n data.storeRawBytes(message.body, 'message_data');\r\n\r\n /* const des = new TLDeserialization(data.getBuffer().slice(16));\r\n const desSalt = des.fetchLong();\r\n const desSessionId = des.fetchLong();\r\n\r\n if(!this.isOnline) {\r\n this.log.error('trying to send message when offline', message, new Uint8Array(des.buffer), desSalt, desSessionId);\r\n } */\r\n\r\n /* const messageDataLength = message.body.length;\r\n let canBeLength = 0; // bytes\r\n canBeLength += 8;\r\n canBeLength += 8;\r\n canBeLength += 8;\r\n canBeLength += 4;\r\n canBeLength += 4;\r\n canBeLength += message.body.length; */\r\n \r\n const dataBuffer = data.getBuffer();\r\n\r\n /* if(dataBuffer.byteLength !== canBeLength || !bytesCmp(new Uint8Array(dataBuffer.slice(dataBuffer.byteLength - message.body.length)), new Uint8Array(message.body))) {\r\n this.log.error('wrong length', dataBuffer, canBeLength, message.msg_id);\r\n } */\r\n\r\n const paddingLength = (16 - (data.offset % 16)) + 16 * (1 + nextRandomInt(5));\r\n const padding = /* (message as any).padding || */new Uint8Array(paddingLength).randomize()/* .fill(0) */;\r\n /* const padding = [167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157, \r\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \r\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28, 167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157, \r\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \r\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28].slice(0, paddingLength); */\r\n\r\n //(message as any).padding = padding;\r\n\r\n const dataWithPadding = bufferConcat(dataBuffer, padding);\r\n // this.log('Adding padding', dataBuffer, padding, dataWithPadding)\r\n // this.log('auth_key_id', bytesToHex(self.authKeyID))\r\n\r\n /* if(dataWithPadding.byteLength % 16) {\r\n this.log.error('aaa', dataWithPadding, paddingLength);\r\n }\r\n\r\n if(message.fileUpload) {\r\n this.log('Send encrypted: body length:', (message.body as ArrayBuffer).byteLength, paddingLength, dataWithPadding);\r\n } */\r\n\r\n // * full next block is correct\r\n return this.getEncryptedMessage(dataWithPadding).then((encryptedResult) => {\r\n /* if(DEBUG) {\r\n this.log('Got encrypted out message', encryptedResult);\r\n } */\r\n\r\n const request = new TLSerialization({\r\n startMaxLength: encryptedResult.bytes.length + 256\r\n });\r\n request.storeIntBytes(this.authKeyId, 64, 'auth_key_id');\r\n request.storeIntBytes(encryptedResult.msgKey, 128, 'msg_key');\r\n request.storeRawBytes(encryptedResult.bytes, 'encrypted_data');\r\n \r\n const requestData = request.getBytes(true);\r\n\r\n // if(this.isFileNetworker) {\r\n // //this.log('Send encrypted: requestData length:', requestData.length, requestData.length % 16, paddingLength % 16, paddingLength, data.offset, encryptedResult.msgKey.length % 16, encryptedResult.bytes.length % 16);\r\n // //this.log('Send encrypted: messageId:', message.msg_id, requestData.length);\r\n // //this.log('Send encrypted:', message, new Uint8Array(bufferConcat(des.buffer, padding)), requestData, this.serverSalt.hex, this.sessionId.hex/* new Uint8Array(des.buffer) */);\r\n // this.debugRequests.push({before: new Uint8Array(bufferConcat(des.buffer, padding)), after: requestData});\r\n // }\r\n\r\n return requestData;\r\n });\r\n }\r\n\r\n public sendEncryptedRequest(message: MTMessage) {\r\n return this.getEncryptedOutput(message).then(requestData => {\r\n this.debug && this.log('sendEncryptedRequest: launching message into space:', message, [message.msg_id].concat(message.inner || []));\r\n\r\n const promise: Promise<Uint8Array> = this.transport.send(requestData) as any;\r\n///////////////////////////////////////////////////\r\n return promise;\r\n///////////////\r\n///////////////////////////////////////////////////////////\r\n\r\n/////////////////////////\r\n//////////////////\r\n/////////////////////////////////////\r\n/////////////////////////////////\r\n////////\r\n///////////////////////////////////////\r\n///////////////////////////////////////////\r\n///////////////////////////////////////////\r\n/////////\r\n\r\n//////////////////////\r\n/////////////////////\r\n///////////////////////////////////////////\r\n////////////////////////////////////////////\r\n//////////////////////////////////////\r\n//////////////////////////////\r\n/////////////\r\n/////////\r\n/////////////////////////////////////\r\n/////////\r\n////////////////\r\n });\r\n }\r\n\r\n public parseResponse(responseBuffer: Uint8Array) {\r\n //const perf = performance.now();\r\n /* if(this.debug) {\r\n this.log.debug('Start parsing response', responseBuffer);\r\n } */\r\n\r\n this.lastResponseTime = Date.now();\r\n\r\n const deserializer = new TLDeserialization(responseBuffer);\r\n \r\n const authKeyId = deserializer.fetchIntBytes(64, true, 'auth_key_id');\r\n if(!bytesCmp(authKeyId, this.authKeyId)) {\r\n throw new Error('[MT] Invalid server auth_key_id: ' + authKeyId.hex);\r\n }\r\n\r\n const msgKey = deserializer.fetchIntBytes(128, true, 'msg_key');\r\n const encryptedData = deserializer.fetchRawBytes(responseBuffer.byteLength - deserializer.getOffset(), true, 'encrypted_data');\r\n \r\n return this.getDecryptedMessage(msgKey, encryptedData).then((dataWithPadding) => {\r\n // this.log('after decrypt')\r\n return this.getMsgKey(dataWithPadding, false).then((calcMsgKey) => {\r\n if(!bytesCmp(msgKey, calcMsgKey)) {\r\n this.log.warn('[MT] msg_keys', msgKey, calcMsgKey);\r\n this.updateSession(); // fix 28.01.2020\r\n throw new Error('[MT] server msgKey mismatch, updating session');\r\n }\r\n // this.log('after msgKey check')\r\n \r\n let deserializer = new TLDeserialization(dataWithPadding, {mtproto: true});\r\n \r\n /* const salt = */deserializer.fetchIntBytes(64, false, 'salt'); // need\r\n const sessionId = deserializer.fetchIntBytes(64, false, 'session_id');\r\n const messageId = deserializer.fetchLong('message_id');\r\n \r\n if(!bytesCmp(sessionId, this.sessionId) &&\r\n (!this.prevSessionId || !bytesCmp(sessionId, this.prevSessionId))) {\r\n this.log.warn('Sessions', sessionId, this.sessionId, this.prevSessionId, dataWithPadding);\r\n //this.updateSession();\r\n //this.sessionID = sessionID;\r\n throw new Error('[MT] Invalid server session_id: ' + bytesToHex(sessionId));\r\n }\r\n \r\n const seqNo = deserializer.fetchInt('seq_no');\r\n \r\n const totalLength = dataWithPadding.byteLength;\r\n \r\n const messageBodyLength = deserializer.fetchInt('message_data[length]');\r\n let offset = deserializer.getOffset();\r\n \r\n if((messageBodyLength % 4) ||\r\n messageBodyLength > totalLength - offset) {\r\n throw new Error('[MT] Invalid body length: ' + messageBodyLength);\r\n }\r\n const messageBody = deserializer.fetchRawBytes(messageBodyLength, true, 'message_data');\r\n \r\n offset = deserializer.getOffset();\r\n const paddingLength = totalLength - offset;\r\n if(paddingLength < 12 || paddingLength > 1024) {\r\n throw new Error('[MT] Invalid padding length: ' + paddingLength);\r\n }\r\n \r\n //let buffer = bytesToArrayBuffer(messageBody);\r\n deserializer = new TLDeserialization(/* buffer */messageBody, {\r\n mtproto: true, \r\n override: {\r\n mt_message: (result: any, field: string) => {\r\n result.msg_id = deserializer.fetchLong(field + '[msg_id]');\r\n result.seqno = deserializer.fetchInt(field + '[seqno]');\r\n result.bytes = deserializer.fetchInt(field + '[bytes]');\r\n \r\n const offset = deserializer.getOffset();\r\n \r\n //self.log('mt_message!!!!!', result, field);\r\n \r\n try {\r\n result.body = deserializer.fetchObject('Object', field + '[body]');\r\n } catch(e) {\r\n this.log.error('parse error', e.message, e.stack);\r\n result.body = {\r\n _: 'parse_error',\r\n error: e\r\n };\r\n }\r\n\r\n if(deserializer.offset !== offset + result.bytes) {\r\n // console.warn(dT(), 'set offset', this.offset, offset, result.bytes)\r\n // this.log(result)\r\n deserializer.offset = offset + result.bytes;\r\n }\r\n // this.log('override message', result)\r\n },\r\n mt_rpc_result: (result: any, field: any) => {\r\n result.req_msg_id = deserializer.fetchLong(field + '[req_msg_id]');\r\n \r\n const sentMessage = this.sentMessages[result.req_msg_id];\r\n const type = sentMessage && sentMessage.resultType || 'Object';\r\n \r\n if(result.req_msg_id && !sentMessage) {\r\n // console.warn(dT(), 'Result for unknown message', result);\r\n return;\r\n }\r\n \r\n result.result = deserializer.fetchObject(type, field + '[result]');\r\n // self.log(dT(), 'override rpc_result', sentMessage, type, result);\r\n }\r\n }\r\n });\r\n\r\n const response = deserializer.fetchObject('', 'INPUT');\r\n //this.log.error('Parse response time:', performance.now() - perf);\r\n return {\r\n response,\r\n messageId,\r\n sessionId,\r\n seqNo\r\n };\r\n });\r\n });\r\n }\r\n\r\n public applyServerSalt(newServerSalt: string) {\r\n const serverSalt = longToBytes(newServerSalt);\r\n \r\n sessionStorage.set({\r\n ['dc' + this.dcId + '_server_salt']: bytesToHex(serverSalt)\r\n });\r\n \r\n this.serverSalt = new Uint8Array(serverSalt);\r\n }\r\n\r\n // ! таймаут очень сильно тормозит скорость работы сокета (даже нулевой) \r\n public scheduleRequest(delay?: number) {\r\n /* if(!this.isOnline) {\r\n return;\r\n } */\r\n\r\n///////////////////////////////////////////////\r\n///////////////////////////////////////////\r\n/////////////////////////////////////\r\n//////////////\r\n/////////////////////////////\r\n//////////////////////////////////////////////\r\n/////\r\n//////////////\r\n\r\n const nextReq = Date.now() + (delay || 0);\r\n if(this.nextReq && (delay === undefined || this.nextReq <= nextReq)) {\r\n //this.debug && this.log('scheduleRequest: nextReq', this.nextReq, nextReq);\r\n return;\r\n }\r\n \r\n //this.debug && this.log('scheduleRequest: delay', delay);\r\n\r\n /* if(this.nextReqTimeout) {\r\n return;\r\n } */\r\n \r\n //const perf = performance.now();\r\n if(this.nextReqTimeout) {\r\n clearTimeout(this.nextReqTimeout);\r\n }\r\n\r\n const cb = () => {\r\n //this.debug && this.log('scheduleRequest: timeout delay was:', performance.now() - perf);\r\n\r\n this.nextReqTimeout = 0;\r\n this.nextReq = 0;\r\n\r\n/////////////////////////////////////////////////\r\n////////////////////////\r\n///////////////////////////////////////\r\n///////////////\r\n///////\r\n///////////////\r\n /* if(!this.isOnline) {\r\n return;\r\n } */\r\n\r\n this.performScheduledRequest();\r\n////////////////\r\n };\r\n\r\n this.nextReq = nextReq;\r\n\r\n if(delay) {\r\n this.nextReqTimeout = self.setTimeout(cb, delay);\r\n } else {\r\n cb();\r\n }\r\n }\r\n\r\n public ackMessage(msgId: string) {\r\n // this.log('ack message', msgID)\r\n this.pendingAcks.push(msgId);\r\n\r\n///////////////////////////////////////////////\r\n////////////////////////////////\r\n/////////////\r\n this.scheduleRequest();\r\n//////////////\r\n }\r\n \r\n public reqResendMessage(msgId: string) {\r\n if(this.debug) {\r\n this.log('Req resend', msgId);\r\n }\r\n\r\n this.pendingResends.push(msgId);\r\n this.scheduleRequest(100);\r\n }\r\n\r\n public cleanupSent() {\r\n let notEmpty = false;\r\n // this.log('clean start', this.dcId/*, this.sentMessages*/)\r\n Object.keys(this.sentMessages).forEach((msgId) => {\r\n const message = this.sentMessages[msgId];\r\n \r\n // this.log('clean iter', msgID, message)\r\n if(message.notContentRelated && this.pendingMessages[msgId] === undefined) {\r\n // this.log('clean notContentRelated', msgID)\r\n delete this.sentMessages[msgId];\r\n } else if(message.container) {\r\n for(const innerMsgId of message.inner) {\r\n if(this.sentMessages[innerMsgId] !== undefined) {\r\n // this.log('clean failed, found', msgID, message.inner[i], this.sentMessages[message.inner[i]].seq_no)\r\n notEmpty = true;\r\n return;\r\n }\r\n }\r\n // this.log('clean container', msgID)\r\n delete this.sentMessages[msgId];\r\n } else {\r\n notEmpty = true;\r\n }\r\n });\r\n \r\n return !notEmpty;\r\n }\r\n\r\n public processMessageAck(messageId: string) {\r\n const sentMessage = this.sentMessages[messageId];\r\n if(sentMessage && !sentMessage.acked) {\r\n //delete sentMessage.body;\r\n sentMessage.acked = true;\r\n }\r\n }\r\n\r\n public processError(rawError: {error_message: string, error_code: number}) {\r\n const matches = (rawError.error_message || '').match(/^([A-Z_0-9]+\\b)(: (.+))?/) || [];\r\n rawError.error_code = rawError.error_code;\r\n \r\n return {\r\n code: !rawError.error_code || rawError.error_code <= 0 ? 500 : rawError.error_code,\r\n type: matches[1] || 'UNKNOWN',\r\n description: matches[3] || ('CODE#' + rawError.error_code + ' ' + rawError.error_message),\r\n originalError: rawError\r\n };\r\n }\r\n\r\n /**\r\n * * только для сокета\r\n * TODO: consider about containers resend\r\n */\r\n public resend() {\r\n for(const id in this.sentMessages) {\r\n const msg = this.sentMessages[id];\r\n if(msg.body || msg.container) {\r\n this.pushResend(id);\r\n }\r\n }\r\n }\r\n\r\n /* public requestMessageStatus() {\r\n const ids: string[] = [];\r\n for(const id in this.sentMessages) {\r\n const message = this.sentMessages[id];\r\n if(message.isAPI && message.fileUpload) {\r\n ids.push(message.msg_id);\r\n }\r\n }\r\n\r\n this.wrapMtpMessage({\r\n _: 'msgs_state_req',\r\n msg_ids: ids\r\n }, {\r\n notContentRelated: true\r\n }).then(res => {\r\n this.log('status', res);\r\n });\r\n } */\r\n\r\n // * https://core.telegram.org/mtproto/service_messages_about_messages#notice-of-ignored-error-message\r\n public processMessage(message: any, messageId: string, sessionId: Uint8Array | number[]) {\r\n if(message._ === 'messageEmpty') {\r\n this.log.warn('processMessage: messageEmpty', message, messageId);\r\n return;\r\n }\r\n\r\n const msgidInt = parseInt(messageId.substr(0, -10), 10);\r\n if(msgidInt % 2) {\r\n this.log.warn('Server even message id: ', messageId, message);\r\n return;\r\n }\r\n\r\n /* if(this.debug) {\r\n this.log('process message', message, messageId, sessionId);\r\n } */\r\n\r\n switch(message._) {\r\n case 'msg_container': {\r\n for(const innerMessage of message.messages) {\r\n this.processMessage(innerMessage, innerMessage.msg_id, sessionId);\r\n }\r\n\r\n break;\r\n }\r\n \r\n case 'bad_server_salt': {\r\n this.log('Bad server salt', message);\r\n\r\n this.applyServerSalt(message.new_server_salt);\r\n\r\n if(this.sentMessages[message.bad_msg_id]) {\r\n this.pushResend(message.bad_msg_id);\r\n }\r\n \r\n this.ackMessage(messageId);\r\n \r\n // simulate disconnect\r\n /* try {\r\n this.log('networker state:', this);\r\n // @ts-ignore\r\n this.transport.ws.close(1000);\r\n } catch(err) {\r\n this.log.error('transport', this.transport, err);\r\n } */\r\n\r\n break;\r\n }\r\n \r\n case 'bad_msg_notification': {\r\n this.log.error('Bad msg notification', message);\r\n\r\n switch(message.error_code) {\r\n case 16: // * msg_id too low\r\n case 17: // * msg_id too high\r\n case 32: // * msg_seqno too low\r\n case 33: // * msg_seqno too high\r\n case 64: { // * invalid container\r\n //const changedOffset = timeManager.applyServerTime(bigStringInt(messageId).shiftRight(32).toString(10));\r\n const bigInt = str2bigInt(messageId, 10);\r\n rightShift_(bigInt, 32);\r\n const changedOffset = timeManager.applyServerTime(+bigInt2str(bigInt, 10));\r\n if(message.error_code === 17 || changedOffset) {\r\n this.log('Update session');\r\n this.updateSession();\r\n }\r\n\r\n const badMessage = this.updateSentMessage(message.bad_msg_id);\r\n if(badMessage) this.pushResend(badMessage.msg_id); // fix 23.01.2020\r\n //this.ackMessage(messageId);\r\n }\r\n\r\n // * invalid container\r\n /* case 64: {\r\n const badMessage = this.sentMessages[message.bad_msg_id];\r\n if(badMessage) {\r\n for(const msgId of badMessage.inner) {\r\n if(this.sentMessages[msgId] !== undefined) {\r\n this.updateSentMessage\r\n }\r\n }\r\n const inner = badMessage.inner;\r\n }\r\n } */\r\n }\r\n\r\n break;\r\n }\r\n \r\n case 'message': {\r\n if(this.lastServerMessages.indexOf(messageId) !== -1) {\r\n // console.warn('[MT] Server same messageId: ', messageId)\r\n this.ackMessage(messageId);\r\n return;\r\n }\r\n\r\n this.lastServerMessages.push(messageId);\r\n if(this.lastServerMessages.length > 100) {\r\n this.lastServerMessages.shift();\r\n }\r\n\r\n this.processMessage(message.body, message.msg_id, sessionId);\r\n break;\r\n }\r\n \r\n \r\n case 'new_session_created': {\r\n this.ackMessage(messageId);\r\n\r\n if(this.debug) {\r\n this.log.debug('new_session_created', message);\r\n }\r\n //this.updateSession();\r\n \r\n this.processMessageAck(message.first_msg_id);\r\n this.applyServerSalt(message.server_salt);\r\n \r\n sessionStorage.get('dc').then((baseDcId) => {\r\n if(baseDcId === this.dcId && !this.isFileNetworker && NetworkerFactory.updatesProcessor) {\r\n NetworkerFactory.updatesProcessor(message);\r\n }\r\n });\r\n break;\r\n }\r\n \r\n case 'msgs_ack': {\r\n for(const msgId of message.msg_ids) {\r\n this.processMessageAck(msgId);\r\n }\r\n\r\n break;\r\n }\r\n \r\n case 'msg_detailed_info':\r\n if(!this.sentMessages[message.msg_id]) {\r\n this.ackMessage(message.answer_msg_id);\r\n break;\r\n }\r\n case 'msg_new_detailed_info':\r\n if(this.pendingAcks.indexOf(message.answer_msg_id)) {\r\n break;\r\n }\r\n this.reqResendMessage(message.answer_msg_id);\r\n break;\r\n \r\n case 'msgs_state_info': {\r\n this.ackMessage(message.answer_msg_id);\r\n if(this.lastResendReq && \r\n this.lastResendReq.req_msg_id === message.req_msg_id && \r\n this.pendingResends.length\r\n ) {\r\n for(const badMsgId of this.lastResendReq.resend_msg_ids) {\r\n const pos = this.pendingResends.indexOf(badMsgId);\r\n if(pos !== -1) {\r\n this.pendingResends.splice(pos, 1);\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'rpc_result': {\r\n this.ackMessage(messageId);\r\n \r\n const sentMessageId = message.req_msg_id;\r\n const sentMessage = this.sentMessages[sentMessageId];\r\n\r\n this.processMessageAck(sentMessageId);\r\n if(sentMessage) {\r\n const deferred = sentMessage.deferred;\r\n if(message.result._ === 'rpc_error') {\r\n const error = this.processError(message.result);\r\n this.log('Rpc error', error);\r\n if(deferred) {\r\n deferred.reject(error);\r\n }\r\n } else {\r\n if(deferred) {\r\n /* if(DEBUG) {\r\n this.log.debug('Rpc response', message.result, sentMessage);\r\n } */\r\n\r\n deferred.resolve(message.result);\r\n }\r\n\r\n if(sentMessage.isAPI && !this.connectionInited) {\r\n this.connectionInited = true;\r\n ////this.log('Rpc set connectionInited to:', this.connectionInited);\r\n }\r\n }\r\n \r\n delete this.sentMessages[sentMessageId];\r\n } else {\r\n if(this.debug) {\r\n this.log('Rpc result for unknown message:', sentMessageId, message);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'pong': { // * https://core.telegram.org/mtproto/service_messages#ping-messages-pingpong - These messages doesn't require acknowledgments\r\n if((this.transport as TcpObfuscated).networker) {\r\n const sentMessageId = message.msg_id;\r\n const sentMessage = this.sentMessages[sentMessageId]; \r\n\r\n if(sentMessage) {\r\n sentMessage.deferred.resolve(message);\r\n delete this.sentMessages[sentMessageId];\r\n }\r\n }\r\n\r\n break;\r\n }\r\n \r\n default:\r\n this.ackMessage(messageId);\r\n\r\n /* if(this.debug) {\r\n this.log.debug('Update', message);\r\n } */\r\n \r\n if(NetworkerFactory.updatesProcessor !== null) {\r\n NetworkerFactory.updatesProcessor(message);\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n/* import { copy } from \"./object\";\r\n\r\nexport function listMergeSorted(list1: any[] = [], list2: any[] = []) {\r\n const result = copy(list1);\r\n\r\n const minId = list1.length ? list1[list1.length - 1] : 0xFFFFFFFF;\r\n for(let i = 0; i < list2.length; i++) {\r\n if(list2[i] < minId) {\r\n result.push(list2[i]);\r\n }\r\n }\r\n\r\n return result;\r\n} */\r\n\r\nexport const accumulate = (arr: number[], initialValue: number) => arr.reduce((acc, value) => acc + value, initialValue);\r\n\r\nexport function findAndSpliceAll<T>(array: Array<T>, verify: (value: T, index: number, arr: typeof array) => boolean) {\r\n const out: typeof array = [];\r\n let idx = -1;\r\n while((idx = array.findIndex(verify)) !== -1) {\r\n out.push(array.splice(idx, 1)[0]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function forEachReverse<T>(array: Array<T>, callback: (value: T, index?: number, array?: Array<T>) => void) {\r\n for(let length = array.length, i = length - 1; i >= 0; --i) {\r\n callback(array[i], i, array);\r\n }\r\n};\r\n\r\nexport function insertInDescendSortedArray<T extends {[smth in K]?: number}, K extends keyof T>(array: Array<T>, element: T, property: K, pos?: number) {\r\n if(pos === undefined) {\r\n pos = array.indexOf(element);\r\n if(pos !== -1) {\r\n array.splice(pos, 1);\r\n }\r\n }\r\n\r\n const sortProperty: number = element[property];\r\n const len = array.length;\r\n if(!len || sortProperty <= array[len - 1][property]) {\r\n return array.push(element) - 1;\r\n } else if(sortProperty >= array[0][property]) {\r\n array.unshift(element);\r\n return 0;\r\n } else {\r\n for(let i = 0; i < len; i++) {\r\n if(sortProperty > array[i][property]) {\r\n array.splice(i, 0, element);\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n console.error('wtf', array, element);\r\n return array.indexOf(element);\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport MTPNetworker from \"./networker\";\r\nimport { ConnectionStatusChange, InvokeApiOptions } from \"../../types\";\r\nimport MTTransport from \"./transports/transport\";\r\n\r\nexport class NetworkerFactory {\r\n public updatesProcessor: (obj: any) => void = null;\r\n public onConnectionStatusChange: (info: ConnectionStatusChange) => void = null;\r\n\r\n public setUpdatesProcessor(callback: (obj: any) => void) {\r\n this.updatesProcessor = callback;\r\n }\r\n\r\n public getNetworker(dcId: number, authKey: number[], authKeyID: Uint8Array, serverSalt: number[], transport: MTTransport, options: InvokeApiOptions) {\r\n //console.log('NetworkerFactory: creating new instance of MTPNetworker:', dcId, options);\r\n return new MTPNetworker(dcId, authKey, authKeyID, serverSalt, transport, options);\r\n }\r\n}\r\n\r\nexport default new NetworkerFactory();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap<any, Record<any, Set<any>>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\nexport default class EventListenerBase<Listeners extends {[name: string]: Function}> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], once?: boolean}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes<Listeners[k]>\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: keyof Listeners, callback: Listeners[typeof name], once?: boolean) {\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if(once) {\r\n return;\r\n }\r\n }\r\n \r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, once});\r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public removeEventListener(name: keyof Listeners, callback: Listeners[typeof name]) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: keyof Listeners, ...args: ArgumentTypes<Listeners[typeof name]>) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array<SuperReturnType<Listeners[typeof name]>> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener: any) => {\r\n const index = listeners.findIndex((l: any) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { logger, LogLevels } from '../../logger';\r\nimport Modes from '../../../config/modes';\r\nimport EventListenerBase from '../../../helpers/eventListenerBase';\r\nimport { MTConnection } from './transport';\r\n\r\nexport default class Socket extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private ws: WebSocket;\r\n private log: ReturnType<typeof logger>;\r\n private debug = Modes.debug && false;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n\r\n let logLevel = LogLevels.error | LogLevels.log;\r\n if(this.debug) logLevel |= LogLevels.debug;\r\n this.log = logger(`WS-${dcId}` + logSuffix, logLevel);\r\n this.log('constructor');\r\n this.connect();\r\n\r\n return this;\r\n }\r\n\r\n private removeListeners() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.ws.removeEventListener('open', this.handleOpen);\r\n this.ws.removeEventListener('close', this.handleClose);\r\n this.ws.removeEventListener('error', this.handleError);\r\n this.ws.removeEventListener('message', this.handleMessage);\r\n this.ws = undefined;\r\n }\r\n \r\n private connect() {\r\n this.ws = new WebSocket(this.url, 'binary');\r\n this.ws.binaryType = 'arraybuffer';\r\n this.ws.addEventListener('open', this.handleOpen);\r\n this.ws.addEventListener('close', this.handleClose);\r\n this.ws.addEventListener('error', this.handleError);\r\n this.ws.addEventListener('message', this.handleMessage);\r\n }\r\n\r\n public close() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.log.error('close execution');\r\n\r\n try {\r\n this.ws.close();\r\n } catch(err) {\r\n\r\n }\r\n this.handleClose();\r\n }\r\n \r\n private handleOpen = () => {\r\n this.log('opened');\r\n\r\n this.debug && this.log.debug('sending init packet');\r\n this.dispatchEvent('open');\r\n };\r\n\r\n private handleError = (e: Event) => {\r\n this.log.error('handleError', e);\r\n this.close();\r\n };\r\n\r\n private handleClose = () => {\r\n this.log('closed'/* , event, this.pending, this.ws.bufferedAmount */);\r\n\r\n this.removeListeners();\r\n this.dispatchEvent('close');\r\n };\r\n\r\n private handleMessage = (event: MessageEvent) => {\r\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\r\n\r\n this.dispatchEvent('message', event.data as ArrayBuffer);\r\n };\r\n\r\n public send = (body: Uint8Array) => {\r\n this.debug && this.log.debug('-> body length to send:', body.length);\r\n\r\n this.ws.send(body);\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import aesjs from 'aes-js';\r\nimport AES from \"@cryptography/aes\";\r\nimport { bytesFromWordss } from \"../../../helpers/bytes\";\r\nimport { Codec } from \"./codec\";\r\n\r\nclass Counter {\r\n _counter: Uint8Array;\r\n\r\n constructor(initialValue: Uint8Array) {\r\n this._counter = initialValue;\r\n }\r\n\r\n increment() {\r\n for(let i = 15; i >= 0; i--) {\r\n if(this._counter[i] === 255) {\r\n this._counter[i] = 0;\r\n } else {\r\n this._counter[i]++;\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass CTR {\r\n _counter: Counter;\r\n _remainingCounter: Uint8Array = null;\r\n _remainingCounterIndex = 16;\r\n _aes: AES;\r\n\r\n constructor(key: Uint8Array, counter: Uint8Array) {\r\n this._counter = new Counter(counter);\r\n this._aes = new AES(key);\r\n }\r\n\r\n update(payload: Uint8Array) {\r\n const encrypted = payload.slice();\r\n\r\n for(let i = 0; i < encrypted.length; i++) {\r\n if(this._remainingCounterIndex === 16) {\r\n this._remainingCounter = new Uint8Array(bytesFromWordss(this._aes.encrypt(this._counter._counter)));\r\n this._remainingCounterIndex = 0;\r\n this._counter.increment();\r\n }\r\n\r\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\r\n }\r\n\r\n return encrypted;\r\n }\r\n}\r\n\r\n/* \r\n@cryptography/aes не работает с массивами которые не кратны 4, поэтому использую intermediate а не abridged\r\n*/\r\nexport default class Obfuscation {\r\n /* public enc: aesjs.ModeOfOperation.ModeOfOperationCTR;\r\n public dec: aesjs.ModeOfOperation.ModeOfOperationCTR; */\r\n\r\n public encNew: CTR;\r\n public decNew: CTR;\r\n\r\n public init(codec: Codec) {\r\n const initPayload = new Uint8Array(64);\r\n initPayload.randomize();\r\n \r\n while(true) {\r\n let val = (initPayload[3] << 24) | (initPayload[2] << 16) | (initPayload[1] << 8) | (initPayload[0]);\r\n let val2 = (initPayload[7] << 24) | (initPayload[6] << 16) | (initPayload[5] << 8) | (initPayload[4]);\r\n if(initPayload[0] !== 0xef &&\r\n val !== 0x44414548 &&\r\n val !== 0x54534f50 &&\r\n val !== 0x20544547 &&\r\n val !== 0x4954504f &&\r\n val !== 0xeeeeeeee &&\r\n val !== 0xdddddddd &&\r\n val2 !== 0x00000000) {\r\n //initPayload[56] = initPayload[57] = initPayload[58] = initPayload[59] = transport;\r\n break;\r\n }\r\n initPayload.randomize();\r\n }\r\n\r\n ////////////////////////initPayload.subarray(60, 62).hex = dcId;\r\n /* initPayload.set(new Uint8Array([161, 208, 67, 71, 118, 109, 20, 111, 113, 255, 134, 10, 159, 241, 7, 44, 217, 82, 187, 76, 108, 131, 200, 186, 33, 57, 177, 251, 52, 34, 18, 54, 65, 105, 37, 89, 38, 20, 47, 168, 126, 181, 24, 138, 212, 68, 60, 150, 225, 37, 181, 4, 201, 50, 72, 151, 168, 143, 204, 169, 81, 187, 241, 23]));\r\n console.log('initPayload', initPayload); */\r\n\r\n const reversedPayload = initPayload.slice().reverse();\r\n\r\n const encKey = initPayload.slice(8, 40);\r\n const encIv = initPayload.slice(40, 56);\r\n const decKey = reversedPayload.slice(8, 40);\r\n const decIv = reversedPayload.slice(40, 56);\r\n\r\n /* this.enc = new aesjs.ModeOfOperation.ctr(encKey, new aesjs.Counter(encIv as any));\r\n this.dec = new aesjs.ModeOfOperation.ctr(decKey, new aesjs.Counter(decIv as any)); */\r\n\r\n // console.log('encKey', encKey.hex, encIv.hex);\r\n // console.log('decKey', decKey.hex, decIv.hex);\r\n\r\n this.encNew = new CTR(encKey, encIv);\r\n this.decNew = new CTR(decKey, decIv);\r\n\r\n initPayload.set(codec.obfuscateTag, 56);\r\n const encrypted = this.encode(initPayload);\r\n\r\n //console.log('encrypted', encrypted);\r\n\r\n initPayload.set(encrypted.slice(56, 64), 56);\r\n\r\n return initPayload;\r\n }\r\n\r\n /* public encode(payload: Uint8Array) {\r\n let startTime = performance.now();\r\n let res = this.enc.encrypt(payload);\r\n let time = performance.now() - startTime;\r\n\r\n try {\r\n startTime = performance.now();\r\n let arr = this.encNew.encrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n let time2 = performance.now() - startTime;\r\n console.log('Obfuscation: encode comparison:', res, arr, resNew, res.hex === resNew.hex, time2 < time);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.dec.encrypt(payload);\r\n\r\n try {\r\n let arr = this.decNew.decrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n console.log('Obfuscation: decode comparison:', res, arr, resNew, res.hex === resNew.hex);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n } */\r\n public encode(payload: Uint8Array) {\r\n return this.encNew.update(payload);\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n return this.decNew.update(payload);\r\n }\r\n /* public encode(payload: Uint8Array) {\r\n let res = this.encNew.encrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.decNew.decrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n } */\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { Codec } from \"./codec\";\r\n\r\nexport class IntermediatePacketCodec implements Codec {\r\n public tag = 0xee;\r\n public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]);\r\n\r\n //private lol = 0;\r\n\r\n public encodePacket(data: Uint8Array) {\r\n if((data.length % 4) !== 0) {\r\n console.error('Encode error!', data.length, data);\r\n }\r\n\r\n const len = data.length;\r\n const header = new Uint8Array(new Int32Array([/* ++this.lol >= 25 ? 0x80000001 : */len]).buffer);\r\n\r\n //console.log('got nobody cause im braindead', header, len, /* data, */data.buffer.byteLength === data.length);\r\n return header.concat(data);\r\n }\r\n\r\n public readPacket(data: Uint8Array) {\r\n const length = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);\r\n\r\n return data.slice(4, 4 + length);\r\n }\r\n}\r\n\r\nexport default new IntermediatePacketCodec();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"../../../config/modes\";\r\nimport { logger, LogLevels } from \"../../logger\";\r\nimport MTPNetworker from \"../networker\";\r\nimport Obfuscation from \"./obfuscation\";\r\nimport MTTransport, { MTConnection, MTConnectionConstructable } from \"./transport\";\r\nimport intermediatePacketCodec from './intermediate';\r\n\r\nexport default class TcpObfuscated implements MTTransport {\r\n private codec = intermediatePacketCodec;\r\n private obfuscation = new Obfuscation();\r\n public networker: MTPNetworker;\r\n\r\n private pending: Array<Partial<{\r\n resolve: any, \r\n reject: any, \r\n body: Uint8Array, \r\n encoded?: Uint8Array,\r\n bodySent: boolean\r\n }>> = [];\r\n\r\n private debug = Modes.debug && false/* true */;\r\n private log: ReturnType<typeof logger>;\r\n public connected = false;\r\n private lastCloseTime: number;\r\n public connection: MTConnection;\r\n\r\n //private debugPayloads: MTPNetworker['debugRequests'] = [];\r\n\r\n constructor(private Connection: MTConnectionConstructable, private dcId: number, private url: string, private logSuffix: string, public retryTimeout: number) {\r\n let logLevel = LogLevels.error | LogLevels.log;\r\n if(this.debug) logLevel |= LogLevels.debug;\r\n this.log = logger(`TCP-${dcId}` + logSuffix, logLevel);\r\n this.log('constructor');\r\n \r\n this.connect();\r\n }\r\n\r\n private onOpen = () => {\r\n this.connected = true;\r\n\r\n const initPayload = this.obfuscation.init(this.codec);\r\n\r\n this.connection.send(initPayload);\r\n\r\n if(this.networker) {\r\n this.pending.length = 0; // ! clear queue and reformat messages to container, because if sending simultaneously 10+ messages, connection will die\r\n this.networker.setConnectionStatus(true);\r\n this.networker.cleanupSent();\r\n this.networker.resend();\r\n } else {\r\n for(const pending of this.pending) {\r\n if(pending.encoded && pending.body) {\r\n pending.encoded = this.encodeBody(pending.body);\r\n }\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n this.releasePending();\r\n }, 0);\r\n };\r\n\r\n private onMessage = (buffer: ArrayBuffer) => {\r\n let data = this.obfuscation.decode(new Uint8Array(buffer));\r\n data = this.codec.readPacket(data);\r\n\r\n if(this.networker) { // authenticated!\r\n //this.pending = this.pending.filter(p => p.body); // clear pending\r\n\r\n this.debug && this.log.debug('redirecting to networker', data.length);\r\n this.networker.parseResponse(data).then(response => {\r\n this.debug && this.log.debug('redirecting to networker response:', response);\r\n\r\n try {\r\n this.networker.processMessage(response.response, response.messageId, response.sessionId);\r\n } catch(err) {\r\n this.log.error('handleMessage networker processMessage error', err);\r\n }\r\n\r\n //this.releasePending();\r\n }).catch(err => {\r\n this.log.error('handleMessage networker parseResponse error', err);\r\n });\r\n\r\n //this.dd();\r\n return;\r\n }\r\n\r\n //console.log('got hex:', data.hex);\r\n const pending = this.pending.shift();\r\n if(!pending) {\r\n this.debug && this.log.debug('no pending for res:', data.hex);\r\n return;\r\n }\r\n\r\n pending.resolve(data);\r\n };\r\n\r\n private onClose = () => {\r\n this.connected = false;\r\n\r\n this.connection.removeEventListener('open', this.onOpen);\r\n this.connection.removeEventListener('close', this.onClose);\r\n this.connection.removeEventListener('message', this.onMessage);\r\n this.connection = undefined;\r\n \r\n const time = Date.now();\r\n const diff = time - this.lastCloseTime;\r\n const needTimeout = !isNaN(diff) && diff < this.retryTimeout ? this.retryTimeout - diff : 0;\r\n \r\n if(this.networker) {\r\n this.networker.setConnectionStatus(false);\r\n this.pending.length = 0;\r\n }\r\n \r\n this.log('will try to reconnect after timeout:', needTimeout / 1000);\r\n setTimeout(() => {\r\n this.log('trying to reconnect...');\r\n this.lastCloseTime = Date.now();\r\n \r\n if(!this.networker) {\r\n for(const pending of this.pending) {\r\n if(pending.bodySent) {\r\n pending.bodySent = false;\r\n }\r\n }\r\n }\r\n \r\n this.connect();\r\n }, needTimeout);\r\n };\r\n\r\n private connect() {\r\n this.connection = new this.Connection(this.dcId, this.url, this.logSuffix);\r\n this.connection.addEventListener('open', this.onOpen);\r\n this.connection.addEventListener('close', this.onClose);\r\n this.connection.addEventListener('message', this.onMessage);\r\n }\r\n\r\n private encodeBody(body: Uint8Array) {\r\n const toEncode = this.codec.encodePacket(body);\r\n\r\n //this.log('send before obf:', /* body.hex, nonce.hex, */ toEncode.hex);\r\n const encoded = this.obfuscation.encode(toEncode);\r\n //this.log('send after obf:', enc.hex);\r\n\r\n return encoded;\r\n }\r\n\r\n public send(body: Uint8Array) {\r\n this.debug && this.log.debug('-> body length to pending:', body.length);\r\n\r\n const encoded: typeof body = this.connected ? this.encodeBody(body) : undefined;\r\n\r\n //return;\r\n\r\n if(this.networker) {\r\n this.pending.push({body, encoded});\r\n this.releasePending();\r\n } else {\r\n const promise = new Promise<typeof body>((resolve, reject) => {\r\n this.pending.push({resolve, reject, body, encoded});\r\n });\r\n\r\n this.releasePending();\r\n\r\n return promise;\r\n }\r\n }\r\n\r\n private releasePending(/* tt = false */) {\r\n if(!this.connected) {\r\n //this.connect();\r\n return;\r\n }\r\n\r\n /* if(!tt) {\r\n this.releasePendingDebounced();\r\n return;\r\n } */\r\n\r\n //this.log('-> messages to send:', this.pending.length);\r\n let length = this.pending.length;\r\n //for(let i = length - 1; i >= 0; --i) {\r\n for(let i = 0; i < length; ++i) {\r\n /* if(this.ws.bufferedAmount) {\r\n break;\r\n } */\r\n\r\n const pending = this.pending[i];\r\n const {body, bodySent} = pending;\r\n let encoded = pending.encoded;\r\n if(body && !bodySent) {\r\n\r\n //this.debugPayloads.push({before: body.slice(), after: enc});\r\n\r\n this.debug && this.log.debug('-> body length to send:', body.length);\r\n /* if(this.ws.bufferedAmount) {\r\n this.log.error('bufferedAmount:', this.ws.bufferedAmount);\r\n } */\r\n\r\n /* if(this.ws.readyState !== this.ws.OPEN) {\r\n this.log.error('ws is closed?');\r\n this.connected = false;\r\n break;\r\n } */\r\n\r\n if(!encoded) {\r\n encoded = pending.encoded = this.encodeBody(body);\r\n }\r\n\r\n //this.lol.push(body);\r\n //setTimeout(() => {\r\n this.connection.send(encoded);\r\n //}, 100);\r\n //this.dd();\r\n \r\n if(!pending.resolve) { // remove if no response needed\r\n this.pending.splice(i--, 1);\r\n length--;\r\n } else {\r\n pending.bodySent = true;\r\n }\r\n\r\n //delete pending.body;\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const userAgent = navigator ? navigator.userAgent : null;\r\nexport const isApple = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\r\nexport const isAndroid = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\r\nexport const isChromium = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\r\n\r\n/**\r\n * Returns true when run in WebKit derived browsers.\r\n * This is used as a workaround for a memory leak in Safari caused by using Transferable objects to\r\n * transfer data between WebWorkers and the main thread.\r\n * https://github.com/mapbox/mapbox-gl-js/issues/8771\r\n *\r\n * This should be removed once the underlying Safari issue is fixed.\r\n */\r\nexport const ctx = typeof(window) !== 'undefined' ? window : self;\r\n\r\n// https://stackoverflow.com/a/58065241\r\nexport const isAppleMobile = (/iPad|iPhone|iPod/.test(navigator.platform) ||\r\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\r\n !ctx.MSStream;\r\n\r\nexport const isSafari = !!('safari' in ctx) || !!(userAgent && (/\\b(iPad|iPhone|iPod)\\b/.test(userAgent) || (!!userAgent.match('Safari') && !userAgent.match('Chrome'))))/* || true */;\r\n\r\nexport const isMobileSafari = isSafari && isAppleMobile;\r\n\r\nexport const isMobile = /* screen.width && screen.width < 480 || */navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\r\nexport const isServiceWorker = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\r\nexport const isWorker = isWebWorker || isServiceWorker;\r\n\r\n// в SW может быть сразу две переменных TRUE, поэтому проверяю по последней\r\n\r\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\r\n (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' })\r\n .then((listeners) => {\r\n if(!listeners.length) {\r\n //console.trace('no listeners?', self, listeners);\r\n return;\r\n }\r\n\r\n listeners.slice(all ? 0 : -1).forEach(listener => {\r\n // @ts-ignore\r\n listener.postMessage(...args);\r\n });\r\n });\r\n};\r\n\r\nconst notifyWorker = (...args: any[]) => {\r\n // @ts-ignore\r\n (self as any as DedicatedWorkerGlobalScope).postMessage(...args);\r\n};\r\n\r\nconst noop = () => {};\r\n\r\nexport const notifySomeone = isServiceWorker ? notifyServiceWorker.bind(null, false) : (isWebWorker ? notifyWorker : noop);\r\nexport const notifyAll = isServiceWorker ? notifyServiceWorker.bind(null, true) : (isWebWorker ? notifyWorker : noop);\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport MTTransport, { MTConnection, MTConnectionConstructable } from './transports/transport';\r\nimport Modes from '../../config/modes';\r\n\r\n///////////////////////////////////////////\r\n/////////////////////////////////////\r\n//////////\r\n\r\n/////////////////////\r\nimport Socket from './transports/websocket';\r\nimport TcpObfuscated from './transports/tcpObfuscated';\r\nimport EventListenerBase from '../../helpers/eventListenerBase';\r\nimport { isSafari } from '../../helpers/userAgent';\r\nimport { notifyAll, isWebWorker } from '../../helpers/context';\r\n//////////\r\n\r\nexport type TransportType = 'websocket' | 'https' | 'http';\r\nexport type ConnectionType = 'client' | 'download' | 'upload';\r\ntype Servers = {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTTransport[]\r\n }\r\n }\r\n};\r\n\r\nlet socketId = 0;\r\nconst TEST_SUFFIX = Modes.test ? '_test' : '';\r\n\r\n///////////////////\r\nclass SocketProxied extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private id: number;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n this.id = ++socketId;\r\n socketsProxied.set(this.id, this);\r\n\r\n notifyAll({\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'setup', \r\n payload: {\r\n dcId, \r\n url,\r\n logSuffix\r\n },\r\n id: this.id\r\n }\r\n });\r\n }\r\n\r\n public send(payload: Uint8Array) {\r\n const task: any = {\r\n type: 'socketProxy', \r\n payload: {\r\n type: 'send',\r\n payload,\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n\r\n public close() {\r\n const task: any = {\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'close',\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n}\r\n//////////\r\n\r\nexport const socketsProxied: Map<number, SocketProxied> = new Map();\r\n\r\nexport class DcConfigurator {\r\n private sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora'];\r\n\r\n private dcOptions = Modes.test\r\n ? [\r\n {id: 1, host: '149.154.175.10', port: 80},\r\n {id: 2, host: '149.154.167.40', port: 80},\r\n {id: 3, host: '149.154.175.117', port: 80}\r\n ]\r\n : [\r\n {id: 1, host: '149.154.175.50', port: 80},\r\n {id: 2, host: '149.154.167.50', port: 80},\r\n {id: 3, host: '149.154.175.100', port: 80},\r\n {id: 4, host: '149.154.167.91', port: 80},\r\n {id: 5, host: '149.154.171.5', port: 80}\r\n ];\r\n\r\n private chosenServers: Servers = {} as any;\r\n\r\n///////////////////////\r\n private transportSocket = (dcId: number, connectionType: ConnectionType) => {\r\n const subdomain = this.sslSubdomains[dcId - 1];\r\n const path = 'apiws' + TEST_SUFFIX;\r\n const chosenServer = 'wss://' + subdomain + '.web.telegram.org/' + path;\r\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\r\n\r\n const retryTimeout = connectionType === 'client' ? 10000 : 10000;\r\n\r\n const oooohLetMeLive: MTConnectionConstructable = (isSafari && isWebWorker && typeof(SocketProxied) !== 'undefined') /* || true */ ? SocketProxied : Socket;\r\n\r\n return new TcpObfuscated(oooohLetMeLive, dcId, chosenServer, logSuffix, retryTimeout);\r\n };\r\n////////////\r\n\r\n/////////////////////////////////////////////\r\n/////////////////////////////////////////////////////////////////////////////\r\n//////////////////////////////////\r\n/////////////////////////////////////////////////////////////////////////////////////////////////\r\n///////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////\r\n//////////////////////////////////////////\r\n////////////\r\n///////////////////////////////////////////\r\n//////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n//////////////////////////////////////////////\r\n/////////\r\n///////\r\n/////\r\n////\r\n////////////\r\n\r\n public chooseServer(dcId: number, connectionType: ConnectionType = 'client', transportType: TransportType = 'websocket', reuse = true) {\r\n /* if(transportType === 'websocket' && !Modes.multipleConnections) {\r\n connectionType = 'client';\r\n } */\r\n\r\n if(!this.chosenServers.hasOwnProperty(transportType)) {\r\n this.chosenServers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const servers = this.chosenServers[transportType][connectionType];\r\n\r\n if(!(dcId in servers)) {\r\n servers[dcId] = [];\r\n }\r\n\r\n const transports = servers[dcId];\r\n\r\n if(!transports.length || !reuse/* || (upload && transports.length < 1) */) {\r\n let transport: MTTransport;\r\n\r\n/////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n/////////////////////////////\r\n transport = this.transportSocket(dcId, connectionType);\r\n///////////////\r\n///////////////////////////////////////////////////////////\r\n////////////////\r\n \r\n if(!transport) {\r\n console.error('No chosenServer!', dcId);\r\n return null;\r\n }\r\n \r\n if(reuse) {\r\n transports.push(transport);\r\n }\r\n \r\n return transport;\r\n }\r\n \r\n return transports[0];\r\n }\r\n}\r\n\r\nexport default new DcConfigurator();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { TLSerialization } from \"./tl_utils\";\r\nimport CryptoWorker from '../crypto/cryptoworker';\r\nimport { bytesFromArrayBuffer, bytesFromHex, bytesToHex } from \"../../helpers/bytes\";\r\nimport { bigInt2str, str2bigInt } from \"../../vendor/leemon\";\r\n\r\nexport class RSAKeysManager {\r\n\r\n /**\r\n * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id\r\n * \r\n * \r\n * -----BEGIN RSA PUBLIC KEY-----\r\n * MIIBCgKCAQEAwVACPi9w23mF3tBkdZz+zwrzKOaaQdr01vAbU4E1pvkfj4sqDsm6\r\n * lyDONS789sVoD/xCS9Y0hkkC3gtL1tSfTlgCMOOul9lcixlEKzwKENj1Yz/s7daS\r\n * an9tqw3bfUV/nqgbhGX81v/+7RFAEd+RwFnK7a+XYl9sluzHRyVVaTTveB2GazTw\r\n * Efzk2DWgkBluml8OREmvfraX3bkHZJTKX4EQSjBbbdJ2ZXIsRrYOXfaA+xayEGB+\r\n * 8hdlLmAjbCVfaigxX0CDqWeR1yFL9kwd9P0NsZRPsmoqVwMbMu7mStFai6aIhc3n\r\n * Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB\r\n * -----END RSA PUBLIC KEY-----\r\n * \r\n * -----BEGIN PUBLIC KEY-----\r\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAruw2yP/BCcsJliRoW5eB\r\n * VBVle9dtjJw+OYED160Wybum9SXtBBLXriwt4rROd9csv0t0OHCaTmRqBcQ0J8fx\r\n * hN6/cpR1GWgOZRUAiQxoMnlt0R93LCX/j1dnVa/gVbCjdSxpbrfY2g2L4frzjJvd\r\n * l84Kd9ORYjDEAyFnEA7dD556OptgLQQ2e2iVNq8NZLYTzLp5YpOdO1doK+ttrltg\r\n * gTCy5SrKeLoCPPbOgGsdxJxyz5KKcZnSLj16yE5HvJQn0CNpRdENvRUXe6tBP78O\r\n * 39oJ8BTHp9oIjd6XWXAsp2CvK45Ol8wFXGF710w9lwCGNbmNxNYhtIkdqfsEcwR5\r\n * JwIDAQAB\r\n * -----END PUBLIC KEY-----\r\n * \r\n * -----BEGIN PUBLIC KEY-----\r\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvfLHfYH2r9R70w8prHbl\r\n * Wt/nDkh+XkgpflqQVcnAfSuTtO05lNPspQmL8Y2XjVT4t8cT6xAkdgfmmvnvRPOO\r\n * KPi0OfJXoRVylFzAQG/j83u5K3kRLbae7fLccVhKZhY46lvsueI1hQdLgNV9n1cQ\r\n * 3TDS2pQOCtovG4eDl9wacrXOJTG2990VjgnIKNA0UMoP+KF03qzryqIt3oTvZq03\r\n * DyWdGK+AZjgBLaDKSnC6qD2cFY81UryRWOab8zKkWAnhw2kFpcqhI0jdV5QaSCEx\r\n * vnsjVaX0Y1N0870931/5Jb9ICe4nweZ9kSDF/gip3kWLG0o8XQpChDfyvsqB9OLV\r\n * /wIDAQAB\r\n * -----END PUBLIC KEY-----\r\n * \r\n * -----BEGIN PUBLIC KEY-----\r\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/ditzm+mPND6xkhzwFI\r\n * z6J/968CtkcSE/7Z2qAJiXbmZ3UDJPGrzqTDHkO30R8VeRM/Kz2f4nR05GIFiITl\r\n * 4bEjvpy7xqRDspJcCFIOcyXm8abVDhF+th6knSU0yLtNKuQVP6voMrnt9MV1X92L\r\n * GZQLgdHZbPQz0Z5qIpaKhdyA8DEvWWvSUwwc+yi1/gGaybwlzZwqXYoPOhwMebzK\r\n * Uk0xW14htcJrRrq+PXXQbRzTMynseCoPIoke0dtCodbA3qQxQovE16q9zz4Otv2k\r\n * 4j63cz53J+mhkVWAeWxVGI0lltJmWtEYK6er8VqqWot3nqmWMXogrgRLggv/Nbbo\r\n * oQIDAQAB\r\n * -----END PUBLIC KEY-----\r\n * \r\n * -----BEGIN PUBLIC KEY-----\r\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmpxVY7ld/8DAjz6F6q0\r\n * 5shjg8/4p6047bn6/m8yPy1RBsvIyvuDuGnP/RzPEhzXQ9UJ5Ynmh2XJZgHoE9xb\r\n * nfxL5BXHplJhMtADXKM9bWB11PU1Eioc3+AXBB8QiNFBn2XI5UkO5hPhbb9mJpjA\r\n * 9Uhw8EdfqJP8QetVsI/xrCEbwEXe0xvifRLJbY08/Gp66KpQvy7g8w7VB8wlgePe\r\n * xW3pT13Ap6vuC+mQuJPyiHvSxjEKHgqePji9NP3tJUFQjcECqcm0yV7/2d0t/pbC\r\n * m+ZH1sadZspQCEPPrtbkQBlvHb4OLiIWPGHKSMeRFvp3IWcmdJqXahxLCUS1Eh6M\r\n * AQIDAQAB\r\n * -----END PUBLIC KEY-----\r\n *\r\n * Bytes can be got via \r\n * $ openssl rsa -pubin -in key.pub -text -noout\r\n */\r\n\r\n private publisKeysHex = [{\r\n modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01',\r\n exponent: '010001'\r\n }];\r\n\r\n private publicKeysParsed: {\r\n [hex: string]: {\r\n modulus: string,\r\n exponent: string\r\n }\r\n } = {};\r\n private prepared = false;\r\n private preparePromise: Promise<void> = null;\r\n\r\n // prepareRsaKeys\r\n public prepare(): Promise<void> {\r\n if(this.preparePromise) return this.preparePromise;\r\n else if(this.prepared) {\r\n return Promise.resolve();\r\n }\r\n\r\n return this.preparePromise = Promise.all(this.publisKeysHex.map(keyParsed => {\r\n let RSAPublicKey = new TLSerialization();\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.modulus), 'n');\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.exponent), 'e');\r\n\r\n let buffer = RSAPublicKey.getBuffer();\r\n\r\n return CryptoWorker.sha1Hash(buffer).then(hash => {\r\n let fingerprintBytes = bytesFromArrayBuffer(hash).slice(-8);\r\n fingerprintBytes.reverse();\r\n \r\n this.publicKeysParsed[bytesToHex(fingerprintBytes).toLowerCase()] = {\r\n modulus: keyParsed.modulus,\r\n exponent: keyParsed.exponent\r\n };\r\n });\r\n })).then(() => {\r\n this.prepared = true;\r\n\r\n //console.log('[MT] Prepared keys');\r\n this.preparePromise = null;\r\n });\r\n }\r\n\r\n // selectRsaKeyByFingerPrint\r\n public async select(fingerprints: Array<any>) {\r\n await this.prepare();\r\n\r\n var fingerprintHex, foundKey, i;\r\n for(i = 0; i < fingerprints.length; i++) {\r\n //fingerprintHex = bigStringInt(fingerprints[i]).toString(16);\r\n fingerprintHex = bigInt2str(str2bigInt(fingerprints[i], 10), 16).toLowerCase();\r\n\r\n if(fingerprintHex.length < 16) {\r\n fingerprintHex = new Array(16 - fingerprintHex.length).fill('0').join('') + fingerprintHex;\r\n }\r\n\r\n //console.log(fingerprintHex, this.publicKeysParsed);\r\n if(foundKey = this.publicKeysParsed[fingerprintHex]) {\r\n return Object.assign({\r\n fingerprint: fingerprints[i]\r\n }, foundKey);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nexport default new RSAKeysManager();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { TLSerialization, TLDeserialization } from \"./tl_utils\";\r\nimport dcConfigurator from \"./dcConfigurator\";\r\nimport rsaKeysManager from \"./rsaKeysManager\";\r\nimport timeManager from \"./timeManager\";\r\n\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\n\r\nimport { logger, LogLevels } from \"../logger\";\r\nimport { bytesCmp, bytesToHex, bytesFromHex, bytesXor } from \"../../helpers/bytes\";\r\nimport DEBUG from \"../../config/debug\";\r\nimport { cmp, int2bigInt, one, pow, str2bigInt, sub } from \"../../vendor/leemon\";\r\n\r\n/* let fNewNonce: any = bytesFromHex('8761970c24cb2329b5b2459752c502f3057cb7e8dbab200e526e8767fdc73b3c').reverse();\r\nlet fNonce: any = bytesFromHex('b597720d11faa5914ef485c529cde414').reverse();\r\nlet fResult: any = new Uint8Array(bytesFromHex('000000000000000001b473a0661b285e480000006324160514e4cd29c585f44e91a5fa110d7297b5c0c4134c84893db5715ecd56af5ed618082182053cc5de91cd00000015c4b51c02000000a5b7f709355fc30b216be86c022bb4c3'));\r\n\r\nfNewNonce = false;\r\nfNonce = false;\r\nfResult = false; */\r\n\r\ntype AuthOptions = {\r\n dcId: number,\r\n nonce: Uint8Array,\r\n \r\n serverNonce?: Uint8Array,\r\n pq?: Uint8Array,\r\n fingerprints?: string[],\r\n publicKey?: {\r\n modulus: string,\r\n exponent: string,\r\n fingerprint: string\r\n },\r\n \r\n // good\r\n p?: number[],\r\n q?: number[],\r\n \r\n newNonce?: Uint8Array,\r\n \r\n retry?: number,\r\n \r\n b?: number[],\r\n g?: number,\r\n gA?: Uint8Array,\r\n dhPrime?: Uint8Array,\r\n \r\n tmpAesKey?: Uint8Array,\r\n tmpAesIv?: Uint8Array,\r\n \r\n authKeyId?: Uint8Array,\r\n authKey?: number[],\r\n serverSalt?: number[],\r\n\r\n localTime?: number,\r\n serverTime?: any\r\n};\r\n\r\nexport class Authorizer {\r\n private cached: {\r\n [dcId: number]: Promise<AuthOptions>\r\n } = {};\r\n \r\n private log: ReturnType<typeof logger>;\r\n \r\n constructor() {\r\n this.log = logger(`AUTHORIZER`, LogLevels.error | LogLevels.log);\r\n }\r\n \r\n public mtpSendPlainRequest(dcId: number, requestArray: Uint8Array) {\r\n const requestLength = requestArray.byteLength;\r\n //requestArray = new /* Int32Array */Uint8Array(requestBuffer);\r\n \r\n const header = new TLSerialization();\r\n header.storeLongP(0, 0, 'auth_key_id'); // Auth key\r\n header.storeLong(timeManager.generateId(), 'msg_id'); // Msg_id\r\n header.storeInt(requestLength, 'request_length');\r\n \r\n const headerArray = header.getBytes(true) as Uint8Array;\r\n const resultArray = new Uint8Array(headerArray.byteLength + requestLength);\r\n resultArray.set(headerArray);\r\n resultArray.set(requestArray, headerArray.length);\r\n \r\n /* var headerBuffer = header.getBuffer(),\r\n headerArray = new Int32Array(headerBuffer);\r\n var headerLength = headerBuffer.byteLength;\r\n \r\n var resultBuffer = new ArrayBuffer(headerLength + requestLength),\r\n resultArray = new Int32Array(resultBuffer);\r\n \r\n resultArray.set(headerArray);\r\n resultArray.set(requestArray, headerArray.length);\r\n \r\n const requestData = xhrSendBuffer ? resultBuffer : resultArray; */\r\n const transport = dcConfigurator.chooseServer(dcId);\r\n const baseError = {\r\n code: 406,\r\n type: 'NETWORK_BAD_RESPONSE',\r\n transport: transport\r\n };\r\n \r\n if(DEBUG) {\r\n this.log('mtpSendPlainRequest: creating requestPromise');\r\n }\r\n \r\n const promise = transport.send(resultArray) as any as Promise<Uint8Array>;\r\n return promise.then(result => {\r\n if(DEBUG) {\r\n this.log('mtpSendPlainRequest: in good sector', result);\r\n }\r\n \r\n if(!result || !result.byteLength) {\r\n return Promise.reject(baseError);\r\n }\r\n \r\n try {\r\n /* result = fResult ? fResult : result;\r\n fResult = new Uint8Array(0); */\r\n \r\n const deserializer = new TLDeserialization(result, {mtproto: true});\r\n const auth_key_id = deserializer.fetchLong('auth_key_id');\r\n if(auth_key_id !== '0') this.log.error('auth_key_id !== 0', auth_key_id);\r\n \r\n const msg_id = deserializer.fetchLong('msg_id');\r\n if(msg_id === '0') this.log.error('msg_id === 0', msg_id);\r\n \r\n const msg_len = deserializer.fetchInt('msg_len');\r\n if(!msg_len) this.log.error('no msg_len', msg_len);\r\n \r\n return deserializer;\r\n } catch(e) {\r\n this.log.error('mtpSendPlainRequest: deserialization went bad', e);\r\n const error = Object.assign(baseError, {originalError: e});\r\n throw error;\r\n }\r\n }, error => {\r\n if(!error.message && !error.type) {\r\n error = Object.assign(baseError, {\r\n originalError: error\r\n });\r\n }\r\n \r\n return Promise.reject(error);\r\n });\r\n }\r\n \r\n public async mtpSendReqPQ(auth: AuthOptions) {\r\n var request = new TLSerialization({mtproto: true});\r\n \r\n request.storeMethod('req_pq_multi', {nonce: auth.nonce});\r\n \r\n // need\r\n rsaKeysManager.prepare().then(() => {});\r\n \r\n if(DEBUG) {\r\n this.log('Send req_pq', auth.nonce.hex);\r\n }\r\n try {\r\n var deserializer = await this.mtpSendPlainRequest(auth.dcId, request.getBytes(true));\r\n } catch(error) {\r\n this.log.error('req_pq error', error.message);\r\n throw error;\r\n }\r\n \r\n var response = deserializer.fetchObject('ResPQ');\r\n \r\n if(response._ !== 'resPQ') {\r\n throw new Error('[MT] resPQ response invalid: ' + response._);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n this.log.error(auth.nonce, response.nonce);\r\n throw new Error('[MT] resPQ nonce mismatch');\r\n }\r\n \r\n //auth.serverNonce = response.server_nonce;\r\n auth.serverNonce = new Uint8Array(response.server_nonce); // need\r\n auth.pq = response.pq;\r\n auth.fingerprints = response.server_public_key_fingerprints;\r\n \r\n if(DEBUG) {\r\n this.log('Got ResPQ', bytesToHex(auth.serverNonce), bytesToHex(auth.pq), auth.fingerprints);\r\n }\r\n \r\n let publicKey = await rsaKeysManager.select(auth.fingerprints);\r\n if(!publicKey) {\r\n throw new Error('[MT] No public key found');\r\n }\r\n \r\n auth.publicKey = publicKey;\r\n \r\n if(DEBUG) {\r\n this.log('PQ factorization start', auth.pq);\r\n }\r\n \r\n try {\r\n var pAndQ = await CryptoWorker.factorize(auth.pq);\r\n } catch(error) {\r\n this.log.error('worker error factorize', error);\r\n throw error;\r\n }\r\n \r\n auth.p = pAndQ[0];\r\n auth.q = pAndQ[1];\r\n \r\n if(DEBUG) {\r\n this.log('PQ factorization done', pAndQ);\r\n }\r\n /* let p = new Uint32Array(new Uint8Array(auth.p).buffer)[0];\r\n let q = new Uint32Array(new Uint8Array(auth.q).buffer)[0];\r\n console.log(dT(), 'PQ factorization done', pAndQ, p.toString(16), q.toString(16)); */\r\n \r\n return this.mtpSendReqDhParams(auth);\r\n }\r\n \r\n public async mtpSendReqDhParams(auth: AuthOptions) {\r\n auth.newNonce = new Uint8Array(32).randomize();\r\n /* auth.newNonce = new Array(32); // need array, not uint8array!\r\n MTProto.secureRandom.nextBytes(auth.newNonce); */\r\n \r\n //console.log(\"TCL: Authorizer -> mtpSendReqDhParams -> auth.newNonce\", auth.newNonce)\r\n \r\n // remove\r\n // auth.newNonce = fNewNonce ? fNewNonce : auth.newNonce;\r\n // console.log(\"TCL: Authorizer -> mtpSendReqDhParams -> auth.newNonce\", auth.newNonce);\r\n \r\n let p_q_inner_data = {\r\n _: 'p_q_inner_data',\r\n pq: auth.pq,\r\n p: auth.p,\r\n q: auth.q,\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n new_nonce: auth.newNonce\r\n };\r\n \r\n let data = new TLSerialization({mtproto: true});\r\n data.storeObject(p_q_inner_data, 'P_Q_inner_data', 'DECRYPTED_DATA');\r\n /* console.log('p_q_inner_data', p_q_inner_data, \r\n bytesToHex(bytesFromArrayBuffer(data.getBuffer())), \r\n sha1BytesSync(data.getBuffer()),\r\n bytesFromArrayBuffer(await CryptoWorker.sha1Hash(data.getBuffer()))); */\r\n \r\n let uint8Data = data.getBytes(true);\r\n let sha1Hashed = await CryptoWorker.sha1Hash(uint8Data);\r\n \r\n //var dataWithHash = sha1BytesSync(data.getBuffer()).concat(data.getBytes() as number[]);\r\n let dataWithHash = sha1Hashed.concat(uint8Data);\r\n \r\n //dataWithHash = addPadding(dataWithHash, 255);\r\n //dataWithHash = dataWithHash.concat(bytesFromHex('96228ea7790e71caaabc2ab67f4412e9aa224c664d232cc08617a32ce1796aa052da4a737083211689858f461e4473fd6394afd3aa0c8014840dc13f47beaf4fc3b9229aea9cfa83f9f6e676e50ee7676542fb75606879ee7e65cf3a2295b4ba0934ceec1011560c62395a6e9593bfb117cd0da75ba56723672d100ac17ec4d805aa59f7852e3a25a79ee4'));\r\n //console.log('sha1Hashed', bytesToHex(sha1Hashed), 'dataWithHash', bytesToHex(dataWithHash), dataWithHash.length);\r\n \r\n let rsaEncrypted = await CryptoWorker.rsaEncrypt(auth.publicKey, dataWithHash);\r\n //let rsaEncrypted = await CryptoWorker.rsaEncrypt(auth.publicKey, dataWithHash);\r\n \r\n //console.log('rsaEncrypted', rsaEncrypted, new Uint8Array(rsaEncrypted).hex);\r\n \r\n let req_DH_params = {\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n p: auth.p,\r\n q: auth.q,\r\n public_key_fingerprint: auth.publicKey.fingerprint,\r\n encrypted_data: rsaEncrypted\r\n };\r\n \r\n var request = new TLSerialization({mtproto: true});\r\n request.storeMethod('req_DH_params', req_DH_params);\r\n \r\n let requestBytes = request.getBytes(true);\r\n \r\n if(DEBUG) {\r\n this.log('Send req_DH_params', req_DH_params/* , requestBytes.hex */);\r\n }\r\n \r\n try {\r\n var deserializer = await this.mtpSendPlainRequest(auth.dcId, requestBytes);\r\n } catch(error) {\r\n this.log.error('Send req_DH_params FAIL!', error);\r\n throw error;\r\n }\r\n \r\n var response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE');\r\n \r\n if(DEBUG) {\r\n this.log('Sent req_DH_params, response:', response);\r\n }\r\n \r\n if(response._ !== 'server_DH_params_fail' && response._ !== 'server_DH_params_ok') {\r\n throw new Error('[MT] Server_DH_Params response invalid: ' + response._);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n throw new Error('[MT] Server_DH_Params nonce mismatch');\r\n }\r\n \r\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\r\n throw new Error('[MT] Server_DH_Params server_nonce mismatch');\r\n }\r\n \r\n if(response._ === 'server_DH_params_fail') {\r\n //var newNonceHash = sha1BytesSync(auth.newNonce).slice(-16);\r\n var newNonceHash = (await CryptoWorker.sha1Hash(auth.newNonce)).slice(-16);\r\n if(!bytesCmp(newNonceHash, response.new_nonce_hash)) {\r\n throw new Error('[MT] server_DH_params_fail new_nonce_hash mismatch');\r\n }\r\n \r\n throw new Error('[MT] server_DH_params_fail');\r\n }\r\n \r\n // fill auth object\r\n try {\r\n await this.mtpDecryptServerDhDataAnswer(auth, response.encrypted_answer);\r\n } catch(e) {\r\n this.log.error('mtpDecryptServerDhDataAnswer FAILED!', e);\r\n throw e;\r\n }\r\n \r\n //console.log(dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...');\r\n \r\n return this.mtpSendSetClientDhParams(auth as any); // костыль\r\n }\r\n \r\n public async mtpDecryptServerDhDataAnswer(auth: AuthOptions, encryptedAnswer: any) {\r\n auth.localTime = Date.now();\r\n \r\n // can't concat Array with Uint8Array!\r\n //auth.tmpAesKey = sha1BytesSync(auth.newNonce.concat(auth.serverNonce)).concat(sha1BytesSync(auth.serverNonce.concat(auth.newNonce)).slice(0, 12));\r\n //auth.tmpAesIv = sha1BytesSync(auth.serverNonce.concat(auth.newNonce)).slice(12).concat(sha1BytesSync([].concat(auth.newNonce, auth.newNonce)), auth.newNonce.slice(0, 4));\r\n auth.tmpAesKey = (await CryptoWorker.sha1Hash(auth.newNonce.concat(auth.serverNonce)))\r\n .concat((await CryptoWorker.sha1Hash(auth.serverNonce.concat(auth.newNonce))).slice(0, 12));\r\n \r\n auth.tmpAesIv = (await CryptoWorker.sha1Hash(auth.serverNonce.concat(auth.newNonce))).slice(12)\r\n .concat(await CryptoWorker.sha1Hash(auth.newNonce.concat(auth.newNonce)), auth.newNonce.slice(0, 4));\r\n \r\n \r\n /* console.log(auth.serverNonce.concat(auth.newNonce));\r\n console.log(auth.newNonce.concat(auth.serverNonce));\r\n console.log(auth.newNonce.concat(auth.newNonce)); */\r\n \r\n \r\n //var answerWithHash = aesDecryptSync(encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv);\r\n var answerWithHash = new Uint8Array(await CryptoWorker.aesDecrypt(encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv));\r\n \r\n var hash = answerWithHash.slice(0, 20);\r\n var answerWithPadding = answerWithHash.slice(20);\r\n \r\n // console.log('hash', hash);\r\n \r\n var deserializer = new TLDeserialization(answerWithPadding, {mtproto: true});\r\n var response = deserializer.fetchObject('Server_DH_inner_data');\r\n \r\n if(response._ !== 'server_DH_inner_data') {\r\n throw new Error('[MT] server_DH_inner_data response invalid: ' + response);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n throw new Error('[MT] server_DH_inner_data nonce mismatch');\r\n }\r\n \r\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\r\n throw new Error('[MT] server_DH_inner_data serverNonce mismatch');\r\n }\r\n \r\n if(DEBUG) {\r\n this.log('Done decrypting answer');\r\n }\r\n auth.g = response.g;\r\n auth.dhPrime = response.dh_prime;\r\n auth.gA = response.g_a;\r\n auth.serverTime = response.server_time;\r\n auth.retry = 0;\r\n \r\n this.mtpVerifyDhParams(auth.g, auth.dhPrime, auth.gA);\r\n \r\n var offset = deserializer.getOffset();\r\n \r\n //if(!bytesCmp(hash, sha1BytesSync(answerWithPadding.slice(0, offset)))) {\r\n if(!bytesCmp(hash, await CryptoWorker.sha1Hash(answerWithPadding.slice(0, offset)))) {\r\n throw new Error('[MT] server_DH_inner_data SHA1-hash mismatch');\r\n }\r\n \r\n timeManager.applyServerTime(auth.serverTime, auth.localTime);\r\n }\r\n \r\n public mtpVerifyDhParams(g: number, dhPrime: Uint8Array, gA: Uint8Array) {\r\n if(DEBUG) {\r\n this.log('Verifying DH params', g, dhPrime, gA);\r\n }\r\n\r\n var dhPrimeHex = bytesToHex(dhPrime);\r\n if(g !== 3 || dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') {\r\n // The verified value is from https://core.telegram.org/mtproto/security_guidelines\r\n throw new Error('[MT] DH params are not verified: unknown dhPrime');\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('dhPrime cmp OK');\r\n }\r\n \r\n //var gABigInt = new BigInteger(bytesToHex(gA), 16);\r\n const _gABigInt = str2bigInt(bytesToHex(gA), 16);\r\n //var dhPrimeBigInt = new BigInteger(dhPrimeHex, 16);\r\n const _dhPrimeBigInt = str2bigInt(dhPrimeHex, 16);\r\n \r\n //this.log('gABigInt.compareTo(BigInteger.ONE) <= 0', gABigInt.compareTo(BigInteger.ONE), BigInteger.ONE.compareTo(BigInteger.ONE), greater(_gABigInt, one));\r\n //if(gABigInt.compareTo(BigInteger.ONE) <= 0) {\r\n if(cmp(_gABigInt, one) <= 0) {\r\n throw new Error('[MT] DH params are not verified: gA <= 1');\r\n }\r\n \r\n /* this.log('gABigInt.compareTo(dhPrimeBigInt.subtract(BigInteger.ONE)) >= 0', gABigInt.compareTo(dhPrimeBigInt.subtract(BigInteger.ONE)),\r\n greater(gABigInt, sub(_dhPrimeBigInt, one))); */\r\n //if(gABigInt.compareTo(dhPrimeBigInt.subtract(BigInteger.ONE)) >= 0) {\r\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, one)) >= 0) {\r\n throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1');\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('1 < gA < dhPrime-1 OK');\r\n }\r\n \r\n \r\n //var two = new BigInteger(/* null */'');\r\n //two.fromInt(2);\r\n const _two = int2bigInt(2, 32, 0);\r\n //this.log('_two:', bigInt2str(_two, 16), two.toString(16));\r\n let perf = performance.now();\r\n //var twoPow = two.pow(2048 - 64);\r\n //console.log('jsbn pow', performance.now() - perf);\r\n perf = performance.now();\r\n const _twoPow = pow(_two, 2048 - 64);\r\n //console.log('leemon pow', performance.now() - perf);\r\n //this.log('twoPow:', twoPow.toString(16), bigInt2str(_twoPow, 16));\r\n \r\n // this.log('gABigInt.compareTo(twoPow) < 0');\r\n //if(gABigInt.compareTo(twoPow) < 0) {\r\n if(cmp(_gABigInt, _twoPow) < 0) {\r\n throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}');\r\n }\r\n //if(gABigInt.compareTo(dhPrimeBigInt.subtract(twoPow)) >= 0) {\r\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, _twoPow)) >= 0) {\r\n throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}');\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('2^{2048-64} < gA < dhPrime-2^{2048-64} OK');\r\n }\r\n \r\n return true;\r\n }\r\n \r\n public async mtpSendSetClientDhParams(auth: AuthOptions): Promise<AuthOptions> {\r\n var gBytes = bytesFromHex(auth.g.toString(16));\r\n \r\n auth.b = new Array(256);\r\n auth.b = [...new Uint8Array(auth.b.length).randomize()];\r\n //MTProto.secureRandom.nextBytes(auth.b);\r\n \r\n try {\r\n var gB = await CryptoWorker.modPow(gBytes, auth.b, auth.dhPrime);\r\n } catch(error) {\r\n throw error;\r\n }\r\n \r\n var data = new TLSerialization({mtproto: true});\r\n data.storeObject({\r\n _: 'client_DH_inner_data',\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n retry_id: [0, auth.retry++],\r\n g_b: gB\r\n }, 'Client_DH_Inner_Data');\r\n \r\n //var dataWithHash = sha1BytesSync(data.getBuffer()).concat(data.getBytes());\r\n var dataWithHash = (await CryptoWorker.sha1Hash(data.getBuffer())).concat(data.getBytes());\r\n \r\n //var encryptedData = aesEncryptSync(dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\r\n var encryptedData = await CryptoWorker.aesEncrypt(dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\r\n \r\n var request = new TLSerialization({mtproto: true});\r\n request.storeMethod('set_client_DH_params', {\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n encrypted_data: encryptedData\r\n });\r\n \r\n if(DEBUG) {\r\n this.log('Send set_client_DH_params');\r\n }\r\n \r\n try {\r\n var deserializer = await this.mtpSendPlainRequest(auth.dcId, request.getBytes(true));\r\n } catch(err) {\r\n throw err;\r\n }\r\n \r\n let response = deserializer.fetchObject('Set_client_DH_params_answer');\r\n \r\n if(response._ !== 'dh_gen_ok' && response._ !== 'dh_gen_retry' && response._ !== 'dh_gen_fail') {\r\n throw new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n throw new Error('[MT] Set_client_DH_params_answer nonce mismatch');\r\n }\r\n \r\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\r\n throw new Error('[MT] Set_client_DH_params_answer server_nonce mismatch');\r\n }\r\n \r\n try {\r\n var authKey = await CryptoWorker.modPow(auth.gA, auth.b, auth.dhPrime);\r\n } catch(err) {\r\n throw authKey;\r\n }\r\n \r\n //var authKeyHash = sha1BytesSync(authKey),\r\n let authKeyHash = await CryptoWorker.sha1Hash(authKey),\r\n authKeyAux = authKeyHash.slice(0, 8),\r\n authKeyId = authKeyHash.slice(-8);\r\n \r\n if(DEBUG) {\r\n this.log('Got Set_client_DH_params_answer', response._, authKey);\r\n }\r\n switch(response._) {\r\n case 'dh_gen_ok':\r\n var newNonceHash1 = (await CryptoWorker.sha1Hash(auth.newNonce.concat([1], authKeyAux))).slice(-16);\r\n //var newNonceHash1 = sha1BytesSync(auth.newNonce.concat([1], authKeyAux)).slice(-16);\r\n \r\n if(!bytesCmp(newNonceHash1, response.new_nonce_hash1)) {\r\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash1 mismatch');\r\n }\r\n \r\n var serverSalt = bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8));\r\n if(DEBUG) {\r\n this.log('Auth successfull!', authKeyId, authKey, serverSalt);\r\n }\r\n \r\n auth.authKeyId = authKeyId;\r\n auth.authKey = authKey;\r\n auth.serverSalt = serverSalt;\r\n \r\n return auth;\r\n break;\r\n \r\n case 'dh_gen_retry':\r\n //var newNonceHash2 = sha1BytesSync(auth.newNonce.concat([2], authKeyAux)).slice(-16);\r\n var newNonceHash2 = (await CryptoWorker.sha1Hash(auth.newNonce.concat([2], authKeyAux))).slice(-16);\r\n if(!bytesCmp(newNonceHash2, response.new_nonce_hash2)) {\r\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch');\r\n }\r\n \r\n return this.mtpSendSetClientDhParams(auth);\r\n \r\n case 'dh_gen_fail':\r\n //var newNonceHash3 = sha1BytesSync(auth.newNonce.concat([3], authKeyAux)).slice(-16);\r\n var newNonceHash3 = (await CryptoWorker.sha1Hash(auth.newNonce.concat([3], authKeyAux))).slice(-16);\r\n if(!bytesCmp(newNonceHash3, response.new_nonce_hash3)) {\r\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch');\r\n }\r\n \r\n throw new Error('[MT] Set_client_DH_params_answer fail');\r\n }\r\n }\r\n \r\n // mtpAuth\r\n public async auth(dcId: number): Promise<AuthOptions> {\r\n if(dcId in this.cached) {\r\n return this.cached[dcId];\r\n }\r\n \r\n let nonce = /* fNonce ? fNonce : */new Uint8Array(16).randomize();\r\n /* var nonce = new Array(16);\r\n MTProto.secureRandom.nextBytes(nonce); */\r\n \r\n if(!dcConfigurator.chooseServer(dcId)) {\r\n return Promise.reject(new Error('[MT] No server found for dc ' + dcId));\r\n }\r\n\r\n try {\r\n let promise = this.mtpSendReqPQ({dcId, nonce});\r\n this.cached[dcId] = promise;\r\n return await promise;\r\n } catch(err) {\r\n delete this.cached[dcId];\r\n throw err;\r\n }\r\n }\r\n}\r\n\r\nexport default new Authorizer();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport interface CancellablePromise<T> extends Promise<T> {\r\n resolve?: (...args: any[]) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise<T>() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n lastNotify: undefined,\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise<T> = new Promise<T>((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise<ReturnType<typeof resolve>>();\r\n \r\n }; */\r\n\r\n deferred.finally(() => {\r\n deferred.notify = null;\r\n deferred.listeners.length = 0;\r\n deferred.lastNotify = null;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport sessionStorage from '../sessionStorage';\r\n\r\nimport MTPNetworker, { MTMessage } from './networker';\r\nimport { isObject } from './bin_utils';\r\nimport networkerFactory from './networkerFactory';\r\n//import { telegramMeWebService } from './mtproto';\r\nimport authorizer from './authorizer';\r\nimport dcConfigurator, { ConnectionType, TransportType } from './dcConfigurator';\r\nimport { logger } from '../logger';\r\nimport type { InvokeApiOptions } from '../../types';\r\nimport type { MethodDeclMap } from '../../layer';\r\nimport { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';\r\nimport { bytesFromHex, bytesToHex } from '../../helpers/bytes';\r\n//import { clamp } from '../../helpers/number';\r\nimport { ctx, isSafari } from '../../helpers/userAgent';\r\nimport App from '../../config/app';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\n\r\n///////////////////////\r\n/////////////////////////////////////\r\n//////////\r\n\r\n/* var networker = apiManager.cachedNetworkers.websocket.upload[2];\r\nnetworker.wrapMtpMessage({\r\n _: 'msgs_state_req',\r\n msg_ids: [\"6888292542796810828\"]\r\n}, {\r\n notContentRelated: true\r\n}).then(res => {\r\n console.log('status', res);\r\n}); */\r\n\r\n//console.error('apiManager included!');\r\n// TODO: если запрос словил флуд, нужно сохранять его параметры и возвращать тот же промис на новый такой же запрос, например - загрузка истории\r\n\r\nexport type ApiError = Partial<{\r\n code: number,\r\n type: string,\r\n description: string,\r\n originalError: any,\r\n stack: string,\r\n handled: boolean,\r\n input: string,\r\n message: ApiError\r\n}>;\r\n\r\n/* class RotatableArray<T> {\r\n public array: Array<T> = [];\r\n private lastIndex = -1;\r\n\r\n public get() {\r\n this.lastIndex = clamp(this.lastIndex + 1, 0, this.array.length - 1);\r\n return this.array[this.lastIndex];\r\n }\r\n} */\r\n\r\nexport class ApiManager {\r\n public cachedNetworkers: {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTPNetworker[]\r\n }\r\n }\r\n } = {} as any;\r\n \r\n public cachedExportPromise: {[x: number]: Promise<unknown>} = {};\r\n private gettingNetworkers: {[dcIdAndType: string]: Promise<MTPNetworker>} = {};\r\n public baseDcId = 0;\r\n \r\n //public telegramMeNotified = false;\r\n\r\n private log: ReturnType<typeof logger> = logger('API');\r\n\r\n private afterMessageTempIds: {[tempId: string]: string} = {};\r\n\r\n //private lol = false;\r\n \r\n constructor() {\r\n //MtpSingleInstanceService.start();\r\n \r\n /* AppStorage.get<number>('dc').then((dcId) => {\r\n if(dcId) {\r\n this.baseDcId = dcId;\r\n }\r\n }); */\r\n }\r\n \r\n /* public telegramMeNotify(newValue: boolean) {\r\n if(this.telegramMeNotified !== newValue) {\r\n this.telegramMeNotified = newValue;\r\n //telegramMeWebService.setAuthorized(this.telegramMeNotified);\r\n }\r\n } */\r\n \r\n // mtpSetUserAuth\r\n public setUserAuth(userId: number) {\r\n sessionStorage.set({\r\n user_auth: userId\r\n });\r\n \r\n //this.telegramMeNotify(true);\r\n\r\n///////////////////////////\r\n/////////////////////////////////////////////\r\n//////////////\r\n }\r\n\r\n public setBaseDcId(dcId: number) {\r\n this.baseDcId = dcId;\r\n\r\n sessionStorage.set({\r\n dc: this.baseDcId\r\n });\r\n }\r\n \r\n // mtpLogOut\r\n public async logOut() {\r\n const storageKeys: Array<string> = [];\r\n \r\n const prefix = 'dc';\r\n for(let dcId = 1; dcId <= 5; dcId++) {\r\n storageKeys.push(prefix + dcId + '_auth_key');\r\n //storageKeys.push(prefix + dcId + '_auth_keyId');\r\n }\r\n \r\n // WebPushApiManager.forceUnsubscribe(); // WARNING\r\n const storageResult = await Promise.all(storageKeys.map(key => sessionStorage.get(key as any)));\r\n \r\n const logoutPromises = [];\r\n for(let i = 0; i < storageResult.length; i++) {\r\n if(storageResult[i]) {\r\n logoutPromises.push(this.invokeApi('auth.logOut', {}, {dcId: i + 1, ignoreErrors: true}));\r\n }\r\n }\r\n\r\n const clear = () => {\r\n //console.error('apiManager: logOut clear');\r\n \r\n this.baseDcId = 0;\r\n //this.telegramMeNotify(false);\r\n const promise = sessionStorage.clear();\r\n promise.finally(() => {\r\n self.postMessage({type: 'reload'});\r\n });\r\n };\r\n\r\n setTimeout(clear, 1e3);\r\n\r\n //return;\r\n \r\n return Promise.all(logoutPromises).then(() => {\r\n }, (error) => {\r\n error.handled = true;\r\n }).finally(clear)/* .then(() => {\r\n location.pathname = '/';\r\n }) */;\r\n }\r\n \r\n // mtpGetNetworker\r\n public getNetworker(dcId: number, options: InvokeApiOptions = {}): Promise<MTPNetworker> {\r\n const connectionType: ConnectionType = options.fileDownload ? 'download' : (options.fileUpload ? 'upload' : 'client');\r\n //const connectionType: ConnectionType = 'client';\r\n\r\n///////////////////////////////\r\n/////////////////\r\n/////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n///////////////////////////////////////////////////////////////////////////////////////////////\r\n/////////////\r\n // @ts-ignore\r\n const transportType = 'websocket';\r\n//////////////\r\n\r\n if(!this.cachedNetworkers.hasOwnProperty(transportType)) {\r\n this.cachedNetworkers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const cache = this.cachedNetworkers[transportType][connectionType];\r\n if(!(dcId in cache)) {\r\n cache[dcId] = [];\r\n }\r\n \r\n const networkers = cache[dcId];\r\n if(networkers.length >= /* 1 */(connectionType === 'client' || transportType === 'https' ? 1 : (connectionType === 'download' ? 3 : 3))) {\r\n let i = networkers.length - 1, found = false;\r\n for(; i >= 0; --i) {\r\n if(networkers[i].isOnline) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n \r\n const networker = found ? networkers.splice(i, 1)[0] : networkers.pop();\r\n networkers.unshift(networker);\r\n return Promise.resolve(networker);\r\n }\r\n \r\n const getKey = [dcId, transportType, connectionType].join('-');\r\n if(this.gettingNetworkers[getKey]) {\r\n return this.gettingNetworkers[getKey];\r\n }\r\n\r\n const ak = 'dc' + dcId + '_auth_key';\r\n const akId = 'dc' + dcId + '_auth_keyId';\r\n const ss = 'dc' + dcId + '_server_salt';\r\n \r\n return this.gettingNetworkers[getKey] = Promise.all([ak, akId, ss].map(key => sessionStorage.get(key as any)))\r\n .then(async([authKeyHex, authKeyIdHex, serverSaltHex]) => {\r\n const transport = dcConfigurator.chooseServer(dcId, connectionType, transportType, false);\r\n let networker: MTPNetworker;\r\n if(authKeyHex && authKeyHex.length === 512) {\r\n if(!serverSaltHex || serverSaltHex.length !== 16) {\r\n serverSaltHex = 'AAAAAAAAAAAAAAAA';\r\n }\r\n \r\n const authKey = bytesFromHex(authKeyHex);\r\n const authKeyId = new Uint8Array(bytesFromHex(authKeyIdHex));\r\n const serverSalt = bytesFromHex(serverSaltHex);\r\n \r\n networker = networkerFactory.getNetworker(dcId, authKey, authKeyId, serverSalt, transport, options);\r\n } else {\r\n try { // if no saved state\r\n const auth = await authorizer.auth(dcId);\r\n \r\n const storeObj = {\r\n [ak]: bytesToHex(auth.authKey),\r\n [akId]: auth.authKeyId.hex,\r\n [ss]: bytesToHex(auth.serverSalt)\r\n };\r\n \r\n sessionStorage.set(storeObj);\r\n \r\n networker = networkerFactory.getNetworker(dcId, auth.authKey, auth.authKeyId, auth.serverSalt, transport, options);\r\n } catch(error) {\r\n this.log('Get networker error', error, error.stack);\r\n delete this.gettingNetworkers[getKey];\r\n throw error;\r\n }\r\n }\r\n\r\n /* networker.onConnectionStatusChange = (online) => {\r\n console.log('status:', online);\r\n }; */\r\n\r\n delete this.gettingNetworkers[getKey];\r\n networkers.unshift(networker);\r\n return networker;\r\n });\r\n }\r\n \r\n // mtpInvokeApi\r\n public invokeApi<T extends keyof MethodDeclMap>(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): CancellablePromise<MethodDeclMap[T][\"res\"]> {\r\n ///////this.log('Invoke api', method, params, options);\r\n\r\n /* if(!this.lol) {\r\n networkerFactory.updatesProcessor({_: 'new_session_created'}, true);\r\n this.lol = true;\r\n } */\r\n\r\n const deferred = deferredPromise<MethodDeclMap[T]['res']>();\r\n\r\n let afterMessageIdTemp = options.afterMessageId;\r\n if(afterMessageIdTemp) {\r\n deferred.finally(() => {\r\n delete this.afterMessageTempIds[afterMessageIdTemp];\r\n });\r\n }\r\n\r\n if(MOUNT_CLASS_TO) {\r\n deferred.finally(() => {\r\n clearInterval(interval);\r\n });\r\n \r\n const startTime = Date.now();\r\n const interval = ctx.setInterval(() => {\r\n this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);\r\n //this.cachedUploadNetworkers[2].requestMessageStatus();\r\n }, 5e3);\r\n }\r\n\r\n const rejectPromise = (error: ApiError) => {\r\n if(!error) {\r\n error = {type: 'ERROR_EMPTY'};\r\n } else if(!isObject(error)) {\r\n error = {message: error};\r\n }\r\n \r\n deferred.reject(error);\r\n\r\n if((error.code === 401 && error.type === 'SESSION_REVOKED') || \r\n (error.code === 406 && error.type === 'AUTH_KEY_DUPLICATED')) {\r\n this.logOut();\r\n }\r\n\r\n if(options.ignoreErrors) {\r\n return;\r\n }\r\n \r\n if(error.code === 406) {\r\n error.handled = true;\r\n }\r\n \r\n if(!options.noErrorBox) {\r\n error.input = method;\r\n error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack;\r\n setTimeout(() => {\r\n if(!error.handled) {\r\n if(error.code === 401) {\r\n this.logOut();\r\n } else {\r\n // ErrorService.show({error: error}); // WARNING\r\n }\r\n \r\n error.handled = true;\r\n }\r\n }, 100);\r\n }\r\n };\r\n \r\n let dcId: number;\r\n \r\n let cachedNetworker: MTPNetworker;\r\n let stack = (new Error()).stack || 'empty stack';\r\n const performRequest = (networker: MTPNetworker) => {\r\n if(afterMessageIdTemp) {\r\n options.afterMessageId = this.afterMessageTempIds[afterMessageIdTemp];\r\n }\r\n const promise = (cachedNetworker = networker).wrapApiCall(method, params, options);\r\n if(options.prepareTempMessageId) {\r\n this.afterMessageTempIds[options.prepareTempMessageId] = (options as MTMessage).messageId;\r\n }\r\n\r\n return promise.then(deferred.resolve, (error: ApiError) => {\r\n //if(!options.ignoreErrors) {\r\n if(error.type !== 'FILE_REFERENCE_EXPIRED' && error.type !== 'MSG_WAIT_FAILED') {\r\n this.log.error('Error', error.code, error.type, this.baseDcId, dcId, method, params);\r\n }\r\n \r\n if(error.code === 401 && this.baseDcId === dcId) {\r\n if(error.type !== 'SESSION_PASSWORD_NEEDED') {\r\n sessionStorage.remove('dc')\r\n sessionStorage.remove('user_auth'); // ! возможно тут вообще не нужно это делать, но нужно проверить случай с USER_DEACTIVATED (https://core.telegram.org/api/errors)\r\n //this.telegramMeNotify(false);\r\n }\r\n \r\n rejectPromise(error);\r\n } else if(error.code === 401 && this.baseDcId && dcId !== this.baseDcId) {\r\n if(this.cachedExportPromise[dcId] === undefined) {\r\n const promise = new Promise((exportResolve, exportReject) => {\r\n this.invokeApi('auth.exportAuthorization', {dc_id: dcId}, {noErrorBox: true}).then((exportedAuth) => {\r\n this.invokeApi('auth.importAuthorization', {\r\n id: exportedAuth.id,\r\n bytes: exportedAuth.bytes\r\n }, {dcId, noErrorBox: true}).then(exportResolve, exportReject);\r\n }, exportReject);\r\n });\r\n \r\n this.cachedExportPromise[dcId] = promise;\r\n }\r\n \r\n this.cachedExportPromise[dcId].then(() => {\r\n //(cachedNetworker = networker).wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n this.invokeApi(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n } else if(error.code === 303) {\r\n const newDcId = +error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_|FILE_MIGRATE_)(\\d+)/)[2];\r\n if(newDcId !== dcId) {\r\n if(options.dcId) {\r\n options.dcId = newDcId;\r\n } else {\r\n this.setBaseDcId(newDcId);\r\n }\r\n \r\n this.getNetworker(newDcId, options).then((networker) => {\r\n networker.wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n }\r\n } else if(!options.rawError && error.code === 420) {\r\n const waitTime = +error.type.match(/^FLOOD_WAIT_(\\d+)/)[1] || 10;\r\n \r\n if(waitTime > (options.floodMaxTimeout !== undefined ? options.floodMaxTimeout : 60)) {\r\n return rejectPromise(error);\r\n }\r\n \r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, waitTime/* (waitTime + 5) */ * 1000); // 03.02.2020\r\n } else if(!options.rawError && error.code === 500) {\r\n if(error.type === 'MSG_WAIT_FAILED') {\r\n afterMessageIdTemp = undefined;\r\n delete options.afterMessageId;\r\n delete this.afterMessageTempIds[options.prepareTempMessageId];\r\n performRequest(cachedNetworker);\r\n return;\r\n }\r\n\r\n const now = Date.now();\r\n if(options.stopTime) {\r\n if(now >= options.stopTime) {\r\n return rejectPromise(error);\r\n }\r\n }\r\n \r\n options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1;\r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, options.waitTime * 1000);\r\n } else {\r\n rejectPromise(error);\r\n }\r\n });\r\n }\r\n \r\n if(dcId = (options.dcId || this.baseDcId)) {\r\n this.getNetworker(dcId, options).then(performRequest, rejectPromise);\r\n } else {\r\n sessionStorage.get('dc').then((baseDcId) => {\r\n this.getNetworker(this.baseDcId = dcId = baseDcId || App.baseDcId, options).then(performRequest, rejectPromise);\r\n });\r\n }\r\n\r\n return deferred;\r\n }\r\n}\r\n\r\nconst apiManager = new ApiManager();\r\nMOUNT_CLASS_TO.apiManager = apiManager;\r\nexport default apiManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { blobConstruct } from \"../helpers/blob\";\r\n\r\nexport class FileManager {\r\n public blobSupported = true;\r\n \r\n constructor() {\r\n try {\r\n blobConstruct([], '');\r\n } catch(e) {\r\n this.blobSupported = false;\r\n }\r\n }\r\n \r\n public isAvailable() {\r\n return this.blobSupported;\r\n }\r\n \r\n public write(fileWriter: ReturnType<FileManager['getFakeFileWriter']>, bytes: Uint8Array | Blob | string): Promise<void> {\r\n if(bytes instanceof Blob) { // is file bytes\r\n return new Promise((resolve, reject) => {\r\n let fileReader = new FileReader();\r\n fileReader.onload = function(event) {\r\n let arrayBuffer = event.target.result as ArrayBuffer;\r\n \r\n let arr = new Uint8Array(arrayBuffer);\r\n \r\n fileWriter.write(arr).then(resolve, reject);\r\n };\r\n \r\n fileReader.readAsArrayBuffer(bytes);\r\n });\r\n } else {\r\n return fileWriter.write(bytes);\r\n }\r\n }\r\n\r\n public getFakeFileWriter(mimeType: string, saveFileCallback?: (blob: Blob) => Promise<Blob>) {\r\n const blobParts: Array<Uint8Array | string> = [];\r\n const fakeFileWriter = {\r\n write: async(part: Uint8Array | string) => {\r\n if(!this.blobSupported) {\r\n throw false;\r\n }\r\n \r\n blobParts.push(part);\r\n },\r\n truncate: () => {\r\n blobParts.length = 0;\r\n },\r\n finalize: (saveToStorage = true) => {\r\n const blob = blobConstruct(blobParts, mimeType);\r\n\r\n if(saveToStorage && saveFileCallback) {\r\n saveFileCallback(blob);\r\n }\r\n \r\n return blob;\r\n }\r\n };\r\n \r\n return fakeFileWriter;\r\n }\r\n}\r\n\r\nexport default new FileManager();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport FileManager from './filemanager';\r\n//import { MOUNT_CLASS_TO } from './mtproto/mtproto_config';\r\n//import { logger } from './polyfill';\r\n\r\nexport default class CacheStorageController {\r\n //public dbName = 'cachedFiles';\r\n public openDbPromise: Promise<Cache>;\r\n\r\n //private log: ReturnType<typeof logger> = logger('CS');\r\n\r\n constructor(public dbName: string) {\r\n if(Modes.test) {\r\n this.dbName += '_test';\r\n }\r\n \r\n this.openDatabase();\r\n }\r\n\r\n public openDatabase(): Promise<Cache> {\r\n if(this.openDbPromise) {\r\n return this.openDbPromise;\r\n }\r\n\r\n return this.openDbPromise = caches.open(this.dbName);\r\n }\r\n\r\n public delete(entryName: string) {\r\n return this.timeoutOperation(async(cache) => {\r\n const deleted = await cache.delete('/' + entryName);\r\n });\r\n }\r\n\r\n public deleteAll() {\r\n return caches.delete(this.dbName);\r\n }\r\n\r\n public save(entryName: string, response: Response) {\r\n return this.timeoutOperation((cache) => {\r\n return cache.put('/' + entryName, response);\r\n });\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct(blob) as Blob;\r\n }\r\n\r\n return this.save(fileName, new Response(blob)).then(() => {\r\n return blob as Blob;\r\n });\r\n }\r\n\r\n /* public getBlobSize(blob: any) {\r\n return blob.size || blob.byteLength || blob.length;\r\n } */\r\n\r\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise<any> {\r\n /* if(method === 'blob') {\r\n return Promise.reject();\r\n } */\r\n\r\n // const str = `get fileName: ${fileName}`;\r\n // console.time(str);\r\n return this.timeoutOperation(async(cache) => {\r\n const response = await cache.match('/' + fileName);\r\n\r\n if(!response || !cache) {\r\n //console.warn('getFile:', response, fileName);\r\n throw 'NO_ENTRY_FOUND';\r\n }\r\n \r\n const promise = response[method]();\r\n // promise.then(() => {\r\n // console.timeEnd(str);\r\n // });\r\n return promise;\r\n });\r\n }\r\n\r\n private timeoutOperation<T>(callback: (cache: Cache) => Promise<T>) {\r\n return new Promise<T>(async(resolve, reject) => {\r\n let rejected = false;\r\n const timeout = setTimeout(() => {\r\n reject();\r\n //console.warn('CACHESTORAGE TIMEOUT');\r\n rejected = true;\r\n }, 15e3);\r\n\r\n try {\r\n const cache = await this.openDatabase();\r\n if(!cache) {\r\n throw 'no cache?';\r\n }\r\n\r\n const res = await callback(cache);\r\n\r\n if(rejected) return;\r\n resolve(res);\r\n } catch(err) {\r\n reject(err);\r\n }\r\n\r\n clearTimeout(timeout);\r\n });\r\n }\r\n\r\n public getFileWriter(fileName: string, mimeType: string) {\r\n const fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n }\r\n}\r\n\r\n//const cacheStorage = new CacheStorageController(); \r\n//MOUNT_CLASS_TO.cacheStorage = cacheStorage;\r\n//export default cacheStorage;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport Modes from \"../../config/modes\";\r\nimport { CancellablePromise, deferredPromise } from \"../../helpers/cancellablePromise\";\r\nimport { notifyAll, notifySomeone } from \"../../helpers/context\";\r\nimport { getFileNameByLocation } from \"../../helpers/fileName\";\r\nimport { nextRandomInt } from \"../../helpers/random\";\r\nimport { FileLocation, InputFile, InputFileLocation, UploadFile } from \"../../layer\";\r\nimport CacheStorageController from \"../cacheStorage\";\r\nimport cryptoWorker from \"../crypto/cryptoworker\";\r\nimport FileManager from \"../filemanager\";\r\nimport { logger, LogLevels } from \"../logger\";\r\nimport apiManager from \"./apiManager\";\r\nimport { isWebpSupported } from \"./mtproto.worker\";\r\n\r\ntype Delayed = {\r\n offset: number, \r\n writeFilePromise: CancellablePromise<unknown>, \r\n writeFileDeferred: CancellablePromise<unknown>\r\n};\r\n\r\nexport type DownloadOptions = {\r\n dcId: number, \r\n location: InputFileLocation | FileLocation, \r\n size?: number,\r\n fileName?: string,\r\n mimeType?: string,\r\n limitPart?: number,\r\n queueId?: number,\r\n onlyCache?: boolean,\r\n};\r\n\r\ntype MyUploadFile = UploadFile.uploadFile;\r\n\r\nconst MAX_FILE_SAVE_SIZE = 20e6;\r\n\r\nexport class ApiFileManager {\r\n public cacheStorage = new CacheStorageController('cachedFiles');\r\n\r\n public cachedDownloadPromises: {\r\n [fileName: string]: CancellablePromise<Blob>\r\n } = {};\r\n\r\n public uploadPromises: {\r\n [fileName: string]: CancellablePromise<InputFile>\r\n } = {};\r\n\r\n public downloadPulls: {\r\n [dcId: string]: Array<{\r\n id: number,\r\n queueId: number,\r\n cb: () => Promise<MyUploadFile | void>,\r\n deferred: {\r\n resolve: (...args: any[]) => void,\r\n reject: (...args: any[]) => void\r\n },\r\n activeDelta: number\r\n }>\r\n } = {};\r\n public downloadActives: {[dcId: string]: number} = {};\r\n\r\n public webpConvertPromises: {[fileName: string]: CancellablePromise<Uint8Array>} = {};\r\n\r\n private log: ReturnType<typeof logger> = logger('AFM', LogLevels.error | LogLevels.log);\r\n private tempId = 0;\r\n private queueId = 0;\r\n private debug = Modes.debug;\r\n\r\n public downloadRequest(dcId: 'upload', id: number, cb: () => Promise<void>, activeDelta: number, queueId?: number): Promise<void>;\r\n public downloadRequest(dcId: number, id: number, cb: () => Promise<MyUploadFile>, activeDelta: number, queueId?: number): Promise<MyUploadFile>;\r\n public downloadRequest(dcId: number | string, id: number, cb: () => Promise<MyUploadFile | void>, activeDelta: number, queueId: number = 0) {\r\n if(this.downloadPulls[dcId] === undefined) {\r\n this.downloadPulls[dcId] = [];\r\n this.downloadActives[dcId] = 0;\r\n }\r\n\r\n const downloadPull = this.downloadPulls[dcId];\r\n\r\n const promise = new Promise<MyUploadFile | void>((resolve, reject) => {\r\n downloadPull.push({id, queueId, cb, deferred: {resolve, reject}, activeDelta});\r\n });\r\n\r\n setTimeout(() => {\r\n this.downloadCheck(dcId);\r\n }, 0);\r\n\r\n return promise;\r\n }\r\n\r\n public downloadCheck(dcId: string | number) {\r\n const downloadPull = this.downloadPulls[dcId];\r\n const downloadLimit = dcId === 'upload' ? 24 : 24;\r\n //const downloadLimit = Infinity;\r\n\r\n if(this.downloadActives[dcId] >= downloadLimit || !downloadPull || !downloadPull.length) {\r\n return false;\r\n }\r\n\r\n //const data = downloadPull.shift();\r\n const data = downloadPull.findAndSplice(d => d.queueId === 0) || downloadPull.findAndSplice(d => d.queueId === this.queueId) || downloadPull.shift();\r\n const activeDelta = data.activeDelta || 1;\r\n\r\n this.downloadActives[dcId] += activeDelta;\r\n\r\n data.cb()\r\n .then((result) => {\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.resolve(result);\r\n }, (error: Error) => {\r\n // @ts-ignore\r\n if(!error || !error.type || (error.type !== 'DOWNLOAD_CANCELED' && error.type !== 'UPLOAD_CANCELED')) {\r\n this.log.error('downloadCheck error:', error);\r\n }\r\n\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.reject(error);\r\n });\r\n }\r\n\r\n public setQueueId(queueId: number) {\r\n //this.log.error('setQueueId', queueId);\r\n this.queueId = queueId;\r\n }\r\n\r\n public getFileStorage() {\r\n return this.cacheStorage;\r\n }\r\n\r\n public cancelDownload(fileName: string) {\r\n const promise = this.cachedDownloadPromises[fileName] || this.uploadPromises[fileName];\r\n if(promise && !promise.isRejected && !promise.isFulfilled) {\r\n promise.cancel();\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public requestFilePart(dcId: number, location: InputFileLocation | FileLocation, offset: number, limit: number, id = 0, queueId = 0, checkCancel?: () => void) {\r\n return this.downloadRequest(dcId, id, async() => {\r\n checkCancel && checkCancel();\r\n\r\n return apiManager.invokeApi('upload.getFile', {\r\n location,\r\n offset,\r\n limit\r\n } as any, {\r\n dcId,\r\n fileDownload: true\r\n }) as Promise<MyUploadFile>;\r\n }, this.getDelta(limit), queueId);\r\n }\r\n\r\n /* private convertBlobToBytes(blob: Blob) {\r\n return blob.arrayBuffer().then(buffer => new Uint8Array(buffer));\r\n } */\r\n\r\n private getDelta(bytes: number) {\r\n return bytes / 1024 / 128;\r\n }\r\n\r\n private getLimitPart(size: number): number {\r\n let bytes: number;\r\n\r\n bytes = 512;\r\n /* if(size < 1e6 || !size) bytes = 512;\r\n else if(size < 3e6) bytes = 256;\r\n else bytes = 128; */\r\n\r\n return bytes * 1024;\r\n }\r\n\r\n uncompressTGS = (bytes: Uint8Array, fileName: string) => {\r\n //this.log('uncompressTGS', bytes, bytes.slice().buffer);\r\n // slice нужен потому что в uint8array - 5053 length, в arraybuffer - 5084\r\n return cryptoWorker.gzipUncompress<string>(bytes.slice().buffer, true);\r\n };\r\n\r\n convertWebp = (bytes: Uint8Array, fileName: string) => {\r\n const convertPromise = deferredPromise<Uint8Array>();\r\n\r\n const task = {type: 'convertWebp', payload: {fileName, bytes}};\r\n notifySomeone(task);\r\n return this.webpConvertPromises[fileName] = convertPromise;\r\n };\r\n\r\n public downloadFile(options: DownloadOptions): CancellablePromise<Blob> {\r\n if(!FileManager.isAvailable()) {\r\n return Promise.reject({type: 'BROWSER_BLOB_NOT_SUPPORTED'});\r\n }\r\n\r\n let size = options.size ?? 0;\r\n let {dcId, location} = options;\r\n\r\n let process: ApiFileManager['uncompressTGS'] | ApiFileManager['convertWebp'];\r\n\r\n if(options.mimeType === 'image/webp' && !isWebpSupported()) {\r\n process = this.convertWebp;\r\n options.mimeType = 'image/png';\r\n } else if(options.mimeType === 'application/x-tgsticker') {\r\n process = this.uncompressTGS;\r\n options.mimeType = 'application/json';\r\n }\r\n\r\n const fileName = getFileNameByLocation(location, {fileName: options.fileName});\r\n const cachedPromise = this.cachedDownloadPromises[fileName];\r\n const fileStorage = this.getFileStorage();\r\n\r\n this.debug && this.log('downloadFile', fileName, size, location, options.mimeType);\r\n\r\n /* if(options.queueId) {\r\n this.log.error('downloadFile queueId:', fileName, options.queueId);\r\n } */\r\n\r\n if(cachedPromise) {\r\n //this.log('downloadFile cachedPromise');\r\n\r\n if(size) {\r\n return cachedPromise.then((blob: Blob) => {\r\n if(blob.size < size) {\r\n this.debug && this.log('downloadFile need to deleteFile, wrong size:', blob.size, size);\r\n\r\n return this.deleteFile(fileName).then(() => {\r\n return this.downloadFile(options);\r\n }).catch(() => {\r\n return this.downloadFile(options);\r\n });\r\n } else {\r\n return blob;\r\n }\r\n });\r\n } else {\r\n return cachedPromise;\r\n }\r\n }\r\n\r\n const deferred = deferredPromise<Blob>();\r\n const mimeType = options.mimeType || 'image/jpeg';\r\n\r\n let canceled = false;\r\n let resolved = false;\r\n let cacheFileWriter: ReturnType<typeof FileManager['getFakeFileWriter']>;\r\n let errorHandler = (error: any) => {\r\n delete this.cachedDownloadPromises[fileName];\r\n deferred.reject(error);\r\n errorHandler = () => {};\r\n\r\n if(cacheFileWriter && (!error || error.type !== 'DOWNLOAD_CANCELED')) {\r\n cacheFileWriter.truncate();\r\n }\r\n };\r\n\r\n const id = this.tempId++;\r\n\r\n fileStorage.getFile(fileName).then(async(blob: Blob) => {\r\n //this.log('maybe cached', fileName);\r\n //throw '';\r\n\r\n if(blob.size < size) {\r\n //this.log('downloadFile need to deleteFile 2, wrong size:', blob.size, size);\r\n await this.deleteFile(fileName);\r\n throw false;\r\n }\r\n\r\n deferred.resolve(blob);\r\n }).catch(() => {\r\n //this.log('not cached', fileName);\r\n const fileWriterPromise = fileStorage.getFileWriter(fileName, mimeType);\r\n\r\n fileWriterPromise.then((fileWriter) => {\r\n cacheFileWriter = fileWriter;\r\n const limit = options.limitPart || this.getLimitPart(size);\r\n let offset: number;\r\n let startOffset = 0;\r\n let writeFilePromise: CancellablePromise<unknown> = Promise.resolve(),\r\n writeFileDeferred: CancellablePromise<unknown>;\r\n //const maxRequests = 13107200 / limit; // * 100 Mb speed\r\n const maxRequests = Infinity;\r\n\r\n //console.error('maxRequests', maxRequests);\r\n\r\n const processDownloaded = async(bytes: Uint8Array, offset: number) => {\r\n if(process) {\r\n //const perf = performance.now();\r\n const processed = await process(bytes, fileName);\r\n //this.log('downloadFile process downloaded time', performance.now() - perf, mimeType, process);\r\n return processed;\r\n }\r\n \r\n return bytes;\r\n };\r\n\r\n const delayed: Delayed[] = [];\r\n offset = startOffset;\r\n do {\r\n ////this.log('offset:', startOffset);\r\n writeFileDeferred = deferredPromise<void>();\r\n delayed.push({offset, writeFilePromise, writeFileDeferred});\r\n writeFilePromise = writeFileDeferred;\r\n offset += limit;\r\n } while(offset < size);\r\n\r\n let done = 0;\r\n const superpuper = async() => {\r\n //if(!delayed.length) return;\r\n\r\n const {offset, writeFilePromise, writeFileDeferred} = delayed.shift();\r\n try {\r\n const result = await this.requestFilePart(dcId, location, offset, limit, id, options.queueId, checkCancel);\r\n\r\n const bytes: Uint8Array = result.bytes as any;\r\n\r\n if(delayed.length) {\r\n superpuper();\r\n }\r\n\r\n this.debug && this.log('downloadFile requestFilePart result:', fileName, result);\r\n const isFinal = offset + limit >= size || !bytes.byteLength;\r\n if(bytes.byteLength) {\r\n //done += limit;\r\n done += bytes.byteLength;\r\n\r\n //if(!isFinal) {\r\n ////this.log('deferred notify 2:', {done: offset + limit, total: size}, deferred);\r\n deferred.notify({done, offset, total: size});\r\n //}\r\n\r\n const processedResult = await processDownloaded(bytes, offset);\r\n checkCancel();\r\n\r\n await writeFilePromise;\r\n checkCancel();\r\n\r\n await FileManager.write(fileWriter, processedResult);\r\n }\r\n\r\n writeFileDeferred.resolve();\r\n\r\n if(isFinal) {\r\n resolved = true;\r\n\r\n deferred.resolve(fileWriter.finalize(size < MAX_FILE_SAVE_SIZE));\r\n }\r\n } catch(err) {\r\n errorHandler(err);\r\n }\r\n };\r\n\r\n for(let i = 0, length = Math.min(maxRequests, delayed.length); i < length; ++i) {\r\n superpuper();\r\n }\r\n });\r\n });\r\n\r\n const checkCancel = () => {\r\n if(canceled) {\r\n const error = new Error('Canceled');\r\n // @ts-ignore\r\n error.type = 'DOWNLOAD_CANCELED';\r\n throw error;\r\n }\r\n };\r\n\r\n deferred.cancel = () => {\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n delete this.cachedDownloadPromises[fileName];\r\n errorHandler({type: 'DOWNLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number, offset: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n this.cachedDownloadPromises[fileName] = deferred;\r\n\r\n return deferred;\r\n }\r\n\r\n public deleteFile(fileName: string) {\r\n //this.log('will delete file:', fileName);\r\n delete this.cachedDownloadPromises[fileName];\r\n return this.getFileStorage().delete(fileName);\r\n }\r\n\r\n public uploadFile({file, fileName}: {file: Blob | File, fileName: string}) {\r\n const fileSize = file.size, \r\n isBigFile = fileSize >= 10485760;\r\n\r\n let canceled = false,\r\n resolved = false,\r\n doneParts = 0,\r\n partSize = 262144; // 256 Kb\r\n\r\n /* if(fileSize > (524288 * 3000)) {\r\n partSize = 1024 * 1024;\r\n activeDelta = 8;\r\n } else */if(fileSize > 67108864) {\r\n partSize = 524288;\r\n } else if(fileSize < 102400) {\r\n partSize = 32768;\r\n }\r\n\r\n const activeDelta = this.getDelta(partSize);\r\n\r\n const totalParts = Math.ceil(fileSize / partSize);\r\n const fileId: [number, number] = [nextRandomInt(0xFFFFFFFF), nextRandomInt(0xFFFFFFFF)];\r\n\r\n let _part = 0;\r\n\r\n const resultInputFile: InputFile = {\r\n _: isBigFile ? 'inputFileBig' : 'inputFile',\r\n id: fileId as any,\r\n parts: totalParts,\r\n name: fileName,\r\n md5_checksum: ''\r\n };\r\n\r\n const deferredHelper: {\r\n resolve?: (input: typeof resultInputFile) => void,\r\n reject?: (error: any) => void,\r\n notify?: (details: {done: number, total: number}) => void\r\n } = {\r\n notify: (details: {done: number, total: number}) => {}\r\n };\r\n const deferred: CancellablePromise<typeof resultInputFile> = new Promise((resolve, reject) => {\r\n if(totalParts > 4000) {\r\n return reject({type: 'FILE_TOO_BIG'});\r\n }\r\n\r\n deferredHelper.resolve = resolve;\r\n deferredHelper.reject = reject;\r\n });\r\n Object.assign(deferred, deferredHelper);\r\n\r\n if(totalParts > 4000) {\r\n return deferred;\r\n }\r\n \r\n let errorHandler = (error: any) => {\r\n if(error?.type !== 'UPLOAD_CANCELED') {\r\n this.log.error('Up Error', error);\r\n }\r\n\r\n deferred.reject(error);\r\n canceled = true;\r\n errorHandler = () => {};\r\n };\r\n\r\n const method = isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart';\r\n\r\n const id = this.tempId++;\r\n\r\n /* setInterval(() => {\r\n console.log(file);\r\n }, 1e3); */\r\n\r\n const self = this;\r\n function* generator() {\r\n for(let offset = 0; offset < fileSize; offset += partSize) {\r\n const part = _part++; // 0, 1\r\n yield self.downloadRequest('upload', id, () => {\r\n return new Promise<void>((uploadResolve, uploadReject) => {\r\n const reader = new FileReader();\r\n const blob = file.slice(offset, offset + partSize);\r\n \r\n reader.onloadend = (e) => {\r\n if(canceled) {\r\n uploadReject({type: 'UPLOAD_CANCELED'});\r\n return;\r\n }\r\n \r\n if(e.target.readyState !== FileReader.DONE) {\r\n self.log.error('wrong readyState!');\r\n uploadReject({type: 'WRONG_READY_STATE'});\r\n return;\r\n }\r\n \r\n let buffer = e.target.result as ArrayBuffer;\r\n self.debug && self.log('Upload file part, isBig:', isBigFile, part, buffer.byteLength, new Uint8Array(buffer).length, new Uint8Array(buffer).slice().length);\r\n\r\n /* const u = new Uint8Array(buffer.byteLength);\r\n for(let i = 0; i < u.length; ++i) {\r\n //u[i] = Math.random() * 255 | 0;\r\n u[i] = 0;\r\n }\r\n buffer = u.buffer; */\r\n \r\n /* setTimeout(() => {\r\n doneParts++;\r\n uploadResolve();\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n\r\n self.log('done part', part, doneParts);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, 1250);\r\n return; */\r\n\r\n apiManager.invokeApi(method, {\r\n file_id: fileId,\r\n file_part: part,\r\n file_total_parts: totalParts,\r\n bytes: buffer/* new Uint8Array(buffer) */\r\n } as any, {\r\n //startMaxLength: partSize + 256,\r\n fileUpload: true\r\n }).then((result) => {\r\n doneParts++;\r\n uploadResolve();\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, errorHandler);\r\n };\r\n \r\n reader.readAsArrayBuffer(blob);\r\n });\r\n }, activeDelta).catch(errorHandler);\r\n }\r\n }\r\n\r\n const it = generator();\r\n const process = () => {\r\n if(canceled) return;\r\n const r = it.next();\r\n if(r.done || canceled) return;\r\n (r.value as Promise<void>).then(process);\r\n };\r\n\r\n const maxRequests = Infinity;\r\n //const maxRequests = 10;\r\n /* for(let i = 0; i < 10; ++i) {\r\n process();\r\n } */\r\n for(let i = 0, length = Math.min(maxRequests, totalParts); i < length; ++i) {\r\n process();\r\n }\r\n\r\n deferred.cancel = () => {\r\n //this.log('cancel upload', canceled, resolved);\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n errorHandler({type: 'UPLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n deferred.finally(() => {\r\n delete this.uploadPromises[fileName];\r\n });\r\n\r\n return this.uploadPromises[fileName] = deferred;\r\n }\r\n}\r\n\r\nconst apiFileManager = new ApiFileManager();\r\nMOUNT_CLASS_TO.apiFileManager = apiFileManager;\r\nexport default apiFileManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { InputFileLocation, FileLocation } from \"../layer\";\r\nimport type { DownloadOptions } from \"../lib/mtproto/apiFileManager\";\r\n\r\nexport function getFileNameByLocation(location: InputFileLocation | FileLocation, options?: Partial<{\r\n fileName: string\r\n}>) {\r\n const fileName = '';//(options?.fileName || '').split('.');\r\n const ext = fileName[fileName.length - 1] || '';\r\n\r\n switch(location._) {\r\n case 'inputPhotoFileLocation':\r\n case 'inputDocumentFileLocation': {\r\n const thumbPart = location.thumb_size ? '_' + location.thumb_size : '';\r\n return (fileName[0] ? fileName[0] + '_' : '') + location.id + thumbPart + (ext ? '.' + ext : ext);\r\n }\r\n\r\n case 'fileLocationToBeDeprecated':\r\n case 'inputPeerPhotoFileLocation':\r\n case 'inputStickerSetThumb':\r\n case 'inputFileLocation': {\r\n return location.volume_id + '_' + location.local_id + (ext ? '.' + ext : ext);\r\n }\r\n\r\n default: {\r\n console.error('Unrecognized location:', location);\r\n return '';\r\n }\r\n }\r\n}\r\n\r\nexport type FileURLType = 'photo' | 'thumb' | 'document' | 'stream' | 'download';\r\nexport function getFileURL(type: FileURLType, options: DownloadOptions) {\r\n //console.log('getFileURL', location);\r\n //const perf = performance.now();\r\n const encoded = encodeURIComponent(JSON.stringify(options));\r\n //console.log('getFileURL encode:', performance.now() - perf, encoded);\r\n\r\n return '/' + type + '/' + encoded;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// just to include\r\nimport '../polyfill';\r\n\r\nimport apiManager from \"./apiManager\";\r\nimport cryptoWorker from \"../crypto/cryptoworker\";\r\nimport networkerFactory from \"./networkerFactory\";\r\nimport apiFileManager from './apiFileManager';\r\nimport type { ServiceWorkerTask, ServiceWorkerTaskResponse } from './mtproto.service';\r\nimport { ctx } from '../../helpers/userAgent';\r\nimport { socketsProxied } from './dcConfigurator';\r\nimport { notifyAll } from '../../helpers/context';\r\n\r\nlet webpSupported = false;\r\nexport const isWebpSupported = () => {\r\n return webpSupported;\r\n};\r\n\r\nnetworkerFactory.setUpdatesProcessor((obj) => {\r\n notifyAll({update: obj});\r\n});\r\n\r\nnetworkerFactory.onConnectionStatusChange = (status) => {\r\n notifyAll({type: 'connectionStatusChange', payload: status});\r\n};\r\n\r\nconst onMessage = async(e: any) => {\r\n try {\r\n const task = e.data;\r\n const taskId = task.taskId;\r\n\r\n if(task.type === 'convertWebp') {\r\n const {fileName, bytes} = task.payload;\r\n const deferred = apiFileManager.webpConvertPromises[fileName];\r\n if(deferred) {\r\n deferred.resolve(bytes);\r\n delete apiFileManager.webpConvertPromises[fileName];\r\n }\r\n\r\n return;\r\n } else if((task as ServiceWorkerTask).type === 'requestFilePart') {\r\n const task = e.data as ServiceWorkerTask;\r\n const responseTask: ServiceWorkerTaskResponse = {\r\n type: task.type,\r\n id: task.id\r\n };\r\n\r\n try {\r\n const res = await apiFileManager.requestFilePart(...task.payload);\r\n responseTask.payload = res;\r\n } catch(err) {\r\n responseTask.originalPayload = task.payload;\r\n responseTask.error = err;\r\n }\r\n\r\n notifyAll(responseTask);\r\n return;\r\n } else if(task.type === 'webpSupport') {\r\n webpSupported = task.payload;\r\n return;\r\n } else if(task.type === 'socketProxy') {\r\n const socketTask = task.payload;\r\n const id = socketTask.id;\r\n \r\n const socketProxied = socketsProxied.get(id);\r\n if(socketTask.type === 'message') {\r\n socketProxied.dispatchEvent('message', socketTask.payload);\r\n } else if(socketTask.type === 'open') {\r\n socketProxied.dispatchEvent('open');\r\n } else if(socketTask.type === 'close') {\r\n socketProxied.dispatchEvent('close');\r\n socketsProxied.delete(id);\r\n }\r\n }\r\n\r\n if(!task.task) {\r\n return;\r\n }\r\n \r\n switch(task.task) {\r\n case 'computeSRP':\r\n case 'gzipUncompress':\r\n // @ts-ignore\r\n return cryptoWorker[task.task].apply(cryptoWorker, task.args).then(result => {\r\n notifyAll({taskId, result});\r\n });\r\n \r\n case 'setQueueId':\r\n case 'cancelDownload':\r\n case 'uploadFile':\r\n case 'downloadFile': {\r\n try {\r\n // @ts-ignore\r\n let result = apiFileManager[task.task].apply(apiFileManager, task.args);\r\n \r\n if(result instanceof Promise) {\r\n /* (result as ReturnType<ApiFileManager['downloadFile']>).notify = (progress: {done: number, total: number, offset: number}) => {\r\n notify({progress: {fileName, ...progress}});\r\n }; */\r\n result = await result;\r\n }\r\n \r\n notifyAll({taskId, result});\r\n } catch(error) {\r\n notifyAll({taskId, error});\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'getNetworker': {\r\n // @ts-ignore\r\n apiManager[task.task].apply(apiManager, task.args).finally(() => {\r\n notifyAll({taskId, result: null});\r\n });\r\n \r\n break;\r\n }\r\n \r\n default: {\r\n try {\r\n // @ts-ignore\r\n let result = apiManager[task.task].apply(apiManager, task.args);\r\n \r\n if(result instanceof Promise) {\r\n result = await result;\r\n }\r\n\r\n //console.log(notifyAll);\r\n \r\n notifyAll({taskId, result});\r\n } catch(error) {\r\n notifyAll({taskId, error});\r\n }\r\n \r\n //throw new Error('Unknown task: ' + task.task);\r\n break;\r\n }\r\n }\r\n } catch(err) {\r\n\r\n }\r\n};\r\n\r\n//console.log('[WORKER] Will send ready', Date.now() / 1000);\r\nctx.addEventListener('message', onMessage);\r\nnotifyAll('ready');\r\n"],"sourceRoot":""}