INTRODUCTION

iIntroduction of Data Science ~ Week 1

Nurul Iffah
NURUL IFFAH
Program Studi Sains Data
Universitas INSTITUT TEKNOLOGI SAINS BANDUNG
Dosen Pengampu Bakti Siregar, M Sc., CSD
INTRODUCTION
Introduction of Data Science - Week 1

1 WHAT IS THE MAIN PURPOSE OF OUR STUDY?

The main purpose of studying Data Science Programming is to develop computational thinking skills in solving data-based problems in a systematic and structured way. Programming is not only about writing code, but about translating real world problems into algorithms that can be processed by a computer.

1.1 Some important points include:

  • Training computational thinking and algorithmic logic

  • Processing and analyzing data efficiently

  • Building predictive models based on data

  • Automating analytical processes to improve speed and accuracy

  • Producing reproducible and reliable results


2 WHY DO WE LEARN ABOUT IT?

We learn Data Science Programming because we live in a data-driven era where almost every field generates and relies on large amounts of data. Manual analysis is no longer effective in handling complex and large-scale data. Therefore, programming becomes essential to manage, analyze, and extract meaningful insights from data efficiently.

2.1 Some supporting reasons include:

  • The rapid growth of data across industries

  • The increasing complexity of modern problems

  • The high demand for data-skilled professionals

  • The importance of data-driven decision making

  • The need for efficiency and automation in workflows


3 WHAT TOOLS DO WE HAVE TO EXPERT ABOUT?

To become proficient in Data Science Programming, we need to master various integrated tools that support the data analysis process. These tools are essential for handling data, building models, and managing analytical workflows effectively.

3.1 Some tools we need to master include:

  • Programming languages such as Python or R

  • Data manipulation libraries like Pandas and NumPy

  • Machine learning frameworks such as Scikit-learn

  • SQL for database management

  • Git for version control

  • Jupyter Notebook for documentation and reproducible analysis


4 DOMAIN KNOWLEDGE / INTEREST

I have a strong interest in the healthcare field because I believe it has a significant social impact and greatly benefits from data driven approaches. Health data analysis can help identify patterns in medical conditions, estimate the probability of certain health risks, and improve the efficiency of healthcare systems. The complexity and sensitivity of health data make this field both challenging and highly relevant to be developed through Data Science Programming.

4.1 Some reasons why I am interested in healthcare include:

  • Medical data is complex and multi dimensional

  • Predictive models can be used for early detection and risk estimation

  • Data analysis can support clinical decision making

  • It has a direct impact on people’s quality of life


However, for another skill development, I also see financial analysis as a more practical field with broad career opportunities. This field allows me to strengthen my skills in time-series analysis, predictive modeling, and risk analysis more intensively.

4.2 Some reasons why I consider financial analysis:

  • Financial data is dynamic and model driven

  • It is widely used across industries with high professional demand

  • It provides opportunities to develop forecasting and risk modeling skills

Therefore, I see Data Science Programming as a flexible skill. While my main interest lies in healthcare, developing skills in financial analysis can be a strategic step to strengthen my overall analytical competence.


