ICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVByb3h5IGhvdy10bwogICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiAxLjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxseSB0YXJyZWF1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDE1LzEwLzEzCgoKMSkgSG93IHRvIGJ1aWxkIGl0Ci0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIGRldmVsb3BtZW50IHZlcnNpb24sIHNvIGl0IGlzIGV4cGVjdGVkIHRvIGJyZWFrIGZyb20gdGltZSB0byB0aW1lLAp0byBhZGQgYW5kIHJlbW92ZSBmZWF0dXJlcyB3aXRob3V0IHByaW9yIG5vdGlmaWNhdGlvbiBhbmQgaXQgc2hvdWxkIG5vdCBiZSB1c2VkCmluIHByb2R1Y3Rpb24uIElmIHlvdSBhcmUgbm90IHVzZWQgdG8gYnVpbGQgZnJvbSBzb3VyY2VzIG9yIGlmIHlvdSBhcmUgbm90IHVzZWQKdG8gZm9sbG93IHVwZGF0ZXMgdGhlbiBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGluc3RlYWQgeW91IHVzZSB0aGUgcGFja2FnZXMgcHJvdmlkZWQKYnkgeW91ciBzb2Z0d2FyZSB2ZW5kb3Igb3IgTGludXggZGlzdHJpYnV0aW9uLiBNb3N0IG9mIHRoZW0gYXJlIHRha2luZyB0aGlzIHRhc2sKc2VyaW91c2x5IGFuZCBhcmUgZG9pbmcgYSBnb29kIGpvYiBhdCBiYWNrcG9ydGluZyBpbXBvcnRhbnQgZml4ZXMuIElmIGZvciBhbnkKcmVhc29uIHlvdSdkIHByZWZlciBhIGRpZmZlcmVudCB2ZXJzaW9uIHRoYW4gdGhlIG9uZSBwYWNrYWdlZCBmb3IgeW91ciBzeXN0ZW0sCnlvdSB3YW50IHRvIGJlIGNlcnRhaW4gdG8gaGF2ZSBhbGwgdGhlIGZpeGVzIG9yIHRvIGdldCBzb21lIGNvbW1lcmNpYWwgc3VwcG9ydCwKb3RoZXIgY2hvaWNlcyBhcmUgYXZhaWxhYmxlIGF0IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaGFwcm94eS5jb20vCgpUbyBidWlsZCBoYXByb3h5LCB5b3Ugd2lsbCBuZWVkIDoKICAtIEdOVSBtYWtlLiBOZWl0aGVyIFNvbGFyaXMgbm9yIE9wZW5CU0QncyBtYWtlIHdvcmsgd2l0aCB0aGUgR05VIE1ha2VmaWxlLgogICAgSWYgeW91IGdldCBtYW55IHN5bnRheCBlcnJvcnMgd2hlbiBydW5uaW5nICJtYWtlIiwgeW91IG1heSB3YW50IHRvIHJldHJ5CiAgICB3aXRoICJnbWFrZSIgd2hpY2ggaXMgdGhlIG5hbWUgY29tbW9ubHkgdXNlZCBmb3IgR05VIG1ha2Ugb24gQlNEIHN5c3RlbXMuCiAgLSBHQ0MgYmV0d2VlbiAyLjk1IGFuZCA0LjguIE90aGVycyBtYXkgd29yaywgYnV0IG5vdCB0ZXN0ZWQuCiAgLSBHTlUgbGQKCkFsc28sIHlvdSBtaWdodCB3YW50IHRvIGJ1aWxkIHdpdGggbGlicGNyZSBzdXBwb3J0LCB3aGljaCB3aWxsIHByb3ZpZGUgYSB2ZXJ5CmVmZmljaWVudCByZWdleCBpbXBsZW1lbnRhdGlvbiBhbmQgd2lsbCBhbHNvIGZpeCBzb21lIGJhZG5lc3Mgb24gU29sYXJpcycgb25lLgoKVG8gYnVpbGQgaGFwcm94eSwgeW91IGhhdmUgdG8gY2hvb3NlIHlvdXIgdGFyZ2V0IE9TIGFtb25nc3QgdGhlIGZvbGxvd2luZyBvbmVzCmFuZCBhc3NpZ24gaXQgdG8gdGhlIFRBUkdFVCB2YXJpYWJsZSA6CgogIC0gbGludXgyMiAgICAgZm9yIExpbnV4IDIuMgogIC0gbGludXgyNCAgICAgZm9yIExpbnV4IDIuNCBhbmQgYWJvdmUgKGRlZmF1bHQpCiAgLSBsaW51eDI0ZSAgICBmb3IgTGludXggMi40IHdpdGggc3VwcG9ydCBmb3IgYSB3b3JraW5nIGVwb2xsICg+IDAuMjEpCiAgLSBsaW51eDI2ICAgICBmb3IgTGludXggMi42IGFuZCBhYm92ZQogIC0gbGludXgyNjI4ICAgZm9yIExpbnV4IDIuNi4yOCwgMy54LCBhbmQgYWJvdmUgKGVuYWJsZXMgc3BsaWNlIGFuZCB0cHJveHkpCiAgLSBzb2xhcmlzICAgICBmb3IgU29sYXJpcyA4IG9yIDEwIChvdGhlcnMgdW50ZXN0ZWQpCiAgLSBmcmVlYnNkICAgICBmb3IgRnJlZUJTRCA1IHRvIDEwIChvdGhlcnMgdW50ZXN0ZWQpCiAgLSBuZXRic2QgICAgICBmb3IgTmV0QlNECiAgLSBvc3ggICAgICAgICBmb3IgTWFjIE9TL1gKICAtIG9wZW5ic2QgICAgIGZvciBPcGVuQlNEIDMuMSBhbmQgYWJvdmUKICAtIGFpeDUxICAgICAgIGZvciBBSVggNS4xCiAgLSBhaXg1MiAgICAgICBmb3IgQUlYIDUuMgogIC0gY3lnd2luICAgICAgZm9yIEN5Z3dpbgogIC0gaGFpa3UgICAgICAgZm9yIEhhaWt1CiAgLSBnZW5lcmljICAgICBmb3IgYW55IG90aGVyIE9TIG9yIHZlcnNpb24uCiAgLSBjdXN0b20gICAgICB0byBtYW51YWxseSBhZGp1c3QgZXZlcnkgc2V0dGluZwoKWW91IG1heSBhbHNvIGNob29zZSB5b3VyIENQVSB0byBiZW5lZml0IGZyb20gc29tZSBvcHRpbWl6YXRpb25zLiBUaGlzIGlzCnBhcnRpY3VsYXJseSBpbXBvcnRhbnQgb24gVWx0cmFTcGFyYyBtYWNoaW5lcy4gRm9yIHRoaXMsIHlvdSBjYW4gYXNzaWduCm9uZSBvZiB0aGUgZm9sbG93aW5nIGNob2ljZXMgdG8gdGhlIENQVSB2YXJpYWJsZSA6CgogIC0gaTY4NiBmb3IgaW50ZWwgUGVudGl1bVBybywgUGVudGl1bSAyIGFuZCBhYm92ZSwgQU1EIEF0aGxvbgogIC0gaTU4NiBmb3IgaW50ZWwgUGVudGl1bSwgQU1EIEs2LCBWSUEgQzMuCiAgLSB1bHRyYXNwYXJjIDogU3VuIFVsdHJhU3BhcmMgSS9JSS9JSUkvSVYgcHJvY2Vzc29yCiAgLSBuYXRpdmUgOiB1c2UgdGhlIGJ1aWxkIG1hY2hpbmUncyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucy4gVXNlIHdpdGgKICAgIGV4dHJlbWUgY2FyZSwgYW5kIG5ldmVyIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoa25vd24gdG8gYnJlYWspLgogIC0gZ2VuZXJpYyA6IGFueSBvdGhlciBwcm9jZXNzb3Igb3Igbm8gQ1BVLXNwZWNpZmljIG9wdGltaXphdGlvbi4gKGRlZmF1bHQpCgpBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGp1c3Qgc2V0IHRoZSBDUFVfQ0ZMQUdTIHZhbHVlIHRvIHRoZSBvcHRpbWFsIEdDQyBvcHRpb25zCmZvciB5b3VyIHBsYXRmb3JtLgoKWW91IG1heSB3YW50IHRvIGJ1aWxkIHNwZWNpZmljIHRhcmdldCBiaW5hcmllcyB3aGljaCBkbyBub3QgbWF0Y2ggeW91ciBuYXRpdmUKY29tcGlsZXIncyB0YXJnZXQuIFRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUgb24gNjQtYml0IHN5c3RlbXMgd2hlbiB5b3Ugd2FudAp0byBidWlsZCBhIDMyLWJpdCBiaW5hcnkuIFVzZSB0aGUgQVJDSCB2YXJpYWJsZSBmb3IgdGhpcyBwdXJwb3NlLiBSaWdodCBub3cKaXQgb25seSBrbm93cyBhYm91dCBhIGZldyB4ODYgdmFyaWFudHMgKGkzODYsaTQ4NixpNTg2LGk2ODYseDg2XzY0KSwgdHdvCmdlbmVyaWMgb25lcyAoMzIsNjQpIGFuZCBzZXRzIC1tMzIvLW02NCBhcyB3ZWxsIGFzIC1tYXJjaD08YXJjaD4gYWNjb3JkaW5nbHkuCgpJZiB5b3VyIHN5c3RlbSBzdXBwb3J0cyBQQ1JFIChQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyksIHRoZW4geW91CnJlYWxseSBzaG91bGQgYnVpbGQgd2l0aCBsaWJwY3JlIHdoaWNoIGlzIGJldHdlZW4gMiBhbmQgMTAgdGltZXMgZmFzdGVyIHRoYW4Kb3RoZXIgbGliYyBpbXBsZW1lbnRhdGlvbnMuIFJlZ2V4IGFyZSB1c2VkIGZvciBoZWFkZXIgcHJvY2Vzc2luZyAoZGVsZXRpb24sCnJld3JpdGluZywgYWxsb3csIGRlbnkpLiBUaGUgb25seSBpbmNvbnZlbmllbnQgb2YgbGlicGNyZSBpcyB0aGF0IGl0IGlzIG5vdAp5ZXQgd2lkZWx5IHNwcmVhZCwgc28gaWYgeW91IGJ1aWxkIGZvciBvdGhlciBzeXN0ZW1zLCB5b3UgbWlnaHQgZ2V0IGludG8KdHJvdWJsZSBpZiB0aGV5IGRvbid0IGhhdmUgdGhlIGR5bmFtaWMgbGlicmFyeS4gSW4gdGhpcyBzaXR1YXRpb24sIHlvdSBzaG91bGQKc3RhdGljYWxseSBsaW5rIGxpYnBjcmUgaW50byBoYXByb3h5IHNvIHRoYXQgaXQgd2lsbCBub3QgYmUgbmVjZXNzYXJ5IHRvCmluc3RhbGwgaXQgb24gdGFyZ2V0IHN5c3RlbXMuIEF2YWlsYWJsZSBidWlsZCBvcHRpb25zIGZvciBQQ1JFIGFyZSA6CgogIC0gVVNFX1BDUkU9MSB0byB1c2UgbGlicGNyZSwgaW4gd2hhdGV2ZXIgZm9ybSBpcyBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0KICAgIChzaGFyZWQgb3Igc3RhdGljKQoKICAtIFVTRV9TVEFUSUNfUENSRT0xIHRvIHVzZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGxpYnBjcmUgZXZlbiBpZiB0aGUgZHluYW1pYwogICAgb25lIGlzIGF2YWlsYWJsZS4gVGhpcyB3aWxsIGVuaGFuY2UgcG9ydGFiaWxpdHkuCgogIC0gd2l0aCBubyBvcHRpb24sIHVzZSB5b3VyIE9TIGxpYmMncyBzdGFuZGFyZCByZWdleCBpbXBsZW1lbnRhdGlvbiAoZGVmYXVsdCkuCiAgICBXYXJuaW5nISBncm91cCByZWZlcmVuY2VzIG9uIFNvbGFyaXMgc2VlbSBicm9rZW4uIFVzZSBzdGF0aWMtcGNyZSB3aGVuZXZlcgogICAgcG9zc2libGUuCgpJZiB5b3VyIHN5c3RlbSBkb2Vzbid0IHByb3ZpZGUgUENSRSwgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIGRvd25sb2FkIGl0IGZyb20KaHR0cDovL3d3dy5wY3JlLm9yZy8gYW5kIGJ1aWxkIGl0IHlvdXJzZWxmLCBpdCdzIGZhc3QgYW5kIGVhc3kuCgpSZWNlbnQgc3lzdGVtcyBjYW4gcmVzb2x2ZSBJUHY2IGhvc3QgbmFtZXMgdXNpbmcgZ2V0YWRkcmluZm8oKS4gVGhpcyBwcmltaXRpdmUKaXMgbm90IHByZXNlbnQgaW4gYWxsIGxpYmNzIGFuZCBkb2VzIG5vdCB3b3JrIGluIGFsbCBvZiB0aGVtIGVpdGhlci4gU3VwcG9ydCBpbgpnbGliYyB3YXMgYnJva2VuIGJlZm9yZSAyLjMuIFNvbWUgZW1iZWRkZWQgbGlicyBtYXkgbm90IHByb3Blcmx5IHdvcmsgZWl0aGVyLAp0aHVzLCBzdXBwb3J0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIG1lYW5pbmcgdGhhdCBzb21lIGhvc3QgbmFtZXMgd2hpY2ggb25seQpyZXNvbHZlIGFzIElQdjYgYWRkcmVzc2VzIHdpbGwgbm90IHJlc29sdmUgYW5kIGNvbmZpZ3MgbWlnaHQgZW1pdCBhbiBlcnJvcgpkdXJpbmcgcGFyc2luZy4gSWYgeW91IGtub3cgdGhhdCB5b3VyIE9TIGxpYmMgaGFzIHJlbGlhYmxlIHN1cHBvcnQgZm9yCmdldGFkZHJpbmZvKCksIHlvdSBjYW4gYWRkIFVTRV9HRVRBRERSSU5GTz0xIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZSB0byBlbmFibGUKaXQuIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIG9wdGlvbiBmb3IgbW9zdCBMaW51eCBkaXN0cm8gcGFja2FnZXJzIHNpbmNlIGl0J3MKd29ya2luZyBmaW5lIG9uIGFsbCByZWNlbnQgbWFpbnN0cmVhbSBkaXN0cm9zLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgb24KU29sYXJpcyA4IGFuZCBhYm92ZSwgYXMgaXQncyBrbm93biB0byB3b3JrLgoKSXQgaXMgcG9zc2libGUgdG8gYWRkIG5hdGl2ZSBzdXBwb3J0IGZvciBTU0wgdXNpbmcgdGhlIEdOVSBtYWtlZmlsZSwgYnkgcGFzc2luZwoiVVNFX09QRU5TU0w9MSIgb24gdGhlIG1ha2UgY29tbWFuZCBsaW5lLiBUaGUgbGlic3NsIGFuZCBsaWJjcnlwdG8gd2lsbAphdXRvbWF0aWNhbGx5IGJlIGxpbmtlZCB3aXRoIGhhcHJveHkuIFNvbWUgc3lzdGVtcyBhbHNvIHJlcXVpcmUgbGlieiwgc28gaWYgdGhlCmJ1aWxkIGZhaWxzIGR1ZSB0byBtaXNzaW5nIHN5bWJvbHMgc3VjaCBhcyBkZWZsYXRlSW5pdCgpLCB0aGVuIHRyeSBhZ2FpbiB3aXRoCiJBRERMSUI9LWx6Ii4KCllvdXIgYXJlIHN0cm9uZ2x5IGVuY291cmFnZWQgdG8gYWx3YXlzIHVzZSBhbiB1cC10by1kYXRlIHZlcnNpb24gb2YgT3BlblNTTCwgYXMKZm91bmQgb24gaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvIGFzIHZ1bG5lcmFiaWxpdGllcyBhcmUgb2NjYXNpb25hbGx5IGZvdW5kIGFuZAp5b3UgZG9uJ3Qgd2FudCB0aGVtIG9uIHlvdXIgc3lzdGVtcy4gSEFQcm94eSBpcyBrbm93biB0byBidWlsZCBjb3JyZWN0bHkgb24gYWxsCmN1cnJlbnRseSBzdXBwb3J0ZWQgYnJhbmNoZXMgKDAuOS44LCAxLjAuMCwgMS4wLjEgYW5kIDEuMC4yIGF0IHRoZSB0aW1lIG9mCndyaXRpbmcpLiBCcmFuY2ggMS4wLjIgaXMgcmVjb21tZW5kZWQgZm9yIHRoZSByaWNoZXN0IGZlYXR1cmVzLgoKVG8gbGluayBPcGVuU1NMIHN0YXRpY2FsbHkgYWdhaW5zdCBoYXByb3h5LCBidWlsZCBPcGVuU1NMIHdpdGggdGhlIG5vLXNoYXJlZAprZXl3b3JkIGFuZCBpbnN0YWxsIGl0IHRvIGEgbG9jYWwgZGlyZWN0b3J5LCBzbyB5b3VyIHN5c3RlbSBpcyBub3QgYWZmZWN0ZWQgOgoKICAgICQgZXhwb3J0IFNUQVRJQ0xJQlNTTD0vdG1wL3N0YXRpY2xpYnNzbAogICAgJCAuL2NvbmZpZyAtLXByZWZpeD0kU1RBVElDTElCU1NMIG5vLXNoYXJlZAogICAgJCBtYWtlICYmIG1ha2UgaW5zdGFsbF9zdwoKV2hlbiBidWlsZGluZyBoYXByb3h5LCBwYXNzIHRoYXQgcGF0aCB2aWEgU1NMX0lOQyBhbmQgU1NMX0xJQiB0byBtYWtlIGFuZAppbmNsdWRlIGFkZGl0aW9uYWwgbGlicyB3aXRoIEFERExJQiBpZiBuZWVkZWQgKGluIHRoaXMgY2FzZSBmb3IgZXhhbXBsZSBsaWJkbCk6CgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2IFVTRV9PUEVOU1NMPTEgU1NMX0lOQz0kU1RBVElDTElCU1NML2luY2x1ZGUgU1NMX0xJQj0kU1RBVElDTElCU1NML2xpYiBBRERMSUI9LWxkbAoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBpbmNsdWRlIG5hdGl2ZSBzdXBwb3J0IGZvciB6bGliIHRvIGJlbmVmaXQgZnJvbSBIVFRQCmNvbXByZXNzaW9uLiBGb3IgdGhpcywgcGFzcyAiVVNFX1pMSUI9MSIgb24gdGhlICJtYWtlIiBjb21tYW5kIGxpbmUgYW5kIGVuc3VyZQp0aGF0IHpsaWIgaXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtLiBBbHRlcm5hdGl2ZWx5IGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBsaWJzbHoKZm9yIGEgZmFzdGVyLCBtZW1vcnkgbGVzcywgYnV0IHNsaWdodGx5IGxlc3MgZWZmaWNpZW50IGNvbXByZXNzaW9uLCBieSBwYXNzaW5nCiJVU0VfU0xaPTEiLgoKWmxpYiBpcyBjb21tb25seSBmb3VuZCBvbiBtb3N0IHN5c3RlbXMsIG90aGVyd2lzZSB1cGRhdGVzIGNhbiBiZSByZXRyaWV2ZWQgZnJvbQpodHRwOi8vd3d3LnpsaWIubmV0Ly4gSXQgaXMgZWFzeSBhbmQgZmFzdCB0byBidWlsZC4gTGlic2x6IGNhbiBiZSBkb3dubG9hZGVkCmZyb20gaHR0cDovLzF3dC5ldS9wcm9qZWN0cy9saWJzbHovIGFuZCBpcyBldmVuIGVhc2llciB0byBidWlsZC4KCkJ5IGRlZmF1bHQsIHRoZSBERUJVRyB2YXJpYWJsZSBpcyBzZXQgdG8gJy1nJyB0byBlbmFibGUgZGVidWcgc3ltYm9scy4gSXQgaXMKbm90IHdpc2UgdG8gZGlzYWJsZSBpdCBvbiB1bmNvbW1vbiBzeXN0ZW1zLCBiZWNhdXNlIGl0J3Mgb2Z0ZW4gdGhlIG9ubHkgd2F5IHRvCmdldCBhIGNvbXBsZXRlIGNvcmUgd2hlbiB5b3UgbmVlZCBvbmUuIE90aGVyd2lzZSwgeW91IGNhbiBzZXQgREVCVUcgdG8gJy1zJyB0bwpzdHJpcCB0aGUgYmluYXJ5LgoKRm9yIGV4YW1wbGUsIEkgdXNlIHRoaXMgdG8gYnVpbGQgZm9yIFNvbGFyaXMgOCA6CgogICAgJCBtYWtlIFRBUkdFVD1zb2xhcmlzIENQVT11bHRyYXNwYXJjIFVTRV9TVEFUSUNfUENSRT0xCgpBbmQgSSBidWlsZCBpdCB0aGlzIHdheSBvbiBPcGVuQlNEIG9yIEZyZWVCU0QgOgoKICAgICQgZ21ha2UgVEFSR0VUPWZyZWVic2QgVVNFX1BDUkU9MSBVU0VfT1BFTlNTTD0xIFVTRV9aTElCPTEKCkFuZCBvbiBhIGNsYXNzaWMgTGludXggd2l0aCBTU0wgYW5kIFpMSUIgc3VwcG9ydCAoZWc6IFJlZCBIYXQgNS54KSA6CgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2IFVTRV9QQ1JFPTEgVVNFX09QRU5TU0w9MSBVU0VfWkxJQj0xCgpBbmQgb24gYSByZWNlbnQgTGludXggPj0gMi42LjI4IHdpdGggU1NMIGFuZCBaTElCIHN1cHBvcnQgOgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNjI4IFVTRV9QQ1JFPTEgVVNFX09QRU5TU0w9MSBVU0VfWkxJQj0xCgpJbiBvcmRlciB0byBidWlsZCBhIDMyLWJpdCBiaW5hcnkgb24gYW4geDg2XzY0IExpbnV4IHN5c3RlbSB3aXRoIFNTTCBzdXBwb3J0CndpdGhvdXQgc3VwcG9ydCBmb3IgY29tcHJlc3Npb24gYnV0IHdoZW4gT3BlblNTTCByZXF1aXJlcyBaTElCIGFueXdheSA6CgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2IEFSQ0g9aTM4NiBVU0VfT1BFTlNTTD0xIEFERExJQj0tbHoKClRoZSBTU0wgc3RhY2sgc3VwcG9ydHMgc2Vzc2lvbiBjYWNoZSBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBhbGwgcnVubmluZwpwcm9jZXNzZXMuIFRoaXMgaW52b2x2ZXMgc29tZSBhdG9taWMgb3BlcmF0aW9ucyBhbmQgc3luY2hyb25pemF0aW9uIG9wZXJhdGlvbnMKd2hpY2ggY29tZSBpbiBtdWx0aXBsZSBmbGF2b3JzIGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtIGFuZCBhcmNoaXRlY3R1cmUgOgoKICBBdG9taWMgb3BlcmF0aW9ucyA6CiAgICAtIGludGVybmFsIGFzc2VtYmxlciB2ZXJzaW9ucyBmb3IgeDg2L3g4Nl82NCBhcmNoaXRlY3R1cmVzCgogICAgLSBnY2MgYnVpbHRpbnMgZm9yIG90aGVyIGFyY2hpdGVjdHVyZXMuIFNvbWUgYXJjaGl0ZWN0dXJlcyBtaWdodCBub3QKICAgICAgYmUgZnVsbHkgc3VwcG9ydGVkIG9yIG1pZ2h0IHJlcXVpcmUgYSBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIGdjYy4KICAgICAgSWYgeW91ciBhcmNoaXRlY3R1cmUgaXMgbm90IHN1cHBvcnRlZCwgeW91IHdpbGx5IGhhdmUgdG8gZWl0aGVyIHVzZQogICAgICBwdGhyZWFkIGlmIHN1cHBvcnRlZCwgb3IgdG8gZGlzYWJsZSB0aGUgc2hhcmVkIGNhY2hlLgoKICAgIC0gcHRocmVhZCAocG9zaXggdGhyZWFkcykuIFB0aHJlYWRzIGFyZSB2ZXJ5IGNvbW1vbiBidXQgaW50ZXItcHJvY2VzcwogICAgICBzdXBwb3J0IGlzIG5vdCB0aGF0IGNvbW1vbiwgYW5kIHNvbWUgb2xkZXIgb3BlcmF0aW5nIHN5c3RlbXMgZGlkIG5vdAogICAgICByZXBvcnQgYW4gZXJyb3Igd2hlbiBlbmFibGluZyBtdWx0aS1wcm9jZXNzIG1vZGUsIHNvIHRoZXkgdXNlZCB0bwogICAgICBzaWxlbnRseSBmYWlsLCBwb3NzaWJseSBjYXVzaW5nIGNyYXNoZXMuIExpbnV4J3MgaW1wbGVtZW50YXRpb24gaXMKICAgICAgZmluZS4gT3BlbkJTRCBkb2Vzbid0IHN1cHBvcnQgdGhlbSBhbmQgZG9lc24ndCBidWlsZC4gRnJlZUJTRCA5IGJ1aWxkcwogICAgICBhbmQgcmVwb3J0cyBhbiBlcnJvciBhdCBydW50aW1lLCB3aGlsZSBjZXJ0YWluIG9sZGVyIHZlcnNpb25zIG1pZ2h0CiAgICAgIHNpbGVudGx5IGZhaWwuIFB0aHJlYWRzIGFyZSBlbmFibGVkIHVzaW5nIFVTRV9QVEhSRUFEX1BTSEFSRUQ9MS4KCiAgU3luY2hyb25pemF0aW9uIG9wZXJhdGlvbnMgOgogICAgLSBpbnRlcm5hbCBzcGlubG9jayA6IHRoaXMgbW9kZSBpcyBPUy1pbmRlcGVuZGFudCwgbGlnaHQgYnV0IHdpbGwgbm90CiAgICAgIHNjYWxlIHdlbGwgdG8gbWFueSBwcm9jZXNzZXMuIEhvd2V2ZXIsIGFjY2Vzc2VzIHRvIHRoZSBzZXNzaW9uIGNhY2hlCiAgICAgIGFyZSByYXJlIGVub3VnaCB0aGF0IHRoaXMgbW9kZSBjb3VsZCBjZXJ0YWlubHkgYWx3YXlzIGJlIHVzZWQuIFRoaXMKICAgICAgaXMgdGhlIGRlZmF1bHQgbW9kZS4KCiAgICAtIEZ1dGV4ZXMsIHdoaWNoIGFyZSBMaW51eC1zcGVjaWZpYyBoaWdobHkgc2NhbGFibGUgbGlnaHQgd2VpZ2h0IG11dGV4ZXMKICAgICAgaW1wbGVtZW50ZWQgaW4gdXNlci1zcGFjZSB3aXRoIHNvbWUgbGltaXRlZCBhc3Npc3RhbmNlIGZyb20gdGhlIGtlcm5lbC4KICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvbiBMaW51eCAyLjYgYW5kIGFib3ZlIGFuZCBpcyBlbmFibGVkIGJ5IHBhc3NpbmcKICAgICAgVVNFX0ZVVEVYPTEKCiAgICAtIHB0aHJlYWQgKHBvc2l4IHRocmVhZHMpLiBTZWUgYWJvdmUuCgpJZiBub25lIG9mIHRoZXNlIG1lY2hhbmlzbXMgaXMgc3VwcG9ydGVkIGJ5IHlvdXIgcGxhdGZvcm0sIHlvdSBtYXkgbmVlZCB0bwpidWlsZCB3aXRoIFVTRV9QUklWQVRFX0NBQ0hFPTEgdG8gdG90YWxseSBkaXNhYmxlIFNTTCBjYWNoZSBzaGFyaW5nLiBUaGVuCml0IGlzIGJldHRlciBub3QgdG8gcnVuIFNTTCBvbiBtdWx0aXBsZSBwcm9jZXNzZXMuCgpJZiB5b3UgbmVlZCB0byBwYXNzIG90aGVyIGRlZmluZXMsIGluY2x1ZGVzLCBsaWJyYXJpZXMsIGV0Yy4uLiB0aGVuIHBsZWFzZQpjaGVjayB0aGUgTWFrZWZpbGUgdG8gc2VlIHdoaWNoIG9uZXMgd2lsbCBiZSBhdmFpbGFibGUgaW4geW91ciBjYXNlLCBhbmQKdXNlIHRoZSBVU0VfKiB2YXJpYWJsZXMgaW4gdGhlIE1ha2VmaWxlLgoKQUlYIDUuMyBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIGdlbmVyaWMgdGFyZ2V0LiBIb3dldmVyLCBmb3IgdGhlIGJpbmFyeSB0bwphbHNvIHJ1biBvbiA1LjIgb3IgZWFybGllciwgeW91IG5lZWQgdG8gYnVpbGQgd2l0aCBERUZJTkU9Ii1EX01TR1FTVVBQT1JUIiwKb3RoZXJ3aXNlIF9fZmRfc2VsZWN0KCkgd2lsbCBiZSB1c2VkIHdoaWxlIG5vdCBiZWluZyBwcmVzZW50IGluIHRoZSBsaWJjLCBidXQKdGhpcyBpcyBlYXNpbHkgYWRkcmVzc2VkIHVzaW5nIHRoZSAiYWl4NTIiIHRhcmdldC4gSWYgeW91IGdldCBidWlsZCBlcnJvcnMKYmVjYXVzZSBvZiBzdHJhbmdlIHN5bWJvbHMgb3Igc2VjdGlvbiBtaXNtYXRjaGVzLCBzaW1wbHkgcmVtb3ZlIC1nIGZyb20KREVCVUdfQ0ZMQUdTLgoKWW91IGNhbiBlYXNpbHkgZGVmaW5lIHlvdXIgb3duIHRhcmdldCB3aXRoIHRoZSBHTlUgTWFrZWZpbGUuIFVua25vd24gdGFyZ2V0cwphcmUgcHJvY2Vzc2VkIHdpdGggbm8gZGVmYXVsdCBvcHRpb24gZXhjZXB0IFVTRV9QT0xMPWRlZmF1bHQuIFNvIHlvdSBjYW4gdmVyeQp3ZWxsIHVzZSB0aGF0IHByb3BlcnR5IHRvIGRlZmluZSB5b3VyIG93biBzZXQgb2Ygb3B0aW9ucy4gVVNFX1BPTEwgY2FuIGV2ZW4gYmUKZGlzYWJsZWQgYnkgc2V0dGluZyBVU0VfUE9MTD0iIi4gRm9yIGV4YW1wbGUgOgoKICAgICQgZ21ha2UgVEFSR0VUPXRpbnkgVVNFX1BPTEw9IiIgVEFSR0VUX0NGTEFHUz0tZm9taXQtZnJhbWUtcG9pbnRlcgoKCjEuMSkgRGV2aWNlQXRsYXMgRGV2aWNlIERldGVjdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkluIG9yZGVyIHRvIGFkZCBEZXZpY2VBdGxhcyBEZXZpY2UgRGV0ZWN0aW9uIHN1cHBvcnQsIHlvdSB3b3VsZCBuZWVkIHRvIGRvd25sb2FkCnRoZSBBUEkgc291cmNlIGNvZGUgZnJvbSBodHRwczovL2RldmljZWF0bGFzLmNvbS9kZXZpY2VhdGxhcy1oYXByb3h5LW1vZHVsZSBhbmQKb25jZSBleHRyYWN0ZWQgOgoKICAgICQgbWFrZSBUQVJHRVQ9PHRhcmdldD4gVVNFX1BDUkU9MSBVU0VfREVWSUNFQVRMQVM9MSBERVZJQ0VBVExBU19TUkM9PHBhdGggdG8gdGhlIEFQSSByb290IGZvbGRlcj4KCk9wdGlvbmFsbHkgREVWSUNFQVRMQVNfSU5DIGFuZCBERVZJQ0VBVExBU19MSUIgbWF5IGJlIHNldCB0byBvdmVycmlkZSB0aGUgcGF0aAp0byB0aGUgaW5jbHVkZSBmaWxlcyBhbmQgbGlicmFyaWVzIHJlc3BlY3RpdmVseSBpZiB0aGV5J3JlIG5vdCBpbiB0aGUgc291cmNlCmRpcmVjdG9yeS4KClRoZXNlIGFyZSBzdXBwb3J0ZWQgRGV2aWNlQXRsYXMgZGlyZWN0aXZlcyAoc2VlIGRvYy9jb25maWd1cmF0aW9uLnR4dCkgOgogIC0gZGV2aWNlYXRsYXMtanNvbi1maWxlIDxwYXRoIHRvIHRoZSBEZXZpY2VBdGxhcyBKU09OIGRhdGEgZmlsZT4uCiAgLSBkZXZpY2VhdGxhcy1sb2ctbGV2ZWwgPG51bWJlcj4gKDAgdG8gMywgbGV2ZWwgb2YgaW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKICAgIHRoZSBBUEksIDAgYnkgZGVmYXVsdCkuCiAgLSBkZXZpY2VhdGxhcy1wcm9wZXJ0eS1zZXBhcmF0b3IgPGNoYXJhY3Rlcj4gKGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIHRoZQogICAgcHJvcGVydGllcyBwcm9kdWNlZCBieSB0aGUgQVBJLCB8IGJ5IGRlZmF1bHQpLgoKU2FtcGxlIGNvbmZpZ3VyYXRpb24gOgoKICAgIGdsb2JhbAoJZGV2aWNlYXRsYXMtanNvbi1maWxlIDxwYXRoIHRvIGpzb24gZmlsZT4KCiAgICAuLi4KICAgIGZyb250ZW5kCgliaW5kICo6ODg4MQoJZGVmYXVsdF9iYWNrZW5kIHNlcnZlcnMKClRoZXJlIGFyZSB0d28gZGlzdGluY3QgbWV0aG9kcyBhdmFpbGFibGUsIG9uZSB3aGljaCBsZXZlcmFnZXMgYWxsIEhUVFAgaGVhZGVycwphbmQgb25lIHdoaWNoIHVzZXMgb25seSBhIHNpbmdsZSBIVFRQIGhlYWRlciBmb3IgdGhlIGRldGVjdGlvbi4gVGhlIGZvcm1lcgptZXRob2QgaXMgaGlnaGx5IHJlY29tbWVuZGVkIGFuZCBtb3JlIGFjY3VyYXRlLiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3NzaWJsZSB1c2UKY2FzZXMuCgojIFRvIHRyYW5zbWl0IHRoZSBEZXZpY2VBdGxhcyBkYXRhIGRvd25zdHJlYW0gdG8gdGhlIHRhcmdldCBhcHBsaWNhdGlvbgoKQWxsIEhUVFAgaGVhZGVycyB2aWEgdGhlIHNhbXBsZSAvIGZldGNoCgogICAgaHR0cC1yZXF1ZXN0IHNldC1oZWFkZXIgWC1EZXZpY2VBdGxhcy1EYXRhICVbZGEtY3N2LWZldGNoKHByaW1hcnlIYXJkd2FyZVR5cGUsb3NOYW1lLG9zVmVyc2lvbixicm93c2VyTmFtZSxicm93c2VyVmVyc2lvbildCgpTaW5nbGUgSFRUUCBoZWFkZXIgKGUuZy4gVXNlci1BZ2VudCkgdmlhIHRoZSBjb252ZXJ0b3IKCiAgICBodHRwLXJlcXVlc3Qgc2V0LWhlYWRlciBYLURldmljZUF0bGFzLURhdGEgJVtyZXEuZmhkcihVc2VyLUFnZW50KSxkYS1jc3YtY29udihwcmltYXJ5SGFyZHdhcmVUeXBlLG9zTmFtZSxvc1ZlcnNpb24sYnJvd3Nlck5hbWUsYnJvd3NlclZlcnNpb24pXQoKIyBNb2JpbGUgY29udGVudCBzd2l0Y2hpbmcgd2l0aCBBQ0wKCkFsbCBIVFRQIGhlYWRlcnMKCiAgICBhY2wgaXNfbW9iaWxlIGRhLWNzdi1mZXRjaChtb2JpbGVEZXZpY2UpIDEKClNpbmdsZSBIVFRQIGhlYWRlcgoKICAgIGFjbCBkZXZpY2VfdHlwZV90YWJsZXQgcmVxLmZoZHIoVXNlci1BZ2VudCksZGEtY3N2LWNvbnYocHJpbWFyeUhhcmR3YXJlVHlwZSkgIlRhYmxldCIKCgpQbGVhc2UgZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IERldmljZUF0bGFzIGFuZCB0aGUgZGV0ZWN0aW9uIG1ldGhvZHMgYXQgaHR0cHM6Ly9kZXZpY2VhdGxhcy5jb20vcmVzb3VyY2VzIC4KCgoxLjIpIDUxRGVncmVlcyBEZXZpY2UgRGV0ZWN0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCllvdSBjYW4gYWxzbyBpbmNsdWRlIDUxRGVncmVlcyBmb3IgaW5idWlsdCBkZXZpY2UgZGV0ZWN0aW9uIGVuYWJsaW5nIGF0dHJpYnV0ZXMKc3VjaCBhcyBzY3JlZW4gc2l6ZSAocGh5c2ljYWwgJiBwaXhlbHMpLCBzdXBwb3J0ZWQgaW5wdXQgbWV0aG9kcywgcmVsZWFzZSBkYXRlLApoYXJkd2FyZSB2ZW5kb3IgYW5kIG1vZGVsLCBicm93c2VyIGluZm9ybWF0aW9uLCBhbmQgZGV2aWNlIHByaWNlIGFtb25nIG1hbnkKb3RoZXJzLiBTdWNoIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIHVzZXIgZXhwZXJpZW5jZSBvZiBhIHdlYgpzaXRlIGJ5IHRhaWxvcmluZyB0aGUgcGFnZSBjb250ZW50LCBsYXlvdXQgYW5kIGJ1c2luZXNzIHByb2Nlc3NlcyB0byB0aGUKcHJlY2lzZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGRldmljZS4gU3VjaCBjdXN0b21pc2F0aW9ucyBpbXByb3ZlIHByb2ZpdCBieQptYWtpbmcgaXQgZWFzaWVyIGZvciBjdXN0b21lcnMgdG8gZ2V0IHRvIHRoZSBpbmZvcm1hdGlvbiBvciBzZXJ2aWNlcyB0aGV5Cm5lZWQuIEF0dHJpYnV0ZXMgb2YgdGhlIGRldmljZSBtYWtpbmcgYSB3ZWIgcmVxdWVzdCBjYW4gYmUgYWRkZWQgdG8gSFRUUApoZWFkZXJzIGFzIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzLgoKSW4gb3JkZXIgdG8gZW5hYmxlIDUxRGVncmVlcyBkb3dubG9hZCB0aGUgNTFEZWdyZWVzIHNvdXJjZSBjb2RlIGZyb20gdGhlCm9mZmljaWFsIGdpdGh1YiByZXBvc2l0b3J5IDoKCiAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tLzUxRGVncmVlcy9EZXZpY2UtRGV0ZWN0aW9uCgp0aGVuIHJ1biAnbWFrZScgd2l0aCBVU0VfNTFERUdSRUVTIGFuZCA1MURFR1JFRVNfU1JDIHNldC4gQm90aCA1MURFR1JFRVNfSU5DCmFuZCA1MURFR1JFRVNfTElCIG1heSBhZGRpdGlvbmFsbHkgYmUgdXNlZCB0byBmb3JjZSBzcGVjaWZpYyBkaWZmZXJlbnQgcGF0aHMKZm9yIC5vIGFuZCAuaCwgYnV0IHdpbGwgZGVmYXVsdCB0byA1MURFR1JFRVNfU1JDLiBNYWtlIHN1cmUgdG8gcmVwbGFjZQonNTFEX1JFUE9fUEFUSCcgd2l0aCB0aGUgcGF0aCB0byB0aGUgNTFEZWdyZWVzIHJlcG9zaXRvcnkuCgo1MURlZ3JlZXMgcHJvdmlkZSAyIGRpZmZlcmVudCBkZXRlY3Rpb24gYWxnb3JpdGhtczoKCiAgICAxLiBQYXR0ZXJuIC0gYmFsYW5jZXMgbWFpbiBtZW1vcnkgdXNhZ2UgYW5kIENQVS4KICAgIDIuIFRyaWUgLSBhIHZlcnkgaGlnaCBwZXJmb3JtYW5jZSBkZXRlY3Rpb24gc29sdXRpb24gd2hpY2ggdXNlcyBtb3JlIG1haW4KICAgICAgIG1lbW9yeSB0aGFuIFBhdHRlcm4uCgpUbyBtYWtlIHdpdGggNTFEZWdyZWVzIFBhdHRlcm4gYWxnb3JpdGhtIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZS4KCiAgICAkIG1ha2UgVEFSR0VUPTx0YXJnZXQ+IFVTRV81MURFR1JFRVM9MSA1MURFR1JFRVNfU1JDPSc1MURfUkVQT19QQVRIJy9zcmMvcGF0dGVybgoKVG8gdXNlIHRoZSA1MURlZ3JlZXMgVHJpZSBhbGdvcml0aG0gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBsaW5lLgoKICAgICQgbWFrZSBUQVJHRVQ9PHRhcmdldD4gVVNFXzUxREVHUkVFUz0xIDUxREVHUkVFU19TUkM9JzUxRF9SRVBPX1BBVEgnL3NyYy90cmllCgpBIGRhdGEgZmlsZSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGRldmljZXMsIGJyb3dzZXJzLCBvcGVyYXRpbmcgc3lzdGVtcwphbmQgdGhlaXIgYXNzb2NpYXRlZCBzaWduYXR1cmVzIGlzIHRoZW4gbmVlZGVkLiA1MURlZ3JlZXMgcHJvdmlkZSBhIGZyZWUKZGF0YWJhc2Ugd2l0aCBHaXRodWIgcmVwbyBmb3IgdGhpcyBwdXJwb3NlLiBUaGVzZSBmcmVlIGRhdGEgZmlsZXMgYXJlIGxvY2F0ZWQKaW4gJzUxRF9SRVBPX1BBVEgnL2RhdGEgd2l0aCB0aGUgZXh0ZW5zaW9ucyAuZGF0IGZvciBQYXR0ZXJuIGRhdGEgYW5kIC50cmllIGZvcgpUcmllIGRhdGEuCgpUaGUgY29uZmlndXJhdGlvbiBmaWxlIG5lZWRzIHRvIHNldCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CgogICAgZ2xvYmFsCiAgICAgICAgNTFkZWdyZWVzLWRhdGEtZmlsZSAgICAgICAgICAgcGF0aCB0byB0aGUgUGF0dGVybiBvciBUcmllIGRhdGEgZmlsZQogICAgICAgIDUxZGVncmVlcy1wcm9wZXJ0eS1uYW1lLWxpc3QgIGxpc3Qgb2YgNTFEZWdyZWVzIHByb3BlcnRpZXMgdG8gZGV0ZWN0CiAgICAgICAgNTFkZWdyZWVzLXByb3BlcnR5LXNlcGFyYXRvciAgc2VwYXJhdG9yIHRvIHVzZSBiZXR3ZWVuIHZhbHVlcwogICAgICAgIDUxZGVncmVlcy1jYWNoZS1zaXplICAgICAgICAgIExSVS1iYXNlZCBjYWNoZSBzaXplIChkaXNhYmxlZCBieSBkZWZhdWx0KQoKVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBzZXR0aW5ncyBmb3IgUGF0dGVybi4KCiAgICBnbG9iYWwKICAgICAgICA1MWRlZ3JlZXMtZGF0YS1maWxlICc1MURfUkVQT19QQVRIJy9kYXRhLzUxRGVncmVlcy1MaXRlVjMuMi5kYXQKICAgICAgICA1MWRlZ3JlZXMtcHJvcGVydHktbmFtZS1saXN0IElzVGFibGV0IERldmljZVR5cGUgSXNNb2JpbGUKICAgICAgICA1MWRlZ3JlZXMtcHJvcGVydHktc2VwYXJhdG9yICwKICAgICAgICA1MWRlZ3JlZXMtY2FjaGUtc2l6ZSAxMDAwMAoKSEFQcm94eSBuZWVkcyBhIHdheSB0byBwYXNzIGRldmljZSBpbmZvcm1hdGlvbiB0byB0aGUgYmFja2VuZCBzZXJ2ZXJzLiBUaGlzIGlzCmRvbmUgYnkgdXNpbmcgdGhlIDUxZCBjb252ZXJ0ZXIgb3IgZmV0Y2ggbWV0aG9kLCB3aGljaCBpbnRlcmNlcHRzIHRoZSBIVFRQCmhlYWRlcnMgYW5kIGNyZWF0ZXMgc29tZSBuZXcgaGVhZGVycy4gVGhpcyBpcyBjb250cm9sbGVkIGluIHRoZSBmcm9udGVuZApodHRwLWluIHNlY3Rpb24uCgpUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgd2hpY2ggYWRkcyB0d28gbmV3IEhUVFAgaGVhZGVycyBwcmVmaXhlZCBYLTUxRC0KCiAgICBmcm9udGVuZCBodHRwLWluCiAgICAgICAgYmluZCAqOjgwODEKICAgICAgICBkZWZhdWx0X2JhY2tlbmQgc2VydmVycwogICAgICAgIGh0dHAtcmVxdWVzdCBzZXQtaGVhZGVyIFgtNTFELURldmljZVR5cGVNb2JpbGVUYWJsZXQgJVs1MWQuYWxsKERldmljZVR5cGUsSXNNb2JpbGUsSXNUYWJsZXQpXQogICAgICAgIGh0dHAtcmVxdWVzdCBzZXQtaGVhZGVyIFgtNTFELVRhYmxldCAlWzUxZC5hbGwoSXNUYWJsZXQpXQoKSGVyZSwgdHdvIGhlYWRlcnMgYXJlIGNyZWF0ZWQgd2l0aCA1MURlZ3JlZXMgZGF0YSwgWC01MUQtRGV2aWNlVHlwZU1vYmlsZVRhYmxldAphbmQgWC01MUQtVGFibGV0LiBBbnkgbnVtYmVyIG9mIGhlYWRlcnMgY2FuIGJlIGNyZWF0ZWQgdGhpcyB3YXkgYW5kIGNhbiBiZQpuYW1lZCBhbnl0aGluZy4gNTFkLmFsbCggKSBpbnZva2VzIHRoZSA1MWRlZ3JlZXMgZmV0Y2guIEl0IGNhbiBiZSBwYXNzZWQgdXAgdG8KZml2ZSBwcm9wZXJ0eSBuYW1lcyBvZiB2YWx1ZXMgdG8gcmV0dXJuLiBWYWx1ZXMgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgc2FtZQpvcmRlciwgc2VwZXJhdGVkIGJ5IHRoZSA1MS1kZWdyZWVzLXByb3BlcnR5LXNlcGFyYXRvciBjb25maWd1cmVkIGVhcmxpZXIuIElmIGEKcHJvcGVydHkgbmFtZSBjYW4ndCBiZSBmb3VuZCB0aGUgdmFsdWUgJ05vRGF0YScgaXMgcmV0dXJuZWQgaW5zdGVhZC4KCkluIGFkZGl0aW9uIHRvIHRoZSBkZXZpY2UgcHJvcGVydGllcyB0aHJlZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUKdmFsaWRpdHkgb2YgdGhlIHJlc3VsdCBjYW4gYmUgcmV0dXJuZWQgd2hlbiB1c2VkIHdpdGggdGhlIFBhdHRlcm4gbWV0aG9kLiBUaGUKZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IE1ldGhvZCwgRGlmZmVyZW5jZSBhbmQgUmFuayBjb3VsZCBiZSBpbmNsdWRlZCBhcyBvbmUKbmV3IEhUVFAgaGVhZGVyIFgtNTFELVN0YXRzLgoKICAgIGZyb250ZW5kIGh0dHAtaW4KICAgICAgICAuLi4KICAgICAgICBodHRwLXJlcXVlc3Qgc2V0LWhlYWRlciBYLTUxRC1TdGF0cyAlWzUxZC5hbGwoTWV0aG9kLERpZmZlcmVuY2UsUmFuayldCgpUaGVzZSB2YWx1ZXMgaW5kaWNhdGUgaG93IGNvbmZpZGVudCA1MURlZ3JlZXMgaXMgaW4gdGhlIHJlc3VsdCB0aGF0IHRoYXQgd2FzCnJldHVybmVkLiBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBvbiB0aGUgNTFEZWdyZWVzIHdlYiBzaXRlIGF0OgoKICAgIGh0dHBzOi8vNTFkZWdyZWVzLmNvbS9zdXBwb3J0L2RvY3VtZW50YXRpb24vcGF0dGVybgoKVGhlIGFib3ZlIDUxZC5hbGwgZmV0Y2ggbWV0aG9kIHVzZXMgYWxsIGF2YWlsYWJsZSBIVFRQIGhlYWRlcnMgZm9yIGRldGVjdGlvbi4gQQptb2Rlc3QgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgY2FuIGJlIG9idGFpbmVkIGJ5IG9ubHkgcGFzc2luZyBvbmUgSFRUUCBoZWFkZXIKdG8gdGhlIGRldGVjdGlvbiBtZXRob2Qgd2l0aCB0aGUgNTFkLnNpbmdsZSBjb252ZXJ0ZXIuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQp1c2VzIHRoZSBVc2VyLUFnZW50IEhUVFAgaGVhZGVyIG9ubHkgZm9yIGRldGVjdGlvbi4KCiAgICBmcm9udGVuZCBodHRwLWluCiAgICAgICAgLi4uCiAgICAgICAgaHR0cC1yZXF1ZXN0IHNldC1oZWFkZXIgWC01MUQtRGV2aWNlVHlwZU1vYmlsZVRhYmxldCAlW3JlcS5maGRyKFVzZXItQWdlbnQpLDUxZC5zaW5nbGUoRGV2aWNlVHlwZSxJc01vYmlsZSxJc1RhYmxldCldCgpBbnkgSFRUUCBoZWFkZXIgY291bGQgYmUgdXNlZCBpbnBsYWNlIG9mIFVzZXItQWdlbnQgYnkgY2hhbmdpbmcgdGhlIHBhcmFtZXRlcgpwcm92aWRlZCB0byByZXEuZmhkci4KCldoZW4gY29tcGlsZWQgdG8gdXNlIHRoZSBUcmllIGRldGVjdGlvbiBtZXRob2QgdGhlIHRyaWUgZm9ybWF0IGRhdGEgZmlsZSBuZWVkcwp0byBiZSBwcm92aWRlZC4gQ2hhbmdpbmcgdGhlIGV4dGVuc2lvbiBvZiB0aGUgZGF0YSBmaWxlIGZyb20gZGF0IHRvIHRyaWUgd2lsbAp1c2UgdGhlIGNvcnJlY3QgZGF0YS4KCiAgICBnbG9iYWwKICAgICAgICA1MWRlZ3JlZXMtZGF0YS1maWxlICc1MURfUkVQT19QQVRIJy9kYXRhLzUxRGVncmVlcy1MaXRlVjMuMi50cmllCgpXaGVuIHVzZWQgd2l0aCBUcmllIHRoZSBNZXRob2QsIERpZmZlcmVuY2UgYW5kIFJhbmsgcHJvcGVydGllcyBhcmUgbm90CmF2YWlsYWJsZS4KClRoZSBmcmVlIExpdGUgZGF0YSBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHNjcmVlbiBzaXplIGluIHBpeGVscyBhbmQKd2hldGhlciB0aGUgZGV2aWNlIGlzIGEgbW9iaWxlLiBBIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBpcyBsb2NhdGVkCm9uIHRoZSA1MURlZ3JlZXMgd2ViIHNpdGUgYXQ6CgogICAgaHR0cHM6Ly81MWRlZ3JlZXMuY29tL3Jlc291cmNlcy9wcm9wZXJ0eS1kaWN0aW9uYXJ5CgpTb21lIHByb3BlcnRpZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIHRoZSBwYWlkIGZvciBQcmVtaXVtIGFuZCBFbnRlcnByaXNlCnZlcnNpb25zIG9mIDUxRGVncmVlcy4gVGhlc2UgZGF0YSBzZXRzIG5vdCBvbmx5IGNvbnRhaW4gbW9yZSBwcm9wZXJ0aWVzIGJ1dAphcmUgdXBkYXRlZCB3ZWVrbHkgYW5kIGRhaWx5IGFuZCBjb250YWluIHNpZ25hdHVyZXMgZm9yIDEwMCwwMDBzIG9mIGRpZmZlcmVudApkZXZpY2UgY29tYmluYXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIGRhdGEgb3B0aW9ucyBjb21wYXJpc29uIHdlYgpwYWdlOgoKICAgIGh0dHBzOi8vNTFkZWdyZWVzLmNvbS9jb21wYXJlLWRhdGEtb3B0aW9ucwoKCjIpIEhvdyB0byBpbnN0YWxsIGl0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUbyBpbnN0YWxsIGhhcHJveHksIHlvdSBjYW4gZWl0aGVyIGNvcHkgdGhlIHNpbmdsZSByZXN1bHRpbmcgYmluYXJ5IHRvIHRoZQpwbGFjZSB5b3Ugd2FudCwgb3IgcnVuIDoKCiAgICAkIHN1ZG8gbWFrZSBpbnN0YWxsCgpJZiB5b3UncmUgcGFja2FnaW5nIGl0IGZvciBhbm90aGVyIHN5c3RlbSwgeW91IGNhbiBzcGVjaWZ5IGl0cyByb290IGRpcmVjdG9yeQppbiB0aGUgdXN1YWwgREVTVERJUiB2YXJpYWJsZS4KCgozKSBIb3cgdG8gc2V0IGl0IHVwCi0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXJlIGlzIHNvbWUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgZG9jLyBkaXJlY3RvcnkgOgoKICAgIC0gaW50cm8udHh0IDogdGhpcyBpcyBhbiBpbnRyb2R1Y3Rpb24gdG8gaGFwcm94eSwgaXQgZXhwbGFpbnMgd2hhdCBpdCBpcwogICAgICB3aGF0IGl0IGlzIG5vdC4gVXNlZnVsIGZvciBiZWdpbm5lcnMgb3IgdG8gcmUtZGlzY292ZXIgaXQgd2hlbiBwbGFubmluZwogICAgICBmb3IgYW4gdXBncmFkZS4KCiAgICAtIGFyY2hpdGVjdHVyZS50eHQgOiB0aGlzIGlzIHRoZSBhcmNoaXRlY3R1cmUgbWFudWFsLiBJdCBpcyBxdWl0ZSBvbGQgYW5kCiAgICAgIGRvZXMgbm90IHRlbGwgYWJvdXQgdGhlIG5pY2UgbmV3IGZlYXR1cmVzLCBidXQgaXQncyBzdGlsbCBhIGdvb2Qgc3RhcnRpbmcKICAgICAgcG9pbnQgd2hlbiB5b3Uga25vdyB3aGF0IHlvdSB3YW50IGJ1dCBkb24ndCBrbm93IGhvdyB0byBkbyBpdC4KCiAgICAtIGNvbmZpZ3VyYXRpb24udHh0IDogdGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBtYW51YWwuIEl0IHJlY2FsbHMgYSBmZXcKICAgICAgZXNzZW50aWFsIEhUVFAgYmFzaWMgY29uY2VwdHMsIGFuZCBkZXRhaWxzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmaWxlCiAgICAgIHN5bnRheCAoa2V5d29yZHMsIHVuaXRzKS4gSXQgYWxzbyBkZXNjcmliZXMgdGhlIGxvZyBhbmQgc3RhdHMgZm9ybWF0LiBJdAogICAgICBpcyBub3JtYWxseSBhbHdheXMgdXAgdG8gZGF0ZS4gSWYgeW91IHNlZSB0aGF0IHNvbWV0aGluZyBpcyBtaXNzaW5nIGZyb20KICAgICAgaXQsIHBsZWFzZSByZXBvcnQgaXQgYXMgdGhpcyBpcyBhIGJ1Zy4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGZpbGUgaXMKICAgICAgaHVnZSBhbmQgdGhhdCBpdCdzIGdlbmVyYWxseSBtb3JlIGNvbnZlbmllbnQgdG8gcmV2aWV3IEN5cmlsIEJvbnTpJ3MKICAgICAgSFRNTCB0cmFuc2xhdGlvbiBvbmxpbmUgaGVyZSA6CgogICAgICAgICAgIGh0dHA6Ly9jYm9udGUuZ2l0aHViLmlvL2hhcHJveHktZGNvbnYvY29uZmlndXJhdGlvbi0xLjYuaHRtbAoKICAgIC0gbWFuYWdlbWVudC50eHQgOiBpdCBleHBsYWlucyBob3cgdG8gc3RhcnQgaGFwcm94eSwgaG93IHRvIG1hbmFnZSBpdCBhdAogICAgICBydW50aW1lLCBob3cgdG8gbWFuYWdlIGl0IG9uIG11bHRpcGxlIG5vZGVzLCBob3cgdG8gcHJvY2VlZCB3aXRoIHNlYW1sZXNzCiAgICAgIHVwZ3JhZGVzLgoKICAgIC0gZ3BsLnR4dCAvIGxncGwudHh0IDogdGhlIGNvcHkgb2YgdGhlIGxpY2Vuc2VzIGNvdmVyaW5nIHRoZSBzb2Z0d2FyZS4gU2VlCiAgICAgIHRoZSAnTElDRU5TRScgZmlsZSBhdCB0aGUgdG9wIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgIC0gdGhlIHJlc3QgaXMgbWFpbmx5IGZvciBkZXZlbG9wZXJzLgoKVGhlcmUgYXJlIGFsc28gYSBudW1iZXIgb2YgbmljZSBjb25maWd1cmF0aW9uIGV4YW1wbGVzIGluIHRoZSAiZXhhbXBsZXMiCmRpcmVjdG9yeSBhcyB3ZWxsIGFzIG9uIHNldmVyYWwgc2l0ZXMgYW5kIGFydGljbGVzIG9uIHRoZSBuZXQgd2hpY2ggYXJlIGxpbmtlZAp0byBmcm9tIHRoZSBoYXByb3h5IHdlYiBzaXRlLgoKCjQpIEhvdyB0byByZXBvcnQgYSBidWcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSXQgaXMgcG9zc2libGUgdGhhdCBmcm9tIHRpbWUgdG8gdGltZSB5b3UnbGwgZmluZCBhIGJ1Zy4gQSBidWcgaXMgYSBjYXNlIHdoZXJlCndoYXQgeW91IHNlZSBpcyBub3Qgd2hhdCBpcyBkb2N1bWVudGVkLiBPdGhlcndpc2UgaXQgY2FuIGJlIGEgbWlzZGVzaWduLiBJZiB5b3UKZmluZCB0aGF0IHNvbWV0aGluZyBpcyBzdHVwaWRseSBkZXNpZ24sIHBsZWFzZSBkaXNjdXNzIGl0IG9uIHRoZSBsaXN0IChzZWUgdGhlCiJob3cgdG8gY29udHJpYnV0ZSIgc2VjdGlvbiBiZWxvdykuIElmIHlvdSBmZWVsIGxpa2UgeW91J3JlIHByb2NlZWRpbmcgcmlnaHQKYW5kIGhhcHJveHkgZG9lc24ndCBvYmV5LCB0aGVuIGZpcnN0IGFzayB5b3Vyc2VsZiBpZiBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vYm9keQpiZWZvcmUgeW91IGhhcyBldmVuIGVuY291bnRlcmVkIHRoaXMgaXNzdWUuIElmIGl0J3MgdW5saWtlbHksIHRoZSB5b3UgcHJvYmFibHkKaGF2ZSBhbiBpc3N1ZSBpbiB5b3VyIHNldHVwLiBKdXN0IGluIGNhc2Ugb2YgZG91YnQsIHBsZWFzZSBjb25zdWx0IHRoZSBtYWlsaW5nCmxpc3QgYXJjaGl2ZXMgOgoKICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL21hcmMuaW5mby8/bD1oYXByb3h5CgpPdGhlcndpc2UsIHBsZWFzZSB0cnkgdG8gZ2F0aGVyIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBpbmZvcm1hdGlvbiB0byBoZWxwCnJlcHJvZHVjZSB0aGUgaXNzdWUgYW5kIHNlbmQgdGhhdCB0byB0aGUgbWFpbGluZyBsaXN0IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhcHJveHlAZm9ybWlsdXgub3JnCgpQbGVhc2UgaW5jbHVkZSB5b3VyIGNvbmZpZ3VyYXRpb24gYW5kIGxvZ3MuIFlvdSBjYW4gbWFzayB5b3VyIElQIGFkZHJlc3NlcyBhbmQKcGFzc3dvcmRzLCB3ZSBkb24ndCBuZWVkIHRoZW0uIEJ1dCBpdCdzIGVzc2VudGlhbCB0aGF0IHlvdSBwb3N0IHlvdXIgY29uZmlnIGlmCnlvdSB3YW50IHBlb3BsZSB0byBndWVzcyB3aGF0IGlzIGhhcHBlbmluZy4KCkFsc28sIGtlZXAgaW4gbWluZCB0aGF0IGhhcHJveHkgaXMgZGVzaWduZWQgdG8gTkVWRVIgQ1JBU0guIElmIHlvdSBzZWUgaXQgZGllCndpdGhvdXQgYW55IHJlYXNvbiwgdGhlbiBpdCBkZWZpbml0ZWx5IGlzIGEgY3JpdGljYWwgYnVnIHRoYXQgbXVzdCBiZSByZXBvcnRlZAphbmQgdXJnZW50bHkgZml4ZWQuIEl0IGhhcyBoYXBwZW5lZCBhIGNvdXBsZSBvZiB0aW1lcyBpbiB0aGUgcGFzdCwgZXNzZW50aWFsbHkKb24gZGV2ZWxvcG1lbnQgdmVyc2lvbnMgcnVubmluZyBvbiBuZXcgYXJjaGl0ZWN0dXJlcy4gSWYgeW91IHRoaW5rIHlvdXIgc2V0dXAKaXMgZmFpcmx5IGNvbW1vbiwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZSBpcyB0b3RhbGx5IHVucmVsYXRlZC4KQW55d2F5LCBpZiB0aGF0IGhhcHBlbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IG1lIGRpcmVjdGx5LCBhcyBJIHdpbGwgZ2l2ZSB5b3UKaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBjb2xsZWN0IGEgdXNhYmxlIGNvcmUgZmlsZSwgYW5kIHdpbGwgcHJvYmFibHkgYXNrIGZvcgpvdGhlciBjYXB0dXJlcyB0aGF0IHlvdSdsbCBub3Qgd2FudCB0byBzaGFyZSB3aXRoIHRoZSBsaXN0LgoKCjUpIEhvdyB0byBjb250cmlidXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpQbGVhc2UgY2FyZWZ1bGx5IHJlYWQgdGhlIENPTlRSSUJVVElORyBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGUgc291cmNlcy4gSXQgaXMKbWFuZGF0b3J5LgoKLS0gZW5kCg==