ICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVByb3h5IGhvdy10bwogICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiAxLjUtZGV2MjIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxseSB0YXJyZWF1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDE0LzAyLzAzCgoKMSkgSG93IHRvIGJ1aWxkIGl0Ci0tLS0tLS0tLS0tLS0tLS0tLQoKVG8gYnVpbGQgaGFwcm94eSwgeW91IHdpbGwgbmVlZCA6CiAgLSBHTlUgbWFrZS4gTmVpdGhlciBTb2xhcmlzIG5vciBPcGVuQlNEJ3MgbWFrZSB3b3JrIHdpdGggdGhlIEdOVSBNYWtlZmlsZS4KICAgIEhvd2V2ZXIsIHNwZWNpZmljIE1ha2VmaWxlcyBmb3IgQlNEIGFuZCBPU1ggYXJlIHByb3ZpZGVkLgogIC0gR0NDIGJldHdlZW4gMi45MSBhbmQgNC43LiBPdGhlcnMgbWF5IHdvcmssIGJ1dCBub3QgdGVzdGVkLgogIC0gR05VIGxkCgpBbHNvLCB5b3UgbWlnaHQgd2FudCB0byBidWlsZCB3aXRoIGxpYnBjcmUgc3VwcG9ydCwgd2hpY2ggd2lsbCBwcm92aWRlIGEgdmVyeQplZmZpY2llbnQgcmVnZXggaW1wbGVtZW50YXRpb24gYW5kIHdpbGwgYWxzbyBmaXggc29tZSBiYWRuZXNzIG9uIFNvbGFyaXMnIG9uZS4KClRvIGJ1aWxkIGhhcHJveHksIHlvdSBoYXZlIHRvIGNob29zZSB5b3VyIHRhcmdldCBPUyBhbW9uZ3N0IHRoZSBmb2xsb3dpbmcgb25lcwphbmQgYXNzaWduIGl0IHRvIHRoZSBUQVJHRVQgdmFyaWFibGUgOgoKICAtIGxpbnV4MjIgICAgIGZvciBMaW51eCAyLjIKICAtIGxpbnV4MjQgICAgIGZvciBMaW51eCAyLjQgYW5kIGFib3ZlIChkZWZhdWx0KQogIC0gbGludXgyNGUgICAgZm9yIExpbnV4IDIuNCB3aXRoIHN1cHBvcnQgZm9yIGEgd29ya2luZyBlcG9sbCAoPiAwLjIxKQogIC0gbGludXgyNiAgICAgZm9yIExpbnV4IDIuNiBhbmQgYWJvdmUKICAtIGxpbnV4MjYyOCAgIGZvciBMaW51eCAyLjYuMjggYW5kIGFib3ZlIChlbmFibGVzIHNwbGljZSBhbmQgdHByb3h5KQogIC0gc29sYXJpcyAgICAgZm9yIFNvbGFyaXMgOCBvciAxMCAob3RoZXJzIHVudGVzdGVkKQogIC0gZnJlZWJzZCAgICAgZm9yIEZyZWVCU0QgNSB0byA4LjAgKG90aGVycyB1bnRlc3RlZCkKICAtIG9zeCAgICAgICAgIGZvciBNYWMgT1MvWAogIC0gb3BlbmJzZCAgICAgZm9yIE9wZW5CU0QgMy4xIHRvIDUuMiAob3RoZXJzIHVudGVzdGVkKQogIC0gYWl4NTEgICAgICAgZm9yIEFJWCA1LjEKICAtIGFpeDUyICAgICAgIGZvciBBSVggNS4yCiAgLSBjeWd3aW4gICAgICBmb3IgQ3lnd2luCiAgLSBnZW5lcmljICAgICBmb3IgYW55IG90aGVyIE9TLgogIC0gY3VzdG9tICAgICAgdG8gbWFudWFsbHkgYWRqdXN0IGV2ZXJ5IHNldHRpbmcKCllvdSBtYXkgYWxzbyBjaG9vc2UgeW91ciBDUFUgdG8gYmVuZWZpdCBmcm9tIHNvbWUgb3B0aW1pemF0aW9ucy4gVGhpcyBpcwpwYXJ0aWN1bGFybHkgaW1wb3J0YW50IG9uIFVsdHJhU3BhcmMgbWFjaGluZXMuIEZvciB0aGlzLCB5b3UgY2FuIGFzc2lnbgpvbmUgb2YgdGhlIGZvbGxvd2luZyBjaG9pY2VzIHRvIHRoZSBDUFUgdmFyaWFibGUgOgoKICAtIGk2ODYgZm9yIGludGVsIFBlbnRpdW1Qcm8sIFBlbnRpdW0gMiBhbmQgYWJvdmUsIEFNRCBBdGhsb24KICAtIGk1ODYgZm9yIGludGVsIFBlbnRpdW0sIEFNRCBLNiwgVklBIEMzLgogIC0gdWx0cmFzcGFyYyA6IFN1biBVbHRyYVNwYXJjIEkvSUkvSUlJL0lWIHByb2Nlc3NvcgogIC0gbmF0aXZlIDogdXNlIHRoZSBidWlsZCBtYWNoaW5lJ3Mgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMKICAtIGdlbmVyaWMgOiBhbnkgb3RoZXIgcHJvY2Vzc29yIG9yIG5vIHNwZWNpZmljIG9wdGltaXphdGlvbi4gKGRlZmF1bHQpCgpBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGp1c3Qgc2V0IHRoZSBDUFVfQ0ZMQUdTIHZhbHVlIHRvIHRoZSBvcHRpbWFsIEdDQyBvcHRpb25zCmZvciB5b3VyIHBsYXRmb3JtLgoKWW91IG1heSB3YW50IHRvIGJ1aWxkIHNwZWNpZmljIHRhcmdldCBiaW5hcmllcyB3aGljaCBkbyBub3QgbWF0Y2ggeW91ciBuYXRpdmUKY29tcGlsZXIncyB0YXJnZXQuIFRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUgb24gNjQtYml0IHN5c3RlbXMgd2hlbiB5b3Ugd2FudAp0byBidWlsZCBhIDMyLWJpdCBiaW5hcnkuIFVzZSB0aGUgQVJDSCB2YXJpYWJsZSBmb3IgdGhpcyBwdXJwb3NlLiBSaWdodCBub3cKaXQgb25seSBrbm93cyBhYm91dCBhIGZldyB4ODYgdmFyaWFudHMgKGkzODYsaTQ4NixpNTg2LGk2ODYseDg2XzY0KSwgdHdvCmdlbmVyaWMgb25lcyAoMzIsNjQpIGFuZCBzZXRzIC1tMzIvLW02NCBhcyB3ZWxsIGFzIC1tYXJjaD08YXJjaD4gYWNjb3JkaW5nbHkuCgpJZiB5b3VyIHN5c3RlbSBzdXBwb3J0cyBQQ1JFIChQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyksIHRoZW4geW91CnJlYWxseSBzaG91bGQgYnVpbGQgd2l0aCBsaWJwY3JlIHdoaWNoIGlzIGJldHdlZW4gMiBhbmQgMTAgdGltZXMgZmFzdGVyIHRoYW4Kb3RoZXIgbGliYyBpbXBsZW1lbnRhdGlvbnMuIFJlZ2V4IGFyZSB1c2VkIGZvciBoZWFkZXIgcHJvY2Vzc2luZyAoZGVsZXRpb24sCnJld3JpdGluZywgYWxsb3csIGRlbnkpLiBUaGUgb25seSBpbmNvbnZlbmllbnQgb2YgbGlicGNyZSBpcyB0aGF0IGl0IGlzIG5vdAp5ZXQgd2lkZWx5IHNwcmVhZCwgc28gaWYgeW91IGJ1aWxkIGZvciBvdGhlciBzeXN0ZW1zLCB5b3UgbWlnaHQgZ2V0IGludG8KdHJvdWJsZSBpZiB0aGV5IGRvbid0IGhhdmUgdGhlIGR5bmFtaWMgbGlicmFyeS4gSW4gdGhpcyBzaXR1YXRpb24sIHlvdSBzaG91bGQKc3RhdGljYWxseSBsaW5rIGxpYnBjcmUgaW50byBoYXByb3h5IHNvIHRoYXQgaXQgd2lsbCBub3QgYmUgbmVjZXNzYXJ5IHRvCmluc3RhbGwgaXQgb24gdGFyZ2V0IHN5c3RlbXMuIEF2YWlsYWJsZSBidWlsZCBvcHRpb25zIGZvciBQQ1JFIGFyZSA6CgogIC0gVVNFX1BDUkU9MSB0byB1c2UgbGlicGNyZSwgaW4gd2hhdGV2ZXIgZm9ybSBpcyBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0KICAgIChzaGFyZWQgb3Igc3RhdGljKQoKICAtIFVTRV9TVEFUSUNfUENSRT0xIHRvIHVzZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGxpYnBjcmUgZXZlbiBpZiB0aGUgZHluYW1pYwogICAgb25lIGlzIGF2YWlsYWJsZS4gVGhpcyB3aWxsIGVuaGFuY2UgcG9ydGFiaWxpdHkuCgogIC0gd2l0aCBubyBvcHRpb24sIHVzZSB5b3VyIE9TIGxpYmMncyBzdGFuZGFyZCByZWdleCBpbXBsZW1lbnRhdGlvbiAoZGVmYXVsdCkuCiAgICBXYXJuaW5nISBncm91cCByZWZlcmVuY2VzIG9uIFNvbGFyaXMgc2VlbSBicm9rZW4uIFVzZSBzdGF0aWMtcGNyZSB3aGVuZXZlcgogICAgcG9zc2libGUuCgpSZWNlbnQgc3lzdGVtcyBjYW4gcmVzb2x2ZSBJUHY2IGhvc3QgbmFtZXMgdXNpbmcgZ2V0YWRkcmluZm8oKS4gVGhpcyBwcmltaXRpdmUKaXMgbm90IHByZXNlbnQgaW4gYWxsIGxpYmNzIGFuZCBkb2VzIG5vdCB3b3JrIGluIGFsbCBvZiB0aGVtIGVpdGhlci4gU3VwcG9ydCBpbgpnbGliYyB3YXMgYnJva2VuIGJlZm9yZSAyLjMuIFNvbWUgZW1iZWRkZWQgbGlicyBtYXkgbm90IHByb3Blcmx5IHdvcmsgZWl0aGVyLAp0aHVzLCBzdXBwb3J0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIG1lYW5pbmcgdGhhdCBzb21lIGhvc3QgbmFtZXMgd2hpY2ggb25seQpyZXNvbHZlIGFzIElQdjYgYWRkcmVzc2VzIHdpbGwgbm90IHJlc29sdmUgYW5kIGNvbmZpZ3MgbWlnaHQgZW1pdCBhbiBlcnJvcgpkdXJpbmcgcGFyc2luZy4gSWYgeW91IGtub3cgdGhhdCB5b3VyIE9TIGxpYmMgaGFzIHJlbGlhYmxlIHN1cHBvcnQgZm9yCmdldGFkZHJpbmZvKCksIHlvdSBjYW4gYWRkIFVTRV9HRVRBRERSSU5GTz0xIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZSB0byBlbmFibGUKaXQuIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIG9wdGlvbiBmb3IgbW9zdCBMaW51eCBkaXN0cm8gcGFja2FnZXJzIHNpbmNlIGl0J3MKd29ya2luZyBmaW5lIG9uIGFsbCByZWNlbnQgbWFpbnN0cmVhbSBkaXN0cm9zLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgb24KU29sYXJpcyA4IGFuZCBhYm92ZSwgYXMgaXQncyBrbm93biB0byB3b3JrLgoKSXQgaXMgcG9zc2libGUgdG8gYWRkIG5hdGl2ZSBzdXBwb3J0IGZvciBTU0wgdXNpbmcgdGhlIEdOVSBtYWtlZmlsZSBvbmx5LCBhbmQKYnkgcGFzc2luZyAiVVNFX09QRU5TU0w9MSIgb24gdGhlIG1ha2UgY29tbWFuZGUgbGluZS4gVGhlIGxpYnNzbCBhbmQgbGliY3J5cHRvCndpbGwgYXV0b21hdGljYWxseSBiZSBsaW5rZWQgd2l0aCBoYXByb3h5LiBTb21lIHN5c3RlbXMgYWxzbyByZXF1aXJlIGxpYnosIHNvCmlmIHRoZSBidWlsZCBmYWlscyBkdWUgdG8gbWlzc2luZyBzeW1ib2xzIHN1Y2ggYXMgZGVmbGF0ZUluaXQoKSwgdGhlbiB0cnkgYWdhaW4Kd2l0aCAiQURETElCPS1seiIuCgpUbyBsaW5rIE9wZW5TU0wgc3RhdGljYWxseSBhZ2FpbnN0IGhhcHJveHksIGJ1aWxkIE9wZW5TU0wgd2l0aCB0aGUgbm8tc2hhcmVkCmtleXdvcmQgYW5kIGluc3RhbGwgaXQgdG8gYSBsb2NhbCBkaXJlY3RvcnksIHNvIHlvdXIgc3lzdGVtIGlzIG5vdCBhZmZlY3RlZCA6CgogICAgJCBleHBvcnQgU1RBVElDTElCU1NMPS90bXAvc3RhdGljbGlic3NsCiAgICAkIC4vY29uZmlnIC0tcHJlZml4PSRTVEFUSUNMSUJTU0wgbm8tc2hhcmVkCiAgICAkIG1ha2UgJiYgbWFrZSBpbnN0YWxsX3N3CgpXaGVuIGJ1aWxkaW5nIGhhcHJveHksIHBhc3MgdGhhdCBwYXRoIHZpYSBTU0xfSU5DIGFuZCBTU0xfTElCIHRvIG1ha2UgYW5kCmluY2x1ZGUgYWRkaXRpb25hbCBsaWJzIHdpdGggQURETElCIGlmIG5lZWRlZCAoaW4gdGhpcyBjYXNlIGZvciBleGFtcGxlIGxpYmRsKToKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNiBVU0VfT1BFTlNTTD0xIFNTTF9JTkM9JFNUQVRJQ0xJQlNTTC9pbmNsdWRlIFNTTF9MSUI9JFNUQVRJQ0xJQlNTTC9saWIgQURETElCPS1sZGwKCkl0IGlzIGFsc28gcG9zc2libGUgdG8gaW5jbHVkZSBuYXRpdmUgc3VwcG9ydCBmb3IgWkxJQiB0byBiZW5lZml0IGZyb20gSFRUUApjb21wcmVzc2lvbi4gRm9yIHRoaXMsIHBhc3MgIlVTRV9aTElCPTEiIG9uIHRoZSAibWFrZSIgY29tbWFuZCBsaW5lIGFuZCBlbnN1cmUKdGhhdCB6bGliIGlzIHByZXNlbnQgb24gdGhlIHN5c3RlbS4KCkJ5IGRlZmF1bHQsIHRoZSBERUJVRyB2YXJpYWJsZSBpcyBzZXQgdG8gJy1nJyB0byBlbmFibGUgZGVidWcgc3ltYm9scy4gSXQgaXMKbm90IHdpc2UgdG8gZGlzYWJsZSBpdCBvbiB1bmNvbW1vbiBzeXN0ZW1zLCBiZWNhdXNlIGl0J3Mgb2Z0ZW4gdGhlIG9ubHkgd2F5IHRvCmdldCBhIGNvbXBsZXRlIGNvcmUgd2hlbiB5b3UgbmVlZCBvbmUuIE90aGVyd2lzZSwgeW91IGNhbiBzZXQgREVCVUcgdG8gJy1zJyB0bwpzdHJpcCB0aGUgYmluYXJ5LgoKRm9yIGV4YW1wbGUsIEkgdXNlIHRoaXMgdG8gYnVpbGQgZm9yIFNvbGFyaXMgOCA6CgogICAgJCBtYWtlIFRBUkdFVD1zb2xhcmlzIENQVT11bHRyYXNwYXJjIFVTRV9TVEFUSUNfUENSRT0xCgpBbmQgSSBidWlsZCBpdCB0aGlzIHdheSBvbiBPcGVuQlNEIG9yIEZyZWVCU0QgOgoKICAgICQgbWFrZSAtZiBNYWtlZmlsZS5ic2QgUkVHRVg9cGNyZSBERUJVRz0gQ09QVFMuZ2VuZXJpYz0iLU9zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tZ251IgoKQW5kIG9uIGEgY2xhc3NpYyBMaW51eCB3aXRoIFNTTCBhbmQgWkxJQiBzdXBwb3J0IChlZzogUmVkIEhhdCA1LngpIDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgQ1BVPW5hdGl2ZSBVU0VfUENSRT0xIFVTRV9PUEVOU1NMPTEgVVNFX1pMSUI9MQoKQW5kIG9uIGEgcmVjZW50IExpbnV4ID49IDIuNi4yOCB3aXRoIFNTTCBhbmQgWkxJQiBzdXBwb3J0IDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYyOCBDUFU9bmF0aXZlIFVTRV9QQ1JFPTEgVVNFX09QRU5TU0w9MSBVU0VfWkxJQj0xCgpJbiBvcmRlciB0byBidWlsZCBhIDMyLWJpdCBiaW5hcnkgb24gYW4geDg2XzY0IExpbnV4IHN5c3RlbSB3aXRoIFNTTCBzdXBwb3J0CndpdGhvdXQgc3VwcG9ydCBmb3IgY29tcHJlc3Npb24gYnV0IHdoZW4gT3BlblNTTCByZXF1aXJlcyBaTElCIGFueXdheSA6CgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2IEFSQ0g9aTM4NiBVU0VfT1BFTlNTTD0xIEFERExJQj0tbHoKClRoZSBCU0QgYW5kIE9TWCBtYWtlZmlsZXMgZG8gbm90IHN1cHBvcnQgYnVpbGQgb3B0aW9ucyBmb3IgT3BlblNTTCBub3IgemxpYi4KQWxzbywgYXQgbGVhc3Qgb24gT3BlbkJTRCwgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCgpIGRvZXMgbm90IGV4aXN0IHNvCnRoZSBTU0wgc2Vzc2lvbiBjYWNoZSBjYW5ub3QgYmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgcHJvY2Vzc2VzLiBJZiB5b3Ugd2FudAp0byBlbmFibGUgdGhlc2Ugb3B0aW9ucywgeW91IG5lZWQgdG8gdXNlIEdOVSBtYWtlIHdpdGggdGhlIGRlZmF1bHQgbWFrZWZpbGUgYXMKZm9sbG93cyA6CgogICAgJCBnbWFrZSBUQVJHRVQ9b3BlbmJzZCBVU0VfT1BFTlNTTD0xIFVTRV9aTElCPTEgVVNFX1BSSVZBVEVfQ0FDSEU9MQoKSWYgeW91IG5lZWQgdG8gcGFzcyBvdGhlciBkZWZpbmVzLCBpbmNsdWRlcywgbGlicmFyaWVzLCBldGMuLi4gdGhlbiBwbGVhc2UKY2hlY2sgdGhlIE1ha2VmaWxlIHRvIHNlZSB3aGljaCBvbmVzIHdpbGwgYmUgYXZhaWxhYmxlIGluIHlvdXIgY2FzZSwgYW5kCnVzZSB0aGUgVVNFXyogdmFyaWFibGVzIGluIHRoZSBHTlUgTWFrZWZpbGUsIG9yIEFERElOQywgQURETElCLCBhbmQgREVGSU5FCnZhcmlhYmxlcyBpbiB0aGUgQlNEIG1ha2VmaWxlcy4KCkFJWCA1LjMgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBnZW5lcmljIHRhcmdldC4gSG93ZXZlciwgZm9yIHRoZSBiaW5hcnkgdG8KYWxzbyBydW4gb24gNS4yIG9yIGVhcmxpZXIsIHlvdSBuZWVkIHRvIGJ1aWxkIHdpdGggREVGSU5FPSItRF9NU0dRU1VQUE9SVCIsCm90aGVyd2lzZSBfX2ZkX3NlbGVjdCgpIHdpbGwgYmUgdXNlZCB3aGlsZSBub3QgYmVpbmcgcHJlc2VudCBpbiB0aGUgbGliYy4KSWYgeW91IGdldCBidWlsZCBlcnJvcnMgYmVjYXVzZSBvZiBzdHJhbmdlIHN5bWJvbHMgb3Igc2VjdGlvbiBtaXNtYXRjaGVzLApzaW1wbHkgcmVtb3ZlIC1nIGZyb20gREVCVUdfQ0ZMQUdTLgoKWW91IGNhbiBlYXNpbHkgZGVmaW5lIHlvdXIgb3duIHRhcmdldCB3aXRoIHRoZSBHTlUgTWFrZWZpbGUuIFVua25vd24gdGFyZ2V0cwphcmUgcHJvY2Vzc2VkIHdpdGggbm8gZGVmYXVsdCBvcHRpb24gZXhjZXB0IFVTRV9QT0xMPWRlZmF1bHQuIFNvIHlvdSBjYW4gdmVyeQp3ZWxsIHVzZSB0aGF0IHByb3BlcnR5IHRvIGRlZmluZSB5b3VyIG93biBzZXQgb2Ygb3B0aW9ucy4gVVNFX1BPTEwgY2FuIGV2ZW4gYmUKZGlzYWJsZWQgYnkgc2V0dGluZyBVU0VfUE9MTD0iIi4gRm9yIGV4YW1wbGUgOgoKICAgICQgZ21ha2UgVEFSR0VUPXRpbnkgVVNFX1BPTEw9IiIgVEFSR0VUX0NGTEFHUz0tZm9taXQtZnJhbWUtcG9pbnRlcgoKCjIpIEhvdyB0byBpbnN0YWxsIGl0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUbyBpbnN0YWxsIGhhcHJveHksIHlvdSBjYW4gZWl0aGVyIGNvcHkgdGhlIHNpbmdsZSByZXN1bHRpbmcgYmluYXJ5IHRvIHRoZQpwbGFjZSB5b3Ugd2FudCwgb3IgcnVuIDoKCiAgICAkIHN1ZG8gbWFrZSBpbnN0YWxsCgpJZiB5b3UncmUgcGFja2FnaW5nIGl0IGZvciBhbm90aGVyIHN5c3RlbSwgeW91IGNhbiBzcGVjaWZ5IGl0cyByb290IGRpcmVjdG9yeQppbiB0aGUgdXN1YWwgREVTVERJUiB2YXJpYWJsZS4KCgozKSBIb3cgdG8gc2V0IGl0IHVwCi0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXJlIGlzIHNvbWUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgZG9jLyBkaXJlY3RvcnkgOgoKICAgIC0gYXJjaGl0ZWN0dXJlLnR4dCA6IHRoaXMgaXMgdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwuIEl0IGlzIHF1aXRlIG9sZCBhbmQKICAgICAgZG9lcyBub3QgdGVsbCBhYm91dCB0aGUgbmljZSBuZXcgZmVhdHVyZXMsIGJ1dCBpdCdzIHN0aWxsIGEgZ29vZCBzdGFydGluZwogICAgICBwb2ludCB3aGVuIHlvdSBrbm93IHdoYXQgeW91IHdhbnQgYnV0IGRvbid0IGtub3cgaG93IHRvIGRvIGl0LgoKICAgIC0gY29uZmlndXJhdGlvbi50eHQgOiB0aGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbC4gSXQgcmVjYWxscyBhIGZldwogICAgICBlc3NlbnRpYWwgSFRUUCBiYXNpYyBjb25jZXB0cywgYW5kIGRldGFpbHMgYWxsIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKICAgICAgc3ludGF4IChrZXl3b3JkcywgdW5pdHMpLiBJdCBhbHNvIGRlc2NyaWJlcyB0aGUgbG9nIGFuZCBzdGF0cyBmb3JtYXQuIEl0CiAgICAgIGlzIG5vcm1hbGx5IGFsd2F5cyB1cCB0byBkYXRlLiBJZiB5b3Ugc2VlIHRoYXQgc29tZXRoaW5nIGlzIG1pc3NpbmcgZnJvbQogICAgICBpdCwgcGxlYXNlIHJlcG9ydCBpdCBhcyB0aGlzIGlzIGEgYnVnLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZmlsZSBpcwogICAgICBodWdlIGFuZCB0aGF0IGl0J3MgZ2VuZXJhbGx5IG1vcmUgY29udmVuaWVudCB0byByZXZpZXcgQ3lyaWwgQm9udOkncwogICAgICBIVE1MIHRyYW5zbGF0aW9uIG9ubGluZSBoZXJlIDoKCiAgICAgICAgICAgaHR0cDovL2Nib250ZS5naXRodWIuaW8vaGFwcm94eS1kY29udi9jb25maWd1cmF0aW9uLTEuNS5odG1sCgogICAgLSBoYXByb3h5LWVuLnR4dCAvIGhhcHJveHktZnIudHh0IDogdGhlc2UgYXJlIHRoZSBvbGQgb3V0ZGF0ZWQgZG9jcy4gWW91CiAgICAgIHNob3VsZCBuZXZlciBuZWVkIHRoZW0uIElmIHlvdSBkbywgdGhlbiBwbGVhc2UgcmVwb3J0IHdoYXQgeW91IGRpZG4ndAogICAgICBmaW5kIGluIHRoZSBvdGhlciBvbmVzLgoKICAgIC0gZ3BsLnR4dCAvIGxncGwudHh0IDogdGhlIGNvcHkgb2YgdGhlIGxpY2Vuc2VzIGNvdmVyaW5nIHRoZSBzb2Z0d2FyZS4gU2VlCiAgICAgIHRoZSAnTElDRU5TRScgZmlsZSBhdCB0aGUgdG9wIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgIC0gdGhlIHJlc3QgaXMgbWFpbmx5IGZvciBkZXZlbG9wZXJzLgoKVGhlcmUgYXJlIGFsc28gYSBudW1iZXIgb2YgbmljZSBjb25maWd1cmF0aW9uIGV4YW1wbGVzIGluIHRoZSAiZXhhbXBsZXMiCmRpcmVjdG9yeSBhcyB3ZWxsIGFzIG9uIHNldmVyYWwgc2l0ZXMgYW5kIGFydGljbGVzIG9uIHRoZSBuZXQgd2hpY2ggYXJlIGxpbmtlZAp0byBmcm9tIHRoZSBoYXByb3h5IHdlYiBzaXRlLgoKCjQpIEhvdyB0byByZXBvcnQgYSBidWcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSXQgaXMgcG9zc2libGUgdGhhdCBmcm9tIHRpbWUgdG8gdGltZSB5b3UnbGwgZmluZCBhIGJ1Zy4gQSBidWcgaXMgYSBjYXNlIHdoZXJlCndoYXQgeW91IHNlZSBpcyBub3Qgd2hhdCBpcyBkb2N1bWVudGVkLiBPdGhlcndpc2UgaXQgY2FuIGJlIGEgbWlzZGVzaWduLiBJZiB5b3UKZmluZCB0aGF0IHNvbWV0aGluZyBpcyBzdHVwaWRseSBkZXNpZ24sIHBsZWFzZSBkaXNjdXNzIGl0IG9uIHRoZSBsaXN0IChzZWUgdGhlCiJob3cgdG8gY29udHJpYnV0ZSIgc2VjdGlvbiBiZWxvdykuIElmIHlvdSBmZWVsIGxpa2UgeW91J3JlIHByb2NlZWRpbmcgcmlnaHQKYW5kIGhhcHJveHkgZG9lc24ndCBvYmV5LCB0aGVuIGZpcnN0IGFzayB5b3Vyc2VsZiBpZiBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vYm9keQpiZWZvcmUgeW91IGhhcyBldmVuIGVuY291bnRlcmVkIHRoaXMgaXNzdWUuIElmIGl0J3MgdW5saWtlbHksIHRoZSB5b3UgcHJvYmFibHkKaGF2ZSBhbiBpc3N1ZSBpbiB5b3VyIHNldHVwLiBKdXN0IGluIGNhc2Ugb2YgZG91YnQsIHBsZWFzZSBjb25zdWx0IHRoZSBtYWlsaW5nCmxpc3QgYXJjaGl2ZXMgOgoKICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL21hcmMuaW5mby8/bD1oYXByb3h5CgpPdGhlcndpc2UsIHBsZWFzZSB0cnkgdG8gZ2F0aGVyIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBpbmZvcm1hdGlvbiB0byBoZWxwCnJlcHJvZHVjZSB0aGUgaXNzdWUgYW5kIHNlbmQgdGhhdCB0byB0aGUgbWFpbGluZyBsaXN0IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhcHJveHlAZm9ybWlsdXgub3JnCgpQbGVhc2UgaW5jbHVkZSB5b3VyIGNvbmZpZ3VyYXRpb24gYW5kIGxvZ3MuIFlvdSBjYW4gbWFzayB5b3VyIElQIGFkZHJlc3NlcyBhbmQKcGFzc3dvcmRzLCB3ZSBkb24ndCBuZWVkIHRoZW0uIEJ1dCBpdCdzIGVzc2VudGlhbCB0aGF0IHlvdSBwb3N0IHlvdXIgY29uZmlnIGlmCnlvdSB3YW50IHBlb3BsZSB0byBndWVzcyB3aGF0IGlzIGhhcHBlbmluZy4KCkFsc28sIGtlZXAgaW4gbWluZCB0aGF0IGhhcHJveHkgaXMgZGVzaWduZWQgdG8gTkVWRVIgQ1JBU0guIElmIHlvdSBzZWUgaXQgZGllCndpdGhvdXQgYW55IHJlYXNvbiwgdGhlbiBpdCBkZWZpbml0ZWx5IGlzIGEgY3JpdGljYWwgYnVnIHRoYXQgbXVzdCBiZSByZXBvcnRlZAphbmQgdXJnZW50bHkgZml4ZWQuIEl0IGhhcyBoYXBwZW5lZCBhIGNvdXBsZSBvZiB0aW1lcyBpbiB0aGUgcGFzdCwgZXNzZW50aWFsbHkKb24gZGV2ZWxvcG1lbnQgdmVyc2lvbnMgcnVubmluZyBvbiBuZXcgYXJjaGl0ZWN0dXJlcy4gSWYgeW91IHRoaW5rIHlvdXIgc2V0dXAKaXMgZmFpcmx5IGNvbW1vbiwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZSBpcyB0b3RhbGx5IHVucmVsYXRlZC4KQW55d2F5LCBpZiB0aGF0IGhhcHBlbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IG1lIGRpcmVjdGx5LCBhcyBJIHdpbGwgZ2l2ZSB5b3UKaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBjb2xsZWN0IGEgdXNhYmxlIGNvcmUgZmlsZSwgYW5kIHdpbGwgcHJvYmFibHkgYXNrIGZvcgpvdGhlciBjYXB0dXJlcyB0aGF0IHlvdSdsbCBub3Qgd2FudCB0byBzaGFyZSB3aXRoIHRoZSBsaXN0LgoKCjUpIEhvdyB0byBjb250cmlidXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJdCBpcyBwb3NzaWJsZSB0aGF0IHlvdSdsbCB3YW50IHRvIGFkZCBhIHNwZWNpZmljIGZlYXR1cmUgdG8gc2F0aXNmeSB5b3VyIG5lZWRzCm9yIG9uZSBvZiB5b3VyIGN1c3RvbWVycycuIENvbnRyaWJ1dGlvbnMgYXJlIHdlbGNvbWUsIGhvd2V2ZXIgSSdtIG9mdGVuIHZlcnkKcGlja3kgYWJvdXQgY2hhbmdlcy4gSSB3aWxsIGdlbmVyYWxseSByZWplY3QgcGF0Y2hlcyB0aGF0IGNoYW5nZSBtYXNzaXZlIHBhcnRzCm9mIHRoZSBjb2RlLCBvciB0aGF0IHRvdWNoIHRoZSBjb3JlIHBhcnRzIHdpdGhvdXQgYW55IGdvb2QgcmVhc29uIGlmIHRob3NlCmNoYW5nZXMgaGF2ZSBub3QgYmVlbiBkaXNjdXNzZWQgZmlyc3QuCgpUaGUgcHJvcGVyIHBsYWNlIHRvIGRpc2N1c3MgeW91ciBjaGFuZ2VzIGlzIHRoZSBIQVByb3h5IE1haWxpbmcgTGlzdC4gVGhlcmUgYXJlCmVub3VnaCBza2lsbGVkIHJlYWRlcnMgdG8gY2F0Y2ggaGF6YXJkb3VzIG1pc3Rha2VzIGFuZCB0byBzdWdnZXN0IGltcHJvdmVtZW50cy4KSSB0cnVzdCBhIG51bWJlciBvZiB0aGVtIGVub3VnaCB0byBtZXJnZSBhIHBhdGNoIGlmIHRoZXkgc2F5IGl0J3MgT0ssIHNvIHVzaW5nCnRoZSBsaXN0IGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgeW91ciBjb2RlIHJldmlld2VkIGFuZCBtZXJnZWQuIFlvdSBjYW4Kc3Vic2NyaWJlIHRvIGl0IGJ5IHNlbmRpbmcgYW4gZW1wdHkgZS1tYWlsIGF0IHRoZSBmb2xsb3dpbmcgYWRkcmVzcyA6CgogICAgICAgICAgICAgICAgICAgICAgICBoYXByb3h5K3N1YnNjcmliZUBmb3JtaWx1eC5vcmcKCklmIHlvdSBoYXZlIGFuIGlkZWEgYWJvdXQgc29tZXRoaW5nIHRvIGltcGxlbWVudCwgKnBsZWFzZSogZGlzY3VzcyBpdCBvbiB0aGUKbGlzdCBmaXJzdC4gSXQgaGFzIGFscmVhZHkgaGFwcGVuZWQgc2V2ZXJhbCB0aW1lcyB0aGF0IHR3byBwZXJzb25zIGRpZCB0aGUgc2FtZQp0aGluZyBzaW11bHRhbmVvdXNseS4gVGhpcyBpcyBhIHdhc3RlIG9mIHRpbWUgZm9yIGJvdGggb2YgdGhlbS4gSXQncyBhbHNvIHZlcnkKY29tbW9uIHRvIHNlZSBzb21lIGNoYW5nZXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGV5J3JlIGRvbmUgaW4gYSB3YXkgdGhhdCB3aWxsCmNvbmZsaWN0IHdpdGggZnV0dXJlIGV2b2x1dGlvbnMsIG9yIHRoYXQgZG9lcyBub3QgbGVhdmUgYSBnb29kIGZlZWxpbmcuIEl0J3MKYWx3YXlzIHVucGxlYXNhbnQgZm9yIHRoZSBwZXJzb24gd2hvIGRpZCB0aGUgd29yaywgYW5kIGl0IGlzIHVucGxlYXNhbnQgZm9yIG1lCnRvbyBiZWNhdXNlIEkgdmFsdWUgcGVvcGxlJ3MgdGltZSBhbmQgZWZmb3J0cy4gVGhhdCB3b3VsZCBub3QgaGFwcGVuIGlmIHRoZXNlCndlcmUgZGlzY3Vzc2VkIGZpcnN0LiBUaGVyZSBpcyBubyBwcm9ibGVtIHBvc3Rpbmcgd29yayBpbiBwcm9ncmVzcyB0byB0aGUgbGlzdCwKaXQgaGFwcGVucyBxdWl0ZSBvZnRlbiBpbiBmYWN0LiBBbHNvLCBkb24ndCB3YXN0ZSB5b3VyIHRpbWUgd2l0aCB0aGUgZG9jIHdoZW4Kc3VibWl0dGluZyBwYXRjaGVzIGZvciByZXZpZXcsIG9ubHkgYWRkIHRoZSBkb2Mgd2l0aCB0aGUgcGF0Y2ggeW91IGNvbnNpZGVyCnJlYWR5IHRvIG1lcmdlLgoKQW5vdGhlciBpbXBvcnRhbnQgcG9pbnQgY29uY2VybnMgY29kZSBwb3J0YWJpbGl0eS4gSGFwcm94eSByZXF1aXJlcyBnY2MgYXMgdGhlCkMgY29tcGlsZXIsIGFuZCBtYXkgb3IgbWF5IG5vdCB3b3JrIHdpdGggb3RoZXIgY29tcGlsZXJzLiBIb3dldmVyIGl0J3Mga25vd24KdG8gYnVpbGQgdXNpbmcgZ2NjIDIuOTUgb3IgYW55IGxhdGVyIHZlcnNpb24uIEFzIHN1Y2gsIGl0IGlzIGltcG9ydGFudCB0byBrZWVwCmluIG1pbmQgdGhhdCBjZXJ0YWluIGZhY2lsaXRpZXMgb2ZmZXJlZCBieSByZWNlbnQgdmVyc2lvbnMgbXVzdCBub3QgYmUgdXNlZCBpbgp0aGUgY29kZSA6CgogIC0gZGVjbGFyYXRpb25zIG1peGVkIGluIHRoZSBjb2RlIChyZXF1aXJlcyBnY2MgPj0gMy54KQogIC0gR0NDIGJ1aWx0aW5zIHdpdGhvdXQgY2hlY2tpbmcgZm9yIHRoZWlyIGF2YWlsYWJpbGl0eSBiYXNlZCBvbiB2ZXJzaW9uIGFuZAogICAgYXJjaGl0ZWN0dXJlIDsKICAtIGFzc2VtYmx5IGNvZGUgd2l0aG91dCBhbnkgYWx0ZXJuYXRlIHBvcnRhYmxlIGZvcm0gZm9yIG90aGVyIHBsYXRmb3JtcwogIC0gdXNlIG9mIHN0ZGJvb2wuaCwgImJvb2wiLCAiZmFsc2UiLCAidHJ1ZSIgOiBzaW1wbHkgdXNlICJpbnQiLCAiMCIsICIxIgogIC0gaW4gZ2VuZXJhbCwgYW55dGhpbmcgd2hpY2ggcmVxdWlyZXMgQzk5IChzdWNoIGFzIGRlY2xhcmluZyB2YXJpYWJsZXMgaW4KICAgICJmb3IiIHN0YXRlbWVudHMpCgpTaW5jZSBtb3N0IG9mIHRoZXNlIHJlc3RyaWN0aW9ucyBhcmUganVzdCBhIG1hdHRlciBvZiBjb2Rpbmcgc3R5bGUsIGl0IGlzCm5vcm1hbGx5IG5vdCBhIHByb2JsZW0gdG8gY29tcGx5LgoKSWYgeW91ciB3b3JrIGlzIHZlcnkgY29uZmlkZW50aWFsIGFuZCB5b3UgY2FuJ3QgcHVibGljbHkgZGlzY3VzcyBpdCwgeW91IGNhbgphbHNvIG1haWwgbWUgZGlyZWN0bHkgYWJvdXQgaXQsIGJ1dCB5b3VyIG1haWwgbWF5IGJlIHdhaXRpbmcgc2V2ZXJhbCBkYXlzIGluCnRoZSBxdWV1ZSBiZWZvcmUgeW91IGdldCBhIHJlc3BvbnNlLgoKSWYgeW91J2QgbGlrZSBhIGZlYXR1cmUgdG8gYmUgYWRkZWQgYnV0IHlvdSB0aGluayB5b3UgZG9uJ3QgaGF2ZSB0aGUgc2tpbGxzIHRvCmltcGxlbWVudCBpdCB5b3Vyc2VsZiwgeW91IHNob3VsZCBmb2xsb3cgdGhlc2Ugc3RlcHMgOgoKICAgIDEuIGRpc2N1c3MgdGhlIGZlYXR1cmUgb24gdGhlIG1haWxpbmcgbGlzdC4gSXQgaXMgcG9zc2libGUgdGhhdCBzb21lb25lCiAgICAgICBlbHNlIGhhcyBhbHJlYWR5IGltcGxlbWVudGVkIGl0LCBvciB0aGF0IHNvbWVvbmUgd2lsbCB0ZWxsIHlvdSBob3cgdG8KICAgICAgIHByb2NlZWQgd2l0aG91dCBpdCwgb3IgZXZlbiB3aHkgbm90IHRvIGRvIGl0LiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQKICAgICAgIGluIGZhY3QgaXQncyBxdWl0ZSBlYXN5IHRvIGltcGxlbWVudCBhbmQgcGVvcGxlIHdpbGwgZ3VpZGUgeW91IHRocm91Z2gKICAgICAgIHRoZSBwcm9jZXNzLiBUaGF0IHdheSB5b3UnbGwgZmluYWxseSBoYXZlIFlPVVIgcGF0Y2ggbWVyZ2VkLCBwcm92aWRpbmcKICAgICAgIHRoZSBmZWF0dXJlIFlPVSBuZWVkLgoKICAgIDIuIGlmIHlvdSByZWFsbHkgY2FuJ3QgY29kZSBpdCB5b3Vyc2VsZiBhZnRlciBkaXNjdXNzaW5nIGl0LCB0aGVuIHlvdSBtYXkKICAgICAgIGNvbnNpZGVyIGNvbnRhY3Rpbmcgc29tZW9uZSB0byBkbyB0aGUgam9iIGZvciB5b3UuIFNvbWUgcGVvcGxlIG9uIHRoZQogICAgICAgbGlzdCBtaWdodCBiZSBPSyB3aXRoIHRyeWluZyB0byBkbyBpdC4gT3RoZXJ3aXNlLCB5b3UgY2FuIGNoZWNrIHRoZSBsaXN0CiAgICAgICBvZiBjb250cmlidXRvcnMgYXQgdGhlIFVSTCBiZWxvdywgc29tZSBvZiB0aGUgcmVndWxhciBjb250cmlidXRvcnMgbWF5CiAgICAgICBiZSBhYmxlIHRvIGRvIHRoZSB3b3JrLCBwcm9iYWJseSBub3QgZm9yIGZyZWUgYnV0IHRoZWlyIHRpbWUgaXMgYXMgbXVjaAogICAgICAgdmFsdWFibGUgYXMgeW91cnMgYWZ0ZXIgYWxsLCB5b3UgY2FuJ3QgZWF0IHRoZSBjYWtlIGFuZCBoYXZlIGl0IHRvby4KClRoZSBsaXN0IG9mIHBhc3QgYW5kIHJlZ3VsYXIgY29udHJpYnV0b3JzIGlzIGF2YWlsYWJsZSBiZWxvdy4gSXQgbGlzdHMgbm90IG9ubHkKc2lnbmlmaWNhbnQgY29kZSBjb250cmlidXRpb25zIChmZWF0dXJlcywgZml4ZXMpLCBidXQgYWxzbyB0aW1lIG9yIG1vbmV5CmRvbmF0aW9ucyA6CgogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vaGFwcm94eS4xd3QuZXUvY29udHJpYi5odG1sCgpOb3RlIHRvIGNvbnRyaWJ1dG9yczogaXQncyB2ZXJ5IGhhbmR5IHdoZW4gcGF0Y2hlcyBjb21lcyB3aXRoIGEgcHJvcGVybHkKZm9ybWF0ZWQgc3ViamVjdC4gVGhlcmUgYXJlIDMgY3JpdGVyaWEgb2YgcGFydGljdWxhciBpbXBvcnRhbmNlIGluIGFueSBwYXRjaCA6CgogIC0gaXRzIG5hdHVyZSAoaXMgaXQgYSBmaXggZm9yIGEgYnVnLCBhIG5ldyBmZWF0dXJlLCBhbiBvcHRpbWl6YXRpb24sIC4uLikKICAtIGl0cyBpbXBvcnRhbmNlLCB3aGljaCBnZW5lcmFsbHkgcmVmbGVjdHMgdGhlIHJpc2sgb2YgbWVyZ2luZy9ub3QgbWVyZ2luZyBpdAogIC0gd2hhdCBhcmVhIGl0IGFwcGxpZXMgdG8gKGVnOiBodHRwLCBzdGF0cywgc3RhcnR1cCwgY29uZmlnLCBkb2MsIC4uLikKCkl0J3MgaW1wb3J0YW50IHRvIG1ha2UgdGhlc2UgMyBjcml0ZXJpYSBlYXN5IHRvIHNwb3QgaW4gdGhlIHBhdGNoJ3Mgc3ViamVjdCwKYmVjYXVzZSBpdCdzIHRoZSBmaXJzdCAoYW5kIHNvbWV0aW1lcyB0aGUgb25seSkgdGhpbmcgd2hpY2ggaXMgcmVhZCB3aGVuCnJldmlld2luZyBwYXRjaGVzIHRvIGZpbmQgd2hpY2ggb25lcyBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgdG8gb2xkZXIgdmVyc2lvbnMuCgpTcGVjaWZpY2FsbHksIGJ1Z3MgbXVzdCBiZSBjbGVhcmx5IGVhc3kgdG8gc3BvdCBzbyB0aGF0IHRoZXkncmUgbmV2ZXIgbWlzc2VkLgpBbnkgcGF0Y2ggZml4aW5nIGEgYnVnIG11c3QgaGF2ZSB0aGUgIkJVRyIgdGFnIGluIGl0cyBzdWJqZWN0LiBNb3N0IGNvbW1vbgpwYXRjaCB0eXBlcyBpbmNsdWRlIDoKCiAgLSBCVUcgICAgICBmaXggZm9yIGEgYnVnLiBUaGUgc2V2ZXJpdHkgb2YgdGhlIGJ1ZyBzaG91bGQgYWxzbyBiZSBpbmRpY2F0ZWQKICAgICAgICAgICAgIHdoZW4ga25vd24uIFNpbWlsYXJseSwgaWYgYSBiYWNrcG9ydCBpcyBuZWVkZWQgdG8gb2xkZXIgdmVyc2lvbnMsCiAgICAgICAgICAgICBpdCBzaG91bGQgYmUgaW5kaWNhdGVkIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLiBJZgogICAgICAgICAgICAgdGhlIGJ1ZyBoYXMgYmVlbiBpZGVudGlmaWVkIGFzIGEgcmVncmVzc2lvbiBicm91Z2h0IGJ5IGEgc3BlY2lmaWMKICAgICAgICAgICAgIHBhdGNoIG9yIHZlcnNpb24sIHRoaXMgaW5kaWNhdGlvbiB3aWxsIGJlIGFwcHJlY2lhdGVkIHRvby4gTmV3CiAgICAgICAgICAgICBtYWludGVuYW5jZSByZWxlYXNlcyBhcmUgZ2VuZXJhbGx5IGVtaXR0ZWQgd2hlbiBhIGZldyBvZiB0aGVzZQogICAgICAgICAgICAgcGF0Y2hlcyBhcmUgbWVyZ2VkLgoKICAtIENMRUFOVVAgIGNvZGUgY2xlYW51cCwgc2lsZW5jZSBvZiB3YXJuaW5ncywgZXRjLi4uIHRoZW9yaWNhbGx5IG5vIGltcGFjdC4KICAgICAgICAgICAgIFRoZXNlIHBhdGNoZXMgd2lsbCByYXJlbHkgYmUgc2VlbiBpbiBzdGFibGUgYnJhbmNoZXMsIHRob3VnaCB0aGV5CiAgICAgICAgICAgICBtYXkgYXBwZWFyIHdoZW4gdGhleSByZW1vdmUgc29tZSBhbm5veWFuY2Ugb3Igd2hlbiB0aGV5IG1ha2UKICAgICAgICAgICAgIGJhY2twb3J0aW5nIGVhc2llci4gQnkgbmF0dXJlLCBhIGNsZWFudXAgaXMgYWx3YXlzIG1pbm9yLgoKICAtIFJFT1JHICAgIGNvZGUgcmVvcmdhbml6YXRpb24uIFNvbWUgYmxvY2tzIG1heSBiZSBtb3ZlZCB0byBvdGhlciBwbGFjZXMsCiAgICAgICAgICAgICBzb21lIGltcG9ydGFudCBjaGVja3MgbWlnaHQgYmUgc3dhcHBlZCwgZXRjLi4uIFRoZXNlIGNoYW5nZXMKICAgICAgICAgICAgIGFsd2F5cyBwcmVzZW50IGEgcmlzayBvZiByZWdyZXNzaW9uLiBGb3IgdGhpcyByZWFzb24sIHRoZXkgc2hvdWxkCiAgICAgICAgICAgICBuZXZlciBiZSBtaXhlZCB3aXRoIGFueSBidWcgZml4IG5vciBmdW5jdGlvbmFsIGNoYW5nZS4gQ29kZSBpcwogICAgICAgICAgICAgb25seSBtb3ZlZCBhcy1pcy4gSW5kaWNhdGluZyB0aGUgcmlzayBvZiBicmVha2FnZSBpcyBoaWdobHkKICAgICAgICAgICAgIHJlY29tbWVuZGVkLgoKICAtIEJVSUxEICAgIHVwZGF0ZXMgb3IgZml4ZXMgZm9yIGJ1aWxkIGlzc3Vlcy4gQ2hhbmdlcyB0byBtYWtlZmlsZXMgYWxzbyBmYWxsCiAgICAgICAgICAgICBpbnRvIHRoaXMgY2F0ZWdvcnkuIFRoZSByaXNrIG9mIGJyZWFrYWdlIHNob3VsZCBiZSBpbmRpY2F0ZWQgaWYKICAgICAgICAgICAgIGtub3duLiBJdCBpcyBhbHNvIGFwcHJlY2lhdGVkIHRvIGluZGljYXRlIHdoYXQgcGxhdGZvcm1zIGFuZC9vcgogICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgd2VyZSB0ZXN0ZWQgYWZ0ZXIgdGhlIGNoYW5nZS4KCiAgLSBPUFRJTSAgICBzb21lIGNvZGUgd2FzIG9wdGltaXNlZC4gU29tZXRpbWVzIGlmIHRoZSByZWdyZXNzaW9uIHJpc2sgaXMgdmVyeQogICAgICAgICAgICAgbG93IGFuZCB0aGUgZ2FpbnMgc2lnbmlmaWNhbnQsIHN1Y2ggcGF0Y2hlcyBtYXkgYmUgbWVyZ2VkIGluIHRoZQogICAgICAgICAgICAgc3RhYmxlIGJyYW5jaC4gRGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgY29kZSBjaGFuZ2VkIG9yIHJlcGxhY2VkCiAgICAgICAgICAgICBhbmQgdGhlIGxldmVsIG9mIHRydXN0IHRoZSBhdXRob3IgaGFzIGluIHRoZSBjaGFuZ2UsIHRoZSByaXNrIG9mCiAgICAgICAgICAgICByZWdyZXNzaW9uIHNob3VsZCBiZSBpbmRpY2F0ZWQuCgogIC0gUkVMRUFTRSAgcmVsZWFzZSBvZiBhIG5ldyB2ZXJzaW9uIChkZXZlbG9wbWVudCBvciBzdGFibGUpLgoKICAtIExJQ0VOU0UgIGxpY2Vuc2luZyB1cGRhdGVzIChtYXkgaW1wYWN0IGRpc3RybyBwYWNrYWdlcnMpLgoKCldoZW4gdGhlIHBhdGNoIGNhbm5vdCBiZSBjYXRlZ29yaXplZCwgaXQncyBiZXN0IG5vdCB0byBwdXQgYW55IHRhZy4gVGhpcyBpcwpjb21tb25seSB0aGUgY2FzZSBmb3IgbmV3IGZlYXR1cmVzLCB3aGljaCBkZXZlbG9wbWVudCB2ZXJzaW9ucyBhcmUgbW9zdGx5IG1hZGUKb2YuCgpBZGRpdGlvbmFsbHksIHRoZSBpbXBvcnRhbmNlIG9mIHRoZSBwYXRjaCBzaG91bGQgYmUgaW5kaWNhdGVkIHdoZW4ga25vd24uIEEKc2luZ2xlIHVwcGVyLWNhc2Ugd29yZCBpcyBwcmVmZXJyZWQsIGFtb25nIDoKCiAgLSBNSU5PUiAgICBtaW5vciBjaGFuZ2UsIHZlcnkgbG93IHJpc2sgb2YgaW1wYWN0LiBJdCBpcyBvZnRlbiB0aGUgY2FzZSBmb3IKICAgICAgICAgICAgIGNvZGUgYWRkaXRpb25zIHRoYXQgZG9uJ3QgdG91Y2ggbGl2ZSBjb2RlLiBGb3IgYSBidWcsIGl0IGdlbmVyYWxseQogICAgICAgICAgICAgaW5kaWNhdGVzIGFuIGFubm95YW5jZSwgbm90aGluZyBtb3JlLgoKICAtIE1FRElVTSAgIG1lZGl1bSByaXNrLCBtYXkgY2F1c2UgdW5leHBlY3RlZCByZWdyZXNzaW9ucyBvZiBsb3cgaW1wb3J0YW5jZSBvcgogICAgICAgICAgICAgd2hpY2ggbWF5IHF1aWNrbHkgYmUgZGlzY292ZXJlZC4gRm9yIGEgYnVnLCBpdCBnZW5lcmFsbHkgaW5kaWNhdGVzCiAgICAgICAgICAgICBzb21ldGhpbmcgb2RkIHdoaWNoIHJlcXVpcmVzIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uIGluIGFuCiAgICAgICAgICAgICB1bmRlc2lyZWQgd2F5IHRvIHdvcmsgYXJvdW5kIHRoZSBpc3N1ZS4KCiAgLSBNQUpPUiAgICBtYWpvciByaXNrIG9mIGhpZGRlbiByZWdyZXNzaW9uLiBUaGlzIGhhcHBlbnMgd2hlbiBJIHJlYXJyYW5nZQogICAgICAgICAgICAgbGFyZ2UgcGFydHMgb2YgY29kZSwgd2hlbiBJIHBsYXkgd2l0aCB0aW1lb3V0cywgd2l0aCB2YXJpYWJsZQogICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25zLCBldGMuLi4gV2Ugc2hvdWxkIG9ubHkgZXhjZXB0aW9uYWxseSBmaW5kIHN1Y2gKICAgICAgICAgICAgIHBhdGNoZXMgaW4gc3RhYmxlIGJyYW5jaGVzLiBGb3IgYSBidWcsIGl0IGluZGljYXRlcyBzZXZlcmUKICAgICAgICAgICAgIHJlbGlhYmlsaXR5IGlzc3VlcyBmb3Igd2hpY2ggd29ya2Fyb3VuZHMgYXJlIGlkZW50aWZpZWQgd2l0aCBvcgogICAgICAgICAgICAgd2l0aG91dCBwZXJmb3JtYW5jZSBpbXBhY3RzLgoKICAtIENSSVRJQ0FMIG1lZGl1bS10ZXJtIHJlbGlhYmlsaXR5IG9yIHNlY3VyaXR5IGlzIGF0IHJpc2sgYW5kIHdvcmthcm91bmRzLAogICAgICAgICAgICAgaWYgdGhleSBleGlzdCwgbWlnaHQgbm90IGFsd2F5cyBiZSBhY2NlcHRhYmxlLiBBbiB1cGdyYWRlIGlzCiAgICAgICAgICAgICBhYnNvbHV0ZWx5IHJlcXVpcmVkLiBBIG1haW50ZW5hbmNlIHJlbGVhc2UgbWF5IGJlIGVtaXR0ZWQgZXZlbiBpZgogICAgICAgICAgICAgb25seSBvbmUgb2YgdGhlc2UgYnVncyBhcmUgZml4ZWQuIE5vdGUgdGhhdCB0aGlzIHRhZyBpcyBvbmx5IHVzZWQKICAgICAgICAgICAgIHdpdGggYnVncy4gU3VjaCBwYXRjaGVzIG11c3QgaW5kaWNhdGUgd2hhdCBpcyB0aGUgZmlyc3QgdmVyc2lvbgogICAgICAgICAgICAgYWZmZWN0ZWQsIGFuZCBpZiBrbm93biwgdGhlIGNvbW1pdCBJRCB3aGljaCBpbnRyb2R1Y2VkIHRoZSBpc3N1ZS4KCklmIHRoaXMgY3JpdGVyaW9uIGRvZXNuJ3QgYXBwbHksIGl0J3MgYmVzdCBub3QgdG8gcHV0IGl0LiBGb3IgaW5zdGFuY2UsIG1vc3QKZG9jIHVwZGF0ZXMgYW5kIG1vc3QgZXhhbXBsZXMgb3IgdGVzdCBmaWxlcyBhcmUganVzdCBhZGRlZCBvciB1cGRhdGVkIHdpdGhvdXQKYW55IG5lZWQgdG8gcXVhbGlmeSBhIGxldmVsIG9mIGltcG9ydGFuY2UuCgpUaGUgYXJlYSB0aGUgcGF0Y2ggYXBwbGllcyB0byBpcyBxdWl0ZSBpbXBvcnRhbnQsIGJlY2F1c2Ugc29tZSBhcmVhcyBhcmUga25vd24KdG8gYmUgc2ltaWxhciBpbiBvbGRlciB2ZXJzaW9ucywgc3VnZ2VzdGluZyBhIGJhY2twb3J0IG1pZ2h0IGJlIGRlc2lyYWJsZSwgYW5kCmNvbnZlcnNlbHksIHNvbWUgYXJlYXMgYXJlIGtub3duIHRvIGJlIHNwZWNpZmljIHRvIG9uZSB2ZXJzaW9uLiBXaGVuIHRoZSB0YWcgaXMKdXNlZCBhbG9uZSwgdXBwZXJjYXNlIGlzIHByZWZlcnJlZCBmb3IgcmVhZGFiaWxpdHksIG90aGVyd2lzZSBsb3dlcmNhc2UgaXMgZmluZQp0b28uIFRoZSBmb2xsb3dpbmcgdGFncyBhcmUgc3VnZ2VzdGVkIGJ1dCBub3QgbGltaXRhdGl2ZSA6CgogLSBkb2MgICAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIG9yIGZpeGVzLiBObyBjb2RlIGlzIGFmZmVjdGVkLCBubyBuZWVkIHRvCiAgICAgICAgICAgICB1cGdyYWRlLiBUaGVzZSBwYXRjaGVzIGNhbiBhbHNvIGJlIHNlbnQgcmlnaHQgYWZ0ZXIgYSBuZXcgZmVhdHVyZSwKICAgICAgICAgICAgIHRvIGRvY3VtZW50IGl0LgoKIC0gZXhhbXBsZXMgIGV4YW1wbGUgZmlsZXMuIEJlIGNhcmVmdWwsIHNvbWV0aW1lcyB0aGVzZSBmaWxlcyBhcmUgcGFja2FnZWQuCgogLSB0ZXN0cyAgICAgcmVncmVzc2lvbiB0ZXN0IGZpbGVzLiBObyBjb2RlIGlzIGFmZmVjdGVkLCBubyBuZWVkIHRvIHVwZ3JhZGUuCgogLSBpbml0ICAgICAgaW5pdGlhbGl6YXRpb24gY29kZSwgYXJndW1lbnRzIHBhcnNpbmcsIGV0Yy4uLgoKIC0gY29uZmlnICAgIGNvbmZpZ3VyYXRpb24gcGFyc2VyLCBtb3N0bHkgdXNlZCB3aGVuIGFkZGluZyBuZXcgY29uZmlnIGtleXdvcmRzCgogLSBodHRwICAgICAgdGhlIEhUVFAgZW5naW5lCgogLSBzdGF0cyAgICAgdGhlIHN0YXRzIHJlcG9ydGluZyBlbmdpbmUgYXMgd2VsbCBhcyB0aGUgc3RhdHMgc29ja2V0IENMSQoKIC0gY2hlY2tzICAgIHRoZSBoZWFsdGggY2hlY2tzIGVuZ2luZSAoZWc6IHdoZW4gYWRkaW5nIG5ldyBjaGVja3MpCgogLSBhY2wgICAgICAgdGhlIEFDTCBwcm9jZXNzaW5nIGNvcmUgb3Igc29tZSBBQ0xzIGZyb20gb3RoZXIgYXJlYXMKCiAtIHBlZXJzICAgICB0aGUgcGVlciBzeW5jaHJvbml6YXRpb24gZW5naW5lCgogLSBsaXN0ZW5lcnMgZXZlcnl0aGluZyByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gc2V0dGluZ3MKCiAtIGZyb250ZW5kICBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gaW5jb21pbmcgY29ubmVjdGlvbiBwcm9jZXNzaW5nCgogLSBiYWNrZW5kICAgZXZlcnl0aGluZyByZWxhdGVkIHRvIExCIGFsZ29yaXRobXMgYW5kIHNlcnZlciBmYXJtCgogLSBzZXNzaW9uICAgc2Vzc2lvbiBwcm9jZXNzaW5nIGFuZCBmbGFncyAodmVyeSBzZW5zaWJsZSwgYmUgY2FyZWZ1bCkKCiAtIHNlcnZlciAgICBzZXJ2ZXIgY29ubmVjdGlvbiBtYW5hZ2VtZW50LCBxdWV1ZWluZwoKIC0gcHJveHkgICAgIHByb3h5IG1haW50ZW5hbmNlIChzdGFydC9zdG9wKQoKIC0gbG9nICAgICAgIGxvZyBtYW5hZ2VtZW50CgogLSBwb2xsICAgICAgYW55IG9mIHRoZSBwb2xsZXJzCgogLSBoYWxvZyAgICAgdGhlIGhhbG9nIHN1Yi1jb21wb25lbnQgaW4gdGhlIGNvbnRyaWIgZGlyZWN0b3J5CgogLSBjb250cmliICAgYW55IGFkZGl0aW9uIHRvIHRoZSBjb250cmliIGRpcmVjdG9yeQoKT3RoZXIgbmFtZXMgbWF5IGJlIGludmVudGVkIHdoZW4gbW9yZSBwcmVjaXNlIGluZGljYXRpb25zIGFyZSBtZWFuaW5nZnVsLCBmb3IKaW5zdGFuY2UgOiAiY29va2llIiB3aGljaCBpbmRpY2F0ZXMgY29va2llIHByb2Nlc3NpbmcgaW4gdGhlIEhUVFAgY29yZS4gTGFzdCwKaW5kaWNhdGluZyB0aGUgbmFtZSBvZiB0aGUgYWZmZWN0ZWQgZmlsZSBpcyBhbHNvIGEgZ29vZCB3YXkgdG8gcXVpY2tseSBzcG90CmNoYW5nZXMuIE1hbnkgY29tbWl0cyB3ZXJlIGFscmVhZHkgdGFnZ2VkIHdpdGggInN0cmVhbV9zb2NrIiBvciAiY2ZncGFyc2UiIGZvcgppbnN0YW5jZS4KCkl0IGlzIGRlc2lyZWQgdGhhdCBBVCBMRUFTVCBvbmUgb2YgdGhlIDMgY3JpdGVyaWEgdGFncyBpcyByZXBvcnRlZCBpbiB0aGUgcGF0Y2gKc3ViamVjdC4gSWRlYWxseSwgd2Ugd291bGQgaGF2ZSB0aGUgMyBtb3N0IG9mdGVuLiBUaGUgdHdvIGZpcnN0IGNyaXRlcmlhIHNob3VsZApiZSBwcmVzZW50IGJlZm9yZSBhIGZpcnN0IGNvbG9uICgnOicpLiBJZiBib3RoIGFyZSBwcmVzZW50LCB0aGVuIHRoZXkgc2hvdWxkIGJlCmRlbGltaXRlZCB3aXRoIGEgc2xhc2ggKCcvJykuIFRoZSAzcmQgY3JpdGVyaW9uIChhcmVhKSBzaG91bGQgYXBwZWFyIG5leHQsIGFsc28KZm9sbG93ZWQgYnkgYSBjb2xvbi4gVGh1cywgYWxsIG9mIHRoZSBmb2xsb3dpbmcgbWVzc2FnZXMgYXJlIHZhbGlkIDoKCkV4YW1wbGVzIG9mIG1lc3NhZ2VzIDoKICAtIERPQzogZG9jdW1lbnQgb3B0aW9ucyBmb3J3YXJkZm9yIHRvIGxvZ2FzYXAKICAtIERPQy9NQUpPUjogcmVvcmdhbml6ZSB0aGUgd2hvbGUgZG9jdW1lbnQgYW5kIGNoYW5nZSBpbmRlbnRpbmcKICAtIEJVRzogc3RhdHM6IGNvbm5lY3Rpb24gcmVzZXQgY291bnRlcnMgbXVzdCBiZSBwbGFpbiBhc2NpaSwgbm90IEhUTUwKICAtIEJVRy9NSU5PUjogc3RhdHM6IGNvbm5lY3Rpb24gcmVzZXQgY291bnRlcnMgbXVzdCBiZSBwbGFpbiBhc2NpaSwgbm90IEhUTUwKICAtIE1FRElVTTogY2hlY2tzOiBzdXBwb3J0IG11bHRpLXBhY2tldCBoZWFsdGggY2hlY2sgcmVzcG9uc2VzCiAgLSBSRUxFQVNFOiBSZWxlYXNlZCB2ZXJzaW9uIDEuNC4yCiAgLSBCVUlMRDogc3RhdHM6IHN0ZGludCBpcyBub3QgcHJlc2VudCBvbiBzb2xhcmlzCiAgLSBPUFRJTS9NSU5PUjogaGFsb2c6IG1ha2UgZmdldHMgcGFyc2UgbW9yZSBieXRlcyBieSBibG9ja3MKICAtIFJFT1JHL01FRElVTTogbW92ZSBzeXNjYWxsIHJlZGVmaW5pdGlvbiB0byBzcGVjaWZpYyBwbGFjZXMKClBsZWFzZSBkbyBub3QgdXNlIHNxdWFyZSBicmFja2V0cyBhbnltb3JlIGFyb3VuZCB0aGUgdGFncywgYmVjYXVzZSB0aGV5IGdpdmUgbWUKbW9yZSB3b3JrIHdoZW4gbWVyZ2luZyBwYXRjaGVzLiBCeSBkZWZhdWx0IEknbSBhc2tpbmcgR2l0IHRvIGtlZXAgdGhlbSBidXQgdGhpcwpjYXVzZXMgdHJvdWJsZSB3aGVuIHBhdGNoZXMgYXJlIHByZWZpeGVkIHdpdGggdGhlIFtQQVRDSF0gdGFnIGJlY2F1c2UgaW4gb3JkZXIKbm90IHRvIHN0b3JlIGl0LCBJIGhhdmUgdG8gaGFuZC1lZGl0IHRoZSBwYXRjaGVzLiBTbyBhcyBvZiBub3csIEkgd2lsbCBhc2sgR2l0CnRvIHJlbW92ZSB3aGF0ZXZlciBpcyBsb2NhdGVkIGJldHdlZW4gc3F1YXJlIGJyYWNrZXRzLCB3aGljaCBpbXBsaWVzIHRoYXQgYW55CnN1YmplY3QgZm9ybWF0dGVkIHRoZSBvbGQgd2F5IHdpbGwgaGF2ZSBpdHMgdGFnIHN0cmlwcGVkIG91dC4KCkluIGZhY3QsIG9uZSBvZiB0aGUgb25seSBzcXVhcmUgYnJhY2tldCB0YWdzIHRoYXQgc3RpbGwgbWFrZXMgc2Vuc2UgaXMgJ1tSRkNdJwphdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0LCB3aGVuIHlvdSdyZSBhc2tpbmcgZm9yIHNvbWVvbmUgdG8gcmV2aWV3IHlvdXIKY2hhbmdlIGJlZm9yZSBnZXR0aW5nIGl0IG1lcmdlZC4gSWYgdGhlIHBhdGNoIGlzIE9LIHRvIGJlIG1lcmdlZCwgdGhlbiBJIGNhbgptZXJnZSBpdCBhcy1pcyBhbmQgdGhlICdbUkZDXScgdGFnIHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkLiBJZiB5b3UgZG9uJ3QKd2FudCBpdCB0byBiZSBtZXJnZWQgYXQgYWxsLCB5b3UgY2FuIHNpbXBseSBzdGF0ZSBpdCBpbiB0aGUgbWVzc2FnZSwgb3IgdXNlIGFuCmFsdGVybmF0ZSAnW1dJUF0nIHRhZyAoIndvcmsgaW4gcHJvZ3Jlc3MiKS4KClRoZSB0YWdzIGFyZSBub3QgcmlnaWQsIGZvbGxvdyB5b3VyIGludHVpdGlvbiBmaXJzdCwgYW55d2F5IEkgcmVzZXJ2ZSB0aGUgcmlnaHQKdG8gY2hhbmdlIHRoZW0gd2hlbiBtZXJnaW5nIHRoZSBwYXRjaC4gSXQgbWF5IGhhcHBlbiB0aGF0IGEgc2FtZSBwYXRjaCBoYXMgYQpkaWZmZXJlbnQgdGFnIGluIHR3byBkaXN0aW5jdCBicmFuY2hlcy4gVGhlIHJlYXNvbiBpcyB0aGF0IGEgYnVnIGluIG9uZSBicmFuY2gKbWF5IGp1c3QgYmUgYSBjbGVhbnVwIGluIHRoZSBvdGhlciBvbmUgYmVjYXVzZSB0aGUgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkLgoKCkZvciBhIG1vcmUgZWZmaWNpZW50IGludGVyYWN0aW9uIGJldHdlZW4gdGhlIG1haW5saW5lIGNvZGUgYW5kIHlvdXIgY29kZSwgSSBjYW4Kb25seSBzdHJvbmdseSBlbmNvdXJhZ2UgeW91IHRvIHRyeSB0aGUgR2l0IHZlcnNpb24gY29udHJvbCBzeXN0ZW0gOgoKICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2dpdC1zY20uY29tLwoKSXQncyB2ZXJ5IGZhc3QsIGxpZ2h0d2VpZ2h0IGFuZCBsZXRzIHlvdSB1bmRvL3JlZG8geW91ciB3b3JrIGFzIG9mdGVuIGFzIHlvdQp3YW50LCB3aXRob3V0IG1ha2luZyB5b3VyIG1pc3Rha2VzIHZpc2libGUgdG8gdGhlIHJlc3Qgb2YgdGhlIHdvcmxkLiBJdCB3aWxsCmRlZmluaXRlbHkgaGVscCB5b3UgY29udHJpYnV0ZSBxdWFsaXR5IGNvZGUgYW5kIHRha2Ugb3RoZXIgcGVvcGxlJ3MgZmVlZGJhY2sKaW4gY29uc2lkZXJhdGlvbi4gSW4gb3JkZXIgdG8gY2xvbmUgdGhlIEhBUHJveHkgR2l0IHJlcG9zaXRvcnkgOgoKICAgICQgZ2l0IGNsb25lIGh0dHA6Ly9naXQuMXd0LmV1L2dpdC9oYXByb3h5LTEuNC5naXQgICAgKHN0YWJsZSAxLjQpCiAgICAkIGdpdCBjbG9uZSBodHRwOi8vZ2l0LjF3dC5ldS9naXQvaGFwcm94eS5naXQvICAgICAgIChkZXZlbG9wbWVudCkKClRoZSBzaXRlIGFib3ZlIGlzIHNsb3csIGEgZmFzdGVyIG1pcnJvciBpcyBtYWludGFpbmVkIHVwIHRvIGRhdGUgaGVyZSA6CgogICAgJCBnaXQgY2xvbmUgaHR0cDovL21hc3Rlci5mb3JtaWx1eC5vcmcvZ2l0L3Blb3BsZS93aWxseS9oYXByb3h5LmdpdC8KCklmIHlvdSBkZWNpZGUgdG8gdXNlIEdpdCBmb3IgeW91ciBkZXZlbG9wbWVudHMsIHRoZW4geW91ciBjb21taXQgbWVzc2FnZXMgd2lsbApoYXZlIHRoZSBzdWJqZWN0IGxpbmUgaW4gdGhlIGZvcm1hdCBkZXNjcmliZWQgYWJvdmUsIHRoZW4gdGhlIHdob2xlIGRlc2NyaXB0aW9uCm9mIHlvdXIgd29yayAobWFpbmx5IHdoeSB5b3UgZGlkIGl0KSB3aWxsIGJlIGluIHRoZSBib2R5LiBZb3UgY2FuIGRpcmVjdGx5IHNlbmQKeW91ciBjb21taXRzIHRvIHRoZSBtYWlsaW5nIGxpc3QsIHRoZSBmb3JtYXQgaXMgY29udmVuaWVudCB0byByZWFkIGFuZCBwcm9jZXNzLgoKLS0gZW5kCg==