diff --git a/extension/chrome/elements/backup.htm b/extension/chrome/elements/backup.htm index afe1ae92349..6040b2ccdf5 100644 --- a/extension/chrome/elements/backup.htm +++ b/extension/chrome/elements/backup.htm @@ -13,7 +13,9 @@
- This backup is protected by your passphrase. Please make sure to note your passphrase down or you may lose access to your encrypted emails! + + This backup is protected by your passphrase. Please make sure to note your passphrase down or you may lose access to your encrypted emails! +
diff --git a/extension/chrome/elements/backup.ts b/extension/chrome/elements/backup.ts index ad1e38bd7fe..231db348e80 100644 --- a/extension/chrome/elements/backup.ts +++ b/extension/chrome/elements/backup.ts @@ -19,15 +19,17 @@ View.run( private readonly parentTabId: string; private readonly frameId: string; private readonly armoredPrvBackup: string; + private readonly fromEmail: string; private storedPrvWithMatchingLongid: KeyInfoWithIdentity | undefined; public constructor() { super(); - const uncheckedUrlParams = Url.parse(['acctEmail', 'armoredPrvBackup', 'parentTabId', 'frameId']); + const uncheckedUrlParams = Url.parse(['acctEmail', 'armoredPrvBackup', 'parentTabId', 'frameId', 'fromEmail']); this.acctEmail = Assert.urlParamRequire.string(uncheckedUrlParams, 'acctEmail'); this.parentTabId = Assert.urlParamRequire.string(uncheckedUrlParams, 'parentTabId'); this.frameId = Assert.urlParamRequire.string(uncheckedUrlParams, 'frameId'); this.armoredPrvBackup = Assert.urlParamRequire.string(uncheckedUrlParams, 'armoredPrvBackup'); + this.fromEmail = Assert.urlParamRequire.string(uncheckedUrlParams, 'fromEmail'); } public render = async () => { @@ -53,12 +55,20 @@ View.run( `This private key with fingerprint ${Xss.escape(Str.spaced(fingerprint))} has already been imported.` ); } else { + const notUserOwnedPrvKey = this.fromEmail !== this.acctEmail; + const recommendation = notUserOwnedPrvKey ? '' : 'We recommend importing all backups to ensure you can read all incoming encrypted emails.'; + if (notUserOwnedPrvKey) { + $('.backup_message_text').text( + 'This message contains a private key received from ' + + this.fromEmail + + '. Import only if you intentionally sent this to yourself or received it from your administrator.' + ); + } $('.line .private_key_status') - .html( - `The private key ${Xss.escape(Str.spaced(fingerprint))} has not been imported yet. \n` + - `We recommend importing all backups to ensure you can read all incoming encrypted emails.` - ) - .after('
'); // xss-direct + .html(`The private key ${Xss.escape(Str.spaced(fingerprint))} has not been imported yet. \n` + recommendation) // xss-safe-value + .after( + `
` + ); // xss-direct } this.sendResizeMsg(); }; diff --git a/extension/js/common/message-renderer.ts b/extension/js/common/message-renderer.ts index 67422c6dc62..46928530710 100644 --- a/extension/js/common/message-renderer.ts +++ b/extension/js/common/message-renderer.ts @@ -282,7 +282,7 @@ export class MessageRenderer { renderedXssSafe += frameXssSafe; // xss-safe-value blocksInFrames[frameId] = block; } else { - renderedXssSafe += XssSafeFactory.renderableMsgBlock(this.factory, block, isOutgoing); // xss-safe-factory + renderedXssSafe += XssSafeFactory.renderableMsgBlock(this.factory, block, isOutgoing, senderEmail); // xss-safe-factory } } return { renderedXssSafe, isOutgoing, blocksInFrames }; // xss-safe-value @@ -385,13 +385,17 @@ export class MessageRenderer { return 'replaced'; // native should be hidden, custom should appear instead } else if (treatAs === 'encryptedMsg') { this.setMsgBodyAndStartProcessing( - loaderContext, treatAs, messageInfo.printMailInfo, messageInfo.from?.email, - renderModule => this.processEncryptedMsgAttachment(a, renderModule, messageInfo.from?.email, messageInfo.isPwdMsgBasedOnMsgSnippet, messageInfo.plainSubject), + loaderContext, + treatAs, + messageInfo.printMailInfo, + messageInfo.from?.email, + renderModule => + this.processEncryptedMsgAttachment(a, renderModule, messageInfo.from?.email, messageInfo.isPwdMsgBasedOnMsgSnippet, messageInfo.plainSubject), 'append' ); return 'hidden'; // native attachment should be hidden, the "attachment" goes to the message container } else if (treatAs === 'privateKey') { - return await this.renderBackupFromFile(a, loaderContext, attachmentSel); + return await this.renderBackupFromFile(a, loaderContext, attachmentSel, messageInfo.from?.email); } else { // standard file loaderContext.renderPlainAttachment(a, attachmentSel); @@ -869,11 +873,12 @@ export class MessageRenderer { private renderBackupFromFile = async ( attachment: Attachment, loaderContext: LoaderContextInterface, - attachmentSel: JQuery | undefined + attachmentSel: JQuery | undefined, + fromEmail?: string ): Promise<'shown' | 'hidden'> => { try { await this.gmail.fetchAttachmentsMissingData([attachment]); - loaderContext.setMsgBody_DANGEROUSLY(this.factory.embeddedBackup(attachment.getData().toUtfStr()), 'append'); // xss-safe-factory + loaderContext.setMsgBody_DANGEROUSLY(this.factory.embeddedBackup(attachment.getData().toUtfStr(), fromEmail), 'append'); // xss-safe-factory return 'hidden'; } catch { loaderContext.renderPlainAttachment(attachment, attachmentSel, 'Please reload page'); // todo: unit-test diff --git a/extension/js/common/xss-safe-factory.ts b/extension/js/common/xss-safe-factory.ts index 48df1d6b07c..7fee04eccc5 100644 --- a/extension/js/common/xss-safe-factory.ts +++ b/extension/js/common/xss-safe-factory.ts @@ -60,7 +60,7 @@ export class XssSafeFactory { * * When edited, REQUEST A SECOND SET OF EYES TO REVIEW CHANGES */ - public static renderableMsgBlock = (factory: XssSafeFactory, block: MsgBlock, isOutgoing?: boolean) => { + public static renderableMsgBlock = (factory: XssSafeFactory, block: MsgBlock, isOutgoing?: boolean, senderEmail?: string) => { if (block.type === 'plainText') { return XssSafeFactory.renderPlainContent(block.content); } else if (block.type === 'plainHtml') { @@ -68,7 +68,7 @@ export class XssSafeFactory { } else if (block.type === 'publicKey') { return factory.embeddedPubkey(PgpArmor.normalize(Str.with(block.content), 'publicKey'), isOutgoing); } else if (block.type === 'privateKey') { - return factory.embeddedBackup(PgpArmor.normalize(Str.with(block.content), 'privateKey')); + return factory.embeddedBackup(PgpArmor.normalize(Str.with(block.content), 'privateKey'), senderEmail); } else if (block.type === 'certificate') { return factory.embeddedPubkey(Str.with(block.content), isOutgoing); } else if (['encryptedAttachment', 'plainAttachment'].includes(block.type)) { @@ -163,8 +163,8 @@ export class XssSafeFactory { }); }; - public srcBackupIframe = (armoredPrvBackup: string) => { - return this.frameSrc(this.extUrl('chrome/elements/backup.htm'), { frameId: this.newId(), armoredPrvBackup }); + public srcBackupIframe = (armoredPrvBackup: string, fromEmail?: string) => { + return this.frameSrc(this.extUrl('chrome/elements/backup.htm'), { frameId: this.newId(), armoredPrvBackup, fromEmail }); }; public srcReplyMsgIframe = (convoParams: FactoryReplyParams, skipClickPrompt: boolean, ignoreDraft: boolean) => { @@ -229,8 +229,8 @@ export class XssSafeFactory { return this.iframe(this.srcPgpPubkeyIframe(armoredPubkey, isOutgoing), ['pgp_block', 'publicKey']); }; - public embeddedBackup = (armoredPrvBackup: string) => { - return this.iframe(this.srcBackupIframe(armoredPrvBackup), ['backup_block']); + public embeddedBackup = (armoredPrvBackup: string, fromEmail?: string) => { + return this.iframe(this.srcBackupIframe(armoredPrvBackup, fromEmail), ['backup_block']); }; public embeddedReply = (convoParams: FactoryReplyParams, skipClickPrompt: boolean, ignoreDraft = false) => { diff --git a/test/source/mock/google/exported-messages/message-export-19d4781fca9d303d.json b/test/source/mock/google/exported-messages/message-export-19d4781fca9d303d.json new file mode 100644 index 00000000000..1d1d6a4b284 --- /dev/null +++ b/test/source/mock/google/exported-messages/message-export-19d4781fca9d303d.json @@ -0,0 +1,167 @@ +{ + "acctEmail": "flowcrypt.compatibility@gmail.com", + "full": { + "id": "19d4781fca9d303d", + "threadId": "19d4781fca9d303d", + "labelIds": [ + "IMPORTANT", + "CATEGORY_PERSONAL", + "Label_15", + "INBOX" + ], + "snippet": "This email contains private backup that doesn't owned by flowcrypt.compatibility", + "payload": { + "partId": "", + "mimeType": "multipart/mixed", + "filename": "", + "headers": [ + { + "name": "X-Gm-Message-State", + "value": "AOJu0YxShBlKdFwhibsyRCr3kBtQ8t+hhKWdf1oszQSVAaVyHBpzihEf t/FP6mdFz1Md2scCvhr6t6x7ckkes0hs4qrMyhHI8CgkhTnezfxxThAY/wAKJsNxe2h/2JFfzqJ xqoZOihesQGsS9TneKJWVtHkUbvpleBSbyAN7xifNCvIMjFb0v83y" + }, + { + "name": "X-Gm-Gg", + "value": "ATEYQzyI0AGWRTQqTz3S10kl0hjwn+BLZl7FpO2d0384u3XeizyT1A2umb+SnK6ZCQc M5XT6lkfaA3Y7MCUgE+BlTQHQOqtUJtRDOEH/XOHlWm/Fj+c+XXEDp2Z6PyPCYiVn6j762vxiku 8L2ExzFt870O/U1GpZYeTb30wF0gJ209bno/lXwFvum5qpkTG2GO0s8sBXSyWl3X4BXJKMimLMX oL3stReGgbUaZpAlpkXwvrwkzX4gHCXD1/e5qp8n/zHL9SEJe3X2vlGrCQ0lmj+udaX4W88rdHt yuYnREWU9jpWBpPOjhi41rvE/sz5FeG0+uXR7iGJ83HzSnWqNcmsmCoZZ5GHkqdWNlm/95xJCmx bAdvjaZyP5o1yu0fsdXVaKEFfY+7LRgfIlRDPnhxdk+RcJin7uAdk14Bx0PHu/fAwwr6Wme+7QX SArl16uA==" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "From", + "value": "sender@domain.com" + }, + { + "name": "Date", + "value": "Wed, 1 Apr 2026 13:25:57 +0800" + }, + { + "name": "X-Gm-Features", + "value": "AQROBzCt50DWyWY_lNV5OV4sq2EBd1Pgz1Y8CGQA1m7Bm0Inrav2_RJifRKURJE" + }, + { + "name": "Subject", + "value": "Test email with backup for flowcrypt-browser #6199" + }, + { + "name": "To", + "value": "flowcrypt.compatibility@gmail.com" + }, + { + "name": "Content-Type", + "value": "multipart/mixed; boundary=\"000000000000b58afc064e5f5349\"" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"000000000000b58afb064e5f5347\"" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0.0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain; charset=\"UTF-8\"" + } + ], + "body": { + "size": 83, + "data": "VGhpcyBlbWFpbCBjb250YWlucyBwcml2YXRlIGJhY2t1cCB0aGF0IGRvZXNuJ3Qgb3duZWQgYnkNCmZsb3djcnlwdC5jb21wYXRpYmlsaXR5DQo=" + } + }, + { + "partId": "0.1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html; charset=\"UTF-8\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 109, + "data": "PGRpdiBkaXI9Imx0ciI-VGhpcyBlbWFpbCBjb250YWlucyBwcml2YXRlIGJhY2t1cCB0aGF0IGRvZXNuJiMzOTt0IG93bmVkIGJ5IGZsb3djcnlwdC5jb21wYXRpYmlsaXR5wqA8L2Rpdj4NCg==" + } + } + ] + }, + { + "partId": "1", + "mimeType": "application/pgp-keys", + "filename": "flowcrypt-backup-martroblesitgmailcom-67BEE1A01FB71D36804276A08CDBB8C8059A2AF5.asc", + "headers": [ + { + "name": "Content-Type", + "value": "application/pgp-keys; name=\"flowcrypt-backup-martroblesitgmailcom-67BEE1A01FB71D36804276A08CDBB8C8059A2AF5.asc\"" + }, + { + "name": "Content-Disposition", + "value": "attachment; filename=\"flowcrypt-backup-martroblesitgmailcom-67BEE1A01FB71D36804276A08CDBB8C8059A2AF5.asc\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "base64" + }, + { + "name": "Content-ID", + "value": "" + }, + { + "name": "X-Attachment-Id", + "value": "f_mnflrk420" + } + ], + "body": { + "attachmentId": "ANGjdJ8qorwt8gGgIajqLmoLIG1JJAtpMxxjvsfFl4OGLMbssnnNvxppj_Le7M3ltEPi3FuiM7u3GVHdP-0h55sgIE607SLr_YpxqLPa6anfXU8GiYDVm_9Y2SspJDU9qZrAR8PaZRC23KJkvl-WZdGx4lBjzJCxYokS6JqloMWuS-0RSjLBbWy8oAcxfIQ3OQJsWYbxaUQVKpgtjIAESoIUvICraxysPe66JzT-J_dtmdPIp8lBIcsttLw8QCr_vLC-8YibCkRnOY7Au9Aus0pK4n945g_CZ4wIwZZkLHXVA3PxaDR0OwA6fKpih5CeMF8QVFXyUG4CWXxZr473CHiLyLZ4Hs7G8bQ_FyYmiQFJMmzKarMlMWkTNIIeUbNqLu6z4jKA9GTUTANtP_hu", + "size": 5184 + } + } + ] + }, + "sizeEstimate": 14754, + "historyId": "1494870", + "internalDate": "1775021157000" + }, + "attachments": { + "ANGjdJ8qorwt8gGgIajqLmoLIG1JJAtpMxxjvsfFl4OGLMbssnnNvxppj_Le7M3ltEPi3FuiM7u3GVHdP-0h55sgIE607SLr_YpxqLPa6anfXU8GiYDVm_9Y2SspJDU9qZrAR8PaZRC23KJkvl-WZdGx4lBjzJCxYokS6JqloMWuS-0RSjLBbWy8oAcxfIQ3OQJsWYbxaUQVKpgtjIAESoIUvICraxysPe66JzT-J_dtmdPIp8lBIcsttLw8QCr_vLC-8YibCkRnOY7Au9Aus0pK4n945g_CZ4wIwZZkLHXVA3PxaDR0OwA6fKpih5CeMF8QVFXyUG4CWXxZr473CHiLyLZ4Hs7G8bQ_FyYmiQFJMmzKarMlMWkTNIIeUbNqLu6z4jKA9GTUTANtP_hu": { + "data": "LS0tLS1CRUdJTiBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQoKbFFXR0JHbXpyQjRCREFDMldpeUw4d3Q3c2MxWVVTSVpJTW9KbEdsY1pFMHV5K1dKSHE1UThVZXgrU1hubkVyMgo1Wmx6OHZyQ3pMQmJUejZJOFU3RUx0aVBtbkVSZ3pPUTdIRy9NNGdrMVBJdkZheGtkUTBXS2xpcmdzQWV0WVg0ClNPbmp3cDRncXE3R2Y4WktCZ09kR3RoQk5tdjhnVVVXaHlHbzFQU0ZjakcxMngwS3dIejVzODliMzIzTlFpYlYKT2JQR1EzMDF2elIvOVRvQ2tzNWEwcEMwZWUxa3htYUI0WDA0Q3dUL2FsbUxFTUdtR1F2bFY3QmJrN0JOYXRhVgpGTS8wSWJIdlIyRE5GUUhWMlRBbENYM1M0WjlWS2VPTEtud3NPRE41Z0FSWkl5alJjNXh0bHZtekljakRMdnY5CkV6SFQvd0d1ZWowek51VVpMSmdyZW40c0xON1V1eDBjR2xIcklUTG5xOEtvSU1mWmpMMHRoanRIV0NQajYvS2YKbllRTXYzc3Fxd3IzL2RmZ2VlQ2hJRlIxYUlBOFgwWTVXdGFOYi9wbHBIdGx2TUFidnFtMWV5bVVydnliQ0o4NgpKRTlRQkNVNjV3NmRPYm16ZlBCMkVFR09EVWpiWHpBNXlUWnduS2xPZ1N5SnRKV3pXZlFZcVhLVkJNWUptQmNBCmZkeEJRM09GNmxVQkRKOEFFUUVBQWY0SEF3SWxUdkN5aUJuS0gvekYzaS9WaXB3K3hldlN1ZWpFQlVnMjA5U28KWXFKeHI3RXFHUit5MEpRVjR2dlliRFY1TTd3eWFCU2oycGRMWmpFeGE0NDltT2lkeEpMZmZiYjM5MkV3MklZZgpSem50WFF4c29seGVBZUZUT1ZSRTB1TTRLbmtYamxJaGdrK1p1WFhocG9YSDJUdlplbzRzN0RsdkVtRzJoZGU1CjVxRUV5YzdpZ2dzeVJvZkVTWTdES0FzNTNiWXdZNmRXQmlaWjVjMWJmbitFQVJZclZTMVdwcWJ1aExWVXdwajIKdmJST2FkQ3ljamFxYksyUlV3SEtjMysvU2JDbmNjazZqTnp5WW9oRFZMdlUwNEpvRTg1ZnREQmNLRkhKdHF3NApITTZqazN3dWwzT29SSnRGM2s3MWdGcjV5YmhyMUd5UmErQTdTUXhCTlM2clk1RGRjSnhBOWIyblA4cW1HMUhOCmZVaUtPR1BoVjhtUHFWeW1ZZDdrVlUwTmQ1cGgxWTBXaDhhOEkwMTNuc3R2UUdkM0E4NFZ3b3UzQmEwSFgzZDcKVm5kUG1YdzNNaHQwQlVocndCblZpRzhRRnlmOGVPWlhmRjQ2dzNTMklCNUJ0NjROek5nT1ZacUhsVFNoVXhnbgprZm9wYnpxQjN0alJlZGhsenNlaEUyVVMvWkpoY3RnUG80TVJuK3dCMGtOVUJGTXlodlZ1eWxnRytRdlk1Vk52CmlFcU5kRFJjeUpGWWJFMEpUMmhNSFRlTm1HdXlYWk05SHhSMGRhUksyOFJta3B2S3dsRnVUWTJtR2hiWEwzNTEKYnR0N2NENHpXUzRaRmdORGxGTlVGTExwSVJ0ZDZGN1FuOU8xZFk2U2ZSay9xQ3JSUjhIUkpXZk1VanQyMlVIOQphbGRrOW1KWElmTmtSUCtHTmxFRTY1TGh3UUgzeWNvK21qTWFXLzRvTEFmSkdrQXlpWm9EUkE3eEordFdRQ1pTClM5a2trRUthYmRUMDcrVWFRUmkraWRnUVlsb2xCQS9JWVJZQmtueTRlRkZaK0N0c3JxQmpDbERodXF0VGNxQWEKMjRVenBEWnk1UUFSdyt2ZGI4ZU9nMUJiM3MzTko4TUdUUk1iMmFXY0JHME9VckhiZk5DampVNkpEVE1OOXZISgpYR0NVVW9ORUFPblRZdWdTRUk0b01nU2xERjZZRkRtcXpiaU8zZjhLNlRrYWd3TDJuUFAwcGFqakZneWN3SFA0CndTd3dKUWJ4K001WnFjRVNVNnBjeVhtcUo4dXU3d3JVc3pvOUREYUkxeDBNZVVUNDVNVVJ6WmhCVEZHZmRHOC8KOHJvd2ZUb1dPSHFSN1U1a1FMUFpnYUZ5eUZCSWxSRmt4UDV1MXlEYTh5NnpNdGZPdjY3VnFRbmcrS3hzQ2hucApwTDRFOTM5eEFCMCtXTHNkMGZNQjAwUjMwTDk5M01CSWtSVHozT3ZYQWpSVUtNTDYxTHpTcElydE94Y2ZyQUJoCm9KWjQ0cXl5MHFQREpwVHpWcm1BRkdwalJjUUg3MHRJVGJSdXZERFpmclJyOHJJc0pBNlZGUzFERXZDcUFkNXoKVDVwRkc0L2xzcGdscDFmUVlWU2Znd2NlQVJ0cWRiODl6YzV5dTVRODdQbXJPSjJKcXd0bFFXL2JHTzE3RGxuVQptTVVuSzNMWEFjM2tCV3A2WERQR0lQSnVHVlNqL3Z4czdJUjViaHBNbFNWaWE5T3JadXhHbkh6Q3NCTml4Mjk1Ck53RU9GYnNlZEZxTTNSMkoxbW5ad3VPQ0ZmTHA5Qzh4TzdRWGRHVnpkQ0E4ZEdWemRFQmxlR0Z0Y0d4bExtTnYKYlQ2SkFkRUVFd0VJQURzV0lRVFNlenVFYmYzcmhnWkxTN0NOblExWjJnYWhlZ1VDYWJPc0hnSWJBd1VMQ1FnSApBZ0lpQWdZVkNna0lDd0lFRmdJREFRSWVCd0lYZ0FBS0NSQ05uUTFaMmdhaGVzYVJDL3NHVXNLckd5cEN4QXZICkpRb0lnSzFOOHBBSXdaVndWYlc1ME9JVlU4eWRxUE0wdWsxZUNDRWIya2hsMFJuUWg1bFhBNnhQZktHQXNmd1gKcHpHVWg4WGVPamI5YmJMdDlaaWhwUHh4L0llYzcyVWk3Vy81YllVRFp4UisxNUsva2ZMRTZycmlSeVNOSStFSQpBenRIbk5VQmR3ZXMwajZhbWNaUmR5aEFnOVR6aGNzMkovN3p1SUlDd0w2MEtHWnhCSE1qaXlzbjJXWERRdjBmCjl0a3ovRThNNHZ1Y1BLNldzS3ZxZm5xU2poVytyNk9JWVZuYkNDczBhUzNjL0hQTzd0OTZFa1V3MzQxYys2WGwKakR1RjloSW9EUmpac2piNnBZYnU4K2R2V21sVXE3d3Q3b2piSzJuem9wY3F6KzBtTzRveGk0M0ZaWlB1bEFIdgpPVHY0RkVQeUswSXc5Y1l1NXdrQWZzbTE0VjZSeVpoNWZ3WkFYWXNubFdWM0VhWUdNbVdQRVUvTlFLUUpJZ1B1CnFPanYzaHhGdkNoVkFmOVAwTFFsbGxJSjNpclNkMm5Hc1hVdml0SGtaTHlaK3NmUlN5QWM3V0QyRHRVMjUrcVcKZkpSd0Vra0I3MzNWQk9RM2ZibVFrdFFJN1VkWkp5ajUwbkF6ZGp3QkFpSTBjOVlIV09pZEJZWUVhYk9zSGdFTQpBTnAzSUdZRW1XWE1NOE5MSmdCNFlvazNSK21XSkZxZUxYeVRwNGhQSjRHeE5oNGx5bitXT1A1OE1YQ2hMZ0gzCnl0SjN4UGxIdnJORy9jMWFoaFkwUi9MY1NRRU9RUXlFaEZRdHFvbkVkTUJQQjkxeGJDRndnQ2cvWnYxY09yaFUKZzlBU0RCYkM3VEFTL2x3L2ZTbEFzZFo2aHpIajZFZFBLdTBvYjcvREJYbFRXVUtkNUZoOURURVN1SUhaVE5xZgpia05kL1FsanN4TGd5bmRRbGJBWGdSQnZUWVpsNEFuUVVnWlRoU2I5U09TbjIwcVVhSWM2ck5WNDNlMzhGcTdXCjNWNW94aTJqeFRaUEJnUUVxTmx5UUtUeXRjL0xkU1UxWjJmS05Mc1B5bE9FNUJuR21vWTVyYkNNRU9pUnVGd3gKZEhURzV4WGtGQTIyK1NidFc5WEQzY1VzOWkxcWZqYzRCMHF3V1lZTFhDYzdJMm5sMjlRbmJwYS9UZkwrWEUxTApVaDl4bnZDc2I0RjcxenA3RVBoSEhrR2JBQjhtWGI4b0xZSEs4K1F3UVdoUFpJV2QyL0trODhlVUpFdUFXOStGCjZHSjJXWUIzc01CUUFPRHBCeXFrN2tsSlVCNlFWLzNXWHF2UTJDMytPUkJZaUVtVVFqVVF1V1RNbm5MZkVxVmsKYlFBUkFRQUIvZ2NEQXJBaDZtVGNJUWI3L0JXbDc5aG1RWWJtS21tTFU4WXBmbkpIRFIvTE16dzBmZ2diM0VsVAo5NlJaZklpYTcrMkdFeDBqSFJaaXlIT1BiUjQ2SmtwdVFTU0lYZEt6K3dOMjJJSlRLOUY3SlZzckpkM0N6VS9nCnNtcEZhNEoxenpSM001MFZCNTFZdnArL3ZlYjdGNHNXUGJWTE5ycldtT1h3eW5maGlNSGJCemRYOU5OenFuVDMKTEJZUVMyR3RjbG9QbUJnRExWV05tckdCeFhRN1RvR2pSRHV1VmJQNzUxcGx0NWMvM3VXaDFoVUViMWVhSWdpQgplYWFkSExCRW1HdU83bFQ0M2lTbi9Vdm5pT3JHTVNxNm1OL1R0eEpwWHJEZTNHbkZ6SklvczNNOThOL2ZCVDk2ClBaSStWSmVyRHZSbUMxUkhhcDM1c2YxQ0Z0QjRFQnViUmZNVnh4blljRXorWk1Ld0xJTll1a3N3K0xFekExZmIKSUJmYlZWWlMxcUVCQlNRNXEzMmZLZnIrUms1bHhmMmZwUU5FVTVYeUZRM1dBMnl2UUU1L2pqdW53MFR4b2xoKwo0Q3ptVkVBb3JoekdlTGtFL3FIVXkzeGMwVWZ5K2FLa096NFlTeDhuc3JnbXU0bnBDZ0xGZktIU2IvbEI1UkM2Cmg4UDhrbVNOMzhhelJ3YmdZTlpNWFBYUndKbEllNVZBdEx4RkdJWHB4bTh2TG40ak92OHR6T1ZaSGFJTnQzZisKN2xKc0VIU2kwcm5aTER1d3J3MWN0d1dqbVBURjJUWnRkbU10cGxmQ3k3N0xCdzliNklidTZrRzZPV1U3dUFyRQpJWm0ybGpLK1JVTmRYKzhrcDNkZENRdzNZcTkxN3BIV0QvQU96ZTBhOXR5bnZTMDl1b0J5b2NqZzFEVzZSR1ZLClBlWGxPVDRjNlJsSFEvMGxKdnFlcGVDNzlqeXBTcENkckNNTWdtOEZLaDZtWm9Xc1ZuM2NjdWhheDJILzhLUi8KME03WTlUU1JTWXBkVTBuQS9IMkdnYXNyMWFKNHJaV3hSU2l3UDJzSyt6NHFtWkZwV0NkbTV0MWRUK1VLTzBDVQpYSEs3emxMakp2RWJ6TGRscUdCVy9GcmJwdTRHMkVDRnlCZ1hKcW1YNy9ObjE3VzltejdFRGdZdlNLVUo2K2ZuCm1mc1QrdUhoaWw5bDdDd0ducGdJckZZcFBxNXNCZVdnbkZEQUJheHRnRXFPeGRYSThBVC9VbHNOdjI5N29QYXUKVzZoTmtqVUp1ejZja1ZiRlBUZUc3WFRvSEd2bmZ5bUZDWERCTUhrcVdZMVF4SlcvMVVlSVNSeUNzUDFoTHBxTQp3cTN6OXVaNnJLWkFROXlBU01SMWRYOVJlWUkyRFVXK1NOMkxNd3JzR3VYNDZUNm1GRGluMHVyV1hDZWNYUDNCCnpYNmlERGVUUE9BNnBZZy9TTWhIckg1V0xIdTRYMzREM2RUcDRla2ZTVVZCRXdmRldCbGxicG5kOG5VK1VESmgKLytJbkpQcGlhU3psQjhTUk9DUElyT0NQSmI2azFHTmtRRWlqU2tHU1dlSitwSTZacWV6eUxqaVhrMUJML05mbApPdjhwb1ROL2c5MW9BNmwvMmRWQWE5Qk1SYk5yL2drQm1xT20rUU9nTDJzZGx5YXlEMXBmTEgwUW1UNlVyTlRJCldpZFBQbno4NkFwR2dTMnNNV1Y1d21GcWY1UHJRdWMxMDY3cTdLeHVIMDJ5NUQ5cE1oUDkybnRWWGNBVDd0SzcKWTlMdWttRjVkR1dLdGlMUG40anFpUUcyQkJnQkNBQWdGaUVFMG5zN2hHMzk2NFlHUzB1d2paME5XZG9Hb1hvRgpBbW16ckI0Q0d3d0FDZ2tRalowTldkb0dvWHBQNVF2K05nZUEvc3JLQjZJNnpPWVpMQTBOcHhQV0drOGd0ZTBsClJsbnRMZHZhK2R2ak9CaE5DNUFDVUJUeXppckJaUVVRRHJLMnR2eEt1VXFoNk1lb1p0eDFnQmV1M1gzUjJjdVIKVk1ZS0RBaWF6ckowT2xud1FhUzdBU0hiY0xORWVabllMOEpoTkNOOGlRSmFFcGRremVNUjRUeExWeFRPQi9ScworUlNVR2N3YU1SUDN3aXNoYk56aXc4eHJtcENiZTBtQTZTVHgzRzhHOTNXOGZFOE0rWWZ6SEhOVVdXYytJaG16ClhPUmd4VDNXcmxseEd1V0xpUmpLTzlTdFRqYWUxckIxYWk5cHlBK2ZXK25UYjk0Y0RzbEpnNU5RbC9seG1sS2cKRlZ0cjdsTmFXdFBLWnJwUnN6RjFJN0UvU0x6bUVjR2dTM1VrdmlYZ2M4akRiK3pNL3ZwK2lYOFJYYXZzV0JIMwpYblJVMUpOaEFnQVkrbU5lNmFycjFrd1pkLzJRRWpBbGpaU3dPTkMxdWtFKzdZb1FMV3NKd0NaMUp6K01QQzlHClhvb3lVNDZwT3IrbDU2M2dhWWZFcG1XbytmeU1GaVJUMUk3NDRPMGFYcHJpTTBzWVRmdzNYdzQzT2J1OUEvbDgKaUNRblgzWUFFYndFSTVia205dStNN1dYcG14MGdHWUsKPUhINGEKLS0tLS1FTkQgUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS0K", + "size": 5184 + } + }, + "raw": { + "id": "19d4781fca9d303d", + "threadId": "19d4781fca9d303d", + "labelIds": [ + "IMPORTANT", + "CATEGORY_PERSONAL", + "Label_15", + "INBOX" + ], + "snippet": "This email contains private backup that doesn't owned by flowcrypt.compatibility", + "sizeEstimate": 14754, + "raw": "RGVsaXZlcmVkLVRvOiBmbG93Y3J5cHQuY29tcGF0aWJpbGl0eUBnbWFpbC5jb20NClJlY2VpdmVkOiBieSAyMDAyOmFjODo0NDU1OjA6YjA6NTBiOjM4YTU6ODdjYSB3aXRoIFNNVFAgaWQgbTIxY3NwMjYxMTAzM3F0bjsNCiAgICAgICAgVHVlLCAzMSBNYXIgMjAyNiAyMjoyNjozNCAtMDcwMCAoUERUKQ0KWC1SZWNlaXZlZDogYnkgMjAwMjphMDU6NjgwODo1MjkxOmIwOjQ1ZTpmODg4OjY5NWUgd2l0aCBTTVRQIGlkIDU2MTQ2MjI4MTJmNDctNDZhZTAxYjk4OTBtcjEwNjk1NTViNmUuMTEuMTc3NTAyMTE5NDQwNzsNCiAgICAgICAgVHVlLCAzMSBNYXIgMjAyNiAyMjoyNjozNCAtMDcwMCAoUERUKQ0KQVJDLVNlYWw6IGk9MjsgYT1yc2Etc2hhMjU2OyB0PTE3NzUwMjExOTQ7IGN2PXBhc3M7DQogICAgICAgIGQ9Z29vZ2xlLmNvbTsgcz1hcmMtMjAyNDA2MDU7DQogICAgICAgIGI9TjZlcEpxL0JyTytkdWQwQ1gzMWZwanRKbDFLQkJldlNQSTRqUW11eVhkQ0NDMVpMdjlIcEIwQWZndzJEVVB1VlI4DQogICAgICAgICBCV1gwSzIxUE5OTTFsUEV4bG5qSXJsTUFpVXdFUWRPNDBOd1FkKzNZaTlhMFpYNG0wc0ZCd1V1YzVBY1dGallHRVBYdg0KICAgICAgICAgK0c0dzUvSlpOWHFrdUF0bDcyb3lwMW42cEcwK2tmMitDc3RBNnhDTVRxNFc1cW5INEx3alJ1K09IWXFTT3g3Mjh2NDMNCiAgICAgICAgIGhGclc2R3JmeVNOVGxSUTdEZ0xZNnhiRzBPM0N2NWkyLzFRWkV6NjRFUGdNZmdUSHNiODBkcmhvSWlzY3UxaG01TDRNDQogICAgICAgICBwdVhwUXgwdlh1WDlIazg5cXdsUEo5ektIZ0FSbTcyOTFnbEd1MVc3STR1c1Z5Nm1pSXYxVWdmYjlRYVlBREs3dkRlZQ0KICAgICAgICAgdkJ0Zz09DQpBUkMtTWVzc2FnZS1TaWduYXR1cmU6IGk9MjsgYT1yc2Etc2hhMjU2OyBjPXJlbGF4ZWQvcmVsYXhlZDsgZD1nb29nbGUuY29tOyBzPWFyYy0yMDI0MDYwNTsNCiAgICAgICAgaD10bzpzdWJqZWN0Om1lc3NhZ2UtaWQ6ZGF0ZTpmcm9tOm1pbWUtdmVyc2lvbjpka2ltLXNpZ25hdHVyZTsNCiAgICAgICAgYmg9M0NKcHZBT0x2Ly96a1FHUXNKcFJydm9IQTRCRTFBU3VqVWtRN2FZVFJLdz07DQogICAgICAgIGZoPUdjN0tQeEZXMkpxRVBsK3FmeEd2S3N4NVVzcjFJclpoTnppTmNoQ3lTK0k9Ow0KICAgICAgICBiPWtyVzNlai82b0VSOE9ZZGkrVjdtL3pJQmlSRVdnczlmSjFWejdQdGZ5bFNscllhOUtmSmNVUmNoL1ZsYjJIWkpoSw0KICAgICAgICAgYnduRUpxampiU0ZGNzEyc3cwYnhwamZ0MXpVMGlaeGJzbnMxSVI4dnVMU3JSaUhLeHZSY2xLR3Z3dDl6Sjl3SUxqQkwNCiAgICAgICAgIGdMbWN4ZU9ZZVZhc29Wb2JyTnI0OVp0UmpYbTQ0WWVaWmJScmlja3NKLzljSytUaXJWTlZyTjlSNUdvSUp0OW1vU0lODQogICAgICAgICBaRXNPWkpTcXZvSUVzRTRvanhsaDNmVUlYeTA4VDhhcVJlRzRhTEh0L2JmNzJEZThJKzY2LzZINE5XVWhndS9RbnVKVA0KICAgICAgICAgazJmcVJmdmZzc1JYU3k0Zm1zS3ExM3pDaXpqYmRPcTEwNUZpQ1VteG4wWHNSMXBCZXBxRE1mZ0gyWGNBN01DMXU4VlQNCiAgICAgICAgIGd6Unc9PTsNCiAgICAgICAgZGFyYT1nb29nbGUuY29tDQpBUkMtQXV0aGVudGljYXRpb24tUmVzdWx0czogaT0yOyBteC5nb29nbGUuY29tOw0KICAgICAgIGRraW09cGFzcyBoZWFkZXIuaT1AZmxvd2NyeXB0LmNvbSBoZWFkZXIucz1nb29nbGUgaGVhZGVyLmI9SmZBb05yU1A7DQogICAgICAgYXJjPXBhc3MgKGk9MSk7DQogICAgICAgc3BmPXBhc3MgKGdvb2dsZS5jb206IGRvbWFpbiBvZiBtYXJ0QGZsb3djcnlwdC5jb20gZGVzaWduYXRlcyAyMDkuODUuMjIwLjQxIGFzIHBlcm1pdHRlZCBzZW5kZXIpIHNtdHAubWFpbGZyb209bWFydEBmbG93Y3J5cHQuY29tOw0KICAgICAgIGRtYXJjPXBhc3MgKHA9UkVKRUNUIHNwPVJFSkVDVCBkaXM9Tk9ORSkgaGVhZGVyLmZyb209Zmxvd2NyeXB0LmNvbTsNCiAgICAgICBkYXJhPXBhc3MgaGVhZGVyLmk9QGdtYWlsLmNvbQ0KUmV0dXJuLVBhdGg6IDxtYXJ0QGZsb3djcnlwdC5jb20-DQpSZWNlaXZlZDogZnJvbSBtYWlsLXNvci1mNDEuZ29vZ2xlLmNvbSAobWFpbC1zb3ItZjQxLmdvb2dsZS5jb20uIFsyMDkuODUuMjIwLjQxXSkNCiAgICAgICAgYnkgbXguZ29vZ2xlLmNvbSB3aXRoIFNNVFBTIGlkIDU2MTQ2MjI4MTJmNDctNDZhZDZlNmU3MTVzb3IxMDU1OTA1YjZlLjAuMjAyNi4wMy4zMS4yMi4yNi4zMw0KICAgICAgICBmb3IgPGZsb3djcnlwdC5jb21wYXRpYmlsaXR5QGdtYWlsLmNvbT4NCiAgICAgICAgKEdvb2dsZSBUcmFuc3BvcnQgU2VjdXJpdHkpOw0KICAgICAgICBUdWUsIDMxIE1hciAyMDI2IDIyOjI2OjM0IC0wNzAwIChQRFQpDQpSZWNlaXZlZC1TUEY6IHBhc3MgKGdvb2dsZS5jb206IGRvbWFpbiBvZiBtYXJ0QGZsb3djcnlwdC5jb20gZGVzaWduYXRlcyAyMDkuODUuMjIwLjQxIGFzIHBlcm1pdHRlZCBzZW5kZXIpIGNsaWVudC1pcD0yMDkuODUuMjIwLjQxOw0KQXV0aGVudGljYXRpb24tUmVzdWx0czogbXguZ29vZ2xlLmNvbTsNCiAgICAgICBka2ltPXBhc3MgaGVhZGVyLmk9QGZsb3djcnlwdC5jb20gaGVhZGVyLnM9Z29vZ2xlIGhlYWRlci5iPUpmQW9OclNQOw0KICAgICAgIGFyYz1wYXNzIChpPTEpOw0KICAgICAgIHNwZj1wYXNzIChnb29nbGUuY29tOiBkb21haW4gb2YgbWFydEBmbG93Y3J5cHQuY29tIGRlc2lnbmF0ZXMgMjA5Ljg1LjIyMC40MSBhcyBwZXJtaXR0ZWQgc2VuZGVyKSBzbXRwLm1haWxmcm9tPW1hcnRAZmxvd2NyeXB0LmNvbTsNCiAgICAgICBkbWFyYz1wYXNzIChwPVJFSkVDVCBzcD1SRUpFQ1QgZGlzPU5PTkUpIGhlYWRlci5mcm9tPWZsb3djcnlwdC5jb207DQogICAgICAgZGFyYT1wYXNzIGhlYWRlci5pPUBnbWFpbC5jb20NCkFSQy1TZWFsOiBpPTE7IGE9cnNhLXNoYTI1NjsgdD0xNzc1MDIxMTkzOyBjdj1ub25lOw0KICAgICAgICBkPWdvb2dsZS5jb207IHM9YXJjLTIwMjQwNjA1Ow0KICAgICAgICBiPVQ0cTUyVkhocTVvbFZqNkhzaW93S1JYZTRTWFNkSG4zNEZCelpsOEtXbVcxM1RlRFhxbnZKdGR4Zk5RbDhUTXFJQQ0KICAgICAgICAgVDBnQmFERFBjeGZDaWJzWC9LeGgzV1dWUjFoK0lnZ3BxZERQdXZrNGg0V3ZrOXl5L0FycEhXWEQ3VTRYVEFaK3pRemMNCiAgICAgICAgIHoxdWk3bFl2ZHEzTUlNeEcyTDA0V2J2cXpOaG1LOElXUmJCeENGYkFqVkhML2lnY0JwY1NlTlQ0ektreHBkSk9vTzhoDQogICAgICAgICBjNXBjVWJFVGwzYjFib2dTZDhlbW83VDdzZW1DWUlsOEs4RVVlTXpwU2lSbVU4cVR0REQ3RXlTaEI3QUcxbjRmdlJ4aQ0KICAgICAgICAgbkJKVFdxZ09JR2ZCckRYVmQxak9hdzBMQytKS3IxQUtmdlZPM0xxa0U5SHp4N01xWlJKanlTVVN5ZDhYSU14dlZaK2MNCiAgICAgICAgIERJYWc9PQ0KQVJDLU1lc3NhZ2UtU2lnbmF0dXJlOiBpPTE7IGE9cnNhLXNoYTI1NjsgYz1yZWxheGVkL3JlbGF4ZWQ7IGQ9Z29vZ2xlLmNvbTsgcz1hcmMtMjAyNDA2MDU7DQogICAgICAgIGg9dG86c3ViamVjdDptZXNzYWdlLWlkOmRhdGU6ZnJvbTptaW1lLXZlcnNpb246ZGtpbS1zaWduYXR1cmU7DQogICAgICAgIGJoPTNDSnB2QU9Mdi8vemtRR1FzSnBScnZvSEE0QkUxQVN1alVrUTdhWVRSS3c9Ow0KICAgICAgICBmaD1HYzdLUHhGVzJKcUVQbCtxZnhHdktzeDVVc3IxSXJaaE56aU5jaEN5UytJPTsNCiAgICAgICAgYj1NbU5aVW05M2QzUEtwRjhmZ0ZPclZWMFRQcWNRSXY3UXFuNkxuK3Y3Vmg1S0h6NXBEbXlQQUZudmJCVEU0dlM1dlUNCiAgICAgICAgIHBkaDBKRytsZTY0ZlNFaWJsZ1ZHV1VZeHU4ZFJLZWNoMnJ0aEpGZ1lKcU45YnVoUkZyU1E0WXN6Si9oOXMwS2dlazhmDQogICAgICAgICBiaWVDVytQb2UyN2d4SFZBWnE0VktOek5pcVVmaXRtajBraWg1a2pKRUVUNjhLeHFWUjArSHRPRUl3bXM2aXhLWHFZVg0KICAgICAgICAgdk12amR4djMxczBMWDIwU0ErcjF4YldjNWdlK3BCeCtvSTNRQndDYldrSy9pTjcvcC9rTmlib21kdUgvM040dFJ2dHENCiAgICAgICAgIEJXWFAyRTEwdlV6RlBoYjRYVi91MmtUaUNFSGlCMnNaY3ZTUWxoUm1ZVGU1U1JBaU9WTURlM3RCWHFFaFpSL3VReUphDQogICAgICAgICBFd0lRPT07DQogICAgICAgIGRhcmE9Z29vZ2xlLmNvbQ0KQVJDLUF1dGhlbnRpY2F0aW9uLVJlc3VsdHM6IGk9MTsgbXguZ29vZ2xlLmNvbTsgYXJjPW5vbmUNCkRLSU0tU2lnbmF0dXJlOiB2PTE7IGE9cnNhLXNoYTI1NjsgYz1yZWxheGVkL3JlbGF4ZWQ7DQogICAgICAgIGQ9Zmxvd2NyeXB0LmNvbTsgcz1nb29nbGU7IHQ9MTc3NTAyMTE5MzsgeD0xNzc1NjI1OTkzOyBkYXJhPWdvb2dsZS5jb207DQogICAgICAgIGg9dG86c3ViamVjdDptZXNzYWdlLWlkOmRhdGU6ZnJvbTptaW1lLXZlcnNpb246ZnJvbTp0bzpjYzpzdWJqZWN0DQogICAgICAgICA6ZGF0ZTptZXNzYWdlLWlkOnJlcGx5LXRvOw0KICAgICAgICBiaD0zQ0pwdkFPTHYvL3prUUdRc0pwUnJ2b0hBNEJFMUFTdWpVa1E3YVlUUkt3PTsNCiAgICAgICAgYj1KZkFvTnJTUG84WTFRUHdrNXpka0JpZisyY0o1SE1pNXVmS2FFcWtYVTNPdFlwUWoyVm5jcHAxcWZOSHErWWhyNDkNCiAgICAgICAgIGVUcG0vM0hLQU1yOTQ4ZmgzeUJ1cjRmUFEvRlRxR2tTcnZ5K09zQkZsYW5Mdm5lYndmc0x3WENPbVpxdjdZTE9pSlFQDQogICAgICAgICBlU1FHU1h2WjdnMXFWcjdtTDNmb1d2cFRtS2k5R3BuY3dzQXJRPQ0KWC1Hb29nbGUtREtJTS1TaWduYXR1cmU6IHY9MTsgYT1yc2Etc2hhMjU2OyBjPXJlbGF4ZWQvcmVsYXhlZDsNCiAgICAgICAgZD0xZTEwMC5uZXQ7IHM9MjAyNTExMDQ7IHQ9MTc3NTAyMTE5MzsgeD0xNzc1NjI1OTkzOw0KICAgICAgICBoPXRvOnN1YmplY3Q6bWVzc2FnZS1pZDpkYXRlOmZyb206bWltZS12ZXJzaW9uOngtZ20tZ2cNCiAgICAgICAgIDp4LWdtLW1lc3NhZ2Utc3RhdGU6ZnJvbTp0bzpjYzpzdWJqZWN0OmRhdGU6bWVzc2FnZS1pZDpyZXBseS10bzsNCiAgICAgICAgYmg9M0NKcHZBT0x2Ly96a1FHUXNKcFJydm9IQTRCRTFBU3VqVWtRN2FZVFJLdz07DQogICAgICAgIGI9UjYrNVZSczZreW9ZS2lMZlJ4U2ZVRlZRMmNEOHVxMDlyM3RFTjFoY3RIMFBTU3M2aWJOR3pvTUZxTWtMR1pVM2hYDQogICAgICAgICBQVlF6c1pvNGtiRnQ0eDl6NFYzNmthSWFnODhyWnZJQytjUzJhdGc1TXQzL1FaMmlSQm0vSEJkMXJqVVpGMHpZWU9xeQ0KICAgICAgICAgb3g5akJVbmNYWXQxTmJhellqVWlveFZvTDJTUHFQRmxpeVNIZlFpeUc3WUh4ZUduNko5OU5UNzd4SWxhK0JEUWN6NDANCiAgICAgICAgIHFRZmo1U0RhMDE3NlRRVXhQY3ZSVnE0UlBud0tRWkJCajlPaktWL2dEamg2VTJCNkI0Z09CcEJMendwKzZ0Qm9zcmJ0DQogICAgICAgICBzMEwvQTk2dzg4dWZmTXBlREZmUk1zbXJocENQZlZjeGE0WmVIaVhiaUFhL251VHE3Z093U2VOK0Z1VkxnTkRwVWNCQQ0KICAgICAgICAgZi8xQT09DQpYLUdtLU1lc3NhZ2UtU3RhdGU6IEFPSnUwWXhTaEJsS2RGd2hpYnN5UkNyM2tCdFE4dCtoaEtXZGYxb3N6UVNWQWFWeUhCcHppaEVmDQoJdC9GUDZtZEZ6MU1kMnNjQ3ZocjZ0Nng3Y2trZXMwaHM0cXJNeWhISThDZ2toVG5lemZ4eFRoQVkvd0FLSnNOeGUyaC8ySkZmenFKDQoJeHFvWk9paGVzUUdzUzlUbmVLSldWdEhrVWJ2cGxlQlNieUFON3hpZk5DdklNakZiMHY4M3kNClgtR20tR2c6IEFURVlRenlJMEFHV1JUUXFUejNTMTBrbDBoanduK0JMWmw3RnBPMmQwMzg0dTNYZWl6eVQxQTJ1bWIrU25LNlpDUWMNCglNNVhUNmxrZmFBM1k3TUNVZ0UrQmxUUUhRT3F0VUp0UkRPRUgvWE9IbFdtL0ZqK2MrWFhFRHAyWjZQeVBDWWlWbjZqNzYydnhpa3UNCgk4TDJFeHpGdDg3ME8vVTFHcFpZZVRiMzB3RjBnSjIwOWJuby9sWHdGdnVtNXFwa1RHMkdPMHM4c0JYU3lXbDNYNEJYSktNaW1MTVgNCglvTDNzdFJlR2diVWFacEFscGtYd3Zyd2t6WDRnSENYRDEvZTVxcDhuL3pITDlTRUplM1gydmxHckNRMGxtait1ZGFYNFc4OHJkSHQNCgl5dVluUkVXVTlqcFdCcFBPamhpNDFydkUvc3o1RmVHMCt1WFI3aUdKODNIelNuV3FOY21zbUNvWlo1R0hrcWRXTmxtLzk1eEpDbXgNCgliQWR2amFaeVA1bzF5dTBmc2RYVmFLRUZmWSs3TFJnZklsUkRQbmh4ZGsrUmNKaW43dUFkazE0QngwUEh1L2ZBd3dyNldtZSs3UVgNCglTQXJsMTZ1QT09DQpYLVJlY2VpdmVkOiBieSAyMDAyOmEwNTo2ODIwOjRkZjA6YjA6NjdlOjEwMWQ6MTA1NCB3aXRoIFNNVFAgaWQNCiAwMDZkMDIxNDkxYmM3LTY3ZmFiOTc1NDc0bXIxMDQ3OTA0ZWFmLjExLjE3NzUwMjExOTM0OTQ7IFR1ZSwgMzEgTWFyIDIwMjYNCiAyMjoyNjozMyAtMDcwMCAoUERUKQ0KTUlNRS1WZXJzaW9uOiAxLjANCkZyb206IE1hcnQgYXQgRmxvd0NyeXB0IDxtYXJ0QGZsb3djcnlwdC5jb20-DQpEYXRlOiBXZWQsIDEgQXByIDIwMjYgMTM6MjU6NTcgKzA4MDANClgtR20tRmVhdHVyZXM6IEFRUk9CekN0NTBEV3lXWV9sTlY1T1Y0c3EyRUJkMVBnejFZOENHUUExbTdCbTBJbnJhdjJfUkppZlJLVVJKRQ0KTWVzc2FnZS1JRDogPENBTXZkODU3blZRPXZkekhac01faUthR3NIanFSNmt4R21LcUFUOTg1ZjRPQWhldGt1QUBtYWlsLmdtYWlsLmNvbT4NClN1YmplY3Q6IFRlc3QgZW1haWwgd2l0aCBiYWNrdXAgZm9yIGZsb3djcnlwdC1icm93c2VyICM2MTk5DQpUbzogRmxvd0NyeXB0IENvbXBhdGliaWxpdHkgPGZsb3djcnlwdC5jb21wYXRpYmlsaXR5QGdtYWlsLmNvbT4NCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iMDAwMDAwMDAwMDAwYjU4YWZjMDY0ZTVmNTM0OSINCg0KLS0wMDAwMDAwMDAwMDBiNThhZmMwNjRlNWY1MzQ5DQpDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9IjAwMDAwMDAwMDAwMGI1OGFmYjA2NGU1ZjUzNDciDQoNCi0tMDAwMDAwMDAwMDAwYjU4YWZiMDY0ZTVmNTM0Nw0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCINCg0KVGhpcyBlbWFpbCBjb250YWlucyBwcml2YXRlIGJhY2t1cCB0aGF0IGRvZXNuJ3Qgb3duZWQgYnkNCmZsb3djcnlwdC5jb21wYXRpYmlsaXR5DQoNCi0tMDAwMDAwMDAwMDAwYjU4YWZiMDY0ZTVmNTM0Nw0KQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9IlVURi04Ig0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQ0KDQo8ZGl2IGRpcj0zRCJsdHIiPlRoaXMgZW1haWwgY29udGFpbnMgcHJpdmF0ZSBiYWNrdXAgdGhhdCBkb2VzbiYjMzk7dCBvd25lZCA9DQpieSBmbG93Y3J5cHQuY29tcGF0aWJpbGl0eT1DMj1BMDwvZGl2Pg0KDQotLTAwMDAwMDAwMDAwMGI1OGFmYjA2NGU1ZjUzNDctLQ0KLS0wMDAwMDAwMDAwMDBiNThhZmMwNjRlNWY1MzQ5DQpDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3BncC1rZXlzOyANCgluYW1lPSJmbG93Y3J5cHQtYmFja3VwLW1hcnRyb2JsZXNpdGdtYWlsY29tLTY3QkVFMUEwMUZCNzFEMzY4MDQyNzZBMDhDREJCOEM4MDU5QTJBRjUuYXNjIg0KQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgDQoJZmlsZW5hbWU9ImZsb3djcnlwdC1iYWNrdXAtbWFydHJvYmxlc2l0Z21haWxjb20tNjdCRUUxQTAxRkI3MUQzNjgwNDI3NkEwOENEQkI4QzgwNTlBMkFGNS5hc2MiDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQNCkNvbnRlbnQtSUQ6IDxmX21uZmxyazQyMD4NClgtQXR0YWNobWVudC1JZDogZl9tbmZscms0MjANCg0KTFMwdExTMUNSVWRKVGlCUVIxQWdVRkpKVmtGVVJTQkxSVmtnUWt4UFEwc3RMUzB0TFFvS2JGRlhSMEpIYlhweVFqUkNSRUZETWxkcA0KZVV3NGQzUTNjMk14V1ZWVFNWcEpUVzlLYkVkc1kxcEZNSFY1SzFkS1NIRTFVVGhWWlhnclUxaHVia1Z5TWdvMVdteDZPSFp5UTNwTQ0KUW1KVWVqWkpPRlUzUlV4MGFWQnRia1ZTWjNwUFVUZElSeTlOTkdkck1WQkpka1poZUd0a1VUQlhTMnhwY21kelFXVjBXVmcwQ2xOUA0KYm1wM2NEUm5jWEUzUjJZNFdrdENaMDlrUjNSb1FrNXRkamhuVlZWWGFIbEhiekZRVTBaamFrY3hNbmd3UzNkSWVqVnpPRGxpTXpJeg0KVGxGcFlsWUtUMkpRUjFFek1ERjJlbEl2T1ZSdlEydHpOV0V3Y0VNd1pXVXhhM2h0WVVJMFdEQTBRM2RVTDJGc2JVeEZUVWR0UjFGMg0KYkZZM1FtSnJOMEpPWVhSaFZncEdUUzh3U1dKSWRsSXlSRTVHVVVoV01sUkJiRU5ZTTFNMFdqbFdTMlZQVEV0dWQzTlBSRTQxWjBGUw0KV2tsNWFsSmpOWGgwYkhadGVrbGpha1JNZG5ZNUNrVjZTRlF2ZDBkMVpXb3dlazUxVlZwTVNtZHlaVzQwYzB4T04xVjFlREJqUjJ4SQ0KY2tsVVRHNXhPRXR2U1UxbVdtcE1NSFJvYW5SSVYwTlFhall2UzJZS2JsbFJUWFl6YzNGeGQzSXpMMlJtWjJWbFEyaEpSbEl4WVVsQg0KT0Znd1dUVlhkR0ZPWWk5d2JIQklkR3gyVFVGaWRuRnRNV1Y1YlZWeWRubGlRMG80TmdwS1JUbFJRa05WTmpWM05tUlBZbTE2WmxCQw0KTWtWRlIwOUVWV3BpV0hwQk5YbFVXbmR1UzJ4UFoxTjVTblJLVjNwWFpsRlpjVmhMVmtKTldVcHRRbU5CQ21aa2VFSlJNMDlHTm14Vg0KUWtSS09FRkZVVVZCUVdZMFNFRjNTV3hVZGtONWFVSnVTMGd2ZWtZemFTOVdhWEIzSzNobGRsTjFaV3BGUWxWbk1qQTVVMjhLV1hGSw0KZUhJM1JYRkhVaXQ1TUVwUlZqUjJkbGxpUkZZMVRUZDNlV0ZDVTJveWNHUk1XbXBGZUdFME5EbHRUMmxrZUVwTVptWmlZak01TWtWMw0KTWtsWlpncFNlbTUwV0ZGNGMyOXNlR1ZCWlVaVVQxWlNSVEIxVFRSTGJtdFlhbXhKYUdkcksxcDFXRmhvY0c5WVNESlVkbHBsYnpSeg0KTjBSc2RrVnRSekpvWkdVMUNqVnhSVVY1WXpkcFoyZHplVkp2WmtWVFdUZEVTMEZ6TlROaVdYZFpObVJYUW1sYVdqVmpNV0ptYml0Rg0KUVZKWmNsWlRNVmR3Y1dKMWFFeFdWWGR3YWpJS2RtSlNUMkZrUTNsamFtRnhZa3N5VWxWM1NFdGpNeXN2VTJKRGJtTmphelpxVG5wNQ0KV1c5b1JGWk1kbFV3TkVwdlJUZzFablJFUW1OTFJraEtkSEYzTkFwSVRUWnFhek4zZFd3elQyOVNTblJHTTJzM01XZEdjalY1WW1oeQ0KTVVkNVVtRXJRVGRUVVhoQ1RsTTJjbGsxUkdSalNuaEJPV0l5YmxBNGNXMUhNVWhPQ21aVmFVdFBSMUJvVmpodFVIRldlVzFaWkRkcg0KVmxVd1RtUTFjR2d4V1RCWGFEaGhPRWt3TVROdWMzUjJVVWRrTTBFNE5GWjNiM1V6UW1Fd1NGZ3paRGNLVm01a1VHMVlkek5OYUhRdw0KUWxWb2NuZENibFpwUnpoUlJubG1PR1ZQV2xobVJqUTJkek5UTWtsQ05VSjBOalJPZWs1blQxWmFjVWhzVkZOb1ZYaG5iZ3ByWm05dw0KWW5weFFqTjBhbEpsWkdoc2VuTmxhRVV5VlZNdldrcG9ZM1JuVUc4MFRWSnVLM2RDTUd0T1ZVSkdUWGxvZGxaMWVXeG5SeXRSZGxrMQ0KVms1MkNtbEZjVTVrUkZKamVVcEdXV0pGTUVwVU1taE5TRlJsVG0xSGRYbFlXazA1U0hoU01HUmhVa3N5T0ZKdGEzQjJTM2RzUm5WVQ0KV1RKdFIyaGlXRXd6TlRFS1luUjBOMk5FTkhwWFV6UmFSbWRPUkd4R1RsVkdURXh3U1ZKMFpEWkdOMUZ1T1U4eFpGazJVMlpTYXk5eA0KUTNKU1VqaElVa3BYWmsxVmFuUXlNbFZJT1FwaGJHUnJPVzFLV0VsbVRtdFNVQ3RIVG14RlJUWTFUR2gzVVVnemVXTnZLMjFxVFdGWA0KTHpSdlRFRm1Ta2RyUVhscFdtOUVVa0UzZUVvcmRGZFJRMXBUQ2xNNWEydHJSVXRoWW1SVU1EY3JWV0ZSVW1rcmFXUm5VVmxzYjJ4Qw0KUVM5SldWSlpRbXR1ZVRSbFJrWmFLME4wYzNKeFFtcERiRVJvZFhGMFZHTnhRV0VLTWpSVmVuQkVXbmsxVVVGU2R5dDJaR0k0WlU5bg0KTVVKaU0zTXpUa280VFVkVVVrMWlNbUZYWTBKSE1FOVZja2hpWms1RGFtcFZOa3BFVkUxT09YWklTZ3BZUjBOVlZXOU9SVUZQYmxSWg0KZFdkVFJVazBiMDFuVTJ4RVJqWlpSa1J0Y1hwaWFVOHpaamhMTmxScllXZDNUREp1VUZBd2NHRnFha1puZVdOM1NGQTBDbmRUZDNkSw0KVVdKNEswMDFXbkZqUlZOVk5uQmplVmh0Y1VvNGRYVTNkM0pWYzNwdk9VUkVZVWt4ZURCTlpWVlVORFZOVlZKNldtaENWRVpIWm1SSA0KT0M4S09ISnZkMlpVYjFkUFNIRlNOMVUxYTFGTVVGcG5ZVVo1ZVVaQ1NXeFNSbXQ0VURWMU1YbEVZVGg1Tm5wTmRHWlBkalkzVm5GUg0KYm1jclMzaHpRMmh1Y0Fwd1REUkZPVE01ZUVGQ01DdFhUSE5rTUdaTlFqQXdVak13VERrNU0wMUNTV3RTVkhvelQzWllRV3BTVlV0Tg0KVERZeFRIcFRjRWx5ZEU5NFkyWnlRVUpvQ205S1dqUTBjWGw1TUhGUVJFcHdWSHBXY20xQlJrZHdhbEpqVVVnM01IUkpWR0pTZFhaRQ0KUkZwbWNsSnlPSEpKYzBwQk5sWkdVekZFUlhaRGNVRmtOWG9LVkRWd1JrYzBMMnh6Y0dkc2NERm1VVmxXVTJabmQyTmxRVkowY1dSaQ0KT0RsNll6VjVkVFZST0RkUWJYSlBTakpLY1hkMGJGRlhMMkpIVHpFM1JHeHVWUXB0VFZWdVN6Tk1XRUZqTTJ0Q1YzQTJXRVJRUjBsUQ0KU25WSFZsTnFMM1o0Y3pkSlVqVmlhSEJOYkZOV2FXRTVUM0phZFhoSGJraDZRM05DVG1sNE1qazFDazUzUlU5R1luTmxaRVp4VFROUw0KTWtveGJXNWFkM1ZQUTBabVRIQTVRemg0VHpkUldHUkhWbnBrUTBFNFpFZFdlbVJGUW14bFIwWjBZMGQ0YkV4dFRuWUtZbFEyU2tGaw0KUlVWRmQwVkpRVVJ6VjBsUlZGTmxlblZGWW1ZemNtaG5Xa3hUTjBOT2JsRXhXakpuWVdobFoxVkRZV0pQYzBoblNXSkJkMVZNUTFGbg0KU0FwQlowbHBRV2RaVmtObmEwbERkMGxGUm1kSlJFRlJTV1ZDZDBsWVowRkJTME5TUTA1dVVURmFNbWRoYUdWellWSkRMM05IVlhOTA0KY2tkNWNFTjRRWFpJQ2twUmIwbG5TekZPT0hCQlNYZGFWbmRXWWxjMU1FOUpWbFU0ZVdSeFVFMHdkV3N4WlVORFJXSXlhMmhzTUZKdQ0KVVdnMWJGaEJObmhRWmt0SFFYTm1kMWdLY0hwSFZXZzRXR1ZQYW1JNVltSk1kRGxhYVdod1VIaDRMMGxsWXpjeVZXazNWeTgxWWxsVg0KUkZwNFVpc3hOVXN2YTJaTVJUWnljbWxTZVZOT1NTdEZTUXBCZW5SSWJrNVZRbVIzWlhNd2FqWmhiV05hVW1SNWFFRm5PVlI2YUdOeg0KTWtvdk4zcDFTVWxEZDB3Mk1FdEhXbmhDU0UxcWFYbHpiakpYV0VSUmRqQm1DamwwYTNvdlJUaE5OSFoxWTFCTE5sZHpTM1p4Wm01eA0KVTJwb1Z5dHlOazlKV1ZadVlrTkRjekJoVXpOakwwaFFUemQwT1RaRmExVjNNelF4WXlzMldHd0tha1IxUmpsb1NXOUVVbXBhYzJwaQ0KTm5CWlluVTRLMlIyVjIxc1ZYRTNkM1EzYjJwaVN6SnVlbTl3WTNGNkt6QnRUelJ2ZUdrME0wWmFXbEIxYkVGSWRncFBWSFkwUmtWUQ0KZVVzd1NYYzVZMWwxTlhkclFXWnpiVEUwVmpaU2VWcG9OV1ozV2tGWVdYTnViRmRXTTBWaFdVZE5iVmRRUlZVdlRsRkxVVXBKWjFCMQ0KQ25GUGFuWXphSGhHZGtOb1ZrRm1PVkF3VEZGc2JHeEpTak5wY2xOa01tNUhjMWhWZG1sMFNHdGFUSGxhSzNObVVsTjVRV00zVjBReQ0KUkhSVk1qVXJjVmNLWmtwU2QwVnJhMEkzTXpOV1FrOVJNMlppYlZGcmRGRkpOMVZrV2twNWFqVXdia0Y2WkdwM1FrRnBTVEJqT1ZsSQ0KVjA5cFpFSlpXVVZoWWs5elNHZEZUUXBCVG5BelNVZFpSVzFYV0UxTk9FNU1TbWRDTkZsdmF6TlNLMjFYU2taeFpVeFllVlJ3TkdoUQ0KU2pSSGVFNW9OR3g1Yml0WFQxQTFPRTFZUTJoTVowZ3pDbmwwU2pONFVHeElkbkpPUnk5ak1XRm9hRmt3VWk5TVkxTlJSVTlSVVhsRg0KYUVaUmRIRnZia1ZrVFVKUVFqa3hlR0pEUm5kblEyY3ZXbll4WTA5eWFGVUtaemxCVTBSQ1lrTTNWRUZUTDJ4M0wyWlRiRUZ6WkZvMg0KYUhwSWFqWkZaRkJMZFRCdllqY3ZSRUpZYkZSWFZVdGtOVVpvT1VSVVJWTjFTVWhhVkU1eFpncGlhMDVrTDFGc2FuTjRUR2Q1Ym1SUg0KYkdKQldHZFNRblpVV1Zwc05FRnVVVlZuV2xSb1UySTVVMDlUYmpJd2NWVmhTV00yY2s1V05ETmxNemhHY1RkWENqTldOVzk0YVRKcQ0KZUZSYVVFSm5VVVZ4VG14NVVVdFVlWFJqTDB4a1UxVXhXakptUzA1TWMxQjViRTlGTlVKdVIyMXZXVFZ5WWtOTlJVOXBVblZHZDNnSw0KWkVoVVJ6VjRXR3RHUVRJeUsxTmlkRmM1V0VRelkxVnpPV2t4Y1dacVl6UkNNSEYzVjFsWlRGaERZemRKTW01c01qbFJibUp3WVM5VQ0KWmt3cldFVXhUQXBWYURsNGJuWkRjMkkwUmpjeGVuQTNSVkJvU0VoclIySkJRamh0V0dJNGIweFpTRXM0SzFGM1VWZG9VRnBKVjJReQ0KTDB0ck9EaGxWVXBGZFVGWE9TdEdDalpIU2pKWFdVSXpjMDFDVVVGUFJIQkNlWEZyTjJ0c1NsVkNObEZXTHpOWFdIRjJVVEpETXl0UA0KVWtKWmFVVnRWVkZxVlZGMVYxUk5ibTVNWmtWeFZtc0tZbEZCVWtGUlFVSXZaMk5FUVhKQmFEWnRWR05KVVdJM0wwSlhiRGM1YUcxUg0KV1dKdFMyMXRURlU0V1hCbWJrcElSRkl2VEUxNmR6Qm1aMmRpTTBWc1ZBbzVObEphWmtscFlUY3JNa2RGZURCcVNGSmFhWGxJVDFCaQ0KVWpRMlNtdHdkVkZUVTBsWVpFdDZLM2RPTWpKSlNsUkxPVVkzU2xaemNrcGtNME42VlM5bkNuTnRjRVpoTkVveGVucFNNMDAxTUZaQw0KTlRGWmRuQXJMM1psWWpkR05ITlhVR0pXVEU1eWNsZHRUMWgzZVc1bWFHbE5TR0pDZW1SWU9VNU9lbkZ1VkRNS1RFSlpVVk15UjNSag0KYkc5UWJVSm5SRXhXVjA1dGNrZENlRmhSTjFSdlIycFNSSFYxVm1KUU56VXhjR3gwTldNdk0zVlhhREZvVlVWaU1XVmhTV2RwUWdwbA0KWVdGa1NFeENSVzFIZFU4M2JGUTBNMmxUYmk5VmRtNXBUM0pIVFZOeE5tMU9MMVIwZUVwd1dISkVaVE5IYmtaNlNrbHZjek5OT1RoTw0KTDJaQ1ZEazJDbEJhU1N0V1NtVnlSSFpTYlVNeFVraGhjRE0xYzJZeFEwWjBRalJGUW5WaVVtWk5Wbmg0YmxsalJYb3JXazFMZDB4Sg0KVGxsMWEzTjNLMHhGZWtFeFptSUtTVUptWWxaV1dsTXhjVVZDUWxOUk5YRXpNbVpMWm5JclVtczFiSGhtTW1ad1VVNUZWVFZZZVVaUg0KTTFkQk1ubDJVVVUxTDJwcWRXNTNNRlI0YjJ4b0t3bzBRM3B0VmtWQmIzSm9la2RsVEd0RkwzRklWWGt6ZUdNd1ZXWjVLMkZMYTA5Ng0KTkZsVGVEaHVjM0puYlhVMGJuQkRaMHhHWmt0SVUySXZiRUkxVWtNMkNtZzRVRGhyYlZOT016aGhlbEozWW1kWlRscE5XRkJZVW5kSw0KYkVsbE5WWkJkRXg0UmtkSldIQjRiVGgyVEc0MGFrOTJPSFI2VDFaYVNHRkpUblF6WmlzS04yeEtjMFZJVTJrd2NtNWFURVIxZDNKMw0KTVdOMGQxZHFiVkJVUmpKVVduUmtiVTEwY0d4bVEzazNOMHhDZHpsaU5rbGlkVFpyUnpaUFYxVTNkVUZ5UlFwSldtMHliR3BMSzFKVg0KVG1SWUt6aHJjRE5rWkVOUmR6TlpjVGt4TjNCSVYwUXZRVTk2WlRCaE9YUjViblpUTURsMWIwSjViMk5xWnpGRVZ6WlNSMVpMQ2xCbA0KV0d4UFZEUmpObEpzU0ZFdk1HeEtkbkZsY0dWRE56bHFlWEJUY0VOa2NrTk5UV2R0T0VaTGFEWnRXbTlYYzFadU0yTmpkV2hoZURKSQ0KTHpoTFVpOEtNRTAzV1RsVVUxSlRXWEJrVlRCdVFTOUlNa2RuWVhOeU1XRktOSEphVjNoU1UybDNVREp6U3l0Nk5IRnRXa1p3VjBOaw0KYlRWME1XUlVLMVZMVHpCRFZRcFlTRXMzZW14TWFrcDJSV0o2VEdSc2NVZENWeTlHY21Kd2RUUkhNa1ZEUm5sQ1oxaEtjVzFZTnk5Tw0KYmpFM1Z6bHRlamRGUkdkWmRsTkxWVW8ySzJadUNtMW1jMVFyZFVob2FXdzViRGREZDBkdWNHZEpja1paY0ZCeE5YTkNaVmRuYmtaRQ0KUVVKaGVIUm5SWEZQZUdSWVNUaEJWQzlWYkhOT2RqSTVOMjlRWVhVS1Z6Wm9UbXRxVlVwMWVqWmphMVppUmxCVVpVYzNXRlJ2U0VkMg0KYm1aNWJVWkRXRVJDVFVocmNWZFpNVkY0U2xjdk1WVmxTVk5TZVVOelVERm9USEJ4VFFwM2NUTjZPWFZhTm5KTFdrRlJPWGxCVTAxUw0KTVdSWU9WSmxXVWt5UkZWWEsxTk9Na3hOZDNKelIzVllORFpVTm0xR1JHbHVNSFZ5VjFoRFpXTllVRE5DQ25wWU5tbEVSR1ZVVUU5Qg0KTm5CWlp5OVRUV2hJY2tnMVYweElkVFJZTXpSRU0yUlVjRFJsYTJaVFZWWkNSWGRtUmxkQ2JHeGljRzVrT0c1VksxVkVTbWdLTHl0Sg0KYmtwUWNHbGhVM3BzUWpoVFVrOURVRWx5VDBOUVNtSTJhekZIVG10UlJXbHFVMnRIVTFkbFNpdHdTVFphY1dWNmVVeHFhVmhyTVVKTQ0KTDA1bWJBcFBkamh3YjFST0wyYzVNVzlCTm13dk1tUldRV0U1UWsxU1lrNXlMMmRyUW0xeFQyMHJVVTluVERKelpHeDVZWGxFTVhCbQ0KVEVnd1VXMVVObFZ5VGxSSkNsZHBaRkJRYm5vNE5rRndSMmRUTW5OTlYxWTFkMjFHY1dZMVVISlJkV014TURZM2NUZExlSFZJTURKNQ0KTlVRNWNFMW9VRGt5Ym5SV1dHTkJWRGQwU3pjS1dUbE1kV3R0UmpWa1IxZExkR2xNVUc0MGFuRnBVVWN5UWtKblFrTkJRV2RHYVVWRg0KTUc1ek4yaEhNemsyTkZsSFV6QjFkMnBhTUU1WFpHOUhiMWh2UmdwQmJXMTZja0kwUTBkM2QwRkRaMnRSYWxvd1RsZGtiMGR2V0hCUQ0KTlZGMkswNW5aVUV2YzNKTFFqWkpObnBQV1ZwTVFUQk9jSGhRVjBkck9HZDBaVEJzQ2xKc2JuUk1aSFpoSzJSMmFrOUNhRTVETlVGRA0KVlVKVWVYcHBja0phVVZWUlJISkxNblIyZUV0MVZYRm9OazFsYjFwMGVERm5RbVYxTTFnelVqSmpkVklLVmsxWlMwUkJhV0Y2Y2tvdw0KVDJ4dWQxRmhVemRCVTBoaVkweE9SV1ZhYmxsTU9FcG9Ua05PT0dsUlNtRkZjR1JyZW1WTlVqUlVlRXhXZUZSUFFpOVNjd29yVWxOVg0KUjJOM1lVMVNVRE4zYVhOb1lrNTZhWGM0ZUhKdGNFTmlaVEJ0UVRaVFZIZ3pSemhIT1ROWE9HWkZPRTByV1daNlNFaE9WVmRYWXl0Sg0KYUcxNkNsaFBVbWQ0VkROWGNteHNlRWQxVjB4cFVtcExUemxUZEZScVlXVXhja0l4WVdrNWNIbEJLMlpYSzI1VVlqazBZMFJ6YkVwbg0KTlU1UmJDOXNlRzFzUzJjS1JsWjBjamRzVG1GWGRGQkxXbkp3VW5ONlJqRkpOMFV2VTB4NmJVVmpSMmRUTTFWcmRtbFlaMk00YWtSaQ0KSzNwTkwzWndLMmxZT0ZKWVlYWnpWMEpJTXdwWWJsSlZNVXBPYUVGblFWa3JiVTVsTm1GeWNqRnJkMXBrTHpKUlJXcEJiR3BhVTNkUA0KVGtNeGRXdEZLemRaYjFGTVYzTktkME5hTVVwNkswMVFRemxIQ2xodmIzbFZORFp3VDNJcmJEVTJNMmRoV1daRmNHMVhieXRtZVUxRw0KYVZKVU1VazNORFJQTUdGWWNISnBUVEJ6V1ZSbWR6TllkelF6VDJKMU9VRXZiRGdLYVVOUmJsZ3pXVUZGWW5kRlNUVmlhMjA1ZFN0Tg0KTjFkWWNHMTRNR2RIV1VzS1BVaElOR0VLTFMwdExTMUZUa1FnVUVkUUlGQlNTVlpCVkVVZ1MwVlpJRUpNVDBOTExTMHRMUzBLDQotLTAwMDAwMDAwMDAwMGI1OGFmYzA2NGU1ZjUzNDktLQ0K", + "historyId": "1494870", + "internalDate": "1775021157000" + } +} \ No newline at end of file diff --git a/test/source/tests/decrypt.ts b/test/source/tests/decrypt.ts index 4053b42248d..92722f154c4 100644 --- a/test/source/tests/decrypt.ts +++ b/test/source/tests/decrypt.ts @@ -118,6 +118,33 @@ export const defineDecryptTests = (testVariant: TestVariant, testWithBrowser: Te }) ); + test( + `decrypt - backup key received from a different sender shows warning message`, + testWithBrowser(async (t, browser) => { + const threadId = '19d4781fca9d303d'; + const { acctEmail, authHdr } = await BrowserRecipe.setupCommonAcctWithAttester(t, browser, 'compatibility'); + const inboxPage = await browser.newExtensionPage(t, `chrome/settings/inbox/inbox.htm?acctEmail=${acctEmail}&threadId=${threadId}`); + await inboxPage.waitForSelTestState('ready'); + await inboxPage.waitAll('iframe'); + const backupFrame = await inboxPage.getFrame(['backup.htm']); + await backupFrame.waitForContent( + '@backup-message-text', + 'This message contains a private key received from sender@domain.com. Import only if you intentionally sent this to yourself or received it from your administrator.' + ); + await inboxPage.close(); + const gmailPage = await browser.newPage(t, `${t.context.urls?.mockGmailUrl()}/${threadId}`, undefined, authHdr); + await gmailPage.waitAll('iframe'); + const backupFrameFromGmailPage = await gmailPage.getFrame(['backup.htm']); + await backupFrameFromGmailPage.waitForContent( + '@backup-message-text', + 'This message contains a private key received from sender@domain.com. Import only if you intentionally sent this to yourself or received it from your administrator.' + ); + const importButton = await backupFrameFromGmailPage.waitAny('#action_import_key'); + expect(await importButton.evaluate((el: Element) => el.textContent?.trim())).to.equal('Import Private Key'); + await gmailPage.close(); + }) + ); + test( `decrypt - show remote images`, testWithBrowser(async (t, browser) => {