CkludHJvZHVjdGlvbgoKCSAgVGhpcyBpcyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciAzZGZ4JyBWb29kb28gR3JhcGhpY3MgCgkoYWthIHZvb2RvbyAxLCBha2Egc3N0MSkgYW5kIFZvb2Rvb7IgKGFrYSBWb29kb28gMiwgYWthIENWRykgYmFzZWQgCgl2aWRlbyBib2FyZHMuIEl0J3MgaGlnaGx5IGV4cGVyaW1lbnRhbCBjb2RlLCBidXQgaXMgZ3VhcmFudGVlZCB0byB3b3JrCglvbiBteSBjb21wdXRlciwgd2l0aCBteSAiTWF4aSBHYW1lciAzRCIgYW5kICJNYXhpIEdhbWVyIDNksiIgYm9hcmRzLAoJYW5kIHdpdGggbWUgImJldHdlZW4gY2hhaXIgYW5kIGtleWJvYXJkIi4gU29tZSBwZW9wbGUgdGVzdGVkIG90aGVyCgljb21iaW5hdGlvbnMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgd29ya3MuCgkgIFRoZSBtYWluIHBhZ2UgaXMgbG9jYXRlZCBhdCA8aHR0cDovL3NzdGZiLnNvdXJjZWZvcmdlLm5ldD4sIGFuZCBpZgoJeW91IHdhbnQgdGhlIGxhdGVzdCB2ZXJzaW9uLCBjaGVjayBvdXQgdGhlIENWUywgYXMgdGhlIGRyaXZlciBpcyBhIHdvcmsKCWluIHByb2dyZXNzLCBJIGZlZWwgdW5jb21mb3J0YWJsZSB3aXRoIHJlbGVhc2luZyB0YXJiYWxscyBvZiBzb21ldGhpbmcKCW5vdCBjb21wbGV0ZWx5IHdvcmtpbmcuLi5Eb24ndCB3b3JyeSwgaXQncyBzdGlsbCBtb3JlIHRoYW4gdXNlYWJsZQoJKEkgZWF0IG15IG93biBkb2cgZm9vZCkKCgkgIFBsZWFzZSByZWFkIHRoZSBCdWcgc2VjdGlvbiwgYW5kIHJlcG9ydCBhbnkgc3VjY2VzcyBvciBmYWlsdXJlIHRvIG1lCgkoR2hvemxhbmUgVG91bWkgPGd0b3VtaUBsYXBvc3RlLm5ldD4pLgoJICBCVFcsIElmIHlvdSBoYXZlIG9ubHkgb25lIG1vbml0b3IgLCBhbmQgeW91IGRvbid0IGZlZWwgbGlrZSBwbGF5aW5nCgl3aXRoIHRoZSB2Z2EgcGFzc3Rocm91IGNhYmxlLCBJIGNhbiBvbmx5IHN1Z2dlc3QgYm9ycm93aW5nIGEgc2NyZWVuCglzb21ld2hlcmUuLi4gCgoKSW5zdGFsbGF0aW9uIAoKCSAgVGhpcyBkcml2ZXIgKHNob3VsZCkgd29yayBvbiBpeDg2LCB3aXRoICJsYXRlIiAyLjIueCBrZXJuZWwgKHRlc3RlZAoJd2l0aCB4ID0gMTkpIGFuZCAicmVjZW50IiAyLjQueCBrZXJuZWwsIGFzIGEgbW9kdWxlIG9yIGNvbXBpbGVkIGluLgoJICBJdCBoYXMgYmVlbiBpbmNsdWRlZCBpbiBtYWluc3RyZWFtIGtlcm5lbCBzaW5jZSB0aGUgaW5mYW1vdXMgMi40LjEwLgoJICBZb3UgY2FuIGFwcGx5IHRoZSBwYXRjaGVzIGZvdW5kIGluIHNzdGZiL2tlcm5lbC8qLTIuezJ8NH0ueC5wYXRjaCwKCWFuZCBjb3B5IHNzdGZiLmMgdG8gbGludXgvZHJpdmVycy92aWRlby8sIG9yIGFwcGx5IGEgc2luZ2xlIHBhdGNoLCAKCXNzdGZiL3BhdGNoLTIuezJ8NH0ueC1zc3RmYi15eW1tZGQgdG8geW91ciBsaW51eCBzb3VyY2UgdHJlZS4KCgkgIFRoZW4gY29uZmlndXJlIHlvdXIga2VybmVsIGFzIHVzdWFsOiBjaG9vc2UgIm0iIG9yICJ5IiB0byAzRGZ4IFZvb2RvbwoJR3JhcGhpY3MgaW4gc2VjdGlvbiAiY29uc29sZSIuIENvbXBpbGUsIGluc3RhbGwsIGhhdmUgZnVuLi4uIGFuZCBwbGVhc2UKCWRyb3AgbWUgYSByZXBvcnQgOikKCgpNb2R1bGUgVXNhZ2UKCQoJV2FybmluZ3MuCgkjIFlvdSBzaG91bGQgcmVhZCBjb21wbGV0ZWx5IHRoaXMgc2VjdGlvbiBiZWZvcmUgaXNzdWluZyBhbnkgY29tbWFuZC4KCSMgSWYgeW91IGhhdmUgb25seSBvbmUgbW9uaXRvciB0byBwbGF5IHdpdGgsIG9uY2UgeW91IGluc21vZCB0aGUKCSAgbW9kdWxlLCB0aGUgM2RmeCB0YWtlcyBjb250cm9sIG9mIHRoZSBvdXRwdXQsIHNvIHlvdSdsbCBoYXZlIHRvCgkgIHBsdWcgdGhlIG1vbml0b3IgdG8gdGhlICJub3JtYWwiIHZpZGVvIGJvYXJkIGluIG9yZGVyIHRvIGlzc3VlCgkgIHRoZSBjb21tYW5kcywgb3IgeW91IGNhbiBibGluZGx5IHVzZSBzc3RfZGJnX3ZnYXBhc3MKICAgICAgICAgIGluIHRoZSB0b29scyBkaXJlY3RvcnkgKFNlZSBUb29scykuIFRoZSBsYXRlc3Qgc29sdXRpb24gaXMgcGFzcyB0aGUKCSAgcGFyYW1ldGVyIHZnYXBhc3M9MSB3aGVuIGluc21vZGRpbmcgdGhlIGRyaXZlci4gKFNlZSBLZXJuZWwvTW9kdWxlcwoJICBPcHRpb25zKQoKCU1vZHVsZSBpbnNlcnRpb246CgkjIGluc21vZCBzc3RmYi5vCgkgIHlvdSBzaG91bGQgc2VlIHNvbWUgc3RyYW5nZSBvdXRwdXQgZnJvbWUgdGhlIGJvYXJkOiAKCSAgYSBiaWcgYmx1ZSBzcXVhcmUsIGEgZ3JlZW4gYW5kIGEgcmVkIHNtYWxsIHNxdWFyZXMgYW5kIGEgdmVydGljYWwKCSAgd2hpdGUgcmVjdGFuZ2xlLiB3aHkgPyB0aGUgZnVuY3Rpb24ncyBuYW1lIGlzIHNlbGYgZXhwbGFuYXRvcnkgOgoJICAic3N0ZmJfdGVzdCgpIi4uLgoJICAoaWYgeW91IGRvbid0IGhhdmUgYSBzZWNvbmQgbW9uaXRvciwgeW91J2xsIGhhdmUgdG8gcGx1ZyB5b3VyIG1vbml0b3IKCSAgZGlyZWN0ZWx5IHRvIHRoZSAyRCB2aWRlb2NhcmQgdG8gc2VlIHdoYXQgeW91J3JlIHR5cGluZykKCSMgY29uMmZiIC9kZXYvZmJ4IC9kZXYvdHR5eAoJICBiaW5kIGEgdHR5IHRvIHRoZSBuZXcgZnJhbWUgYnVmZmVyLiBpZiB5b3UgYWxyZWFkeSBoYXZlIGEgZnJhbWUKCSAgYnVmZmVyIGRyaXZlciwgdGhlIHZvb2RvbyBmYiB3aWxsIGxpa2VseSBiZSAvZGV2L2ZiMS4gaWYgbm90LCAKCSAgdGhlIGRldmljZSB3aWxsIGJlIC9kZXYvZmIwLiBZb3UgY2FuIGNoZWNrIHRoaXMgYnkgZG9pbmcgYSAKCSAgY2F0IC9wcm9jL2ZiLiBZb3UgY2FuIGZpbmQgYSBjb3B5IG9mIGNvbjJmYiBpbiB0b29scy8gZGlyZWN0b3J5LgoJICBpZiB5b3UgZG9uJ3QgaGF2ZSBhbm90aGVyIGZiIGRldmljZSwgdGhpcyBzdGVwIGlzIHN1cGVyZmx1b3VzLAoJICBhcyB0aGUgY29uc29sZSBzdWJzeXN0ZW0gYXV0b21hZ2ljYWx5IGJpbmRzIHR0eXMgdG8gdGhlIGZiLgoJIyBzd2l0Y2ggdG8gdGhlIHZpcnR1YWwgY29uc29sZSB5b3UganVzdCBtYXBwZWQuICJ0YWRhYWEiIC4uLgoKCU1vZHVsZSByZW1vdmFsOgoJIyBjb24yZmIgL2Rldi9mYnggL2Rldi90dHl4CgkgIGJpbmQgdGhlIHR0eSB0byB0aGUgb2xkIGZyYW1lIGJ1ZmZlciBzbyB0aGUgbW9kdWxlIGNhbiBiZSByZW1vdmVkLgoJICAoaG93IGRvZXMgaXQgd29yayB3aXRoIHZnYWNvbiA/IHNob3J0IGFuc3dlciA6IGl0IGRvZXNuJ3Qgd29yaykKCSMgcm1tb2Qgc3N0ZmIKCgpLZXJuZWwvTW9kdWxlcyBPcHRpb25zCgoJWW91IGNhbiBwYXNzIHNvbWUgb3Rpb25zIHRvIHNzdGZiIG1vZHVsZSwgYW5kIHZpYSB0aGUga2VybmVsIGNvbW1hbmQKCWxpbmUgd2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGluIDoKCWZvciBtb2R1bGUgOiBpbnNtb2Qgc3N0ZmIubyBvcHRpb24xPXZhbHVlMSBvcHRpb24yPXZhbHVlMiAuLi4KCWluIGtlcm5lbCA6ICB2aWRlbz1zc3RmYjpvcHRpb24xLG9wdGlvbjI6dmFsdWUyLG9wdGlvbjMgLi4uCgkKCXNzdGZiIHN1cHBvcnRzIHRoZSBmb2xvd2luZyBvcHRpb25zIDoKCk1vZHVsZQkJS2VybmVsCQlEZXNjcmlwdGlvbgoKdmdhcGFzcz0wCXZnYW5vcGFzcwlFbmFibGUgb3IgZGlzYWJsZSBWR0EgcGFzc3Rocm91IGNhYmxlLgp2Z2FwYXNzPTEJdmdhcGFzcwkJV2hlbiBlbmFibGVkLCB0aGUgbW9uaXRvciB3aWxsIGdldCB0aGUgc2lnbmFsCgkJCQlmcm9tIHRoZSBWR0EgYm9hcmQgYW5kIG5vdCBmcm9tIHRoZSB2b29kb28uCgkJCQlEZWZhdWx0OiBub3Bhc3MKCm1lbT14CQltZW06eAkJRm9yY2UgZnJhbWUgYnVmZmVyIG1lbW9yeSBpbiBNaUIKCQkJCWFsbG93ZWQgdmFsdWVzOiAwLCAxLCAyLCA0LgoJCQkJRGVmYXVsdDogMCAoPSBhdXRvZGV0ZWN0KQoKaW52ZXJzZT0xCWludmVyc2UJCVN1cHBvc2VkIHRvIGVuYWJsZSBpbnZlcnNlIGNvbnNvbGUuCgkJCQlkb2Vzbid0IHdvcmsgeWV0Li4uCgpjbGlwcGluZz0xCWNsaXBwaW5nCUVuYWJsZSBvciBkaXNhYmxlIGNsaXBwaW5nLgpjbGlwcGluZz0wCW5vY2xpcHBpbmcJV2l0aCBjbGlwcGluZyBlbmFibGVkLCBhbGwgb2Zmc2NyZWVuCgkJCQlyZWFkcyBhbmQgd3JpdGVzIGFyZSBkaXNnYXJkZWQuCgkJCQlEZWZhdWx0OiBlbmFibGUgY2xpcHBpbmcuCgpnZnhjbGs9eAlnZnhjbGs6eAlGb3JjZSBncmFwaGljIGNsb2NrIGZyZXF1ZW5jeSAoaW4gTUh6KS4KCQkJCUJlIGNhcmVmdWxsIHdpdGggdGhpcyBvcHRpb24sIGl0IG1heSBiZQoJCQkJREFOR0VST1VTLgoJCQkJRGVmYXVsdDogYXV0byAKCQkJCQk1ME1oeiBmb3IgVm9vZG9vIDEsCgkJCQkJNzVNSHogZm9yIFZvb2RvbyAyLiAKCnNsb3dwY2k9MQlmYXN0cGNpCQlFbmFibGUgb3IgZGlzYWJsZSBmYXN0IFBDSSByZWFkL3dyaXRlcy4Kc2xvd3BjaT0xCXNsb3dwY2kJCURlZmF1bHQgOiBmYXN0cGNpCgpkZXY9eAkJZGV2OngJCUF0dGFjaCB0aGUgZHJpdmVyIHRvIGRldmljZSBudW1iZXIgeC4KCQkJCTAgaXMgdGhlIGZpcnN0IGNvbXBhdGlibGUgYm9hcmQgKGluIAoJCQkJbHNwY2kgb3JkZXIpCgpUb29scwoKCVRoZXNlIHRvb2xzIGFyZSBtb3N0bHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgYnV0IHlvdSBjYW4gCglmaW5kIHNvbWUgb2YgdGhlc2UgaW50ZXJlc3RpbmcgOgoJIC0gY29uMmZiICwgbWFwcyBhIHR0eSB0byBhIGZicmFtZWJ1ZmZlciAuCgkJY29uMmZiIC9kZXYvZmIxIC9kZXYvdHR5NQoJIC0gc3N0X2RiZ192Z2FwYXNzICwgY2hhbmdlcyB2Z2EgcGFzc3Rocm91LiBZb3UgaGF2ZSB0byByZWNvbXBpbGUgdGhlCglkcml2ZXIgd2l0aCBTU1RfREVCVUcgYW5kIFNTVF9ERUJVR19JT0NUTCBzZXQgdG8gMQoJCXNzdF9kYmdfdmdhcGFzcyAvZGV2L2ZiMSAxIChlbmFibGVzIHZnYSBjYWJsZSkKCQlzc3RfZGJnX3ZnYXBhc3MgL2Rldi9mYjEgMCAoZGlzYWJsZXMgdmdhIGNhYmxlKQoJIC0gZ2xpZGVfcmVzZXQgLCByZXNldHMgdGhlIHZvb2RvbyB1c2luZyBnbGlkZQoJCXVzZSB0aGlzIGFmdGVyIHJtbW9kaW5nIHNzdGZiLCBpZiB0aGUgbW9kdWxlIHJlZnVzZXMgdG8KCQlyZWluc2VydCAuCgpCdWdzCgoJLSBETyBOT1QgdXNlIGdsaWRlIHdoaWxlIHRoZSBzc3RmYiBtb2R1bGUgaXMgaW4sIHlvdSdsbCBtb3N0IGxpa2VseQoJaGFuZyB5b3VyIGNvbXB1dGVyLgoJLSBJZiB5b3Ugc2VlIHNvbWUgYXJ0ZWZhY3RzIChwaXhlbHMgbm90IGNsZWFuaW5nIGFuZCBzdHVmZiBsaWtlIHRoYXQpLCAKCXRyeSB0dXJuaW5nIG9mZiBjbGlwcGluZyAoY2xpcHBpbmc9MCksIGFuZC9vciB1c2luZyBzbG93cGNpCgktIHRoZSBkcml2ZXIgZG9uJ3QgZGV0ZWN0IHRoZSA0TWIgZnJhbWUgYnVmZmVyIHZvb2Rvb3MsIGl0IHNlZW1zIHRoYXQKCXRoZSAyIGxhc3QgTWJzIHdyYXAgYXJvdW5kLiBsb29raW5nIGludG8gdGhhdCAuCgktIFRoZSBkcml2ZXIgaXMgMTYgYnBwIG9ubHksIDI0LzMyIHdvbid0IHdvcmsuCgktIFRoZSBkcml2ZXIgaXMgbm90IHlvdXJfZmF2b3JpdGVfdG95LXNhZmUuIHRoaXMgaW5jbHVkZXMgU01QLi4uCiAgICAgICAgICBbQWN0dWFsbHkgZnJvbSBpbnNwZWN0aW9uIGl0IHNlZW1zIHRvIGJlIHNhZmUgLSBBbGFuXQoJLSB3aGVuIHVzaW5nIFhGcmVlODYgRkJkZXYgKFggb3ZlciBmYmRldikgeW91IG1heSBzZWUgc3RyYW5nZSBjb2xvcgoJcGF0dGVybnMgYXQgdGhlIGJvcmRlciBvZiB5b3VyIHdpbmRvd3MgKHRoZSBwaXhlbHMgbG9zZSB0aGUgbG93ZXN0CglieXRlIC0+IGJhc2ljYWx5IHRoZSBibHVlIGNvbXBvbmVudCBuZCBzb21lIG9mIHRoZSBncmVlbikgLiBJJ20gdW5hYmxlCgl0byByZXByb2R1Y2UgdGhpcyB3aXRoIFhGcmVlODYtMy4zLCBidXQgb25lIG9mIHRoZSB0ZXN0ZXJzIGhhcyB0aGlzCglwcm9ibGVtIHdpdGggWEZyZWU4Ni00LiBhcHBhcmVudGx5IHJlY2VudCBYZnJlZTg2LTQueCBzb2x2ZSB0aGlzCglwcm9ibGVtLgoJLSBJIGRpZG4ndCByZWFsbHkgdGVzdCBjaGFuZ2luZyB0aGUgcGFsZXR0ZSwgc28geW91IG1heSBmaW5kIHNvbWUgd2VpcmQKCXRoaW5ncyB3aGVuIHBsYXlpbmcgd2l0aCB0aGF0LgoJLSBTb21ldGltZXMgdGhlIGRyaXZlciB3aWxsIG5vdCByZWNvZ25pc2UgdGhlIERBQyAsIGFuZCB0aGUKICAgICAgICBpbml0aWFsaXNhdGlvbiB3aWxsIGZhaWwuIHRoaXMgaXMgc3BlY2lmaWNhbHkgdHJ1ZSBmb3IKCXZvb2RvbyAyIGJvYXJkcyAsIGJ1dCBpdCBzaG91bGQgYmUgc29sdmVkIGluIHJlY2VudCB2ZXJzaW9ucy4gcGxlYXNlCgljb250YWN0IG1lIC4KCS0gdGhlIDI0LzMyIGlzIG5vdCBsaWtlbHkgdG8gd29yayBhbnl0aW1lIHNvb24gLCBrbm93aW5nIHRoYXQgdGhlCgloYXJkd2FyZSBkb2VzIC4uLiB1bnVzdWFsIHRoaWdzIGluIDI0LzMyIGJwcAoJLSBXaGVuIHVzZWQgd2l0aCBhbnRoZXIgdmlkZW8gYm9hcmQsIGN1cnJlbnQgbGltaXRhdGlvbnMgb2YgbGludXgKCWNvbnNvbGUgc3Vic3lzdGVtIGNhbiBjYXVzZSBzb21lIHRyb3VibGVzLCBzcGVjaWZpY2FseSwgeW91IHNob3VsZAoJZGlzYWJsZSBzb2Z0d2FyZSBzY3JvbGxiYWNrICwgYXMgaXQgY2FuIG9vcHMgYmFkbHkgLi4uCgpUb2RvCgoJLSBHZXQgcmlkIG9mIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGguCgktIEJ1eSBtb3JlIGNvZmZlZS4KCS0gdGVzdC9wb3J0IHRvIG90aGVyIGFyY2guCgktIHRyeSB0byBhZGQgcGFubmluZyB1c2luZyB0d2Vla3Mgd2l0aCBmcm9udCBhbmQgYmFjayBidWZmZXIgLgoJLSB0cnkgdG8gaW1wbGVtZW50IGFjY2VsIG9uIHZvb2RvbzIgLCB0aGlzIGJvYXJkIGNhbiBhY3R1YWx5IGRvIGEgCgkgIGxvdCBpbiAyRCBldmVuIGlmIGl0IHdhcyBzb2xkIGFzIGEgM0Qgb25seSBib2FyZCAuLi4KCmdob3ouCgotLSAKR2hvemxhbmUgVG91bWkgPGd0b3VtaUBsYXBvc3RlLm5ldD4KCgokRGF0ZTogMjAwMi8wNS8wOSAyMDoxMTo0NSAkCmh0dHA6Ly9zc3RmYi5zb3VyY2Vmb3JnZS5uZXQvUkVBRE1FCg==