Skip to content

Instantly share code, notes, and snippets.

@OOMM
Last active May 1, 2016 02:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save OOMM/77b46bc1a2feeaa01452 to your computer and use it in GitHub Desktop.
Save OOMM/77b46bc1a2feeaa01452 to your computer and use it in GitHub Desktop.
dyfz0aGiuCjuc(KGkmkr0PeHvrPa8kQKAwOIBjrTlu1Veurmme0XqLwMGYZuuzAkQ6AkkTnjI(gvIghkHoNuuwhLsVtIW8uuO6EOu7tqfPbsPa6GsHfkLQhsLKjsPOlIsQnkLYhfPgPGkDsuIwPu9skfOzkf5MujStLYpvQyOkk6OkkelvPs9uLmve6QOKSvkf0xLsgRIcPoRGkQ1QOqYBrG5QOq5UkvTxK(Regm5WcTyb6XkYKr0Lv1MPs9zkvJwKCArTAff8AjsZMkUnLSBk(TKgUGSCfEov10v56uLTtPqFxqvJxaDEby9sr17vQe3xPsA)WuUuI0vKsKE0LpDzdm0Ood)0v2g)HFUASbsxw0fjDrsjsxbUJB3()rBRSlNVzCNJWMXIUC(M5sclj3zPUlp)80va742T)F02kZIZoxyHXnS5CzZimSzNRznJ6U88ZsxJ3EUAigqONUSpQEHORpWqrd5tsBNU8Fh3ZSMnhD1(oejUJlAI1TrKUIKK5lxnrNIBKTB)h(uI0JUYK01o74cxa1euR4WPovQTq28TQMQt1Ea2czZ3QAGiMT(HpDz8SioY2T)dF6gx6YPgjPePRl68MJsKUS8CUmLi9OhD55)ftorFF66gEpDnItpLiDz55Czkr6rp6YDC6YvdLiDz55Czkr6rp6AYj67tjsx(zJDNNUA1y3nTJRSbPhDrMD7op55CbqjsxwEoxMsKE0JUgvNNsKUS8CUmLi9Oh9OhDnrjs34sjsx(xCQu)vU5pDJlH0L7Q5AZjA3NU2HveBILBSMU8Fh3ZSMnhD1eRBJiDfmoCv1PoOePBHrBBwxgwyHfgHUKW5iKl3MX1Lu3LNDE62C02MF2MXTzeo7Seg28ClzZCzyu3LNDo6rxo1ijLiDDrN3CuI0LLNZLPePh9ORjNOVpLiD5Nn2DE6QvJD30oUYgKE0LN)xm5e99PTtxJ40tjsxwEoxMsKE0JU88)c)q)eTD6YDC6YvdLiDz55Czkr6rp6AuDEkr6YYZ5YuI0JE0fz2T78KNZfaLiDz55Czkr6rp6Yp0prjsx(zJDNNUfg9OhDnE75QHyaHE6k6nIbJd6Y)ItL6tdsxzt(kMQwHC(7jPBCPR7d88gpDr0RuIFG0v17CYMN2oDnvDQdkr6gxABUCU5DjHZZISiHZXIL0LCdZLu3LNTK0TWOBCPBZrBJfDzZMnSsol3zNVKH1S5NJfPUlp7C0T5PBCPhDn55FvlIFGhDHo60fz2pKtmaIFGxtV7JUS5BvnqCPRBKTB)huI01fqONU8V455txE(Fr0j8Xa8VH3tdsxEM3gFZrxrVRsxKEJ4LRg6IBy01BJV5OlxvnK5lxn(0LN)x4zYhTD66TX3C(0fDn55Fvl6cD0PRjp)RAvCbe6PR3gFZrxtE(x1QivM8PRjp)RArp6YZCJSD7)GsKUM88VQfDHo60JUiZ(HCIbq8d82D2EQJUG4ggpH0vMKUS5BvnqeZw)aQ94GUIKK5lxnrNIBKTB)h(uI0JUMbp)l7oa6YvSEJiR3nDrM9NbpZ0LTXNUIoo0fz2pKtmaIFGhDXct0v4ZKxk6g3ssiDLNQgAq66(aVvU5pDJlH0LXZI4iB3(p8PBCPRuF2EQJUXI0JUfgLiD5hkokTvM8sr34siD5FXPs9x5M)0nUesxKz)qoXai(bE0LnRMWXb9K5d6sL9HIEJip6UQACNT7nEOl1dfmoGiZ(HCIbaLnqxQh9WHnFRQbIy26hqThhHdOO3iIolmrxbRdYF4QQtDqjs34s34s3cJUXLUnhDJlDBE6gH8Zsp6AuV49e)ap6ABNnwtx5PQHgKUCxnxBor7(01oSIytSCJ10vEQAkMQo1bLiDJlDJlDlm6gx62C0nU0T5PBCPhD5)oUNznBo6Qjw3gr6kyC4QQtDqjs34s34s3cJ22SUmSWclmcDjHZrixUnJRlPUlp780T5OTn)SnJBZiC2zjmS55wYM5YWOUlp7C0T5PBCPhDr((XZBeVNgKU8dfhLUJB3()fot3iKUCQrskr66IoV5OePllpNltjsp6rxtorFFkr6YpBS780vRg7UPDCLni9OlYSB35jpNlakr6YYZ5YuI0JE01io9uI0LLNZLPePh9Olp)VWp0prBNUChNUC1qjsxwEoxMsKE0JU8d9tuI0LF2y35PBHrp6YZ)lMCI((02PRr15PePllpNltjsp6rp66Yw)WvvN6GsKUXLUXLUfgDJlDBo6gx6280nU0JUgV9C1qmGqpDDFGhD5FXPs9PbPRSjFftvRqo)9K0nU019bEEJNUA3j38MhhK019bETvnhD12i3COzeVi5iEriIePl)lovQFBvZrxTnYnhAgXlsoIxeIir6YpuCukniDDzRF0w1C0vBJCZHMr8IKJ4fHisKUIoHsfPBCPRG1b5pyPX)p6gxU0L)fNk1FM1S5OR23HiXDCXUzz6WLiDDFGNRQo1bLiDJlDJlDlm6gx62C0nU0T5PBCPhDfSoi)r7XPsjh1q0v7o5M384GeIyT6C5q01u1PoOePBCPT5Y5M3LeoplYIeohlwsxYnmxsDxE2ss3MJ2gl6YMnByLCwUZoFjdRzZphlsDxE25OBZt3iKE01KN)vTi(bE0LBpZ0LRMKjqhcccYPofDG8crgVhInKBpZ0LRMKKVv1KaDiiiiiiiiN6u0bAQ6zoi2qKVv1Wpv9mh6qqqqqqqqo1POduOQF(YvdeBiY3QA4dv9ZxUAqhcccccccYPofDGmwqSHiFRQH3yHoeeeeeeee6qqqqqqqqURdOmBUCMQEMJdxiYk6qqqqqqqqqqqqo1POduW4aInurAcmw88mThhm8859OdbbbbbbbbbbbLDdfmoGIgsOGXb)9bEqxQ3GoeeeeeeeeeeeeeeeKtDk6a9bgkpEFi2qbJd(pWq5X7JoeeeeeeeeeeeeeeeKtDk6anv9mhzn8gi2qFGHYJ3VC6)iMT(Kjqhccccccccccccccck7g6dmuE8(qrdj0u1ZCK1WBGcNcri0L6nOdbbbbbbbbbbbbbbbbbbbfmo4VS1pSD9hXpWlP)nYg78URdR4LKHf456MHZu1ZCK1WBsKaDiiiiiiiiiiiiiiiiiiiOGXHTR)SHrhVp5u1ZCK1WBsGoeeeeeeeeeeeeeee074)Odbbbbbbbbbbbbbbbbbbb5UoGMb2C5mv9mxzUC4crwrhcccccccccccccccccccccccQinbglEEM2JdgE(KZqI98FGHYJ3hInurAcmw88mThhm88jNbxZnXE(pWq5X7Joeeeeeeeeeeeeeeeeeeeeeeeu5YfPjWyXZZ0ECWWZNCgsSN)(apBx)r8d8swKMaJfppt7XbdpFYzW1CtSN)(apBt)hXpWlzIeOdbbbbbbbbbbbbbbbbbbb9gs0HGGGGGGGGGGGGGGGGGGGkstGXINNP94GHNpj5Bvn8tvpZLyVTHBM8tMaDiiiiiiiiiiiiiiiiiiiiY3QA4NQEMdIne5Bvn8tvpZbvMleeeeee6qqqqqqqqqqqqqqqqVHeDiiiiiiiiiiiO3qIoeeeeeee0Birhccc6nKOdbbbLDd1QrbzTAz3loiHUuVbYlez8(KTAuqwRw29IdYeqVHeDiiiOSBOwnkYg3)WeDGUuVbYlez8(KTAuKnU)Hj6Ka6nKOdbbbLDd1QrbzCuQDN44HUuVbYlez8(KTAuqghLA3jo(eqVHeDiiiOSBOwnkihFK0)IoL(dOl1BG8crgVpzRgfKJps6FrNs)rcO3qIoeeeu2nuRgfHp7qMTcbDPEdKxiY49jB1Oi8zhYSvOeqVHeDiiiOSBOwnkSpYw184HUuVbYlez8(KTAuyFKTQ5XNa6nKOdbbbvUC2nuRgfzhNmzCK9JxadOl1BG8crgVpzRgfzhNmzCK9JxaJeqVHeDiiiOYLZUHA1OWgZt5QNFQ3Xjv1ZqcDPEdKxiY49jB1OWgZt5QNFQ3Xjv1ZqMa6nKOdbbbn(ZByGyyqhcccQC5D2XfUa93qIo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJoDfmoyPPTr1C02Pl)qXrP7UEXlxnUOs(0vdwrCh6Im7hYjgaXpWRP39rx28TQgixv9mhzn8g66gz72)bLiDDbe6PRjp)RArxtE(x1Q4ci0txVn(MJUi9gXlxn0f3WOlp)VWZKpA701KN)vTOl3EMPlxnjl4CzRNZfqONtbhF7EzsofCk4uWPGJjA9Ck4uWPGJFO3Xjb6qqqqo1POdu0Be3IwpeBigB(wvdeXS1pGApoyqhcccYPofDGgV9C1aXgQ1hlTH3i6ZpE75QXNGO3iUfT(98J3EUAqhcccYPofDGiJxeInuRpwAdVr0Np9F2mEXKrVrClA9jqhcccYPofDGc6LDiHyd52ZmD5QjPXZk4p4yIwpNXBpxnCiJxKtOQF(YvdhsVr8YvdNbh7CcMaDiiiiiiiiN6u0bkyCSfTEi2qMO1BRtn8)izcBT77fmjdl47AgoqmmjG45HyApoyG45HmEwb)b6qqqqqqqqz3qM6bvKMGGXXw063dDPEdurAccghBrRFpeBixn(49TnIwFsM1fpp)2JdgobJJTO1ZP1hlTH3i6ZpE75QXNagB(wvdeXS1pGCvD8m75hV9C1Ka6nKOdbbbbbbb5uNIoqbJdi2qfPjiyCSfT(9Odbbbbbbb5uNIoqP(S9uheBiY4f5t9z7Po0HGGGGGGGCQtrhOqrsYSXoeBO5rhcccccccYPofDGcg9)zw9ZxUAGydL6Z2tDUouKKmBSdbbbbbHoeeeeeeeKtDk6afaeBOKP(S9uNRdfjjZg7jSbK04zf8hUou1pF5QjbKRHcg9)zw9ZxUAqhcccccccYPofDGChjFi2qgpRG)WgaH8eoh6qqqqqqqqbJdBx)fUF2EQlzQpBp1LaDiiiiiiiOGXHTR)ABeT(1nIxmjtt70Ijb6qqqqqqqqbJdBx)1ktEPssgViF4ZKxQeOdbbbbbbbfmoSD93mRzZLKH4oZSjw3grgoJ3EUA4W0eRBJidhc5qy5asGoeeeeeeeu2nKPEqbJd(7d8GUuVbcDiiiiiiiiiiiOGXb)9bEqSHcgh26QXhVVTQ5w3iBSN0KD4afo2XgY6D3uJW5Wrc0HGGGGGGGGGGGcgh83h4z76V2QMl54TNRg(7d8Sn9FTvnxYeCGiJxK)(aVvU5p0moBOuF2EQdkAiHiJxK)(aVvU5puDaL6Z2tDjGqhccccccccccckyCWFFGNTR)MznBUKmnX62iYWbIlhOYCtGoeeeeeeeeeeeuW4G)(apBx)198VS7ac3KmnX62iYKaDiiiiiiiO3qIoeeeeeeeuW4G)(apBx)r8d8sAIwpppdedpVXZk4psGoeeeeeeeu2nKPEqbJd(lB9dOl1BGqhccccccccccckyCWFzRFaXgkyCyRRgF8(2QMBDJSXEst2Hdu4yhBiR3DtncNdhjqhccccccccccckyCWFzRFy76V2QMl54TNRg(lB9dBt)xBvZLmbhiY4f5VS1pw5M)qZ4SHs9z7PoOOHeImEr(lB9JvU5puDaL6Z2tDjGqhccccccccccckyCWFzRFy76VzwZMljZUzz6WLidhOYC5avMBc0HGGGGGGGGGGGcgh8x26h2U(R75Fz3beUjz2nlthUezsGoeeeeeee0BirhccccccckyCWFzRFy76pIFGxssVr8Yvtc0HGGGGGGGcgh8FGHYJ3hInu6)iMT(KjCnP3iE5QbccccccccDiiiiiiiOGXHTR)Cr24IyG2WOJ37NKqoqKEJ4LRMeOdbbbbbbbfmoSD9Nnm649jj9gXlxnjqhccccccckyCy76V1fpp)2JdIFGN34t2uo468cMKPPCWvQ44jDXtMJLNJNqMe222FtPsY4FXZZpyCWWbImEr(7d88gFcO6aIHjb6qqqqqqqqLlhmoSn9FRlEE(Thhe)apVXNmHTR)c36i3CIzNpP7OJ)NaDiiiiiiiOGXHTR)Apovk5Ogk5Ue0EBzNhInedln3pChN(WjeRvNlhYpCcRyzzI1QZLdvU94uP2hvpdjZUMaDiiiiiiiOGXHTR)wx888BpoCv1Posok7os(CSx2DK85eSS7i5NaDiiiiiiiOGXHTR)Apovk5OgYvvN6i5OS7i5ZXEz3rYNtWYUJKphc5Nlb6qqqqqqqqbJdBxPQHpzc0HGGGEdj6qqqqLlFvOijjueY8HhI8TQgOPAOaGUuzFOGo1PsHIgsONmFqxQ3)HCYM3Ndu0XVcfjjHiFRQbQAGiZ(HCIbaDFGh0KN)vTGMQKp6qqqqz3qxaHEi2SHywZK1n1uXIvUWf7SXafnKq(29YKqSzdXkt(sZkwAZKmHCIb8dMeqxQ3Goeeeeeeeu2nKjA9qSzdX0k7qcXsRqmqxQ3avU8tMp0HGGGGGGGGGGGCQtrhiJfeBit06T1Pg(FKmHT299cMKHf8DndhigMeOdbbbbbbbbbbbLDdzQhurAcyA1OGHN3yTh6s9gOI0eW0QrbdpVXAp7DzxlburAcyA1OGHN3yTN3yX2yvcOI0eW0QrbdpVXAp)u1ZCSjSeqVHeDiiiiiiiiiiiOI0eW0QrbdpVXAp)u1ZCqSHkstatRgfm88gR98tvpZ5AUOdbbbbbbbbbbbf0l7qMSinbmTAuWWZBS2Zpv9mhht065mE75QHdz8ICkjhUHXHqoC5qycOYLFY8Hoeeeeeee0Birhccc6nKOdbbbvUmelTc5u9ZvdpKv2EQdkssc57fkuDCqURdO6L6hqKVv14dz)VlBSdvA2X5jHc6DqM6bfHcnY1r(cakEqxQhYQA9MdDiiiOSBOlGqpeB2qmRzY6MAQGLBlInSbzztnXafnKq(29YKqSzdXkt(sZkwAZKmHCIb8dMeqxQ3Goeeeeeeeu2nKjA9qSzdX0k7qcXsRqmqxQ3avU8tMp0HGGGGGGGGGGGCQtrhiJfeBit06T1Pg(FKmHT299cMKHf8DndhigMeOdbbbbbbbbbbb5uNIoqtvpZbXgQinbmTAuWWZBS2Zpv9mh6qqqqqqqqqqqqURdOm7PQN54WLtzUqKv0HGGGGGGGGGGGGGGGCQtrhOGXXw06HydzIwVTo1W)JKjS1UVxWKmSGVRz4aXWKaINhIP94GbINhAQ6zo0HGGGGGGGGGGGGGGGkstqW4ylA975)adLhVp70)rmB9jtGoeeeeeeeeeee0Birhccccccc6nKOdbbb9gs0HGGGYUHUac9qSzdXSMjRBQPIfRCHl2zJbkAiH8T7LjHyZgIvM8LMvS0Mjzc5ed4hmjGUuVbDiiiiiiiOSBit06HyZgIXM1QLDV4GKb6s9gOYLFY8HoeeeeeeeeeeeKtDk6azSGydzIwVTo1W)JKjS1UVxWKmSGVRz4aXWKaDiiiiiiiiiiiOSBit9GkstatRgfm88gR9qxQ3avKMaMwnky45nw7zVl7AjGkstatRgfm88gR98gl2gRsavKMaMwnky45nw75NQEMJnHLa6nKOdbbbbbbbbbbbvKMaMwnky45nw75NQEMdInurAcyA1OGHN3yTNFQ6zoxZfDiiiiiiiiiiiOGEzhYKfPjGPvJcgEEJ1E(PQN54yIwpNXBpxnCiJxKdHCcBwoC5qihctavU8tMp0HGGGGGGGEdj6qqqqVHeDiiiOSBOlGqpeB2qmRzY6MAQyXkx4ID2yGIgsiF7Ezsi2SHyLjFPzflTzsMqoXa(btcOl1Bqhccccccck7gYeTEi2SHyyPX9pmrhgOl1BGkx(jZh6qqqqqqqqqqqqo1POdKXcInKjA926ud)psMWw7(EbtYWc(UMHdedtc0HGGGGGGGGGGGYUHm1dQinbmTAuWWZBS2dDPEdurAcyA1OGHN3yTN9USRLaQinbmTAuWWZBS2ZBSyBSkburAcyA1OGHN3yTNFQ6zo2ewcO3qIoeeeeeeeeeeeurAcyA1OGHN3yTNFQ6zoi2qfPjGPvJcgEEJ1E(PQN5Cnx0HGGGGGGGGGGGc6LDitwKMaMwnky45nw75NQEMJJjA9CgV9C1WHmEroeYjSz5WLdHCimbu5Ypz(qhccccccc6nKOdbbb9gs0HGGGYUHUac9qSzdXSMjRBQPIfRCHl2zJbkAiH8T7LjHyZgIvM8LMvS0Mjzc5ed4hmjGUuVbDiiiiiiiOSBit06HyZgIXMJps6FrNs)bd0L6nqLl)K5dDiiiiiiiiiiiiN6u0bYybXgYeTEBDQH)hjtyRDFVGjzybFxZWbIHjb6qqqqqqqqqqqqz3qM6bvKMaMwnky45nw7HUuVbQinbmTAuWWZBS2ZEx21savKMaMwnky45nw75nwSnwLaQinbmTAuWWZBS2Zpv9mhBclb0BirhcccccccccccQinbmTAuWWZBS2Zpv9mheBOI0eW0QrbdpVXAp)u1ZCUMl6qqqqqqqqqqqqb9YoKjlstatRgfm88gR98tvpZXXeTEoJ3EUA4qgViN54WnmoeYHqoCtavU8tMp0HGGGGGGGEdj6qqqqVHeDiiiOSBOlGqpeB2qmRzY6MAQyXkx4ID2yGIgsiF7Ezsi2SHyLjFPzflTzsMqoXa(btcOl1Bqhccccccck7gYeTEi2SHySzCuQDN44zGUuVbQC5NmFOdbbbbbbbbbbb5uNIoqgli2qMO1BRtn8)izcBT77fmjdl47Agoqmmjqhccccccccccck7gYupOI0eW0QrbdpVXAp0L6nqfPjGPvJcgEEJ1E27YUwcOI0eW0QrbdpVXApVXITXQeqfPjGPvJcgEEJ1E(PQN5ytyjGEdj6qqqqqqqqqqqqfPjGPvJcgEEJ1E(PQN5GydvKMaMwnky45nw75NQEMZ1CrhccccccccccckOx2HmzrAcyA1OGHN3yTNFQ6zooMO1Zz82ZvdhY4f5WLd3W4WLdxoeMaQC5NmFOdbbbbbbb9gs0HGGGEdj6qqqqz3qxaHEi2SHywZK1n1uXIvUWf7SXafnKq(29YKqSzdXkt(sZkwAZKmHCIb8dMeqxQ3Goeeeeeeeu5YqB17Tfk9iBvZJ3hY8pj0vHMs9tLcDPEi)qVJdKPEqxQhYeTEOQBOl1d57zzvnpje5BvnOdbbbbbbbLDd5h6DCS1D2qMKj9iBvZJNjb0L6nqLl)K5dDiiiiiiiiiiiit06HydXKEKTQ5XZGoeeeeeeeeeeeKtDk6azSGydzIwVTo1W)JKjS1UVxWKmSGVRz4aXWKaDiiiiiiiiiiiOSBit9GkstatRgfm88gR9qxQ3avKMaMwnky45nw7zVl7AjGkstatRgfm88gR98gl2gRsavKMaMwnky45nw75NQEMJnHLa6nKOdbbbbbbbbbbbvKMaMwnky45nw75NQEMdInurAcyA1OGHN3yTNFQ6zoxZfDiiiiiiiiiiiOGEzhYKfPjGPvJcgEEJ1E(PQN54yIwpNXBpxnCiJxKtyCcBwoC5qi)SCiKF2eqLl)K5dDiiiiiiiO3qIoeee0BirhcccQCzcii7g6ci0dXMneZAMSUPMkwSYfUyNngOOHeY3UxMeInBiwzYxAwXsBMKjKtmGFWKa6s9g0HGGGGGGGYUHmrRhInBigw64KjJJm0kEbmyGUuVbQC5NmFOdbbbbbbbbbbb5uNIoqgli2qMO1BRtn8)izcBT77fmjdl47Agoqmmjqhccccccccccck7gYupOI0eW0QrbdpVXAp0L6nqfPjGPvJcgEEJ1E27YUwcOI0eW0QrbdpVXApVXITXQeqfPjGPvJcgEEJ1E(PQN5ytyjGEdj6qqqqqqqqqqqqfPjGPvJcgEEJ1E(PQN5GydvKMaMwnky45nw75NQEMZ1CrhccccccccccckOx2HmzrAcyA1OGHN3yTNFQ6zooMO1Zz82ZvdhY4f5WLdxwKdxoC5qycOYLFY8Hoeeeeeee0Birhccc6nKOdbbbLDdDbe6HyZgIzntw3utflw5cxSZgdu0qc5B3ltcXMneRm5lnRyPntYeYjgWpysaDPEd6qqqqqqqqz3qMO1dXMneJnmpLRE(qH774KQ6zizGUuVbQC5NmFOdbbbbbbbbbbb5uNIoqgli2qMO1BRtn8)izcBT77fmjdl47Agoqmmjqhccccccccccck7gYupOI0eW0QrbdpVXAp0L6nqfPjGPvJcgEEJ1E27YUwcOI0eW0QrbdpVXApVXITXQeqfPjGPvJcgEEJ1E(PQN5ytyjGEdj6qqqqqqqqqqqqfPjGPvJcgEEJ1E(PQN5GydvKMaMwnky45nw75NQEMZ1CrhccccccccccckOx2HmzrAcyA1OGHN3yTNFQ6zooMO1Zz82ZvdhY4f5mhhUSihc5WLd3eqLl)K5dDiiiiiiiO3qIoeee0Bi3VVCz0HGGGg)5nmq3W7r)nKOJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJo6OJoD924BoF6Yv74I2BqSOPDsxWABiR3iwWQT2yztez9UzTnPlpZBJV5ORO3vPRjp)RAvKkt(01KN)vTOhDDFGhTD6Y)YtLgGn9gXlxn0G0vW6G8h742T)F0TzPRO3vPTtxP(S9uhTTsoBjDPlNRKUCwcl5CUKWzlj1D55zr66Yw)OnNODF6ARAE6Y4zrCKTB)h(0nU0LFO4O02DEdPlQKpD1WM2KUcgNkLCud5QQtDqjs34s34s3cJUXLUnhDJlDBE6gH8Zsp6YD1CRCZF6wjPlYSFiNyaRlovQpDXct0vZRvl6gH019bERCZF6gxcPRlB9dA70vW6G8h0G0vW6G8hSM0(txBvZtx(xCQu)2CI29PRTQ5PRG1b5pw5M)0nULKU8dfhLs8d88gpDXsZ9d3XPFgZvr)lBS3ECmJXkww2vr)lBS3ECuEfkokLUYtvtHFM8PRDZY0Hlr6kssMVC1eDkUr2U9F4tjsp66(aV2CI29PRTQ5Pl)qXrPH7NTN6OBZriDDzRFSYn)PBCljD5FXPs9Dv1CXSX6nhDXYTflTjRPl)lovQVRQo1bLiDJlDJlDlm6gx62C0nU0T5PBCPhDndE(x2Da0LRy9grwVB6Im7hYjgaXpWB3z7Po6cIfMORmjDzZ3QAGiMT(bKRQJNU8dfhLUJB3()nJMUriDf(m5LI2MldJByUSznB(M1S5NRKeoxyu3LNVK0LFO4O0DxV4LRg6gH0vW4uP2hvpdPRQo1bLiDJlDJq6wy0ncPBZr3iKUnpDJq(zPhDLn24p8FAq6YpuCuQnF)45nEAq6QoYV5IxUAORWDNDZYzu7SrSrt0LN5gz72)bLiDn55Fvl6YTNz6YvtYeOdbbbn(ZByGChD8F0Fdj6OJo6OJo6OJo60JUiZ(ZGNz6Y24txrhh6YpuCuQRQo1bLiDJlDJlDlm6gx62C0nU0T5PBCPh9OhDzJ0nUZhgx6rPa
@OOMM
Copy link
Author

OOMM commented Feb 12, 2016

https://www.youtube.com/watch?v=o1UhtUnsWk4

todo:
allow dynamic (non-static) positioning for each demon (is this desired fucntionality?)
support perm dg/inf
support perm pets fg/fh/suc/imp/vw/glyphed versions
support serv pets
allow styling to be determined through weakauras itself, aka size/color
create a tldr version that shows only a number for implosion
create a tldr version for empowerment (what should this show? if you have dg+inq+stalker with 13.5sec left then good?)
create a tldr version for chaos bolt, just count all demons (but will you ever hold cb for more demons to be out?)

@OOMM
Copy link
Author

OOMM commented Feb 27, 2016

Update

  • allows styling to be determined through weakauras itself, aka size/color
    there are other options like font shadow and bar border that i could add later
  • not putting imp number in this aura, created another aura for this

fixed

  • bars move up properly as they expire

@OOMM
Copy link
Author

OOMM commented Apr 29, 2016

Fixed bugs
Added Grimoire of Service, Darkglare
Added bar removal for Imps on Implosion

@OOMM
Copy link
Author

OOMM commented May 1, 2016

function(_,time,type,_,sguid,_,_,_,_,name,_,_,_,spell)
    local auraName = "Demon Timer Bar"
    local region = WeakAuras.regions[auraName].region
    local data = WeakAuras.GetData(auraName)
    local build = function(number,name,region,data,position,duration,r,g,b)
        local barName = name:lower():gsub("%s+", "") .. "Bar" .. number
        if not _G[barName] then _G[barName] = CreateFrame("StatusBar",barName,WeakAuras.regions["Demon Timer Core"].region) end
        local bar = _G[barName]
        local height = data.height
        local padding = 4
        local basePosition = height+padding      
        local y = (height+padding)*(number+position) + basePosition
        local fade = number*0.03
        bar:SetHeight(height)
        bar:SetFrameStrata("LOW")
        bar:SetWidth(data.width)
        bar:SetPoint("TOPLEFT",region,"LEFT",0,0-y)
        if not bar.text then 
            bar.text = bar:CreateFontString(nil, 'OVERLAY')
            bar.text:SetFont(region.text:GetFont(), data.textSize <= height and data.textSize or height) 
            bar.text:SetPoint("LEFT", 1, -1)
            bar.text:SetJustifyH("LEFT")
        end
        bar.text:SetText(name.." "..number)
        if not bar.timer then 
            bar.timer = bar:CreateFontString(nil, 'OVERLAY')
            bar.timer:SetFont(region.timer:GetFont(), data.timerSize <= height and data.timerSize or height) 
            bar.timer:SetPoint("RIGHT", -1, -1)
            bar.timer:SetJustifyH("RIGHT")
        end
        bar.timer:SetText(duration)
        bar.expires = GetTime()+duration        
        bar:SetMinMaxValues(0, duration)
        bar:SetValue(duration)
        bar:SetStatusBarTexture(LibStub("LibSharedMedia-3.0"):Fetch("statusbar", data.texture) or "")
        --bar:GetStatusBarTexture():SetHorizTile(false)
        bar:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background"})
        bar:SetStatusBarColor(r-fade,g-fade,b-fade)
        bar:SetBackdropColor(r-fade,g-fade,b-fade,0.3)
        bar:Show()
    end
    --to add a new demon copy this block and edit these lines, also add demon on display text custom code
    if type == "SPELL_SUMMON" and sguid == UnitGUID("player") then
        if name == "Wild Imp" then --edit
            local nm = name:lower():gsub("%s+", "")
            if not _G["WA_"..nm] then _G["WA_"..nm]={}; _G["WA_"..nm].nm=nm; _G["WA_"..nm].count=0; end
            _G["WA_"..nm].count = _G["WA_"..nm].count+1
            build(_G["WA_"..nm].count,name,region,data,6,12,0,1,0) --edit
        end
    end
    -- Implosion. might add support for other demons getting killed but not a priority at the moment
    if type == "SPELL_INSTAKILL" and sguid == UnitGUID("player") then
        if name == "Wild Imp" then --edit
            local nm = name:lower():gsub("%s+", "")
            local count = _G["WA_"..nm].count
            for i=count,1,-1 do
                local barName = name:lower():gsub("%s+", "") .. "Bar" .. count
                _G[barName].expires=GetTime()
            end
        end
    end
    if type == "SPELL_SUMMON" and sguid == UnitGUID("player") then
        if name == "Doomguard" then --edit
            local nm = name:lower():gsub("%s+", "")
            if not _G["WA_"..nm] then _G["WA_"..nm]={}; _G["WA_"..nm].nm=nm; _G["WA_"..nm].count=0; end
            _G["WA_"..nm].count = _G["WA_"..nm].count+1
            build(_G["WA_"..nm].count,name,region,data,0,25,1,0,0) --edit
        end
    end
    if type == "SPELL_SUMMON" and sguid == UnitGUID("player") then
        if name == "Infernal" then --edit
            local nm = name:lower():gsub("%s+", "")
            if not _G["WA_"..nm] then _G["WA_"..nm]={}; _G["WA_"..nm].nm=nm; _G["WA_"..nm].count=0; end
            _G["WA_"..nm].count = _G["WA_"..nm].count+1
            build(_G["WA_"..nm].count,name,region,data,0,25,1,0,0) --edit
        end
    end
    if type == "SPELL_SUMMON" and sguid == UnitGUID("player") then
        if name == "Dreadstalker" then --edit
            local nm = name:lower():gsub("%s+", "")
            if not _G["WA_"..nm] then _G["WA_"..nm]={}; _G["WA_"..nm].nm=nm; _G["WA_"..nm].count=0; end
            _G["WA_"..nm].count = _G["WA_"..nm].count+1
            build(_G["WA_"..nm].count,name,region,data,3,12,0,0,1) --edit
        end
    end
    if type == "SPELL_SUMMON" and sguid == UnitGUID("player") then
        if name == "Darkglare" then --edit
            local nm = name:lower():gsub("%s+", "")
            if not _G["WA_"..nm] then _G["WA_"..nm]={}; _G["WA_"..nm].nm=nm; _G["WA_"..nm].count=0; end
            _G["WA_"..nm].count = _G["WA_"..nm].count+1
            build(_G["WA_"..nm].count,name,region,data,1,12,1,1,0) --edit
        end
    end
    if type == "SPELL_SUMMON" and sguid == UnitGUID("player") then
        -- Note: Grimoires need to check the spell not the name of the summoned demon
        if spell:find("Grimoire") then --edit
            name = "Grimoire"
            local nm = name:lower():gsub("%s+", "")
            if not _G["WA_"..nm] then _G["WA_"..nm]={}; _G["WA_"..nm].nm=nm; _G["WA_"..nm].count=0; end
            _G["WA_"..nm].count = _G["WA_"..nm].count+1
            build(_G["WA_"..nm].count,name,region,data,2,25,1,0.5,0.5) --edit
        end
    end
    --[[if type == "SPELL_SUMMON" and sguid == UnitGUID("player") then
        if name == "Illidari Satyr" then --edit
            local nm = name:lower():gsub("%s+", "")
            if not _G["WA_"..nm] then _G["WA_"..nm]={}; _G["WA_"..nm].nm=nm; _G["WA_"..nm].count=0; end
            _G["WA_"..nm].count = _G["WA_"..nm].count+1
            build(_G["WA_"..nm].count,name,region,data,1,18,1,1,0) --edit
        end
    end
    if type == "SPELL_SUMMON" and sguid == UnitGUID("player") then
        if name == "Vicious Hellhound" then --edit
            local nm = name:lower():gsub("%s+", "")
            if not _G["WA_"..nm] then _G["WA_"..nm]={}; _G["WA_"..nm].nm=nm; _G["WA_"..nm].count=0; end
            _G["WA_"..nm].count = _G["WA_"..nm].count+1
            build(_G["WA_"..nm].count,name,region,data,3,18,0,1,1) --edit
        end
    end]]--
    return true
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment