1 Introduction

The following document shows the preliminary results of a technical economic analysis of Block Euler, located in the Department of Casanare in Colombia.

The objective of the analysis is initially to make a forecast of oil production from the field and then to make an economic valuation of the forecast oil volumes.

To estimate hydrocarbon resources, the production forecast system will be used. This system allows determining the volume of remaining proven reserves through the use of the production history of the field.

Finally, an economic evaluation (Net Cash-Flow Evaluation) of the estimated oil volumes is carried out to determine the economic value of the block.

2 Remaining volume estimation

2.1 Daily production & Production

  • q: Daily production in barrels per days (stb/d)
  • Q: Cumulated production in thousand barrels (Mstb)

2.2 Daily production oil & water

  • q: Daily oil production in barrels per days (stb/d)
  • w: Daily water production in barrels per days (stb/d)

2.3 Daily & Forecast daily oil production

  • q: Daily production in barrels per days (stb/d)
  • qf: Forecast daily production in barrels per days (stb/d)

2.4 Production & Forecast oil production

  • Q: Cumulated production in thousand barrels (Mstb)
  • Qf: Forecast cumulated production in thousand barrels (Mstb)

3 Economic evaluation

The economic evaluation of the block includes:

  • Analytically estimated remaining volumes, for an identified period of time
  • Estimated costs of fixed and variable operating expenses
  • Estimate of the income of the quantities produced based on the analytical estimate
  • Estimated income related to the remaining volumes and the expenses associated with taxes and royalties
  • The period of time associated with the economic limit of the field

3.1 Production Forecast Model Results

  • Net present value after tax: 1,639,267 usd

The following table shows the data used; the parameters and results of the economic evaluation.

The economic limit is defined as the production rate at the time when the maximum cumulative net cash flow occurs for a project.

Field: Euler Production Forecast Model Results
items Parameters Value Units
1 Field daily production @ 2020-06-01 226.92 stb/d
2 Forecast production time 76 months
3 Field production rate at forecast production time @ 2026-10-01 15.56 stb/d
4 Production @ 2020-06-01 189,961.7 stb
5 Forecast Production @ 2026-10-01 335,909.1 stb
6 Remaining volume @ 2026-10-01 145,947.4 stb
7 Oil Price 75 USD/stb
8 Royalty 8 %
9 Tax rate 39.5 %
10 Annual discount rate 15 %
11 fixed operating expenses 3500 USD/days
12 Variable operating expenses 12 USD/stb
13 NPV before tax & after royalty & opex 2,709,532 USD
14 NPV after tax & after royalty & opex 1,639,267 USD
15 Time to economic limit 27 months
16 Production at economic limit 61.71 stb/d

3.2 Remaining volume & Discounted cash flow after tax

RV: Remaining volume in barrels (stb)
dcf_at: Net present value after tax (USD)

3.3 Forecast daily production & Net present value after tax

qf: Forecast daily production in barrels per days (stb/d)
npv_at: Net present value after tax (USD)

4 Forecast production results

q: Daily production in barrels per days (stb/d)
Q: Cumulated production in thousand barrels (kstb)
qf: Forecast daily production in barrels per days (stb/d)
RV: Remaining volume in thousand barrels (kstb)

5 Economic evaluation results

qf: Forecast daily production in barrels per days (stb/d)
npv_at: Net present value after tax in USD
RV: Remaining volume in barrels (stb)
dcf_at: Discounted cash flow after tax in USD
t: time in months

5.1 Summary

  • Oil price: 75 USD/stb
  • Fixed operating expenses: 3500 USD/days
  • Net present value after tax: 1,639,267 usd
  • Time to economic limit: 27 months
  • Production at economic limit: 61.71 stb/days

6 Sensitivity analysis - Economic evaluation

The following variables will be modified in order to perform the sensitivity analysis.

  • Oil price: 75 USD/stb
  • Fixed operating expenses: 3500 USD/days

The following table shows the data used; the parameters and results of the economic evaluation.

6.1 Production Forecast Model Results

  • Net present value after tax: 1,906,566 usd

The economic limit is defined as the production rate at the time when the maximum cumulative net cash flow occurs for a project.

Field: Euler Production Forecast Model Results
items Parameters Value Units
1 Field daily production @ 2020-06-01 226.92 stb/d
2 Forecast production time 76 months
3 Field production rate at forecast production time @ 2026-10-01 15.56 stb/d
4 Production @ 2020-06-01 189,961.7 stb
5 Forecast Production @ 2026-10-01 335,909.1 stb
6 Remaining volume @ 2026-10-01 145,947.4 stb
7 Oil Price 75 USD/stb
8 Royalty 8 %
9 Tax rate 39.5 %
10 Annual discount rate 15 %
11 fixed operating expenses 3000 USD/days
12 Variable operating expenses 12 USD/stb
13 NPV before tax & after royalty & opex 3,151,349 USD
14 NPV after tax & after royalty & opex 1,906,566 USD
15 Time to economic limit 31 months
16 Production at economic limit 53.29 stb/d

7 Economic evaluation results

qf: Forecast daily production in barrels per days (stb/d)
npv_at: Net present value after tax in USD
RV: Remaining volume in barrels (stb)
dcf_at: Discounted cash flow after tax in USD
t: time in months

7.1 Summary

  • Oil price: 75 USD/stb
  • Fixed operating expenses: 3000 USD/days
  • Net present value after tax: 1,906,566 usd
  • Time to economic limit: 31 months
  • Production at economic limit: 53.29 stb/d