LS0tDQp0aXRsZTogIklOVFJPRFVDVElPTiIgICAgICAgICAgICANCnN1YnRpdGxlOiAiaUludHJvZHVjdGlvbiBvZiBEYXRhIFNjaWVuY2UgfiBXZWVrIDEiICANCmF1dGhvcjogIk51cnVsIElmZmFoIiAgICAgIA0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCIgDQpvdXRwdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAgICANCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZSAgICAgICAgIA0KICAgIHRodW1ibmFpbHM6IHRydWUgICAgICAgICAgICANCiAgICBsaWdodGJveDogdHJ1ZSAgICAgICAgICAgICAgDQogICAgZ2FsbGVyeTogdHJ1ZSAgICAgICAgICAgICAgIA0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZSAgICAgICANCiAgICBsaWJfZGlyOiBsaWJzICAgICAgICAgICAgICAgDQogICAgZGZfcHJpbnQ6ICJwYWdlZCIgICAgICAgICAgIA0KICAgIGNvZGVfZm9sZGluZzogInNob3ciICAgICAgICAgDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgICAgICAgICAgDQotLS0NCg0KPHN0eWxlPg0KQGltcG9ydCB1cmwoImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9RnJlZG9rYTp3Z2h0QDUwMDs2MDA7NzAwJmZhbWlseT1RdWlja3NhbmQ6d2dodEA0MDA7NjAwOzcwMCZkaXNwbGF5PXN3YXAiKTsNCg0KOnJvb3Qgew0KICAtLXNub3ctZnVyOiAjRjhGOUJBOw0KICAtLWVhci1waW5rOiAjRkZEREUyOw0KICAtLWxhYmVsLWdyYXk6ICNFMkU1RTk7DQogIC0tYmctbGVmdDogI0ZGRkZGRjsNCiAgLS1iZy1yaWdodDogI0Q2QzFDMTsNCiAgLS1jYXJkLWJnOiAjRkZGRkZGOw0KICAtLXRleHQtdGl0bGU6ICMwMDAwMDA7DQogIC0tdGV4dC1ib2R5OiAjMDAwMDAwOw0KICAtLXRleHQtbXV0ZWQ6ICMwMDAwMDA7DQogIC0tYnRuLWV4cGxvcmU6ICM4RkJBQjE7DQogIC0tYnRuLXJlbGF4OiAjRDZBOUFBOw0KICAtLWJ0bi10ZXh0OiAjRkZGRkZGOw0KICAtLWFjY2VudC1zdGFyOiAjRjNFOEU4Ow0KICAtLXNoYWRvdy1zb2Z0OiAwIDE4cHggMzVweCByZ2JhKDEzOSwgMTE0LCAxMTQsIDAuMik7DQogIC0tc2hhZG93LWNhcmQ6IDAgOHB4IDE4cHggcmdiYSgxMzksIDExNCwgMTE0LCAwLjE4KTsNCiAgLS1yYWRpdXMtbGc6IDIycHg7DQogIC0tcmFkaXVzLW1kOiAxNnB4Ow0KICAtLWNvbnRlbnQtdG9wOiA0LjZyZW07DQogIC0tbGluay11bmRlcmxpbmU6IHJnYmEoMTQzLCAxODYsIDE3NywgMC42KTsNCiAgLS1saW5rLWhvdmVyLWJnOiByZ2JhKDI1NSwgMjIxLCAyMjYsIDAuNSk7DQogIC0tc2lkZWJhci1iZzogcmdiYSgyNTUsIDIyMSwgMjI2LCAwLjcpOw0KICAtLXNpZGViYXItYm9yZGVyOiByZ2JhKDIyNiwgMjI5LCAyMzMsIDAuOSk7DQogIC0tc2lkZWJhci1zaGFkb3c6IDEwcHggMCAyMnB4IHJnYmEoMTM5LCAxMTQsIDExNCwgMC4xMik7DQogIC0tc2lkZWJhci1zaGFkb3ctb3BlbjogMTRweCAwIDI2cHggcmdiYSgxMzksIDExNCwgMTE0LCAwLjIpOw0KICAtLXNpZGViYXItaDItc2hhZG93OiAwIDZweCAxNHB4IHJnYmEoMTM5LCAxMTQsIDExNCwgMC4yMik7DQogIC0tc2VjdGlvbi10aXRsZS1zaGFkb3c6IDAgNnB4IDE0cHggcmdiYSgxMzksIDExNCwgMTE0LCAwLjE4KTsNCiAgLS1sb2dvLWZyYW1lLXNoYWRvdzogMCAxMnB4IDI2cHggcmdiYSgxMzksIDExNCwgMTE0LCAwLjMpLCAwIDAgMCAzcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOw0KICAtLWxvZ28tc3Rhci1zaGFkb3c6IDAgMCA4cHggcmdiYSgyNDMsIDIzMiwgMjMyLCAwLjkpOw0KICAtLWxvZ28tZG90LXNoYWRvdzogMCAwIDZweCByZ2JhKDI1NSwgMjIxLCAyMjYsIDAuOSk7DQogIC0tdGFibGUtZXZlbi1iZzogcmdiYSgyMjYsIDIyOSwgMjMzLCAwLjU1KTsNCiAgLS10YWJsZS1ob3Zlci1iZzogcmdiYSgyNTUsIDIyMSwgMjI2LCAwLjYpOw0KICAtLWNvZGUtaW5saW5lLWJnOiByZ2JhKDI0OCwgMjQ5LCAxODYsIDAuNik7DQogIC0tY29kZS1ibG9jay1iZzogI0ZGRkZGRjsNCiAgLS1kZXRhaWxzLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpOw0KICAtLXRvZ2dsZS1zaGFkb3c6IDAgNHB4IDEwcHggcmdiYSgxMzksIDExNCwgMTE0LCAwLjMpOw0KICAtLXRvZ2dsZS1pY29uLXNoaWZ0OiAwcHg7DQogIC0taWNvbi1zdW4tbGlnaHQ6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ1ptbHNiRDBpYm05dVpTSWdjM1J5YjJ0bFBTSWpOVFUxTlRVMUlpQnpkSEp2YTJVdGQybGtkR2c5SWpJaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p5YjNWdVpDSStQR05wY21Oc1pTQmplRDBpTVRJaUlHTjVQU0l4TWlJZ2NqMGlOQ0lnWm1sc2JEMGlJMFpHUkVSRk1pSXZQanhzYVc1bElIZ3hQU0l4TWlJZ2VURTlJakVpSUhneVBTSXhNaUlnZVRJOUlqTWlMejQ4YkdsdVpTQjRNVDBpTVRJaUlIa3hQU0l5TVNJZ2VESTlJakV5SWlCNU1qMGlNak1pTHo0OGJHbHVaU0I0TVQwaU5DNHlNaUlnZVRFOUlqUXVNaklpSUhneVBTSTFMalkwSWlCNU1qMGlOUzQyTkNJdlBqeHNhVzVsSUhneFBTSXhPQzR6TmlJZ2VURTlJakU0TGpNMklpQjRNajBpTVRrdU56Z2lJSGt5UFNJeE9TNDNPQ0l2UGp4c2FXNWxJSGd4UFNJeElpQjVNVDBpTVRJaUlIZ3lQU0l6SWlCNU1qMGlNVElpTHo0OGJHbHVaU0I0TVQwaU1qRWlJSGt4UFNJeE1pSWdlREk5SWpJeklpQjVNajBpTVRJaUx6NDhiR2x1WlNCNE1UMGlOQzR5TWlJZ2VURTlJakU1TGpjNElpQjRNajBpTlM0Mk5DSWdlVEk5SWpFNExqTTJJaTgrUEd4cGJtVWdlREU5SWpFNExqTTJJaUI1TVQwaU5TNDJOQ0lnZURJOUlqRTVMamM0SWlCNU1qMGlOQzR5TWlJdlBqd3ZjM1puUGc9PSIpOw0KICAtLWljb24tbW9vbi1saWdodDogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lnWm1sc2JEMGlJMFk0UmpsQ1FTSWdjM1J5YjJ0bFBTSWpOVFUxTlRVMUlpQnpkSEp2YTJVdGQybGtkR2c5SWpJaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p5YjNWdVpDSStQSEJoZEdnZ1pEMGlUVEl4SURFeUxqYzVRVGtnT1NBd0lERWdNU0F4TVM0eU1TQXpZVGNnTnlBd0lEQWdNQ0E1TGpjNUlEa3VOemw2SWk4K1BDOXpkbWMrIik7DQogIC0taWNvbi1zdW4tZGFyazogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lnWm1sc2JEMGlibTl1WlNJZ2MzUnliMnRsUFNJalJqWkdPRVpHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0p5YjNWdVpDSWdjM1J5YjJ0bExXeHBibVZxYjJsdVBTSnliM1Z1WkNJK1BHTnBjbU5zWlNCamVEMGlNVElpSUdONVBTSXhNaUlnY2owaU5DSWdabWxzYkQwaUkwWXlRalpFTkNJdlBqeHNhVzVsSUhneFBTSXhNaUlnZVRFOUlqRWlJSGd5UFNJeE1pSWdlVEk5SWpNaUx6NDhiR2x1WlNCNE1UMGlNVElpSUhreFBTSXlNU0lnZURJOUlqRXlJaUI1TWowaU1qTWlMejQ4YkdsdVpTQjRNVDBpTkM0eU1pSWdlVEU5SWpRdU1qSWlJSGd5UFNJMUxqWTBJaUI1TWowaU5TNDJOQ0l2UGp4c2FXNWxJSGd4UFNJeE9DNHpOaUlnZVRFOUlqRTRMak0ySWlCNE1qMGlNVGt1TnpnaUlIa3lQU0l4T1M0M09DSXZQanhzYVc1bElIZ3hQU0l4SWlCNU1UMGlNVElpSUhneVBTSXpJaUI1TWowaU1USWlMejQ4YkdsdVpTQjRNVDBpTWpFaUlIa3hQU0l4TWlJZ2VESTlJakl6SWlCNU1qMGlNVElpTHo0OGJHbHVaU0I0TVQwaU5DNHlNaUlnZVRFOUlqRTVMamM0SWlCNE1qMGlOUzQyTkNJZ2VUSTlJakU0TGpNMklpOCtQR3hwYm1VZ2VERTlJakU0TGpNMklpQjVNVDBpTlM0Mk5DSWdlREk5SWpFNUxqYzRJaUI1TWowaU5DNHlNaUl2UGp3dmMzWm5QZz09Iik7DQogIC0taWNvbi1tb29uLWRhcms6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ1ptbHNiRDBpSTBRMlJFTkdSaUlnYzNSeWIydGxQU0lqUmpaR09FWkdJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlJSE4wY205clpTMXNhVzVsWTJGd1BTSnliM1Z1WkNJZ2MzUnliMnRsTFd4cGJtVnFiMmx1UFNKeWIzVnVaQ0krUEhCaGRHZ2daRDBpVFRJeElERXlMamM1UVRrZ09TQXdJREVnTVNBeE1TNHlNU0F6WVRjZ055QXdJREFnTUNBNUxqYzVJRGt1TnpsNklpOCtQQzl6ZG1jKyIpOw0KfQ0KDQoqLA0KKjo6YmVmb3JlLA0KKjo6YWZ0ZXIgew0KICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KfQ0KDQpodG1sLA0KYm9keSB7DQogIGhlaWdodDogMTAwJTsNCiAgbWFyZ2luOiAwOw0KICBwYWRkaW5nOiAwOw0KfQ0KDQpib2R5IHsNCiAgZm9udC1mYW1pbHk6ICJRdWlja3NhbmQiLCAiVHJlYnVjaGV0IE1TIiwgc2Fucy1zZXJpZjsNCiAgZm9udC1zaXplOiAxNnB4Ow0KICBsaW5lLWhlaWdodDogMS43Ow0KICBjb2xvcjogdmFyKC0tdGV4dC1ib2R5KTsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYmctbGVmdCkgMCUsIHZhcigtLWJnLXJpZ2h0KSAxMDAlKTsNCn0NCg0KaDEudGl0bGUsDQpoMi50aXRsZSwNCmgzLnRpdGxlLA0KaDEuc3VidGl0bGUsDQpoMi5zdWJ0aXRsZSwNCmgzLnN1YnRpdGxlIHsNCiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KfQ0KDQojbWFpbiBwIHsNCiAgbWFyZ2luOiAwLjM1cmVtIDAgMC45cmVtIDA7DQp9DQoNCiNtYWluIHVsLA0KI21haW4gb2wgew0KICBtYXJnaW46IDAuMnJlbSAwIDAuOXJlbSAwOw0KICBwYWRkaW5nLWxlZnQ6IDEuNHJlbTsNCn0NCg0KI21haW4gbGkgew0KICBtYXJnaW46IDAuMTVyZW0gMDsNCn0NCg0KI21haW4gdWwgbGk6Om1hcmtlciB7DQogIGNvbnRlbnQ6ICLwn5CwICI7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCiAgZm9udC1zaXplOiAwLjlyZW07DQp9DQoNCmEgew0KICBjb2xvcjogdmFyKC0tdGV4dC1ib2R5KTsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkIHZhcigtLWxpbmstdW5kZXJsaW5lKTsNCiAgdHJhbnNpdGlvbjogYWxsIDAuMThzIGVhc2U7DQp9DQoNCmE6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tdGV4dC1ib2R5KTsNCiAgYmFja2dyb3VuZDogdmFyKC0tbGluay1ob3Zlci1iZyk7DQogIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkOw0KfQ0KDQpociB7DQogIGJvcmRlcjogbm9uZTsNCiAgaGVpZ2h0OiAycHg7DQogIG1heC13aWR0aDogNzIlOw0KICBtYXJnaW46IDEuNHJlbSBhdXRvOw0KICBib3JkZXItcmFkaXVzOiA5OTlweDsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgdmFyKC0tZWFyLXBpbmspLCB2YXIoLS1zbm93LWZ1ciksIHRyYW5zcGFyZW50KTsNCn0NCg0KaDEsDQpoMiwNCmgzLA0KaDQsDQpoNSB7DQogIGZvbnQtZmFtaWx5OiAiRnJlZG9rYSIsICJRdWlja3NhbmQiLCBzYW5zLXNlcmlmOw0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQogIGxldHRlci1zcGFjaW5nOiAwLjAyZW07DQp9DQoNCmJvZHkgI2NvbnRlbnQgew0KICBtYXgtd2lkdGg6IDEyMDBweCAhaW1wb3J0YW50Ow0KICBtYXJnaW46IDAgYXV0byAhaW1wb3J0YW50Ow0KICBwYWRkaW5nOiAyLjRyZW0gMi40cmVtIDNyZW0gIWltcG9ydGFudDsNCiAgdHJhbnNpdGlvbjogbWFyZ2luLWxlZnQgMC4yNXMgZWFzZSwgbWF4LXdpZHRoIDAuMjVzIGVhc2U7DQp9DQoNCmJvZHkgI21haW4gew0KICBtYXgtd2lkdGg6IDExMDBweCAhaW1wb3J0YW50Ow0KICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICBtYXJnaW46IDJyZW0gYXV0byAzcmVtICFpbXBvcnRhbnQ7DQogIHBhZGRpbmc6IDJyZW0gMi40cmVtIDIuNnJlbSAhaW1wb3J0YW50Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJnKTsNCiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKSAhaW1wb3J0YW50Ow0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc29mdCkgIWltcG9ydGFudDsNCiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGFiZWwtZ3JheSk7DQp9DQoNCiNzaWRlYmFyIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1iZyk7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCiAgcGFkZGluZy10b3A6IDEuMnJlbTsNCiAgd2lkdGg6IDI4MHB4Ow0KICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7DQogIGJveC1zaGFkb3c6IHZhcigtLXNpZGViYXItc2hhZG93KTsNCn0NCg0KI3NpZGViYXIgaDIgew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1zbm93LWZ1ciksIHZhcigtLWVhci1waW5rKSk7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCiAgZm9udC1mYW1pbHk6ICJGcmVkb2thIiwgIlF1aWNrc2FuZCIsIHNhbnMtc2VyaWY7DQogIGZvbnQtc2l6ZTogMXJlbTsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBwYWRkaW5nOiAwLjdyZW0gMC42cmVtOw0KICBib3JkZXItcmFkaXVzOiAxOHB4Ow0KICBib3gtc2hhZG93OiB2YXIoLS1zaWRlYmFyLWgyLXNoYWRvdyk7DQogIG1hcmdpbjogMCAwLjlyZW0gMXJlbSAwLjlyZW07DQp9DQoNCiNzaWRlYmFyIC50b2NpZnksDQojc2lkZWJhciB1bCB7DQogIGZvbnQtc2l6ZTogMC45NXJlbTsNCn0NCg0KI3NpZGViYXIgYSB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBwYWRkaW5nOiA0cHggMTBweDsNCiAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogIG1hcmdpbjogMXB4IDA7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCn0NCg0KI3NpZGViYXIgYTpob3ZlciwNCiNzaWRlYmFyIC50b2NpZnktZm9jdXMgPiBhIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tc25vdy1mdXIpICFpbXBvcnRhbnQ7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKSAhaW1wb3J0YW50Ow0KICBmb250LXdlaWdodDogNjAwOw0KfQ0KDQojcG9zdGFtYmxlIHsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYmctbGVmdCksIHZhcigtLWJnLXJpZ2h0KSk7DQogIGJvcmRlci10b3A6IDJweCBzb2xpZCB2YXIoLS1sYWJlbC1ncmF5KTsNCiAgY29sb3I6IHZhcigtLXRleHQtdGl0bGUpOw0KICBwYWRkaW5nOiAwLjdyZW0gMC45cmVtIDAuOHJlbTsNCiAgZm9udC1zaXplOiAwLjg1cmVtOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCiNwb3N0YW1ibGUgcCB7DQogIG1hcmdpbjogMC4xNXJlbSAwOw0KfQ0KDQojcG9zdGFtYmxlIHNwYW4sDQojcG9zdGFtYmxlIGEgew0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSkgIWltcG9ydGFudDsNCn0NCg0KI3Bvc3RhbWJsZSAuZGF0ZSB7DQogIGNvbG9yOiB2YXIoLS10ZXh0LWJvZHkpICFpbXBvcnRhbnQ7DQp9DQoNCiNwb3N0YW1ibGUgLmRhdGUgLmdseXBoaWNvbiB7DQogIGNvbG9yOiBpbmhlcml0Ow0KfQ0KDQojcG9zdGFtYmxlIC5hdXRob3IgLmdseXBoaWNvbi5nbHlwaGljb24tdXNlciB7DQogIGZvbnQtc2l6ZTogMDsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQojcG9zdGFtYmxlIC5hdXRob3IgLmdseXBoaWNvbi5nbHlwaGljb24tdXNlcjo6YmVmb3JlIHsNCiAgY29udGVudDogIvCfp5UiOw0KICBmb250LXNpemU6IDFyZW07DQogIG1hcmdpbi1yaWdodDogMC4zNXJlbTsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICB0b3A6IDFweDsNCn0NCg0KI3Bvc3RhbWJsZSAuZGF0ZSAuZ2x5cGhpY29uLmdseXBoaWNvbi1jYWxlbmRhciB7DQogIG1hcmdpbi1yaWdodDogMC4zNXJlbTsNCn0NCg0KYm9keTpub3QoLnNpZGViYXItY29sbGFwc2VkKSAjY29udGVudCB7DQogIG1hcmdpbi1sZWZ0OiAzMDBweCAhaW1wb3J0YW50Ow0KICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDMwMHB4KSAhaW1wb3J0YW50Ow0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsNCiAgYm9keTpub3QoLnNpZGViYXItY29sbGFwc2VkKSAjY29udGVudCB7DQogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsNCiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgfQ0KDQogICNzaWRlYmFyIHsNCiAgICB3aWR0aDogODB2dzsNCiAgICBtYXgtd2lkdGg6IDI2MHB4Ow0KICAgIHBvc2l0aW9uOiBmaXhlZDsNCiAgICB0b3A6IDA7DQogICAgbGVmdDogMDsNCiAgICBoZWlnaHQ6IDEwMCU7DQogICAgb3ZlcmZsb3cteTogYXV0bzsNCiAgICB6LWluZGV4OiA5OTkwOw0KICAgIHBhZGRpbmctYm90dG9tOiAzcmVtOw0KICB9DQoNCiAgYm9keTpub3QoLnNpZGViYXItY29sbGFwc2VkKSAjc2lkZWJhciB7DQogICAgYm94LXNoYWRvdzogdmFyKC0tc2lkZWJhci1zaGFkb3ctb3Blbik7DQogIH0NCn0NCg0KI21haW4gLnNlY3Rpb24ubGV2ZWwyIHsNCiAgbWF4LXdpZHRoOiA5ODBweDsNCiAgbWFyZ2luOiAxLjZyZW0gYXV0bzsNCiAgcGFkZGluZzogMS4zcmVtIDEuNXJlbSAxLjZyZW07DQogIGJvcmRlci1yYWRpdXM6IDE4cHg7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxhYmVsLWdyYXkpOw0KICBib3JkZXItbGVmdDogNnB4IHNvbGlkIHZhcigtLWVhci1waW5rKTsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNvZnQpOw0KICBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJnKTsNCn0NCg0KI21haW4gLnNlY3Rpb24ubGV2ZWwyID4gaDIgew0KICBtYXJnaW4tdG9wOiAwOw0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIHBhZGRpbmc6IDAuNDVyZW0gMC45cmVtOw0KICBib3JkZXItcmFkaXVzOiAxNHB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS1zbm93LWZ1cik7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2VjdGlvbi10aXRsZS1zaGFkb3cpOw0KfQ0KDQojbWFpbiAuc2VjdGlvbi5sZXZlbDMgPiBoMyB7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgcGFkZGluZzogMC4zNXJlbSAwLjc1cmVtOw0KICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS1sYWJlbC1ncmF5KTsNCiAgY29sb3I6IHZhcigtLXRleHQtdGl0bGUpOw0KfQ0KDQoubG9nby13cmFwcGVyIHsNCiAgZGlzcGxheTogZmxleDsNCiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgbWFyZ2luOiAxLjRyZW0gMCAxcmVtOw0KfQ0KDQoubG9nby1mcmFtZSB7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgd2lkdGg6IDE4MHB4Ow0KICBoZWlnaHQ6IDE4MHB4Ow0KICBhc3BlY3QtcmF0aW86IDEgLyAxOw0KICBib3JkZXItcmFkaXVzOiA1MCU7DQogIHBhZGRpbmc6IDhweDsNCiAgYmFja2dyb3VuZDogY29uaWMtZ3JhZGllbnQoZnJvbSAyMTBkZWcsIHZhcigtLXNub3ctZnVyKSwgdmFyKC0tZWFyLXBpbmspLCB2YXIoLS1sYWJlbC1ncmF5KSwgdmFyKC0tYmctcmlnaHQpLCB2YXIoLS1hY2NlbnQtc3RhciksIHZhcigtLXNub3ctZnVyKSk7DQogIGJveC1zaGFkb3c6IHZhcigtLWxvZ28tZnJhbWUtc2hhZG93KTsNCn0NCg0KLmxvZ28taW5uZXIgew0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiAxMDAlOw0KICBhc3BlY3QtcmF0aW86IDEgLyAxOw0KICBib3JkZXItcmFkaXVzOiA1MCU7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMzAlIDAsICNmZmZmZmYgMCwgdmFyKC0tY2FyZC1iZykgNjAlLCB2YXIoLS1hY2NlbnQtc3RhcikgMTAwJSk7DQogIGRpc3BsYXk6IGZsZXg7DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KfQ0KDQojbWFpbiAubG9nby1pbm5lciBpbWcgew0KICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsNCiAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7DQogIG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDsNCiAgb2JqZWN0LWZpdDogY292ZXI7DQogIG9iamVjdC1wb3NpdGlvbjogY2VudGVyOw0KICBkaXNwbGF5OiBibG9jazsNCiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7DQogIHBhZGRpbmc6IDAgIWltcG9ydGFudDsNCiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7DQogIGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50Ow0KICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7DQogIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICB1c2VyLXNlbGVjdDogbm9uZTsNCn0NCg0KLmxvZ28tZnJhbWU6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICIqIjsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IC00cHg7DQogIHJpZ2h0OiAxOHB4Ow0KICBmb250LXNpemU6IDEuMXJlbTsNCiAgY29sb3I6IHZhcigtLWFjY2VudC1zdGFyKTsNCiAgdGV4dC1zaGFkb3c6IHZhcigtLWxvZ28tc3Rhci1zaGFkb3cpOw0KfQ0KDQoubG9nby1mcmFtZTo6YWZ0ZXIgew0KICBjb250ZW50OiAibyI7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgYm90dG9tOiA2cHg7DQogIGxlZnQ6IDE4cHg7DQogIGZvbnQtc2l6ZTogMC45cmVtOw0KICBjb2xvcjogdmFyKC0tZWFyLXBpbmspOw0KICB0ZXh0LXNoYWRvdzogdmFyKC0tbG9nby1kb3Qtc2hhZG93KTsNCn0NCg0KLmxvZ28tY2FwdGlvbiB7DQogIG1hcmdpbi10b3A6IDAuMzVyZW07DQogIGZvbnQtc2l6ZTogMC45cmVtOw0KICBmb250LXdlaWdodDogNzAwOw0KICBsZXR0ZXItc3BhY2luZzogMC4xMmVtOw0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQp9DQoNCi5pbmZvLWJhZGdlcyB7DQogIGRpc3BsYXk6IGZsZXg7DQogIGZsZXgtd3JhcDogd3JhcDsNCiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogIGdhcDogMC44cmVtOw0KICBtYXJnaW46IDFyZW0gMCAwLjZyZW07DQp9DQoNCi5iYWRnZS1jYXJkIHsNCiAgbWluLXdpZHRoOiAxNzBweDsNCiAgcGFkZGluZzogMC43cmVtIDEuMnJlbTsNCiAgYm9yZGVyLXJhZGl1czogMTZweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctY2FyZCk7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxhYmVsLWdyYXkpOw0KfQ0KDQouYmFkZ2UtcHJpbWFyeSB7DQogIGJhY2tncm91bmQ6IHZhcigtLXNub3ctZnVyKTsNCn0NCg0KLmJhZGdlLXNlY29uZGFyeSB7DQogIGJhY2tncm91bmQ6IHZhcigtLWVhci1waW5rKTsNCn0NCg0KLmJhZGdlLXRlcnRpYXJ5IHsNCiAgYmFja2dyb3VuZDogdmFyKC0tbGFiZWwtZ3JheSk7DQp9DQoNCi5iYWRnZS1sYWJlbCB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KICBsZXR0ZXItc3BhY2luZzogMC4wOGVtOw0KICBmb250LXNpemU6IDAuN3JlbTsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSk7DQp9DQoNCi5iYWRnZS12YWx1ZSB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBmb250LXNpemU6IDAuOTVyZW07DQogIGZvbnQtd2VpZ2h0OiA3MDA7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCn0NCg0KLmhlcm8tdGl0bGUgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGZvbnQtZmFtaWx5OiAiRnJlZG9rYSIsICJRdWlja3NhbmQiLCBzYW5zLXNlcmlmOw0KICBmb250LXNpemU6IGNsYW1wKDEuN3JlbSwgM3Z3LCAyLjVyZW0pOw0KICBsZXR0ZXItc3BhY2luZzogMC4xMmVtOw0KICBtYXJnaW46IDAuNnJlbSAwIDAuMXJlbTsNCiAgY29sb3I6IHZhcigtLXRleHQtdGl0bGUpOw0KfQ0KDQouaGVyby1zdWJ0aXRsZSB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSk7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQogIG1hcmdpbi1ib3R0b206IDAuOHJlbTsNCn0NCg0KLmxvZ28td3JhcHBlciwNCi5pbmZvLWJhZGdlcywNCi5oZXJvLXRpdGxlLA0KLmhlcm8tc3VidGl0bGUgew0KICBhbmltYXRpb246IGZsb2F0SW4gMC42NXMgZWFzZSBib3RoOw0KfQ0KDQoubG9nby13cmFwcGVyIHsNCiAgYW5pbWF0aW9uLWRlbGF5OiAwLjA1czsNCn0NCg0KLmluZm8tYmFkZ2VzIHsNCiAgYW5pbWF0aW9uLWRlbGF5OiAwLjEyczsNCn0NCg0KLmhlcm8tdGl0bGUgew0KICBhbmltYXRpb24tZGVsYXk6IDAuMThzOw0KfQ0KDQouaGVyby1zdWJ0aXRsZSB7DQogIGFuaW1hdGlvbi1kZWxheTogMC4yMnM7DQp9DQoNCkBrZXlmcmFtZXMgZmxvYXRJbiB7DQogIGZyb20gew0KICAgIG9wYWNpdHk6IDA7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEycHgpOw0KICB9DQogIHRvIHsNCiAgICBvcGFjaXR5OiAxOw0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsNCiAgfQ0KfQ0KDQojbWFpbiBpbWcgew0KICBkaXNwbGF5OiBibG9jazsNCiAgbWFyZ2luOiAxLjJyZW0gYXV0byAxLjRyZW07DQogIGJvcmRlci1yYWRpdXM6IDEycHg7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zb2Z0KTsNCiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogIGhlaWdodDogYXV0byAhaW1wb3J0YW50Ow0KfQ0KDQojbWFpbiAuZmlndXJlLA0KI21haW4gLmZpZ3VyZSBpbWcgew0KICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCn0NCg0KI21haW4gZmlndXJlLA0KI21haW4gZmlndXJlIGltZyB7DQogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KfQ0KDQojbWFpbiB0YWJsZSB7DQogIHdpZHRoOiAxMDAlOw0KICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOw0KICBtYXJnaW46IDEuMnJlbSAwIDEuNnJlbTsNCiAgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7DQogIGJvcmRlci1yYWRpdXM6IDE0cHg7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zb2Z0KTsNCn0NCg0KI21haW4gdGgsDQojbWFpbiB0ZCB7DQogIHBhZGRpbmc6IDAuNnJlbSAwLjhyZW07DQogIGZvbnQtc2l6ZTogMC45cmVtOw0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQojbWFpbiB0aCB7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCiAgZm9udC13ZWlnaHQ6IDcwMDsNCn0NCg0KI21haW4gdGQgew0KICBjb2xvcjogdmFyKC0tdGV4dC1ib2R5KTsNCn0NCg0KI21haW4gdGhlYWQgdHIgew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHZhcigtLXNub3ctZnVyKSwgdmFyKC0tZWFyLXBpbmspKTsNCn0NCg0KI21haW4gdGJvZHkgdHI6bnRoLWNoaWxkKGV2ZW4pIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tdGFibGUtZXZlbi1iZyk7DQp9DQoNCiNtYWluIHRib2R5IHRyOmhvdmVyIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tdGFibGUtaG92ZXItYmcpOw0KfQ0KDQojbWFpbiBibG9ja3F1b3RlIHsNCiAgbWFyZ2luOiAxcmVtIDA7DQogIHBhZGRpbmc6IDAuOXJlbSAxcmVtOw0KICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHZhcigtLWVhci1waW5rKTsNCiAgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7DQogIGJvcmRlci1yYWRpdXM6IDEycHg7DQogIGZvbnQtc2l6ZTogMC45NXJlbTsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSk7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zb2Z0KTsNCn0NCg0KcHJlLA0KY29kZSB7DQogIGZvbnQtZmFtaWx5OiAiRmlyYSBDb2RlIiwgIkpldEJyYWlucyBNb25vIiwgQ29uc29sYXMsICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZTsNCn0NCg0KI21haW4gcHJlIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tY29kZS1ibG9jay1iZyk7DQogIGJvcmRlci1yYWRpdXM6IDEycHg7DQogIHBhZGRpbmc6IDAuOHJlbSAxcmVtOw0KICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1sYWJlbC1ncmF5KTsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNvZnQpOw0KICBvdmVyZmxvdy14OiBhdXRvOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQp9DQoNCiNtYWluIHByZTo6YmVmb3JlIHsNCiAgY29udGVudDogImNvZGUiOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDogNnB4Ow0KICByaWdodDogMTJweDsNCiAgZm9udC1zaXplOiAwLjdyZW07DQogIHBhZGRpbmc6IDJweCA3cHg7DQogIGJvcmRlci1yYWRpdXM6IDk5OXB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS1lYXItcGluayk7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCn0NCg0KI21haW4gcCA+IGNvZGUsDQojbWFpbiBsaSA+IGNvZGUgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2RlLWlubGluZS1iZyk7DQogIHBhZGRpbmc6IDJweCA2cHg7DQogIGJvcmRlci1yYWRpdXM6IDZweDsNCiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGFiZWwtZ3JheSk7DQogIGZvbnQtc2l6ZTogMC45ZW07DQp9DQoNCmJvZHkuZGFyay1tb2RlIG1qeC1jb250YWluZXIsDQpib2R5LmRhcmstbW9kZSAubWp4LWNvbnRhaW5lciwNCmJvZHkuZGFyay1tb2RlIC5NYXRoSmF4X0Rpc3BsYXksDQpib2R5LmRhcmstbW9kZSAuTWF0aEpheCwNCmJvZHkuZGFyay1tb2RlIHNwYW5baWQqPSdNYXRoSmF4LVNwYW4nXSwNCmJvZHkuZGFyay1tb2RlIHNwYW5baWQqPSdNYXRoSmF4LVNwYW4nXSAqIHsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSkgIWltcG9ydGFudDsNCn0NCg0KYm9keS5kYXJrLW1vZGUgbWp4LWNvbnRhaW5lciBzdmcsDQpib2R5LmRhcmstbW9kZSAubWp4LWNvbnRhaW5lciBzdmcsDQpib2R5LmRhcmstbW9kZSAuTWF0aEpheF9TVkcgc3ZnLA0KYm9keS5kYXJrLW1vZGUgLk1hdGhKYXhfU1ZHIHN2ZyAqIHsNCiAgZmlsbDogdmFyKC0tdGV4dC1ib2R5KSAhaW1wb3J0YW50Ow0KICBzdHJva2U6IHZhcigtLXRleHQtYm9keSkgIWltcG9ydGFudDsNCiAgZmlsdGVyOiBub25lOw0KfQ0KDQouY2FwdGlvbiwNCi5mb290bm90ZXMsDQouZm9vdG5vdGUgew0KICBmb250LXNpemU6IDAuODJyZW07DQogIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsNCn0NCg0KZGV0YWlscyB7DQogIGJhY2tncm91bmQ6IHZhcigtLWRldGFpbHMtYmcpOw0KICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tbGFiZWwtZ3JheSk7DQogIHBhZGRpbmc6IDAuNHJlbSAwLjhyZW07DQogIG1hcmdpbjogMC44cmVtIDA7DQp9DQoNCnN1bW1hcnkgew0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCiNzaWRlYmFyLXRvZ2dsZSB7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgdG9wOiAxNnB4Ow0KICBsZWZ0OiAyMnB4Ow0KICB3aWR0aDogNTJweDsNCiAgaGVpZ2h0OiAzNnB4Ow0KICBib3JkZXItcmFkaXVzOiAxNHB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS1zbm93LWZ1cik7DQogIGJveC1zaGFkb3c6IHZhcigtLXRvZ2dsZS1zaGFkb3cpOw0KICBkaXNwbGF5OiBmbGV4Ow0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICB6LWluZGV4OiA5OTk5Ow0KfQ0KDQojc2lkZWJhci10b2dnbGUgc3BhbiwNCiNzaWRlYmFyLXRvZ2dsZSBzcGFuOjpiZWZvcmUsDQojc2lkZWJhci10b2dnbGUgc3Bhbjo6YWZ0ZXIgew0KICBjb250ZW50OiAiIjsNCiAgZGlzcGxheTogYmxvY2s7DQogIHdpZHRoOiAyNnB4Ow0KICBoZWlnaHQ6IDNweDsNCiAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogIGJhY2tncm91bmQ6IHZhcigtLXRleHQtYm9keSk7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCg0KI3NpZGViYXItdG9nZ2xlIHNwYW46OmJlZm9yZSB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiAtNnB4Ow0KfQ0KDQojc2lkZWJhci10b2dnbGUgc3Bhbjo6YWZ0ZXIgew0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDogNnB4Ow0KfQ0KDQpib2R5Om5vdCguc2lkZWJhci1jb2xsYXBzZWQpICNzaWRlYmFyLXRvZ2dsZSB7DQogIGxlZnQ6IDMxMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5idG4tZ3JvdXAucHVsbC1yaWdodCA+IC5idG4uYnRuLWRlZmF1bHQuYnRuLXhzLmRyb3Bkb3duLXRvZ2dsZSB7DQogIGJhY2tncm91bmQ6IHZhcigtLWJ0bi1leHBsb3JlKTsNCiAgY29sb3I6IHZhcigtLWJ0bi10ZXh0KTsNCiAgYm9yZGVyOiBub25lOw0KICBib3JkZXItcmFkaXVzOiA5OTlweDsNCiAgcGFkZGluZzogNnB4IDE2cHg7DQogIGZvbnQtc2l6ZTogMC43OHJlbTsNCiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNvZnQpOw0KfQ0KDQouYnRuLWdyb3VwLnB1bGwtcmlnaHQgPiAuYnRuLmJ0bi1kZWZhdWx0LmJ0bi14cy5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHsNCiAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tYnRuLXRleHQpOw0KfQ0KDQouYnRuLWdyb3VwLnB1bGwtcmlnaHQgLmRyb3Bkb3duLW1lbnUgew0KICBib3JkZXItcmFkaXVzOiAxNHB4Ow0KICBwYWRkaW5nOiAwLjI1cmVtIDA7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxhYmVsLWdyYXkpOw0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc29mdCk7DQp9DQoNCi5idG4tZXhwbG9yZSwNCi5idG4tcmVsYXggew0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogIHBhZGRpbmc6IDAuNTVyZW0gMS4ycmVtOw0KICBib3JkZXItcmFkaXVzOiA5OTlweDsNCiAgYm9yZGVyOiBub25lOw0KICBmb250LXdlaWdodDogNjAwOw0KICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOw0KICBjb2xvcjogdmFyKC0tYnRuLXRleHQpOw0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zb2Z0KTsNCn0NCg0KLmJ0bi1leHBsb3JlIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tYnRuLWV4cGxvcmUpOw0KfQ0KDQouYnRuLXJlbGF4IHsNCiAgYmFja2dyb3VuZDogdmFyKC0tYnRuLXJlbGF4KTsNCn0NCg0KI21vZGUtdG9nZ2xlIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDE2cHg7DQogIHJpZ2h0OiAyNnB4Ow0KICB3aWR0aDogMzhweDsNCiAgaGVpZ2h0OiAzOHB4Ow0KICBib3JkZXItcmFkaXVzOiA1MCU7DQogIGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmcpOw0KICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1sYWJlbC1ncmF5KTsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNvZnQpOw0KICBkaXNwbGF5OiBmbGV4Ow0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgZ2FwOiAwOw0KICBwYWRkaW5nOiAwOw0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGxpbmUtaGVpZ2h0OiAwOw0KICB6LWluZGV4OiA5OTk5Ow0KfQ0KDQojbW9kZS10b2dnbGUgLnN1biwNCiNtb2RlLXRvZ2dsZSAubW9vbiB7DQogIGZsZXg6IDAgMCBhdXRvOw0KICB3aWR0aDogMThweDsNCiAgaGVpZ2h0OiAxOHB4Ow0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogIG1hcmdpbjogMDsNCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOw0KICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47DQogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2U7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSh2YXIoLS10b2dnbGUtaWNvbi1zaGlmdCkpOw0KfQ0KDQojbW9kZS10b2dnbGUgLnN1biB7DQogIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWljb24tc3VuLWxpZ2h0KTsNCn0NCg0KI21vZGUtdG9nZ2xlIC5tb29uIHsNCiAgYmFja2dyb3VuZC1pbWFnZTogdmFyKC0taWNvbi1tb29uLWxpZ2h0KTsNCn0NCg0KYm9keTpub3QoLmRhcmstbW9kZSkgI21vZGUtdG9nZ2xlIC5zdW4gew0KICBkaXNwbGF5OiBub25lOw0KfQ0KDQpib2R5Om5vdCguZGFyay1tb2RlKSAjbW9kZS10b2dnbGUgLm1vb24gew0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCn0NCg0KYm9keS5kYXJrLW1vZGUgI21vZGUtdG9nZ2xlIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxhYmVsLWdyYXkpOw0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc29mdCk7DQp9DQoNCmJvZHkuZGFyay1tb2RlICNtb2RlLXRvZ2dsZSAuc3VuIHsNCiAgYmFja2dyb3VuZC1pbWFnZTogdmFyKC0taWNvbi1zdW4tZGFyayk7DQp9DQoNCmJvZHkuZGFyay1tb2RlICNtb2RlLXRvZ2dsZSAubW9vbiB7DQogIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWljb24tbW9vbi1kYXJrKTsNCn0NCg0KYm9keS5kYXJrLW1vZGUgI21vZGUtdG9nZ2xlIC5zdW4gew0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCn0NCg0KYm9keS5kYXJrLW1vZGUgI21vZGUtdG9nZ2xlIC5tb29uIHsNCiAgZGlzcGxheTogbm9uZTsNCn0NCg0KYm9keS5kYXJrLW1vZGUgew0KICBjb2xvcjogdmFyKC0tdGV4dC1ib2R5KTsNCiAgLS1iZy1sZWZ0OiAjMTIxODI2Ow0KICAtLWJnLXJpZ2h0OiAjMjQzMDRhOw0KICAtLWNhcmQtYmc6ICMxYzIzMzg7DQogIC0tdGV4dC10aXRsZTogI2ZmZmZmZjsNCiAgLS10ZXh0LWJvZHk6ICNmZmZmZmY7DQogIC0tdGV4dC1tdXRlZDogI2ZmZmZmZjsNCiAgLS1sYWJlbC1ncmF5OiAjM2E0NjVmOw0KICAtLXNub3ctZnVyOiAjOGFhMGZmOw0KICAtLWVhci1waW5rOiAjZmY4ZmM3Ow0KICAtLWJ0bi1leHBsb3JlOiAjNWZiMmQ2Ow0KICAtLWJ0bi1yZWxheDogI2M5OGFjNzsNCiAgLS1hY2NlbnQtc3RhcjogIzJhMzM0ZDsNCiAgLS1zaGFkb3ctc29mdDogMCAxOHB4IDM1cHggcmdiYSg2LCAxMCwgMjAsIDAuNDUpOw0KICAtLXNoYWRvdy1jYXJkOiAwIDhweCAxOHB4IHJnYmEoNiwgMTAsIDIwLCAwLjU1KTsNCiAgLS1saW5rLXVuZGVybGluZTogcmdiYSg5NSwgMTc4LCAyMTQsIDAuNyk7DQogIC0tbGluay1ob3Zlci1iZzogcmdiYSgyNDIsIDE4MiwgMjEyLCAwLjIpOw0KICAtLXNpZGViYXItYmc6IHJnYmEoMjQsIDMwLCA0OSwgMC45Nik7DQogIC0tc2lkZWJhci1ib3JkZXI6IHJnYmEoNTgsIDcwLCA5NSwgMC45KTsNCiAgLS1zaWRlYmFyLXNoYWRvdzogMTBweCAwIDIycHggcmdiYSg2LCAxMCwgMjAsIDAuNTUpOw0KICAtLXNpZGViYXItc2hhZG93LW9wZW46IDE0cHggMCAyNnB4IHJnYmEoNiwgMTAsIDIwLCAwLjYpOw0KICAtLXNpZGViYXItaDItc2hhZG93OiAwIDZweCAxNHB4IHJnYmEoNiwgMTAsIDIwLCAwLjU1KTsNCiAgLS1zZWN0aW9uLXRpdGxlLXNoYWRvdzogMCA2cHggMTRweCByZ2JhKDYsIDEwLCAyMCwgMC41KTsNCiAgLS1sb2dvLWZyYW1lLXNoYWRvdzogMCAxMnB4IDI2cHggcmdiYSg2LCAxMCwgMjAsIDAuNiksIDAgMCAwIDNweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOw0KICAtLWxvZ28tc3Rhci1zaGFkb3c6IDAgMCA4cHggcmdiYSgyNDIsIDE4MiwgMjEyLCAwLjU1KTsNCiAgLS1sb2dvLWRvdC1zaGFkb3c6IDAgMCA2cHggcmdiYSgyMTQsIDIyMCwgMjU1LCAwLjU1KTsNCiAgLS10YWJsZS1ldmVuLWJnOiByZ2JhKDQyLCA1MiwgNzksIDAuNik7DQogIC0tdGFibGUtaG92ZXItYmc6IHJnYmEoMjQyLCAxODIsIDIxMiwgMC4yKTsNCiAgLS1jb2RlLWlubGluZS1iZzogcmdiYSgyMTQsIDIyMCwgMjU1LCAwLjIpOw0KICAtLWNvZGUtYmxvY2stYmc6ICMxNTFiMmM7DQogIC0tZGV0YWlscy1iZzogcmdiYSgyMywgMjksIDQ1LCAwLjg1KTsNCiAgLS10b2dnbGUtc2hhZG93OiAwIDRweCAxMHB4IHJnYmEoNiwgMTAsIDIwLCAwLjU1KTsNCn0NCg0KYm9keS5kYXJrLW1vZGUgYSB7DQogIGNvbG9yOiB2YXIoLS10ZXh0LWJvZHkpOw0KICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpOw0KfQ0KDQpib2R5LmRhcmstbW9kZSBhOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSk7DQogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7DQp9DQoNCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7DQogICosDQogICo6OmJlZm9yZSwNCiAgKjo6YWZ0ZXIgew0KICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50Ow0KICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsNCiAgfQ0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogMTEwMHB4KSB7DQogIGJvZHkgI2NvbnRlbnQgew0KICAgIHBhZGRpbmc6IDEuOHJlbSAxLjNyZW0gMi40cmVtICFpbXBvcnRhbnQ7DQogIH0NCg0KICBib2R5ICNtYWluIHsNCiAgICBtYXJnaW46IDEuNnJlbSBhdXRvIDIuM3JlbSAhaW1wb3J0YW50Ow0KICAgIHBhZGRpbmc6IDEuNnJlbSAxLjJyZW0gMnJlbSAhaW1wb3J0YW50Ow0KICAgIGJvcmRlci1yYWRpdXM6IDE4cHggIWltcG9ydGFudDsNCiAgfQ0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogODAwcHgpIHsNCiAgYm9keSAjY29udGVudCB7DQogICAgcGFkZGluZzogMS40cmVtIDAuOHJlbSAycmVtICFpbXBvcnRhbnQ7DQogIH0NCg0KICBib2R5ICNtYWluIHsNCiAgICBtYXJnaW46IDEuNHJlbSBhdXRvIDIuMXJlbSAhaW1wb3J0YW50Ow0KICAgIHBhZGRpbmc6IDEuM3JlbSAwLjlyZW0gMS44cmVtICFpbXBvcnRhbnQ7DQogICAgYm9yZGVyLXJhZGl1czogMTRweCAhaW1wb3J0YW50Ow0KICB9DQoNCiAgI3NpZGViYXItdG9nZ2xlIHsNCiAgICB0b3A6IDEwcHggIWltcG9ydGFudDsNCiAgICBsZWZ0OiAxMnB4ICFpbXBvcnRhbnQ7DQogICAgd2lkdGg6IDQwcHggIWltcG9ydGFudDsNCiAgICBoZWlnaHQ6IDMwcHggIWltcG9ydGFudDsNCiAgfQ0KDQogIGJvZHk6bm90KC5zaWRlYmFyLWNvbGxhcHNlZCkgI3NpZGViYXItdG9nZ2xlIHsNCiAgICBsZWZ0OiAxMnB4ICFpbXBvcnRhbnQ7DQogIH0NCg0KICAjbW9kZS10b2dnbGUgew0KICAgIHRvcDogMTBweCAhaW1wb3J0YW50Ow0KICAgIHJpZ2h0OiAxNHB4ICFpbXBvcnRhbnQ7DQogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpOw0KICB9DQoNCiAgLmJ0bi1ncm91cC5wdWxsLXJpZ2h0IHsNCiAgICBtYXJnaW4tdG9wOiA1MnB4Ow0KICAgIG1hcmdpbi1yaWdodDogMTJweDsNCiAgfQ0KDQogIC5pbmZvLWJhZGdlcyB7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICB9DQoNCiAgLmJhZGdlLWNhcmQgew0KICAgIG1pbi13aWR0aDogMDsNCiAgICB3aWR0aDogOTAlOw0KICB9DQoNCiAgLmxvZ28tZnJhbWUgew0KICAgIHdpZHRoOiAxNDBweDsNCiAgICBoZWlnaHQ6IDE0MHB4Ow0KICB9DQoNCiAgLmxvZ28tY2FwdGlvbiB7DQogICAgZm9udC1zaXplOiAwLjhyZW07DQogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsNCiAgfQ0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogNzAwcHgpIHsNCiAgI21haW4gdGFibGUgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIG92ZXJmbG93LXg6IGF1dG87DQogIH0NCg0KICAjbWFpbiB0aCwNCiAgI21haW4gdGQgew0KICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogIH0NCg0KICAjbWFpbiBpbWcgew0KICAgIG1heC13aWR0aDogMTAwJTsNCiAgICBoZWlnaHQ6IGF1dG87DQogIH0NCg0KICAjbWFpbiAuTWF0aEpheF9EaXNwbGF5LA0KICAjbWFpbiAubWp4LWNvbnRhaW5lciB7DQogICAgb3ZlcmZsb3cteDogYXV0bzsNCiAgICBvdmVyZmxvdy15OiBoaWRkZW47DQogIH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7DQogIGJvZHkgew0KICAgIC0tY29udGVudC10b3A6IDQuMnJlbTsNCiAgfQ0KDQogIGJvZHkgI2NvbnRlbnQgew0KICAgIHBhZGRpbmc6IDFyZW0gMC42cmVtIDEuNnJlbSAhaW1wb3J0YW50Ow0KICB9DQoNCiAgYm9keSAjbWFpbiB7DQogICAgbWFyZ2luOiAxLjFyZW0gYXV0byAxLjZyZW0gIWltcG9ydGFudDsNCiAgICBwYWRkaW5nOiAxLjFyZW0gMC43NXJlbSAxLjRyZW0gIWltcG9ydGFudDsNCiAgICBib3JkZXItcmFkaXVzOiAxMnB4ICFpbXBvcnRhbnQ7DQogIH0NCg0KICAjc2lkZWJhciB7DQogICAgd2lkdGg6IDg1dnc7DQogICAgbWF4LXdpZHRoOiAyNDBweDsNCiAgfQ0KDQogIC5oZXJvLXRpdGxlIHsNCiAgICBmb250LXNpemU6IGNsYW1wKDEuNHJlbSwgNnZ3LCAycmVtKTsNCiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtOw0KICB9DQoNCiAgLmhlcm8tc3VidGl0bGUgew0KICAgIGZvbnQtc2l6ZTogMC45cmVtOw0KICB9DQoNCiAgLmluZm8tYmFkZ2VzIHsNCiAgICBnYXA6IDAuNnJlbTsNCiAgfQ0KDQogIC5iYWRnZS1jYXJkIHsNCiAgICB3aWR0aDogMTAwJTsNCiAgICBwYWRkaW5nOiAwLjZyZW0gMC45cmVtOw0KICB9DQoNCiAgLmxvZ28tZnJhbWUgew0KICAgIHdpZHRoOiAxMjBweDsNCiAgICBoZWlnaHQ6IDEyMHB4Ow0KICB9DQoNCiAgLmxvZ28tY2FwdGlvbiB7DQogICAgZm9udC1zaXplOiAwLjc1cmVtOw0KICAgIGxldHRlci1zcGFjaW5nOiAwLjA2ZW07DQogIH0NCg0KICAjbW9kZS10b2dnbGUgew0KICAgIHdpZHRoOiAzMnB4Ow0KICAgIGhlaWdodDogMzJweDsNCiAgICBwYWRkaW5nOiAwOw0KICAgIC0tdG9nZ2xlLWljb24tc2hpZnQ6IDBweDsNCiAgfQ0KDQogICNtb2RlLXRvZ2dsZSAuc3VuLA0KICAjbW9kZS10b2dnbGUgLm1vb24gew0KICAgIHdpZHRoOiAxNnB4Ow0KICAgIGhlaWdodDogMTZweDsNCiAgfQ0KDQogICNzaWRlYmFyLXRvZ2dsZSB7DQogICAgd2lkdGg6IDM4cHggIWltcG9ydGFudDsNCiAgICBoZWlnaHQ6IDI4cHggIWltcG9ydGFudDsNCiAgfQ0KDQogICNzaWRlYmFyLXRvZ2dsZSBzcGFuLA0KICAjc2lkZWJhci10b2dnbGUgc3Bhbjo6YmVmb3JlLA0KICAjc2lkZWJhci10b2dnbGUgc3Bhbjo6YWZ0ZXIgew0KICAgIHdpZHRoOiAyMnB4Ow0KICAgIGhlaWdodDogMnB4Ow0KICB9DQoNCiAgI3NpZGViYXItdG9nZ2xlIHNwYW46OmJlZm9yZSB7DQogICAgdG9wOiAtNXB4Ow0KICB9DQoNCiAgI3NpZGViYXItdG9nZ2xlIHNwYW46OmFmdGVyIHsNCiAgICB0b3A6IDVweDsNCiAgfQ0KfQ0KDQpib2R5ICNjb250ZW50IHsNCiAgcGFkZGluZy10b3A6IHZhcigtLWNvbnRlbnQtdG9wKSAhaW1wb3J0YW50Ow0KfQ0KDQpib2R5LnNpZGViYXItY29sbGFwc2VkICNzaWRlYmFyIHsNCiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KfQ0KDQpib2R5LnNpZGViYXItY29sbGFwc2VkICNjb250ZW50IHsNCiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsNCiAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQp9DQoNCi5sb2dvLXdyYXBwZXIgcHJlLA0KLmxvZ28td3JhcHBlciBjb2RlLA0KLmxvZ28td3JhcHBlciArIHByZSwNCi5sb2dvLXdyYXBwZXIgKyBkaXYgcHJlLA0KLmxvZ28td3JhcHBlciArIGRpdiBjb2RlIHsNCiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KfQ0KLyogRm90byBrYW11IHNlYmFnYWkgbGluZ2thcmFuIGRpIGRhbGFtICovDQoubG9nby1mcmFtZTo6YWZ0ZXIgew0KICBjb250ZW50OiAiIjsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IDhweDsNCiAgbGVmdDogOHB4Ow0KICByaWdodDogOHB4Ow0KICBib3R0b206IDhweDsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBiYWNrZ3JvdW5kOg0KICAgIHVybCgiQzovVXNlcnMvTnVydWwgSWZmYWgvRG93bmxvYWRzL2ZvdG9rdS5qcGciKSBjZW50ZXIgdG9wIC8gY292ZXIgbm8tcmVwZWF0Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmNGZmOw0KfQ0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgQkFDS0dST1VORCBGVUxMICsgU01PT1RIDQogICAoYW50aSBwdXR1cy1wdXR1cyAvIHRpbGluZykNCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCmh0bWwsIGJvZHl7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KDQovKiBrYWxhdSBtYXNpaCBhZGEgYmFnaWFuIHlhbmcga2VsaWF0YW4g4oCca2Vwb3RvbmcgcHV0aWjigJ0NCiAgIChjb250YWluZXIgYmF3YWFuIHRoZW1lKSAqLw0KLm1haW4tY29udGFpbmVyLA0KLmNvbnRhaW5lci1mbHVpZCwNCi50b2MtY29udGVudCwNCi5wYWdlLXdyYXBwZXJ7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7DQp9DQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09DQogICBTSURFQkFSIERFRkFVTFQ6IENMT1NFRA0KICAgKGZpeCBraXJpIGtvc29uZykNCiAgID09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCg0KLyogc2lkZWJhciBkaXR1dHVwIChnZXNlciBrZWx1YXIgbGF5YXIsIGJ1a2FuIGN1bWEgZGlzcGxheSBub25lKSAqLw0KYm9keS5zaWRlYmFyLWNsb3NlZCAjVE9DLA0KYm9keS5zaWRlYmFyLWNsb3NlZCAudG9jaWZ5ew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEyMCUpICFpbXBvcnRhbnQ7DQogIG9wYWNpdHk6IDAgIWltcG9ydGFudDsNCiAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7DQogIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7DQogIHRyYW5zaXRpb246IC4yNXMgZWFzZSAhaW1wb3J0YW50Ow0KfQ0KDQovKiBrb250ZW4gYmFsaWsgZnVsbCBrZSBraXJpICovDQpib2R5LnNpZGViYXItY2xvc2VkIC50b2MtY29udGVudHsNCiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsNCiAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7DQogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KfQ0KDQovKiBrYWRhbmcgd3JhcHBlciBpa3V0IG5nYXNpaCBzcGFjZSAqLw0KYm9keS5zaWRlYmFyLWNsb3NlZCAubWFpbi1jb250YWluZXIsDQpib2R5LnNpZGViYXItY2xvc2VkIC5jb250YWluZXItZmx1aWR7DQogIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50Ow0KfQ0KDQovKiBvcHRpb25hbDogYmlhciBzYWF0IG9wZW4gYW5pbWFzaW55YSBoYWx1cyAqLw0KI1RPQywgLnRvY2lmeSwgLnRvYy1jb250ZW50ew0KICB0cmFuc2l0aW9uOiAuMjVzIGVhc2U7DQp9DQovKiA9PT09PSBTSURFQkFSIENMT1NFRCAoZGVmYXVsdCkgPT09PT0gKi8NCmJvZHkuc2lkZWJhci1jb2xsYXBzZWQgI1RPQywNCmJvZHkuc2lkZWJhci1jb2xsYXBzZWQgLnRvY2lmeSwNCmJvZHkuc2lkZWJhci1jb2xsYXBzZWQgI3NpZGViYXJ7DQogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCn0NCg0KLyoga29udGVuIGZ1bGwgbGViYXIsIG5vIHNpc2Egc3BhY2Uga2lyaSAqLw0KYm9keS5zaWRlYmFyLWNvbGxhcHNlZCAudG9jLWNvbnRlbnR7DQogIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7DQogIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50Ow0KICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCn0NCg0KLyoga2FkYW5nIGtvbG9tIGJvb3RzdHJhcCBtYXNpaCBuZ3VuY2kgbGViYXIgKi8NCmJvZHkuc2lkZWJhci1jb2xsYXBzZWQgLmNvbC1zbS05LA0KYm9keS5zaWRlYmFyLWNvbGxhcHNlZCAuY29sLW1kLTksDQpib2R5LnNpZGViYXItY29sbGFwc2VkIC5jb2wtbGctOXsNCiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogIGZsZXg6IDAgMCAxMDAlICFpbXBvcnRhbnQ7DQp9DQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICBTTk9XQkFMTCBCQUNLR1JPVU5EIChGVUxMICsgTUlSSVAgRk9UTykNCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCg0KLyogMSkgVGFtYmFoaW4gdmFyaWFiZWwgaW5pIGRpIDpyb290IChiaWFyIHZhcigtLWJnMSkgZHN0IGJlbmVyKSAqLw0KOnJvb3R7DQogIC0tYmcxOiAjRjZGNUY1OyAgIC8qIHB1dGloIHNvZnQgKi8NCiAgLS1iZzI6ICNGN0YxRjA7ICAgLyogd2FybSBtaXN0ICovDQogIC0tYmczOiAjRTVDQ0NDOyAgIC8qIHBpbmsgYmF3YWggKi8NCiAgLS1iZzQ6ICNERUJFQkQ7ICAgLyogcGluayBsZWJpaCB0ZWdhcyAocG9qb2sga2FuYW4gYmF3YWgpICovDQp9DQoNCi8qIDIpIEJhY2tncm91bmQgZGlwYXNhbmcga2UgU0VNVUEgcm9vdCBsYXllciAoYmlhciBnYSBrZXBvdG9uZykgKi8NCmh0bWwsDQpib2R5LA0KI3BhZ2UsDQouY29udGFpbmVyLWZsdWlkLm1haW4tY29udGFpbmVyLA0KYm9keSA+IC5jb250YWluZXItZmx1aWR7DQogIG1pbi1oZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7DQogIG1hcmdpbjogMCAhaW1wb3J0YW50Ow0KDQogIGJhY2tncm91bmQ6DQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxOCUgMCUsDQogICAgICAjRkZGRkZGIDAlLA0KICAgICAgdmFyKC0tYmcyKSAzOCUsDQogICAgICByZ2JhKDI0NywyNDEsMjQwLDApIDcyJQ0KICAgICksDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4NSUgMjAlLA0KICAgICAgcmdiYSgyNTUsMjIxLDIyNiwwLjU1KSAwJSwgICAvKiBlYXItcGluayBsZW1idXQgKi8NCiAgICAgIHJnYmEoMjU1LDIyMSwyMjYsMCkgNjAlDQogICAgKSwNCiAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSA4OCUsDQogICAgICByZ2JhKDIyMiwxOTAsMTg5LDAuODUpIDAlLCAgIC8qIHJvc2UgYmF3YWggKi8NCiAgICAgIHJnYmEoMjIyLDE5MCwxODksMCkgNjIlDQogICAgKSwNCiAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLA0KICAgICAgdmFyKC0tYmcxKSAwJSwNCiAgICAgIHZhcigtLWJnMikgNDUlLA0KICAgICAgdmFyKC0tYmczKSA3OCUsDQogICAgICB2YXIoLS1iZzQpIDEwMCUNCiAgICApIGZpeGVkICFpbXBvcnRhbnQ7DQoNCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCAhaW1wb3J0YW50Ow0KICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyICFpbXBvcnRhbnQ7DQogIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQgIWltcG9ydGFudDsNCn0NCg0KLyogMykgV3JhcHBlciBkYWxhbW55YSB3YWppYiB0cmFuc3BhcmFuIChiaWFyIGdhIOKAnGtldHV0dXAgcHV0aWjigJ0pICovDQoubWFpbi1jb250YWluZXIsDQouY29udGFpbmVyLWZsdWlkLA0KLnRvYy1jb250ZW50LA0KLnBhZ2Utd3JhcHBlciwNCi5wYWdlLWlubmVyLA0KLnJvdy1mbHVpZHsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsNCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICBGSVg6IEJBR0lBTiBBVEFTIFBVVElIIChXUkFQUEVSIE5VVFVQSU4gQkcpDQogICBCQUNLR1JPVU5EIEZVTEwgMTAwJSBWSUVXUE9SVCAoQU5USSBQVVRVUykNCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQovKiAxKSBNYXRpa2FuIGJhY2tncm91bmQgcHV0aWggYmF3YWFuIHdyYXBwZXIgKi8NCiNwYWdlLA0KI2NvbnRlbnQsDQoudG9jLWNvbnRlbnQsDQouY29udGFpbmVyLWZsdWlkLA0KLmNvbnRhaW5lci1mbHVpZC5tYWluLWNvbnRhaW5lciwNCmJvZHkgPiAuY29udGFpbmVyLWZsdWlkLA0KLnJvdy1mbHVpZCwNCi5wYWdlLXdyYXBwZXIsDQoucGFnZS1pbm5lcnsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsNCn0NCg0KLyogMikgUGFrc2EgMSBsYXllciBiYWNrZ3JvdW5kIG5lbXBlbCBrZSBsYXlhciAqLw0KaHRtbCwgYm9keXsNCiAgbWluLWhlaWdodDogMTAwdmggIWltcG9ydGFudDsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsNCn0NCg0KYm9keTo6YmVmb3Jlew0KICBjb250ZW50OiIiOw0KICBwb3NpdGlvbjogZml4ZWQ7DQogIGluc2V0OiAwOw0KICB6LWluZGV4OiAtOTk5OTsNCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQoNCiAgLyogQmFja2dyb3VuZCBtaXJpcCBmb3RvIFNub3diYWxsIChzb2Z0IHB1dGloIC0+IHBpbmsgYmF3YWgpICovDQogIGJhY2tncm91bmQ6DQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxOCUgMCUsDQogICAgICAjRkZGRkZGIDAlLA0KICAgICAgI0Y2RjNGMyA0MCUsDQogICAgICByZ2JhKDI0NiwyNDMsMjQzLDApIDcyJQ0KICAgICksDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4NSUgMjAlLA0KICAgICAgcmdiYSgyNTUsMjIxLDIyNiwwLjU1KSAwJSwgICAvKiBibHVzaCAqLw0KICAgICAgcmdiYSgyNTUsMjIxLDIyNiwwKSA2MCUNCiAgICApLA0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDg4JSwNCiAgICAgIHJnYmEoMjE1LDE4MiwxODEsMC44NSkgMCUsICAgLyogcGlua19kICovDQogICAgICByZ2JhKDIxNSwxODIsMTgxLDApIDYyJQ0KICAgICksDQogICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywNCiAgICAgICNGRkZGRkYgMCUsDQogICAgICAjRjdGMUYwIDQ1JSwNCiAgICAgICNFNUNDQ0MgNzglLA0KICAgICAgI0Q3QjZCNSAxMDAlDQogICAgKTsNCiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsNCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICBTT0ZUIEJMVVIgQkFDS0dST1VORCArIEdMQVNTIENBUkRTIChTTk9XQkFMTCBWSUJFKQ0KICAgVGVtcGVsIFBBTElORyBCQVdBSCBDU1Mga2FtdQ0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCi8qIDEpIEJhY2tncm91bmQgYmx1ciBhbGEgc2NyZWVuc2hvdCAqLw0KaHRtbCwgYm9keSB7IG1pbi1oZWlnaHQ6IDEwMHZoOyB9DQoNCmJvZHl7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7IC8qIGJpYXIgeWFuZyBrZXJqYSBib2R5OjpiZWZvcmUgKi8NCn0NCg0KYm9keTo6YmVmb3Jlew0KICBjb250ZW50OiIiOw0KICBwb3NpdGlvbjogZml4ZWQ7DQogIGluc2V0OiAtNDBweDsgICAgICAgICAgICAgICAvKiBiaWFyIGJsdXIgZ2Ega2Vwb3RvbmcgcGluZ2dpciAqLw0KICB6LWluZGV4OiAtOTk5OTsNCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQoNCiAgLyogYmxvYi1ibHVyIHBha2FpIHdhcm5hIENTUyBrYW11ICovDQogIGJhY2tncm91bmQ6DQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxOCUgOCUsDQogICAgICByZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIDAlLA0KICAgICAgcmdiYSgyNTUsMjU1LDI1NSwwLjcwKSAzNSUsDQogICAgICByZ2JhKDI1NSwyNTUsMjU1LDApIDcwJQ0KICAgICksDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4OCUgMTIlLA0KICAgICAgcmdiYSgyNTUsMjIxLDIyNiwwLjY1KSAwJSwNCiAgICAgIHJnYmEoMjU1LDIyMSwyMjYsMCkgNjIlDQogICAgKSwNCiAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDc4JSA4OCUsDQogICAgICByZ2JhKDIxNCwxOTMsMTkzLDAuNzApIDAlLA0KICAgICAgcmdiYSgyMTQsMTkzLDE5MywwKSA2MCUNCiAgICApLA0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTIlIDkyJSwNCiAgICAgIHJnYmEoMjQ4LDI0OSwxODYsMC41NSkgMCUsDQogICAgICByZ2JhKDI0OCwyNDksMTg2LDApIDYyJQ0KICAgICksDQogICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywNCiAgICAgIHJnYmEoMjU1LDI1NSwyNTUsMSkgMCUsDQogICAgICByZ2JhKDI0NywyNDEsMjQwLDEpIDQ1JSwNCiAgICAgIHJnYmEoMjI5LDIwNCwyMDQsMSkgNzglLA0KICAgICAgcmdiYSgyMTQsMTkzLDE5MywxKSAxMDAlDQogICAgKTsNCg0KICBmaWx0ZXI6IGJsdXIoMjJweCkgc2F0dXJhdGUoMTE1JSk7DQogIG9wYWNpdHk6IDAuOTU7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4wNik7DQp9DQoNCi8qIDIpIFBhc3Rpa2FuIHdyYXBwZXIgbmdnYWsgbnV0dXBpbiBiYWNrZ3JvdW5kICovDQojcGFnZSwgI2NvbnRlbnQsIC50b2MtY29udGVudCwNCi5jb250YWluZXItZmx1aWQsIC5jb250YWluZXItZmx1aWQubWFpbi1jb250YWluZXIsDQpib2R5ID4gLmNvbnRhaW5lci1mbHVpZCwgLnJvdy1mbHVpZCwNCi5wYWdlLXdyYXBwZXIsIC5wYWdlLWlubmVyew0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Ow0KfQ0KDQovKiAzKSBDYXJkL3NlY3Rpb24gamFkaSDigJxnbGFzc3nigJ0gKG5nZ2FrIG5nZWJsb2spICovDQojbWFpbiAuc2VjdGlvbi5sZXZlbDJ7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCg0KICAvKiBnbGFzcyAqLw0KICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNjIpICFpbXBvcnRhbnQ7DQogIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxNHB4KTsNCiAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTRweCk7DQoNCiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMjYsMjI5LDIzMywwLjc1KSAhaW1wb3J0YW50Ow0KICBib3gtc2hhZG93OiAwIDE4cHggMzVweCByZ2JhKDEzOSwxMTQsMTE0LDAuMTIpICFpbXBvcnRhbnQ7DQoNCiAgLyogZGVmYXVsdCBhY2NlbnQga2FsYXUgYmVsdW0gZGktc2V0IHBlciBjYXNlICovDQogIC0tY2FzZS1hY2NlbnQ6IHJnYmEoMjU1LDIyMSwyMjYsMC44NSk7DQogIC0tY2FzZS1ibG9iOiByZ2JhKDI1NSwyMjEsMjI2LDAuMjgpOw0KDQogIGJvcmRlci1sZWZ0OiA2cHggc29saWQgdmFyKC0tY2FzZS1hY2NlbnQpICFpbXBvcnRhbnQ7DQp9DQoNCi8qIGJsb2IgYmx1ciBrZWNpbCBkaSBkYWxhbSBjYXJkIChiaWtpbiBzb2Z0IGtheWEgU1MpICovDQojbWFpbiAuc2VjdGlvbi5sZXZlbDI6OmJlZm9yZXsNCiAgY29udGVudDoiIjsNCiAgcG9zaXRpb246YWJzb2x1dGU7DQogIGluc2V0OiAtNjBweCAtODBweCBhdXRvIGF1dG87DQogIHdpZHRoOiAyNjBweDsNCiAgaGVpZ2h0OiAyNjBweDsNCiAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsDQogICAgdmFyKC0tY2FzZS1ibG9iKSAwJSwNCiAgICByZ2JhKDI1NSwyNTUsMjU1LDApIDY1JQ0KICApOw0KICBmaWx0ZXI6IGJsdXIoMThweCk7DQogIG9wYWNpdHk6IDAuOTsNCn0NCg0KLyogNCkgV2FybmEgYmVkYSB0aWFwIENBU0UgKHRldGVwIHNvZnQgJiBibHVyKSAqLw0KLyogQ2FzZSAxID0gYnV0dGVyICovDQojY2FzZTEuc2VjdGlvbi5sZXZlbDIsICNjYXNlLXN0dWR5LTEuc2VjdGlvbi5sZXZlbDJ7DQogIC0tY2FzZS1hY2NlbnQ6IHJnYmEoMjQ4LDI0OSwxODYsMC45NSk7DQogIC0tY2FzZS1ibG9iOiByZ2JhKDI0OCwyNDksMTg2LDAuMzApOw0KfQ0KLyogQ2FzZSAyID0gYmx1c2ggKi8NCiNjYXNlMi5zZWN0aW9uLmxldmVsMiwgI2Nhc2Utc3R1ZHktMi5zZWN0aW9uLmxldmVsMnsNCiAgLS1jYXNlLWFjY2VudDogcmdiYSgyNTUsMjIxLDIyNiwwLjk1KTsNCiAgLS1jYXNlLWJsb2I6IHJnYmEoMjU1LDIyMSwyMjYsMC4zMCk7DQp9DQovKiBDYXNlIDMgPSBtaXN0ICovDQojY2FzZTMuc2VjdGlvbi5sZXZlbDIsICNjYXNlLXN0dWR5LTMuc2VjdGlvbi5sZXZlbDJ7DQogIC0tY2FzZS1hY2NlbnQ6IHJnYmEoMjI2LDIyOSwyMzMsMC45NSk7DQogIC0tY2FzZS1ibG9iOiByZ2JhKDIyNiwyMjksMjMzLDAuMzUpOw0KfQ0KLyogQ2FzZSA0ID0gbWludC90ZWFsICovDQojY2FzZTQuc2VjdGlvbi5sZXZlbDIsICNjYXNlLXN0dWR5LTQuc2VjdGlvbi5sZXZlbDJ7DQogIC0tY2FzZS1hY2NlbnQ6IHJnYmEoMTQzLDE4NiwxNzcsMC45NSk7DQogIC0tY2FzZS1ibG9iOiByZ2JhKDE0MywxODYsMTc3LDAuMjYpOw0KfQ0KLyogQ2FzZSA1ID0gZHVzdHkgcGluayAqLw0KI2Nhc2U1LnNlY3Rpb24ubGV2ZWwyLCAjY2FzZS1zdHVkeS01LnNlY3Rpb24ubGV2ZWwyew0KICAtLWNhc2UtYWNjZW50OiByZ2JhKDIxNCwxNjksMTcwLDAuOTUpOw0KICAtLWNhc2UtYmxvYjogcmdiYSgyMTQsMTY5LDE3MCwwLjI2KTsNCn0NCg0KLyogNSkgRGFyayBtb2RlOiB0ZXRhcCBibHVyIHRhcGkgbGViaWgg4oCcbWFsZW3igJ0gKi8NCmJvZHkuZGFyay1tb2RlOjpiZWZvcmV7DQogIG9wYWNpdHk6IDAuNzU7DQogIGZpbHRlcjogYmx1cigyNHB4KSBzYXR1cmF0ZSgxMjAlKTsNCn0NCmJvZHkuZGFyay1tb2RlICNtYWluIC5zZWN0aW9uLmxldmVsMnsNCiAgYmFja2dyb3VuZDogcmdiYSgyOCwzNSw1NiwwLjYyKSAhaW1wb3J0YW50OyAgLyogZ2xhc3MgZ2VsYXAgKi8NCiAgYm9yZGVyLWNvbG9yOiByZ2JhKDU4LDcwLDk1LDAuODUpICFpbXBvcnRhbnQ7DQp9DQovKiA9PT09PSBPVkVSUklERTogbGViaWggQkxVUiArIGxlYmloIHNlZGlraXQgcHV0aWggPT09PT0gKi8NCmJvZHk6OmJlZm9yZXsNCiAgY29udGVudDoiIjsNCiAgcG9zaXRpb246IGZpeGVkOw0KICBpbnNldDogLTgwcHg7ICAgICAgICAgICAgICAgICAvKiBiaWFyIGJsdXIgZ2Ega2Vwb3RvbmcgKi8NCiAgei1pbmRleDogLTk5OTk7DQogIHBvaW50ZXItZXZlbnRzOiBub25lOw0KDQogIGJhY2tncm91bmQ6DQogICAgLyoga3VyYW5naSBwdXRpaDogZ2FudGkgamFkaSDigJxzb2Z0IG1pc3TigJ0gZGFuIGJpa2luIGxlYmloIHRpcGlzICovDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxOCUgOCUsDQogICAgICByZ2JhKDI0NywyNDEsMjQwLDAuNzApIDAlLA0KICAgICAgcmdiYSgyNDcsMjQxLDI0MCwwLjMwKSAyOCUsDQogICAgICByZ2JhKDI0NywyNDEsMjQwLDApIDU1JQ0KICAgICksDQoNCiAgICAvKiBibHVzaCBrYW5hbiBhdGFzIChkaWJ1YXQgbGViaWgga3VhdCkgKi8NCiAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDg4JSAxMiUsDQogICAgICByZ2JhKDI1NSwyMjEsMjI2LDAuOTUpIDAlLA0KICAgICAgcmdiYSgyNTUsMjIxLDIyNiwwKSA1OCUNCiAgICApLA0KDQogICAgLyogcGluayBiYXdhaCBrYW5hbiAobGViaWggdGVnYXMpICovDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA3OCUgODglLA0KICAgICAgcmdiYSgyMTQsMTkzLDE5MywwLjk1KSAwJSwNCiAgICAgIHJnYmEoMjE0LDE5MywxOTMsMCkgNTglDQogICAgKSwNCg0KICAgIC8qIGJ1dHRlciBiYXdhaCBraXJpIChsZWJpaCBrZWxpaGF0YW4pICovDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxMiUgOTIlLA0KICAgICAgcmdiYSgyNDgsMjQ5LDE4NiwwLjc4KSAwJSwNCiAgICAgIHJnYmEoMjQ4LDI0OSwxODYsMCkgNjAlDQogICAgKSwNCg0KICAgIC8qIGJhc2UgZ3JhZGllbnQgKGxlYmloIHBpbmssIGt1cmFuZyBwdXRpaCkgKi8NCiAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLA0KICAgICAgI0Y3RjFGMCAwJSwNCiAgICAgICNGM0U4RTggMzglLA0KICAgICAgI0U1Q0NDQyA3NSUsDQogICAgICAjRDZDMUMxIDEwMCUNCiAgICApOw0KDQogIC8qIEJMVVIgTkFJSyArIHdhcm5hIGxlYmloIOKAnG5lbXBlbOKAnSAqLw0KICBmaWx0ZXI6IGJsdXIoNDBweCkgc2F0dXJhdGUoMTM1JSkgY29udHJhc3QoMTAyJSk7DQogIG9wYWNpdHk6IDE7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4xMCk7DQp9DQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgIENBU0UgQ0FSRFMg4oCUIEJMVVIgUEFTVEVMIChOTyBCTE9LKQ0KICAgdGVtcGVsIFBBTElORyBCQVdBSA0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCiNtYWluIC5zZWN0aW9uLmxldmVsMnsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBpc29sYXRpb246IGlzb2xhdGU7DQoNCiAgLyog4oCca2FjYeKAnSBwdXRpaCB0aXBpcyBiaWFyIGxlbWJ1dCwgYnVrYW4gYmxvayAqLw0KICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNTgpICFpbXBvcnRhbnQ7DQogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjI2LDIyOSwyMzMsMC43NSkgIWltcG9ydGFudDsNCiAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB2YXIoLS1lYXItcGluaykgIWltcG9ydGFudDsNCg0KICAvKiBlZmVrIGdsYXNzICovDQogIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsNCiAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7DQp9DQoNCiNtYWluIC5zZWN0aW9uLmxldmVsMiA+ICp7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgei1pbmRleDogMTsNCn0NCg0KLyogbGF5ZXIgYmx1ciB3YXJuYSBkaSBiZWxha2FuZyBrb250ZW4gKi8NCiNtYWluIC5zZWN0aW9uLmxldmVsMjo6YmVmb3Jlew0KICBjb250ZW50OiIiOw0KICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgaW5zZXQ6IC03MHB4OyAgICAgICAgICAgICAgICAgIC8qIGJpYXIgYmx1ciBnYSBrZXBvdG9uZyAqLw0KICB6LWluZGV4OiAwOw0KICBiYWNrZ3JvdW5kOg0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTIlIDE4JSwgdmFyKC0tY2FzZUEpIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDYyJSksDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4OCUgMjAlLCB2YXIoLS1jYXNlQikgMCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgNjIlKSwNCiAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDcwJSA5MiUsIHZhcigtLWNhc2VDKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSA2NiUpOw0KICBmaWx0ZXI6IGJsdXIoNDZweCkgc2F0dXJhdGUoMTQwJSk7DQogIG9wYWNpdHk6IDAuOTU7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4xNSk7DQp9DQoNCg0KDQo8L3N0eWxlPg0KYGBgez1odG1sfQ0KPGRpdiBpZD0ic2lkZWJhci10b2dnbGUiPg0KICA8c3Bhbj48L3NwYW4+DQo8L2Rpdj4NCjxkaXYgaWQ9Im1vZGUtdG9nZ2xlIiB0aXRsZT0iVG9nZ2xlIGxpZ2h0IC8gZGFyayI+DQogIDxzcGFuIGNsYXNzPSJzdW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+DQogIDxzcGFuIGNsYXNzPSJtb29uIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImxvZ28td3JhcHBlciI+DQogIDxkaXYgY2xhc3M9ImxvZ28tZnJhbWUiPg0KICAgIDxkaXYgY2xhc3M9ImxvZ28taW5uZXIiPg0KICAgICAgPGltZyBjbGFzcz0icHJvZmlsZS1waG90byBuby1saWdodGJveCIgc3JjPSJmb3Rva3UuanBnIiBhbHQ9Ik51cnVsIElmZmFoIj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDxkaXYgY2xhc3M9ImxvZ28tY2FwdGlvbiI+TlVSVUwgSUZGQUg8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJpbmZvLWJhZGdlcyI+DQogIDxkaXYgY2xhc3M9ImJhZGdlLWNhcmQgYmFkZ2UtcHJpbWFyeSI+DQogICAgPHNwYW4gY2xhc3M9ImJhZGdlLWxhYmVsIj5Qcm9ncmFtIFN0dWRpPC9zcGFuPg0KICAgIDxzcGFuIGNsYXNzPSJiYWRnZS12YWx1ZSI+U2FpbnMgRGF0YTwvc3Bhbj4NCiAgPC9kaXY+DQogIDxkaXYgY2xhc3M9ImJhZGdlLWNhcmQgYmFkZ2Utc2Vjb25kYXJ5Ij4NCiAgICA8c3BhbiBjbGFzcz0iYmFkZ2UtbGFiZWwiPlVuaXZlcnNpdGFzPC9zcGFuPg0KICAgIDxzcGFuIGNsYXNzPSJiYWRnZS12YWx1ZSI+SU5TVElUVVQgVEVLTk9MT0dJIFNBSU5TIEJBTkRVTkc8L3NwYW4+DQogIDwvZGl2Pg0KICA8ZGl2IGNsYXNzPSJiYWRnZS1jYXJkIGJhZGdlLXRlcnRpYXJ5Ij4NCiAgICA8c3BhbiBjbGFzcz0iYmFkZ2UtbGFiZWwiPkRvc2VuIFBlbmdhbXB1PC9zcGFuPg0KICAgIDxzcGFuIGNsYXNzPSJiYWRnZS12YWx1ZSI+QmFrdGkgU2lyZWdhciwgTSBTYy4sIENTRDwvc3Bhbj4NCiAgPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iaGVyby10aXRsZSI+SU5UUk9EVUNUSU9OPC9kaXY+DQo8ZGl2IGNsYXNzPSJoZXJvLXN1YnRpdGxlIj5JbnRyb2R1Y3Rpb24gb2YgRGF0YSBTY2llbmNlIC0gV2VlayAxPC9kaXY+DQoNCjxzY3JpcHQ+DQpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7DQogIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTsNCg0KICAvKiA9PT09PSBTSURFQkFSOiBkZWZhdWx0IENMT1NFRCA9PT09PSAqLw0KICB2YXIgc2F2ZWRTaWRlYmFyID0gbnVsbDsNCiAgdHJ5IHsNCiAgICBzYXZlZFNpZGViYXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3V0ZS10aGVtZS1zaWRlYmFyIik7IC8vICJvcGVuIiAvICJjbG9zZWQiDQogIH0gY2F0Y2ggKGUpIHt9DQoNCiAgLy8gZGVmYXVsdCBrZXR1dHVwLCBrZWN1YWxpIHVzZXIgcGVybmFoIG55aW1wZW4gIm9wZW4iDQogIGlmIChzYXZlZFNpZGViYXIgPT09ICJvcGVuIikgew0KICAgIGJvZHkuY2xhc3NMaXN0LnJlbW92ZSgic2lkZWJhci1jb2xsYXBzZWQiKTsNCiAgfSBlbHNlIHsNCiAgICBib2R5LmNsYXNzTGlzdC5hZGQoInNpZGViYXItY29sbGFwc2VkIik7DQogIH0NCg0KICB2YXIgbWVudUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWRlYmFyLXRvZ2dsZSIpOw0KICBpZiAobWVudUJ0bikgew0KICAgIG1lbnVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsNCiAgICAgIGJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgic2lkZWJhci1jb2xsYXBzZWQiKTsNCiAgICAgIHRyeSB7DQogICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKA0KICAgICAgICAgICJjdXRlLXRoZW1lLXNpZGViYXIiLA0KICAgICAgICAgIGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJzaWRlYmFyLWNvbGxhcHNlZCIpID8gImNsb3NlZCIgOiAib3BlbiINCiAgICAgICAgKTsNCiAgICAgIH0gY2F0Y2ggKGUpIHt9DQogICAgfSk7DQogIH0NCg0KICAvKiA9PT09PSBEQVJLIE1PREU6IGtlZXAgcHVueWFtdSA9PT09PSAqLw0KICB2YXIgbW9kZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb2RlLXRvZ2dsZSIpOw0KICBpZiAobW9kZUJ0bikgew0KICAgIHZhciBzYXZlZE1vZGUgPSBudWxsOw0KICAgIHRyeSB7DQogICAgICBzYXZlZE1vZGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3V0ZS10aGVtZS1tb2RlIik7DQogICAgfSBjYXRjaCAoZSkge30NCg0KICAgIGlmIChzYXZlZE1vZGUgPT09ICJkYXJrIikgYm9keS5jbGFzc0xpc3QuYWRkKCJkYXJrLW1vZGUiKTsNCg0KICAgIG1vZGVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsNCiAgICAgIGJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiZGFyay1tb2RlIik7DQogICAgICB0cnkgew0KICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgNCiAgICAgICAgICAiY3V0ZS10aGVtZS1tb2RlIiwNCiAgICAgICAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygiZGFyay1tb2RlIikgPyAiZGFyayIgOiAibGlnaHQiDQogICAgICAgICk7DQogICAgICB9IGNhdGNoIChlKSB7fQ0KICAgIH0pOw0KICB9DQp9KTsNCjwvc2NyaXB0Pg0KPHN0eWxlPg0KLyogPT09PT09IEEpIEJBQ0tHUk9VTkQgRlVMTCAobWlyaXAgZ2FtYmFyIFNub3diYWxsKSA9PT09PT0gKi8NCjpyb290ew0KICAtLWJnMTojZjlmOWY5OyAgIC8qIGF0YXMga2lyaSAqLw0KICAtLWJnMjojZjdmMWYwOyAgIC8qIHRyYW5zaXNpICovDQogIC0tYmczOiNlNGM5Yzg7ICAgLyogcGluayBsZW1idXQgKi8NCiAgLS1iZzQ6I2NiYWVhZTsgICAvKiBiYXdhaCBrYW5hbiAqLw0KfQ0KDQpodG1sLCBib2R5ew0KICBtaW4taGVpZ2h0OjEwMCU7DQogIG1hcmdpbjowOw0KICBwYWRkaW5nOjA7DQp9DQoNCmJvZHl7DQogIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTUlIDAlLA0KICAgIHZhcigtLWJnMSkgMCUsDQogICAgdmFyKC0tYmcyKSA0NSUsDQogICAgdmFyKC0tYmczKSA3OCUsDQogICAgdmFyKC0tYmc0KSAxMDAlDQogICkgZml4ZWQgIWltcG9ydGFudDsNCn0NCg0KLyogd3JhcHBlciByZWFkdGhlZG93biBzZXJpbmcg4oCcbnV0dXDigJ0gYmFja2dyb3VuZCAqLw0KI3BhZ2UsICNjb250ZW50LA0KLmNvbnRhaW5lci1mbHVpZC5tYWluLWNvbnRhaW5lciwNCmJvZHkgPiAuY29udGFpbmVyLWZsdWlkLA0KLnBhZ2UtaW5uZXIsIC5yb3ctZmx1aWQsDQoudG9jaWZ5LCAudG9jLWNvbnRlbnR7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7DQp9DQoNCi8qID09PT09PSBCKSBXQVJOQSBDQVJEIFRJQVAgQ0FTRSAoQ2FzZSAxIGJlZGEgc2VuZGlyaSwgZHN0KSA9PT09PT0NCiAgIENBVEFUQU46DQogICAtIERlZmF1bHQgaWQgZGFyaSAiIyMgQ2FzZSBTdHVkeSAxIiBiaWFzYW55YTogI2Nhc2Utc3R1ZHktMQ0KICAgLSBLYWxhdSBrYW11IHBha2FpIGN1c3RvbTogIiMjIENhc2UgU3R1ZHkgMSB7I2Nhc2UxfSIgbWFrYSBpZC1ueWEgI2Nhc2UxDQogICBKYWRpIGFrdSB0ZW1iYWsgZHVhLWR1YW55YSBiaWFyIHBhc3RpIGtlbmEuDQoqLw0KZGl2LnNlY3Rpb24ubGV2ZWwyew0KICBib3JkZXItcmFkaXVzOjIycHggIWltcG9ydGFudDsNCiAgcGFkZGluZzoxLjZyZW0gMS42cmVtICFpbXBvcnRhbnQ7DQp9DQoNCi8qIENhc2UgMSAqLw0KI2Nhc2UxLnNlY3Rpb24ubGV2ZWwyLCAjY2FzZS1zdHVkeS0xLnNlY3Rpb24ubGV2ZWwyew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDI1NSwyNTEsMjEyLC45MiksIHJnYmEoMjU1LDI1NSwyNTUsLjk3KSkgIWltcG9ydGFudDsNCiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDIxNCwgMTAyLCAuMzUpICFpbXBvcnRhbnQ7DQp9DQovKiBDYXNlIDIgKi8NCiNjYXNlMi5zZWN0aW9uLmxldmVsMiwgI2Nhc2Utc3R1ZHktMi5zZWN0aW9uLmxldmVsMnsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyNTUsMjIxLDIyNiwuODgpLCByZ2JhKDI1NSwyNTUsMjU1LC45NykpICFpbXBvcnRhbnQ7DQogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAxODAsIDE5NiwgLjQ1KSAhaW1wb3J0YW50Ow0KfQ0KLyogQ2FzZSAzICovDQojY2FzZTMuc2VjdGlvbi5sZXZlbDIsICNjYXNlLXN0dWR5LTMuc2VjdGlvbi5sZXZlbDJ7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjMzLDIyNSwyNTUsLjg4KSwgcmdiYSgyNTUsMjU1LDI1NSwuOTcpKSAhaW1wb3J0YW50Ow0KICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5MCwgMTcwLCAyNTUsIC40NSkgIWltcG9ydGFudDsNCn0NCi8qIENhc2UgNCAqLw0KI2Nhc2U0LnNlY3Rpb24ubGV2ZWwyLCAjY2FzZS1zdHVkeS00LnNlY3Rpb24ubGV2ZWwyew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDIwOCwyNDQsMjM0LC44OCksIHJnYmEoMjU1LDI1NSwyNTUsLjk3KSkgIWltcG9ydGFudDsNCiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDAsIDIxOCwgMTk4LCAuNDUpICFpbXBvcnRhbnQ7DQp9DQovKiBDYXNlIDUgKi8NCiNjYXNlNS5zZWN0aW9uLmxldmVsMiwgI2Nhc2Utc3R1ZHktNS5zZWN0aW9uLmxldmVsMnsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyMTIsMjM1LDI1NSwuODgpLCByZ2JhKDI1NSwyNTUsMjU1LC45NykpICFpbXBvcnRhbnQ7DQogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTU1LCAxOTUsIDIzNSwgLjQ1KSAhaW1wb3J0YW50Ow0KfQ0KPC9zdHlsZT4NCg0KYGBgDQoNCi0tLQ0KDQojIFdIQVQgSVMgVEhFIE1BSU4gUFVSUE9TRSBPRiBPVVIgU1RVRFk/DQoNCg0KVGhlIG1haW4gcHVycG9zZSBvZiBzdHVkeWluZyBEYXRhIFNjaWVuY2UgUHJvZ3JhbW1pbmcgaXMgdG8gZGV2ZWxvcCBjb21wdXRhdGlvbmFsIHRoaW5raW5nIHNraWxscyBpbiBzb2x2aW5nIGRhdGEtYmFzZWQgcHJvYmxlbXMgaW4gYSBzeXN0ZW1hdGljIGFuZCBzdHJ1Y3R1cmVkIHdheS4gKipQcm9ncmFtbWluZyBpcyBub3Qgb25seSBhYm91dCB3cml0aW5nIGNvZGUsIGJ1dCBhYm91dCB0cmFuc2xhdGluZyByZWFsIHdvcmxkIHByb2JsZW1zIGludG8gYWxnb3JpdGhtcyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYnkgYSBjb21wdXRlci4qKg0KDQojIyBTb21lIGltcG9ydGFudCBwb2ludHMgaW5jbHVkZToNCg0KLSBUcmFpbmluZyBjb21wdXRhdGlvbmFsIHRoaW5raW5nIGFuZCBhbGdvcml0aG1pYyBsb2dpYw0KDQotIFByb2Nlc3NpbmcgYW5kIGFuYWx5emluZyBkYXRhIGVmZmljaWVudGx5DQoNCi0gQnVpbGRpbmcgcHJlZGljdGl2ZSBtb2RlbHMgYmFzZWQgb24gZGF0YQ0KDQotIEF1dG9tYXRpbmcgYW5hbHl0aWNhbCBwcm9jZXNzZXMgdG8gaW1wcm92ZSBzcGVlZCBhbmQgYWNjdXJhY3kNCg0KLSBQcm9kdWNpbmcgcmVwcm9kdWNpYmxlIGFuZCByZWxpYWJsZSByZXN1bHRzDQoNCi0tLQ0KDQojIFdIWSBETyBXRSBMRUFSTiBBQk9VVCBJVD8NCg0KV2UgbGVhcm4gRGF0YSBTY2llbmNlIFByb2dyYW1taW5nICoqYmVjYXVzZSB3ZSBsaXZlIGluIGEgZGF0YS1kcml2ZW4gZXJhIHdoZXJlIGFsbW9zdCBldmVyeSBmaWVsZCBnZW5lcmF0ZXMgYW5kIHJlbGllcyBvbiBsYXJnZSBhbW91bnRzIG9mIGRhdGEuKiogTWFudWFsIGFuYWx5c2lzIGlzIG5vIGxvbmdlciBlZmZlY3RpdmUgaW4gaGFuZGxpbmcgY29tcGxleCBhbmQgbGFyZ2Utc2NhbGUgZGF0YS4gVGhlcmVmb3JlLCBwcm9ncmFtbWluZyBiZWNvbWVzIGVzc2VudGlhbCB0byBtYW5hZ2UsIGFuYWx5emUsIGFuZCBleHRyYWN0IG1lYW5pbmdmdWwgaW5zaWdodHMgZnJvbSBkYXRhIGVmZmljaWVudGx5Lg0KDQoNCiMjIFNvbWUgc3VwcG9ydGluZyByZWFzb25zIGluY2x1ZGU6DQoNCi0gVGhlIHJhcGlkIGdyb3d0aCBvZiBkYXRhIGFjcm9zcyBpbmR1c3RyaWVzDQoNCi0gVGhlIGluY3JlYXNpbmcgY29tcGxleGl0eSBvZiBtb2Rlcm4gcHJvYmxlbXMNCg0KLSBUaGUgaGlnaCBkZW1hbmQgZm9yIGRhdGEtc2tpbGxlZCBwcm9mZXNzaW9uYWxzDQoNCi0gVGhlIGltcG9ydGFuY2Ugb2YgZGF0YS1kcml2ZW4gZGVjaXNpb24gbWFraW5nDQoNCi0gVGhlIG5lZWQgZm9yIGVmZmljaWVuY3kgYW5kIGF1dG9tYXRpb24gaW4gd29ya2Zsb3dzDQoNCg0KLS0tDQoNCiMgV0hBVCBUT09MUyBETyBXRSBIQVZFIFRPIEVYUEVSVCBBQk9VVD8NCg0KVG8gYmVjb21lIHByb2ZpY2llbnQgaW4gRGF0YSBTY2llbmNlIFByb2dyYW1taW5nLCB3ZSBuZWVkIHRvIG1hc3RlciB2YXJpb3VzIGludGVncmF0ZWQgdG9vbHMgdGhhdCBzdXBwb3J0IHRoZSBkYXRhIGFuYWx5c2lzIHByb2Nlc3MuICoqVGhlc2UgdG9vbHMgYXJlIGVzc2VudGlhbCBmb3IgaGFuZGxpbmcgZGF0YSwgYnVpbGRpbmcgbW9kZWxzLCBhbmQgbWFuYWdpbmcgYW5hbHl0aWNhbCB3b3JrZmxvd3MgZWZmZWN0aXZlbHkuKioNCg0KDQojIyBTb21lIHRvb2xzIHdlIG5lZWQgdG8gbWFzdGVyIGluY2x1ZGU6DQoNCi0gUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIHN1Y2ggYXMgUHl0aG9uIG9yIFINCg0KLSBEYXRhIG1hbmlwdWxhdGlvbiBsaWJyYXJpZXMgbGlrZSBQYW5kYXMgYW5kIE51bVB5DQoNCi0gTWFjaGluZSBsZWFybmluZyBmcmFtZXdvcmtzIHN1Y2ggYXMgU2Npa2l0LWxlYXJuDQoNCi0gU1FMIGZvciBkYXRhYmFzZSBtYW5hZ2VtZW50DQoNCi0gR2l0IGZvciB2ZXJzaW9uIGNvbnRyb2wNCg0KLSBKdXB5dGVyIE5vdGVib29rIGZvciBkb2N1bWVudGF0aW9uIGFuZCByZXByb2R1Y2libGUgYW5hbHlzaXMNCg0KLS0tDQoNCiMgRE9NQUlOIEtOT1dMRURHRSAvIElOVEVSRVNUDQoNCkkgaGF2ZSBhIHN0cm9uZyBpbnRlcmVzdCBpbiB0aGUgKipoZWFsdGhjYXJlKiogZmllbGQgYmVjYXVzZSBJIGJlbGlldmUgaXQgaGFzIGEgKipzaWduaWZpY2FudCBzb2NpYWwgaW1wYWN0IGFuZCBncmVhdGx5IGJlbmVmaXRzKiogZnJvbSBkYXRhIGRyaXZlbiBhcHByb2FjaGVzLiBIZWFsdGggZGF0YSBhbmFseXNpcyBjYW4gKipoZWxwIGlkZW50aWZ5IHBhdHRlcm5zIGluIG1lZGljYWwgY29uZGl0aW9ucywgZXN0aW1hdGUgdGhlIHByb2JhYmlsaXR5IG9mIGNlcnRhaW4gaGVhbHRoIHJpc2tzLCBhbmQgaW1wcm92ZSB0aGUgZWZmaWNpZW5jeSBvZiBoZWFsdGhjYXJlIHN5c3RlbXMqKi4gVGhlIGNvbXBsZXhpdHkgYW5kIHNlbnNpdGl2aXR5IG9mIGhlYWx0aCBkYXRhIG1ha2UgdGhpcyBmaWVsZCBib3RoIGNoYWxsZW5naW5nIGFuZCBoaWdobHkgcmVsZXZhbnQgdG8gYmUgZGV2ZWxvcGVkIHRocm91Z2ggRGF0YSBTY2llbmNlIFByb2dyYW1taW5nLg0KDQojIyBTb21lIHJlYXNvbnMgd2h5IEkgYW0gaW50ZXJlc3RlZCBpbiBoZWFsdGhjYXJlIGluY2x1ZGU6DQoNCi0gTWVkaWNhbCBkYXRhIGlzIGNvbXBsZXggYW5kIG11bHRpIGRpbWVuc2lvbmFsDQoNCi0gUHJlZGljdGl2ZSBtb2RlbHMgY2FuIGJlIHVzZWQgZm9yIGVhcmx5IGRldGVjdGlvbiBhbmQgcmlzayBlc3RpbWF0aW9uDQoNCi0gRGF0YSBhbmFseXNpcyBjYW4gc3VwcG9ydCBjbGluaWNhbCBkZWNpc2lvbiBtYWtpbmcNCg0KLSBJdCBoYXMgYSBkaXJlY3QgaW1wYWN0IG9uIHBlb3BsZeKAmXMgcXVhbGl0eSBvZiBsaWZlDQoNCi0tLQ0KDQpIb3dldmVyLCBmb3IgYW5vdGhlciBza2lsbCBkZXZlbG9wbWVudCwgSSBhbHNvIHNlZSAqKmZpbmFuY2lhbCBhbmFseXNpcyoqIGFzIGEgbW9yZSBwcmFjdGljYWwgZmllbGQgd2l0aCBicm9hZCBjYXJlZXIgb3Bwb3J0dW5pdGllcy4gKipUaGlzIGZpZWxkIGFsbG93cyBtZSB0byBzdHJlbmd0aGVuIG15IHNraWxscyBpbiB0aW1lLXNlcmllcyBhbmFseXNpcywgcHJlZGljdGl2ZSBtb2RlbGluZywgYW5kIHJpc2sgYW5hbHlzaXMgbW9yZSBpbnRlbnNpdmVseS4qKg0KDQojIyBTb21lIHJlYXNvbnMgd2h5IEkgY29uc2lkZXIgZmluYW5jaWFsIGFuYWx5c2lzOg0KDQotIEZpbmFuY2lhbCBkYXRhIGlzIGR5bmFtaWMgYW5kIG1vZGVsIGRyaXZlbg0KDQotIEl0IGlzIHdpZGVseSB1c2VkIGFjcm9zcyBpbmR1c3RyaWVzIHdpdGggaGlnaCBwcm9mZXNzaW9uYWwgZGVtYW5kDQoNCi0gSXQgcHJvdmlkZXMgb3Bwb3J0dW5pdGllcyB0byBkZXZlbG9wIGZvcmVjYXN0aW5nIGFuZCByaXNrIG1vZGVsaW5nIHNraWxscw0KDQpUaGVyZWZvcmUsIEkgc2VlIERhdGEgU2NpZW5jZSBQcm9ncmFtbWluZyBhcyBhIGZsZXhpYmxlIHNraWxsLiBXaGlsZSBteSBtYWluIGludGVyZXN0IGxpZXMgaW4gaGVhbHRoY2FyZSwgZGV2ZWxvcGluZyBza2lsbHMgaW4gZmluYW5jaWFsIGFuYWx5c2lzIGNhbiBiZSBhIHN0cmF0ZWdpYyBzdGVwIHRvIHN0cmVuZ3RoZW4gbXkgb3ZlcmFsbCBhbmFseXRpY2FsIGNvbXBldGVuY2UuDQoNCi0tLQ==