ICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVByb3h5IGhvdy10bwogICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiAxLjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxseSB0YXJyZWF1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDE1LzEwLzEzCgoKMSkgSG93IHRvIGJ1aWxkIGl0Ci0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIGRldmVsb3BtZW50IHZlcnNpb24sIHNvIGl0IGlzIGV4cGVjdGVkIHRvIGJyZWFrIGZyb20gdGltZSB0byB0aW1lLAp0byBhZGQgYW5kIHJlbW92ZSBmZWF0dXJlcyB3aXRob3V0IHByaW9yIG5vdGlmaWNhdGlvbiBhbmQgaXQgc2hvdWxkIG5vdCBiZSB1c2VkCmluIHByb2R1Y3Rpb24uIElmIHlvdSBhcmUgbm90IHVzZWQgdG8gYnVpbGQgZnJvbSBzb3VyY2VzIG9yIGlmIHlvdSBhcmUgbm90IHVzZWQKdG8gZm9sbG93IHVwZGF0ZXMgdGhlbiBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGluc3RlYWQgeW91IHVzZSB0aGUgcGFja2FnZXMgcHJvdmlkZWQKYnkgeW91ciBzb2Z0d2FyZSB2ZW5kb3Igb3IgTGludXggZGlzdHJpYnV0aW9uLiBNb3N0IG9mIHRoZW0gYXJlIHRha2luZyB0aGlzIHRhc2sKc2VyaW91c2x5IGFuZCBhcmUgZG9pbmcgYSBnb29kIGpvYiBhdCBiYWNrcG9ydGluZyBpbXBvcnRhbnQgZml4ZXMuIElmIGZvciBhbnkKcmVhc29uIHlvdSdkIHByZWZlciBhIGRpZmZlcmVudCB2ZXJzaW9uIHRoYW4gdGhlIG9uZSBwYWNrYWdlZCBmb3IgeW91ciBzeXN0ZW0sCnlvdSB3YW50IHRvIGJlIGNlcnRhaW4gdG8gaGF2ZSBhbGwgdGhlIGZpeGVzIG9yIHRvIGdldCBzb21lIGNvbW1lcmNpYWwgc3VwcG9ydCwKb3RoZXIgY2hvaWNlcyBhcmUgYXZhaWxhYmxlIGF0IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaGFwcm94eS5jb20vCgpUbyBidWlsZCBoYXByb3h5LCB5b3Ugd2lsbCBuZWVkIDoKICAtIEdOVSBtYWtlLiBOZWl0aGVyIFNvbGFyaXMgbm9yIE9wZW5CU0QncyBtYWtlIHdvcmsgd2l0aCB0aGUgR05VIE1ha2VmaWxlLgogICAgSWYgeW91IGdldCBtYW55IHN5bnRheCBlcnJvcnMgd2hlbiBydW5uaW5nICJtYWtlIiwgeW91IG1heSB3YW50IHRvIHJldHJ5CiAgICB3aXRoICJnbWFrZSIgd2hpY2ggaXMgdGhlIG5hbWUgY29tbW9ubHkgdXNlZCBmb3IgR05VIG1ha2Ugb24gQlNEIHN5c3RlbXMuCiAgLSBHQ0MgYmV0d2VlbiAyLjk1IGFuZCA0LjguIE90aGVycyBtYXkgd29yaywgYnV0IG5vdCB0ZXN0ZWQuCiAgLSBHTlUgbGQKCkFsc28sIHlvdSBtaWdodCB3YW50IHRvIGJ1aWxkIHdpdGggbGlicGNyZSBzdXBwb3J0LCB3aGljaCB3aWxsIHByb3ZpZGUgYSB2ZXJ5CmVmZmljaWVudCByZWdleCBpbXBsZW1lbnRhdGlvbiBhbmQgd2lsbCBhbHNvIGZpeCBzb21lIGJhZG5lc3Mgb24gU29sYXJpcycgb25lLgoKVG8gYnVpbGQgaGFwcm94eSwgeW91IGhhdmUgdG8gY2hvb3NlIHlvdXIgdGFyZ2V0IE9TIGFtb25nc3QgdGhlIGZvbGxvd2luZyBvbmVzCmFuZCBhc3NpZ24gaXQgdG8gdGhlIFRBUkdFVCB2YXJpYWJsZSA6CgogIC0gbGludXgyMiAgICAgZm9yIExpbnV4IDIuMgogIC0gbGludXgyNCAgICAgZm9yIExpbnV4IDIuNCBhbmQgYWJvdmUgKGRlZmF1bHQpCiAgLSBsaW51eDI0ZSAgICBmb3IgTGludXggMi40IHdpdGggc3VwcG9ydCBmb3IgYSB3b3JraW5nIGVwb2xsICg+IDAuMjEpCiAgLSBsaW51eDI2ICAgICBmb3IgTGludXggMi42IGFuZCBhYm92ZQogIC0gbGludXgyNjI4ICAgZm9yIExpbnV4IDIuNi4yOCwgMy54LCBhbmQgYWJvdmUgKGVuYWJsZXMgc3BsaWNlIGFuZCB0cHJveHkpCiAgLSBzb2xhcmlzICAgICBmb3IgU29sYXJpcyA4IG9yIDEwIChvdGhlcnMgdW50ZXN0ZWQpCiAgLSBmcmVlYnNkICAgICBmb3IgRnJlZUJTRCA1IHRvIDEwIChvdGhlcnMgdW50ZXN0ZWQpCiAgLSBuZXRic2QgICAgICBmb3IgTmV0QlNECiAgLSBvc3ggICAgICAgICBmb3IgTWFjIE9TL1gKICAtIG9wZW5ic2QgICAgIGZvciBPcGVuQlNEIDMuMSBhbmQgYWJvdmUKICAtIGFpeDUxICAgICAgIGZvciBBSVggNS4xCiAgLSBhaXg1MiAgICAgICBmb3IgQUlYIDUuMgogIC0gY3lnd2luICAgICAgZm9yIEN5Z3dpbgogIC0gZ2VuZXJpYyAgICAgZm9yIGFueSBvdGhlciBPUyBvciB2ZXJzaW9uLgogIC0gY3VzdG9tICAgICAgdG8gbWFudWFsbHkgYWRqdXN0IGV2ZXJ5IHNldHRpbmcKCllvdSBtYXkgYWxzbyBjaG9vc2UgeW91ciBDUFUgdG8gYmVuZWZpdCBmcm9tIHNvbWUgb3B0aW1pemF0aW9ucy4gVGhpcyBpcwpwYXJ0aWN1bGFybHkgaW1wb3J0YW50IG9uIFVsdHJhU3BhcmMgbWFjaGluZXMuIEZvciB0aGlzLCB5b3UgY2FuIGFzc2lnbgpvbmUgb2YgdGhlIGZvbGxvd2luZyBjaG9pY2VzIHRvIHRoZSBDUFUgdmFyaWFibGUgOgoKICAtIGk2ODYgZm9yIGludGVsIFBlbnRpdW1Qcm8sIFBlbnRpdW0gMiBhbmQgYWJvdmUsIEFNRCBBdGhsb24KICAtIGk1ODYgZm9yIGludGVsIFBlbnRpdW0sIEFNRCBLNiwgVklBIEMzLgogIC0gdWx0cmFzcGFyYyA6IFN1biBVbHRyYVNwYXJjIEkvSUkvSUlJL0lWIHByb2Nlc3NvcgogIC0gbmF0aXZlIDogdXNlIHRoZSBidWlsZCBtYWNoaW5lJ3Mgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMuIFVzZSB3aXRoCiAgICBleHRyZW1lIGNhcmUsIGFuZCBuZXZlciBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGtub3duIHRvIGJyZWFrKS4KICAtIGdlbmVyaWMgOiBhbnkgb3RoZXIgcHJvY2Vzc29yIG9yIG5vIENQVS1zcGVjaWZpYyBvcHRpbWl6YXRpb24uIChkZWZhdWx0KQoKQWx0ZXJuYXRpdmVseSwgeW91IG1heSBqdXN0IHNldCB0aGUgQ1BVX0NGTEFHUyB2YWx1ZSB0byB0aGUgb3B0aW1hbCBHQ0Mgb3B0aW9ucwpmb3IgeW91ciBwbGF0Zm9ybS4KCllvdSBtYXkgd2FudCB0byBidWlsZCBzcGVjaWZpYyB0YXJnZXQgYmluYXJpZXMgd2hpY2ggZG8gbm90IG1hdGNoIHlvdXIgbmF0aXZlCmNvbXBpbGVyJ3MgdGFyZ2V0LiBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIG9uIDY0LWJpdCBzeXN0ZW1zIHdoZW4geW91IHdhbnQKdG8gYnVpbGQgYSAzMi1iaXQgYmluYXJ5LiBVc2UgdGhlIEFSQ0ggdmFyaWFibGUgZm9yIHRoaXMgcHVycG9zZS4gUmlnaHQgbm93Cml0IG9ubHkga25vd3MgYWJvdXQgYSBmZXcgeDg2IHZhcmlhbnRzIChpMzg2LGk0ODYsaTU4NixpNjg2LHg4Nl82NCksIHR3bwpnZW5lcmljIG9uZXMgKDMyLDY0KSBhbmQgc2V0cyAtbTMyLy1tNjQgYXMgd2VsbCBhcyAtbWFyY2g9PGFyY2g+IGFjY29yZGluZ2x5LgoKSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgUENSRSAoUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMpLCB0aGVuIHlvdQpyZWFsbHkgc2hvdWxkIGJ1aWxkIHdpdGggbGlicGNyZSB3aGljaCBpcyBiZXR3ZWVuIDIgYW5kIDEwIHRpbWVzIGZhc3RlciB0aGFuCm90aGVyIGxpYmMgaW1wbGVtZW50YXRpb25zLiBSZWdleCBhcmUgdXNlZCBmb3IgaGVhZGVyIHByb2Nlc3NpbmcgKGRlbGV0aW9uLApyZXdyaXRpbmcsIGFsbG93LCBkZW55KS4gVGhlIG9ubHkgaW5jb252ZW5pZW50IG9mIGxpYnBjcmUgaXMgdGhhdCBpdCBpcyBub3QKeWV0IHdpZGVseSBzcHJlYWQsIHNvIGlmIHlvdSBidWlsZCBmb3Igb3RoZXIgc3lzdGVtcywgeW91IG1pZ2h0IGdldCBpbnRvCnRyb3VibGUgaWYgdGhleSBkb24ndCBoYXZlIHRoZSBkeW5hbWljIGxpYnJhcnkuIEluIHRoaXMgc2l0dWF0aW9uLCB5b3Ugc2hvdWxkCnN0YXRpY2FsbHkgbGluayBsaWJwY3JlIGludG8gaGFwcm94eSBzbyB0aGF0IGl0IHdpbGwgbm90IGJlIG5lY2Vzc2FyeSB0bwppbnN0YWxsIGl0IG9uIHRhcmdldCBzeXN0ZW1zLiBBdmFpbGFibGUgYnVpbGQgb3B0aW9ucyBmb3IgUENSRSBhcmUgOgoKICAtIFVTRV9QQ1JFPTEgdG8gdXNlIGxpYnBjcmUsIGluIHdoYXRldmVyIGZvcm0gaXMgYXZhaWxhYmxlIG9uIHlvdXIgc3lzdGVtCiAgICAoc2hhcmVkIG9yIHN0YXRpYykKCiAgLSBVU0VfU1RBVElDX1BDUkU9MSB0byB1c2UgYSBzdGF0aWMgdmVyc2lvbiBvZiBsaWJwY3JlIGV2ZW4gaWYgdGhlIGR5bmFtaWMKICAgIG9uZSBpcyBhdmFpbGFibGUuIFRoaXMgd2lsbCBlbmhhbmNlIHBvcnRhYmlsaXR5LgoKICAtIHdpdGggbm8gb3B0aW9uLCB1c2UgeW91ciBPUyBsaWJjJ3Mgc3RhbmRhcmQgcmVnZXggaW1wbGVtZW50YXRpb24gKGRlZmF1bHQpLgogICAgV2FybmluZyEgZ3JvdXAgcmVmZXJlbmNlcyBvbiBTb2xhcmlzIHNlZW0gYnJva2VuLiBVc2Ugc3RhdGljLXBjcmUgd2hlbmV2ZXIKICAgIHBvc3NpYmxlLgoKSWYgeW91ciBzeXN0ZW0gZG9lc24ndCBwcm92aWRlIFBDUkUsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byBkb3dubG9hZCBpdCBmcm9tCmh0dHA6Ly93d3cucGNyZS5vcmcvIGFuZCBidWlsZCBpdCB5b3Vyc2VsZiwgaXQncyBmYXN0IGFuZCBlYXN5LgoKUmVjZW50IHN5c3RlbXMgY2FuIHJlc29sdmUgSVB2NiBob3N0IG5hbWVzIHVzaW5nIGdldGFkZHJpbmZvKCkuIFRoaXMgcHJpbWl0aXZlCmlzIG5vdCBwcmVzZW50IGluIGFsbCBsaWJjcyBhbmQgZG9lcyBub3Qgd29yayBpbiBhbGwgb2YgdGhlbSBlaXRoZXIuIFN1cHBvcnQgaW4KZ2xpYmMgd2FzIGJyb2tlbiBiZWZvcmUgMi4zLiBTb21lIGVtYmVkZGVkIGxpYnMgbWF5IG5vdCBwcm9wZXJseSB3b3JrIGVpdGhlciwKdGh1cywgc3VwcG9ydCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBtZWFuaW5nIHRoYXQgc29tZSBob3N0IG5hbWVzIHdoaWNoIG9ubHkKcmVzb2x2ZSBhcyBJUHY2IGFkZHJlc3NlcyB3aWxsIG5vdCByZXNvbHZlIGFuZCBjb25maWdzIG1pZ2h0IGVtaXQgYW4gZXJyb3IKZHVyaW5nIHBhcnNpbmcuIElmIHlvdSBrbm93IHRoYXQgeW91ciBPUyBsaWJjIGhhcyByZWxpYWJsZSBzdXBwb3J0IGZvcgpnZXRhZGRyaW5mbygpLCB5b3UgY2FuIGFkZCBVU0VfR0VUQUREUklORk89MSBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUgdG8gZW5hYmxlCml0LiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBvcHRpb24gZm9yIG1vc3QgTGludXggZGlzdHJvIHBhY2thZ2VycyBzaW5jZSBpdCdzCndvcmtpbmcgZmluZSBvbiBhbGwgcmVjZW50IG1haW5zdHJlYW0gZGlzdHJvcy4gSXQgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIG9uClNvbGFyaXMgOCBhbmQgYWJvdmUsIGFzIGl0J3Mga25vd24gdG8gd29yay4KCkl0IGlzIHBvc3NpYmxlIHRvIGFkZCBuYXRpdmUgc3VwcG9ydCBmb3IgU1NMIHVzaW5nIHRoZSBHTlUgbWFrZWZpbGUsIGJ5IHBhc3NpbmcKIlVTRV9PUEVOU1NMPTEiIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZS4gVGhlIGxpYnNzbCBhbmQgbGliY3J5cHRvIHdpbGwKYXV0b21hdGljYWxseSBiZSBsaW5rZWQgd2l0aCBoYXByb3h5LiBTb21lIHN5c3RlbXMgYWxzbyByZXF1aXJlIGxpYnosIHNvIGlmIHRoZQpidWlsZCBmYWlscyBkdWUgdG8gbWlzc2luZyBzeW1ib2xzIHN1Y2ggYXMgZGVmbGF0ZUluaXQoKSwgdGhlbiB0cnkgYWdhaW4gd2l0aAoiQURETElCPS1seiIuCgpZb3VyIGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIGFsd2F5cyB1c2UgYW4gdXAtdG8tZGF0ZSB2ZXJzaW9uIG9mIE9wZW5TU0wsIGFzCmZvdW5kIG9uIGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnLyBhcyB2dWxuZXJhYmlsaXRpZXMgYXJlIG9jY2FzaW9uYWxseSBmb3VuZCBhbmQKeW91IGRvbid0IHdhbnQgdGhlbSBvbiB5b3VyIHN5c3RlbXMuIEhBUHJveHkgaXMga25vd24gdG8gYnVpbGQgY29ycmVjdGx5IG9uIGFsbApjdXJyZW50bHkgc3VwcG9ydGVkIGJyYW5jaGVzICgwLjkuOCwgMS4wLjAsIDEuMC4xIGFuZCAxLjAuMiBhdCB0aGUgdGltZSBvZgp3cml0aW5nKS4gQnJhbmNoIDEuMC4yIGlzIHJlY29tbWVuZGVkIGZvciB0aGUgcmljaGVzdCBmZWF0dXJlcy4KClRvIGxpbmsgT3BlblNTTCBzdGF0aWNhbGx5IGFnYWluc3QgaGFwcm94eSwgYnVpbGQgT3BlblNTTCB3aXRoIHRoZSBuby1zaGFyZWQKa2V5d29yZCBhbmQgaW5zdGFsbCBpdCB0byBhIGxvY2FsIGRpcmVjdG9yeSwgc28geW91ciBzeXN0ZW0gaXMgbm90IGFmZmVjdGVkIDoKCiAgICAkIGV4cG9ydCBTVEFUSUNMSUJTU0w9L3RtcC9zdGF0aWNsaWJzc2wKICAgICQgLi9jb25maWcgLS1wcmVmaXg9JFNUQVRJQ0xJQlNTTCBuby1zaGFyZWQKICAgICQgbWFrZSAmJiBtYWtlIGluc3RhbGxfc3cKCldoZW4gYnVpbGRpbmcgaGFwcm94eSwgcGFzcyB0aGF0IHBhdGggdmlhIFNTTF9JTkMgYW5kIFNTTF9MSUIgdG8gbWFrZSBhbmQKaW5jbHVkZSBhZGRpdGlvbmFsIGxpYnMgd2l0aCBBRERMSUIgaWYgbmVlZGVkIChpbiB0aGlzIGNhc2UgZm9yIGV4YW1wbGUgbGliZGwpOgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNiBVU0VfT1BFTlNTTD0xIFNTTF9JTkM9JFNUQVRJQ0xJQlNTTC9pbmNsdWRlIFNTTF9MSUI9JFNUQVRJQ0xJQlNTTC9saWIgQURETElCPS1sZGwKCkl0IGlzIGFsc28gcG9zc2libGUgdG8gaW5jbHVkZSBuYXRpdmUgc3VwcG9ydCBmb3IgemxpYiB0byBiZW5lZml0IGZyb20gSFRUUApjb21wcmVzc2lvbi4gRm9yIHRoaXMsIHBhc3MgIlVTRV9aTElCPTEiIG9uIHRoZSAibWFrZSIgY29tbWFuZCBsaW5lIGFuZCBlbnN1cmUKdGhhdCB6bGliIGlzIHByZXNlbnQgb24gdGhlIHN5c3RlbS4gQWx0ZXJuYXRpdmVseSBpdCBpcyBwb3NzaWJsZSB0byB1c2UgbGlic2x6CmZvciBhIGZhc3RlciwgbWVtb3J5IGxlc3MsIGJ1dCBzbGlnaHRseSBsZXNzIGVmZmljaWVudCBjb21wcmVzc2lvbiwgYnkgcGFzc2luZwoiVVNFX1NMWj0xIi4KClpsaWIgaXMgY29tbW9ubHkgZm91bmQgb24gbW9zdCBzeXN0ZW1zLCBvdGhlcndpc2UgdXBkYXRlcyBjYW4gYmUgcmV0cmlldmVkIGZyb20KaHR0cDovL3d3dy56bGliLm5ldC8uIEl0IGlzIGVhc3kgYW5kIGZhc3QgdG8gYnVpbGQuIExpYnNseiBjYW4gYmUgZG93bmxvYWRlZApmcm9tIGh0dHA6Ly8xd3QuZXUvcHJvamVjdHMvbGlic2x6LyBhbmQgaXMgZXZlbiBlYXNpZXIgdG8gYnVpbGQuCgpCeSBkZWZhdWx0LCB0aGUgREVCVUcgdmFyaWFibGUgaXMgc2V0IHRvICctZycgdG8gZW5hYmxlIGRlYnVnIHN5bWJvbHMuIEl0IGlzCm5vdCB3aXNlIHRvIGRpc2FibGUgaXQgb24gdW5jb21tb24gc3lzdGVtcywgYmVjYXVzZSBpdCdzIG9mdGVuIHRoZSBvbmx5IHdheSB0bwpnZXQgYSBjb21wbGV0ZSBjb3JlIHdoZW4geW91IG5lZWQgb25lLiBPdGhlcndpc2UsIHlvdSBjYW4gc2V0IERFQlVHIHRvICctcycgdG8Kc3RyaXAgdGhlIGJpbmFyeS4KCkZvciBleGFtcGxlLCBJIHVzZSB0aGlzIHRvIGJ1aWxkIGZvciBTb2xhcmlzIDggOgoKICAgICQgbWFrZSBUQVJHRVQ9c29sYXJpcyBDUFU9dWx0cmFzcGFyYyBVU0VfU1RBVElDX1BDUkU9MQoKQW5kIEkgYnVpbGQgaXQgdGhpcyB3YXkgb24gT3BlbkJTRCBvciBGcmVlQlNEIDoKCiAgICAkIGdtYWtlIFRBUkdFVD1mcmVlYnNkIFVTRV9QQ1JFPTEgVVNFX09QRU5TU0w9MSBVU0VfWkxJQj0xCgpBbmQgb24gYSBjbGFzc2ljIExpbnV4IHdpdGggU1NMIGFuZCBaTElCIHN1cHBvcnQgKGVnOiBSZWQgSGF0IDUueCkgOgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNiBVU0VfUENSRT0xIFVTRV9PUEVOU1NMPTEgVVNFX1pMSUI9MQoKQW5kIG9uIGEgcmVjZW50IExpbnV4ID49IDIuNi4yOCB3aXRoIFNTTCBhbmQgWkxJQiBzdXBwb3J0IDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYyOCBVU0VfUENSRT0xIFVTRV9PUEVOU1NMPTEgVVNFX1pMSUI9MQoKSW4gb3JkZXIgdG8gYnVpbGQgYSAzMi1iaXQgYmluYXJ5IG9uIGFuIHg4Nl82NCBMaW51eCBzeXN0ZW0gd2l0aCBTU0wgc3VwcG9ydAp3aXRob3V0IHN1cHBvcnQgZm9yIGNvbXByZXNzaW9uIGJ1dCB3aGVuIE9wZW5TU0wgcmVxdWlyZXMgWkxJQiBhbnl3YXkgOgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNiBBUkNIPWkzODYgVVNFX09QRU5TU0w9MSBBRERMSUI9LWx6CgpUaGUgU1NMIHN0YWNrIHN1cHBvcnRzIHNlc3Npb24gY2FjaGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gYWxsIHJ1bm5pbmcKcHJvY2Vzc2VzLiBUaGlzIGludm9sdmVzIHNvbWUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIHN5bmNocm9uaXphdGlvbiBvcGVyYXRpb25zCndoaWNoIGNvbWUgaW4gbXVsdGlwbGUgZmxhdm9ycyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBhbmQgYXJjaGl0ZWN0dXJlIDoKCiAgQXRvbWljIG9wZXJhdGlvbnMgOgogICAgLSBpbnRlcm5hbCBhc3NlbWJsZXIgdmVyc2lvbnMgZm9yIHg4Ni94ODZfNjQgYXJjaGl0ZWN0dXJlcwoKICAgIC0gZ2NjIGJ1aWx0aW5zIGZvciBvdGhlciBhcmNoaXRlY3R1cmVzLiBTb21lIGFyY2hpdGVjdHVyZXMgbWlnaHQgbm90CiAgICAgIGJlIGZ1bGx5IHN1cHBvcnRlZCBvciBtaWdodCByZXF1aXJlIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBnY2MuCiAgICAgIElmIHlvdXIgYXJjaGl0ZWN0dXJlIGlzIG5vdCBzdXBwb3J0ZWQsIHlvdSB3aWxseSBoYXZlIHRvIGVpdGhlciB1c2UKICAgICAgcHRocmVhZCBpZiBzdXBwb3J0ZWQsIG9yIHRvIGRpc2FibGUgdGhlIHNoYXJlZCBjYWNoZS4KCiAgICAtIHB0aHJlYWQgKHBvc2l4IHRocmVhZHMpLiBQdGhyZWFkcyBhcmUgdmVyeSBjb21tb24gYnV0IGludGVyLXByb2Nlc3MKICAgICAgc3VwcG9ydCBpcyBub3QgdGhhdCBjb21tb24sIGFuZCBzb21lIG9sZGVyIG9wZXJhdGluZyBzeXN0ZW1zIGRpZCBub3QKICAgICAgcmVwb3J0IGFuIGVycm9yIHdoZW4gZW5hYmxpbmcgbXVsdGktcHJvY2VzcyBtb2RlLCBzbyB0aGV5IHVzZWQgdG8KICAgICAgc2lsZW50bHkgZmFpbCwgcG9zc2libHkgY2F1c2luZyBjcmFzaGVzLiBMaW51eCdzIGltcGxlbWVudGF0aW9uIGlzCiAgICAgIGZpbmUuIE9wZW5CU0QgZG9lc24ndCBzdXBwb3J0IHRoZW0gYW5kIGRvZXNuJ3QgYnVpbGQuIEZyZWVCU0QgOSBidWlsZHMKICAgICAgYW5kIHJlcG9ydHMgYW4gZXJyb3IgYXQgcnVudGltZSwgd2hpbGUgY2VydGFpbiBvbGRlciB2ZXJzaW9ucyBtaWdodAogICAgICBzaWxlbnRseSBmYWlsLiBQdGhyZWFkcyBhcmUgZW5hYmxlZCB1c2luZyBVU0VfUFRIUkVBRF9QU0hBUkVEPTEuCgogIFN5bmNocm9uaXphdGlvbiBvcGVyYXRpb25zIDoKICAgIC0gaW50ZXJuYWwgc3BpbmxvY2sgOiB0aGlzIG1vZGUgaXMgT1MtaW5kZXBlbmRhbnQsIGxpZ2h0IGJ1dCB3aWxsIG5vdAogICAgICBzY2FsZSB3ZWxsIHRvIG1hbnkgcHJvY2Vzc2VzLiBIb3dldmVyLCBhY2Nlc3NlcyB0byB0aGUgc2Vzc2lvbiBjYWNoZQogICAgICBhcmUgcmFyZSBlbm91Z2ggdGhhdCB0aGlzIG1vZGUgY291bGQgY2VydGFpbmx5IGFsd2F5cyBiZSB1c2VkLiBUaGlzCiAgICAgIGlzIHRoZSBkZWZhdWx0IG1vZGUuCgogICAgLSBGdXRleGVzLCB3aGljaCBhcmUgTGludXgtc3BlY2lmaWMgaGlnaGx5IHNjYWxhYmxlIGxpZ2h0IHdlaWdodCBtdXRleGVzCiAgICAgIGltcGxlbWVudGVkIGluIHVzZXItc3BhY2Ugd2l0aCBzb21lIGxpbWl0ZWQgYXNzaXN0YW5jZSBmcm9tIHRoZSBrZXJuZWwuCiAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgb24gTGludXggMi42IGFuZCBhYm92ZSBhbmQgaXMgZW5hYmxlZCBieSBwYXNzaW5nCiAgICAgIFVTRV9GVVRFWD0xCgogICAgLSBwdGhyZWFkIChwb3NpeCB0aHJlYWRzKS4gU2VlIGFib3ZlLgoKSWYgbm9uZSBvZiB0aGVzZSBtZWNoYW5pc21zIGlzIHN1cHBvcnRlZCBieSB5b3VyIHBsYXRmb3JtLCB5b3UgbWF5IG5lZWQgdG8KYnVpbGQgd2l0aCBVU0VfUFJJVkFURV9DQUNIRT0xIHRvIHRvdGFsbHkgZGlzYWJsZSBTU0wgY2FjaGUgc2hhcmluZy4gVGhlbgppdCBpcyBiZXR0ZXIgbm90IHRvIHJ1biBTU0wgb24gbXVsdGlwbGUgcHJvY2Vzc2VzLgoKSWYgeW91IG5lZWQgdG8gcGFzcyBvdGhlciBkZWZpbmVzLCBpbmNsdWRlcywgbGlicmFyaWVzLCBldGMuLi4gdGhlbiBwbGVhc2UKY2hlY2sgdGhlIE1ha2VmaWxlIHRvIHNlZSB3aGljaCBvbmVzIHdpbGwgYmUgYXZhaWxhYmxlIGluIHlvdXIgY2FzZSwgYW5kCnVzZSB0aGUgVVNFXyogdmFyaWFibGVzIGluIHRoZSBNYWtlZmlsZS4KCkFJWCA1LjMgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBnZW5lcmljIHRhcmdldC4gSG93ZXZlciwgZm9yIHRoZSBiaW5hcnkgdG8KYWxzbyBydW4gb24gNS4yIG9yIGVhcmxpZXIsIHlvdSBuZWVkIHRvIGJ1aWxkIHdpdGggREVGSU5FPSItRF9NU0dRU1VQUE9SVCIsCm90aGVyd2lzZSBfX2ZkX3NlbGVjdCgpIHdpbGwgYmUgdXNlZCB3aGlsZSBub3QgYmVpbmcgcHJlc2VudCBpbiB0aGUgbGliYywgYnV0CnRoaXMgaXMgZWFzaWx5IGFkZHJlc3NlZCB1c2luZyB0aGUgImFpeDUyIiB0YXJnZXQuIElmIHlvdSBnZXQgYnVpbGQgZXJyb3JzCmJlY2F1c2Ugb2Ygc3RyYW5nZSBzeW1ib2xzIG9yIHNlY3Rpb24gbWlzbWF0Y2hlcywgc2ltcGx5IHJlbW92ZSAtZyBmcm9tCkRFQlVHX0NGTEFHUy4KCllvdSBjYW4gZWFzaWx5IGRlZmluZSB5b3VyIG93biB0YXJnZXQgd2l0aCB0aGUgR05VIE1ha2VmaWxlLiBVbmtub3duIHRhcmdldHMKYXJlIHByb2Nlc3NlZCB3aXRoIG5vIGRlZmF1bHQgb3B0aW9uIGV4Y2VwdCBVU0VfUE9MTD1kZWZhdWx0LiBTbyB5b3UgY2FuIHZlcnkKd2VsbCB1c2UgdGhhdCBwcm9wZXJ0eSB0byBkZWZpbmUgeW91ciBvd24gc2V0IG9mIG9wdGlvbnMuIFVTRV9QT0xMIGNhbiBldmVuIGJlCmRpc2FibGVkIGJ5IHNldHRpbmcgVVNFX1BPTEw9IiIuIEZvciBleGFtcGxlIDoKCiAgICAkIGdtYWtlIFRBUkdFVD10aW55IFVTRV9QT0xMPSIiIFRBUkdFVF9DRkxBR1M9LWZvbWl0LWZyYW1lLXBvaW50ZXIKCgoxLjEpIERldmljZUF0bGFzIERldmljZSBEZXRlY3Rpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJbiBvcmRlciB0byBhZGQgRGV2aWNlQXRsYXMgRGV2aWNlIERldGVjdGlvbiBzdXBwb3J0LCB5b3Ugd291bGQgbmVlZCB0byBkb3dubG9hZAp0aGUgQVBJIHNvdXJjZSBjb2RlIGZyb20gaHR0cHM6Ly9kZXZpY2VhdGxhcy5jb20vZGV2aWNlYXRsYXMtaGFwcm94eS1tb2R1bGUgYW5kCm9uY2UgZXh0cmFjdGVkIDoKCiAgICAkIG1ha2UgVEFSR0VUPTx0YXJnZXQ+IFVTRV9QQ1JFPTEgVVNFX0RFVklDRUFUTEFTPTEgREVWSUNFQVRMQVNfU1JDPTxwYXRoIHRvIHRoZSBBUEkgcm9vdCBmb2xkZXI+CgpPcHRpb25hbGx5IERFVklDRUFUTEFTX0lOQyBhbmQgREVWSUNFQVRMQVNfTElCIG1heSBiZSBzZXQgdG8gb3ZlcnJpZGUgdGhlIHBhdGgKdG8gdGhlIGluY2x1ZGUgZmlsZXMgYW5kIGxpYnJhcmllcyByZXNwZWN0aXZlbHkgaWYgdGhleSdyZSBub3QgaW4gdGhlIHNvdXJjZQpkaXJlY3RvcnkuCgpUaGVzZSBhcmUgc3VwcG9ydGVkIERldmljZUF0bGFzIGRpcmVjdGl2ZXMgKHNlZSBkb2MvY29uZmlndXJhdGlvbi50eHQpIDoKICAtIGRldmljZWF0bGFzLWpzb24tZmlsZSA8cGF0aCB0byB0aGUgRGV2aWNlQXRsYXMgSlNPTiBkYXRhIGZpbGU+LgogIC0gZGV2aWNlYXRsYXMtbG9nLWxldmVsIDxudW1iZXI+ICgwIHRvIDMsIGxldmVsIG9mIGluZm9ybWF0aW9uIHJldHVybmVkIGJ5CiAgICB0aGUgQVBJLCAwIGJ5IGRlZmF1bHQpLgogIC0gZGV2aWNlYXRsYXMtcHJvcGVydHktc2VwYXJhdG9yIDxjaGFyYWN0ZXI+IChjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSB0aGUKICAgIHByb3BlcnRpZXMgcHJvZHVjZWQgYnkgdGhlIEFQSSwgfCBieSBkZWZhdWx0KS4KClNhbXBsZSBjb25maWd1cmF0aW9uIDoKCiAgICBnbG9iYWwKCWRldmljZWF0bGFzLWpzb24tZmlsZSA8cGF0aCB0byBqc29uIGZpbGU+CgogICAgLi4uCiAgICBmcm9udGVuZAoJYmluZCAqOjg4ODEKCWRlZmF1bHRfYmFja2VuZCBzZXJ2ZXJzCgpUaGVyZSBhcmUgdHdvIGRpc3RpbmN0IG1ldGhvZHMgYXZhaWxhYmxlLCBvbmUgd2hpY2ggbGV2ZXJhZ2VzIGFsbCBIVFRQIGhlYWRlcnMKYW5kIG9uZSB3aGljaCB1c2VzIG9ubHkgYSBzaW5nbGUgSFRUUCBoZWFkZXIgZm9yIHRoZSBkZXRlY3Rpb24uIFRoZSBmb3JtZXIKbWV0aG9kIGlzIGhpZ2hseSByZWNvbW1lbmRlZCBhbmQgbW9yZSBhY2N1cmF0ZS4gVGhlcmUgYXJlIHNldmVyYWwgcG9zc2libGUgdXNlCmNhc2VzLgoKIyBUbyB0cmFuc21pdCB0aGUgRGV2aWNlQXRsYXMgZGF0YSBkb3duc3RyZWFtIHRvIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KCkFsbCBIVFRQIGhlYWRlcnMgdmlhIHRoZSBzYW1wbGUgLyBmZXRjaAoKICAgIGh0dHAtcmVxdWVzdCBzZXQtaGVhZGVyIFgtRGV2aWNlQXRsYXMtRGF0YSAlW2RhLWNzdi1mZXRjaChwcmltYXJ5SGFyZHdhcmVUeXBlLG9zTmFtZSxvc1ZlcnNpb24sYnJvd3Nlck5hbWUsYnJvd3NlclZlcnNpb24pXQoKU2luZ2xlIEhUVFAgaGVhZGVyIChlLmcuIFVzZXItQWdlbnQpIHZpYSB0aGUgY29udmVydG9yCgogICAgaHR0cC1yZXF1ZXN0IHNldC1oZWFkZXIgWC1EZXZpY2VBdGxhcy1EYXRhICVbcmVxLmZoZHIoVXNlci1BZ2VudCksZGEtY3N2LWNvbnYocHJpbWFyeUhhcmR3YXJlVHlwZSxvc05hbWUsb3NWZXJzaW9uLGJyb3dzZXJOYW1lLGJyb3dzZXJWZXJzaW9uKV0KCiMgTW9iaWxlIGNvbnRlbnQgc3dpdGNoaW5nIHdpdGggQUNMCgpBbGwgSFRUUCBoZWFkZXJzCgogICAgYWNsIGlzX21vYmlsZSBkYS1jc3YtZmV0Y2gobW9iaWxlRGV2aWNlKSAxCgpTaW5nbGUgSFRUUCBoZWFkZXIKCiAgICBhY2wgZGV2aWNlX3R5cGVfdGFibGV0IHJlcS5maGRyKFVzZXItQWdlbnQpLGRhLWNzdi1jb252KHByaW1hcnlIYXJkd2FyZVR5cGUpICJUYWJsZXQiCgoKUGxlYXNlIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBEZXZpY2VBdGxhcyBhbmQgdGhlIGRldGVjdGlvbiBtZXRob2RzIGF0IGh0dHBzOi8vZGV2aWNlYXRsYXMuY29tL3Jlc291cmNlcyAuCgoKMS4yKSA1MURlZ3JlZXMgRGV2aWNlIERldGVjdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpZb3UgY2FuIGFsc28gaW5jbHVkZSA1MURlZ3JlZXMgZm9yIGluYnVpbHQgZGV2aWNlIGRldGVjdGlvbiBlbmFibGluZyBhdHRyaWJ1dGVzCnN1Y2ggYXMgc2NyZWVuIHNpemUgKHBoeXNpY2FsICYgcGl4ZWxzKSwgc3VwcG9ydGVkIGlucHV0IG1ldGhvZHMsIHJlbGVhc2UgZGF0ZSwKaGFyZHdhcmUgdmVuZG9yIGFuZCBtb2RlbCwgYnJvd3NlciBpbmZvcm1hdGlvbiwgYW5kIGRldmljZSBwcmljZSBhbW9uZyBtYW55Cm90aGVycy4gU3VjaCBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB1c2VyIGV4cGVyaWVuY2Ugb2YgYSB3ZWIKc2l0ZSBieSB0YWlsb3JpbmcgdGhlIHBhZ2UgY29udGVudCwgbGF5b3V0IGFuZCBidXNpbmVzcyBwcm9jZXNzZXMgdG8gdGhlCnByZWNpc2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkZXZpY2UuIFN1Y2ggY3VzdG9taXNhdGlvbnMgaW1wcm92ZSBwcm9maXQgYnkKbWFraW5nIGl0IGVhc2llciBmb3IgY3VzdG9tZXJzIHRvIGdldCB0byB0aGUgaW5mb3JtYXRpb24gb3Igc2VydmljZXMgdGhleQpuZWVkLiBBdHRyaWJ1dGVzIG9mIHRoZSBkZXZpY2UgbWFraW5nIGEgd2ViIHJlcXVlc3QgY2FuIGJlIGFkZGVkIHRvIEhUVFAKaGVhZGVycyBhcyBjb25maWd1cmFibGUgcGFyYW1ldGVycy4KCkluIG9yZGVyIHRvIGVuYWJsZSA1MURlZ3JlZXMgZG93bmxvYWQgdGhlIDUxRGVncmVlcyBzb3VyY2UgY29kZSBmcm9tIHRoZQpvZmZpY2lhbCBnaXRodWIgcmVwb3NpdG9yeSA6CgogICAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS81MURlZ3JlZXMvRGV2aWNlLURldGVjdGlvbgoKdGhlbiBydW4gJ21ha2UnIHdpdGggVVNFXzUxREVHUkVFUyBhbmQgNTFERUdSRUVTX1NSQyBzZXQuIEJvdGggNTFERUdSRUVTX0lOQwphbmQgNTFERUdSRUVTX0xJQiBtYXkgYWRkaXRpb25hbGx5IGJlIHVzZWQgdG8gZm9yY2Ugc3BlY2lmaWMgZGlmZmVyZW50IHBhdGhzCmZvciAubyBhbmQgLmgsIGJ1dCB3aWxsIGRlZmF1bHQgdG8gNTFERUdSRUVTX1NSQy4gTWFrZSBzdXJlIHRvIHJlcGxhY2UKJzUxRF9SRVBPX1BBVEgnIHdpdGggdGhlIHBhdGggdG8gdGhlIDUxRGVncmVlcyByZXBvc2l0b3J5LgoKNTFEZWdyZWVzIHByb3ZpZGUgMiBkaWZmZXJlbnQgZGV0ZWN0aW9uIGFsZ29yaXRobXM6CgogICAgMS4gUGF0dGVybiAtIGJhbGFuY2VzIG1haW4gbWVtb3J5IHVzYWdlIGFuZCBDUFUuCiAgICAyLiBUcmllIC0gYSB2ZXJ5IGhpZ2ggcGVyZm9ybWFuY2UgZGV0ZWN0aW9uIHNvbHV0aW9uIHdoaWNoIHVzZXMgbW9yZSBtYWluCiAgICAgICBtZW1vcnkgdGhhbiBQYXR0ZXJuLgoKVG8gbWFrZSB3aXRoIDUxRGVncmVlcyBQYXR0ZXJuIGFsZ29yaXRobSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUuCgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2IFVTRV81MURFR1JFRVM9MSA1MURFR1JFRVNfU1JDPSc1MURfUkVQT19QQVRIJy9zcmMvcGF0dGVybgoKVG8gdXNlIHRoZSA1MURlZ3JlZXMgVHJpZSBhbGdvcml0aG0gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBsaW5lLgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNiBVU0VfNTFERUdSRUVTPTEgNTFERUdSRUVTX1NSQz0nNTFEX1JFUE9fUEFUSCcvc3JjL3RyaWUKCkEgZGF0YSBmaWxlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlcywgYnJvd3NlcnMsIG9wZXJhdGluZyBzeXN0ZW1zCmFuZCB0aGVpciBhc3NvY2lhdGVkIHNpZ25hdHVyZXMgaXMgdGhlbiBuZWVkZWQuIDUxRGVncmVlcyBwcm92aWRlIGEgZnJlZQpkYXRhYmFzZSB3aXRoIEdpdGh1YiByZXBvIGZvciB0aGlzIHB1cnBvc2UuIFRoZXNlIGZyZWUgZGF0YSBmaWxlcyBhcmUgbG9jYXRlZAppbiAnNTFEX1JFUE9fUEFUSCcvZGF0YSB3aXRoIHRoZSBleHRlbnNpb25zIC5kYXQgZm9yIFBhdHRlcm4gZGF0YSBhbmQgLnRyaWUgZm9yClRyaWUgZGF0YS4KClRoZSBjb25maWd1cmF0aW9uIGZpbGUgbmVlZHMgdG8gc2V0IHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKCiAgICA1MWRlZ3JlZXMtZGF0YS1maWxlICAgICAgICAgICBwYXRoIHRvIHRoZSBQYXR0ZXJuIG9yIFRyaWUgZGF0YSBmaWxlCiAgICA1MWRlZ3JlZXMtcHJvcGVydHktbmFtZS1saXN0ICBsaXN0IG9mIDUxRGVncmVlcyBwcm9wZXJ0aWVzIHRvIGRldGVjdAogICAgNTFkZWdyZWVzLXByb3BlcnR5LXNlcGFyYXRvciAgc2VwYXJhdG9yIHRvIHVzZSBiZXR3ZWVuIHZhbHVlcwogICAgNTFkZWdyZWVzLWNhY2hlLXNpemUgICAgICAgICAgTFJVLWJhc2VkIGNhY2hlIHNpemUgKGRpc2FibGVkIGJ5IGRlZmF1bHQpCgpUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgdGhlIHNldHRpbmdzIGZvciBQYXR0ZXJuLgoKICAgIDUxZGVncmVlcy1kYXRhLWZpbGUgJzUxRF9SRVBPX1BBVEgnL2RhdGEvNTFEZWdyZWVzLUxpdGVWMy4yLmRhdAogICAgNTFkZWdyZWVzLXByb3BlcnR5LW5hbWUtbGlzdCBJc1RhYmxldCBEZXZpY2VUeXBlIElzTW9iaWxlCiAgICA1MWRlZ3JlZXMtcHJvcGVydHktc2VwYXJhdG9yICwKICAgIDUxZGVncmVlcy1jYWNoZS1zaXplIDEwMDAwCgpIQVByb3h5IG5lZWRzIGEgd2F5IHRvIHBhc3MgZGV2aWNlIGluZm9ybWF0aW9uIHRvIHRoZSBiYWNrZW5kIHNlcnZlcnMuIFRoaXMgaXMKZG9uZSBieSB1c2luZyB0aGUgNTFkIGNvbnZlcnRlciBvciBmZXRjaCBtZXRob2QsIHdoaWNoIGludGVyY2VwdHMgdGhlIEhUVFAKaGVhZGVycyBhbmQgY3JlYXRlcyBzb21lIG5ldyBoZWFkZXJzLiBUaGlzIGlzIGNvbnRyb2xsZWQgaW4gdGhlIGZyb250ZW5kCmh0dHAtaW4gc2VjdGlvbi4KClRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB3aGljaCBhZGRzIHR3byBuZXcgSFRUUCBoZWFkZXJzIHByZWZpeGVkIFgtNTFELQoKICAgIGZyb250ZW5kIGh0dHAtaW4KICAgICAgICBiaW5kICo6ODA4MQogICAgICAgIGRlZmF1bHRfYmFja2VuZCBzZXJ2ZXJzCiAgICAgICAgaHR0cC1yZXF1ZXN0IHNldC1oZWFkZXIgWC01MUQtRGV2aWNlVHlwZU1vYmlsZVRhYmxldCAlWzUxZC5hbGwoRGV2aWNlVHlwZSxJc01vYmlsZSxJc1RhYmxldCldCiAgICAgICAgaHR0cC1yZXF1ZXN0IHNldC1oZWFkZXIgWC01MUQtVGFibGV0ICVbNTFkLmFsbChJc1RhYmxldCldCgpIZXJlLCB0d28gaGVhZGVycyBhcmUgY3JlYXRlZCB3aXRoIDUxRGVncmVlcyBkYXRhLCBYLTUxRC1EZXZpY2VUeXBlTW9iaWxlVGFibGV0CmFuZCBYLTUxRC1UYWJsZXQuIEFueSBudW1iZXIgb2YgaGVhZGVycyBjYW4gYmUgY3JlYXRlZCB0aGlzIHdheSBhbmQgY2FuIGJlCm5hbWVkIGFueXRoaW5nLiA1MWQuYWxsKCApIGludm9rZXMgdGhlIDUxZGVncmVlcyBmZXRjaC4gSXQgY2FuIGJlIHBhc3NlZCB1cCB0bwpmaXZlIHByb3BlcnR5IG5hbWVzIG9mIHZhbHVlcyB0byByZXR1cm4uIFZhbHVlcyB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBzYW1lCm9yZGVyLCBzZXBlcmF0ZWQgYnkgdGhlIDUxLWRlZ3JlZXMtcHJvcGVydHktc2VwYXJhdG9yIGNvbmZpZ3VyZWQgZWFybGllci4gSWYgYQpwcm9wZXJ0eSBuYW1lIGNhbid0IGJlIGZvdW5kIHRoZSB2YWx1ZSAnTm9EYXRhJyBpcyByZXR1cm5lZCBpbnN0ZWFkLgoKSW4gYWRkaXRpb24gdG8gdGhlIGRldmljZSBwcm9wZXJ0aWVzIHRocmVlIGFkZGl0aW9uYWwgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZQp2YWxpZGl0eSBvZiB0aGUgcmVzdWx0IGNhbiBiZSByZXR1cm5lZCB3aGVuIHVzZWQgd2l0aCB0aGUgUGF0dGVybiBtZXRob2QuIFRoZQpmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgTWV0aG9kLCBEaWZmZXJlbmNlIGFuZCBSYW5rIGNvdWxkIGJlIGluY2x1ZGVkIGFzIG9uZQpuZXcgSFRUUCBoZWFkZXIgWC01MUQtU3RhdHMuCgogICAgICAgIGh0dHAtcmVxdWVzdCBzZXQtaGVhZGVyIFgtNTFELVN0YXRzICVbNTFkLmFsbChNZXRob2QsRGlmZmVyZW5jZSxSYW5rKV0KClRoZXNlIHZhbHVlcyBpbmRpY2F0ZSBob3cgY29uZmlkZW50IDUxRGVncmVlcyBpcyBpbiB0aGUgcmVzdWx0IHRoYXQgdGhhdCB3YXMKcmV0dXJuZWQuIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIG9uIHRoZSA1MURlZ3JlZXMgd2ViIHNpdGUgYXQ6CgogICAgaHR0cHM6Ly81MWRlZ3JlZXMuY29tL3N1cHBvcnQvZG9jdW1lbnRhdGlvbi9wYXR0ZXJuCgpUaGUgYWJvdmUgNTFkLmFsbCBmZXRjaCBtZXRob2QgdXNlcyBhbGwgYXZhaWxhYmxlIEhUVFAgaGVhZGVycyBmb3IgZGV0ZWN0aW9uLiBBCm1vZGVzdCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBjYW4gYmUgb2J0YWluZWQgYnkgb25seSBwYXNzaW5nIG9uZSBIVFRQIGhlYWRlcgp0byB0aGUgZGV0ZWN0aW9uIG1ldGhvZCB3aXRoIHRoZSA1MWQuc2luZ2xlIGNvbnZlcnRlci4gVGhlIGZvbGxvd2luZyBleGFtcGxlCnVzZXMgdGhlIFVzZXItQWdlbnQgSFRUUCBoZWFkZXIgb25seSBmb3IgZGV0ZWN0aW9uLgoKICAgICAgICBodHRwLXJlcXVlc3Qgc2V0LWhlYWRlciBYLTUxRC1EZXZpY2VUeXBlTW9iaWxlVGFibGV0ICVbcmVxLmZoZHIoVXNlci1BZ2VudCksNTFkLnNpbmdsZShEZXZpY2VUeXBlLElzTW9iaWxlLElzVGFibGV0KV0KCkFueSBIVFRQIGhlYWRlciBjb3VsZCBiZSB1c2VkIGlucGxhY2Ugb2YgVXNlci1BZ2VudCBieSBjaGFuZ2luZyB0aGUgcGFyYW1ldGVyCnByb3ZpZGVkIHRvIHJlcS5maGRyLgoKV2hlbiBjb21waWxlZCB0byB1c2UgdGhlIFRyaWUgZGV0ZWN0aW9uIG1ldGhvZCB0aGUgdHJpZSBmb3JtYXQgZGF0YSBmaWxlIG5lZWRzCnRvIGJlIHByb3ZpZGVkLiBDaGFuZ2luZyB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBkYXRhIGZpbGUgZnJvbSBkYXQgdG8gdHJpZSB3aWxsCnVzZSB0aGUgY29ycmVjdCBkYXRhLgoKICAgICAgICA1MWRlZ3JlZXMtZGF0YS1maWxlICc1MURfUkVQT19QQVRIJy9kYXRhLzUxRGVncmVlcy1MaXRlVjMuMi50cmllCgpXaGVuIHVzZWQgd2l0aCBUcmllIHRoZSBNZXRob2QsIERpZmZlcmVuY2UgYW5kIFJhbmsgcHJvcGVydGllcyBhcmUgbm90CmF2YWlsYWJsZS4KClRoZSBmcmVlIExpdGUgZGF0YSBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHNjcmVlbiBzaXplIGluIHBpeGVscyBhbmQKd2hldGhlciB0aGUgZGV2aWNlIGlzIGEgbW9iaWxlLiBBIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBpcyBsb2NhdGVkCm9uIHRoZSA1MURlZ3JlZXMgd2ViIHNpdGUgYXQ6CgogICAgaHR0cHM6Ly81MWRlZ3JlZXMuY29tL3Jlc291cmNlcy9wcm9wZXJ0eS1kaWN0aW9uYXJ5CgpTb21lIHByb3BlcnRpZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIHRoZSBwYWlkIGZvciBQcmVtaXVtIGFuZCBFbnRlcnByaXNlCnZlcnNpb25zIG9mIDUxRGVncmVlcy4gVGhlc2UgZGF0YSBzZXRzIG5vdCBvbmx5IGNvbnRhaW4gbW9yZSBwcm9wZXJ0aWVzIGJ1dAphcmUgdXBkYXRlZCB3ZWVrbHkgYW5kIGRhaWx5IGFuZCBjb250YWluIHNpZ25hdHVyZXMgZm9yIDEwMCwwMDBzIG9mIGRpZmZlcmVudApkZXZpY2UgY29tYmluYXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIGRhdGEgb3B0aW9ucyBjb21wYXJpc29uIHdlYgpwYWdlOgoKICAgIGh0dHBzOi8vNTFkZWdyZWVzLmNvbS9jb21wYXJlLWRhdGEtb3B0aW9ucwoKCjIpIEhvdyB0byBpbnN0YWxsIGl0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUbyBpbnN0YWxsIGhhcHJveHksIHlvdSBjYW4gZWl0aGVyIGNvcHkgdGhlIHNpbmdsZSByZXN1bHRpbmcgYmluYXJ5IHRvIHRoZQpwbGFjZSB5b3Ugd2FudCwgb3IgcnVuIDoKCiAgICAkIHN1ZG8gbWFrZSBpbnN0YWxsCgpJZiB5b3UncmUgcGFja2FnaW5nIGl0IGZvciBhbm90aGVyIHN5c3RlbSwgeW91IGNhbiBzcGVjaWZ5IGl0cyByb290IGRpcmVjdG9yeQppbiB0aGUgdXN1YWwgREVTVERJUiB2YXJpYWJsZS4KCgozKSBIb3cgdG8gc2V0IGl0IHVwCi0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXJlIGlzIHNvbWUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgZG9jLyBkaXJlY3RvcnkgOgoKICAgIC0gaW50cm8udHh0IDogdGhpcyBpcyBhbiBpbnRyb2R1Y3Rpb24gdG8gaGFwcm94eSwgaXQgZXhwbGFpbnMgd2hhdCBpdCBpcwogICAgICB3aGF0IGl0IGlzIG5vdC4gVXNlZnVsIGZvciBiZWdpbm5lcnMgb3IgdG8gcmUtZGlzY292ZXIgaXQgd2hlbiBwbGFubmluZwogICAgICBmb3IgYW4gdXBncmFkZS4KCiAgICAtIGFyY2hpdGVjdHVyZS50eHQgOiB0aGlzIGlzIHRoZSBhcmNoaXRlY3R1cmUgbWFudWFsLiBJdCBpcyBxdWl0ZSBvbGQgYW5kCiAgICAgIGRvZXMgbm90IHRlbGwgYWJvdXQgdGhlIG5pY2UgbmV3IGZlYXR1cmVzLCBidXQgaXQncyBzdGlsbCBhIGdvb2Qgc3RhcnRpbmcKICAgICAgcG9pbnQgd2hlbiB5b3Uga25vdyB3aGF0IHlvdSB3YW50IGJ1dCBkb24ndCBrbm93IGhvdyB0byBkbyBpdC4KCiAgICAtIGNvbmZpZ3VyYXRpb24udHh0IDogdGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBtYW51YWwuIEl0IHJlY2FsbHMgYSBmZXcKICAgICAgZXNzZW50aWFsIEhUVFAgYmFzaWMgY29uY2VwdHMsIGFuZCBkZXRhaWxzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmaWxlCiAgICAgIHN5bnRheCAoa2V5d29yZHMsIHVuaXRzKS4gSXQgYWxzbyBkZXNjcmliZXMgdGhlIGxvZyBhbmQgc3RhdHMgZm9ybWF0LiBJdAogICAgICBpcyBub3JtYWxseSBhbHdheXMgdXAgdG8gZGF0ZS4gSWYgeW91IHNlZSB0aGF0IHNvbWV0aGluZyBpcyBtaXNzaW5nIGZyb20KICAgICAgaXQsIHBsZWFzZSByZXBvcnQgaXQgYXMgdGhpcyBpcyBhIGJ1Zy4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGZpbGUgaXMKICAgICAgaHVnZSBhbmQgdGhhdCBpdCdzIGdlbmVyYWxseSBtb3JlIGNvbnZlbmllbnQgdG8gcmV2aWV3IEN5cmlsIEJvbnTpJ3MKICAgICAgSFRNTCB0cmFuc2xhdGlvbiBvbmxpbmUgaGVyZSA6CgogICAgICAgICAgIGh0dHA6Ly9jYm9udGUuZ2l0aHViLmlvL2hhcHJveHktZGNvbnYvY29uZmlndXJhdGlvbi0xLjYuaHRtbAoKICAgIC0gbWFuYWdlbWVudC50eHQgOiBpdCBleHBsYWlucyBob3cgdG8gc3RhcnQgaGFwcm94eSwgaG93IHRvIG1hbmFnZSBpdCBhdAogICAgICBydW50aW1lLCBob3cgdG8gbWFuYWdlIGl0IG9uIG11bHRpcGxlIG5vZGVzLCBob3cgdG8gcHJvY2VlZCB3aXRoIHNlYW1sZXNzCiAgICAgIHVwZ3JhZGVzLgoKICAgIC0gZ3BsLnR4dCAvIGxncGwudHh0IDogdGhlIGNvcHkgb2YgdGhlIGxpY2Vuc2VzIGNvdmVyaW5nIHRoZSBzb2Z0d2FyZS4gU2VlCiAgICAgIHRoZSAnTElDRU5TRScgZmlsZSBhdCB0aGUgdG9wIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgIC0gdGhlIHJlc3QgaXMgbWFpbmx5IGZvciBkZXZlbG9wZXJzLgoKVGhlcmUgYXJlIGFsc28gYSBudW1iZXIgb2YgbmljZSBjb25maWd1cmF0aW9uIGV4YW1wbGVzIGluIHRoZSAiZXhhbXBsZXMiCmRpcmVjdG9yeSBhcyB3ZWxsIGFzIG9uIHNldmVyYWwgc2l0ZXMgYW5kIGFydGljbGVzIG9uIHRoZSBuZXQgd2hpY2ggYXJlIGxpbmtlZAp0byBmcm9tIHRoZSBoYXByb3h5IHdlYiBzaXRlLgoKCjQpIEhvdyB0byByZXBvcnQgYSBidWcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSXQgaXMgcG9zc2libGUgdGhhdCBmcm9tIHRpbWUgdG8gdGltZSB5b3UnbGwgZmluZCBhIGJ1Zy4gQSBidWcgaXMgYSBjYXNlIHdoZXJlCndoYXQgeW91IHNlZSBpcyBub3Qgd2hhdCBpcyBkb2N1bWVudGVkLiBPdGhlcndpc2UgaXQgY2FuIGJlIGEgbWlzZGVzaWduLiBJZiB5b3UKZmluZCB0aGF0IHNvbWV0aGluZyBpcyBzdHVwaWRseSBkZXNpZ24sIHBsZWFzZSBkaXNjdXNzIGl0IG9uIHRoZSBsaXN0IChzZWUgdGhlCiJob3cgdG8gY29udHJpYnV0ZSIgc2VjdGlvbiBiZWxvdykuIElmIHlvdSBmZWVsIGxpa2UgeW91J3JlIHByb2NlZWRpbmcgcmlnaHQKYW5kIGhhcHJveHkgZG9lc24ndCBvYmV5LCB0aGVuIGZpcnN0IGFzayB5b3Vyc2VsZiBpZiBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vYm9keQpiZWZvcmUgeW91IGhhcyBldmVuIGVuY291bnRlcmVkIHRoaXMgaXNzdWUuIElmIGl0J3MgdW5saWtlbHksIHRoZSB5b3UgcHJvYmFibHkKaGF2ZSBhbiBpc3N1ZSBpbiB5b3VyIHNldHVwLiBKdXN0IGluIGNhc2Ugb2YgZG91YnQsIHBsZWFzZSBjb25zdWx0IHRoZSBtYWlsaW5nCmxpc3QgYXJjaGl2ZXMgOgoKICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL21hcmMuaW5mby8/bD1oYXByb3h5CgpPdGhlcndpc2UsIHBsZWFzZSB0cnkgdG8gZ2F0aGVyIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBpbmZvcm1hdGlvbiB0byBoZWxwCnJlcHJvZHVjZSB0aGUgaXNzdWUgYW5kIHNlbmQgdGhhdCB0byB0aGUgbWFpbGluZyBsaXN0IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhcHJveHlAZm9ybWlsdXgub3JnCgpQbGVhc2UgaW5jbHVkZSB5b3VyIGNvbmZpZ3VyYXRpb24gYW5kIGxvZ3MuIFlvdSBjYW4gbWFzayB5b3VyIElQIGFkZHJlc3NlcyBhbmQKcGFzc3dvcmRzLCB3ZSBkb24ndCBuZWVkIHRoZW0uIEJ1dCBpdCdzIGVzc2VudGlhbCB0aGF0IHlvdSBwb3N0IHlvdXIgY29uZmlnIGlmCnlvdSB3YW50IHBlb3BsZSB0byBndWVzcyB3aGF0IGlzIGhhcHBlbmluZy4KCkFsc28sIGtlZXAgaW4gbWluZCB0aGF0IGhhcHJveHkgaXMgZGVzaWduZWQgdG8gTkVWRVIgQ1JBU0guIElmIHlvdSBzZWUgaXQgZGllCndpdGhvdXQgYW55IHJlYXNvbiwgdGhlbiBpdCBkZWZpbml0ZWx5IGlzIGEgY3JpdGljYWwgYnVnIHRoYXQgbXVzdCBiZSByZXBvcnRlZAphbmQgdXJnZW50bHkgZml4ZWQuIEl0IGhhcyBoYXBwZW5lZCBhIGNvdXBsZSBvZiB0aW1lcyBpbiB0aGUgcGFzdCwgZXNzZW50aWFsbHkKb24gZGV2ZWxvcG1lbnQgdmVyc2lvbnMgcnVubmluZyBvbiBuZXcgYXJjaGl0ZWN0dXJlcy4gSWYgeW91IHRoaW5rIHlvdXIgc2V0dXAKaXMgZmFpcmx5IGNvbW1vbiwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZSBpcyB0b3RhbGx5IHVucmVsYXRlZC4KQW55d2F5LCBpZiB0aGF0IGhhcHBlbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IG1lIGRpcmVjdGx5LCBhcyBJIHdpbGwgZ2l2ZSB5b3UKaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBjb2xsZWN0IGEgdXNhYmxlIGNvcmUgZmlsZSwgYW5kIHdpbGwgcHJvYmFibHkgYXNrIGZvcgpvdGhlciBjYXB0dXJlcyB0aGF0IHlvdSdsbCBub3Qgd2FudCB0byBzaGFyZSB3aXRoIHRoZSBsaXN0LgoKCjUpIEhvdyB0byBjb250cmlidXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpQbGVhc2UgY2FyZWZ1bGx5IHJlYWQgdGhlIENPTlRSSUJVVElORyBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGUgc291cmNlcy4gSXQgaXMKbWFuZGF0b3J5LgoKLS0gZW5kCg==