LS0tCnRpdGxlOiAiRXVsZXI6IFRlY2huaWNhbCAmIEVjb25vbWljIEV2YWx1YXRpb24iCmF1dGhvcjogCiAgLSBFdWxlciBFbmVyZ3kgZXVsZXJlbmVyZ3lAZ21haWwuY29tCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOiAKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgaGlnaGxpZ2h0OiBrYXRlCiAgICB0aGVtZTogcmVhZGFibGUKICAgIGNzczogfi9Eb2N1bWVudHMvZm9yZWNhc3QvcGZtL3Njci9zdHlsZS5jc3MKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCi0tLQoKIyBJbnRyb2R1Y3Rpb24gIAoKVGhlIGZvbGxvd2luZyBkb2N1bWVudCBzaG93cyB0aGUgcHJlbGltaW5hcnkgcmVzdWx0cyBvZiBhIHRlY2huaWNhbCBlY29ub21pYyBhbmFseXNpcyBvZiBCbG9jayBFdWxlciwgbG9jYXRlZCBpbiB0aGUgRGVwYXJ0bWVudCBvZiBDYXNhbmFyZSBpbiBDb2xvbWJpYS4KClRoZSBvYmplY3RpdmUgb2YgdGhlIGFuYWx5c2lzIGlzIGluaXRpYWxseSB0byBtYWtlIGEgZm9yZWNhc3Qgb2Ygb2lsIHByb2R1Y3Rpb24gZnJvbSB0aGUgZmllbGQgYW5kIHRoZW4gdG8gbWFrZSBhbiBlY29ub21pYyB2YWx1YXRpb24gb2YgdGhlIGZvcmVjYXN0IG9pbCB2b2x1bWVzLgoKVG8gZXN0aW1hdGUgaHlkcm9jYXJib24gcmVzb3VyY2VzLCB0aGUgcHJvZHVjdGlvbiBmb3JlY2FzdCBzeXN0ZW0gd2lsbCBiZSB1c2VkLiBUaGlzIHN5c3RlbSBhbGxvd3MgZGV0ZXJtaW5pbmcgdGhlIHZvbHVtZSBvZiByZW1haW5pbmcgcHJvdmVuIHJlc2VydmVzIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUgcHJvZHVjdGlvbiBoaXN0b3J5IG9mIHRoZSBmaWVsZC4KCkZpbmFsbHksIGFuIGVjb25vbWljIGV2YWx1YXRpb24gKE5ldCBDYXNoLUZsb3cgRXZhbHVhdGlvbikgb2YgdGhlIGVzdGltYXRlZCBvaWwgdm9sdW1lcyBpcyBjYXJyaWVkIG91dCB0byBkZXRlcm1pbmUgdGhlIGVjb25vbWljIHZhbHVlIG9mIHRoZSBibG9jay4KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEYsIG1lc3NhZ2UgPSBGLCByZXN1bHRzID0gJ2hpZGUnLCB3YXJuaW5nID0gRikKYGBgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpybShsaXN0ID0gbHMoKSkKIwojIHN0YXJ0IHRpbWUKIyAKc3RhcnRfdGltZSA8LSBTeXMudGltZSgpCiMKIyBsaWJyYXJpZXMKIyAKbGlicmFyeSh0aWR5dmVyc2UsIHdhcm4uY29uZmxpY3RzID0gRkFMU0UpCmxpYnJhcnkobHVicmlkYXRlLCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKQpsaWJyYXJ5KGJyb29tLCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKQpsaWJyYXJ5KGhyYnJ0aGVtZXMpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeShtYWdpY2spCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpCiMKIyBsb2FkIGZ1bmN0aW9ucwojIApmaWxlX3BhdGggPSAifi9Eb2N1bWVudHMvZm9yZWNhc3QvcGZtL2Z1biIKZnVuID0gbGlzdC5maWxlcyhmaWxlX3BhdGgsIHJlY3Vyc2l2ZSA9IFQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLm5hbWVzID0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAiLlIiKQppbnZpc2libGUobGFwcGx5KGZ1biwgc291cmNlKSkKIwojIGNvbG91ciBwYWxldHRlCiMgCmNvbG91cl91c2VkIDwtIHRpYmJsZSgKICB2YXIgPSBjKCJvaWwiLCAid2F0ZXIiLCAib2lsIiwgImNvbmRlbnNhdGUiKSwgCiAgbmFtZSA9IGMoInZlcmRlMSIsICJhenVsIiwgInZlcmRlMiIsICJuYXJhbmphIiksCiAgY29sb3VyID0gYygiIzU0NjYzNCIsICIjMTA3Y2UwIiwgIiM4MUM0MDgiLCAiI0ZGQzMwMCIpKQoKc2V0d2QoIn4vRG9jdW1lbnRzL2ZvcmVjYXN0L2RvYyIpCmltZyA8LSBpbWFnZV9yZWFkKCJsb2dvX0V1bGVyRW5lcmd5LnBuZyIpCmBgYAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIwojIHJlYWQgcHJvZHVjdGlvbiBkYXRhCiMgCkV1bGVyIDwtIHJlYWRfZXhjZWwoIn4vRG9jdW1lbnRzL1IvanVsaW8vZGF0YS9MTCAyN18yMm1hcjIyLnhsc3giLCAKICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gIkxMLTI3ICBhbm9zIGNvbXByaW1pZG8iLCAKICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGMoImRhdGUiLCJudW1lcmljIiwgIm51bWVyaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibnVtZXJpYyIsIm51bWVyaWMiKSkKIwojIHdyYW5nbGluZyBwcm9kdWN0aW9uIGRhdGEgCiMgCkV1bGVyIDwtIEV1bGVyICU+JSAKICAgICBkcm9wX25hKCIuLi4xIikgJT4lIAogICAgIHJlbmFtZShkYXRlID0gIi4uLjEiLCAKICAgICAgICAgICAgcSA9ICJFc3RpbWF0ZWQgT2lsIFJhdGUgQmJscy9kYXkiLAogICAgICAgICAgICB3ID0gIkVzdGltYXRlZCBXYXRlciBSYXRlIGJiL2RheSIpICU+JQogICAgIG11dGF0ZShmaWVsZCA9ICJFdWxlciIsCiAgICAgICAgICAgIGRhdGUgPSB5bWQoZGF0ZSksCiAgICAgICAgICAgIHllYXIgPSB5ZWFyKGRhdGUpLAogICAgICAgICAgICBtb250aCA9IG1vbnRoKGRhdGUpLAogICAgICAgICAgICBkYXlzID0gZGF5c19pbl9tb250aChkYXRlKSwKICAgICAgICAgICAgcSA9IHEsCiAgICAgICAgICAgIFEgPSBjdW1zdW0ocSAqIGRheXMpLAogICAgICAgICAgICB3ID0gYXMubnVtZXJpYyh3KSkgJT4lCiAgICAgc2VsZWN0KGZpZWxkLCBkYXRlLCB5ZWFyLCBtb250aCwgZGF5cywgcSwgUSwgdykKIwojIHN0YXJ0IGFuYWx5c2lzIGRhdGUKIyAgCnNhZCA8LSAiMjAxOC0xMi0wMSIKCiMgZW5kIGFuYWx5c2lzIGRhdGUKIyAgCmVhZCA8LSAiMjAyMC0wOS0wMSIKZWFkIDwtICIyMDIwLTA2LTAxIgoKZHEgPC0gRXVsZXIgJT4lIAogICAgIGZpbHRlcihkYXRlID49IHNhZCAmIGRhdGUgPD0gZWFkKQpgYGAKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojCiMgZmllbGQKIwpGaWVsZCA8LSAiRXVsZXIiCiMKIyBwcm9kdWN0aW9uIGZvcmVjYXN0IHRpbWUgaW4gbW9udGhzCiMgIApmcHQgPC0gNzYgICAgICAKIwojIGRheXMgaW4gdGhlIG1vbnRocwojIAp5bW1kIDwtIDM2NS8xMiAgIAojCiMgcGxvdCB0aXRsZQojCnRpdGxlIDwtIHBhc3RlKHRvdXBwZXIoRmllbGQpLCAiUHJvZHVjdGlvbiBGb3JlY2FzdCBNb2RlbCIpCiMKIyBjYXB0aW9uCiMgCkNhcHRpb24gPC0gcGFzdGUoIkV1bGVyIEVuZXJneSIsICJEYXRlOiIsIGZvcm1hdChTeXMudGltZSgpLCAnJWQgJUIsICVZJykpCiMKIwojIGZpZWxkIHRpdGxlCiMgCkZpZWxkIDwtIHBhc3RlKCJGaWVsZDoiLCAiRXVsZXIiKQojCiMgZGlzY291bnQgcmF0ZSBmcmVxdWVuY3kKIyAKZHJmID0gMTIKIwojIG9pbCBwcmljZSB1c2QvYgojIApwcmljZSA9IDc1CiMKIyBhbm51YWwgZGlzY291bnQgcmF0ZSAoJSkKIyAKYWRyID0gMC4xNQojCiMgdGF4ICglKQojIAp0YXggPSAwLjM5NQojCiMgcm95YWx0aWVzICglKQojIApyb3kgPSAwLjA4CiMKIyBvcGV4X3ZhciB1c2Qvc3RiCiMgCm9wZXhfdmFyID0gMTIKIwojIG9wZXhfZml4IHVzZC9tb250aHMKIyAKb3BleF9maXggPSAzNTAwICAjIHVzZCBwZXIgZGF5cwpgYGAKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojCiMgcnVuIGZpZWxkIG1vZGVsIGZ1bmN0aW9uCiMgCmZtIDwtIGZpZWxkLm1vZGVsKGRxLCBmcHQpCiMKIyBzZWxlY3QgZGF0YSB0byBiZSB1c2VkIGluIHRoZSBuZXQgcHJlc2VudCB2YWx1ZSBjYWxjdWxhdGlvbgojIApkZiA8LSBmbSAlPiUgZmlsdGVyKGlzLm5hKHEpKSAgCiMKIyBuZXQgcHJlc2VudCB2YWx1ZSBjYWxjdWxhdGlvbgojCm5wdiA8LSBkY2YubnB2KGRmKSAlPiUKICAgICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIDIpCmBgYAoKIyBSZW1haW5pbmcgdm9sdW1lIGVzdGltYXRpb24gCgojIyBEYWlseSBwcm9kdWN0aW9uICYgUHJvZHVjdGlvbgoKLSBxOiBEYWlseSBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSAgCi0gUTogQ3VtdWxhdGVkIHByb2R1Y3Rpb24gaW4gdGhvdXNhbmQgYmFycmVscyAoTXN0YikgIAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kc3VidGl0bGUgPC0gcGFzdGUoInE6IERhaWx5IHByb2R1Y3Rpb24gaW4gYmFycmVscyBwZXIgZGF5cyAoc3RiL2QpIFxuUTogUHJvZHVjdGlvbiBpbiB0aG91c2FuZCBiYXJyZWxzIChNc3RiKSIpCnh0IDwtICJUaW1lICh5ZWFycykiCnlsIDwtICJxOiBEYWlseSBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSIKeXIgPC0gIlE6IFByb2R1Y3Rpb24gaW4gdGhvdXNhbmQgYmFycmVscyAoTXN0YikiCgpzZWMgPC0gd2l0aChFdWxlciwgdHJhaW4uc2VjKHEsIFEvMTAwMCkpCgpwIDwtIGdncGxvdChFdWxlciwgYWVzKHggPSBkYXRlLCB5ID0gcSwgY29sb3IgPSAicSIpKSArCiAgICAgZ2VvbV9saW5lKHNpemUgPSAwLjgpICsKICAgICBnZW9tX3BvaW50KCkgKwogICAgIGdlb21fbGluZShkYXRhID0gRXVsZXIsIGFlcyh4ID0gZGF0ZSwgeSA9IHNlYyRmd2QoUS8xMDAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAiUSIpLCBzaXplID0gMC44KSArCiAgICAgc2NhbGVfeV9jb250aW51b3VzKHNlYy5heGlzID0gc2VjX2F4aXMofnNlYyRyZXYoLiksIG5hbWUgPSB5cikpICsKICAgICBzY2FsZV9jb2xvcl9tYW51YWwobmFtZSA9ICJMZWdlbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygicSIsICJRIiksIAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjNTQ2NjM0IiwgIiM4MUM0MDgiKSkgKwogICAgIGxhYnModGl0bGUgPSB0aXRsZSwgCiAgICAgICAgICBzdWJ0aXRsZSA9IHN1YnRpdGxlLAogICAgICAgICAgeCA9IHh0LAogICAgICAgICAgeSA9IHlsLAogICAgICAgICAgY2FwdGlvbiA9IENhcHRpb24pICsKICAgICB0aGVtZV9pcHN1bSgpICsgCiAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIAogICAgICAgICAgIGF4aXMudGV4dC55LmxlZnQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzU0NjYzNCIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgICAgIGF4aXMudGV4dC55LnJpZ2h0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiM4MUM0MDgiLCBmYWNlID0gImJvbGQiKSwKICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCgoKZ2dkcmF3LnBsb3QocCkKYGBgCgojIyBEYWlseSBwcm9kdWN0aW9uIG9pbCAmIHdhdGVyCgotIHE6IERhaWx5IG9pbCBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSAgCi0gdzogRGFpbHkgd2F0ZXIgcHJvZHVjdGlvbiBpbiBiYXJyZWxzIHBlciBkYXlzIChzdGIvZCkgIAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kc3VidGl0bGUgPC0gcGFzdGUoInE6IERhaWx5IG9pbCBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSBcbnc6IERhaWx5IHdhdGVyIHByb2R1Y3Rpb24gaW4gYmFycmVscyBwZXIgZGF5cyAoc3RiL2QpIikKeHQgPC0gIlRpbWUgKHllYXJzKSIKeWwgPC0gInE6IERhaWx5IG9pbCBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSIKeXIgPC0gInc6IERhaWx5IHdhdGVyIHByb2R1Y3Rpb24gaW4gYmFycmVscyBwZXIgZGF5cyAoc3RiL2QpIgoKc2VjIDwtIHdpdGgoRXVsZXIsIHRyYWluLnNlYyhxLCB3KSkKCnAgPC0gZ2dwbG90KEV1bGVyLCBhZXMoeCA9IGRhdGUsIHkgPSBxLCBjb2xvciA9ICJxIikpICsKICAgICBnZW9tX2xpbmUoc2l6ZSA9IDAuOCkgKwogICAgIGdlb21fcG9pbnQoKSArCiAgICAgZ2VvbV9saW5lKGRhdGEgPSBFdWxlciwgYWVzKHggPSBkYXRlLCB5ID0gc2VjJGZ3ZCh3KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAidyIpLCBzaXplID0gMC41KSArCiAgICAgZ2VvbV9wb2ludChkYXRhID0gRXVsZXIsIGFlcyh4ID0gZGF0ZSwgeSA9IHNlYyRmd2QodyksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3IiksIHNpemUgPSAwLjgpICsKICAgICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+c2VjJHJldiguKSwgbmFtZSA9IHlyKSkgKwogICAgIHNjYWxlX2NvbG9yX21hbnVhbChuYW1lID0gIkxlZ2VuZDogIiwgCiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoInEiLCAidyIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiIzU0NjYzNCIsICIjMTA3Y2UwIikpICsKICAgICBsYWJzKHRpdGxlID0gdGl0bGUsIAogICAgICAgICAgc3VidGl0bGUgPSBzdWJ0aXRsZSwKICAgICAgICAgIHggPSB4dCwKICAgICAgICAgIHkgPSB5bCwKICAgICAgICAgIGNhcHRpb24gPSBDYXB0aW9uKSArCiAgICAgdGhlbWVfaXBzdW0oKSArCiAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIAogICAgICAgICAgIGF4aXMudGV4dC55LmxlZnQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzU0NjYzNCIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgICAgIGF4aXMudGV4dC55LnJpZ2h0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiMxMDdjZTAiLCBmYWNlID0gImJvbGQiKSkgKwogICAgIHRoZW1lKGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKCmdnZHJhdy5wbG90KHApIApgYGAKCiMjIERhaWx5ICYgRm9yZWNhc3QgZGFpbHkgb2lsIHByb2R1Y3Rpb24KCi0gcTogRGFpbHkgcHJvZHVjdGlvbiBpbiBiYXJyZWxzIHBlciBkYXlzIChzdGIvZCkgIAotIHFmOiBGb3JlY2FzdCBkYWlseSBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSAgIAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIwojIHR3b192YXJzX3NhbWVfdW5pdHMKIyAKc2J0IDwtIHBhc3RlKCJxOiBEYWlseSBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSBcbnFmOiBGb3JlY2FzdCBkYWlseSBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9iKSIpCnlsIDwtICJxOiBEYWlseSAmIHFmOiBGb3JlY2FzdCBkYWlseSBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSIKeHQgPC0gIlRpbWUgKHllYXJzKSIKIwojIGNhbGwgZnVuY3Rpb24KIwpwIDwtIHR3b192YXJzX3NhbWVfdW5pdHMoZm0sIGRhdGUsIHEsIHFmLCAicSIsICJxZiIsIHRpdGxlLCBzYnQsIHlsLCB4dCwgQ2FwdGlvbikgICsgCiAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgICAgYXhpcy50ZXh0LnkubGVmdCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjNTQ2NjM0IiwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQoKZ2dkcmF3LnBsb3QocCkKYGBgCgojIyBQcm9kdWN0aW9uICYgRm9yZWNhc3Qgb2lsIHByb2R1Y3Rpb24KCi0gUTogQ3VtdWxhdGVkIHByb2R1Y3Rpb24gaW4gdGhvdXNhbmQgYmFycmVscyAoTXN0YikKLSBRZjogRm9yZWNhc3QgY3VtdWxhdGVkIHByb2R1Y3Rpb24gaW4gdGhvdXNhbmQgYmFycmVscyAoTXN0YikKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMKIyB0d29fdmFyc19zYW1lX3VuaXRzIAojIApzYnQgPC0gcGFzdGUoIlE6IEN1bXVsYXRlZCBwcm9kdWN0aW9uIGluIHRob3VzYW5kIGJhcnJlbHMgKE1zdGIpIFxuUWY6IEZvcmVjYXN0IGN1bXVsYXRlZCBwcm9kdWN0aW9uIGluIHRob3VzYW5kIGJhcnJlbHMgKE1zdGIpIikKeWwgPC0gIlByb2R1Y3Rpb24gJiBGb3JlY2FzdCBwcm9kdWN0aW9uIGluIHRob3VzYW5kIGJhcnJlbHMgKE1zdGIpIgp4dCA8LSAiVGltZSAoeWVhcnMpIgojCiMgY2FsbCBmdW5jdGlvbgojCnAgPC0gdHdvX3ZhcnNfc2FtZV91bml0cyhmbSwgZGF0ZSwgUS8xMDAwLCBRZi8xMDAwLCAiUSIsICJRZiIsIHRpdGxlLCBzYnQsIHlsLCB4dCwgQ2FwdGlvbikgICsgCiAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgICAgYXhpcy50ZXh0LnkubGVmdCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjNTQ2NjM0IiwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQoKZ2dkcmF3LnBsb3QocCkKYGBgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIHByaW50IHN1bW1hcnkgdGFibGUKIyAKZWVyIDwtIGVjb24uZXZhbC5yZXN1bHRzKGVhZCwgZm0sIG5wdikKYGBgCgojIEVjb25vbWljIGV2YWx1YXRpb24gICAKClRoZSBlY29ub21pYyBldmFsdWF0aW9uIG9mIHRoZSBibG9jayBpbmNsdWRlczogICAKCiAtIEFuYWx5dGljYWxseSBlc3RpbWF0ZWQgcmVtYWluaW5nIHZvbHVtZXMsIGZvciBhbiBpZGVudGlmaWVkIHBlcmlvZCBvZiB0aW1lICAgCiAtIEVzdGltYXRlZCBjb3N0cyBvZiBmaXhlZCBhbmQgdmFyaWFibGUgb3BlcmF0aW5nIGV4cGVuc2VzICAgICAgIAogLSBFc3RpbWF0ZSBvZiB0aGUgaW5jb21lIG9mIHRoZSBxdWFudGl0aWVzIHByb2R1Y2VkIGJhc2VkIG9uIHRoZSBhbmFseXRpY2FsIGVzdGltYXRlICAgICAgCiAtIEVzdGltYXRlZCBpbmNvbWUgcmVsYXRlZCB0byB0aGUgcmVtYWluaW5nIHZvbHVtZXMgYW5kIHRoZSBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggdGF4ZXMgYW5kIHJveWFsdGllcyAgIAogLSBUaGUgcGVyaW9kIG9mIHRpbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlY29ub21pYyBsaW1pdCBvZiB0aGUgZmllbGQKCiMjIFByb2R1Y3Rpb24gRm9yZWNhc3QgTW9kZWwgUmVzdWx0cyAKCi0gKipOZXQgcHJlc2VudCB2YWx1ZSBhZnRlciB0YXg6KiogYHIgY29tbWFfc2VwYXJhdG9yKG1heChucHYkbnB2X2F0LCBuYS5ybSA9IFRSVUUpKWAgdXNkICAKClRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIGRhdGEgdXNlZDsgdGhlIHBhcmFtZXRlcnMgYW5kIHJlc3VsdHMgb2YgdGhlIGVjb25vbWljIGV2YWx1YXRpb24uCgoqKlRoZSBlY29ub21pYyBsaW1pdCBpcyBkZWZpbmVkIGFzIHRoZSBwcm9kdWN0aW9uIHJhdGUgYXQgdGhlIHRpbWUgd2hlbiB0aGUgbWF4aW11bSBjdW11bGF0aXZlIG5ldCBjYXNoIGZsb3cgb2NjdXJzIGZvciBhIHByb2plY3QuKioKCmBgYHtyIGVjaG89RkFMU0UsIHJlc3VsdHM9J2FzaXMnfQoKa2FibGUoZWVyLCBjYXB0aW9uID0gcGFzdGUoRmllbGQsICJQcm9kdWN0aW9uIEZvcmVjYXN0IE1vZGVsIFJlc3VsdHMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIiAiKSkKYGBgCgojIyBSZW1haW5pbmcgdm9sdW1lICYgRGlzY291bnRlZCBjYXNoIGZsb3cgYWZ0ZXIgdGF4CgpSVjogUmVtYWluaW5nIHZvbHVtZSBpbiBiYXJyZWxzIChzdGIpICAgCmRjZl9hdDogTmV0IHByZXNlbnQgdmFsdWUgYWZ0ZXIgdGF4IChVU0QpICAgIAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cyA9ICdhc2lzJywgY29tbWVudCA9IE5BfQpzYnQgPC0gcGFzdGUoInJ2OiBSZW1haW5pbmcgdm9sdW1lIGluIGJhcnJlbHMgKHN0YikgXG5kY2ZfYXQ6IERpc2NvdW50ZWQgY2FzaCBmbG93IGFmdGVyIHRheCAoVVNEKSIpCnh0IDwtICJUaW1lIChtb250aHMpIgp5bCA8LSAicnY6IFJlbWFpbmluZyB2b2x1bWUgaW4gYmFycmVscyAoc3RiKSIKeXIgPC0gIkRpc2NvdW50ZWQgY2FzaCBmbG93IGFmdGVyIHRheCAoVVNEKSIKCnNlYyA8LSB3aXRoKG5wdiwgdHJhaW4uc2VjKHJ2LCBkY2ZfYXQpKQoKcCA8LSBnZ3Bsb3QobnB2LCBhZXMoeCA9IHQsIHkgPSBydiwgY29sb3IgPSAicnYiKSkgKwogICAgIGdlb21fbGluZShzaXplID0gMSkgKwogICAgIGdlb21fbGluZShkYXRhID0gbnB2LCBhZXMoeCA9IHQsIHkgPSBzZWMkZndkKGRjZl9hdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJkY2ZfYXQiKSwgc2l6ZSA9IDEpICsKICAgICBnZW9tX3BvaW50KGRhdGEgPSBucHYsIGFlcyh4ID0gdCwgeSA9IHNlYyRmd2QoZGNmX2F0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImRjZl9hdCIpLCBzaXplID0gMSkgKyAgICAgCiAgICAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWUgPSAiTGVnZW5kOiAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiZGNmX2F0IiwgInJ2IiksIAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjMTA3Y2UwIiwgIiM1NDY2MzQiKSkgICsgICAgIAogICAgIHNjYWxlX3lfY29udGludW91cyhzZWMuYXhpcyA9IHNlY19heGlzKH5zZWMkcmV2KC4pLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0geXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGRvbGxhcl9mb3JtYXQoKSkpICsKICAgICBsYWJzKHRpdGxlID0gdGl0bGUsIAogICAgICAgICAgc3VidGl0bGUgPSBzYnQsCiAgICAgICAgICB4ID0geHQsCiAgICAgICAgICB5ID0geWwsCiAgICAgICAgICBjYXB0aW9uID0gQ2FwdGlvbikgKwogICAgIHRoZW1lX2lwc3VtKCkgKyAKICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgCiAgICAgICAgICAgYXhpcy50ZXh0LnkubGVmdCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjNTQ2NjM0IiwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgICAgYXhpcy50ZXh0LnkucmlnaHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzEwN2NlMCIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKCmdnZHJhdy5wbG90KHApCmBgYAoKIyMgRm9yZWNhc3QgZGFpbHkgcHJvZHVjdGlvbiAmIE5ldCBwcmVzZW50IHZhbHVlIGFmdGVyIHRheAoKcWY6IEZvcmVjYXN0IGRhaWx5IHByb2R1Y3Rpb24gaW4gYmFycmVscyBwZXIgZGF5cyAoc3RiL2QpICAgICAKbnB2X2F0OiBOZXQgcHJlc2VudCB2YWx1ZSBhZnRlciB0YXggKFVTRCkgICAgCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpzYnQgPC0gcGFzdGUoInFmOiBGb3JlY2FzdCBkYWlseSBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSBcbm5wdl9hdDogTmV0IHByZXNlbnQgdmFsdWUgYWZ0ZXIgdGF4IChVU0QpIikKeHQgPC0gIlRpbWUgKG1vbnRocykiCnlsIDwtICJxZjogRm9yZWNhc3QgZGFpbHkgcHJvZHVjdGlvbiBpbiBiYXJyZWxzIHBlciBkYXlzIChzdGIvZCkiCnlyIDwtICJOZXQgcHJlc2VudCB2YWx1ZSBhZnRlciB0YXggKFVTRCkiCgpzZWMgPC0gd2l0aChucHYsIHRyYWluLnNlYyhxZiwgbnB2X2F0KSkKCnAgPC0gZ2dwbG90KG5wdiwgYWVzKHggPSB0LCB5ID0gcWYsIGNvbG9yID0gInFmIikpICsKICAgICBnZW9tX2xpbmUoc2l6ZSA9IDEpICsKICAgICBnZW9tX2xpbmUoZGF0YSA9IG5wdiwgYWVzKHggPSB0LCB5ID0gc2VjJGZ3ZChucHZfYXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAibnB2X2F0IiksIHNpemUgPSAxKSArCiAgICAgZ2VvbV9wb2ludChkYXRhID0gbnB2LCBhZXMoeCA9IHQsIHkgPSBzZWMkZndkKG5wdl9hdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJucHZfYXQiKSwgc2l6ZSA9IDEpICsgICAgIAogICAgIHNjYWxlX2NvbG9yX21hbnVhbChuYW1lID0gIkxlZ2VuZDogIiwgCiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIm5wdl9hdCIsICJxZiIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiIzEwN2NlMCIsICIjNTQ2NjM0IikpICArICAgICAKICAgICBzY2FsZV95X2NvbnRpbnVvdXMoc2VjLmF4aXMgPSBzZWNfYXhpcyh+c2VjJHJldiguKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHlyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBkb2xsYXJfZm9ybWF0KCkpKSArCiAgICAgbGFicyh0aXRsZSA9IHRpdGxlLCAKICAgICAgICAgIHN1YnRpdGxlID0gc2J0LAogICAgICAgICAgeCA9IHh0LAogICAgICAgICAgeSA9IHlsLAogICAgICAgICAgY2FwdGlvbiA9IENhcHRpb24pICsKICAgICB0aGVtZV9pcHN1bSgpICsgCiAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIAogICAgICAgICAgIGF4aXMudGV4dC55LmxlZnQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzU0NjYzNCIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgICAgIGF4aXMudGV4dC55LnJpZ2h0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiMxMDdjZTAiLCBmYWNlID0gImJvbGQiKSwKICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCgpnZ2RyYXcucGxvdChwKQpgYGAKCiMgRm9yZWNhc3QgcHJvZHVjdGlvbiByZXN1bHRzICAgIAoKcTogRGFpbHkgcHJvZHVjdGlvbiBpbiBiYXJyZWxzIHBlciBkYXlzIChzdGIvZCkgICAgClE6IEN1bXVsYXRlZCBwcm9kdWN0aW9uIGluIHRob3VzYW5kIGJhcnJlbHMgKGtzdGIpICAgCnFmOiBGb3JlY2FzdCBkYWlseSBwcm9kdWN0aW9uIGluIGJhcnJlbHMgcGVyIGRheXMgKHN0Yi9kKSAgICAgIApSVjogUmVtYWluaW5nIHZvbHVtZSBpbiB0aG91c2FuZCBiYXJyZWxzIChrc3RiKSAgICAgIAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cyA9ICdhc2lzJywgY29tbWVudCA9IE5BfQoKIyBjeWFuID0gIiMyRUM0QjYiICMgTmljZSBjeWFuCgpoY2hhcnRfZm0gPC0gZm0gJT4lIAogICAgIHNlbGVjdCh0LCBkYXRlLCBxZiwgUSwgcSwgUWYpICU+JSAKICAgICBnYXRoZXIoZ3JvdXAsIGtleSwgLXQsIC1kYXRlKSAlPiUKICAgICBhcnJhbmdlKGRhdGUpICU+JSAKICAgICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIDIpCgpoY2hhcnQoaGNoYXJ0X2ZtLCAibGluZSIsIGhjYWVzKGRhdGUsIGtleSwgZ3JvdXAgPSBncm91cCksIHlBeGlzID0gMDozKSAlPiUgCiAgICAgaGNfeUF4aXNfbXVsdGlwbGVzKAogICAgICAgICAgbGlzdChsaW5lV2lkdGggPSAzLCB0aXRsZSA9IGxpc3QodGV4dCA9ICJxZiIpKSwKICAgICAgICAgIGxpc3QobGluZVdpZHRoID0gMywgdGl0bGUgPSBsaXN0KHRleHQgPSAiUSIpKSwKICAgICAgICAgIGxpc3QobGluZVdpZHRoID0gMywgdGl0bGUgPSBsaXN0KHRleHQgPSAicSIpKSwKICAgICAgICAgIGxpc3QobGluZVdpZHRoID0gMywgdGl0bGUgPSBsaXN0KHRleHQgPSAiUWYiKSkKICAgICApICU+JQogICAgIGhjX3RpdGxlKAogICAgICAgICAgdGV4dCA9IEZpZWxkLAogICAgICAgICAgYWxpZ24gPSAibGVmdCIsCiAgICAgICAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMjRweCIsIGNvbG9yID0gIiMwMDAwMDAiLCBmb250V2VpZ2h0ID0gImJvbGQiKQogICAgICkgJT4lCiAgICAgaGNfc3VidGl0bGUoCiAgICAgICAgICB0ZXh0ID0gIkZvcmVjYXN0IHByb2R1Y3Rpb24gcmVzdWx0cyIsCiAgICAgICAgICBhbGlnbiA9ICJsZWZ0IiwKICAgICAgICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxOHB4IiwgY29sb3IgPSAiIzAwMDAwMCIsIGZvbnRTdHlsZSA9ICJib2xkIikKICAgICApICU+JQogICAgICAgaGNfeEF4aXModGl0bGUgPSBsaXN0KHRleHQgPSAiVGltZSAoeWVhcnMpIikKICAgICAgICkgJT4lCiAgICAgaGNfYWRkX3RoZW1lKGhjX3RoZW1lX2dvb2dsZSgpKSAlPiUKICAgICBoY19jYXB0aW9uKAogICAgdGV4dCA9IENhcHRpb24KICApICU+JQogICAgICAgICAgaGNfdG9vbHRpcCgKICAgICAgICAgIGNyb3NzaGFpcnMgPSBUUlVFLAogICAgICAgICAgYm9yZGVyV2lkdGggPSAyLAogICAgICAgICAgc29ydCA9IFRSVUUsCiAgICAgICAgICB0YWJsZSA9IFRSVUUKICAgICApCgoKYGBgCgojIEVjb25vbWljIGV2YWx1YXRpb24gcmVzdWx0cyAgCgpxZjogRm9yZWNhc3QgZGFpbHkgcHJvZHVjdGlvbiBpbiBiYXJyZWxzIHBlciBkYXlzIChzdGIvZCkgICAgIApucHZfYXQ6IE5ldCBwcmVzZW50IHZhbHVlIGFmdGVyIHRheCBpbiAgVVNEICAKUlY6IFJlbWFpbmluZyB2b2x1bWUgaW4gIGJhcnJlbHMgKHN0YikgICAgIApkY2ZfYXQ6IERpc2NvdW50ZWQgY2FzaCBmbG93IGFmdGVyIHRheCBpbiBVU0QgIAp0OiB0aW1lIGluIG1vbnRocyAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHJlc3VsdHMgPSAnYXNpcycsIGNvbW1lbnQgPSBOQX0KIyB0aWR5IGZvcm1hdAojIApoY2hhcnRfbnB2IDwtIG5wdiAlPiUgCiAgICAgc2VsZWN0KHQsIHFmLCBRZiwgZGNmX2F0LCBucHZfYXQpICU+JSAKICAgICBnYXRoZXIoZ3JvdXAsIGtleSwgLXQpICU+JQogICAgIGFycmFuZ2UodCkgICU+JSAKICAgICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIDIpCgpoY2hhcnQoaGNoYXJ0X25wdiwgImxpbmUiLCBoY2Flcyh0LCBrZXksIGdyb3VwID0gZ3JvdXApLCB5QXhpcyA9IDA6MykgJT4lIAogIGhjX3lBeGlzX211bHRpcGxlcygKICAgIGxpc3QobGluZVdpZHRoID0gMywgdGl0bGUgPSBsaXN0KHRleHQgPSAiZGNmX2F0IikpLAogICAgbGlzdChsaW5lV2lkdGggPSAzLCB0aXRsZSA9IGxpc3QodGV4dCA9ICJucHYtYXQiKSksCiAgICBsaXN0KGxpbmVXaWR0aCA9IDMsIHRpdGxlID0gbGlzdCh0ZXh0ID0gInFmIikpLAogICAgbGlzdChsaW5lV2lkdGggPSAzLCB0aXRsZSA9IGxpc3QodGV4dCA9ICJSViIpKQogICAgKSAgJT4lCiAgICAgaGNfdGl0bGUoCiAgICAgICAgICB0ZXh0ID0gRmllbGQsCiAgICAgICAgICBhbGlnbiA9ICJsZWZ0IiwKICAgICAgICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyNHB4IiwgY29sb3IgPSAiIzAwMDAwMCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIpCiAgICAgKSAlPiUKICAgICBoY19zdWJ0aXRsZSgKICAgICAgICAgIHRleHQgPSAiRWNvbm9taWMgZXZhbHVhdGlvbiByZXN1bHRzIiwKICAgICAgICAgIGFsaWduID0gImxlZnQiLAogICAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjE4cHgiLCBjb2xvciA9ICIjMDAwMDAwIiwgZm9udFN0eWxlID0gImJvbGQiKQogICAgICkgICU+JSAKICBoY194QXhpcygKICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0geHQsIAogICAgICAgICAgICAgICAgIGFsaWduID0gImhpZ2giLCBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMS41ZW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gICIjMDAwMDAwIikpCiAgKSAlPiUKICAgICBoY19jYXB0aW9uKAogICAgdGV4dCA9IENhcHRpb24KICAgICApICU+JQogICAgIGhjX2FkZF90aGVtZShoY190aGVtZV9nb29nbGUoKSkgJT4lCiAgICAgaGNfdG9vbHRpcCgKICAgICAgICAgIGNyb3NzaGFpcnMgPSBUUlVFLAogICAgICAgICAgYm9yZGVyV2lkdGggPSAyLAogICAgICAgICAgc29ydCA9IFRSVUUsCiAgICAgICAgICB0YWJsZSA9IFRSVUUKICAgICApCgpgYGAKCiMjIFN1bW1hcnkgIAoKLSAqKk9pbCBwcmljZTogKiogYHIgYXMuY2hhcmFjdGVyKGVlcls3LDNdKWAgVVNEL3N0YgotICoqRml4ZWQgb3BlcmF0aW5nIGV4cGVuc2VzOiAqKiBgciBhcy5jaGFyYWN0ZXIoZWVyWzExLDNdKWAgVVNEL2RheXMgIAotICoqTmV0IHByZXNlbnQgdmFsdWUgYWZ0ZXIgdGF4OiAqKiBgciBjb21tYV9zZXBhcmF0b3IobWF4KG5wdiRucHZfYXQsIG5hLnJtID0gVFJVRSkpYCB1c2QgCi0gKipUaW1lIHRvIGVjb25vbWljIGxpbWl0OiAqKiBgciBhcy5jaGFyYWN0ZXIoZWVyWzE1LDNdKWAgbW9udGhzIAotICoqUHJvZHVjdGlvbiBhdCBlY29ub21pYyBsaW1pdDogKiogYHIgYXMuY2hhcmFjdGVyKGVlclsxNiwzXSlgIHN0Yi9kYXlzCgojIFNlbnNpdGl2aXR5IGFuYWx5c2lzIC0gRWNvbm9taWMgZXZhbHVhdGlvbiAgIAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIwojIG9pbCBwcmljZSB1c2QvYgojIApwcmljZSA9IDc1CiMKIyBvcGV4X2ZpeCB1c2QvbW9udGhzCiMgCm9wZXhfZml4ID0gMzAwMCAgIyB1c2QgcGVyIGRheXMKIwojIG5ldCBwcmVzZW50IHZhbHVlIGNhbGN1bGF0aW9uCiMKbnB2X3NhIDwtIGRjZi5ucHYoZGYpICU+JQogICAgIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgMikKYGBgCgpUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyB3aWxsIGJlIG1vZGlmaWVkIGluIG9yZGVyIHRvIHBlcmZvcm0gdGhlIHNlbnNpdGl2aXR5IGFuYWx5c2lzLiAgIAoKLSAqKk9pbCBwcmljZTogKiogYHIgYXMuY2hhcmFjdGVyKGVlcls3LDNdKWAgVVNEL3N0YgotICoqRml4ZWQgb3BlcmF0aW5nIGV4cGVuc2VzOiAqKiBgciBhcy5jaGFyYWN0ZXIoZWVyWzExLDNdKWAgVVNEL2RheXMgICAgIAoKVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgZGF0YSB1c2VkOyB0aGUgcGFyYW1ldGVycyBhbmQgcmVzdWx0cyBvZiB0aGUgZWNvbm9taWMgZXZhbHVhdGlvbi4KCiMjIFByb2R1Y3Rpb24gRm9yZWNhc3QgTW9kZWwgUmVzdWx0cyAKCi0gKipOZXQgcHJlc2VudCB2YWx1ZSBhZnRlciB0YXg6KiogYHIgY29tbWFfc2VwYXJhdG9yKG1heChucHZfc2EkbnB2X2F0LCBuYS5ybSA9IFRSVUUpKWAgdXNkICAKCioqVGhlIGVjb25vbWljIGxpbWl0IGlzIGRlZmluZWQgYXMgdGhlIHByb2R1Y3Rpb24gcmF0ZSBhdCB0aGUgdGltZSB3aGVuIHRoZSBtYXhpbXVtIGN1bXVsYXRpdmUgbmV0IGNhc2ggZmxvdyBvY2N1cnMgZm9yIGEgcHJvamVjdC4qKgoKYGBge3IgZWNobz1GQUxTRSwgcmVzdWx0cz0nYXNpcyd9CiMgcHJpbnQgc3VtbWFyeSB0YWJsZQojIAplZXJzIDwtIGVjb24uZXZhbC5yZXN1bHRzKGVhZCwgZm0sIG5wdl9zYSkKa2FibGUoZWVycywgY2FwdGlvbiA9IHBhc3RlKEZpZWxkLCAiUHJvZHVjdGlvbiBGb3JlY2FzdCBNb2RlbCBSZXN1bHRzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcCA9ICIgIikpCmBgYAoKIyBFY29ub21pYyBldmFsdWF0aW9uIHJlc3VsdHMgIAoKcWY6IEZvcmVjYXN0IGRhaWx5IHByb2R1Y3Rpb24gaW4gYmFycmVscyBwZXIgZGF5cyAoc3RiL2QpICAgICAKbnB2X2F0OiBOZXQgcHJlc2VudCB2YWx1ZSBhZnRlciB0YXggaW4gVVNEICAgClJWOiBSZW1haW5pbmcgdm9sdW1lIGluIGJhcnJlbHMgKHN0YikgICAgIApkY2ZfYXQ6IERpc2NvdW50ZWQgY2FzaCBmbG93IGFmdGVyIHRheCBpbiBVU0QgICAKdDogdGltZSBpbiBtb250aHMgCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIHRpZHkgZm9ybWF0CiMgCmhjaGFydF9ucHZfc2EgPC0gbnB2X3NhICU+JSAKICAgICBzZWxlY3QodCwgcWYsIFFmLCBkY2ZfYXQsIG5wdl9hdCkgJT4lIAogICAgIGdhdGhlcihncm91cCwga2V5LCAtdCkgJT4lCiAgICAgYXJyYW5nZSh0KQoKY3lhbiA9ICIjMkVDNEI2IiAjIE5pY2UgY3lhbgoKaGNoYXJ0KGhjaGFydF9ucHZfc2EsICJsaW5lIiwgaGNhZXModCwga2V5LCBncm91cCA9IGdyb3VwKSwgeUF4aXMgPSAwOjMpICU+JSAKICBoY195QXhpc19tdWx0aXBsZXMoCiAgICBsaXN0KGxpbmVXaWR0aCA9IDMsIHRpdGxlID0gbGlzdCh0ZXh0ID0gImRjZl9hdCIpKSwKICAgIGxpc3QobGluZVdpZHRoID0gMywgdGl0bGUgPSBsaXN0KHRleHQgPSAibnB2LWF0IikpLAogICAgbGlzdChsaW5lV2lkdGggPSAzLCB0aXRsZSA9IGxpc3QodGV4dCA9ICJxZiIpKSwKICAgIGxpc3QobGluZVdpZHRoID0gMywgdGl0bGUgPSBsaXN0KHRleHQgPSAiUlYiKSkKICAgICkgICU+JQogICAgIGhjX3RpdGxlKAogICAgICAgICAgdGV4dCA9IEZpZWxkLAogICAgICAgICAgYWxpZ24gPSAibGVmdCIsCiAgICAgICAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMjRweCIsIGNvbG9yID0gIiMwMDAwMDAiLCBmb250V2VpZ2h0ID0gImJvbGQiKQogICAgICkgJT4lCiAgICAgaGNfc3VidGl0bGUoCiAgICAgICAgICB0ZXh0ID0gIkVjb25vbWljIGV2YWx1YXRpb24gcmVzdWx0cyIsCiAgICAgICAgICBhbGlnbiA9ICJsZWZ0IiwKICAgICAgICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxOHB4IiwgY29sb3IgPSAiIzAwMDAwMCIsIGZvbnRTdHlsZSA9ICJib2xkIikKICAgICApICU+JSAKICAgICBoY194QXhpcygKICAgICAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0geHQsIAogICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gImhpZ2giLCAKICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMS41ZW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gICIjMDAwMDAwIikpKSAlPiUKICAgICBoY19jYXB0aW9uKAogICAgICAgICAgdGV4dCA9IENhcHRpb24KICAgICApICU+JQogICAgIGhjX2FkZF90aGVtZShoY190aGVtZV9nb29nbGUoKSkgJT4lCiAgICAgaGNfdG9vbHRpcCgKICAgICAgICAgIGNyb3NzaGFpcnMgPSBUUlVFLAogICAgICAgICAgYm9yZGVyV2lkdGggPSAyLAogICAgICAgICAgc29ydCA9IFRSVUUsCiAgICAgICAgICB0YWJsZSA9IFRSVUUKICAgICApCgpgYGAKIyMgU3VtbWFyeSAgCgotICoqT2lsIHByaWNlOiAqKiBgciBhcy5jaGFyYWN0ZXIoZWVyc1s3LDNdKWAgVVNEL3N0YgotICoqRml4ZWQgb3BlcmF0aW5nIGV4cGVuc2VzOiAqKiBgciBhcy5jaGFyYWN0ZXIoZWVyc1sxMSwzXSlgIFVTRC9kYXlzICAgCi0gKipOZXQgcHJlc2VudCB2YWx1ZSBhZnRlciB0YXg6ICoqIGByIGNvbW1hX3NlcGFyYXRvcihtYXgobnB2X3NhJG5wdl9hdCwgbmEucm0gPSBUUlVFKSlgIHVzZCAKLSAqKlRpbWUgdG8gZWNvbm9taWMgbGltaXQ6ICoqIGByIGFzLmNoYXJhY3RlcihlZXJzWzE1LDNdKWAgbW9udGhzIAotICoqUHJvZHVjdGlvbiBhdCBlY29ub21pYyBsaW1pdDogKiogYHIgYXMuY2hhcmFjdGVyKGVlcnNbMTYsM10pYCBzdGIvZAoKCmBgYHtyIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgRm9yZWNhc3QgZGFpbHkgcHJvZHVjdGlvbiAmIE5ldCBwcmVzZW50IHZhbHVlIGFmdGVyIHRheCAKIyBxZjogRm9yZWNhc3QgZGFpbHkgcHJvZHVjdGlvbiBpbiBiYXJyZWxzIHBlciBkYXlzIChzdGIvZCkgICAKIyBucHZfYXQ6IE5ldCBwcmVzZW50IHZhbHVlIGFmdGVyIHRheCBpbiBtaWxsaW9ucyBVU0QgIAojIAp5bDF0IDwtICJxZiIKeWwydCA8LSAibnB2X2F0Igp4dCA8LSAiVGltZSAobW9udGhzKSIKeWwxYyA8LSAiIzFmNzdiNCIKeWwyYyA8LSAiI2ZmN2YwZSIKcCA8LSB0d29fdmFyc19wbG90bHkobnB2X3NhLCB+dCwgfnFmLCB+bnB2X2F0LCB0aXRsZSwgeHQsIHlsMXQsIHlsMnQsIHlsMWMsIHlsMmMpCnAKYGBgCgoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyBSZW1haW5pbmcgdm9sdW1lICYgRGlzY291bnRlZCBjYXNoIGZsb3cgYWZ0ZXIgdGF4IAojIFJWOiBSZW1haW5pbmcgdm9sdW1lIGluIHRob3VzYW5kIGJhcnJlbHMgKGtzdGIpICAKIyBkY2ZfYXQ6IERpc2NvdW50ZWQgY2FzaCBmbG93IGFmdGVyIHRheCBpbiB0aG91c2FuZCBVU0QgIAojIAp5bDF0IDwtICJSViIKeWwydCA8LSAiZGNmX2F0Igp4dCA8LSAiVGltZSAobW9udGhzKSIKeWwxYyA8LSAiIzFmNzdiNCIKeWwyYyA8LSAiI2ZmN2YwZSIKcCA8LSB0d29fdmFyc19wbG90bHkobnB2X3NhLCB+dCwgflFmLCB+ZGNmX2F0LCB0aXRsZSwgeHQsIHlsMXQsIHlsMnQsIHlsMWMsIHlsMmMpCnAKYGBgCg==