Questions
1. Terms Questions
b. In your words, please explain the difference between (Conversions/Impressions) and eCPM.
• eCPM is the revenue per impression. The units for this metric is dollars/per thousand emails.
• Conversions/Impressions is the number of actions that result in a payout per impression. This metric tell us how many offers resulted in a payout, it does not give us any insight about the revenue. Even if the conversions/impresions metric is the same for two observations, eCMP can vary greatly depending on the payout values.
Calculating the ratio of eCMP and conversions/impressions can tell us how much the average payout is for each conversion.
(Revenue/Impressions)*(Impressions/Conversions) = Revenue/Conversions
d. Using any combination of the above variables (from the terms list) create two new statistics and explain what these statistics mean and what they could be used for.
• Clicks/Impressions: Use this metric to assess the performance of an offer on the impressions level. (we can analyze this rate along with Conversions/Impressions)
• Conversions/Clicks & Conversions/Delivered: Similar to Click Rate and Click Through Rate, these metrics describe the rate at which users perform an action that results in a payout (per click/per delivered) and it can used to analyze the actions required for each offered.
2. Quantitative Analysis - Offer in Depth
a. Using the 4915 tab in Excel, summarize the performance of this offer compared to the stats in the Dataset Averages tab.
i. According to this analysis, should we continue to market this offer to our consumers?
Based off of these averages, I think this offer can be continued. eCPM, CTR, Click Rate, and Open Rate are higher.
b. Using the 4915 tab only, what is the strongest relationship you can find between eCPM and an other statistic pertaining to 4915? Please explain your method and thought process used in this analysis.
i. Conceptually, explain why this relationship does or doesn’t make sense.
eCPM has the highest correlation with Click through Rate.
eCPM = Revenue*1000/Delivered and CTR = Clicks/Delivered
For eCPM and CTR to be correlated, Clicks and Revenue also have to be highly correlated based off of the equations above. This relationship makes sense, the amount of revenue can be expected to increase as more people click on the link in an email.
Method
I analyzed the relationship between these statistics using Pearson’s Correlation Coefficent Matrix, which describes the linear relationship between two variables in a data set. The highest correlation coefficient for eCPM is +0.826 with Click Through Rate.
Scatterplot: eCPM vs. CTR

Scatterplot: Clicks vs. Delivered

3. Qualitative Analysis - Offer and Execution
i. Using the ‘Marketing Schedule’ tab in the attached excel file, how would you adjust your home security offer rotation to these users given the results from the test analyst?
1. Feel free to change the vertical gaps, offer gaps, and offer rotations, but please provide an explanation of why you made the changes you did.
2. Fee free to make assumptions and apply them to your marketing schedule, please just state what they are and why you are making them.
Given the results from the test analyst and the previous marketing schedule, I am assuming that the best performing offers should be sent more frequently and I also assume that 6 days is still the ideal gap between offers in the Home security vertical. The offer gap for the new schedule is 18 days and the schedule starts with Day 1: 4935-Vivint Home Security.
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgd29yZF9kb2N1bWVudDogZGVmYXVsdAotLS0KCmBgYHtyLGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoZm9ybWF0dGFibGUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoRFQpCmxpYnJhcnkoeHRhYmxlKQpgYGAKCiMgUXVlc3Rpb25zIAoKCiMjIDEuIFRlcm1zIFF1ZXN0aW9ucwoKIyMjIyBhLiBJbiB5b3VyIHdvcmRzLCBwbGVhc2UgZXhwbGFpbiBob3cgZGVsaXZlcmVkLCByZXZlbnVlIGFuZCBlQ1BNIGFyZSByZWxhdGVkLgoKICAgICAgICAgICAgICAgICAgICAgICAgICBlQ1BNID0gUmV2ZW51ZSoxMDAwL0RlbGl2ZXJlZAoKIyMjIyMg4oCiCWVDUE0gaW5jcmVhc2VzIHdoZW4sCgoKCiAgbwlSZXZlbnVlIGluY3JlYXNlcyBhbmQgdGhlIG51bWJlciBvZiBlbWFpbHMgZGVsaXZlcmVkIHJlbWFpbnMgY29uc3RhbnQgb3IgZGVjcmVhc2VzLgoKCiAgbwlUaGUgbnVtYmVyIG9mIGRlbGl2ZXJlZCBlbWFpbHMgZGVjcmVhc2VzIGFuZCByZXZlbnVlIHJlbWFpbnMgY29uc3RhbnQuIAoKCiAgbwlCb3RoIFJldmVudWUgYW5kIHRoZSBudW1iZXIgb2YgZW1haWxzIGRlbGl2ZXJlZCBpbmNyZWFzZSBidXQgcmV2ZW51ZSBpbmNyZWFzZXMgYnkgYSBncmVhdGVyIGZhY3Rvci4KCgogIG8JQm90aCBSZXZlbnVlIGFuZCBEZWxpdmVyZWQgZGVjcmVhc2UgYnV0IHRoZSBudW1iZXIgb2YgZGVsaXZlcmVkIGRlY3JlYXNlcyBieSBhIHNtYWxsZXIgZmFjdG9yLgoKICAKCiMjIyMjIOKAogllQ1BNIGRlY3JlYXNlcyB3aGVuLAoKCgogIG8JUmV2ZW51ZSBkZWNyZWFzZXMgYW5kIGRlbGl2ZXJlZCByZW1haW5zIGNvbnN0YW50IG9yIGluY3JlYXNlcy4gCgoKICBvCURlbGl2ZXJlZCBpbmNyZWFzZXMgYW5kIHJldmVudWUgcmVtYWlucyBjb25zdGFudC4KICAKCiAgbwlCb3RoIFJldmVudWUgYW5kIGRlbGl2ZXJlZCBkZWNyZWFzZSBidXQgcmV2ZW51ZSBkZWNyZWFzZXMgYnkgYSBzbWFsbGVyIGZhY3Rvci4KCgogIG8JQm90aCBSZXZlbnVlIGFuZCBkZWxpdmVyZWQgaW5jcmVhc2UgYnV0IGRlbGl2ZXJlZCBpbmNyZWFzZXMgYnkgYSBncmVhdGVyIGZhY3Rvci4gCgoKCiMjIyMgYi4gSW4geW91ciB3b3JkcywgcGxlYXNlIGV4cGxhaW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAoQ29udmVyc2lvbnMvSW1wcmVzc2lvbnMpIGFuZCBlQ1BNLgoK4oCiCWVDUE0gaXMgdGhlIHJldmVudWUgcGVyIGltcHJlc3Npb24uIFRoZSB1bml0cyBmb3IgdGhpcyBtZXRyaWMgaXMgZG9sbGFycy9wZXIgdGhvdXNhbmQgZW1haWxzLiAKCuKAoiBDb252ZXJzaW9ucy9JbXByZXNzaW9ucyBpcyB0aGUgbnVtYmVyIG9mIGFjdGlvbnMgdGhhdCByZXN1bHQgaW4gYSBwYXlvdXQgcGVyIGltcHJlc3Npb24uIFRoaXMgbWV0cmljIHRlbGwgdXMgaG93IG1hbnkgb2ZmZXJzIHJlc3VsdGVkIGluIGEgcGF5b3V0LCBpdCBkb2VzIG5vdCBnaXZlIHVzIGFueSBpbnNpZ2h0IGFib3V0IHRoZSByZXZlbnVlLiBFdmVuIGlmIHRoZSBjb252ZXJzaW9ucy9pbXByZXNpb25zIG1ldHJpYyBpcyB0aGUgc2FtZSBmb3IgdHdvIG9ic2VydmF0aW9ucywgZUNNUCBjYW4gdmFyeSBncmVhdGx5IGRlcGVuZGluZyBvbiB0aGUgcGF5b3V0IHZhbHVlcy4gIAoKICAgIENhbGN1bGF0aW5nIHRoZSByYXRpbyBvZiBlQ01QIGFuZCBjb252ZXJzaW9ucy9pbXByZXNzaW9ucyBjYW4gdGVsbCB1cyBob3cgbXVjaCB0aGUgYXZlcmFnZSBwYXlvdXQgaXMgZm9yIGVhY2ggY29udmVyc2lvbi4gCgogICAgICAgICAgICAgICAgICAgIChSZXZlbnVlL0ltcHJlc3Npb25zKSooSW1wcmVzc2lvbnMvQ29udmVyc2lvbnMpID0gUmV2ZW51ZS9Db252ZXJzaW9ucwoKCgojIyMjIGMuIEluIHlvdXIgd29yZHMsIHBsZWFzZSBleHBsYWluIHRoZSBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mIHVzaW5nIEVQQyBhcyBhIG1ldHJpYyB0byBtZWFzdXJlIHBlcmZvcm1hbmNlLgoKRVBDIGlzIHRoZSBhbW91bnQgb2YgcmV2ZW51ZSBwZXIgY2xpY2suIFRoaXMgbWV0cmljIGlzIHVzZWZ1bCB0byB1bmRlcnN0YW5kIGFuZCBjb21wYXJlIHR3byBzaW1pbGFyIGNhbXBhaWducy4gSG93ZXZlciwgcmV2ZW51ZSBtYXkgdmFyeSB3aWRlbHkgZm9yIGVhY2ggY2xpY2sgc28gaXQgY2Fubm90IGJlIGFwcGxpZWQgdG8gY2xpY2tzIGluZGl2aWR1YWxseS4gVGhpcyBtZXRyaWMgZG9lcyBub3QgYWNjb3VudCBmb3IgdmFyaWF0aW9uIGFuZCBpdCBjYW4gYmUgZWFzaWx5IHNrZXdlZCBieSBvdXRsaWVycy4gRVBDIHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgd2hlbiBjb21wYXJpbmcgZ3JvdXBzIHRoYXQgYXJlIGFsaWtlIGJlY2F1c2Ugb2YgdGhpcyB2YXJpYXRpb24uIAoKCiMjIyMgZC4gVXNpbmcgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZSB2YXJpYWJsZXMgKGZyb20gdGhlIHRlcm1zIGxpc3QpIGNyZWF0ZSB0d28gbmV3IHN0YXRpc3RpY3MgYW5kIGV4cGxhaW4gd2hhdCB0aGVzZSBzdGF0aXN0aWNzIG1lYW4gYW5kIHdoYXQgdGhleSBjb3VsZCBiZSB1c2VkIGZvci4KCuKAoiBDbGlja3MvSW1wcmVzc2lvbnM6IFVzZSB0aGlzIG1ldHJpYyB0byBhc3Nlc3MgdGhlIHBlcmZvcm1hbmNlIG9mIGFuIG9mZmVyIG9uIHRoZSBpbXByZXNzaW9ucyBsZXZlbC4gKHdlIGNhbiBhbmFseXplIHRoaXMgcmF0ZSBhbG9uZyB3aXRoIENvbnZlcnNpb25zL0ltcHJlc3Npb25zKQoK4oCiIENvbnZlcnNpb25zL0NsaWNrcyAmIENvbnZlcnNpb25zL0RlbGl2ZXJlZDogU2ltaWxhciB0byBDbGljayBSYXRlIGFuZCBDbGljayBUaHJvdWdoIFJhdGUsIHRoZXNlIG1ldHJpY3MgZGVzY3JpYmUgdGhlIHJhdGUgYXQgd2hpY2ggdXNlcnMgcGVyZm9ybSBhbiBhY3Rpb24gdGhhdCByZXN1bHRzIGluIGEgcGF5b3V0IChwZXIgY2xpY2svcGVyIGRlbGl2ZXJlZCkgYW5kIGl0IGNhbiB1c2VkIHRvIGFuYWx5emUgdGhlIGFjdGlvbnMgcmVxdWlyZWQgZm9yIGVhY2ggb2ZmZXJlZC4gCgoKIyMgMi4gUXVhbnRpdGF0aXZlIEFuYWx5c2lzIC0gT2ZmZXIgaW4gRGVwdGgKCiMjIyMgYS4gVXNpbmcgdGhlIDQ5MTUgdGFiIGluIEV4Y2VsLCBzdW1tYXJpemUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMgb2ZmZXIgY29tcGFyZWQgdG8gdGhlIHN0YXRzIGluIHRoZSBEYXRhc2V0IEF2ZXJhZ2VzIHRhYi4KCiMjIyMgaS4gQWNjb3JkaW5nIHRvIHRoaXMgYW5hbHlzaXMsIHNob3VsZCB3ZSBjb250aW51ZSB0byBtYXJrZXQgdGhpcyBvZmZlciB0byBvdXIgY29uc3VtZXJzPwoKQmFzZWQgb2ZmIG9mIHRoZXNlIGF2ZXJhZ2VzLCBJIHRoaW5rIHRoaXMgb2ZmZXIgY2FuIGJlIGNvbnRpbnVlZC4gZUNQTSwgQ1RSLCBDbGljayBSYXRlLCBhbmQgT3BlbiBSYXRlIGFyZSBoaWdoZXIuCgpgYGB7cixlY2hvPUZBTFNFfQpNZXRyaWMgPC0gYygiZUNQTSIsICJDVFIiLCAiRVBDIiwgIkNMUiIsICIjIERyb3BzIiwiQ2xpY2sgUmF0ZSIsICJDbGlja3MiLCAiRGVsaXZlcmVkIiwgIk9wZW4gUmF0ZSIsICJPcGVucyIsICJSZXZlbnVlIikKT2ZmZXJfMSA8LSBjKDMuODgsIDAuMDA2MiwxLjI2LCAwLjAwOTMsIDE0NzY3LCAwLjA0NjAsIDM4MzQwOTEsIDg3NjUyNTk3MiwgMC4xNDAzLCAxMDQ5NjM0MjMsIDM0MDIyMjEuMTQpCk9mZmVyXzIgPC0gYyhtZWFuKGRhdGEkZUNQTSksIG1lYW4oZGF0YSRDVFIpLCBtZWFuKGRhdGEkRVBDKSwgbWVhbihkYXRhJENMUiksIHN1bShkYXRhJGAjIERyb3BzYCksIG1lYW4oZGF0YSQnQ2xpY2sgUmF0ZScpLCBzdW0oZGF0YSRDbGlja3MpLCBzdW0oZGF0YSREZWxpdmVyZWQpLCBtZWFuKGRhdGEkJ09wZW4gUmF0ZScpLCBzdW0oZGF0YSRPcGVucyksIHN1bShkYXRhJFJldmVudWUpKQoKb3B0aW9ucyhzY2lwZW4gPSA1MCkKZGYgPC0gZGF0YS5mcmFtZShNZXRyaWMsIE9mZmVyXzEsIE9mZmVyXzIpCgpkZl8yID0gZGYgJT4lIG11dGF0ZShDaGFuZ2UgPSBkZiRPZmZlcl8yIC0gZGYkT2ZmZXJfMSkKCmN1c3RvbUdyZWVuMCA9ICIjRGVGN0U5IgpjdXN0b21HcmVlbiA9ICIjNzFDQTk3IgpjdXN0b21SZWQgPSAiI2ZmN2Y3ZiIKCmltcHJvdmVtZW50X2Zvcm1hdHRlciA8LSBmb3JtYXR0ZXIoInNwYW4iLCBzdHlsZSA9IHggfiBzdHlsZShmb250LndlaWdodCA9ICJib2xkIiwgY29sb3IgPSBpZmVsc2UoeCA+IDAsIGN1c3RvbUdyZWVuLCBpZmVsc2UoeCA8IDAsIGN1c3RvbVJlZCwgImJsYWNrIikpKSwgeCB+IGljb250ZXh0KGlmZWxzZSh4PjAsICJhcnJvdy11cCIsICJhcnJvdy1kb3duIiksIHgpKQoKZm9ybWF0dGFibGUoZGZfMiwgYWxpZ24gPWMoImwiLCJjIiwiYyIsICJyIiksIGxpc3QoYEluZGljYXRvciBOYW1lYCA9IGZvcm1hdHRlcigic3BhbiIsIHN0eWxlID0gfiBzdHlsZShjb2xvciA9ICJncmV5Iixmb250LndlaWdodCA9ICJib2xkIikpLCAgIE9mZmVyXzE9IGNvbG9yX3RpbGUoY3VzdG9tR3JlZW4sIGN1c3RvbUdyZWVuMCksCk9mZmVyXzI9IGNvbG9yX3RpbGUoY3VzdG9tR3JlZW4sIGN1c3RvbUdyZWVuMCksIGBDaGFuZ2VgID0gaW1wcm92ZW1lbnRfZm9ybWF0dGVyKSkKYGBgCgojIyMjIGIuIFVzaW5nIHRoZSA0OTE1IHRhYiBvbmx5LCB3aGF0IGlzIHRoZSBzdHJvbmdlc3QgcmVsYXRpb25zaGlwIHlvdSBjYW4gZmluZCBiZXR3ZWVuIGVDUE0gYW5kIGFuICBvdGhlciBzdGF0aXN0aWMgcGVydGFpbmluZyB0byA0OTE1PyBQbGVhc2UgZXhwbGFpbiB5b3VyIG1ldGhvZCBhbmQgdGhvdWdodCBwcm9jZXNzIHVzZWQgaW4gdGhpcyBhbmFseXNpcy4KCiMjIyMgaS4gQ29uY2VwdHVhbGx5LCBleHBsYWluIHdoeSB0aGlzIHJlbGF0aW9uc2hpcCBkb2VzIG9yIGRvZXNuJ3QgbWFrZSBzZW5zZS4KCmVDUE0gaGFzIHRoZSBoaWdoZXN0IGNvcnJlbGF0aW9uIHdpdGggQ2xpY2sgdGhyb3VnaCBSYXRlLiAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZUNQTSA9IFJldmVudWUqMTAwMC9EZWxpdmVyZWQgYW5kIENUUiA9IENsaWNrcy9EZWxpdmVyZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKRm9yIGVDUE0gYW5kIENUUiB0byBiZSBjb3JyZWxhdGVkLCBDbGlja3MgYW5kIFJldmVudWUgYWxzbyBoYXZlIHRvIGJlIGhpZ2hseSBjb3JyZWxhdGVkIGJhc2VkIG9mZiBvZiB0aGUgZXF1YXRpb25zIGFib3ZlLiAKVGhpcyByZWxhdGlvbnNoaXAgbWFrZXMgc2Vuc2UsIHRoZSBhbW91bnQgb2YgcmV2ZW51ZSBjYW4gYmUgZXhwZWN0ZWQgdG8gaW5jcmVhc2UgYXMgbW9yZSBwZW9wbGUgY2xpY2sgb24gdGhlIGxpbmsgaW4gYW4gZW1haWwuIAoKCiMjIyMgTWV0aG9kCgpJIGFuYWx5emVkIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdGF0aXN0aWNzIHVzaW5nIFBlYXJzb24ncyBDb3JyZWxhdGlvbiBDb2VmZmljZW50IE1hdHJpeCwgd2hpY2ggZGVzY3JpYmVzIHRoZSBsaW5lYXIgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIHZhcmlhYmxlcyBpbiBhIGRhdGEgc2V0LiBUaGUgaGlnaGVzdCBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBmb3IgZUNQTSBpcyArMC44MjYgd2l0aCBDbGljayBUaHJvdWdoIFJhdGUuCgpgYGB7ciwgZWNobz1GQUxTRX0KbWNvciA9IGRhdGEuZnJhbWUoY29yKGRhdGExKSkKY29yID0gbWNvciU+JSBzZWxlY3QoZUNQTSkKCm5hbWVzKGNvcilbMF0gPC0gIk1ldHJpYyIKbmFtZXMoY29yKVsxXSA8LSAgIkNvcnJlbGF0aW9uIENvZWZmaWNpZW50IGZvciBlQ1BNIiAgICAgIApmb3JtYXR0YWJsZShjb3IsICBsaXN0KAogIGBJbmRpY2F0b3IgTmFtZWAgPSBmb3JtYXR0ZXIoInNwYW4iLCBzdHlsZSA9IH4gc3R5bGUoY29sb3IgPSAiZ3JleSIsZm9udC53ZWlnaHQgPSAiYm9sZCIpKSwgCiAgYENvcnJlbGF0aW9uIENvZWZmaWNpZW50IGZvciBlQ1BNYD0gY29sb3JfdGlsZShjdXN0b21HcmVlbiwgY3VzdG9tR3JlZW4wKQopKQoKYGBgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2F0dGVycGxvdDogZUNQTSB2cy4gQ1RSIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYHtyLCBlY2hvPUZBTFNFfQpnZ3Bsb3QoZGF0YSwgYWVzKGVDUE0sIENUUiwgY29sb3IgPSBEZWxpdmVyZWQpKSArCiAgZ2VvbV9wb2ludChzaGFwZSA9IDE2LHNpemUgPSAzLCBzaG93LmxlZ2VuZCA9IEZBTFNFLCBhbHBoYSA9IDAuNCkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgc2NhbGVfY29sb3JfZ3JhZGllbnQobG93ID0gIiMwMDkxZmYiLCBoaWdoID0gIiNmMDY1MGUiKQpgYGAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjYXR0ZXJwbG90OiBDbGlja3MgdnMuIERlbGl2ZXJlZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKYGBge3IsIGVjaG89RkFMU0V9CmdncGxvdChkYXRhLCBhZXMoUmV2ZW51ZSwgQ2xpY2tzLCBjb2xvciA9IERlbGl2ZXJlZCkpICsKICBnZW9tX3BvaW50KHNoYXBlID0gMTYsc2l6ZSA9IDMsIHNob3cubGVnZW5kID0gRkFMU0UsIGFscGhhID0gMC40KSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBzY2FsZV9jb2xvcl9ncmFkaWVudChsb3cgPSAiIzAwOTFmZiIsIGhpZ2ggPSAiI2YwNjUwZSIpCmBgYAoKCiMjIyBjLiBXaXRoIGFsbCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHlvdSBhdCB0aGlzIHBvaW50LCB3aGF0IGNoYW5nZXMgd291bGQgeW91IHJlY29tbWVuZCBiZSBtYWRlIHRvIDQ5MTUgb3IgaXRzIGF0dHJpYnV0ZXMgc28gdGhhdCB0aGUgb2ZmZXIgcGVyZm9ybXMgYmV0dGVyPwoKIyMjIyMgQXBwcm9hY2hlcwojIyMjIyAoMSkgRmluZCBiZXN0IHBlcmZvcm1pbmcgRGF0YSBWZXJ0aWNhbCBhbmQgU2VnbWVudCBncm91cC4KIyMjIyMgKDIpIENsdXN0ZXIgZ3JvdXBzIHRoYXQgcGVyZm9ybWVkIHRoZSBiZXN0IGJhc2VkIG9mZiBvZiBlQ1BNLCBDVFIsIGFuZCBPcGVuIFJhdGUgYW5kIGFuYWx5emUgZWFjaCBvZiB0aGVzZSBncm91cHMuCgoKCiMjIyMjIEJlc3QgRGF0YSBWZXJ0aWNhbCBhbmQgU2VnbWVudCBHcm91cApgYGB7ciwgZWNobz1GQUxTRX0KZGF0YTIgPC0gZ3JvdXBfYnkoZGF0YV8yLFNlZ21lbnQxLCBgRGF0YSBWZXJ0aWNhbGApCmRhdGEzIDwtIHN1bW1hcml6ZShkYXRhMiwKICAgICAgICAgICAgIk4iID0gbigpLAogICAgICAgICAgICAnZUNQTScgPSBtZWFuKGVDUE0pLAogICAgICAgICAgICAnQ1RSJyA9IG1lYW4oQ1RSKSwKICAgICAgICAgICAgJ09wZW4gUmF0ZScgPSBtZWFuKGBPcGVuIFJhdGVgKSwKICAgICAgICAgICAgJ0NsaWNrIFJhdGUnID0gbWVhbihgT3BlbiBSYXRlYCksCiAgICAgICAgICAgICdFUEMnID0gbWVhbihFUEMpLAogICAgICAgICAgICAnRGVsaXZlcmVkJyA9IHN1bShEZWxpdmVyZWQpCiAgICAgICAgICAgICkKCmZvcm1hdHRhYmxlKGRhdGEzLCBsaXN0KAogIGVDUE0gPSBjb2xvcl90aWxlKCJ0cmFuc3BhcmVudCIsICJsaWdodHBpbmsiKSwKICBDVFIgPSBjb2xvcl90aWxlKCJ0cmFuc3BhcmVudCIsImxpZ2h0Z3JlZW4iKSwKICBgT3BlbiBSYXRlYCA9IGNvbG9yX3RpbGUoInRyYW5zcGFyZW50IiwibGlnaHRibHVlIiksCiAgYENsaWNrIFJhdGVgID0gY29sb3JfdGlsZSgidHJhbnNwYXJlbnQiLCJ5ZWxsb3ciKSwKICBgRVBDYCA9IGNvbG9yX3RpbGUoInRyYW5zcGFyZW50IiwibGlnaHRwaW5rIiksCiAgRGVsaXZlcmVkID0gY29sb3JfdGlsZSgidHJhbnNwYXJlbnQiLCJvcmFuZ2UiKQogICkpCmBgYAoKIyMjIyMjIFJlc3VsdDogQmVzdCBwZXJmb3JtaW5nIGRhdGEgdmVydGljYWwgYW5kIHNlZ21lbnQgaXMgQ3JlZGl0IGFuZCBPMQoKIyMjIyMgSyBNZWFucyBDbHVzdGVyaW5nIApgYGB7ciwgZWNobz1GQUxTRX0Kc2V0LnNlZWQoNDE1KQpjbHVzdGVycyA8LSBrbWVhbnMoc2NhbGUoZGF0YVssYygyLDMsMTYpXSksIDMsIG5zdGFydCA9IDEpICMgUGVyZm9ybWluZyBrbWVhbnMgd2l0aCBSRk0gdmFyaWFibGVzIGFuZCBjcmVhdGluZyAzIGNsdXN0ZXJzLiAKZGF0YV8yID0gZGF0YQpkYXRhXzIkQ2x1c3RlciA8LSBhcy5mYWN0b3IoY2x1c3RlcnMkY2x1c3RlcikgCgpLTWVhbnNfUmVzdWx0cyA8LSBkYXRhXzIgJT4lCiAgZ3JvdXBfYnkoQ2x1c3RlcikgJT4lCiAgc3VtbWFyaXNlKAogICAgICAgICAgICAnZUNQTScgPSBtZWFuKGVDUE0pLAogICAgICAgICAgICAnQ1RSJyA9IG1lYW4oQ1RSKSwKICAgICAgICAgICAgJ09wZW4gUmF0ZScgPSBtZWFuKGBPcGVuIFJhdGVgKSwKICAgICAgICAgICAgJ0NsaWNrIFJhdGUnID0gbWVhbihgQ2xpY2sgUmF0ZWApLAogICAgICAgICAgICAnT3BlbiBSYXRlJyA9IG1lYW4oYE9wZW4gUmF0ZWApLAogICAgICAgICAgICAnQ2xpY2sgUmF0ZScgPSBtZWFuKGBPcGVuIFJhdGVgKSwKICAgICAgICAgICAgJ0VQQycgPSBtZWFuKEVQQyksCiAgICAgICAgICAgICdEZWxpdmVyZWQnID0gc3VtKERlbGl2ZXJlZCksCiAgICAgICAgICAgICdSZXZlbnVlJyA9IHN1bShSZXZlbnVlKSwKICAgICAgICAgICAgKQoKZm9ybWF0dGFibGUoS01lYW5zX1Jlc3VsdHMsIGxpc3QoCiAgZUNQTSA9IGNvbG9yX3RpbGUoInRyYW5zcGFyZW50IiwgImxpZ2h0cGluayIpLAogIENUUiA9IGNvbG9yX3RpbGUoInRyYW5zcGFyZW50IiwibGlnaHRncmVlbiIpLAogIGBPcGVuIFJhdGVgID0gY29sb3JfdGlsZSgidHJhbnNwYXJlbnQiLCJsaWdodGJsdWUiKSwKICBgQ2xpY2sgUmF0ZWAgPSBjb2xvcl90aWxlKCJ0cmFuc3BhcmVudCIsInllbGxvdyIpLAogIGBFUENgID0gY29sb3JfdGlsZSgidHJhbnNwYXJlbnQiLCJsaWdodHBpbmsiKSwKICBEZWxpdmVyZWQgPSBjb2xvcl90aWxlKCJ0cmFuc3BhcmVudCIsIm9yYW5nZSIpCiAgKSkKYGBgCgojIyMjIyMgUmVzdWx0cwoKIyMjIyMjIENsdXN0ZXIgMTogSGlnaGVzdCBSZXZlbnVlCiMjIyMjIyBDbHVzdGVyIDI6IExvd2VzdCBQZXJmb3JtaW5nIENsdXN0ZXIgYmFzZWQgb2ZmIG9mIGVDUE0sIENUUiwgT3BlbiBSYXRlLCBDbGljayBSYXRlIGFuZCBFUEMuIE1vc3QgRW1haWxzIERlbGl2ZXJlZC4KIyMjIyMjIENsdXN0ZXIgMzogQmVzdCBQZXJmb3JtaW5nIENsdXN0ZXIgYmFzZWQgb2ZmIG9mIGVDUE0sIENUUiwgT3BlbiBSYXRlLCBDbGljayBSYXRlLCBhbmQgRVBDCgpgYGB7ciwgZWNobz1GQUxTRX0KZ2dwbG90KGRhdGFfMiwgYWVzKHggPSBgRGF0YSBWZXJ0aWNhbGAsIHk9IGVDUE0sIGNvbG9yID0gQ2x1c3Rlciwgc2l6ZSA9IERlbGl2ZXJlZCkpICsgZ2VvbV9wb2ludCgpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpCgpgYGAKCiMjIyMgQ2hhbmdlcwoKSW4gdGhpcyBkYXRhIHNldCwgY2xpY2tzIGFuZCB0aGUgbnVtYmVyIG9mIGRlbGl2ZXJlZCBlbWFpbCBkbyBoYXZlIGEgaGlnaCBwb3NpdGl2ZSBjb3JyZWxhdGlvbi4gU2luY2UgUmV2ZW51ZSBhbmQgQ2xpY2tzIGFyZSBhbHNvIGhpZ2hseSBjb3JyZWxhdGVkLCBJIHdvdWxkIGxpa2UgdG8gdHJ5IGluY3JlYXNpbmcgdGhlIG51bWJlciBvZiBkZWxpdmVyZWQgZW1haWxzIHRvIGdyb3VwcyB0aGF0IHBlcmZvcm1lZCBiZXR0ZXIgaW4gdGVybXMgb2YgbWV0cmljcyBsaWtlIENUUiBhbmQgZUNQTS4gSG93ZXZlciwgaXQgaXMgbGlrZWx5IHRoYXQgaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIGRlbGl2ZXJlZCBlbWFpbHMgdG9vIG11Y2ggd2l0aGluIGVhY2ggZ3JvdXAgY291bGQgZW5kIHVwIHJlZHVjaW5nIHRoZXNlIG1ldHJpY3Mgc2luY2UgdGhlIHJhdGlvIG9mIHJldmVudWUgb3IgY2xpY2tzIHRvIGRlbGl2ZXJlZCBkZWNyZWFzZXMgYXMgZGVsaXZlcmVkIGluY3JlYXNlcy4gCiAKYGBge3IsIGVjaG89RkFMU0V9Cm1vZGVsMiA9IGxtKGVDUE1+IERlbGl2ZXJlZCArIENsdXN0ZXIsIGRhdGEgPSBkYXRhXzIpCmdncGxvdChkYXRhXzIsIGFlcyh4ID0gRGVsaXZlcmVkLCB5ID0gZUNQTSwgY29sb3IgPSBDbHVzdGVyKSApICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSkKYGBgCgoKSGVyZSBpcyB3aGF0IEkgd291bGQgZG8gYmFzZWQgb2ZmIG9mIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwKKDEpIFRyeSBpbmNyZWFzaW5nIHRoZSBudW1iZXIgb2YgZW1haWxzIGRlbGl2ZXJlZCBmb3IgR1JPVVAgU2VnbWVudDogTzEsIERhdGEgVmVydGljYWw6IENyZWRpdC4gKEJlc3QgUGVyZm9ybWluZyBTZWdtZW50IGFuZCBEYXRhIFZlcnRpY2FsKQooMikgSW5jcmVhc2UgdGhlIG51bWJlciBvZiBlbWFpbHMgZGVsaXZlcmVkIHRvIENsdXN0ZXIgMSBhbmQgQ2x1c3RlciAzLiAKKDMpIFJlZHVjaW5nIHRoZSBudW1iZXIgb2YgZW1haWxzIGRlbGl2ZXJlZCBpbiBDbHVzdGVyIDIuIAoKIyMgMy4gUXVhbGl0YXRpdmUgQW5hbHlzaXMgLSBPZmZlciBhbmQgRXhlY3V0aW9uCgoKIyMjIyBpLiBVc2luZyB0aGUgJ01hcmtldGluZyBTY2hlZHVsZScgdGFiIGluIHRoZSBhdHRhY2hlZCBleGNlbCBmaWxlLCBob3cgd291bGQgeW91IGFkanVzdCB5b3VyIGhvbWUgc2VjdXJpdHkgb2ZmZXIgcm90YXRpb24gdG8gdGhlc2UgdXNlcnMgZ2l2ZW4gdGhlIHJlc3VsdHMgZnJvbSB0aGUgdGVzdCBhbmFseXN0PwoKIyMjIyAxLiBGZWVsIGZyZWUgdG8gY2hhbmdlIHRoZSB2ZXJ0aWNhbCBnYXBzLCBvZmZlciBnYXBzLCBhbmQgb2ZmZXIgcm90YXRpb25zLCBidXQgcGxlYXNlIHByb3ZpZGUgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHlvdSBtYWRlIHRoZSBjaGFuZ2VzIHlvdSBkaWQuCgojIyMjIDIuIEZlZSBmcmVlIHRvIG1ha2UgYXNzdW1wdGlvbnMgYW5kIGFwcGx5IHRoZW0gdG8geW91ciBtYXJrZXRpbmcgc2NoZWR1bGUsIHBsZWFzZSBqdXN0IHN0YXRlIHdoYXQgdGhleSBhcmUgYW5kIHdoeSB5b3UgYXJlIG1ha2luZyB0aGVtLgoKR2l2ZW4gdGhlIHJlc3VsdHMgZnJvbSB0aGUgdGVzdCBhbmFseXN0IGFuZCB0aGUgcHJldmlvdXMgbWFya2V0aW5nIHNjaGVkdWxlLCBJIGFtIGFzc3VtaW5nIHRoYXQgdGhlIGJlc3QgcGVyZm9ybWluZyBvZmZlcnMgc2hvdWxkIGJlIHNlbnQgbW9yZSBmcmVxdWVudGx5IGFuZCBJIGFsc28gYXNzdW1lIHRoYXQgNiBkYXlzIGlzIHN0aWxsIHRoZSBpZGVhbCBnYXAgYmV0d2VlbiBvZmZlcnMgaW4gdGhlIEhvbWUgc2VjdXJpdHkgdmVydGljYWwuIFRoZSBvZmZlciBnYXAgZm9yIHRoZSBuZXcgc2NoZWR1bGUgaXMgMTggZGF5cyBhbmQgdGhlIHNjaGVkdWxlIHN0YXJ0cyB3aXRoIERheSAxOiA0OTM1LVZpdmludCBIb21lIFNlY3VyaXR5LiAKCgoK