From fdd5eb52fec2867d8f2fc0a7b9afeab05792a7ed Mon Sep 17 00:00:00 2001 From: filux Date: Thu, 27 Mar 2014 20:12:04 +0100 Subject: [PATCH] Removed masterserver's code (separation from the source). --- .gitattributes | 1 + README.md | 31 + README.txt | 1 - data/glest_game | 2 +- mk/linux/.gitignore | 8 +- source/.gitignore | 1 - source/glest_game/facilities/.gitignore | 1 + source/masterserver/README.txt | 1 - source/masterserver/addGameStats.php | 274 ------- source/masterserver/addServerInfo.php | 310 -------- source/masterserver/cleanUpServerList.php | 18 - source/masterserver/config.php | 32 - source/masterserver/docs/AUTHORS.txt | 33 - source/masterserver/docs/README.txt | 66 -- source/masterserver/docs/gnu_gpl_3.0.txt | 674 ------------------ source/masterserver/flags/README | 12 - source/masterserver/flags/ad.png | Bin 643 -> 0 bytes source/masterserver/flags/ae.png | Bin 408 -> 0 bytes source/masterserver/flags/af.png | Bin 604 -> 0 bytes source/masterserver/flags/ag.png | Bin 591 -> 0 bytes source/masterserver/flags/ai.png | Bin 643 -> 0 bytes source/masterserver/flags/al.png | Bin 600 -> 0 bytes source/masterserver/flags/am.png | Bin 497 -> 0 bytes source/masterserver/flags/an.png | Bin 488 -> 0 bytes source/masterserver/flags/ao.png | Bin 428 -> 0 bytes source/masterserver/flags/ar.png | Bin 506 -> 0 bytes source/masterserver/flags/as.png | Bin 647 -> 0 bytes source/masterserver/flags/at.png | Bin 403 -> 0 bytes source/masterserver/flags/au.png | Bin 673 -> 0 bytes source/masterserver/flags/aw.png | Bin 524 -> 0 bytes source/masterserver/flags/ax.png | Bin 663 -> 0 bytes source/masterserver/flags/az.png | Bin 589 -> 0 bytes source/masterserver/flags/ba.png | Bin 593 -> 0 bytes source/masterserver/flags/bb.png | Bin 585 -> 0 bytes source/masterserver/flags/bd.png | Bin 504 -> 0 bytes source/masterserver/flags/be.png | Bin 449 -> 0 bytes source/masterserver/flags/bf.png | Bin 497 -> 0 bytes source/masterserver/flags/bg.png | Bin 462 -> 0 bytes source/masterserver/flags/bh.png | Bin 457 -> 0 bytes source/masterserver/flags/bi.png | Bin 675 -> 0 bytes source/masterserver/flags/bj.png | Bin 486 -> 0 bytes source/masterserver/flags/bm.png | Bin 611 -> 0 bytes source/masterserver/flags/bn.png | Bin 639 -> 0 bytes source/masterserver/flags/bo.png | Bin 500 -> 0 bytes source/masterserver/flags/br.png | Bin 593 -> 0 bytes source/masterserver/flags/bs.png | Bin 526 -> 0 bytes source/masterserver/flags/bt.png | Bin 631 -> 0 bytes source/masterserver/flags/bv.png | Bin 512 -> 0 bytes source/masterserver/flags/bw.png | Bin 443 -> 0 bytes source/masterserver/flags/by.png | Bin 514 -> 0 bytes source/masterserver/flags/bz.png | Bin 600 -> 0 bytes source/masterserver/flags/ca.png | Bin 628 -> 0 bytes source/masterserver/flags/cc.png | Bin 625 -> 0 bytes source/masterserver/flags/cd.png | Bin 528 -> 0 bytes source/masterserver/flags/cf.png | Bin 614 -> 0 bytes source/masterserver/flags/cg.png | Bin 521 -> 0 bytes source/masterserver/flags/ch.png | Bin 367 -> 0 bytes source/masterserver/flags/ci.png | Bin 453 -> 0 bytes source/masterserver/flags/ck.png | Bin 586 -> 0 bytes source/masterserver/flags/cl.png | Bin 450 -> 0 bytes source/masterserver/flags/cm.png | Bin 525 -> 0 bytes source/masterserver/flags/cn.png | Bin 472 -> 0 bytes source/masterserver/flags/co.png | Bin 483 -> 0 bytes source/masterserver/flags/cr.png | Bin 477 -> 0 bytes source/masterserver/flags/cs.png | Bin 439 -> 0 bytes source/masterserver/flags/cu.png | Bin 563 -> 0 bytes source/masterserver/flags/cv.png | Bin 529 -> 0 bytes source/masterserver/flags/cx.png | Bin 608 -> 0 bytes source/masterserver/flags/cy.png | Bin 428 -> 0 bytes source/masterserver/flags/cz.png | Bin 476 -> 0 bytes source/masterserver/flags/de.png | Bin 545 -> 0 bytes source/masterserver/flags/dj.png | Bin 572 -> 0 bytes source/masterserver/flags/dk.png | Bin 495 -> 0 bytes source/masterserver/flags/dm.png | Bin 620 -> 0 bytes source/masterserver/flags/do.png | Bin 508 -> 0 bytes source/masterserver/flags/dz.png | Bin 582 -> 0 bytes source/masterserver/flags/ec.png | Bin 500 -> 0 bytes source/masterserver/flags/ee.png | Bin 429 -> 0 bytes source/masterserver/flags/eg.png | Bin 465 -> 0 bytes source/masterserver/flags/eh.png | Bin 508 -> 0 bytes source/masterserver/flags/er.png | Bin 653 -> 0 bytes source/masterserver/flags/es.png | Bin 469 -> 0 bytes source/masterserver/flags/et.png | Bin 592 -> 0 bytes source/masterserver/flags/fi.png | Bin 489 -> 0 bytes source/masterserver/flags/fj.png | Bin 610 -> 0 bytes source/masterserver/flags/fk.png | Bin 648 -> 0 bytes source/masterserver/flags/fm.png | Bin 552 -> 0 bytes source/masterserver/flags/fo.png | Bin 474 -> 0 bytes source/masterserver/flags/fr.png | Bin 545 -> 0 bytes source/masterserver/flags/ga.png | Bin 489 -> 0 bytes source/masterserver/flags/gb.png | Bin 599 -> 0 bytes source/masterserver/flags/gd.png | Bin 637 -> 0 bytes source/masterserver/flags/ge.png | Bin 594 -> 0 bytes source/masterserver/flags/gf.png | Bin 545 -> 0 bytes source/masterserver/flags/gh.png | Bin 490 -> 0 bytes source/masterserver/flags/gi.png | Bin 463 -> 0 bytes source/masterserver/flags/gl.png | Bin 470 -> 0 bytes source/masterserver/flags/gm.png | Bin 493 -> 0 bytes source/masterserver/flags/gn.png | Bin 480 -> 0 bytes source/masterserver/flags/gp.png | Bin 488 -> 0 bytes source/masterserver/flags/gq.png | Bin 537 -> 0 bytes source/masterserver/flags/gr.png | Bin 487 -> 0 bytes source/masterserver/flags/gs.png | Bin 630 -> 0 bytes source/masterserver/flags/gt.png | Bin 493 -> 0 bytes source/masterserver/flags/gu.png | Bin 509 -> 0 bytes source/masterserver/flags/gw.png | Bin 516 -> 0 bytes source/masterserver/flags/gy.png | Bin 645 -> 0 bytes source/masterserver/flags/hk.png | Bin 527 -> 0 bytes source/masterserver/flags/hm.png | Bin 673 -> 0 bytes source/masterserver/flags/hn.png | Bin 537 -> 0 bytes source/masterserver/flags/hr.png | Bin 524 -> 0 bytes source/masterserver/flags/ht.png | Bin 487 -> 0 bytes source/masterserver/flags/hu.png | Bin 432 -> 0 bytes source/masterserver/flags/id.png | Bin 430 -> 0 bytes source/masterserver/flags/ie.png | Bin 481 -> 0 bytes source/masterserver/flags/il.png | Bin 431 -> 0 bytes source/masterserver/flags/in.png | Bin 503 -> 0 bytes source/masterserver/flags/io.png | Bin 658 -> 0 bytes source/masterserver/flags/iq.png | Bin 515 -> 0 bytes source/masterserver/flags/ir.png | Bin 512 -> 0 bytes source/masterserver/flags/is.png | Bin 532 -> 0 bytes source/masterserver/flags/it.png | Bin 420 -> 0 bytes source/masterserver/flags/jm.png | Bin 637 -> 0 bytes source/masterserver/flags/jo.png | Bin 473 -> 0 bytes source/masterserver/flags/jp.png | Bin 420 -> 0 bytes source/masterserver/flags/ke.png | Bin 569 -> 0 bytes source/masterserver/flags/kg.png | Bin 510 -> 0 bytes source/masterserver/flags/kh.png | Bin 549 -> 0 bytes source/masterserver/flags/ki.png | Bin 656 -> 0 bytes source/masterserver/flags/km.png | Bin 577 -> 0 bytes source/masterserver/flags/kn.png | Bin 604 -> 0 bytes source/masterserver/flags/kp.png | Bin 561 -> 0 bytes source/masterserver/flags/kr.png | Bin 592 -> 0 bytes source/masterserver/flags/kw.png | Bin 486 -> 0 bytes source/masterserver/flags/ky.png | Bin 643 -> 0 bytes source/masterserver/flags/kz.png | Bin 616 -> 0 bytes source/masterserver/flags/la.png | Bin 563 -> 0 bytes source/masterserver/flags/lb.png | Bin 517 -> 0 bytes source/masterserver/flags/lc.png | Bin 520 -> 0 bytes source/masterserver/flags/li.png | Bin 537 -> 0 bytes source/masterserver/flags/lk.png | Bin 627 -> 0 bytes source/masterserver/flags/lr.png | Bin 466 -> 0 bytes source/masterserver/flags/ls.png | Bin 628 -> 0 bytes source/masterserver/flags/lt.png | Bin 508 -> 0 bytes source/masterserver/flags/lu.png | Bin 481 -> 0 bytes source/masterserver/flags/lv.png | Bin 465 -> 0 bytes source/masterserver/flags/ly.png | Bin 419 -> 0 bytes source/masterserver/flags/ma.png | Bin 432 -> 0 bytes source/masterserver/flags/mc.png | Bin 380 -> 0 bytes source/masterserver/flags/md.png | Bin 566 -> 0 bytes source/masterserver/flags/me.png | Bin 448 -> 0 bytes source/masterserver/flags/mg.png | Bin 453 -> 0 bytes source/masterserver/flags/mh.png | Bin 628 -> 0 bytes source/masterserver/flags/mk.png | Bin 664 -> 0 bytes source/masterserver/flags/ml.png | Bin 474 -> 0 bytes source/masterserver/flags/mm.png | Bin 483 -> 0 bytes source/masterserver/flags/mn.png | Bin 492 -> 0 bytes source/masterserver/flags/mo.png | Bin 588 -> 0 bytes source/masterserver/flags/mp.png | Bin 597 -> 0 bytes source/masterserver/flags/mq.png | Bin 655 -> 0 bytes source/masterserver/flags/mr.png | Bin 569 -> 0 bytes source/masterserver/flags/ms.png | Bin 614 -> 0 bytes source/masterserver/flags/mt.png | Bin 420 -> 0 bytes source/masterserver/flags/mu.png | Bin 496 -> 0 bytes source/masterserver/flags/mv.png | Bin 542 -> 0 bytes source/masterserver/flags/mw.png | Bin 529 -> 0 bytes source/masterserver/flags/mx.png | Bin 574 -> 0 bytes source/masterserver/flags/my.png | Bin 571 -> 0 bytes source/masterserver/flags/mz.png | Bin 584 -> 0 bytes source/masterserver/flags/na.png | Bin 647 -> 0 bytes source/masterserver/flags/nc.png | Bin 591 -> 0 bytes source/masterserver/flags/ne.png | Bin 537 -> 0 bytes source/masterserver/flags/nf.png | Bin 602 -> 0 bytes source/masterserver/flags/ng.png | Bin 482 -> 0 bytes source/masterserver/flags/ni.png | Bin 508 -> 0 bytes source/masterserver/flags/nl.png | Bin 453 -> 0 bytes source/masterserver/flags/no.png | Bin 512 -> 0 bytes source/masterserver/flags/np.png | Bin 443 -> 0 bytes source/masterserver/flags/nr.png | Bin 527 -> 0 bytes source/masterserver/flags/nu.png | Bin 572 -> 0 bytes source/masterserver/flags/nz.png | Bin 639 -> 0 bytes source/masterserver/flags/om.png | Bin 478 -> 0 bytes source/masterserver/flags/pa.png | Bin 519 -> 0 bytes source/masterserver/flags/pe.png | Bin 397 -> 0 bytes source/masterserver/flags/pf.png | Bin 498 -> 0 bytes source/masterserver/flags/pg.png | Bin 593 -> 0 bytes source/masterserver/flags/ph.png | Bin 538 -> 0 bytes source/masterserver/flags/pk.png | Bin 569 -> 0 bytes source/masterserver/flags/pl.png | Bin 374 -> 0 bytes source/masterserver/flags/pm.png | Bin 689 -> 0 bytes source/masterserver/flags/pn.png | Bin 657 -> 0 bytes source/masterserver/flags/pr.png | Bin 556 -> 0 bytes source/masterserver/flags/ps.png | Bin 472 -> 0 bytes source/masterserver/flags/pt.png | Bin 554 -> 0 bytes source/masterserver/flags/pw.png | Bin 550 -> 0 bytes source/masterserver/flags/py.png | Bin 473 -> 0 bytes source/masterserver/flags/qa.png | Bin 450 -> 0 bytes source/masterserver/flags/re.png | Bin 545 -> 0 bytes source/masterserver/flags/ro.png | Bin 495 -> 0 bytes source/masterserver/flags/rs.png | Bin 423 -> 0 bytes source/masterserver/flags/ru.png | Bin 420 -> 0 bytes source/masterserver/flags/rw.png | Bin 533 -> 0 bytes source/masterserver/flags/sa.png | Bin 551 -> 0 bytes source/masterserver/flags/sb.png | Bin 624 -> 0 bytes source/masterserver/flags/sc.png | Bin 608 -> 0 bytes source/masterserver/flags/sd.png | Bin 492 -> 0 bytes source/masterserver/flags/se.png | Bin 542 -> 0 bytes source/masterserver/flags/sg.png | Bin 468 -> 0 bytes source/masterserver/flags/sh.png | Bin 645 -> 0 bytes source/masterserver/flags/si.png | Bin 510 -> 0 bytes source/masterserver/flags/sj.png | Bin 512 -> 0 bytes source/masterserver/flags/sk.png | Bin 562 -> 0 bytes source/masterserver/flags/sl.png | Bin 436 -> 0 bytes source/masterserver/flags/sm.png | Bin 502 -> 0 bytes source/masterserver/flags/sn.png | Bin 532 -> 0 bytes source/masterserver/flags/so.png | Bin 527 -> 0 bytes source/masterserver/flags/sr.png | Bin 513 -> 0 bytes source/masterserver/flags/st.png | Bin 584 -> 0 bytes source/masterserver/flags/sv.png | Bin 501 -> 0 bytes source/masterserver/flags/sy.png | Bin 422 -> 0 bytes source/masterserver/flags/sz.png | Bin 643 -> 0 bytes source/masterserver/flags/tc.png | Bin 624 -> 0 bytes source/masterserver/flags/td.png | Bin 570 -> 0 bytes source/masterserver/flags/tf.png | Bin 527 -> 0 bytes source/masterserver/flags/tg.png | Bin 562 -> 0 bytes source/masterserver/flags/th.png | Bin 452 -> 0 bytes source/masterserver/flags/tj.png | Bin 496 -> 0 bytes source/masterserver/flags/tk.png | Bin 638 -> 0 bytes source/masterserver/flags/tl.png | Bin 514 -> 0 bytes source/masterserver/flags/tm.png | Bin 593 -> 0 bytes source/masterserver/flags/tn.png | Bin 495 -> 0 bytes source/masterserver/flags/to.png | Bin 426 -> 0 bytes source/masterserver/flags/tr.png | Bin 492 -> 0 bytes source/masterserver/flags/tt.png | Bin 617 -> 0 bytes source/masterserver/flags/tv.png | Bin 536 -> 0 bytes source/masterserver/flags/tw.png | Bin 465 -> 0 bytes source/masterserver/flags/tz.png | Bin 642 -> 0 bytes source/masterserver/flags/ua.png | Bin 446 -> 0 bytes source/masterserver/flags/ug.png | Bin 531 -> 0 bytes source/masterserver/flags/um.png | Bin 571 -> 0 bytes source/masterserver/flags/us.png | Bin 609 -> 0 bytes source/masterserver/flags/uy.png | Bin 532 -> 0 bytes source/masterserver/flags/uz.png | Bin 515 -> 0 bytes source/masterserver/flags/va.png | Bin 553 -> 0 bytes source/masterserver/flags/vc.png | Bin 577 -> 0 bytes source/masterserver/flags/ve.png | Bin 528 -> 0 bytes source/masterserver/flags/vg.png | Bin 630 -> 0 bytes source/masterserver/flags/vi.png | Bin 616 -> 0 bytes source/masterserver/flags/vn.png | Bin 474 -> 0 bytes source/masterserver/flags/vu.png | Bin 604 -> 0 bytes source/masterserver/flags/wf.png | Bin 554 -> 0 bytes source/masterserver/flags/ws.png | Bin 476 -> 0 bytes source/masterserver/flags/ye.png | Bin 413 -> 0 bytes source/masterserver/flags/yt.png | Bin 593 -> 0 bytes source/masterserver/flags/za.png | Bin 642 -> 0 bytes source/masterserver/flags/zm.png | Bin 500 -> 0 bytes source/masterserver/flags/zw.png | Bin 574 -> 0 bytes source/masterserver/functions.php | 122 ---- source/masterserver/images/game_icon.png | Bin 7035 -> 0 bytes source/masterserver/images/megaglest.ico | Bin 9454 -> 0 bytes source/masterserver/index.php | 7 - source/masterserver/install/scheme_mysql.sql | 166 ----- source/masterserver/robots.txt | 2 - .../scripts/desktop_notifications.js | 355 --------- source/masterserver/scripts/json2.js | 486 ------------- source/masterserver/scripts/utils.js | 56 -- source/masterserver/showGameStats.php | 246 ------- source/masterserver/showMapsForGlest.php | 65 -- source/masterserver/showPlayers.php | 118 --- source/masterserver/showRecentServers.php | 20 - source/masterserver/showScenariosForGlest.php | 66 -- source/masterserver/showServers.php | 230 ------ source/masterserver/showServersForGlest.php | 58 -- source/masterserver/showServersJson.php | 36 - source/masterserver/showTechsForGlest.php | 65 -- source/masterserver/showTilesetsForGlest.php | 65 -- source/masterserver/style/screen.css | 66 -- 277 files changed, 38 insertions(+), 3656 deletions(-) create mode 100644 README.md delete mode 100644 README.txt create mode 100644 source/glest_game/facilities/.gitignore delete mode 100644 source/masterserver/README.txt delete mode 100644 source/masterserver/addGameStats.php delete mode 100644 source/masterserver/addServerInfo.php delete mode 100644 source/masterserver/cleanUpServerList.php delete mode 100644 source/masterserver/config.php delete mode 100644 source/masterserver/docs/AUTHORS.txt delete mode 100644 source/masterserver/docs/README.txt delete mode 100644 source/masterserver/docs/gnu_gpl_3.0.txt delete mode 100644 source/masterserver/flags/README delete mode 100644 source/masterserver/flags/ad.png delete mode 100644 source/masterserver/flags/ae.png delete mode 100644 source/masterserver/flags/af.png delete mode 100644 source/masterserver/flags/ag.png delete mode 100644 source/masterserver/flags/ai.png delete mode 100644 source/masterserver/flags/al.png delete mode 100644 source/masterserver/flags/am.png delete mode 100644 source/masterserver/flags/an.png delete mode 100644 source/masterserver/flags/ao.png delete mode 100644 source/masterserver/flags/ar.png delete mode 100644 source/masterserver/flags/as.png delete mode 100644 source/masterserver/flags/at.png delete mode 100644 source/masterserver/flags/au.png delete mode 100644 source/masterserver/flags/aw.png delete mode 100644 source/masterserver/flags/ax.png delete mode 100644 source/masterserver/flags/az.png delete mode 100644 source/masterserver/flags/ba.png delete mode 100644 source/masterserver/flags/bb.png delete mode 100644 source/masterserver/flags/bd.png delete mode 100644 source/masterserver/flags/be.png delete mode 100644 source/masterserver/flags/bf.png delete mode 100644 source/masterserver/flags/bg.png delete mode 100644 source/masterserver/flags/bh.png delete mode 100644 source/masterserver/flags/bi.png delete mode 100644 source/masterserver/flags/bj.png delete mode 100644 source/masterserver/flags/bm.png delete mode 100644 source/masterserver/flags/bn.png delete mode 100644 source/masterserver/flags/bo.png delete mode 100644 source/masterserver/flags/br.png delete mode 100644 source/masterserver/flags/bs.png delete mode 100644 source/masterserver/flags/bt.png delete mode 100644 source/masterserver/flags/bv.png delete mode 100644 source/masterserver/flags/bw.png delete mode 100644 source/masterserver/flags/by.png delete mode 100644 source/masterserver/flags/bz.png delete mode 100644 source/masterserver/flags/ca.png delete mode 100644 source/masterserver/flags/cc.png delete mode 100644 source/masterserver/flags/cd.png delete mode 100644 source/masterserver/flags/cf.png delete mode 100644 source/masterserver/flags/cg.png delete mode 100644 source/masterserver/flags/ch.png delete mode 100644 source/masterserver/flags/ci.png delete mode 100644 source/masterserver/flags/ck.png delete mode 100644 source/masterserver/flags/cl.png delete mode 100644 source/masterserver/flags/cm.png delete mode 100644 source/masterserver/flags/cn.png delete mode 100644 source/masterserver/flags/co.png delete mode 100644 source/masterserver/flags/cr.png delete mode 100644 source/masterserver/flags/cs.png delete mode 100644 source/masterserver/flags/cu.png delete mode 100644 source/masterserver/flags/cv.png delete mode 100644 source/masterserver/flags/cx.png delete mode 100644 source/masterserver/flags/cy.png delete mode 100644 source/masterserver/flags/cz.png delete mode 100644 source/masterserver/flags/de.png delete mode 100644 source/masterserver/flags/dj.png delete mode 100644 source/masterserver/flags/dk.png delete mode 100644 source/masterserver/flags/dm.png delete mode 100644 source/masterserver/flags/do.png delete mode 100644 source/masterserver/flags/dz.png delete mode 100644 source/masterserver/flags/ec.png delete mode 100644 source/masterserver/flags/ee.png delete mode 100644 source/masterserver/flags/eg.png delete mode 100644 source/masterserver/flags/eh.png delete mode 100644 source/masterserver/flags/er.png delete mode 100644 source/masterserver/flags/es.png delete mode 100644 source/masterserver/flags/et.png delete mode 100644 source/masterserver/flags/fi.png delete mode 100644 source/masterserver/flags/fj.png delete mode 100644 source/masterserver/flags/fk.png delete mode 100644 source/masterserver/flags/fm.png delete mode 100644 source/masterserver/flags/fo.png delete mode 100644 source/masterserver/flags/fr.png delete mode 100644 source/masterserver/flags/ga.png delete mode 100644 source/masterserver/flags/gb.png delete mode 100644 source/masterserver/flags/gd.png delete mode 100644 source/masterserver/flags/ge.png delete mode 100644 source/masterserver/flags/gf.png delete mode 100644 source/masterserver/flags/gh.png delete mode 100644 source/masterserver/flags/gi.png delete mode 100644 source/masterserver/flags/gl.png delete mode 100644 source/masterserver/flags/gm.png delete mode 100644 source/masterserver/flags/gn.png delete mode 100644 source/masterserver/flags/gp.png delete mode 100644 source/masterserver/flags/gq.png delete mode 100644 source/masterserver/flags/gr.png delete mode 100644 source/masterserver/flags/gs.png delete mode 100644 source/masterserver/flags/gt.png delete mode 100644 source/masterserver/flags/gu.png delete mode 100644 source/masterserver/flags/gw.png delete mode 100644 source/masterserver/flags/gy.png delete mode 100644 source/masterserver/flags/hk.png delete mode 100644 source/masterserver/flags/hm.png delete mode 100644 source/masterserver/flags/hn.png delete mode 100644 source/masterserver/flags/hr.png delete mode 100644 source/masterserver/flags/ht.png delete mode 100644 source/masterserver/flags/hu.png delete mode 100644 source/masterserver/flags/id.png delete mode 100644 source/masterserver/flags/ie.png delete mode 100644 source/masterserver/flags/il.png delete mode 100644 source/masterserver/flags/in.png delete mode 100644 source/masterserver/flags/io.png delete mode 100644 source/masterserver/flags/iq.png delete mode 100644 source/masterserver/flags/ir.png delete mode 100644 source/masterserver/flags/is.png delete mode 100644 source/masterserver/flags/it.png delete mode 100644 source/masterserver/flags/jm.png delete mode 100644 source/masterserver/flags/jo.png delete mode 100644 source/masterserver/flags/jp.png delete mode 100644 source/masterserver/flags/ke.png delete mode 100644 source/masterserver/flags/kg.png delete mode 100644 source/masterserver/flags/kh.png delete mode 100644 source/masterserver/flags/ki.png delete mode 100644 source/masterserver/flags/km.png delete mode 100644 source/masterserver/flags/kn.png delete mode 100644 source/masterserver/flags/kp.png delete mode 100644 source/masterserver/flags/kr.png delete mode 100644 source/masterserver/flags/kw.png delete mode 100644 source/masterserver/flags/ky.png delete mode 100644 source/masterserver/flags/kz.png delete mode 100644 source/masterserver/flags/la.png delete mode 100644 source/masterserver/flags/lb.png delete mode 100644 source/masterserver/flags/lc.png delete mode 100644 source/masterserver/flags/li.png delete mode 100644 source/masterserver/flags/lk.png delete mode 100644 source/masterserver/flags/lr.png delete mode 100644 source/masterserver/flags/ls.png delete mode 100644 source/masterserver/flags/lt.png delete mode 100644 source/masterserver/flags/lu.png delete mode 100644 source/masterserver/flags/lv.png delete mode 100644 source/masterserver/flags/ly.png delete mode 100644 source/masterserver/flags/ma.png delete mode 100644 source/masterserver/flags/mc.png delete mode 100644 source/masterserver/flags/md.png delete mode 100644 source/masterserver/flags/me.png delete mode 100644 source/masterserver/flags/mg.png delete mode 100644 source/masterserver/flags/mh.png delete mode 100644 source/masterserver/flags/mk.png delete mode 100644 source/masterserver/flags/ml.png delete mode 100644 source/masterserver/flags/mm.png delete mode 100644 source/masterserver/flags/mn.png delete mode 100644 source/masterserver/flags/mo.png delete mode 100644 source/masterserver/flags/mp.png delete mode 100644 source/masterserver/flags/mq.png delete mode 100644 source/masterserver/flags/mr.png delete mode 100644 source/masterserver/flags/ms.png delete mode 100644 source/masterserver/flags/mt.png delete mode 100644 source/masterserver/flags/mu.png delete mode 100644 source/masterserver/flags/mv.png delete mode 100644 source/masterserver/flags/mw.png delete mode 100644 source/masterserver/flags/mx.png delete mode 100644 source/masterserver/flags/my.png delete mode 100644 source/masterserver/flags/mz.png delete mode 100644 source/masterserver/flags/na.png delete mode 100644 source/masterserver/flags/nc.png delete mode 100644 source/masterserver/flags/ne.png delete mode 100644 source/masterserver/flags/nf.png delete mode 100644 source/masterserver/flags/ng.png delete mode 100644 source/masterserver/flags/ni.png delete mode 100644 source/masterserver/flags/nl.png delete mode 100644 source/masterserver/flags/no.png delete mode 100644 source/masterserver/flags/np.png delete mode 100644 source/masterserver/flags/nr.png delete mode 100644 source/masterserver/flags/nu.png delete mode 100644 source/masterserver/flags/nz.png delete mode 100644 source/masterserver/flags/om.png delete mode 100644 source/masterserver/flags/pa.png delete mode 100644 source/masterserver/flags/pe.png delete mode 100644 source/masterserver/flags/pf.png delete mode 100644 source/masterserver/flags/pg.png delete mode 100644 source/masterserver/flags/ph.png delete mode 100644 source/masterserver/flags/pk.png delete mode 100644 source/masterserver/flags/pl.png delete mode 100644 source/masterserver/flags/pm.png delete mode 100644 source/masterserver/flags/pn.png delete mode 100644 source/masterserver/flags/pr.png delete mode 100644 source/masterserver/flags/ps.png delete mode 100644 source/masterserver/flags/pt.png delete mode 100644 source/masterserver/flags/pw.png delete mode 100644 source/masterserver/flags/py.png delete mode 100644 source/masterserver/flags/qa.png delete mode 100644 source/masterserver/flags/re.png delete mode 100644 source/masterserver/flags/ro.png delete mode 100644 source/masterserver/flags/rs.png delete mode 100644 source/masterserver/flags/ru.png delete mode 100644 source/masterserver/flags/rw.png delete mode 100644 source/masterserver/flags/sa.png delete mode 100644 source/masterserver/flags/sb.png delete mode 100644 source/masterserver/flags/sc.png delete mode 100644 source/masterserver/flags/sd.png delete mode 100644 source/masterserver/flags/se.png delete mode 100644 source/masterserver/flags/sg.png delete mode 100644 source/masterserver/flags/sh.png delete mode 100644 source/masterserver/flags/si.png delete mode 100644 source/masterserver/flags/sj.png delete mode 100644 source/masterserver/flags/sk.png delete mode 100644 source/masterserver/flags/sl.png delete mode 100644 source/masterserver/flags/sm.png delete mode 100644 source/masterserver/flags/sn.png delete mode 100644 source/masterserver/flags/so.png delete mode 100644 source/masterserver/flags/sr.png delete mode 100644 source/masterserver/flags/st.png delete mode 100644 source/masterserver/flags/sv.png delete mode 100644 source/masterserver/flags/sy.png delete mode 100644 source/masterserver/flags/sz.png delete mode 100644 source/masterserver/flags/tc.png delete mode 100644 source/masterserver/flags/td.png delete mode 100644 source/masterserver/flags/tf.png delete mode 100644 source/masterserver/flags/tg.png delete mode 100644 source/masterserver/flags/th.png delete mode 100644 source/masterserver/flags/tj.png delete mode 100644 source/masterserver/flags/tk.png delete mode 100644 source/masterserver/flags/tl.png delete mode 100644 source/masterserver/flags/tm.png delete mode 100644 source/masterserver/flags/tn.png delete mode 100644 source/masterserver/flags/to.png delete mode 100644 source/masterserver/flags/tr.png delete mode 100644 source/masterserver/flags/tt.png delete mode 100644 source/masterserver/flags/tv.png delete mode 100644 source/masterserver/flags/tw.png delete mode 100644 source/masterserver/flags/tz.png delete mode 100644 source/masterserver/flags/ua.png delete mode 100644 source/masterserver/flags/ug.png delete mode 100644 source/masterserver/flags/um.png delete mode 100644 source/masterserver/flags/us.png delete mode 100644 source/masterserver/flags/uy.png delete mode 100644 source/masterserver/flags/uz.png delete mode 100644 source/masterserver/flags/va.png delete mode 100644 source/masterserver/flags/vc.png delete mode 100644 source/masterserver/flags/ve.png delete mode 100644 source/masterserver/flags/vg.png delete mode 100644 source/masterserver/flags/vi.png delete mode 100644 source/masterserver/flags/vn.png delete mode 100644 source/masterserver/flags/vu.png delete mode 100644 source/masterserver/flags/wf.png delete mode 100644 source/masterserver/flags/ws.png delete mode 100644 source/masterserver/flags/ye.png delete mode 100644 source/masterserver/flags/yt.png delete mode 100644 source/masterserver/flags/za.png delete mode 100644 source/masterserver/flags/zm.png delete mode 100644 source/masterserver/flags/zw.png delete mode 100644 source/masterserver/functions.php delete mode 100644 source/masterserver/images/game_icon.png delete mode 100644 source/masterserver/images/megaglest.ico delete mode 100644 source/masterserver/index.php delete mode 100644 source/masterserver/install/scheme_mysql.sql delete mode 100644 source/masterserver/robots.txt delete mode 100644 source/masterserver/scripts/desktop_notifications.js delete mode 100644 source/masterserver/scripts/json2.js delete mode 100644 source/masterserver/scripts/utils.js delete mode 100644 source/masterserver/showGameStats.php delete mode 100644 source/masterserver/showMapsForGlest.php delete mode 100644 source/masterserver/showPlayers.php delete mode 100644 source/masterserver/showRecentServers.php delete mode 100644 source/masterserver/showScenariosForGlest.php delete mode 100644 source/masterserver/showServers.php delete mode 100644 source/masterserver/showServersForGlest.php delete mode 100644 source/masterserver/showServersJson.php delete mode 100644 source/masterserver/showTechsForGlest.php delete mode 100644 source/masterserver/showTilesetsForGlest.php delete mode 100644 source/masterserver/style/screen.css diff --git a/.gitattributes b/.gitattributes index 4e8e8de0..e09b704f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -38,3 +38,4 @@ robots.txt eol=lf .gitignore export-ignore .gitattributes export-ignore .gitmodules export-ignore +README.md export-ignore diff --git a/README.md b/README.md new file mode 100644 index 00000000..9f43ee6a --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +**This is the game engine source code repository.** + +MegaGlest (http://megaglest.org) is a libre software cross +platform real-time strategy game. + +[![logo](http://megaglest.org/uploads/megaglest2011/logo/logo.png)] +(http://megaglest.org/) + +MegaGlest is an entertaining free (freeware and free software) +and open source cross-platform 3D real-time strategy (RTS) game, +where you control the armies of one of seven different factions: +Tech, Magic, Egypt, Indians, Norsemen, Persian or Romans. The +game is setup in one of 17 naturally looking settings, which +-like the unit models- are crafted with great appreciation for +detail. A lot of additional game data can be downloaded from +within the game at no cost. + +[**MegaGlest Downloads**](http://megaglest.org/download.html) + +[![gif](http://megaglest.org/uploads/images/screenshots/game_screens.gif)] +(http://megaglest.org/screenshots.html) +[![intro](http://megaglest.org/uploads/images/trailer3.png)] +(http://downloads.megaglest.org/videos/megaglest_game_trailer_lq.webm) + +If you want compile MegaGlest yourself then you should read the +[**tutorial**](https://docs.megaglest.org/MG/Development) or +[tutorial2](https://github.com/MegaGlest/megaglest-source/wiki/Git-How-To) + + +go to the [Main Repository](https://github.com/MegaGlest/megaglest-source) +( e.g. from the fork ... ) diff --git a/README.txt b/README.txt deleted file mode 100644 index 052b15ca..00000000 --- a/README.txt +++ /dev/null @@ -1 +0,0 @@ -Please refer to docs/ for all documentation, license and copyright information. diff --git a/data/glest_game b/data/glest_game index cfb41238..7de4b4b6 160000 --- a/data/glest_game +++ b/data/glest_game @@ -1 +1 @@ -Subproject commit cfb41238ad446318b6dda34adba700194a5037c6 +Subproject commit 7de4b4b6d02ae1933e3964cc02d31aa288d49463 diff --git a/mk/linux/.gitignore b/mk/linux/.gitignore index 518ecbeb..5fa5b59b 100644 --- a/mk/linux/.gitignore +++ b/mk/linux/.gitignore @@ -1,8 +1,8 @@ -megaglest -megaglest.6 +/megaglest +/megaglest.6 -megaglest_* -!*.desktop +/megaglest_* +!/*.desktop core core.bak diff --git a/source/.gitignore b/source/.gitignore index dace2a5b..0f1f98e9 100644 --- a/source/.gitignore +++ b/source/.gitignore @@ -1,2 +1 @@ /windows_deps*/ -/glest_game/facilities/gitversion.h diff --git a/source/glest_game/facilities/.gitignore b/source/glest_game/facilities/.gitignore new file mode 100644 index 00000000..7735ddf7 --- /dev/null +++ b/source/glest_game/facilities/.gitignore @@ -0,0 +1 @@ +/gitversion.h diff --git a/source/masterserver/README.txt b/source/masterserver/README.txt deleted file mode 100644 index ffb16c82..00000000 --- a/source/masterserver/README.txt +++ /dev/null @@ -1 +0,0 @@ -Please refer to the files in the docs/ subdirectory. diff --git a/source/masterserver/addGameStats.php b/source/masterserver/addGameStats.php deleted file mode 100644 index 3ad6a4a4..00000000 --- a/source/masterserver/addGameStats.php +++ /dev/null @@ -1,274 +0,0 @@ - 0 ) - { - mysql_query( 'DELETE FROM glestserver WHERE ' . $whereClause . ';'); - mysql_query( 'DELETE FROM glestgamestats WHERE ' . $whereClause . ';'); - mysql_query( 'DELETE FROM glestgameplayerstats WHERE ' . $whereClause . ';'); - - echo 'OK - ' . $gameDuration; - return; - } - } - - $stats_in_db = @mysql_query( 'SELECT COUNT(*) FROM glestgamestats WHERE ' . $whereClause . ';' ); - $statsCount = @mysql_fetch_row( $stats_in_db ); - $player_stats_in_db = @mysql_query( 'SELECT COUNT(*) FROM glestgameplayerstats WHERE ' . $whereClause . ';'); - $player_statsCount = @mysql_fetch_row( $player_stats_in_db ); - - - $gameUUID = (string) clean_str( $_GET['gameUUID'] ); - $tech = (string) clean_str( $_GET['tech'] ); - $factionCount = 0; - if ( isset( $_GET['factionCount'] ) ) { - $factionCount = (string) clean_str( $_GET['factionCount'] ); - } - $framesPlayed = 0; - if ( isset( $_GET['framesPlayed'] ) ) { - $framesPlayed = (string) clean_str( $_GET['framesPlayed'] ); - } - $maxConcurrentUnitCount = 0; - if ( isset( $_GET['maxConcurrentUnitCount'] ) ) { - $maxConcurrentUnitCount = (string) clean_str( $_GET['maxConcurrentUnitCount'] ); - } - $totalEndGameConcurrentUnitCount = 0; - if ( isset( $_GET['totalEndGameConcurrentUnitCount'] ) ) { - $totalEndGameConcurrentUnitCount = (string) clean_str( $_GET['totalEndGameConcurrentUnitCount'] ); - } - $isHeadlessServer = 0; - if ( isset( $_GET['isHeadlessServer'] ) ) { - $isHeadlessServer = (string) clean_str( $_GET['isHeadlessServer'] ); - } - - //echo '#1 ' . $whereClause; - //echo '#2 ' . $statsCount[0]; - - if ( $statsCount[0] > 0 ) // this game is contained in the database - { - // update database info on this game server; no checks are performed - $result = mysql_query( 'UPDATE glestgamestats SET ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'factionCount=\'' . mysql_real_escape_string( $factionCount ) . '\', ' . - 'framesPlayed=\'' . mysql_real_escape_string( $framesPlayed ) . '\', ' . - 'framesToCalculatePlaytime=\'' . mysql_real_escape_string( $framesToCalculatePlaytime ) . '\', ' . - 'maxConcurrentUnitCount=\'' . mysql_real_escape_string( $maxConcurrentUnitCount ) . '\', ' . - 'totalEndGameConcurrentUnitCount=\'' . mysql_real_escape_string( $totalEndGameConcurrentUnitCount ) . '\', ' . - 'isHeadlessServer=\'' . mysql_real_escape_string( $isHeadlessServer ) . '\', ' . - 'lasttime=' . 'now()' . ' ' . - 'WHERE ' . $whereClause . ';'); - - if (!$result) { - die('part 1a: Invalid query: ' . mysql_error()); - } - - echo 'OK1a'; - } - else // this game server is not listed in the database, yet - { // check whether this game server is available from the Internet; if it is, add it to the database - // update database info on this game server; no checks are performed - $result = mysql_query( 'INSERT INTO glestgamestats SET ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'factionCount=\'' . mysql_real_escape_string( $factionCount ) . '\', ' . - 'framesPlayed=\'' . mysql_real_escape_string( $framesPlayed ) . '\', ' . - 'framesToCalculatePlaytime=\'' . mysql_real_escape_string( $framesToCalculatePlaytime ) . '\', ' . - 'maxConcurrentUnitCount=\'' . mysql_real_escape_string( $maxConcurrentUnitCount ) . '\', ' . - 'totalEndGameConcurrentUnitCount=\'' . mysql_real_escape_string( $totalEndGameConcurrentUnitCount ) . '\', ' . - 'isHeadlessServer=\'' . mysql_real_escape_string( $isHeadlessServer ) . '\';'); - - if (!$result) { - die('part 2a: Invalid query: ' . mysql_error()); - } - - echo 'OK2b'; - } - - for ( $factionNumber = 0; $factionNumber < $factionCount ; $factionNumber++) - { - // Player details - $factionIndex = 0; - if ( isset( $_GET['factionIndex_' . $factionNumber ] ) ) { - $factionIndex = clean_str( $_GET['factionIndex_' . $factionNumber] ); - } - - $controlType = 0; - if ( isset( $_GET['controlType_' . $factionNumber] ) ) { - $controlType = clean_str( $_GET['controlType_' . $factionNumber] ); - } - - $resourceMultiplier = 0; - if ( isset( $_GET['resourceMultiplier_' . $factionNumber] ) ) { - $resourceMultiplier = clean_str( $_GET['resourceMultiplier_' . $factionNumber] ); - } - - $factionTypeName = ""; - if ( isset( $_GET['factionTypeName_' . $factionNumber] ) ) { - $factionTypeName = (string) clean_str( $_GET['factionTypeName_' . $factionNumber] ); - } - - $personalityType = 0; - if ( isset( $_GET['personalityType_' . $factionNumber] ) ) { - $personalityType = clean_str( $_GET['personalityType_' . $factionNumber] ); - } - - $teamIndex = 0; - if ( isset( $_GET['teamIndex_' . $factionNumber] ) ) { - $teamIndex = clean_str( $_GET['teamIndex_' . $factionNumber] ); - } - - $wonGame = 0; - if ( isset( $_GET['wonGame_' . $factionNumber] ) ) { - $wonGame = clean_str( $_GET['wonGame_' . $factionNumber] ); - } - - $killCount = 0; - if ( isset( $_GET['killCount_' . $factionNumber] ) ) { - $killCount = clean_str( $_GET['killCount_' . $factionNumber] ); - } - - $enemyKillCount = 0; - if ( isset( $_GET['enemyKillCount_' . $factionNumber] ) ) { - $enemyKillCount = clean_str( $_GET['enemyKillCount_' . $factionNumber] ); - } - - $deathCount = 0; - if ( isset( $_GET['deathCount_' . $factionNumber] ) ) { - $deathCount = clean_str( $_GET['deathCount_' . $factionNumber] ); - } - - $unitsProducedCount = 0; - if ( isset( $_GET['unitsProducedCount_' . $factionNumber] ) ) { - $unitsProducedCount = clean_str( $_GET['unitsProducedCount_' . $factionNumber] ); - } - - $resourceHarvestedCount = 0; - if ( isset( $_GET['resourceHarvestedCount_' . $factionNumber] ) ) { - $resourceHarvestedCount = clean_str( $_GET['resourceHarvestedCount_' . $factionNumber] ); - } - - $playerName = ""; - if ( isset( $_GET['playerName_' . $factionNumber] ) ) { - $playerName = (string) clean_str( $_GET['playerName_' . $factionNumber] ); - } - - $quitBeforeGameEnd = 0; - if ( isset( $_GET['quitBeforeGameEnd_' . $factionNumber] ) ) { - $quitBeforeGameEnd = clean_str( $_GET['quitBeforeGameEnd_' . $factionNumber] ); - } - - $quitTime = 0; - if ( isset( $_GET['quitTime_' . $factionNumber] ) ) { - $quitTime = clean_str( $_GET['quitTime_' . $factionNumber] ); - } - - $playerUUID = ""; - if ( isset( $_GET['playerUUID_' . $factionNumber] ) ) { - $playerUUID = (string) clean_str( $_GET['playerUUID_' . $factionNumber] ); - } - - $playerPlatform = ""; - if ( isset( $_GET['platform_' . $factionNumber] ) ) { - $playerPlatform = (string) clean_str( $_GET['platform_' . $factionNumber] ); - } - - if($player_statsCount[0] > 0) - { - $result = mysql_query( 'UPDATE glestgameplayerstats SET ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\', ' . - 'factionIndex=' . $factionIndex . ', ' . - 'controlType=' . $controlType . ', ' . - 'resourceMultiplier=' . $resourceMultiplier . ', ' . - 'factionTypeName=\'' . mysql_real_escape_string( $factionTypeName ) . '\', ' . - 'personalityType=' . $personalityType . ', ' . - 'teamIndex=' . $teamIndex . ', ' . - 'wonGame=' . $wonGame . ', ' . - 'killCount=' . $killCount . ', ' . - 'enemyKillCount=' . $enemyKillCount . ', ' . - 'deathCount=' . $deathCount . ', ' . - 'unitsProducedCount=' . $unitsProducedCount . ', ' . - 'resourceHarvestedCount=' . $resourceHarvestedCount . ', ' . - 'playerName=\'' . mysql_real_escape_string( $playerName ) . '\', ' . - 'quitBeforeGameEnd=' . $quitBeforeGameEnd . ', ' . - 'quitTime=' . $quitTime . ', ' . - 'playerUUID=\'' . mysql_real_escape_string( $playerUUID ) . '\', ' . - 'platform=\'' . mysql_real_escape_string( $playerPlatform ) . '\', ' . - 'lasttime=' . 'now()' . ' ' . - 'WHERE ' . $whereClause . ' AND factionIndex = ' . $factionIndex . ';'); - - if (!$result) { - die('part 1b: Invalid query: ' . mysql_error()); - } - - //echo 'OK1 $factionNumber = ' . $factionNumber; - echo 'OK1b' . $factionNumber; - } - else - { - $result = mysql_query( 'INSERT INTO glestgameplayerstats SET ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\', ' . - 'factionIndex=' . $factionIndex . ', ' . - 'controlType=' . $controlType . ', ' . - 'resourceMultiplier=' . $resourceMultiplier . ', ' . - 'factionTypeName=\'' . mysql_real_escape_string( $factionTypeName ) . '\', ' . - 'personalityType=' . $personalityType . ', ' . - 'teamIndex=' . $teamIndex . ', ' . - 'wonGame=' . $wonGame . ', ' . - 'killCount=' . $killCount . ', ' . - 'enemyKillCount=' . $enemyKillCount . ', ' . - 'deathCount=' . $deathCount . ', ' . - 'unitsProducedCount=' . $unitsProducedCount . ', ' . - 'resourceHarvestedCount=' . $resourceHarvestedCount . ', ' . - 'playerName=\'' . mysql_real_escape_string( $playerName ) . '\', ' . - 'quitBeforeGameEnd=' . $quitBeforeGameEnd . ', ' . - 'quitTime=' . $quitTime . ', ' . - 'platform=\'' . mysql_real_escape_string( $playerPlatform ) . '\', ' . - 'playerUUID=\'' . mysql_real_escape_string( $playerUUID ) . '\';'); - - if (!$result) { - die('part 2b: Invalid query: ' . mysql_error()); - } - - //echo 'OK2 $factionNumber = ' . $factionNumber; - echo 'OK2b' . $factionNumber; - } - } - - db_disconnect( DB_LINK ); - } -?> diff --git a/source/masterserver/addServerInfo.php b/source/masterserver/addServerInfo.php deleted file mode 100644 index d49544ad..00000000 --- a/source/masterserver/addServerInfo.php +++ /dev/null @@ -1,310 +0,0 @@ - \'' . - mysql_real_escape_string( $gameUUID ) . '\' AND status in (0,1,2);' ); - } - - if ( ($remote_ip == $game_host_ip && $service_port == $game_host_port) || $status == 2 ) // this server is contained in the database - { - if ( $remote_ip == $game_host_ip && $service_port == $game_host_port) - { - // update database info on this game server; no checks are performed - mysql_query( 'UPDATE glestserver SET ' . - 'glestVersion=\'' . mysql_real_escape_string( $glestVersion ) . '\', ' . - 'platform=\'' . mysql_real_escape_string( $platform ) . '\', ' . - 'binaryCompileDate=\'' . mysql_real_escape_string( $binaryCompileDate ) . '\', ' . - 'serverTitle=\'' . mysql_real_escape_string( $serverTitle ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'map=\'' . mysql_real_escape_string( $map ) . '\', ' . - 'tileset=\'' . mysql_real_escape_string( $tileset ) . '\', ' . - 'activeSlots=\'' . mysql_real_escape_string( $activeSlots ) . '\', ' . - 'networkSlots=\'' . mysql_real_escape_string( $networkSlots ) . '\', ' . - 'connectedClients=\'' . mysql_real_escape_string( $connectedClients ) . '\', ' . - 'externalServerPort=\''. mysql_real_escape_string( $service_port ) . '\', ' . - 'status=\'' . mysql_real_escape_string( $status ) . '\', ' . - 'lasttime=' . 'now()' . ' ' . - 'WHERE ' . $whereClause); - //updateServer($remote_ip, $service_port, $serverTitle, $connectedClients, $networkSlots); - echo 'OK'; - } - else if ($status == 2) - { - - if ( extension_loaded('geoip') ) { - - if ( $privacyPlease == 0 ) - { - $country = geoip_country_code_by_name( $remote_ip ); - } - else - { - $country = ''; - } - } - - // cleanup old entrys with same remote port and ip - // I hope this fixes those double entrys of servers - mysql_query( 'DELETE FROM glestserver WHERE '. $whereClause ); - - // insert new entry - mysql_query( 'INSERT INTO glestserver SET ' . - 'glestVersion=\'' . mysql_real_escape_string( $glestVersion ) . '\', ' . - 'platform=\'' . mysql_real_escape_string( $platform ) . '\', ' . - 'binaryCompileDate=\'' . mysql_real_escape_string( $binaryCompileDate ) . '\', ' . - 'serverTitle=\'' . mysql_real_escape_string( $serverTitle ) . '\', ' . - 'ip=\'' . mysql_real_escape_string( $remote_ip ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'map=\'' . mysql_real_escape_string( $map ) . '\', ' . - 'tileset=\'' . mysql_real_escape_string( $tileset ) . '\', ' . - 'activeSlots=\'' . mysql_real_escape_string( $activeSlots ) . '\', ' . - 'networkSlots=\'' . mysql_real_escape_string( $networkSlots ) . '\', ' . - 'connectedClients=\'' . mysql_real_escape_string( $connectedClients ) . '\', ' . - 'externalServerPort=\''. mysql_real_escape_string( $service_port ) . '\', ' . - 'country=\'' . mysql_real_escape_string( $country ) . '\', ' . - 'status=\'' . mysql_real_escape_string( $status ) . '\', ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\';' - ); - echo 'OK'; - } - } - else // this game server is not listed in the database, yet - { // check whether this game server is available from the Internet; if it is, add it to the database - sleep(8); // was 3 - $socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ); - if ( $socket < 0 ) { - echo 'socket_create() failed.' . PHP_EOL . ' Reason: ' . socket_strerror( $socket ) . PHP_EOL; - } - socket_set_nonblock( $socket ) - or die( 'Unable to set nonblock on socket.' ); - - $timeout = 10; //timeout in seconds - echo 'Trying to connect to \'' . $remote_ip . '\' using port \'' . $service_port . '\'...' . PHP_EOL; - - $canconnect = true; - $time = time(); - error_reporting( E_ERROR ); - - for ( ; !@socket_connect( $socket, $remote_ip, $service_port ); ) - { - $socket_last_error = socket_last_error( $socket ); - if ( $socket_last_error == 115 || $socket_last_error == 114) - { - if ( ( time() - $time ) >= $timeout ) - { - $canconnect = false; - echo 'socket_connect() failed.' . PHP_EOL . ' Reason: (' . $socket_last_error . ') ' . socket_strerror( $socket_last_error ) . PHP_EOL; - break; - } - sleep( 1 ); - continue; - } - // for answers on this see: http://bobobobo.wordpress.com/2008/11/09/resolving-winsock-error-10035-wsaewouldblock/ - else if($socket_last_error == 10035 || $socket_last_error == 10037) { - break; - } - - $canconnect = false; - echo 'socket_connect() failed.' . PHP_EOL . ' Reason: (' . $socket_last_error . ') ' . socket_strerror( $socket_last_error ) . PHP_EOL; - break; - } - - socket_set_block( $socket ) - or die( 'Unable to set block on socket.' ); - - //echo "and now read ...."; - //$buf = socket_read($socket, 161); - //echo $buf ."\n"; - - // Make sure its a glest server connecting - // - // struct Data{ - // int8 messageType; - // NetworkString versionString; - // NetworkString name; - // int16 playerIndex; - // int8 gameState; - // }; - - - if ( $canconnect == true ) { - $data_from_server = socket_read( $socket, 1 ); - } - - - socket_close( $socket ); - - error_reporting( E_ALL ); - - if ( $canconnect == false ) - { - echo 'wrong router setup'; - } - /* - else if ( $data_from_server != 1 ) // insert serious verification here - { - echo "invalid handshake!"; - } - */ - else // connection to game server succeeded, protocol verification succeeded - { // add this game server to the database - if ( extension_loaded('geoip') ) { - - if ( $privacyPlease == 0 ) - { - $country = geoip_country_code_by_name( $remote_ip ); - } - else - { - $country = ''; - } - } - - // cleanup old entrys with same remote port and ip - // I hope this fixes those double entrys of servers - mysql_query( 'DELETE FROM glestserver WHERE '. $whereClause ); - // insert new entry - mysql_query( 'INSERT INTO glestserver SET ' . - 'glestVersion=\'' . mysql_real_escape_string( $glestVersion ) . '\', ' . - 'platform=\'' . mysql_real_escape_string( $platform ) . '\', ' . - 'binaryCompileDate=\'' . mysql_real_escape_string( $binaryCompileDate ) . '\', ' . - 'serverTitle=\'' . mysql_real_escape_string( $serverTitle ) . '\', ' . - 'ip=\'' . mysql_real_escape_string( $remote_ip ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'map=\'' . mysql_real_escape_string( $map ) . '\', ' . - 'tileset=\'' . mysql_real_escape_string( $tileset ) . '\', ' . - 'activeSlots=\'' . mysql_real_escape_string( $activeSlots ) . '\', ' . - 'networkSlots=\'' . mysql_real_escape_string( $networkSlots ) . '\', ' . - 'connectedClients=\'' . mysql_real_escape_string( $connectedClients ) . '\', ' . - 'externalServerPort=\''. mysql_real_escape_string( $service_port ) . '\', ' . - 'country=\'' . mysql_real_escape_string( $country ) . '\', ' . - 'status=\'' . mysql_real_escape_string( $status ) . '\', ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\';' - ); - echo 'OK'; - //addLatestServer($remote_ip, $service_port, $serverTitle, $connectedClients, $networkSlots); - } - } - } - db_disconnect( DB_LINK ); -?> diff --git a/source/masterserver/cleanUpServerList.php b/source/masterserver/cleanUpServerList.php deleted file mode 100644 index 0e75d6ca..00000000 --- a/source/masterserver/cleanUpServerList.php +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/source/masterserver/config.php b/source/masterserver/config.php deleted file mode 100644 index a05a7ced..00000000 --- a/source/masterserver/config.php +++ /dev/null @@ -1,32 +0,0 @@ - diff --git a/source/masterserver/docs/AUTHORS.txt b/source/masterserver/docs/AUTHORS.txt deleted file mode 100644 index 73d1775a..00000000 --- a/source/masterserver/docs/AUTHORS.txt +++ /dev/null @@ -1,33 +0,0 @@ -* Copyrights * - -Except where otherwise noted, all of the documentation, multimedia and software -included in the MegaGlest setup package is copyrighted by The MegaGlest Team. - -Copyright (C) 2001-2014 The MegaGlest Team. All rights reserved. - -This software is provided without any express or implied warranty. In no event -shall the author be held liable for any damages arising from the use of this -software. - -This software may be redistributed freely, but all redistributions must retain -all occurences of the above copyright notice and web site addresses that are -currently in place and must provide full source code with ALL modifications. - - - -* Licensing * - -You can redistribute this code and/or modify it under the terms of the GNU -General Public License as published by the Free Software Foundation; either -version 3 of the License, or (at your option) any later version. - -The complete license is contained in this distribution in the file -'gnu_gpl_3.0.txt' and also available online at -http://www.gnu.org/licenses/gpl.html - -On Debian GNU/Linux systems (and derivates) please find license information in: -/usr/share/common-licenses/GPL -/usr/share/common-licenses/GPL-2 -/usr/share/common-licenses/GPL-2+ -/usr/share/common-licenses/GPL-3 -/usr/share/common-licenses/GPL-3+ diff --git a/source/masterserver/docs/README.txt b/source/masterserver/docs/README.txt deleted file mode 100644 index 7e05190a..00000000 --- a/source/masterserver/docs/README.txt +++ /dev/null @@ -1,66 +0,0 @@ -ABOUT - -This is the MegaGlest master server. MegaGlest (http://megaglest.org) is a -libre software cross platform real-time strategy game. - -This master server does the following: -· publish game hosts (when a user decides to host) -· list hosted games (HTML, CSV, JSON output) -· list recently hosted gamed (HTML output) - this code is currently disabled -· list available game mods (CSV output) -· provide a version check for game installations - -It uses a standard PHP/MySQL setup to achieve this. When instances of MegaGlest -engine based games publish their game information, they do so by pushing it to -this web server in regular intervals. Stale entries are removed when the next -client requests the list. When game instances retrieve the list of hosted games -or available game mods, they do so by pulling this information from the server. -Game and master server communicate using HTTP. The client sends requests by -HTTP GET passing along URL parameters while the server responds in a CSV format -or single field plain text. The version check is currently implemented as plain -text files (which use symbolic links for deduplication purposes) on the server. -This may be replaced by a single configurable PHP script in the future. - -The MegaGlest Team hosts a live copy of this code at - http://master.megaglest.org -Please do not use this instance for your tests, but set up a copy of your own. - - - -INSTALLATION - -1. Setup a web server with PHP and a MySQL database server. - Sucessfully tested configurations (on Debian GNU/Linux 6 and 7): - · Apache 2.2 + mod_php 5.3.3 - · Nginx 1.2.1 + fastcgi + PHP-FPM 5.4.4 - · MySQL Community Server/Edition 5.1 (Oracle) - · MySQL Server 5.5 (Percona) - -2. Create a new MySQL database and a user who has has all standard permissions - to work on this database after authentication. - Example: - CREATE DATABASE 'megaglest-master' ENGINE=InnoDB; - CREATE USER 'megaglest-master'@'localhost' IDENTIFIED BY 'secret password'; - GRANT ALL ON 'megaglest-master.*' TO 'megaglest-master'; - -3. Copy all files (you can omit INSTALL and install/) to your webserver and - edit config.php to reflect the MySQL connection parameters and game title; - also replace the images in images/ by some which match your game title. - -4. Connect the new user to the new database, then execute the SQL statments in - install/scheme_mysql.sql. - Example: - mysql -u megaglest-master -p megaglest-master < install/scheme_mysql.sql - -5. Set up the webserver to allow access to, and set up PHP to execute, the - PHP files you placed on your webserver. Practically you may want to create - a new "VirtualHost"/"Server" and make sure it points to where you placed - the files and can run PHP. - -To test and use this server with your MegaGlest engine based game, configure -the "Masterserver" property in glestuser.ini (if it's MegaGlest) or glest.ini -(if it's a different game). - -To add mods to the game mod menu, edit the database contents using your -favorite MySQL editor or develop a web based frontend to do so. In the latter -case, please let us know about it and try to use a compatible license. diff --git a/source/masterserver/docs/gnu_gpl_3.0.txt b/source/masterserver/docs/gnu_gpl_3.0.txt deleted file mode 100644 index 94a9ed02..00000000 --- a/source/masterserver/docs/gnu_gpl_3.0.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/source/masterserver/flags/README b/source/masterserver/flags/README deleted file mode 100644 index 46acef20..00000000 --- a/source/masterserver/flags/README +++ /dev/null @@ -1,12 +0,0 @@ -These flag icons have been copied from http://www.famfamfam.com where they are -made available under a Public Domain license. Some of the original content has -been removed. - -Original license: ------ -Flag icons - http://www.famfamfam.com -These icons are public domain, and as such are free for any use (attribution appreciated but not required). -Note that these flags are named using the ISO3166-1 alpha-2 country codes where appropriate. A list of codes can be found at http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 -If you find these icons useful, please donate via paypal to mjames@gmail.com (or click the donate button available at http://www.famfamfam.com/lab/icons/silk) -Contact: mjames@gmail.com ------ diff --git a/source/masterserver/flags/ad.png b/source/masterserver/flags/ad.png deleted file mode 100644 index 625ca84f9ec596848d4b967b5556fda897ca7183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)S}{rU-#^xW|9%5S{`_G8k=zVG=|5luWB>#JF#yj01oZa& zTu&JQ008~}|NQ&{0055x0sR95`v3p?1_t~7{`v!N`v3d-{`&g=`T6amqXIBA$0h)T zKokWRkpoMx|Go@O4FvhR>O1p+i7`B6t^3)y2dJ<#?4I?d4x-E}Az98Z`2`TmzkmP! z{`(J9{pauh-+zJD{JOYLhW+QSzkh#x`Y&wke*WLjpZ~u9`2XuCr@{^OJ|MkZb_UGR@Z=V>fB*iaq<8P{*B}2u-uMnu#J~U$KrBDL0bT$1_irEqiZcM6WEF7g<|*+% zzkjHi-TwRc=f7_t9|K*?`1?07lmG&V<)V$@{}>pUYZ(~+fDw@M3(WY1!T<=sp}f-o0K!lJ3<>Jc!&VtMslE3ph2^H3FGe(F z4|^}slF1@l1Nxc}^5hjjU=0la|37)k@b@neJ^1|l@87?_{{z(l6@kcKe}Db@_Y267 z<&g#201!YdV6*>2R0EZ*bYA%%2Vi7me5m>mAb?naPGtnD20MY__n-f`0mzg8{s9CK z*hzmtW)s%H$oS{aAAkS?JLxaT`2W9u;n%DD1Q-B%#%TuGpFSS|0000&5HW|5#c7{r(N){s9YCi84$~U|{$Glm>AD0*K|^yLU}ZO+eP) ze;~;4`#0mCzs$dX{r~-&?f370zkUTM{{OB1_1E8DKmYz*JbN)f0I>i8Q1#1Kum1f0 z{pZggpt}FRe*ORX>;JEx|9}4c_w(m__W!pfKK=atLxM{ZXbC_7vHbh@@9*EgK-ECy zzkh)Y{?EYhFEQc&-#`EN9{7Lq7*OE*@9)2U|NQmmC(vO40VtezBLF}U2%?OI(TG)& zJC>!~;SYmN-)zb6gc(7A-^Q(#z0vHb9!CJ#T#ii{@&pjek8j`pfX)5|H00+GpnLvt za{MtfWBC4qk%R63j~{=2{QLgr`wyTb*amx2hce{;{QL3a|BhWh#6A5bKmf5of*%NgdVm^$Zuo!gI_LQd|G=96g51yWl0Agf71rLE? q3XWqq@&Lw?Iyk0*94-cc00RK~MQKxxUU$F%0000= z`}|7!`YQYT5C8xIh~*yx1DgQ1_jkSr_QgN{Gn)!7=zkRT=l(yS{y%^Jd$>%yrP!)vVq~xpZ~xA{{HjZ>hB|)Z~OQoBLBm{yCqA0{k;C`&+mV~|1$jj15^wU zKukakbkF}kzkmk({q_6zmUTZaUWBOraqa5!?(V-pgMR}R{04?0&`AIR#PSE^hrdi> z;*7t4gLVFSJ$J5DTibsorq@%ai5h7B2l^1G@*gM=fUW@uAjYc<48V{DX@ijvE(11_ dg@FMezyQzuBHsGv+i3s*002ovPDHLkV1jTADB=JB diff --git a/source/masterserver/flags/ai.png b/source/masterserver/flags/ai.png deleted file mode 100644 index 74ed29d92616c86757d3c0ec04378301c8f591b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)ocPy#thD++(+#W%SS0Qvp^`1%0+_yGC)0QUL-|M&m^ z`T_tk0M7pe&iDc7fh@K74M*k&0{8f*88BG;;GY6ve?;&4{{Q>_{{8&^`u+g@|Ns5} z|C?Nv0*Gb#mu+n4z6ZW~#qjy_|6ji&ZeIEMk16oyzH)i@Pk$MNxLARR?a#kwpMS72 zF)}cG2M8dRUN*~81wCz%$A2$f`_IL|A|w6j^RHtc7{2`lYG-KkQ{(*knSqh%3kzr7 zs%s1kKL7#%F#yj00-^B^D;pD^^AqC)4C(?1m>@q26ceiU4*2{4`u_d~@vQ*ykp&A1 z3h$o${r~^~`vQo?Pm-bY@cm79zVQG5%l!B6)Riap%L`bGemnT<@2|iAfl64!%YWS~ z`p0YY_dig_cYpw5WYAmG*lPLk!;jy8|NZ#~MF0Q%{rCG1ko^Di`(Fhkd3F{?py0c9Vg{{gA~^#>F<|Nj5KapBR^@Bf~CXSi|t;lF=C z8-4)<5DUX^V9+rDCI3RuUy#}V{s46X!}R~}@4ug&fA|+@;n!b(1zCZ900KKMX({{sIILBZE*UQbc|SngJt$+`m9Kz!<;5 dBm+Qz0RWL%NC2%sdjkLf002ovPDHLkV1lARHI@JX diff --git a/source/masterserver/flags/al.png b/source/masterserver/flags/al.png deleted file mode 100644 index 92354cb6e257be2cade71cb825027ce8d9efc06d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmV-e0;m0nP)PbXFRCwBA zyv)hK@{fUmi2(>${xJOc&A`II@PmN?BKC`c;SU)710$d~Kmf4-r6niy16BY3`}g0! ze=L9h&Uybegp-Ns@87v^zGQMU|NZla@z1Y+zkdVKmFbHB0*HkH4F0@)&iwE1;&GRLuzkX(OGXMMa``@o$|Ni_2x(y(Jn3#TnHT?el|IhC;U%pHK`}6Df z@2@|9J^lXU=Z~KvfBzi*^!4A*U;lv`e*Fge3Lt=(82$q_`~m9z|ND;$!(WEqze~6o ze}X|JFO$H(U+VvX#{c{avi3L7@c;n?3L&6l7=Hix`}emN<6i~#|7+iUWBL8-&##}m zKKx5zXJr5LA80nvkwCM6egFs{po9Y?& zL6B;olm7ns#=rm&Kp-3b{RIXY(1{??Ha=$NKfkS+|9@us$Mfg+93j@fzkY#y2y!;i z&kO(o1PWH5>zPHwn7|>;0Mz;WPl13iP!Y(WKYy4&4hBXMSPugOKmaiw2gk!dq!|4J mj$lZE0R~eis zC&uN{cDQ8`!@ZNLOqwtoG6nhzPx}SV-d6yzFfcIz75{(rngJyDkKrFw8iaoThHCr$ zo8k9wMhS^O3=9AP!~%5B|9}4(ASQtkLN$m1CV&5705X362095KfLKJhW;OjWdGY7l zzrX*$DuLu*pcFC#NdEr)SL!$SY=)lz0mSm_*B_u)|AM4JP)(}33zy1Lc&_o7? zKL7y)bkd){fBym<_v`mxpbeRs`+WRVot-5A{r$IX$CJFg13u{3eX_{0R++j zR}GCkSy{&4zk!krKoTg(2n-k?g31B}5JW!NMq0d0000q< zM7LZb@rX?|r)2RP-+aO3(7q?c3+$-Vv0E)PxM3SDV%@s`#GkZvw_x^WBa~uq3^l}t zWdf(j(=(>^SgETc#5#EZT(4ObRkfxbzP9G;yza0;Ygc8-_*?EP(ca#`l6-Z6D0{tL zQ4|~MCSi!9Q9YkW=V$ix#EqZ!rc?eWA0TwdVID+3aqrYUXUhCI)Ad5!(cP!BhhW$Ayb2&r8kK!bz*2`~UE W(Ndrek0Jg50000NL7TW{{R0! zJP>i}(MpzaSkj z=eqvqa`^|6{{QbQRQ11q3~Vg_kG}Z}5I`(hw}ncX8D4$|h64jUK>or*=^r$dfI%n0 z$3MKz;!F0w91GjkkV%_X`@4 wKR^hm`X5LwD9*v?4;TUC6Bz$&3;+QJ0QLcJ=WT{TU;qFB07*qoM6N<$f>3bX%K!iX diff --git a/source/masterserver/flags/as.png b/source/masterserver/flags/as.png deleted file mode 100644 index 32f30e4ce4eedd22d4f09c4f3a46c52dd064f113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 647 zcmV;20(kw2P);Rmc0RI30 z|Nj5|{Q>>`0R8>{{QLs@`vM01^D6+%Ap+Y10Qw3Sr3ED)s=c}b05Jg0{{#dC0RR60 z)z$y}`~dv>0Q&p?0Q>ne0Khr|#}EMN1`-ttJvaFq6VTDg`OMJS*4F}vg#m0fQ1$QM z42u6QTCg3Kt8+Li1J#Y_zUd>4Lw{URe1tEjLbKmY(S0M7pd(g2qsJ0|z;{R`~d z`n<6E*3bb41p*Zr{{R344LkeqyaMyV01O!W0PZ0+TjlEQ0st`p&i?@b0Q{Gi0m{n% z`T6-B``1JQx+4kM0{rp_FfRy7P6Qq%_1|&<`|JPx`Uew8u)+%h2+ zdiAI7xt}_}e|$CmbI9$2>u h*D)|iF)#oG7yty8`q2#I8zBGy002ovPDHLkV1j5VEF}N{ diff --git a/source/masterserver/flags/at.png b/source/masterserver/flags/at.png deleted file mode 100644 index 0f15f34f2883c4b4360fc871d7105309f1533282..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmV;E0c`$>P)@|4`Xj5kLT%`al?B=W5I`&prl$WjwHQRjfmQ&G0jUOA z@&|Dug_Rm`2Y251|$~)1M2@@6mI}!8O6olw6y^Q z5X--d7nzS8`+x5q12kBmVFD!~j6c5_fMKno0(1^Q0I>i=is|LjXX40RRttS6cG0UZ?;7002ovPDHLkV1fxUnjZiF diff --git a/source/masterserver/flags/au.png b/source/masterserver/flags/au.png deleted file mode 100644 index a01389a745d51e16b01a9dc0a707572564a17625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)>fJ3En$GhGS>sbE%%m3$AD)q?8M9y>88-}kR7#RKlk!P~Y_PLuF7~U~3`~nC7 zF#yj00ZUDdpLsm{7ajP|&HwoK0Usg|6%f4L_{`Mi{rvv-`ukf=Ed&Gs-sA7L!Q7*a zj{*QO0M7pb%?Sw^g@yy{>ihEY{`vU@3=8@G0rvO$i3mOL`~mv-`W+b$Mmr&io5dg< z5v!7q0*L95jt`TzK8Kd(Utv)OSp_aLv){6ccV+Z`{Q2+asKUU&aO3`Kpz6wW8wp`< z28M3{0mSqnB#A*-c*8%1=RD#sSOwMznKA3=e&iEzwo{cA=PgXK`2OQ}gqId83!|%* zA_Kz@fB*n70M7pdECCwp4H&@R`1|(w-}M5x*74i)0}%fAt;XafA{48))#>Z>?CD#}*e}Ret0tl$#*RMZ7}Jl7Z|M45`5*URzH9L z{rmSnPy;{!u>dsyO%meg+00000NkvXX Hu0mjfN{&}S diff --git a/source/masterserver/flags/aw.png b/source/masterserver/flags/aw.png deleted file mode 100644 index a3579c2d621069c8128d7cf16440d5e45a3ab3cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)^}0h@W9fA9JOn#opKkr#VO<{LPm{QLg}EdH3Vb1Zzpp zqiZ+XNBm%5{`ViKi{bCTe}Dh~2a+HyfB%6Q|9}7eKVjxEfB<6Q<6r}-{{7;G=hB{; zLB+p+|Ni^;|DXT={s75;AoBO$f4@PDf8sps4FCQC1Q64wUw^h*hy4HZXO3U)@85qw zD*pci8U|DWQu_BVi2MUWKoOv;00M{w=;|*lY_o%kegGx^{`&*A{SSok_usF-P)oof z|A86+0*K|;FQAM6fB*FtoEI&bZG5mq328#as{}<$F zWDQ{Ffz1MH001phxCBNdC_2H6U$AI~GQbEJqg*Ti0R{kQ(yH?TRrCY^ O0000^@RCwBA zRL|V|7QjV)*ul;Rlceqc6W0{`~_8AeMg& z|LUXE8U8c=`}dziv6P|mEu%JjM}pqh@65md|Ni~w->=_)fBgZXe?Nc!ot?WGAOHX{ z0M7pe`uG9>{{ZXo`u+d?{`u+u=j#9V2j%Sc^797z|N8p+{rLO+`TP9&`u!FW2mk>3 z0#G;xDFDDQ2vg|)-@5Zw?JVTrAxNs~5&|AZ;5uWfQ`vUsMGm`>aGWoI7=P|oW>%~E z|Kk8dq@aG@HzdsB>fj@shYzX-a%=q<(frSYmfLIv5{HbzQ${~M_P_y6C&m>3uU0*DFd0+8#0#Gk)^|NLQBRAyCBeB9H+Wn{=Mr@*PJ_ZKV< zB>w@GFfafF5Ks>TBP0ZV{bBt5_ve*sKkwd`OiO#eX6=u=cfX!E#rX3NBT(umNC7Yu z0Ro8S7X#4ce?Xr63$phg)Bk64X8r&5``_O`AFf^jc>p5y?+^38KVKLa00M}`wU!~x z=I_1Fe}Df4D*yZI@1I|PfBgnRptt`0`2{iqMpRNPo|?TW>MPOFW(r1_!xlT-yep5|G*@e%^SFxf#DC32@n7=0M7pe00011 zNe=7o{FIuhzQ(sjF~t7>`T+s_0sj00{`>*}`~Uy^|Ni?^Z7Tcx|FW0O0tlpm;s5{T z+df{s^E1rDZN;v4VP>0|8GkY`{`&t1s2YfV{r~st=KUYCl59Xr00M{!Xv@F<41fPH zoWA^R$>xvtF5yd$xc~X{7o-}f=ig7DY9RXc``_>1K-c{N2q2&ahQEIq{`~z1RCDs; zw*~7zIJ!sAKj8J}&!7K)enC|K{|nUc|Mwq|27mwp*#K1f8;Jh=2byv8+}GKw-@AGz z%-rMu^XK3HKtBLA{Qvdq*I%FsKn(x^1k&&qY(LP_Uw?q)|3jz0PF?=a(?4bU?qHzN z5I+E=z&88?2q2IKpz*){`~&I%+VJc5-=Dw#?LYB#!lHLRL7BZ8-NZ5x*TXaKmf6TZ20qEQj`^F;~x-W z05U+*fBxNj@_W(7kJ(ujGnWgh$g%(Z2hso#K#U9wI~hQ+`3Dk_7z`j1tL#*2FTcgW f@C+EF009O7>dRn2w6d?H00000NkvXXu0mjfueTzu diff --git a/source/masterserver/flags/bb.png b/source/masterserver/flags/bb.png deleted file mode 100644 index 0df19c71d20d7fdc06e1cba01028983439b2bdae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E5$P) zj51&U|NhG$_=oZTA7 z0mJ{l|Ns2{|Nr-Y#^3*c{=WU_!>_-;fvROCxPdkR1P~M0Xa=C_KR`47{sXG+pY!Yf zqu=)*{%)W0>;M0szkdJy_507SKYxDz`3KYh5I`&-cY{^``2$3Z|NsB`^ZWO@y}$qd z{r%_nFQBC$4Is{6hz5WF0@(mI8^j0N`~Tl>LzQ1Ye}a&q>MtPo*RQ`|OMu4x1!@2Y zAfSdne}TsT{`c$8-(P?J0c~)w`~?J`zx?#Dg*yp^z&88=2q2IKpt(TRKniTbum8-y z1bBWi0e#F0wgIH{FVJ|Pxj-8L0tgsNfByUdJMs7b-@h3^8h-!E3i%CU{QCW$1*GB6 ze~`2PfHeF82q2&aU>N+96yg32bmdP5238q{|Gydk0=52OVEN6!@<&OA7Z~7wL16>b z@DCt>7#SFn85mf=5eY;LZ#OUe_l@D-2Zn#Y82<4v{9|E|jkRQ8_`$&N0jL_N03g5s XX0T^_9W~6o00000NkvXXu0mjfXpthO diff --git a/source/masterserver/flags/bd.png b/source/masterserver/flags/bd.png deleted file mode 100644 index 076a8bf87c0cedcce47099c6b74b59f2c9d1dbce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 504 zcmVCcfPV}OzZe+)fYC1)`hmpw%>WR9L@~Dk00x0r!@5ksR;+hV0>ZLfIcBS@orh;x zv}95za5W)x_7^}bV3YqpdH?h;NZnuSC%?V#{+0gl`~RQckJx{&l>NO~;@7XgzkdJz zEh{VwR0LSuiyWGR{aKQ z00-R5+27mwp+3@G@Um)kt zzdstU{yWl9SIB_0ft3II3)BD*KrA2|{``^Tm;4PDy`=a1tTre>fEI#8 u{{2z<2NVVaum*qtVq}m+iAaI~Aiw~?reC_kVQV=60000gsB+3J~Dn`pdxgmx19A{hgns>oXkhsL8>j&wfIu2Rsv+R_ zAB5T1GyoL?1Q1BWpFe+p|Nf1n;TJ-~Kd@?uhChFRHUI<=#0HS!U%!8$YJib28yLY( z0tg_G2B7i3e*FSj@aq@44gY_`jRywQ69xu=0D?FP=vyd&x*M*V6|CV8P{Uu4OBfgc z0tjNmA4y3`us8lPG6H?}8%zRafgb(Cp!5f*6oP{xAq} rF#LPR@IoIX4%E%Yz;K6w0U*EtuUcjA`-_J300000NkvXXu0mjf+>pV; diff --git a/source/masterserver/flags/bf.png b/source/masterserver/flags/bf.png deleted file mode 100644 index ab5ce8fe1237a18d6809a5570024eb108cb14a3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 497 zcmV@|4`Xj5kLT%`al?B=W5I`(ov;U*021-Lr1*!W5(gW7O z@cTDV13&<=05Ky_HBiN$KMcQt819e>gHP`g_|Np;&&;0(C^$RHS>olZ*Q41X9v27}ar6#W9}0h{^{OajIK0?h(y z_zOe~zZd`lhy{p$|NA4!EeST}?;nUxkP49VfMx;1;V%&U|N9rH;SU2q05LM8GXV8K n(H~UyA0);fa6B_H00bBSQ>$p&WfB*UmB!B(-`wPhZ^#?@C^U5EbbPyl_g=3Hc01Sh${{P9=HB%4| z34*<3-m=C?^;L%miR{xQv2*hU;8+Y&0Dxf-W~KjsusWFAC4@j0#9_j;X5z6SjRhH> zd}sd(7FPhVFdSi!*Zj@;_Sc`kfByUdk|3A-`STmZ_yb~qxIp9o{E-p)bLt=iKmf7) z+|Ix(`{&<1pm88mK&}8g1WG~}e||Ik`OB#Cw~m1UAb?na(Zlrn4}+v6P!1@{@CT$5 z&-#|8y{IY2iKmf5omHz(^qAp)ym^JhN+jk7Vet{H$(Z8=>|AV=V zva&!M00M{!p&AHub^kXuF^G#pRQ&(-8^nMkpk@XJfB<6o_wOIv5C1P;X6Wwu|KUB< zc%X*g2-OTg#J~U$KumBafq;(A|A`a+OH08N{X($;=pP0KfB<5Fs|GR7oM!0i{{QYB zSm|$=!=N@Wf}I2qKuka<{f7YtBjf)QCj1u{`~UM7nrdKh0c`*VF+c!8{Q&j%sZ;-Z zd;dRshENS5{{S`og~Sg)05QIL^-54s5b7kL(8GuS8yfz9{>%Ui`+q-vfW*P*^_43C z0mK4S`s2qBh&}(NP5W0_$$%QQ@R)`GfB*vkck5Jby^kNv00000NkvXXu0mjfy0pt~ diff --git a/source/masterserver/flags/bi.png b/source/masterserver/flags/bi.png deleted file mode 100644 index 5cc2e30cfc47452d5bef949628e955a522d59e50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 675 zcmV;U0$lxxP)$wbBBJ zMTk#;k4<3e#ePFE;{?TciOx=-NpIdg`t|#dcz^$YFqm+of7AU<7UGr+0t^5F#PsJM z(2)${Jd)SmT+KY5@!|h>po)L5-!r~>3uJux|0`&Jz~QGy6a*CiGyVtq1|Wc#zWw|0 z_y6C2|NnAvaR2)A>-NX%|3Ci{R?!hvH~jzU``ypCK7Rkq&&~h)FDNvCApj5nF#yj0 z0_X_*{{Q{_|NQXv@Av-qBMmR$teo!O*6-%u-J+8r3n~2s`s?uP{Qmp>{`~+900M{! zNC9;}eE(3IS9-C{62AZc<>Jx>%af}0@?r&05Jg0 z{{#T;0Os`NWh`ko4>SM%|Kw(60099Kad7|t0qcf^`tR-^sIP`Fhru7lkI#w#>Hq?W zkzqQ+@08y_|9v}t;{CEE%)%nTc=-MC@P)7S@!~g$((Ud|+28Q224FCZIGXF0FQ1zcbfB*dX_lJRr z;s3wCNa|2D02KoSAbE^!0Dxf-mZ69ApkCb5fP^9ydGO$cm6w`kGj(t#`M{tFlLo%j z*4%mm2&CaJSn02SzkrtfWBLcO;r%bLy5Gnoqrh)qC;VKmZT`F#yj00W%wG zw4zx17##T6*Z=hN0Tvey7!|wG?K;V)0{r{_`}_X<{Qmp<|NQ*_`}@YSvI2-@&cAgG z*R?p0?_>V(@&EVlEP?{x|1esA`||VNU68t8zyJRJ_3zg&hTp&0WMzR?0R#}s1|E|% zRV}tRkH6o2#3;(nsVMXI-pgBmh17ms`TzTu!pfBl%*_9R;OEbWDJei#0R#}sGpDd$ z96Spi@~bn7G5z{~^_!ZLy2#s;5B~o8&G`G*|6f0Ap0WS=_rFd2C(ubi4FCZEF#yj0 z1a!1=2e0}MwgDi3SU@2S4mePl{012eQ4J-3 z|Mm`933BS6zyJRJ1;ztF0D(08|NVzmQWB*4&)@%$um=Y`lmy1W-@hDx{{qQh3=9AP x#JH7#;TJ3-|G=X54_FW_j)5c_0|P*S0RT0dOSD~(4;cUe002ovPDHLkV1hfJDkcB` diff --git a/source/masterserver/flags/bn.png b/source/masterserver/flags/bn.png deleted file mode 100644 index 8fb09849e9b5712e9cdd8a2c25035da201535cf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YLAP)8n_8%|dG+hlCr-g% z|9<~wU<9iE{r}%DMphZ1Jpcj3%*DZBWo-@72DFWlk(-gj@!ngb-$#D&C_i9e{QvLY zw|{?r|NHlgiHY~?^IHG`05Jg0{{(k=dF}7->+9=cXlNG}79t%T{rC3_t(pA#`tSX# z4jKOh|NsB|;rr`({{a5__y7Wk5omBxQSrlv5B>nb??0VZ8qCZrpS+?}gatn>o%-+B zPl=+||6st##PspQ2Y>)#{Cu5(QJ~_^?faD-pMV;E|7MwLubjQ@B-gLso$mVYgECpU zxpfp2fEt*XnBKpC4-fz`0M7pb@zVeZ8g>5r-~k2r`Sbhd;{WmN02I(80QmHEv)Ik{ z>H7Nm`}_MdF)?FhWi>T50*LYBMFw`s0-y$le?J(QfB$Fr_2c8e-`_!j`0PG|ckZ*_ zzkY$-`sc5Tips@{7Xbo@1sGC5IYwrQfB%2{|MTZR!ygX*-%McG4cZmTY ZzyK0(F$K@T-Dv;-002ovPDHLkV1la=J3;^e diff --git a/source/masterserver/flags/bo.png b/source/masterserver/flags/bo.png deleted file mode 100644 index ce7ba522aa7e948d581478432643c230eed1a658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmV^3LvnC{|x`%yaFl$ss8ha0V@6XKS=c-5cwO(_{}IL0ki=i zfLOjo{AE-9^-mn=h(G`Tfz|!{{r?|W+uz?{^yeR#!Nm9NlRN`J0I_^YV&Ikj@%Q)F z|Ns9m{0FN3^Z!3k!*8HnFvf4N5xas50L!z?-wXsAPk7$ ze<1l+iQ((fPYeJ7#KQ200VpKFA^{3Nph^G!{9^b86oDW}(Ek1R7ZiL9e}Ret0*H}e qBRB&8AR!3%7c6cef(%d+Aiw~vBYd|xMihYn0000j-HAXl7XJGjM{~r+i{r~sxzrQwG-&h#_Y&p;L z=ieV7_s^f-zyJOD{rC5(+EoAn1k&)I;s3Kw&;LT?{{2}P{Pq8T&j0^^J4?LvUd;UK z&+k8ffB*XXONL(tXahh1fi?X94^$0Q>Z$uRRO)Y4)uapmB!2(-ul(c1=C+V!kAF`) z$PCo;`_FHns{jIs3Fu;wy-Z(c2YwAz{&V4aXk?bejFO*Op&u`@i~PecqBpL@DIoojb8mb+WHGK%fG2>)a3=iVf_~v+`s?*1;!`?Kmai^I3i*ZIYtpN f{g(k500bBS@Ns{bTs^2gCr95H^s6Fo1}O2_S$Nfl}4;<}o-r{^R8Q_xtzX z|Nnu?|Ni^;2gm@D3=F@4EC#P1& zzuV{ie)#0qf2Lnh)j(~3VeG$ufPMl9Aczeh3x56n#l!R`HRQLfpFjVwfkN;%I39k( zVgne^e?jDThF>oL0*Hk{T6(^^8pGqq44*zhqZ1OZzkZ>_F(mFeH~<0+0A4S6=>Lb* QN&o-=07*qoM6N<$f&=*Yr2qf` diff --git a/source/masterserver/flags/bt.png b/source/masterserver/flags/bt.png deleted file mode 100644 index 1d512dfff42db1ea3e7c59fa7dd69319e789ee12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmV--0*L*IP)?&DC3JV7l?ccjcgB=Qq4l4w|Q;eOZ4z|IjsEI`#PYSloM|AFHF zfy)2>XZQ=$@t;lU|F1tRzpnmg{PUOLH{-8A|F{4CvUU?d0I>k|0TuuM^_1cNUy$nm zzZn?*{^!*ACzSEy$NyhHzB0Wn`TXRU=!%=n%Ci4h82|!^32gR%glZtk^6USnb00o@ z{`LDW>%U)&BK_|-y-75RkKVi&O=|xC<=6keK+72b0*D2q;Xlai|Ns9mF#h@fM(h;aV>^!x1-zNu02XV-n@ zm3imZ@&EI0hChG)|NZlafdL?Zn1I0yH26P<=DUx29QQsc%}izF;QV-S-hYOl|1V4z zX|a-<=Kf#g*Z)7i{{y|szyJ_HEKEEM|C#>$KmJzoZa)M2-~Wm-e7Cl+vi)L|kY`}} z&A$F20RV*|BkB*O Rz6SsR002ovPDHLkV1m;fPLlut diff --git a/source/masterserver/flags/bv.png b/source/masterserver/flags/bv.png deleted file mode 100644 index 160b6b5b79db15e623fa55e5774e5d160b933180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)O=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d00k6 zPW&$KB`I@TtA?2x@Q~7pdcWi#1>DDZ2>MuG0I@IumHuaV^&7|soAMvT0IK){RtF@1 zgH;3B;_Qq-34j1%{P^)BFE1~|NkA(gBv!!4$aw$$eSiRB1ga=2D|__l(H|iA4T2Ex z>lc`SQ9x2&UjE?0g8%`<0`lvhzd$}*14J4{IhY2@0~G@V5J82%q9;EBlXu0U&@_82I`BfBC|Yn~P8llm?myQ3_K18=`^X_ivyEfB<6p_xd%%#*GZ! z-C&_V5IGPDK|g;X*gypg3;+Sd!XPTj0Q7fK5>&$Y{sHB| zjK9DB00sa3QR4q|tc?L6fSCSm+3>HW`NxbYpP7GsX8sK%KS9yYPfWi)GJ)AFzdp14 z{>t>1fsFwmfLQ*Ci!yxq#8guv=_mQ;-(Rp{AoSPbXFRCwBA z{KboB21 z`ppP*BG3|`!vO*asNvt=e_;3gWsp&PA@E<2jYs6ilRy6-zmSku5?~OOP=5aV@4sI_ zSN#QP00zQ!JD>SpAKYgR_QStF|9~F;2M|Ck zz%U1e+FyoWe;B_0VVclq;}vp_kNy3hKMWrj7*{kqJbMcaQ;_Pve;I)x1Q0+h46j}> zeiN4E1lkA+>|e|*mzJsW^M3)l^W_^hf&c&c`Mv->`48yHFF-%s0|+3-*GLfwiRNz% m3}3(u4lrUsie?}H2rvLBbQv(L;??y40000e`b1WGV} ze#gbd^&bp=ef-GykAYc$@BhDltSqdeSy?RXJpcawy+5fJAb?mHcsPJ&{d@EF@4HtJ z)qno||1xd*zaM|Ot4f#|8A1AQ-~Pubz$7IBv;-i4SQvovfB*ge{fFVtAE4aNE7yPi z`^Eg=5yP(^Ur(Q5`TLjM%#`8#_rHuB|9}1hItd_vSpNO`#qjs<|KGp=|NIHm@MXqK z79K7}ZvOwQ9Df%s{`~lX*xI%KzW-!k{Lc96Cr|@G0I@Lq`0?-epMSr9|NHeD?&umBG}6iH(DSogJte zDERNk_kV0Zng09%Itd_vSb&=T{rt@+B*66dJ0my{fpNkvBm!jpV_;xnVgd@XDk?Dx zh=IJyzyJ_HjJJUrz)|>#fr0nRl^;KTz#|yK`2G9$BS%LzureS32rvK^u`=B;c)+&+ O0000Vbu`-)NXk-Y`p?2$B#e1 z{(buQ`}e;;zyJNd_UF(2w_nb@VUiUP2igD-Kuin_BL6vl`zgIQV*mR8|8G|2U!T7I zn`-)Ow$bxne}9LGfB5z5*XcJ*K(;aeSD>o^0st`p&i@1e@&c~g4N@7~{}B9V!5sbp z`j|K8<@Nq-&kt=P>@pAZ`T7Q#;RiPl^j;kSgdzX}05Jg0{{#R8=f>y-z~LG0`u_d< z{QLg=2?6_k)DH^)`=sFo8YTUi-v;{r`o8J{6Wj>^)c^vB2^cJY|Nnmc_5b@He}DY@ z_51JdufKoSslWR1>-W9)3`r;XfsXn0`_Fc($H!lT!V@5Xn1Igu{qOIuf50&L{qg7D z?|*(LofMGa_%_k-*{}b_0g?9mMSwvE)Bq4bEIr*1})*zF_+U)&LMdEMOb{Nb-vOh6FrNC(tkd{&4;N%g_D$&)>g> z0^hO}m?z%iIsOJ1mka;_#K>R{i_RZNQ42x8VJSe8f#Ern2@qfa%&RHCyvg>Q00000 LNkvXXu0mjf=TkSf diff --git a/source/masterserver/flags/cd.png b/source/masterserver/flags/cd.png deleted file mode 100644 index 5e489424884d2ec9e429f70d69af00edf242a077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)JkPqeYl28iLgD=0{><0$P44T5yOrT$dE?(KkwMFdoG^-J zGv9P)Kk|i5`lcNgUUAbboca5{hI)v&h!9!~`Yg)Ld}$VwYqqXn@gVLi>3LSVGm1W? z3qnDJAk6chH(u7f~FohUBCxfQDx8?5BQsCcprAnfVhO SHC~zk0000@|NZ~|iEi8i zh~?j3h8^dV0y&$fY|i?}`2XK;hJSzm|G$6#|L@;V)&KqZ3sU;$?>`_ZF38C6g#jRd z7@s_ODJ3Nev=9gw8UKSQhX4P)z5oCE{eQ>y|1j|H-+x9%#`EXT0R#{W1H*5i5@u$g zs{agN2m-%;fixfipeaCQpFe*F2q2cU!)f`}`5%6M06O*WzrTN({{8*;CkCkD_wPBk z=llWket~@P=ieVecEOTuB>(}$vTge|RYlbYUmpDW_v_E!KfnL|{{8n?G|>28zowm@ z_UrGj-+zAtrGTUoztWctUjPD#h2amw@BhDn5OHz(52cFPg zot=T34qlT?57Mzkg5?0ssOG0Ftp>paW8OyZ`_I07*qoM6N<$f+2k} AjsO4v diff --git a/source/masterserver/flags/cg.png b/source/masterserver/flags/cg.png deleted file mode 100644 index a859792ef32a02b41503b5ab5f216191af397e02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmV+k0`~ohP)i@P`2b{=v9^Ktp0uZ001fLMSM)r!?%mH+B91 z=ii?+(ckX8zrd=&8g~5t-|*}I50LQ;KzRlRfB=Hn08;wv->)Q*Kc0LLgTdsU-~VfV z{r~#=|1XdRMzE6r0tlo5X#B6gzhXrG`18Y*0!g6iieLY~Kvgqz}`W zLWO>Z3Lv@r7+CdZpiy8Ae}EeP0z(_<2Y>)#Vfe-1#`njMUlORAfdMG=o8iiD#%aG9 z#Q!h|feZ$rzkeYJ=p=vuV)VVru?7U|?FE@Zm|i>fBlzF zc~M_qKf%h=bAcoS;}NE7f8|yFe%B9?;;8%o@BeG_!|(4qhyo=(h-XBmKHXpc{~y!A z`THH3fsDVeudko)ARzm9UL&JI!+~uEM*rBES1=kd6zV%LH0J*N$gIQAc0y}k9qTFv z4h1oVG?rB#zNY^8{QUp5wE>>R#S4NZQd1i@F)*?OF@6y}@zmk^!Gr7L9asuAf!ae1 z{{CbBBH^Az=(+fAb?mHzA!MjRs*H~|NF=I z{~td;@BjZG-hUVsqZ#w(|L@=b|NQ>{d(*K^00G3pzycQk`jp|{UxvSb;p*Vv_V?Sr z{{Q;@@3$6WKrBG#F*5vR z`2XiW&+Xo6{KsbP_-SF+DJF`pL$*;0gaz z7NKVhyo`U;4*0+SK#>rfFFfafF5DUYXKh;r+@n*scPQUy6`!63S zGXn!71H*qtMn-04W+o=4|487=moEST#KiEAA;m(3;Xgy1iO{3BKc9a12~-UM7^Z`) z1qdLZI~bN-c=z}J|D88K{QmR*&tHcBxB*ZDKmf5Ya0q<-!`is-{h$8~f7m(x{QZSX zH3Jv`1P}|uy*o^wIGI2G`1kie)4zYe_&EQ6|NftW0ohon1}3I|Z{7d|5aVBMp0ssVo0Ek~;W>Z#0SJsA+2j`G% zv|UVeYYs-#Sn6_J90h1VosR?LBU7{U1rQ6+R0f9sPrg3=`~UA>#=n0a|7Q67_y6zT zP{j57|G!`V{{zu)Mn+knB>(|98e;E17s>tTLaMG-~Y>h{r`!g0jL-tfS4HmF#P%V_xIo5zyJLP zk|2W%e*G8w^1X|KC618W{eAoCFX+EI diff --git a/source/masterserver/flags/cn.png b/source/masterserver/flags/cn.png deleted file mode 100644 index 89144146219e6fbec7eaa89e1bf4b073d299569e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)$bmtfBa_T{rmsVufH!rO2O)W0!b+P{TrwO zAb?mv&i(NBbu;G`sX*)cv$d*%>MiL-(QdhpkjakVmyu%k;sfcNRj;yhJaxT5MTg0u5&QfH8#Bf O0000XbC_7v4G9~kE;3? z$h?1GrT>4y7{3|*{r>Zd0U&@_82$jY{AFPH^Plk#hy=QU5o|Ds0oDLyFn~2M0QE2c z1P~*G;PKK9g@-SH{rUU<_aC4k|G@~v`1Kn|{`&=C|M{yZ!G37cNq_)iVfexD=MNA8 zh5p0Hf4_c1v;p<}|Ak}_F!%rh2&CcXZ-(!`82&@8$XA^gF6?xq}zd#y5N`WeVBbyB+frxZH0- diff --git a/source/masterserver/flags/cs.png b/source/masterserver/flags/cs.png deleted file mode 100644 index 8254790ca72f98d9e79d94bdfcb8839b1fd434ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9IdP)|s3jQ%L{DG0k=ogG+0SLgMnA-pV!aytqt1(q3VU5g2cTadE%W~lnu`}m; z-504zOD10s2K8+~RqF^K7O;8$o;>*sR0>r0`!|sM`x~eNg#P~i_4n8BzrTI~MgGdl z@-i@d0|+1%Q&SyHO(9WHu7Cgk{{@--A8b6x2B1zb1BygNIks=N00WJ{7y^0)%zz1kWJN^&bany+5X-;o*O`wU`+x5q12BMq=+`e0f-vAB ze||Ik`OBc90(3J#0I>iAmFf2%21!Yv97q%>_xm>^i2a8FLV}HlAfRG^0AlbRVNjfdgKH->)<41fMG{Q1Z53yA)}NHF>VM86o=*Z=~EMTLRklg;&|8vY-+ zh5rBh|L@=bKM?ZoKOp1JpMQV<{rmmr|L=eQfFkpA_5cJB<7Wm2?&_*f&z|!oCH%Iq zVPN&@1^xa7gnxhi`TP6#zh6KNfByZH;9_972M|CY z4S#m*VEXjw_teQhfB)LctFzlGTKpda#8eRa1F`|=V+j!s1_l{`0AhU0z`&K2_5c3; z?|=UACdB;@3Hy%?Ffai9!1(6P8-M@;JL%7#4}bn}Wu*W1^8Nqk|9@zxfJk8Yg2Rge z5=!5G`~e6c79IwMkAMHSMfCl8%kXF6O^EHl82Alg`~}6s-@pI={`>#;Kf}J}IRF8~ zc$$I1RCFdZQi0L={}0epF!T#d{sWT?V3G+SzyRi{Q|!NXWpDrh002ovPDHLkV1m+z B7Bv6> diff --git a/source/masterserver/flags/cv.png b/source/masterserver/flags/cv.png deleted file mode 100644 index a63f7eaf63c028615b2ded5878b5e14a7dbe962f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmV+s0`C2ZP)*82p^=00=`tlmIeOf&y&dk@6oT z&CV8YCOfMzZ7b-;WHc4ffO0*K`UGc#9pHKW{n=1`s=Y4`sB0UGuD|F2(+4xFrs{6A+r|Fh*S$P>SRGs(%l z+O-QHfEa)O{tdAK=ovi517(5A-n@AO5I`)f0sl(Vm><0RZzq2;(QtLuuFT6X6;y@p zb-8u)9gSFj-3}5^z@SqUX4qfA01!aT3<}j|#!Osn3@^V(zxysO&hx#~ZN`f)vS*$d zpLlA?$HBnM&cM&k$j1o^^oKjY0t65vgZ)>ehy*ei5K#*ZyWju7F%Ll?01#jRixNU5 T4U6zw00000NkvXXu0mjf>cZT~ diff --git a/source/masterserver/flags/cx.png b/source/masterserver/flags/cx.png deleted file mode 100644 index 48e31adbf4cc0074f40e95f87c1f103b91fe270e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmV-m0-ybfP)Uz~~Q*L}q{yKmai^Fs!d`Rbj9@@=xl~KZbvQ|NZ^*|L@=bfBpc` zKOp-38^rz{DEepVv)`L`Yyt=%76t}3hHqR?<~aN{I`!9n&u`}MKs~?z|Ni|Cihlk3 z1w?Q7fI4M?HUI<=3&<7!82Y{{Q;@?^mDN?|=V) z{r~^ll=rtu5CcE}F#**BRkyY(adR>Mc_H{~T5^XRV~oVFSgBv#s=t2z{grn0SJIVV z|Ni~D^5u8)5(a<(0%_pmV<{@S{pr)+Nt0E6|KyV7{&xHKulY}Z0S*2Ic2cIyuhSoY z&3*a@=p=vu0%~ALNs$10lZEA9e*W!WzkWV{%9A7hYlh}ewm<)V{rd@2{rBIm&Idr} z{RV0P2mmnv&i?}d08{q%2kh+oUtbt0DGA2L@2{yn^Xv%Q%_4hjZ2Q{KfBuh*0fWjOcoPYi>{Qk`ejtlm`TPy!Q@c0|K1n4Ay00P>u ul!4(JQe+}W>@P40kp+Sq42=5$0t^6?P(4CrvcmZQ0000s1`2Y9I{~ve$KWO@Yukru?KTxgz{s9CK3*7Y} zZC_6Qf4TJkuQ&gHzW)Di+kXz$|9k=eg(Cm|XMz~|=g%L20Ahjo4`KiVr|y5|U;qEV z`p@?NKb!P_9;^R?@o<+hfSm*oKp+h;f&YIQ*bg)L>I;A4WVP82*P-nR{;Wu@%{Vvyu7@~4txIf`R>OD+-01E zIfRil07L2S-Mat*#Q65@TRuKMWMi;}EJy%|ff@h;2;_%%@7_UT@edf{0+7H22rvMY Ws9gjvbyTka0000? z0048MLcfb{@Lpld*gfdL?Z zSQvhRtN^J#x6%GQNHxSfxHgc;AD{-1tAIKH0tl!9q}uD*5!1Kl8Kk6va!f$;fJ%WL z`2Cv^NdEc54D$xi27mx!VfgXqT8ME7!~2)OPy-`SXu#NiAkhzFFflLy1Q-A_8F>@M S6G{sJ0000h<6BFn%a z@b8~2SoNP@zd$;E{sbbRuHQd?{QCI=sNwhbA3*&Qe}GP900=;09NYi^fU@pUdVa9*13;+Sd!tjgXKhXQEMobL97(p6<{RLvMGBN!7 j!N9=G@a-1^K!5=NcXWu!7_DDe00000NkvXXu0mjfeQx^H diff --git a/source/masterserver/flags/dj.png b/source/masterserver/flags/dj.png deleted file mode 100644 index 582af364f8a9cb680628beae33cc9a2dbe0559f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k}@P);we;9uK`S<6~zaM{qBL9B<0yBR7V`E_e2q4D) z|Nnpa!Ep64!{fLA8NdLj;oraifB*mg`;Xx-kn#6Fhzn-q&in!pKrBENJRA&WD*ySo z7*5@0`26EP69WTC_22)0z>5C-g{l_hVFa245I`UeKudt6h7^Mc@BgDW81BCO4-x~L z`sXhc{R3+I%fRsKA3y*x{R6rHsA1>M|6jifb2E4w{z{xB{`~z5CPC;Y7bk|9<`c2PXgjR$^CT@Hzz$KrBEfF#?VC z^aSdB^z+g5SJMxCJOGqNsQwQkfr0#&=?~CJ009Kjz|71H^!MIRd#Ajb^76;aUyQ$y z%m(TN#spBq-#`C>zGeUjAdrR+|30kwu=eoBL!3-pGMq9%bs!`E|ACMovw

4;Zk2 z8GbPU1Q5%#7t@Nb6*GKbU;u{yA29j{CVzn$|6qa)V3LCYAiw~8(_SNKujRx50000< KMNUMnLSTY(1rd4x diff --git a/source/masterserver/flags/dk.png b/source/masterserver/flags/dk.png deleted file mode 100644 index e2993d3c59ae78855f777c158a6aae6c1fb5c843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmVh!ZNvLM`<}kPiIA3?K?Zl!VJuS0ABN12uI2v;s z000mK68GQM4oDR3?|C6;zBc4LR82Q1eETXSa+3nD0Ad8%4|Ml`Fn}2U{~ypshW{9V zk%{T!hYtV&#KHiVV*o?2zW>+&Bgm+K00G4EikX==E9>w5`yf~S`o*<00G4K6dZ++hy)_Bw{QPEdi2K7 l5H1Kw2asrHVqgFWFaQRwS@oh;XP^K8002ovPDHLkV1foV*8Tth diff --git a/source/masterserver/flags/dm.png b/source/masterserver/flags/dm.png deleted file mode 100644 index 5fbffcba3cb0f20016c9717614127b89db4c9664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)yt}{r~U(pZ|aU z{rk@#!dhJXj+vP`D&$&!2yPR?Jud5I`&tqo00z_V3?cpb$_)%#~li z5Bw?p&G@T5&5h~tB<;UIJ-`3_mgbQL+5iwhOdtm^{QZlh+Tg>NcGo{qR#UR9ewx4g zlzHy^uRp(j{rmOj?;oHBfB*n70M7pb{ow!s5r+W$=Kufw0RQ~_o$a1N^GPoTT-yiw z&XGVBSbe$r0&xrf|M~#~9P-zx0st`p&i?@b004Y@cH`sX`~3X;`}>j`1PlZ1WGkKd zF1~FN+w&9T}cJeJULy4V8r?0tNHM6WN&<2126ppbC05A-~q$vMCOd&N)3^rn&3WaiZo>@dB zxpL5=L>h@#UjVT%{Q39iA58Ths0J3s|NohoLF&Lt!8(8c18V>XAjZFc|1vT%{s#lF z^Kb%2CZ>-cJ^%y|<6Q;@;r#qR4;}z*|Nr|B$h_ab1b6QI%fu2>dIV_O?>~RRu82tM4=f|&Ke}8;oX5+eBw}y?G6)5=s|Nnnr@aNATAPEpaEN{Mj=m^OD z&%p5S|G&Tg{{H#<7bL;LEGj9<&cFmz{_j5mJbLs9Ab?m{m{|TZ{D1lB9Z2clKfnI{ z`ThHs^2c9)q;CF`l>Eoa3N#g>nv07INCE^93jWH3lKe}28-VENu!{qxMpm&svFOiawo%#4hT5U&FS z5Yzu(KY%Xz`RDh~-yl6N|NT~b@qz9A2lm1$Hf43G`D-AmnZXVNY5)izCWas1fbRMA z8?52ykLBVV-&q+tkKFpbbOC=r`2SzOfQo=l0_p*hfB*gk2q2IKpzD7Eo%H+Hk6%A8 za57|Q3rv;f;d1r)FDv_xg9F*eKs^8f#KQ37)2~0jMR){${rwHH2k3S7pO3`Z{#jf7 z{|`16Y&=9YkOT-IMh0&|hF9+yelRe6V}O#tcxPkSx96}BCoe=1&?OKCkOT-Y05IoG U$(*n^qyPW_07*qoM6N<$f?|9Y@c;k- diff --git a/source/masterserver/flags/ec.png b/source/masterserver/flags/ec.png deleted file mode 100644 index 0caa0b1e785295d003869330fc4e073dce07e7f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmV1sCzZm}g`N!}J$oTi?|G$4gL7*^D3`7C}Kmf5Y{CmeN)&f@km*M|^ zrvE_l-~a!AA&BAspa1{=fXIJ9!9O2vbOQts3j+fX{b%^|8m0my0Yd-4N`WN9@BjaR z=no^SIM8~400P%s(0a|A0FHhM?*o#se9Q zEZ;b|7ytr@MWm#zEz$bb`!9d~{{Q>$@1MW_!07MqKOpw+zkh)g(B$8L|49h*Ov!x= z5I`*NZ%IAX?Fbu$UUAQCA3`wxix_2=I& zAouq_SzðCcuS!~%52Kai0?gF&VORsRAR2~rJG2PFT1^!)w@)C_d-AAkU2Vc75Z z*R<@y`9z1vevIh)-p7{p`5C+7f|6l;f1_&?! X)GmJPc-xs)00000NkvXXu0mjfGFPrC diff --git a/source/masterserver/flags/eg.png b/source/masterserver/flags/eg.png deleted file mode 100644 index 8a3f7a10b5757b006948ea4436fb242d02dc9a4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSWDP)LAHVtk{r`=k{y)(2e*gi*sIRYISXlV_^=qKp{(!;n-+xj9 zUjemETFMXP0$m6sfwJP_;%#kh009JYeOg-Dy?gh5gTXH_fG|KLm<2Qhs6|CZ<>JMQ z009IFR-loRl9E6vpeV=!FaTTi8)D~Q7yv2;2q2OXK!5=N{?|@pNV(X=00000NkvXX Hu0mjfG@sA` diff --git a/source/masterserver/flags/eh.png b/source/masterserver/flags/eh.png deleted file mode 100644 index 90a1195b47a6f12c70d06cb0bd0e4ea88d7bfb03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmV`hKmn*~pz%QT=MPXRKmaj;?1ifa0xhloNlE|L zuK&--1mwx?-uoV+`qwW8u#*4+i1F_GyFwg7fByafIr{%Uh)$p>Ae%w(|Nq~=m~|`# z{`_H7QhIal96$iEC^sml1*F~kc<(nb4FCQ91q_kDz!3TkBLDsd`Sky<|4qNomi`s~ z`xoeVfB<3v8uI)9A4wibp!A=AfB%5B0nwj-e?TNKsQ>@@`|oeijK3Q@{{o!^5I~F! y*$fQd7#Mzm(H|HCnf(WhfND7yc3x%x2rvM-AWsdQI)rrq0000&(jx%j7OGE_~DVuFcQkgj@33fJv($pjj zgoNxWFM>pG#K4X+%S_Ys!f>f$mib36%ekHNec$;y5njB{!+Y`YzVGwA&4mTVh%ikU z03gD2Hn&LPeNu%hDG7PUvzrphs|^(-as$IIo1LmPya%Hc0Qn*6qc4XX3oKoa+Z)_XBQk8 znPA)XelBh#6J<)fj|w>7X+~Yun^@Bp4$+N z6L8rb{%QnJN{fql*fJH1L*2YjUlB~CXS&&LY)1V3h&68|x1_5-(4l3HUgs~3JvLXI z$_D=zL{dTnq9RK`-w~w|sCYqqA;@OoAE0!{9Gi+cF%zA>5*8OAiXWs z!A~!@Tb_6WJ;mn(q~>CYJ~Oq(|Mc`miY)G1d$)?S_lf*=dz3nd-8+hwz5w#U=!7L- z+Ve0W8Werm#o=KvYxRVVNtM9!poHk%m;Y{gxKdXC|Y{ fc0^aUlspXz7vm>S7OoCUZUIwXLGJ6E%Z+~lY(hhH diff --git a/source/masterserver/flags/es.png b/source/masterserver/flags/es.png deleted file mode 100644 index c2de2d7111e3cb59cf6511dd2ab045e824bdb43e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)@|4`Xj5kLT%`al?B=W5I`&pe;NKW0^Ri&h`xRJ_x;0v zUa?=y?0^3M|NZ~}FE9c#{{3cP{Qd6}13&;Vf!z&M{pZWqKYu4MFm$tgedF}w=P#IQ z7-9gT-$11R0mKA$(qEu4%ok$*y!^wMRm*x;`R7|k6yu?K{s8?55I{^|9{?Tjhec2I zv+6&FhFWG_BbNVc|Ns94tNRJp!0`V!Py;{!F#$2enB#XZaohg-5%Tlk#oa&nzQW9g zl0Y{D4gK?n0U&@Fe=;yIr=|V7caH%YEYL84k`Tt9-wc2LGODP&y?7BIfLMT@X8Qey zK~fSFpuiXa$^kk7RCwBA zWQbH``0|MX0{;DB`1Ob3-!Fz=zZw28fY1*HhF@R=VQ?@21P}|ur+3w` z_wT=dfByab`{x&s{PXYspTB>919^Y{{Qd`I{N9v10U&@_7=ExZ{APUe{`KE~Al1MB z{rb!Jhml3<_uqeCzux)%bv7|NkFAvw@aK@N+YWG5`bsF#yj00sZ{|0ReUZ0OJ4u`~d&_lgxzd z_7grGtKje;)ax=32IqJ>VE_O6|Nr{|0Uz@6!2*a0?AgCSJ_s@V{`!jztXlEUzkg2h zOW%AK0ILQg2A~)NKmdU>0L=y=29PKt(~s@sMWK)O87MU|4G0ImPt*+y7s`{{I1L_{;G9FVHyv z0R+;(^!pEkq$JpwzYKqVGyVRp{reTr#sB4{{{Q&{G@Ah!GGGK$3=lw!Ux87Egcwk{ eXi`7`5MTfy3O%OUuKb?>0000FP2AE)Ir2{}>qlLBSs|`Qg(SfB<4)VqlOE;Q=cD|Nnn$ zna02W|Nj1E&`=Tpav_4q;M$#E00G4E4{SI@`q`VGKvVzz{r4XmU}R+c_2(Zz0I~c7 zs`v*r?Dty(;z&PFFXX zRA5t=4x{1SIibD)Vqy6A2V^D4P_SySA|L?j2ip1XFA)9%V~_%1r~w2J3=}{2Oiu1 f7(RXZ0uW#T>&I!FfdIJb00000NkvXXu0mjfj-u42 diff --git a/source/masterserver/flags/fj.png b/source/masterserver/flags/fj.png deleted file mode 100644 index cee998892eb316c3293ef2d52afec9218bdbbc03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gPdP)2C05Lr?a%1G+Sb3M_ z-f!*)-&mJ@lxC7weD@!u;s2li|9<}wjr{Zf&o8mqKR`Cn4*&rGF#yj01QaSLwCD}R z0w(ww8v*|PzTN}jB`Pj8{QK|!{{8;|gOCLd|L9jy6{oELG6Dcq@B)aDq496GGsCmb z5T7wXTnzN$?|=Wl{r{i6vr6{G)xV#={AXc)t!L+QBoiQjSb+Zc`=1dU2n>I~p8E|B z6OfY_{`1$ji1Pn`9_T5yZrhJfj0}g~00a;V(9A!7nZZWFG{8az7^c++|9dI@cmDl* z!Nvb)UorrL86bdIfbsI1fk}{;;V;BV|AE?oY(}v2K-{x07*6Kx`SfB<4-V2A|A=r2_C101z~ iU~vp#0R6xN5MThlzdwv9U#bcK0000}CO1*!he@c;k+ zfB*mg{rg{#hxPwIh8G{d0|o#7{Raep|AEAFCm#U_AQp((@4x;AD*Xo({rB(3@4q1y z(m>63@(hzyJPYWMEi%>@iRTXyxzU zAo>qT2S^W413&<={Q1WKlmMyz`(Hzv@8AD_R~~+N^7b200Z@m&0zc4{Q@7rNwftxJ z^$Q??fEu9g1Db8CAq;fMkDq@pJa`8*&sI~^TtyHla^%`8uswf)HUI<=3()%@Pl0^! zf8Ui?K|l%XeRX{Qd(n@juAHz(D*15I`UefB!>$cK-hRUqIf!|Kj}Y zKt+#Ue>r^ZHOMRf{y`i940V72V*2%m0pg)Q5O4ka4>U8*PAAEH2(%ZZ;ol#C0AiF(UW*)& q3=s4Oj6m#vP&UxAe?ZIt5MTgFMVEBke8_SD0000BE0lK=nzFYgc)d0A2*B+AFf z2joHok-@WP&j1351!6Wt`q9fjf1W;g`1ALFY=DuG5oiNI0I|ST{|2JJ|Ni~?`|A$_ zRt*pr0t5gt0M7pe4IJopi4@}M{rvp?{Qds``}+I+|3-D|`uqR;{Qmm<|NHy?`uqO- z{Qn;q1i_Qs0*LV@1A}N|@t-FT{{IC^{`vn0sPGp^)o&2vABgb_!eEtCyu9%!Kmf6* zGhfda5_|CT&#%8A#S0%rhKer*8VNG{57cZ3sU*g7is3Rq0I|G(Bf-nd3vr@r@vHy8 ze*OIQ@9-oMOb-A(eJ@7=Ab?mP;SCW2x*O<#U%#>Y7zqCS`2!F@APw*!ml9!S{vjhP z$_zA&0R;fLP(1(v#Q5^%OL#2G%0Af7VC%@R_vTF*lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&Zk)EZ(2O=d>QH$KN3zEi7S9u{+2K>GX4ds`2QcM z=+A$K-~a!^(JwH9Fn%*K{{Cdb01!YdV9)*qi~a#?`wdg{8%Z^Y!NB>w;@|&31~6!UgVU(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 diff --git a/source/masterserver/flags/gd.png b/source/masterserver/flags/gd.png deleted file mode 100644 index 9ab57f5489bb9ebb6450cb27f4efe0cfb466144e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP)@|2i2MUNJEAGBA`g{QJZ3ub1IpEW7h{~Z4K zJ3#Qa=Q1XS-;5h0el2+U>(Te$zyAID&HDTIKad810Ad2W{jW5`@9y)AKr^5J{4Kqa z;cw*UKQW)B)-pW&@%z{RUqB7N{{H&&_Ycr?fB*vd;rG8kGw%JlqX`uK!_D~nn&&T_ z*-Q+-7;nUX=6mt$`7e;3-;BTi{QC{m01!YRC;j>JdmqEEKMa4Icz%Tm{+4F_^}h({ z_1{sye%WyRp84|E^4Gur0Kxx1e;6150*D2Oe>41%=Kmef^V^IA7&yOx!2%AYU;o*D z%dq`!;`!w)_PhDb-(PS30!;@9Adn3rpZ_$9NHVegX88Y?;V;N+#{WPzFy?-P;*ar< zJ?CFrnZE^h{{CWM00h;Fvzl@K2fHp9I6dqaaxb00=Mu XLcuQ~?TP?t00000NkvXXu0mjf`7udf diff --git a/source/masterserver/flags/ge.png b/source/masterserver/flags/ge.png deleted file mode 100644 index 728d97078df1d07241ae605dff2f2cac463be72e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmV-Y0^8x|9^h-OG^F+g7@$L?BC01YQ`Wbb?43;K=s|G$6#bNnb!1Cx>Qe>QfY2m>?Izi&U8 z1o&Rm*8l_%%a6%3nS?}u4*37)&;Q?l7=Q-<`}?1Z>;KQLY|KmGQ@ZWEch0Jnt zUmm{%2p|@g=ujpTGX@n^21dqzKYxO4`1a@2NuYivJ4XgKw*UYBFf%g!{qd7YP>5~& zE`R_4F#yj00OjT7{QUg;`}^~|xBB|}`T6Q!vcs262Lz;t$n|1+qbnVARhhy8{z5C(*C%JTg?tEV3%;s64O@&5h$(1-*>2%Ak`A87BFlP7^( gh&l)WvH=1N0MfQja}g1cO8@`>07*qoM6N<$g4hNuZ2$lO diff --git a/source/masterserver/flags/gf.png b/source/masterserver/flags/gf.png deleted file mode 100644 index 8332c4ec23c853944c29b02d7b32a88033f48a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a?JP)lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&ZRCwBA z{Lg>@|4`Xj5kLT%`al?B=W5I`(ov;U*021*0XgD3^5{teN< z@cTDV13&-@;@|`T5QYI@3O)ok?1DO<2trehc#kXh!0Z4iC6of!=I9L4Jz5Qk(jP`l zJOKo8(qFLXAF#IH8`u5XwDI@PAHNy@|4L4RsD^0x1N0+605O4m05bkR14QCiMDQ;; z>0h$aKjWi;+@CNFzZm}i25JBZAQt8_hOB_!_dovn^Y72^zrTL{{r&6TuiuWpfB*e$ zwD}j1{Ph<^0%eu?|D0`P00`k|9}4iHT+`$2p~p=WCoxfpgkZGj{YEt g{DC2GLI4Ob02tU}a;hkw5&!@I07*qoM6N<$g4!w08~^|S diff --git a/source/masterserver/flags/gi.png b/source/masterserver/flags/gi.png deleted file mode 100644 index e76797f62fedcbfca8c83c51951680d6a6e9081f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0WkiFP)VoB37QQ+R{;bN6GSUi z+kb{HA3p-oUOth}-@kwP{0U71P%%INK{Y@H82)oDp3V0Dt?T`39Pi$;RTl%zL?{P4 z2_S%&kW~Z0x6qjPzkeV9`s>}VU!Q7P|1&Wm)PrpR2q2b!5Hle5FfeebsWZ)5spT9vc*+3O2}Iw&|Nr{sqx*C2&8&?7c>c4n{QvVC zD9-TjFQbI?+i42`0*K|`>)%Y*uQL4o{r~rGhChE9{`~$Pz`@Ka$@uLpb; diff --git a/source/masterserver/flags/gl.png b/source/masterserver/flags/gl.png deleted file mode 100644 index ef12a73bf9628ff5a67b81bd980d9c5d2b2c0f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmV;{0V)28P)J{teTOL@z0+>00G1VRSiT77W_YWkm2*^|KGm- zfAHXcOY8ruSJ7+$Itd_vn4oTd_U!+mLkz$F{Qvdq|L@-*^6S_C%a&nk00990)`(*=-xesBS%qG0|gf?f~#iu^9N|j9|i`10Ac}ZUz>% diff --git a/source/masterserver/flags/gm.png b/source/masterserver/flags/gm.png deleted file mode 100644 index 0720b667aff506d7892c5c301af04e6bbf932751..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmVwRhhvIeu00_fCKU~B)yH$s9sXS^B!W{?M(W&}hPbMwO z;*cg65E@7haJ!!XVgYOW|Le(9kkY?@fpY);{sqc`6amR!K*q2CzkUI^Y_hUI(*XjA zMdSH%VNp?r|Ns620Z1T|}fB<6Q zlw#oF`Oo_sVk+2%KTsoq3?TP6gz@)3Ki_`_=6?VI#CZSdeQ9y&f57m8xf%uh13`xW zAjrhTbmsgSfB<4-$Y)3kNW1sx-tWJ^f#}!YUqA$5fJva>FJQR-`S({vK;>fVMSuWe z0mcW=Ig;FxKxv@ppTFP`1*!N0BL9M&0|dYz`1hCL7Xv^5F*2kxF#KQuvOqEU3km&! jiTr^fV1zR<00bBS-TrJ5MX@2w00000NkvXXu0mjfGz`_@ diff --git a/source/masterserver/flags/gn.png b/source/masterserver/flags/gn.png deleted file mode 100644 index ea660b01faefde01ad2527a6abcf7d1a5c1b0526..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)@|A6>41A`El{SSoRd}EL3@|NdrR`1}9=ZwUJP z@AvHwzkdDu1yn7|BMY<#Ab?oFX8(t({tZ$6>;L~hU=2XVuU~(E|N0Bk07O6y00G1T zbT=bV^`Afg|NLS2{ReI~M8m&-NE-fuGynt;*hzmtW+Q3%1=j#1fvO=I{`~y|)Bq4b zU?=?r84r{KY4``%041R|`~%zYhXEjfz)k`h|LYgXRlk0r+3@c_)IERx{rUUv4^RU@ z0D&|xgN*;p0Mzyy>QQ8EKn=iP{qyfH5CNS85I`UeOuzpyNJ@hA{P_#yFfjaPWc&?| zr{By>f0X$D{QV0G@4r9|{}=!Qi18~pg5ikaD#Jf9Xfy-Svu_Nh0nj)GNi#731Q-A_ W8E1tdJ(&;y0000P)fLk0D%}*I7ff3uKv?i+N*~ULWZ>4 zW5%k%a3T{@*`z6pma6eF$JtK+F@C*&o=d^t|Ns9GOCXH@*Z?CVuP#7nB5Y|1kmu|NQ^=?>FP0zrYX%2q2aZH;)P`n*#-K1r9WbfYOYN z??RUX1P~*`M}`*mir*mb{sxCVG>rbhqT(MY2L1y54rHu+wi6(L7#SX-$0bVa{(;3h egu%oB5MTiLH(5{VMZMqv0000u-`~Ig{`~p> z=MRwl_xtx>F!}G#@4vq{&D;bKKrBFA+{}CzK0Nsg1pog2{{I_D14*DX1pWH^3y6RW zSzcL&Zwvqd#Pa7K10w^wlkmIISh(4kI3GTJhN2$mzJLD! z0*D0|DC|s(0(}1j8UFtJ4HA_S5@P=M@9)2VV#30}-~k05FvNkXnV5ck`2-L^EDTKl zn1259n3DG7^QXUm{{H**3#f!E|`n6Mz6>fhdBj29g(UfB*aM-=Dw#|NaG$fByXc1LXhxFC@THKjjKQ05P&# zA9gbr+SsEBRPB^?1!&T?30hEBFhHFGv5AR^>DH}B00G4E=NHV45I6k$@0N4rAH*g9 z{zDN+_&*OP%Y{RC0Ro8e#fvv0A_7PTA~XKMG0?q08}8kE2oOLl>koag&}IJi^WT4% zN&g{c!yE%t3}J9_Fdy0V1t5S}4xV|TB*XjR%dfvcU;YDm6wdeu;Q~GU4JP)J`S$qz^!f=A3G?{>83*rF;63vB|NHv-`~3j>`uzF%_#GV;x3_Tu z05Jg0{{&$2KZ#9J4f5RdzRdzC6Ae5p=(o+T{uB7y^ZNSwN=h$cVmJ#62-nx+ob%l!TKAE1V~I16T$|E1+i#l`u&y!03t z7ytqQF#yj01Tv_Ick58z;rzG}_y7F-%)*RRAv1X@1^f8;`}+eA4+yBm#PKA>w6y_L zQ&a!|00ICp0M7peY0>I$KneW(?7rp&{QCm?`vUdU)NRiG`uYI-`}gbY@;Dai8vP{| z4h7uY=>Px#0*Hx$0pxvffc*LW3+PFp{}_J#0ty11^n2!vLjod>mX_Jy|Cz2{eHy3% zAb?mH7=HZ$2N_TWSP@V&gaITO7A`uvc=2f<_uIFxDk_pd4FCZI)bI_+mz3lOl7E0f z{^u`PGlT&Y`3GeD{rm6lUtS;y)Bq4bz=+dkVE6#Ehk@Y-82x6z3jhKP0OI&0DF;s+ Q-T(jq07*qoM6N<$f)`^cRsaA1 diff --git a/source/masterserver/flags/gt.png b/source/masterserver/flags/gt.png deleted file mode 100644 index c43a70d36424b66f1627216ad988cd23a4be9285..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmV|9}7f|M~m>&%ghRD!%{(5DNnfNcHoNKp}=7 ze;EG#|IZ9j4hBF)cVB@t{Qmo2T96TF4?qC109^ty;2+Qi2B0xObN{1)Uw^{8{`KJ4gZ0H zP(J{D2s9NSfWR7{27t^!x8NVhN&g{E`Ueb#e*ggla?+pwj3Cv27=VUhwE^V&zaVoN z82$hR5DUYve}Dck14V%vK+Z)23?LgAK*7ZT@-zbjKmf4-BkT7+CNVw+pd~+kF)%WM zL>VCz0|PT7gS-eZm>Gd?16jcE4PH%g~!@=<9&!2x_@aEGW jS9>vVD)6R*AQp(xFW-Wt{{mJ2|NHk};Jc-)O#kPzME?5A`1{ZQ-#|To{!0im{$XGM z2p}eq*?*y`{{RjC%V7Pj<(}hvo^Z>=hrJ-xK=d0#0&M^~2_S%&fR6tAp8=>2$p8C? z0q7F5H=q9h`}OesIT^OczkdG%sRkpU6i@>|0I@Lq1-k@j0La}yZU2}V|JX_T{{Q!% z>EEtDfBydd!vuBJUq+w?fB<6o2X+#W53~WS;s2M<|9d72Yseq)`11cZJHs!aS-+wF z1}X*!ASNLG{ST%Ze}QTk7ytqY@{}>p)on&BOV)*xm;om>72$%sP!HhqD7ytr@1teTu4J7{m`^Wh2AGglm{~UiA z82u;s5_9PZ|FH1)~3de={)r1*?FgUtsi`kx>?C4?qC1 zfX)8@|LZe*d2K>lZN0{{I4*^b@QIr~;(tA5`a`e}Ddhy$ldQAPvkwr9kh3`~WiS7Zcc2 zh-#qDKOj^7{QC<;3||-k0tlpm>GvN7NlB2NKYyjTe{-?^h8PLd@aHekus?tQg2Ee! zfN=^CK#X6(5e!Gd)(i|h;JEn(j5jcXFhHq*fkB7?Aiw}&uW^ngBcx#f0000J&k9ol;AaCAG*Vvs6lsG2f+AJUecp&K4&zS7@MzJZZ+RCHJO2~-cn~)8*ZB# z%#~(Seaqctb3On>xdArM!+zLfe2=iS%3k1HK82I)yo62#|&;D2*%o~N(LQ$HrxFU=@<#wgQDty7s|5?>qxBTrc>UoBZ!}1le z#)a`Pq~$aEPO=D0fO80I7h5SSMqU=q48*j9Qb*%7#+Pi|ervSf?0bSFwKsAPn1FO| zKH_&kh#AJmvOUSnl~!1AmcaNJM5awz`0DF46>zWZuCh$z(7uBp0to4w2iu-uj zV9oc#M;CkJ!OT_8;~(;r&Cw`0K3r=(%@VWyiIA#;S}+n)^}q>|)QZ|IaYyyY!;frq z6mATysX~aM!z!n$rJ$=27fpoIr3iB{q|Gr32uDRa3PcNj==OQGHve|07^1DbtUgzuEQ=j%rDF diff --git a/source/masterserver/flags/hk.png b/source/masterserver/flags/hk.png deleted file mode 100644 index d5c380ca9d84d30674f05b95c2f645b500626c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmV+q0`UEbP)00;JD`K-EmLvOuK( z0R&e6?>|)a-@i;iz|8zVIqAQ;I)|_@BNM~FU%wy-s0ZjAfB<3vx(uZH&mV?Ae;64V zIcsYEzkmP#{)7J;N}0Ju0muUq%~ z^Jl0Zz)k`PASO^y0(FCg{s2v4J zf4+RlSW)rg;lp2_Kl2?q^5yYkpazCNzyJOD%k=jzP%%INf#Tuc?>~%^l1w0DfWH6z z1E^V4lvz;l%d1x`a&jQQ{ROE8h7C|LKmaj5WMKG(8n4KVKd5of#=rm&U;y%qJ?5>3 RVzdAN002ovPDHLkV1mTk^F06n diff --git a/source/masterserver/flags/hm.png b/source/masterserver/flags/hm.png deleted file mode 100644 index a01389a745d51e16b01a9dc0a707572564a17625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)>fJ3En$GhGS>sbE%%m3$AD)q?8M9y>88-}kR7#RKlk!P~Y_PLuF7~U~3`~nC7 zF#yj00ZUDdpLsm{7ajP|&HwoK0Usg|6%f4L_{`Mi{rvv-`ukf=Ed&Gs-sA7L!Q7*a zj{*QO0M7pb%?Sw^g@yy{>ihEY{`vU@3=8@G0rvO$i3mOL`~mv-`W+b$Mmr&io5dg< z5v!7q0*L95jt`TzK8Kd(Utv)OSp_aLv){6ccV+Z`{Q2+asKUU&aO3`Kpz6wW8wp`< z28M3{0mSqnB#A*-c*8%1=RD#sSOwMznKA3=e&iEzwo{cA=PgXK`2OQ}gqId83!|%* zA_Kz@fB*n70M7pdECCwp4H&@R`1|(w-}M5x*74i)0}%fAt;XafA{48))#>Z>?CD#}*e}Ret0tl$#*RMZ7}Jl7Z|M45`5*URzH9L z{rmSnPy;{!u>dsyO%meg+00000NkvXX Hu0mjfN{&}S diff --git a/source/masterserver/flags/hn.png b/source/masterserver/flags/hn.png deleted file mode 100644 index 96f838859fd2aed975f5f4134050fdbc0486ce1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)yNpn^YtfB*U? zE6K^g@B<)#SlTBTcsfda`|@_0R#{e$UZ3l|Ic6l=B#}T zWCl5lg}RFY8S^$g{qgfJOdc2ve*glAv3c@IFK6|y-~NDH^$#cn3{a5k!L9^_5>O@B z$^W^zSlTD;0tg^R28Q0WdbfK|zW)9V43odV{`~*->+kR1AO=tbO#T4}-G3E1?u#4x z0Ro5x7#++k42m+GppXWk{}2W^;6Y*k7i(1vOT1`b$6{=&w9#5#oJ b00=Mu*}Zhb7k&Za00000NkvXXu0mjfKokPk diff --git a/source/masterserver/flags/hr.png b/source/masterserver/flags/hr.png deleted file mode 100644 index 696b515460ddb670acb7e9de4438aaf21fc5fb77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)@|4`Xj5kLU3fF!G{fyDoR{}_Q36Vv~H|Ns5{^Z)NZrr*Dqe*gae=g)r_`DNuw zfB*t(VEF(4$y0{Ee}M=nS{mB(NB;kxJOBSE{F_{n`2Y8>|G$0##TjK~fi?gH5EIz! z|8Uj6|NiY-l-<0|OxA@1MWlzkmOI;leLR z$De1;{4g{7^y$;LZ{NOt{rct07a;lk`E!5(f@%OM1_PkhC8`eE9egqWbga z&p;hdpFRZ$Adm)#>fe8W4*Ct02B|hR1*-n0rS<;(dx&bFRY1n$$BzL5h>;=uaC^Mc z(+@v?|NZ~x@4w%F|9yUZW7+yTpo@LH>e(bUfFghX{rmIxzpNnpimU?w0mQ=a>kp9s z8>AGffmuv7DrFgv!3yU7{`2q8f1ngFoPlxn4AoS-S!;e2821p2q{((sbfB+=MK@k8U5Cg$|VB~~? z2XKWZk_lAZtGhi{|56nPieMKY$Bq=4KgZ0muK;2JYWn}5;nka8K-GUCa!{rJenZIL z|9<}gF~mh#ftCOS5DU<%|Ns8~1)2?0{RgZLWF&|Ls)lL+iU2hL1Q5&LKMX(>AUTM^ zNU9+S#0FXN@8@rz^Zx+^5DWL07wmsTIe-5EX@IBzTJ`52%kO`z5F362$-h7b*KaNc zh6exv#P}EJiR%3Sk01R1^NZmZ(C**=fB*Xb3rzn04HN{CU^bJS()(Sf00M~R4FdxY z(0f3MKYtkh0!g5OAQFsz{e$TF`x|H}%fCO*7#IKo2o$W~FaxWA8VofRr202h8w1#j zz=!|{Ah3qte;CCj89_$={rBfLBSbS$5J>(7`GW}-*g)q41Q6q6a2)=FMdm+9l%onl dL?8elzyJ+{hsuy4pm6{I002ovPDHLkV1hP90PyYjz{{0J*12TXlP$`i71!VmC|LYf!%PK1iv=Z0I@Lq zVgLrRB#$I8Q2qeT`3KSlX8!?(3s3+U9e@9T1Mx3N13&;VGFUSJ^?=Y13Wr{r~&-|6d^ahvDC! z|G)qK`}^nrA0Ybu|2K$nd)6X=0AgWa1{?O`IRi-PU$8V7{r&w9sOb0ae<0Pr|Nr{M zEF}%J0U&@_82&N|Y=e#y>zg27mx!0Xgp5*S}vr z{r~fq0csvl>92pk!P<5VDfB!NI2#TFQ3lKnzfB%Al=06ZHfFW+c#KiRe{d<4_V)^&)A0s0pNIe5S)eu>r zF8~6F38(?TQZ#J<0R*xEXct5e0}KG|WIzExE=U%r7$AT^8h-rv@ecwRzz_$3Xaxu` Y0RLik?wUgPu>b%707*qoM6N<$f;0ZTz5oCK diff --git a/source/masterserver/flags/ie.png b/source/masterserver/flags/ie.png deleted file mode 100644 index 26baa31e182ddd14106e67de1ac092a7da8e4899..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrK|P)1Ab?mHSU}=WzCQi??=KL1`SXRBmG?g! zeExSVgb4YXfjasA0Ybs`#&c5^XvcLUqDM3{{9AP00d^^H2e48-+%sM)d02u=%hct8G!N( z3;+QH((o5-_OE}xfO;@2_y=+i*h!3FCjkTyNW*WSt$#tPfB*dj3@CIxKqoQ$2DuvO z1O^6x00KJ+r1UogVe!Ksu!etsL5P6?Ab?navG)7lA4zUWkT?GPWdcP410y3N0|YR! zFo-FE!v&-P=p=vuVq_>~VE6=zV^DnmVAx)=U5ZNz6vaS)0m(NHWW2-wfs+9Q00bBS XO2cxg3=*#z00000NkvXXu0mjf|9Z^l diff --git a/source/masterserver/flags/il.png b/source/masterserver/flags/il.png deleted file mode 100644 index 2ca772d0b79b255872cde2fb29060bbbbad950f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 431 zcmV;g0Z{&lP)WlqUuh`uiUU82D1+EBLb>EWz|Nj3k zj6%@>aVJ0ku|Ql5RsEk~{?`9D9{=ZO{V&1vKX2lHHJSgJ0SFC1p8y096I?Y|?05b{XcgblKTHZ zfByjpAQrd=h&?HOAa>`R|6Hv9XB30N3RxDY7$AV4en1PH(j<7uAT&Tc4G=&q@-F{c z8i9e$01Rv(35=ybe;NM%WdxES!M~uG0dj%y@b5pvikg1_0mOLw_HE>d#AF}?ph|!M Z0{|%qc@l5wel7q2002ovPDHLkV1m6PxaI%= diff --git a/source/masterserver/flags/in.png b/source/masterserver/flags/in.png deleted file mode 100644 index e4d7e81a98d705da8d7054e77e7d311805659678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmVl^KlW*80IEmzVa(K3*_6 zG7fg0I9Zj&0woGah`r_&Kwu3FK=xChQigwjfh>?7kc!_h@)sEWW@MKI+5iwhEdRtz z89B8WSj7JS|MwrL=l|b3uZ7Osk^B4auaUxSRgtG4v;Y11_x}$gi|9Y8?EnG9`1|i) zCPv2p|ADsrhuF4k`@Nr^zUpfTpS$xp!A}Wj4A3Yb2~_s}<0pUsVqyY2p8>1`g1&zJ zsVvR4Yya)fUw{4wtNss>0tLxGfB<5GmnRH!zxweH8<(Mq0N7e&^ba6_ z7#WHgIs!VLeti1p-=9B!fB*jb=l8$ge}LrQ-#`%%`S%Y9{re-sFSERHIY0ohF#KVF z2*K4Ml>Ykz*ZJq)UtlmW{9*tIAQm77@e!0?Mfa}mS!7%=x2KmY(S z0M7pbTSu9imq`K?75n7n_u%3MB_szB3#hl|A07@E6$<6-<>30S5egmg@cSkZL+Ix9 z0st`p&i@3O7{&wE8wU3C1oia^`T7CwI=ckcau@Q71iA1L?!*;{7^Nm*&$?GLJd|NjPb3=0E0KfCb4 z#nAu(05Jg0{{-+tQ26`)!^rI-{P_e371QGlF%9qW_x;Sb;QRdk{r*xJJ*zy?_rWgu z&$=$1lYjzR(%pFe+p|Ni$IOoG{eTR0XemVUia$~;LXXZeDO z0096o0M7peXKyl1N+90g@dyY5ARP|N&gc{s2^<#+#>?j*9u48*^A9U5-*(6(kqBPq zC^|QM0*Gbi#3NFYyicBf1{wyk;Wx-spzFb0kX0fvuWZ`CzyHEKd)}3G%ew&r05Jg0 z{{dZPvvzMc=Kqyj=IHYZ2nGGUe(f)J7ZwZK+v5TV s=!a5B6v9X#`iH^&14cjw13-WQ0BQ>oQ(TIK+W-In07*qoM6N<$f`&OQ@|4`Xj5kLT%`al?B=W5P+gNxB&nJfgpGfTOih;e`=>T z5jZ8;?_>v5xi(~iU^udv!6f5$jpNVh2O?$m1OPDr&i?@Y{r&#_{`vm=wBfh>{Qda+ z{Pz3$!R5rm=Ee2+`0e-d?)LGV)1LD5^!4@i=jZ1F2;wA$U5|F$_;B;f&rf1p(qbG! zCte(9VPa-y5lGpbZn4ZFhzcT9$vfdqmuG z@j$ZG>u9())mkwqmYHSd7eFi*FJ3%$?AX0~_kM%HFED^GKqQ#;=g)7T_f%9=fX)F3 zAdr)QMoCIaf{X{6{|BNG$o>N%f#5F;02KoS5XlH2zyJ$0KZ{``H1_}i002ovPDHLk FV1nFR>VE(L diff --git a/source/masterserver/flags/ir.png b/source/masterserver/flags/ir.png deleted file mode 100644 index c5fd136aee534ecb59914e336cad18d18ead2a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)r;gUH{1e{Y(x2_S%2fSMQ?7@vH7`tSc=xS~J*|Ni>>`_JFszyAFKs{8d9NdA)L zm1AIH00;mv0M7pew_3Ln1`-ek5ajjb8VVZW^Whu|9pCfc910uY_2L}~8{YEX9t$4Z z@!Kj9D)d(L0*LYN-@lBEj6f&-|Nox>4F7-s`Ty{t|Ns8~x3>Pz!S){pfXY67`UDU_ zOc38f#US*GW&hv2{?Eqpf6;>f$N=n5fB<4bR}BO)G5?=F{eR-b|HMQT_5c3^H2?$< zb1geNgNn-kGiMln{`!CM;{TsNL8PAke-;*?JV+Z*eYOvhv$==KunT1sF?AKYlWZiGf7_{AKv_o8k9wMiBcC z1B3*kzkfmK*Ds)AfB<6r3XWMgVnF4hNdW;sfB^vU;z%SnI0)(h00004s{hykP}!$Xp8x`g@iqg4NJaUd z$B+Mm%>4cD_iu*Zzrl=O|9^qF|9<`Y547mdFIIVlOMCYL1Q5sui18rvfj0Ph3vJwt z)dnUeruXmP0|XEYv&@95W{1bGfWG{@sKWZ+FOVO6s`df7U=M&0& zKrFzJ{`2=AL>j0Rra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrIztFq(O~IEGZ*N=lh=;=qSyMwWku z27eMOW_|f0uQeek^e_9g7KH|eq{JVG0^UaP2Jy4}|L^JL_3uCblfVD@mnS9t`~UCn z|MT(+KT|KOfz%~1cG~~^_2vEk{SFNQ?Cjg~|NsBWy<%2im{vp^YdeS=hk-Cyo6U`Hgs{l4FR(w#{P`G0;a3G2@YSmzI~fu(ZE1> L{an^LB{Ts58L6#6 diff --git a/source/masterserver/flags/jm.png b/source/masterserver/flags/jm.png deleted file mode 100644 index 7be119e03d203695325568174b72522124bb2f12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP){QLU}0{l%6`#}@@_VD{9F|q;xF#yj01gpgWJ+A*m zGUYZW{T>4SpXmF{^Zon(`}_X;`}_MY3j1pm`Wy}V&B*(tydCWT00ICp0M7pd0000m zGd#J&@cQ@tG$8vu6a54J`qTCN{{H)06Z&u*`VIU0o2UAMn)~_v4c^|~0*D2u;qTwS zKYspMz5CDEtAAp>e+Mf5)@1$t_wR2Fu3uNK{_0!&`}CDxK-+|V{{|`s2p}dP{`2SW zZ!oxe=XdSY-}fK=Qse!l!T0O_!(X}WAk`4?=MOLh7ytr@32Xz9{pZ*3U(#Z~DiVIl zOa8j^;n%JAKjo!$j^Xni)Y$z6WB&k?3JlvV7}WR}00ImE Xyv9Bjb9W)}00000NkvXXu0mjf@Xt#6 diff --git a/source/masterserver/flags/jo.png b/source/masterserver/flags/jo.png deleted file mode 100644 index 11bd4972b6d5f134045d4e8ce134601ea9b5654f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmV;~0Ve*5P)M00|Ni~>`!`VeZ#eh`f&K#;fdS|pfB*tJ>FU-06DIsWc#z@uumAs9{`&>~&q~MQB#;&cfB*tH z31sk|Jq+K!KjiuK-^&B5YLK~LCjkTy3s3{|pFco7yH$Tr@L>D>cm1y|D}MvS>F@7f ze}Db{_vg<)5c|)+zsmedM_Y~p1Q1BWd$vDo!X?isvq}Pk|KA^w>VH5L!1(y{_x~TD z9$-NK{r~sxzrPHB7ytr@v6F$JJdlAwh=Ji34E;f3{DCq4fk_4ifB*vkxQ1J~H9>i| P00000NkvXXu0mjf0T$ba diff --git a/source/masterserver/flags/jp.png b/source/masterserver/flags/jp.png deleted file mode 100644 index 325fbad3ffd3075a4a84d8d898ad26ef7d3e0d56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)9whYk?f=!Q|Ns8||JN@lTD;`{R1ZWk|EGa3dAO8ObDh3E3Cb;oH_5X#1 z|NHy@|M?558b}5Q|Cf`4hZv9q2p|@?lb|{i68>{>{ol0lx`{mi O0000=G`P)0NEt6k^VGA)9E1hT9ocRoN>wSfaWv)?-raRm?)Slj<6Po6w} z{P+i;{`~nD6~!ec29@~tkBNo($fnHz0mS%{fq}QS{_m4#|Ns2?|K~SQUHy-* z`HU>AfB)8feAoK(-@hL}|Nr_0bQ_Dj+^xMk00K}f2RQ&hFc1JYLgN3=lsJ)M+p3uR zWC5ydAM*!ly4H1hsiEFvIU^1)HH_GYz!QMsIYt5i1c4ZMLC4DfztdU-q)WGxxg;|L zi3%uAJ2fm~N8&I2%AdL;`{4^9#;e!&D=C-&Lk8;9|NlO`c*HPy9@C${KeOWnB;`P2 zATRu9VP-jSWFD-S8kh{*zoh2aO#pT8A2W0o(w3 z|5bef!~)j#|KF3RAf-U``!@sYUq;#A42-}3UHtv;%kTfcfBpOQ3nmTE<|1vNq z0ns0zZx{dq2xP;5h!=kY&G_~A;V*`-zy9<8Vi5ZI|I4p`PkusG11$kMn1KNxfWUtE z{TpHc!>?a|&i!W8{>5bQ`~TnHf3N=fz5nHq%!z>% diff --git a/source/masterserver/flags/kh.png b/source/masterserver/flags/kh.png deleted file mode 100644 index 30f6bb1b9b6c5bf355f67a17531fa73beafa6639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmV+=0^0qFP)P;@arD~1pHxO_zPr1&>t9y%wPZrAQpyS3=Ms1K-T|%K*j%o>i_=z2W0&D^Y8ax zhQELQ{rLl7|Ns5_-|C4+00M}Gf#D0s|6k8u{RAokD*W^JKSaeZAp18+HBcQ8{rdA) zTAYJ{;SE3lu^j&CtN66?*W<_k{(=kvTJiVSPc{h&pyuy)ZZrJ(`}gOM|G$0#rP$=; zY#H_d1P~L*>3>1SGXDMzbOE=49-9EaM0J&9T`emwH;=g~P!Ocy*DnU30tNVGcpOKXK;IXGH`G*aB%Pig@_cF{AXeP^XnG~{rU5QfdL?ZSim;?VE{Sy z7c(ax6CWR+s|%BWAkauYPfsQR0VXz9sPSMM00M{!7+@fO0fqklmFn#S3Nf;>{s#gU z7DjgV{|pRrOO`MKef9?wUO?vn1P~(w!@{x_lZQ{f0d@UhVEX<0FF08K{sNMJKnNIa zzrX(mdR{@6d*A9+009Ja65pra?7SkZU^!3-{)PrTC`>`Y0b%_6|LHH#J`sQb0@|>a n0T_AEh(trkF%3aX009O7j5IT?Rho+J00000NkvXXu0mjf2r}#E diff --git a/source/masterserver/flags/ki.png b/source/masterserver/flags/ki.png deleted file mode 100644 index 2dcce4b33ffe1f40d490cb1a2e03efe22ea56155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmV;B0&o3^P)8t@U|NsC0_uv12fBrK4XN%za&+zB_ z{P)aXfBpaa=ii?{|9}7d|NHmt1seeZhy|?e|DWei8UFwK|L5=jKYtkh{P{kK2}m(L z`||tm?|;94|Ns5#-_IY+QnEm+00M{!r2OxHhJR4iK=k+TZ>A77)*#lue}Db^^$Tb= zko*TE|NI8J3LpSOb8Z9x2m%4nC$a{*Gqe90@enzQH`ta%tA$7d{Sv5iP&~x@8dMF~ z(;dfh&fyCHF#yj00oRR-9sTeJMNR(n^YxvS3U`G57YhIQc>VqR{rPSM@(uBDU=5F+ z{|5&5hj_*A{sI6o0M7pbe|x2IYDAmA_)R$v7XIy^!u#*~18PtP{r&xWnDPVw`hiji zey{rM^8J)$5m8%@0*JA9=57`qRaXnayHCFDJ@r1pR}vUfQ&&Fu_xE3Vu+-%{U$!58 zQy3!)avcufO?mzv0@a%gl z1HS+N7!IC&H?5`#AOHX{0M7pb00(zPR4BWp;5AJa{{8^XwcY>#`eSh{`1tyzm&^bF q{8L{tuE6I1;oe7AG|b!z0t^7P6ga05`yJ%~00001r;P)}L!W`0l>rF;|7So3KrTcC!ho;=0*Gbf0S0@;YBwbYEs=i=3_$ev|Np-X41fOr z{{tp}0~v7g%iT=?0mQ<{9!@# z-(SD~{`vL)_wRqdfBpaan?+XX#@15+0mRIp%kY{1qrJR?xs-YLhQhSVzk_f6;`sgh z57Tc3#$ODKzZsZ*F#y?2e^`Y0-&}tV5I|5HD)yDjz7nmS1pU~~aVF#A6wD&YtO00ImETIDprOD_2B P00000NkvXXu0mjfKOhx^ diff --git a/source/masterserver/flags/kn.png b/source/masterserver/flags/kn.png deleted file mode 100644 index febd5b486f3f90056637b23caa26d838fbadd7d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)h(K@ANy8uaQvQ^_nWcs z*Z-GL)eL_?t_B7*Kmf7KbznHW;LqhtK<$TZ9ej=*TGLweOZn#S|EVB#AOzI#2dDw) z)4xDJ00a;t5ND<*{rU5ogY7p9)8EGU->gS|Gwk>cG!LX2Y%nmu8NlfEl`8-N#0ZOI q248)K1w0H4M?n#d6+r+%fB^s&Q!OA|2rzyC0000Cs@aq@DuRlQczuzDZ5@KTj2q4CTH~*`MftCON|DS>3-+w6c z9|(gO{~7-O`v>9vKX&5_Kmaj*WME|P@B8=S6~kYUnG7sU|G#_z>G}QV|KC3#^7rq5 ze}4b}^_xjb^7)+E00G1Tlwy4KiiwGVIVgltUY_yi&tI!o|Jl8p;n#15-@icU*KbCk z6Mz3^`1ON{fdL?ZnEnBs@%JyYzyH5mxBfr4|7*t%=AfYeY;6C2{Q{!DKY#uG1wwy- z+}}Xm3;+QH(!lWNFN3HElfM4XRjZk-tp4-xFo=l!{|(XrbkBdVP9XXJ&!0aG3;+Sd z1adCWtuJ2w-n@w=AmGpT?F`?)|9k%Y-_M^QML&N+RfBB+Dh3E3pdT0*fp#rf!j_o$ zUs8faP3>oG?f*A#7{O)(oeuE;(0C>wVqgFWAQqr4|9E)*J$m%5y#o|bz~KAxm4S=v zKP&4$usU!k0b}RSKS4oYgaHH)%c-;9wWL`3={r0|OreK!5=N4TMk7RCwBA z{P_JV0}}Z6?;n_iu%H+Q{s1vR05Jij`8c?M=-GouSI=K${m;n9!7aeW#m~(x$j!^i z%zXLG*~fS9it_V|2?zl-00a;V#NgMjUvJ&I^~3uQB4T37ii-d5-u?gQ&wmw_XD?o^ zUAsm=P*7M%NJdr`Xazt3fo%By|Nn;%AAbM-ZD?YwEG7BBxA%WR!T-FR|8><0Vxn$d zUT@yKdH&)BP#Mq$fB<3y`hl076R7Rgt5;mSyo`Gea7>-}|M%}Nf0%y${3VbO@hKwm zAWK?W z+TGp#<;$01Vv<1pdP-ancZ!Qkd3bmLHK?nrgX5I}Ab=R3zkQ1wk#LIP517FKVgLC9 eRt>}e0R{ktF&Q^6#MUGL0000@P)xg`upqGzh6Lx zERQVE2><~E((v!!|G%IA{@M07EI*V_ln=0RjjdN{oM|h)7EO z{{7?6U#34`ML_iD4-=RKMg|km5|FijfgS(|AV#2u+YAh13=HqUkqe1m1{eb(!T=Kl c0)PMm0G()MDW>>^I{*Lx07*qoM6N<$g4p`a`Tzg` diff --git a/source/masterserver/flags/ky.png b/source/masterserver/flags/ky.png deleted file mode 100644 index 15c5f8e4775b2b68e0360c1f4ff1f37e61611276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)0{QUt82Kj15^L?rd`uqE`oNxjFF#yj0 z1e^fI2i-9Q(8&Vs@%;Dq2on+Z{QuwM00sm0@b~}!1OzrH#hk+X+Tt}E6bb+U_yPbi z0M7pcvI;2tA|wYPA^Z*x0300&EGqR875n@A_WS?(`uvdQq*oFTSt1&p=b-!h{Qv;{ z0st`p&i?}PGCBeX39IA)-~tZg`v#`;6$Tz2`uqI%`ThF(|NnA-^wR?L!uSAshx_~g z0000205Jg0{{tif814-hz}E2g`1#%M`@GEN)${-9=jr|Z1Nim(?*qH%B39iMC&AR2 z>ggNf+PVUWW##cF5^jI~{P}h24a1+`jKBZ?zJB$|uU|aB82|la`WF`1`0wBUe?VZ- zRnf8uXahh1u`n?Z4sYX?@pO{;x_8g;0tl$# z2T+})81L`j|Nel$KOpz_zrTNegN!(Tli}h6pb7teeq#K~3=Aa(fB<4-V9 d!wLWb3;+YKCC*ol*cJc)002ovPDHLkV1loTFLeL_ diff --git a/source/masterserver/flags/kz.png b/source/masterserver/flags/kz.png deleted file mode 100644 index 45a8c887424cff6eb0471f5a1535139b965e241e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)g01!ZoKn?Fz`<^k#?O_Q1 z`=8<8e}=z6_5c2{{QvRuAM+0emcRf01JR%V|9}7gKjGLHfB<4)U|@L0AiL;yFw=jq zasNSbGXHKG{NMlfpWxpAK41Q^gEaj6FV4=$@arEy05LIu!2gi{Gync$`1$|;-~a#q z|NCw7f0xa__4fbPn*ZDO{onuJ|3JnA^#F|o2q31v4F4ql-&_7K9cVD)|KCjiesKSP ztM&iLe}uy71TZ z|DRv){|H?Bqoe!x=x?wkfBu3(0w91`fMN3Vzue;gQUCt^|MZVr;{RRU{|DCmOS=6} z@%2BU5C8a_|1a6~&;1YB8$b;J0mKBvKpP_e^#OhS_CN2(f86)~DtrE)Yx94t!v9OT z|MTDe69TJd_zQH>zdry01PrBrQvYt3|7!q-C@@&>{!_XBPnqZ6E6@K61pYml`M2uu ze+NdW22lI}1Q5_kK)3wPV4bt}e=;a?{xkdrMUmL?|7pP3c>kYY0b~&4U$AjN34j1% zWLW#P{SRLy(>r)v0s|Y${(}_LK*N79FfcIy1Q-CnX{(%t#68R664G@6GIJN-*24NrwB3rW+v!ydOp^Ef6{n_)(btIFVjHa=pdp6)} zz^!@$h^2tpKUmc4)64h&|Ni?2LVth#{QKwk-@kwU{{Q=j;qSk{fBpc`pWlD@C4}l3 zHUR_xF#yj01d}3g9TFqw{rUX<|NZ>{`TG464+L38761SLpR(uO=J){s0Q&s>`~3bJ z6bIb^kphT`;m^O{e;I!LWBmP>@yDNkj7*H>@iN-VTtHNrD96Ue^ySz8pMMxZ=pRTg zKmaiT)&Bj@@b3@E4ZnZ>72sjw}n?8s2>T{qV)lKMV{%|NQ?241(YPff@h;hz00Cp!a_N2HF7% zr}y9gR8D)C;wJ_Sx5=xYz5MWpi4mv-=yjk&KmiL7K#aZ&_9^w5@1DH=3l15e)xUl~ z-0=7B?|)4HL4sh3f5LL21siGr0*GY=!$H*K#ZR;BJ~dv8zS`wDeeIR3;>1y|KC3hK=RLTAp0Mf zWcc&@%EC-|_DIyI;S5 zZoa(f#*3@};Q;9GfBygi2&4h78pxV*WHQhn|Nk-k{`>pa-{0-~I{v`b{|EZ(4?qC1 zz%@X;G0|`0)6dV-R;K{9rJ5v|%9;KB_nVP{8R7~c2@pVx*BKb3t8)H6dH@UxP=NgY z{qNULVEFv`^^@@rIK+N~gX`}f7I~!;+fM-m5DPFa{(t+%C?E(7W+q^;{`t)a3di3} zzd^yz010JK%>4cT^&8LzfB<5=h#HaqkRlk)Wq^@D01#jR5K~0vg#SK#00000NkvXX Hu0mjf%Ubyh diff --git a/source/masterserver/flags/lc.png b/source/masterserver/flags/lc.png deleted file mode 100644 index a47d065541b0d998da832e1981b479097a9b36aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmV+j0{8uiP)#-NSZgwz{Qh@GSmETWyIzrrS!pkkqDDw`CEYY|A1Dxfxke?UP9EWUlaZ{K@! zXYTRdfWyFioqIm+xW_M=V(hYvbO?~5ZHkEt37xh?rY1@PqM%`P+i2w@_wXJJO#nzA zheNt~+w1B3H|fqGMx=x!lms6SMy;uqQ4R``NH&49%B_cditsDHI6DHXLNubec}E0~ zb8dy|txA`rTkZMN{rCM3FV`MqlfuwZrz$X1)+?ntF|UvTkD3M?FxSaem74ag}Vzy5sA+`s~GjvDl6>(E?=UGu{=w?r5#MJIwhn?GrT#s zeRSo}v&#TUmcjL&mxEF>2%EIxN+SI=O=izlM$T5JH;yv-C%^zTfK|9CLa`qJ0000< KMNUMnLSTZ|5$YcR diff --git a/source/masterserver/flags/li.png b/source/masterserver/flags/li.png deleted file mode 100644 index 6469909c013eb9b752ca001694620a229f5792c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)sI{|q~>>TZ2$qp!tjsj_dmuxH+6SkQv+K1^Dpafp!@&+{r#8W&u@@le*a|z zk$)I|{ss9HAb?mjKkZQc#wYOgBhb-*|NQ;?=l9<~e?U(E{r5MB3DgSYf*4|4g1Z=I z0R#}sfv@v<-|;cLeDMG8um8XQ{Qv#?|LOa4L zz5|hefaLFgf557NB#8Tm`R|`M3=9AP!~zPVKOloaN+E`UP5lQo8*B+s^WVQre?jpA z5I`*dz#16EB$cmd~05Jg0{{#R40Cvt10RRAw z`u+d`{`)-+^5ON`yb$y0|Ni^@{rvm=`~3g>{0I^G8ZGb(2;2e)q~Yi9|KETAVEFqN zi2na)xwe&yo%hS1uZ%yx{Q;WF%<}W+mp@!0-yWP|m)B$h2q2(_|NnsK|6hiGKudoE zUGn9{-`6*oEmQ72y~rUb^YQPmzn@?Idwh=T>wA{p3V#3shzY3p@87?_|NZ&@_cy~| zpmRZP`1kJ@JI^@8AFa{s9OeCZO+ts{j1?4b<=-Nd5zA z`2GL?FD{9%H@9*#{QvEce@o8hC9n7wpg7QIfB<3vS^!iHvfyK-U8V5ZH#le}4S|yXQB^Nt}W|`Q?5-JjKDn&hY;a$Df~n9-WqyG5z}b zHWMS`AAkU20!9tv|KD6JO#c`e|FbePFfi-*z4`Hxjg_16|9{rM|5*PsvHt$a@%k1I zzvO#v;hz8j#Q5o)BT__yf)$AVfxHBa6HpujodJ?%_y>%AV59*A7yy`5b5c`Z!JhyC N002ovPDHLkV1l?nIh6na diff --git a/source/masterserver/flags/lr.png b/source/masterserver/flags/lr.png deleted file mode 100644 index 89a5bc7e70711575c1ee3b83cc2be7f0e1fb29c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJQCP)2Y|A4{o z-@kwT`t|eY&mTX2eEM}Kp+i!_T03wQQEla((gZiC0cs^;{c3|jAkj>009Kl@aN){ zC);;k0UG-E&);Xo*&wq)roznr3pD=Ezu&)DC1p;}S_BY4jKAN$W)>8Nm;toyKW@Ot z#Ps&Y4S)b*xg;zq)7SR<*)x!NAa?^@4{|ZkY%l|8FPQu15397y$%U%{0*LYZ>zAxx z8}J(slm+_X#f@tK0mO1iR9wET{^!#tU}GSb{Q3uSG}s1+e?a74b~(9Y%Qpf95aZY9 zPuWDo(ENa58%O|%pI^NU5I`*FB&GkLM&}>Ys6}P~0YHEO0B+J}4VS0Fk^lez07*qo IM6N<$g3a05u>b%7 diff --git a/source/masterserver/flags/ls.png b/source/masterserver/flags/ls.png deleted file mode 100644 index 33fdef101f74e38e2422bb85dc8a31bbf1da326b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)NT^udI6UX~&u_xA`izWBNXkIq%g^6Y%Pu{8|3yZC zlYxl^Ab?nacHcU-^!@XD|Nj5|`r(zVwkHE4BV6^xC+~{3+xxCp=yQ1PA~B|JUd6PoU1p;PCnS`uh0!`Wt}y4#)fi z@&Nb%0tn=Xmv@c{N@*}KFh0M&kIP1>YRmQG4?lbdn);9N*SEXB6{h}Te)Ie9Zy;d! z#Q+chF#yj01pfa18Ye&*C_n-K{_XVnU82h1@caA!0{i;;`V*Y{7}WX#^!xhz{Qms? z{`>&^00Ic4fsvW@|G$6Ruf6C#{P_EiKfi$f`+Dz}{FL7;Z+`vz4fMjFe?Sd?fe5Gp zAb>y`UVr&E@!c&!7K){sO`Ozkh)melY+9 z5KGUl3lpbYV0iHf6xF}JF{n*t;A3C_dhHtn&^!?O1t$N2Nj?UE00RIWZBXJNY9>Gc O0000 zKY#!H`S<7dzuzGA_xCRl`Rmu;Um!M^l;`6=xPSp5fLIuQF#P%V7sv;y25A5(1xW+7 z{Q_w~Xakza@Pz>&fLMUe`uqRSpZ|Y=>VQIE8-4+ehiC(l5cdDyKm=3_5I`(zTN!l! z|Nj0Es0O49Xx6_!5M^MM5b`fj@gGk4KbtNx00a<=83P0Vn?HYFf{Xx4|Nr&tKga?w z11|FC_y0eCSvdcCFfafF5XlYnMRN&=-B{`>{W0U03nA0WvHB!TYz`r< y{$OAL2q4DW;E4VQBmbdt8IZ(*2pDGo0R{jiB6maa(%qQ=0000! diff --git a/source/masterserver/flags/lu.png b/source/masterserver/flags/lu.png deleted file mode 100644 index 4cabba98ae70837922beadc41453b5f848f03854..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrK|P)?-#?r-wgj45C|ZESQtLMVW?~Zs{a4) zALIXj41fOq2a1uNeOQW%&E= z|DQh$fB%40fEE4z10q3;-;ClCKpOx8h=su~@}N>;ErcnO|V^hXG82+5i4Q+5aFU0|N&GK!5=N X;lz1sunOP500000NkvXXu0mjf*7env diff --git a/source/masterserver/flags/lv.png b/source/masterserver/flags/lv.png deleted file mode 100644 index 49b69981085ff54568907cd51a56a1e5d8b01ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSWDP)TuF);jrk;v#5jAUY900)zv`N|Ns31p}&9s{rUUv@1OsF{`>=? z-@pHYNg(_0@82^wZ2|}&78a1v|Gz$Y3Q`J0Kshi8lm?N%fQ(=Ne*FS+xn*U6mIDM3 z3(!4({{8=rtQsf{G!?8Agn$gN2Dab7KQS->1Q6rPlP7uPKoY|E^ZWmwzrbJwx)~sVSb)*-|Mwp*NlCCVfB*i0>4ZfB zFhYR-gakS;`Tzomv6O+~6D%TsAw}vh)M$o8KMw-~K!5=Nd?C`~#DJkl4QvBtQTT<=hAW5C&pkLRXaMS_oX@ePCublh%7`S0>4^BHJ{X z&jSWU1bzAnAdrUt4F8|~c=q?-U!ZD;3Wy>I`UNEa{sJFg8g4-`_wR00IcC z0c`wlknw+DNZ2$-$7NDlT|NlUo0ap!i1F~k2r~my1Y5)izkcK~h z{{rRU9);Krw*=%9uq;py&^Z7B1lI8X4~o-~jQ<6)85pKOHYf~%iU9%$qyZ=)&LIKv z04P8aRsoF!DgoLL3cdee4gVMb0*H~J5hWs_B!uw~i3^Ex1_pot0|0+0kn{N-xWWJc N002ovPDHLkV1lkWn<4-J diff --git a/source/masterserver/flags/ma.png b/source/masterserver/flags/ma.png deleted file mode 100644 index f386770280b92a96a02b13032e056c3adfebfa18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmV;h0Z;ykP)@|4`Xj5kLT%`al?B=W5I`(ov;U*0{`Ko0*gOW1x?dnY zU=0kve*-lD1P}`lGXhluRs8wG@Eb_}{{H{>S-s!?{`@vR^^5K2FR(pO4M5WY0*DFZ zqCZG(`2G8?)UU4`zrJw%x*-cw4MBhY08Ix7Ah47E{sH^x7s!U+ztwL3`tbkv-#@=J zum1jzWCJ7ENdN%^b`n?!@|4`Xj5kLT%`al?B=W5I`(ov;U*021*0XgD3^5{teN< z@cTDV13&<=05Ky_HBiN$KMcQtBo?#b8i1w)1P}`YD=UMn?0*)P|9^oV_=9jUlG7n1 zgOt?2g9iZui1GF7*Fr)<|ABx33~>V{CZ_AxuLA@S%fEmBAbhajaRP`eP%%INfiyrk z1T_G`pFe*90tjjYTn_{=GBPrt03a7C3lKmc4KH52_yY$2zyM+rgbiXafFO_o^aD@| aAix0StzUbk+v2SN0000M*00(~<{@!wBU}0eR!0_)M!#^$%c|o1wA4mpD0t66HlA)zv9Z3HD2a;wKuKxf3 zKLhV?#{Ykr|9@us&njQ==l`GI|Ns8^_xsQFIm-b82&94GKf}}4zyJRI4@Cd}JZ511 zyk#BtzrVk|eZKww|NG~I-~WGu5Q~)bF9rsH0Ad2#1T-6>`p@704FCVWdiqyE_S>%? zzn?t&`v3p0|G$6zgQ7n`R{;bN6VP4%{xkdmsRoGvjXbc2Q*ib#i+$e?>}LD_@7KRy zzyJOE_4n5=pu>QE00u!g^X8F}1){Re7)$pq2>GzRP>hz5WF0{Q`{ z7%1`&WXbP;Kox)fFb41M1d2p!76A1_RfAN3oCFX+Kn)0M$tdvjY9_8yH^9QVjn@nfZP*{rmI(|3?O9b~d@cVAX$tK?&3V z5I~F!3@gDg2t{v?r~d;6^$&1NgV7;ZP#i-L5C8-i0C2iwRaxXp%>V!Z07*qoM6N<$ Eg62#MXaE2J diff --git a/source/masterserver/flags/me.png b/source/masterserver/flags/me.png deleted file mode 100644 index ac7253558ab939481a85cc06dcc4d73503afb9f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmV;x0YCnUP)l$FJ^m&#tWvBA4C(n)b76qu^ z3TjKJi*u=MzAs;^(tHqT@6cZ|8AHxz+0T%zR}I9mkc`8faCz48MN^H2?$<3((yN)j;^`52o304M1f80R+|X9}Iwu*X+N)@cjDs2c+lU z?_dAGBv9wyKfl@e{~Tjr001}1@4rADVDj%Tpgtwu-=}^u z00a=o2DtG+^6#HtKYxRyQB?o^{pa7Gzs!FaUNHa!5W-0i5^f%h1nT_t=O0kRUm#-m z!vGLKP#fTS#5u+P{rv~@0nkXGhChFS;q~V)5d8o97pUPE13&;VK7Rc89~k`k^9M+( vx2Q8b0Y@nl1JFDW`UNKcfk_?)fB*vkB(P&2-J7g<00000NkvXXu0mjfGX%sy diff --git a/source/masterserver/flags/mh.png b/source/masterserver/flags/mh.png deleted file mode 100644 index fb523a8c39d40401b9abcfb144a73cbb2d76b286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)qpJCu1p{#SASZ=3QjbPhlO05Jg0{{#T~{M_a8tGL(@4F<^6===Qr`uzX+`vVjI z>RSuFND|!tCprH%UjG&-`Tqfgkh}r_F#yj01OWa1_W1j+!`}P+|NQ*@_xS<*{r*D) z#ao8o+xY#_%t@QS?0~yfBW+Wj{_zyJQv%*f2f%)|)v=^uaq0&4j6{l|Ybrbh`TZ`2ITPyN!~wBya;Q+wXO z|N8qsP{n^H7N*~zApZOB??0dhfB*t%@KJoPW~Y4ZyXB%oU++J<@%!g5F#%3te)iws z==lAQ0jwGr+CT&T00a=DyL0x5XB;1||6pKv0FF^K^bd&vjBEyg00RK!=O6aq+V@KU O0000p}y_ZxVsQQo9l8qD!tQ%&&F2zEbEdU-v3mY$p-gb*;wwp?LFG<9EeNpZLj7Q z>zeacpNZ>XJG@0bcmXcALo;Ad(L@#C92p0~G#aM!FfF0T7^YIJVVFaIl|0gRpSyF_ z@0dgJ{oT}qqUk#4;-a-U9Fej5EJ`tIE9)E!qDfL@GEq>vEDI}q@P8EmenIHxu!*Cc zLK?@%1j7u0A`mPlm`kyT;5daWs;EH!+LV0IWO0Zyj4+sHxRqia#e9ki#cu?^6YQn9 zOfZ8&4uw%r9nR_}FG?tJ1sBpnAsdGMh7pA$Mlm3ABvgz9aj&GrxaT8{1^YB+UzPEM zQQ5*0;(QnblJRNh>E*%16wccXl466KPu9Lk=M%$}%9~Z3xs9na6KbZ+^U;AoQ+JVg=BO3kgY$Vuu?iP6r(sQV=EH;Iwf|hcN2Nd zPl_EfW;$kS3zh=H4ojC&X!7Bd!`~OdX{VxLp z5dC3f{KL%rhe`hT|Cm4jfB*jf2Sk3^vlaWpqpU2@27mx!VE|eEAE^2d5dHlPWd8sE>;L~hU=6?i|N8~f1J=Os z`!`SnKmdWv|I6_A575egAcQa*n+Bj_fB<3vdK75(@4vtQ{Do`yh0yRHtQw*LD9^wE z5I`Uef5B$|`u7W{2T22%M6!Vq>?D8y0%`dD|M#!IAl1MB{`!Yz!@u8fUYwuxex*z#9GlH2{4I3~mO10Ac~g+V6jVB)KI)-uUyEi4o|t-;5vX%A}^sE-TCS?;peW@7xO)zGwLT z>;Lb2Aa%cf{|B;v0lB{!Wo3aj00dxJ4sHN|VGstA{YR$4C2D_2_!cBcz(8l;%*ju; z_5-pDt^fjRVEX=(;rPk#zkV}({q}dw+K<0~Gco-B2UY|%8?FIpIzRw{{P+Lo&pY>j zzJB!i)2Bb*-v4F%#qjU=2Y>(qX<+*Ohe1*jY|LMVKOmiqU?UkIBoO`m3qe4|00G4K6*VFmu*EK13J3rK Z3;;9iRuWt9^;rM_002ovPDHLkV1h$@)rkNA diff --git a/source/masterserver/flags/mn.png b/source/masterserver/flags/mn.png deleted file mode 100644 index 9396355db45a8ee040c790782209868acaad4b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmV@{}>pU8D26lh`@M2^zAEy;6E4#hyVhJ1te8n&0xjw|I|OmAOC9q@qGTx`1kMs zKYtki{9$JJ&B6L7=Kt^CKt7QCvS|}Q0D(0y{Qoccl;O=^hIfA-|M~k7Bn3tPfBpOS z`}Y4|zknP@Sy`YB00G1VQttboLEtY##9yH3?>`J++5f+PL6rRiQNLgu1_potVgX{t z{eKx$|NOuHhk@zOpC3@OA=>```VZI207MK7009KDfg$woe}>=xgMa@Q`TZMV99$1f z=+7UZ=>P!)^22||KmS$!{Ac;a@cR$YT8L7JY6c`57{N{g2q3VN{s9Bw7X!l|paf9r z=TC&I7$7zP9Rm!dKY#u(FaQJ)NCWfVKmVWoW?%y` zm}dTA_#*kA1?Z>0QqoLZAnySq0pv->KTM2<4My5DUW>hHBSpkmCRUfavf4zkmMxWn=;={POe9 zpZ~vq|NHajABg<@_xGlmn*aic1*nOE;s2AbPk~B-;NSn>+$?|p{{I~>&N%tu*Drs5 zfBO0B*Z*HY)v`RYKsx~fhzW>+Cjb5S_s>6&>Le+qufKnBv&bF%YWVBlABO)w3uGC7 z{rLq%Ks`WL0R#{e(EPs)fB*akI^_5N|9=)g|N8#t9~WuY61}otf4Tqs`!(tD7m$X( zzkdG%X#fZyCZKPCW&?Et`7z=QS^~DI8Yx-=nhgK{7whGvYgWDg!B8&G1k~{7FHk81 zKmY(S0M7pd06qXVA~x>%?)v`v$?y7WENVL!I|c#<=Jn<;5-<%03=swpg4MkH|N9RH z59P$=0*D2u3CIB%01Ag+CC5rQSvY_G`T70NcNRvLcR${}{{9+hIZ*cRKadRo0R++j zv0Gk5I)>DQ+oULEUYSww-@{VeP#&z`*?j4i%tcfB<3v#u_k;CAlSmszIWE zes6rZ@!!9HKqG(r{Q)GE1e8GG4GeUkhF=T-0mR5q%E0gm7LmVTk@^EErhg$tKMw;y afB^u%K|axUkwLit0000IqP)p`2X)eQ1zd`|Kz0p8A$%R z`bTZnZKVTj3KfeK`2Ky*5B&e@&)?sFfZ#7s13&;VG5q=W=RZg_5SU54z5Mv&imk%` z|FW?#NF2HHZpKX|PKHOnfBpIO`|qDW|9~0*0*DFdzkh#$Hv9ux`j_+Xe->2}ZC)XM zHV0!dKPS0Ur}$Y}|Nr_6wBa96o`K;HKmdVl_zUt7(16dMgtTSeTz>rQ?Z?ko?mjsC zklD%d+V79-zd^=BZ2$-$7GT%`Z2%eY=kMmT9MVkp=Y%mFes6g9+4CZ|=Y~?>`*tz_ z9Sja7kOqJN0yzojravHW{k?SeQ|&okK5=fKkARLe6n%c?uEf?;0ubZ>f;9XA2p|@Q zU%!CHiwJW41sn7GB}e}J|9v$?qW1mmH(Bw2pdk4RbO%twKY##YWMEE2jz}>2 jgG53Y5Cqh~01#jRFwa04;J&RL00000NkvXXu0mjf4K^ZQ diff --git a/source/masterserver/flags/mq.png b/source/masterserver/flags/mq.png deleted file mode 100644 index 010143b3867f21e7791b8254e806b325c13b2895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x9_P)$g8u&g1qF5h0Q6aJN-{1Mbz`Ie0O|k$ z{sM@ZfzzR@(T$Ir&B098+eukMUeMl2+1^x^fq~&CAE%jZ{^O4ipMU-bgNM&P{`mQajg9%ivrm#DT>t+4XJGgP z5I`&pzyAFG^Do#{Ra%^vg_(hwneqG2-w+MozW@IH=Wj)-86P+6=Wo9l8G*Kb0|+3- z*{jc+=}JF+`H7W<>HmKQUT#*P1{)(8poaY?9|3*x^4(W97N$Rc|4EDS&R=&5Ab=SE z{{73y$Ox4F`Rgyx2o@H`|EK_{=f}^#%*+g|tSlctd;ka_mU(L~nd(ak@UpY9GCq0n z(2rN05Jg0{{a96b$W_S@ACL(Rxa}M z`G=gy|Nj54lTiQv|3YG^`}+MH7z}h_G^4TA+~V=RqI&{}iQ&&bpkF?J{dw&CQ*JI+ z5dlsHn4|vw{rBhJzZb8+p1k+fF;B_XE! z42<9q0s8Xa-+!garV_&3Uw`~!Vgv;%KmY+HvKbgYfiyF)F);jMVE6!x-Ip&{0DU4U p=>-f&1_my$6wo1$fFwYG0RX)13*@;vt7rfK002ovPDHLkV1lt{Hh%yB diff --git a/source/masterserver/flags/mr.png b/source/masterserver/flags/mr.png deleted file mode 100644 index 319546b100864f32c26f29b54b87fe1aee73af21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)rBb0vs`uywH-=91j zzd+y*NDt6q00G1Vbl+cwzkmM!`SbO+m+YTk|9<^u`R%^_m*bXSzgT|#{QE0P`4>nh zQ2ZZA13&;V0loO=-(MgHX#3gMzn3`u{`KzHucyC$Kl}CT<*&8wzt6n|ss8o%*Pp+C zfTjZk5DUl#p#T2<`NjV0^vyqym4EMy|26&E??3;3WoiC?{O#A4)4zWSfZPMI0U&@t z8bCe+8UPFj-d`E(e|zZv%GLeN@c(z$rC;+8f>rHtN0D&|BIS>OtI{AOC zx$tZGDUcCBkzc|7XAeyp!)#=hy@sHz%Z8Nmi!G71?uGb{rk^vkcEsO8W!D1Ad0T=%Vj%gtVfB*vk>3V2g53(}_00000NkvXX Hu0mjfpCtxQ diff --git a/source/masterserver/flags/ms.png b/source/masterserver/flags/ms.png deleted file mode 100644 index d4cbb433d8f9fe49f06585dc46ee15593e3e621c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)w!6%f1G{My^>{rmp(`~Up={s8&+{Qm#<{R63-jRF8M0M7pe zp74|h+7SfEy9M#{{`U3;5)b(M0y+2j#`QMv`vWF8IQ;$o{QUp?{QmLR&;S7V0*Gk~ zkHv3!H5OU9Kb*Y(q-ELEH9vC;U*%N({+r?VuV26a{F4-VqagC^H&EN}zd$De1Q633 zj~FHafsLPJA96}RV-#A)X~v?X^MOAye@1K9u&05Jg0{{zeC zH7h(V@9+2F_Xpti2mAc}=j!&)<^S{h0sZ;_Q7ob~2($C-{v8Cq(%>lF*}4LV2^e-j zV}AbzqQAd@=ogUu2Vs2v^{02G<;{1(|2aQ(EV23Z2N=G800M{wXv^O}|A7VrH9+)$ z7=NG)mcRcxm)QV402KN07wDuv009Kl@CPU%A;t|Pff9c}I{*Fo2PXf3L>PYm|M&kd z6T{yxzy1Ri0|XEw14AS%MzNxQNDQDd27mwq0OfZ^Ej7^!+W-In07*qoM6N<$g6Gg9 AMF0Q* diff --git a/source/masterserver/flags/mt.png b/source/masterserver/flags/mt.png deleted file mode 100644 index 00af94871de66cd0fbf0ca8e46dc436d66e2f713..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)Io>l+&W2PtRx|M&0z2M_*#`0)SN z@BhDl{r~j~sG3n$7H9)N0I@K!uxMy#e*W?mp&AJO{R1fisrv=e1J=Os`!`SnKmf7) z1AD;K%nYO&458rnZ>;h=xCZfJy-Z2&4h30>ylo1|%C8 z!A=4QAQtS#|N9SD2R9xVP=6R000Ic%Boqz*|DhQF2dLpM!{5I^H2?v`f~*=Iag5B& z3^Fndyu3hzLFn&a2m+c75I`Us-n@D94+enNf~Z%o__l08i(?1?2rvLmwOi|Xk;8TX O0000wT1SlAdCl&Y)$gVg>5qW^#Y{{Qp$|KC6V{`~n5M8AIn z$$wxH$UeVm6F>m5>|$VWV&MJy|4IE<4N06-W9 zfN4+=|Nq*iiwn$Q2C&jbT&$=TD3oCSlHOGFpRx(;BY;>KBo9alsWSh04>T2o{{H<9 zq`@}){__Va_~#GM1}QP2gACgN0*LYNU!Z^U|NnpRpWzq7|3Cl#|Nj5~7gmyqN$LIj zQvdWzhA$B4g=Z%5I`U&fgJtk z_g|1x{{H;?U6oxK=&at?J**6@V8K5Oe}Dh~1#%?NbbtT?*#Hy-y7l+}Kff9N{$pgg z_WK6Ie}+7v0!uEdpa1{-Wc>4s0pu$NunhnK1op#kuysJ&8U8Z;`FH#0jm^LQ>Tv2E z__*)izhD3U{sq|pR0FmFAb=oF`osMFS8?ijP~d>v`s?4X6Tl#928Ghke_*>=zWoA* zI8ZS_0I~c5+3<%^Qj!Z4rNibE_6+kRtZU3J46>yw zfWS`r^B2emYGC;Nhw;yEHn21ZK^Q<1%m5k+3<-b$0%`dF7h*inus>j>Kov-;VIf zD*pWek$*v<0SxiK|NjEzfQkVEh>@X`f#DO--wX`DVCWAL;}4AS4@`0~00bBSj-y@M TF2~k{00000NkvXXu0mjf^ET$> diff --git a/source/masterserver/flags/mx.png b/source/masterserver/flags/mx.png deleted file mode 100644 index 5bc58ab3e3552b74d990d28a0f500e9eb6209dfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmV-E0>S->P)LFc1LT4cKmY-iGBrkbGB7ay`}g

Nzrc?B z!}RAj&|v@p#KiFL&)@$*g@6D2{reke@BjagZ=QH_|HA5tt#{7v1Ul>guV4Ru|Ni&u z_rKqNfHnXG5DUYvUm)ZE{sF26>H%tC6A=5t#K$G4Eg-G_A87rbKVS#^0WyF#00a;d z1Ca3#WHt~1jRI=eclPL04k1AU{avRH{sTG*Y{UOQAO!R;KmY+XFaVtnvEdic(+vNe zOr8IIc?-17*~$Z`|L?Eg|G`fB4^+g!01!YxCouq>54Pd=FQ6a({TC7tjr5F#2GXxz z|3N{=01TJ^fBykB00a<7!|#88#Ce2)8ovGh$;ikEv=>5x7)(s8a diff --git a/source/masterserver/flags/my.png b/source/masterserver/flags/my.png deleted file mode 100644 index 9034cbab2c02704b65fba6ecc4a7a1c1d053b6c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P)Z-xKO+5@Bcl`=5c~|G$6#Vc^TNX8-{JF#yj01a@w+002>mTdm0Dxpa1{C#)An)W@eTA0)PNwiNI_f1h_u_DTrb&+z}xv;{Wj zFGj0Cgf$G002ov JPDHLkV1gu%1+M@A diff --git a/source/masterserver/flags/mz.png b/source/masterserver/flags/mz.png deleted file mode 100644 index 76405e063d43f2f3b5b9cae4f76d9f1c73cea25b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NB%P)d!0?ZO;SY>NM!#Sr3j;s^4&s;y01$=&U~zyG1R{bN8&$-J2AZUB z{O~2s*67}BSLujJh!l{(TM_&V!SLx<0I@JIFetqFAHVYHe9OP56#xDPD){#oDEIpx z82$bI>))?me}4fPvfQ#j8vp_bq~ZU+|9p&pvv&RstuJJil>ZL~|9}umff)b({bONa zxh{1bAb?oDF)-ZV`m5;k=ljw>l6BpeezVN}{rlPPKR~N~|N8X{NCKH4>bI<%?516t z00M{!=o3jd#=5m)yzyNB8Nca#eH--U&Fe3(f#?+keR}os(@P+F`}Hl*IRF8~0t}ng zTmN>%etWlrgX7)b6MtD}{$cp_8-#v?7>pqD50GU3{f7;x0U&@Fe=;yIS7rUbaG!zu z&%cJ+j{>}Z{{3SByBg&1|Nj_3~Dr2e;Gh>zZrofD5`!lF#Z7{ z2B7#~hM#}`y~Cfd!0!j9&~4{}>qlfDw=_GI6Spo7yiaSL1(R34j0qF#yj00RRApetkm@ z3-<^I`04Bn_xS?+{Qmv@{`~y?GBy}bOB@O2-v*J4|MK+z`}_2=vH}QbDjOT??*y+^ z9PHma=D0k1DE9l$Z%$6;=mbqObq>D1hX4By|NHgp|L;GHwRPtz;{gH)sDXiz;U6Qz zZ)V2dKoY20MNK$ASA+NcQ;z)f|Igq2|MmO7w9@DL!aL%O?v>U60R+_W>(dw3rWqbw zY+vs`7YYhj_p}$}TRP+a`c40T|N0L!J1pWwjPJac>kgmX!|;RwAb@}x{`~&)@5xJE z5fO>bZXLnj?>WlS|KEEGbn$;~p|4%Vx0QJ+&gI^Ic|%b^5f~5v0R*z)@87>RPSSB9 z(mdPNGA>^D|K~4|Gn`ysXGCuKcCvq8=a*k!egj?m?>8{m00Ic8fvd1cUx@iTXM5HE z^H)FyGjo2eEq-FG+;YA1)Puvn7=8hj{`vO@7;-=x00M~R?)3!82NxK-n*V?K1yZeJ z{HiGaByR2;1J+usHUNMy48Q{FH!M8N)Pwp9Y)wTFo81A^+}-HTA|tp~ zO4-IyLWKVGUAVv#KrFzpU^vb8&*4vW%&*_Sfp-5+Oa#jR{(FIy5oqwQKVTa`BqPut z3=9AP#KLU;d%N^MnR|>Uj{MoN{TEQv&!4|iQhqnS=35v13ux)DKYxDz{qyJVA7#|2T diff --git a/source/masterserver/flags/ne.png b/source/masterserver/flags/ne.png deleted file mode 100644 index d85f424f38da0678471ef4b3dc697675118bc7e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)pTI(!tjlO;rIXl@1HV&)cpmDGW-GR z`3+L^2aNvy`v2$G|KGnEMPz|W00M~d>&=s#l8OvKbwEpiHvESG2>tK>|GyyO9|$ut zvpzk42q1u17-V!9I61+pfvQ08|BZwH@16Yr=jVTUlmA*S|6zcEk@1g`6+i&7`~&$E zYA%%V^7j8zTmS$3{hyirzos*?2B2bq00L=%yMh7Y5+V8jy0-s+|NJkm_8$o_f}Hjb zAb?n|yt|^zto-ZmuYW+t0)q+&<<KJ>BgrQT zRQ>1Q-#;J~AoS`6pHRCwBA zU~p!DquG0BzkdJv^XJbWKYo1u_VxSs@1MSW+P$@#L70Jomw|zm0SEvBhy{qNbE|>m zzkmO1v}^=;1(+C_zx@3C{m*wPUMbGM98Q`}5v}3B|NZ&>_xGmUO#lG|(!jv*|H=EO zfB*gc{`33)|Nj{n|Mza|{r>BFYe?(AfB!%K_3?Y%L>Z^l>!7{V2qIffI$#e zz5f4~?wt{_jNwA=k=tvV8m;04hxH1ClNsp|jaD0d_yUND;Sa;#|9^ps{`~n3bQJ?5 z!?D}Pp1*tk?A@~oJ0>vvX8@W7)C|%C)&LMdARGSt{R`y$`S<5P0|@TEy!-p_?>~S2 z1lj|1A`hhCuT1`^U1^@yK06yzfAV)~#?EnA(07*qoM6N<$f^cITh5!Hn diff --git a/source/masterserver/flags/ng.png b/source/masterserver/flags/ng.png deleted file mode 100644 index 3eea2e020756c41abf81f765659a864c174f89db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)E-@kt#fq(zr{dlL|rVbPb$^K$sU||3VAQpx%4ArjH z5b1ya|A`BUvomopF#HDspdkBi_LzW}KMcQr|NHa%@9#}BHvt3?3s4hK`pMU)fB*dj z0+88E|KR{Ac>Ck+U;lpn{`Xs!M;2%gKmf4-G0FZ zKmdWv|I6_A&;LJv{(%shYM_N64Szv401;3FKmf4-Jp?oxsQb@fum%PU8~*%)I0>i# zs2CuCKpOsn%?64Bg>X9QKhy?*00Lh)xZD#`v33$e!wuw~|G$AI0?h>~ z1_&UqlR!#;Ll9OQ{s1-n2ZahyF+c#Z0Amdp#**BUAaDHn%gD$G3dPzV3};X@Gl13bFaQJ? Y0MmSSAW;3b&Hw-a07*qoM6N<$g7#LQDb&XuwlP!fzJKM z`1`}(|Np-K;|B=>MS!;cWf13KY+LvSAb?md?)rCHn)&`aU^p;VI>1V00D#b-){yc34R8!1Sqb680000@|4`Xj5kLTv#?55wQzKoX38|NjLffBpXj6#2y{D-E;(Ab?mHL=FGT z$TP6>fK>na1GWK({(upf0nrSU5*Gz(00%w4e}91F-@gjtJbOE500a;V!?RECzy5mt@dro_q~YJM-#~SLe}OeX zNT7y4|NilCvNABd0|+1%hF>6clER!2lYo}|1|zVkK=SXOfB*mf{rC6ZKVbL)odgg- vjKFAPVE6?_e~=h|kVO7~qZmRm0R$KTYszPUy89K;00000NkvXXu0mjfB$dbi diff --git a/source/masterserver/flags/no.png b/source/masterserver/flags/no.png deleted file mode 100644 index 160b6b5b79db15e623fa55e5774e5d160b933180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)O=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d00KAO>U2WB)$@6+CBT{3ok>^7H@y{~6FRKmalQ{r8#S z4^Xx6Je&%q%J2@E@iKAb=Rv<(vO+e^|@#56B5{*~0Mg z>UitA{$OPI`~Tk`F#7!u z%=q{3H<BYX7n!%ts-g52=?&#%8AHvnDo=g*(t zU{@(f3Lcro01!Y-3_uV4{%5PNloM>zp5gQNALI8Qf4=|z|KsPsAHV+n`1$wy&wt;4 zfzU5-=mP{0FqD1)U3&iJ)0b~Q-+l7x$B&=CVSxxV`w!S3U{3%6(9;Y60R+_W0~jFx z85t(6Ir{$dcL`zMKcF!E2U7}WK$QOlX#fZyMg|5;)aZo7D4hMD0TloQ7ytwk}@P)zKX@%&%DST%gMqDF&nJ<9}^SM9e)7=i1G97Xij+!pc8>s z0}TKw06GH{9{>J;c@WiqflO8wrXNp!0t65X1H*raF>uuoM}q1_&UQ zzyE+PV}l7nR6|1@Xe}f}K_mmn5Fh~%KtLN9K+(a>4Du5*FzA2|{m;zE0Q4slD+}03 zKxJTefLQ+k0*D1@+|Oq}Kt_TL2e}yHXa<;L{(_vY&wh05Jg0 z{{*4}t^?F62l4F%@9_Wk_yrLV`1}4n_xiEzG57obO$p>A_3H5V5SZl@9UBk;0Q>>~ zF#yj00jE58tx;oDUfVAO7ZA^g)(IQ}Y8G-;ZB^s|2r!a55}@Ef&J{K=uDyPxdE3 z4FCZEF#yj011R$m=m{0X((d>7`QGgNy~*X%==~K4{m|+BO$p;F|LeE!5zX@o6aMwK z|0Cnry8?)1@m-dDW`RF^3@85Z{`vj)H~*iTuYX^D_V?HC|LG63e*OOQ`}ZH9+h%{4 zR^kLX2_S%&fc^l6#;?EsK&pTL{q^hL&)-1T|AVLlN&WsC!*d@f`}fa3pay^dVgYLS z^XKpHUw?lCNw6Z2x?f-t$o}(Zg7`(je_wy{{yg~C5U2qlfPfml0Rvc4oChck)CmlD zkWL^2sNoMV9{$c|wex0wa`2z{-@pGE82$nT5F-OaFayIEq`3SAj@n=l%a5DE9w9oI(Q6o;?Ey zAdrT?A3yTg*!;YE_t&FGSk*xQBO~LVKYsuMhzTgoEGG70+cq{OrGLMF<5CR)KqmnN z5F^kJDrIFqfoA{t^Z)mszkh!J|NR@N^WQHZ-f!>?ZqK&!y&{zFIzP0wn(b{R37FH0BS}Z;-(ZzkW0R z`o;JgO8$qifBy!003d+C8bA*C^$+NzU%!${e*gOW>-S%fvmgwhvw&=%Tb23#oNZ?S z2p~`>{R0^fayL*XP!U2MkOb-c1#;`ZzkmMzW%$Pc5I_(c{;*0)g6#S8SB49$^)FDx zACSQydx0wd{{073{+Hno13&;Vu4Mp{AoLGRCWbOF`~tJSfrb9TxDaUu27mwq0KDvZ UcsT?Vy#N3J07*qoM6N<$f`X&bC;$Ke diff --git a/source/masterserver/flags/pa.png b/source/masterserver/flags/pa.png deleted file mode 100644 index 9b2ee9a780955566cc7dc2f59ce175f32d3731a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)|lVPPN>g8sl5Km-s#EI@faK0YA%?%RKmGG2!N|AD;!zX}Teef|3X z_wWCI{=muCn>GOi5DUcMXP^GBIsf;|&;M~|Oj3M||NsC0d;h_|&!7JP`u*?sum8V( z0aY`}$^xwd2q2IKptK|}gRT_Am!FIf)j$AI2PS_*H2ec11_potVu8EfUYUvEKf`}G z`1lE^`X5*+Sm$r%-@k!200a<=Rv$}~=bu-f|Ns5_|IfewfBrH6Nrpdvs+^pde*a>f6qSrfAZn~Z?Fa+2||AuS*t4lqXH%-ra!^K00G3r z@ax~7e+)2nAoSxWko^y??$?YNza~t8coi7j009Kl08{<<|1U847wF+XP}P60U;n*# z@9*{N{$9Nb{(u|?WHSN*&{SqkP0pSkP;|=6L&63i zfEXEE-vV95@Z%rDuRkCLl>P7efnPxL{(%8d!yj-G00Mvj0{}mHT?%@XEt>!U002ov JPDHLkV1lK4=}rIu diff --git a/source/masterserver/flags/pe.png b/source/masterserver/flags/pe.png deleted file mode 100644 index 62a04977fb2b29b96d01ffef3b88b6bf2ff05862..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmV;80doF{P)@|A6@UbB2E)`X3x9D*gjYK@dOyv49j-R|ARv|Nb!om5Pi12buAo@&A8j1_q}8 z|NqCt{Qv#?|DQiV^2?@8009Kn!0`Y7lcx-S{{qo}h;n3b`}Y4|zksS4Wo3aj00a;V z*zEsM)xUqEs|Es~YOn@|-@kzx00M{wh#7&Zfj0j6!|?mhe@uX+0cadR0D+zK=P$&S z1T_5l12i2VfWS`r`v>f&U-&gJf}I2qKwu{UjsNuvF#Z0+ASnqp<}V}$85tQ7(W#^a2}2+PDh3E3#;-`R r2#VqJ=b;e{^dbb<+Crtk03g5s0zF}bJ8sS=00000NkvXXu0mjfKVzU% diff --git a/source/masterserver/flags/pf.png b/source/masterserver/flags/pf.png deleted file mode 100644 index 771a0f652254b4e891fc73910aab38967864da54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmV3lobsI zohi_A`bB&J!~)dH$ngL7lczwX3_#UDxxarw>LBRX?|;94{rmL`$Yzn1{l&ll5I~Ht zU%nI;6$RPw9|VBf|1(_vbYnFmA3K-0+yDOt{~_StKSoBzkDopP1Q63dnCt(82%zd$ zpFb}6I_2!oo##J&nDhVtbEpQW0tSEpVuGrMivIupee<8UpWZS`Uj1hH_v_am-&g;K z1CTfW0R#{WvT7jw$rQ2Wy6P|4+kZd)xq2}(*g=aGrk)Yxu73al#Db(Bq?4D0-N;b? z5G()RfB&pB<@s4TkY)e;`2!F@EcYcO{->q=ymt>64xqsK^^5b@FIO-F$h{9?`~e2* zUv?FhqZcm%1P~}#|Nj2NBq_=8`#0mCzd$+0-@loGnqiRuWPl>)F9-k?0|XG`aR!E8 ou!#JF#Q1|6-w+1S#{dBa0Kx%7Vg$%BF8}}l07*qoM6N<$g2}Akn*aa+ diff --git a/source/masterserver/flags/pg.png b/source/masterserver/flags/pg.png deleted file mode 100644 index 10d6233496c10e52ead975c5a504459fad68ffb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0Hv=@BjaQ|F{1AU+wpQ{$Kys{`!CTH>0fVKL!SX0Ad1a`1cQJ=-<7ptZmH9SAnX3 z{Q_yQ`~BbL*ME+m|K)!Dcl`DLKS&U$0U&@t8vg$M`{&P}#F!W*N5{%vzvln`{r&f^ z{||ospYrSf)?fc0{rZ3A*Z(w-2B2bq00L=XVPVP4%$zZO`i8aZ($dmav$E#>{B`Z@ zum6{R{h$5&|A}A!9e(}a_zUO_pbY>4IGm#s06-9cg3a4XeYH!D;D>_*`V5R3;NTtr z%*@^Mq=>M$LXVh`5jChqDeaf800L?F_U+sH_3M8E<^KOyQ&ao$p diff --git a/source/masterserver/flags/ph.png b/source/masterserver/flags/ph.png deleted file mode 100644 index b89e15935d9daf25173f89a36d8111824fda5db5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FXQP)N~0_Y@w0Al+04@f;`V3_{@|8#9F=K6XQ9UY*azdwKd1Cc)=8bAo50U&@_7#Kb? zFg*PK|H1$NTnr5Nxw#FRn^&xvtbK0f`#-;cuKxpc)t_H~fDExeq6ZmH0|XFI1NZ;` zGXMXp{AUnj_^>}zDz4B$`$1}#7U0X2MOU=aELU!7sY=Kr&1{QvMCSsj$|2dLpM12Fg)7ytqY zsKMy}yX6c^FZ@4woIyZ63`(G)I*8l(j07*qoM6N<$f~Z~XumAu6 diff --git a/source/masterserver/flags/pk.png b/source/masterserver/flags/pk.png deleted file mode 100644 index e9df70ca4d63a979e6bcea2399263c081ce5eaeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)`{xe>ko^7oADI06=l8$gn`UeR2p|@S@&Et-|M&0Ts{jIsi2(+HrUEqpC9EW^)CAOaJl^^9-%lBC8BHP081)#ChQGgo zHUI<=3(zGH+B`^Tu)Z%{q{PpYS&%;j+KluCr=pK*_e;5D)h=t+bKO_wx|Lu6N(?HnJ zN6`lu;-7zgR^V0GaA(7wCwqWF2h;!%KrH_l5Kj8_?>EpHKuhXR);;uSzaAK9KY#yZW@T0p zQ2G1+FVF^n0AhUp{`o&J`0?k5YKbbt8;l4>j(9ExfB*vkhsr>Vq>*li00000NkvXX Hu0mjfu=^7c diff --git a/source/masterserver/flags/pl.png b/source/masterserver/flags/pl.png deleted file mode 100644 index d413d010b5b097c4e0a4604eba86dad79567ed16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmV-+0g3*JP)Ab?mv3iQ8Nu5A{|6C_|Nk>HFfjc`0biay0|+1% z2B@O{$c+Ek03##gzdwHf0*Hl3)etG5lK=vU1?W~rxN0!OqXDP`Ab?mH`1u+7`u;zA z_W#cxhChG)!_n{G|9=A+zrl>(AX#bYe+w4^1Q6Is4VEzI_51&? zUm!LT$@u9L&^Z7B1a=Zw2xL66B2?87%l|Mi00a<712fnG3~)u5+Wr7F{AKw27w8;- z00L=X`u&GNQW9*;Uxq&*os3{386YGO{rw9;K*az7#P}5)xp2gQ%0-g`0)PMm0MPYZ UsK>Njp#T5?07*qoM6N<$g4HXSwg3PC diff --git a/source/masterserver/flags/pm.png b/source/masterserver/flags/pm.png deleted file mode 100644 index ba91d2c7a0de26e554979f6351d42a1a4e22de3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 689 zcmV;i0#5yjP)#D@XkmAv!xDMMW8-mEZ&mK%|%B2@pa*J{pUD?(_ahBqlG}*TVt; zF#yj00{;H~{{a8``T70x^5Ww5-{JLFN2dS#-{Io#@$TjE?&8zZ_V@JO>E`A8`2YX_ z`~rx{;oS`3$G61pUY_{!-0$E2{{CbX;QPSJ^3BEStfg-V`n;-q6+;t+Xyw zOy)sS^8$#8OF-b~@87@v{bTs||L?z_Zq~=&zGIaZd&b4_{m<{;|Ns5^`sL5xKflEU zUjXHSP67x3F#yj01nBVe84eEr00I90|NZ{}FelkBB-0BC^O2xB85HWz)f)HsDi#s! zMLEolpK<^Iq5=Rh0M7pb=>Px;h=2d#;^FNBZtPGJ5bKP1n*{>+?(qio_5k|){tF25 z`1Sjqtv%A&PR-7P0st`p&i?}b008M5=kFQg|M&R&{r=?U4x6PnhWa{`B$w z?CApk{rU?E^8f<&008;|hy@rKe}6M^a>=kt2+9et{QJXr>zQ5ua`W#$8JQS={rbi5 z^Ctr{)6XBj7@3%V17i>%fEb@MFnj<<;{gVSbOv{z8Q{qN1r~!u@ISB;HgNQF0R$KT X>6#2<48ze<00000NkvXXu0mjf$fQr4 diff --git a/source/masterserver/flags/pn.png b/source/masterserver/flags/pn.png deleted file mode 100644 index aa9344f575bc92f4c1a5043e6e7d0a8b239daa64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmV;C0&e|@P)$VEDzr@CQtS7ytnPF#yj0 z0a0(~eP|Fd7x&oU`XvhO+V>M05dgm54eRCe)!y3s`vCp^_5Az)`uqj_{QRhrlmY-T z0M7pd#W4OILofm6?eh2PFCO>E*7Xbx0@lgN z0st`p&i?}F01o{F1pxvB0QdR->g@pe`}O_>?Enew{R9F2_ajBO3l7@{2K78Gz9u`z z008^~05Jg0{{!Vds4FN77!dx<`5YAi^1B#F4D8&$5I)oT72fOU?&Jm;1k~m5*82ws z?b$fe$;$!&F#yj01PbEP9OVUy$0!>9?*iHF&;9=9{2wXIjNS}D{P+g={1WdM4-6DF z>gCe?_5uI^`T_tk0M7per>)2uHb&;=(#87${QNQl(a`kw{Py}Y1nctu{`UwC>ihis z2n-DS{QU(1_5c9-0*DC|aR2`P{`;Tl?{DV6zkmJy$H?%Xjq&fFKfk|zXRCbma58?r#f z00G1Tv;`<3F2eQa&)+|P|NZ&>@AqGj(m#Ly0)zk56?XydpHmj-@bfY4J_0oTA3y*x rGBBhgM-@1KAF z|M~a-&+mVKfs8*8^zZj?AObQ@tXl^VK#U9w|7)um9zFT5!1JoGnu}M2{r|uJ|AC@F z;y(;9F@d=M{=L6-3m|})KsNsS&&$bh^PO0375Ag3EPt6;7?_!X=sz3*^#j#0Gyh{@ z0SF+Vlm3Z`F-Ar(?BDbM+y#c5od5B%>y$nn=KcNZ|L>nr$AC#T8JS}%RsaMLPy>UR z34^BAe{Qb-hmSD)`~82~jewZHH;sOtVgB{~2T_Lx z^M7~ue_6TzObGu%0nl7VM#g8?t^ouP$PYjMFazDG!uzbThlgL98zlelKgeJZ;~z*Z zSPxJG!?$k$0R+;(`ulr=6P)M00|Ni~>`!`VeZ#eh`fLE8Q){QmQQ=eGY$|NqCtU}^v=1iBd@fS3^8`SJ7r@8ADF ze*C{^(f_{w|JZZ@y#o+HED**2KY#i6{~yEeU;qEJ{Pzp|pOucqNnlF=0*DFdB%s0n ze*I+l{{11(um4^iSXF}z{SS2YKY#!N`GNV*AE2Jys=p_Au>JnK{@0e3zk%WO_xG>A zzkdJw^XDIk{pa6bWqzfjEk^+Y2&CaX+n+VzlIN6JC4s^J?+-}zKcEU=eEj+Q{|`_P zFrfeb|NHmfUxq&n00G3<$-qz^$iN`P!0-!({va{_z!?9)Bm)CLfB^vHpj0t%_B3$- O0000op82)aAGO;3n0AgYI#891D4N?IF|Ns4E{L7&Dm*MXp#y@|U|NLS4 z{rmr)KmTFmmra`h0*Hly38?u0llM=#nEx6H|J4!x{U`A6pVzdvv{Rd?JIrI9L zs`Fos+0`Q4a^C}Q0+k5A1KaQ$>Lf<6lK=vUh2aka(D+|}f9<^YM_B9kC$A?0Z|}3+ z`ptao7t>dSY6f5^0o~2O01!YR8-T_G^}PA>yZ7X8cHUpx=KlJ_{+sC?ST#h$AD{+c zSpNn30U&@_7``$5{_{tYU-I{#-$2g*Lz_YNHw#c5FVJd`!65YaF9ZRd1Q0-s48{x$ s?-&?Px# diff --git a/source/masterserver/flags/pw.png b/source/masterserver/flags/pw.png deleted file mode 100644 index 6178b254a5dd2d91eeaa2a2adf124b6dba0af27f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmV+>0@?kEP)~nkZ zGRMDC%7~XK0S0Tx8Wd7-QG59jKr9SQAk|O4{{Q=*0jSzY^rW5C9>)KFc0aM(`^fh9 z|Np=Kfe=u&EDs~YzkdJ$!~!z=-~YcrJO42FE6xsAYGq`2_Mbt_P-yG_e|4Mhx&31J z|LZSE!|%TgKvw|-5ED@OU$BE2n0|Z9O=M(v1mpqrFfl%gR9?uy{Oi{rkOq*RfB%6# z1PCA|pp${Bfd()#{N!P|4fj41<69Aq$E=K>;Tryc4F(7xpbZRv|AD;q^*8I6-->Vz zfB*5n`o{nM2Peo6f5F}W+3*h_fS7<7;^vxc*?8?`g7w0kCk@cHxaHDByoH$n$~K0fYN5BQR!wAqjL2Kmai^lz(OTgcO%Q oK%!9YKcr{|u^AZn7ytqc0H_5zuk@Q*SpWb407*qoM6N<$f;OS^T>t<8 diff --git a/source/masterserver/flags/py.png b/source/masterserver/flags/py.png deleted file mode 100644 index cb8723c06408828ce68a932ff472daabecc64139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmV;~0Ve*5P)@|4`Xj5kLT%`al?B=W5I`&pU%&omV`KRD53KJ$2txq_ zg7fbmh|k3I@68*40Al&@kBy(1nSq%Zss!k?M~{APS@-YvZ#JJG201x|0gQ}qez5@r z5EI0wa6>`h%cteq@9Mue|Ns2{KQdro`19u4 z9*F+^0|+3-w;#WAv9bOIX#?r_2Xj8qX@CF21pWab0}C_Lljko10*H}8@M3d^)Z>@G zf!6*0!vH4#gGo5!|DS*V{{HzdC&9L6!fAj26p=v+03Zy*=I{f8|9_}7o838uP_pBd z=z9{Sra^iHOE|+IC{ z-`~G~{{ZRVfB*dX11A6d`CYbrEkFRVK#Yg0UeQ$d`q2ZhA|Uz&)bIy{egR1#X&Imb zfB<4bR{ihazwp{dkXn!mkfPsU#_wMs1hfID1|Wb~;Esc6TU=EJGWFLlunkbN!Q9_} zL0)432p}e)sSwo=4bd$f5a~a^fBpd(3|0LbOac`E1P}{Q!+)sq|NsB}pI=e{a>g%& z)4?|U{s;0mNCQ9sG5v!Z57O~Jp}QY!5N0Be0)lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&Zji7_t0d_@@ozArL?Su`s;*Q{AKpRQ~TD44PX+*q00taD0I@Lq1k(S2nt`tR{g)9*1H=ZfhCe_Je;NM%1^NLXfPkU&2dGq1gcanC zzsyWb(hLmW7#V^70~+_6f#nZ_(jSmgFakOWAb=Pd7`8Gn`~pjZT=;x%FbfOAzdzu3 l1(F{a{)I#17yR-T)##NTdjqb^wzQ(`1@?t)Ix4MUXz556teM9A7Ic zq_@itH|pv>q+zrjZJ^Hx5bj=fD{5McI3ol<@^-l_@~tZGV7p>1CU&qG~{YccyC-q z$8~P)6sG{nMmQy85K$E6L33rja$x-b9$ diff --git a/source/masterserver/flags/ru.png b/source/masterserver/flags/ru.png deleted file mode 100644 index 47da4214fd9edb383687c1d4f84fe8b42a51ceb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)X|NRSO0LlM<{-BURBqYRGSojej zfLOL~|EH_V_~;P>Nc10*D0|Jxss< zFi1)Q<$$6LU}rIc*dU*QNFV}+9T))>0|XG`SD?F)5CbX~O$rDA0t^5@iDe$xIAIn5 O0000N_~0!B1ZtR02zJmAl3i>|Nr}+@!x-t zvcLa8?7#n*fB$3p|L;$z$Rx)9zm`4EX`B2HAb?mPX21FhQ~^@@2dMNf!=L~E|NQ+A zWdHd6KUK1c=hsc9f8Rnyezh^=0R#{e(Ek5GMIci_s{j0D`2GL?@4p}ozrlKzzsUIh zhw0@n(cNzYfer%*AeP_1{{8vS`0Fp&84w#lmi+$#)ARI~X!Y&+KyeWsW`<9n00M~d z^G^m==F0#79{mS71ZX;t`~_q%fY`tPf!Mzw;*3o4FJA8j2p|?NkT1UdXZrG=;TOYy zh@M|qNhT&CJ~jq`0Ac}pl#vl6#K7 zFA)9u_3syi0VMzY2QmHtx&Qtu@&7&0&HxaAAvs6^7=(cU7?W7&6Z-$piRe`dyDK`^ zN$WO$zWL=wEu!PO?Vu9@iVSM&8cWvf2p~p=WCn&G3_$lI&>tl77dYY}Tp)vm0U*Et X__=7oxWDB`00000NkvXXu0mjfV`BRN diff --git a/source/masterserver/flags/sa.png b/source/masterserver/flags/sa.png deleted file mode 100644 index b4641c7e8b0dd79aafaa73babdb525d3d2dc6a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(eDP)4!1u&@QJ10&`rk^HbMk8Ee|uIe&H zS+;4$DbWCt7$DsBz5oJg0IGiW@flDZ69W^F_wDDmUw?kFvatRB^XvPsAO9KtfBpI8 z%a6}8Lb5=`00G1TbjJVx|9}4ZVWnuJEUfzZ$EVZx<$*voWzTGcp~$d(=+V{_?X+ z3y#kPS_RYq5I`UeU<=TsD9Bk~@o?qi&=DPd(?v86a{(`&&3I*E&g8|Wo?Sn;v*0j086Wc~d66UYT>00&^E24DBZ$$%)DV9SRUYEY{Wn z85tspN%!Z^Q&_X+!-^Gee*b1;`1hkUW~HJ2(d(c7|`w2)m##KhU^#|s1eh2YzMVW-Z(;)C{QJl7?-Rp6DTaSP8U8UK5I_L2Ffe?nu66~hU^Xzg zV`^IR|NmbGhChsd{xGln!xZ`Z|DQkqe?!SHn>GOi5KsdU{eSZ0I}_6%bMu4$|G#2j z_zP0e_xu0e-~WI8{{Q>e|6jj=B8;-KKpOx8hy`TyKZd`5nT(9?%F2RO|M~TQ@}K{E zz)C@?e?v4d{QeEp01!YxcLP=bXJGj0<#nFn|DXSVfvSK1-v%}nhwkOu|GvKejg0<-0ptJwK&1cy1oE`H<`Z?5M+~$7{9gq& zn~(3mv&(;P@Bi|05T(EW{(k!9>4UEid{_Ab1OPDr&i@1e0Q5gX)c>UW0I2)_6d3&w~i*%}NQ0G05Jg0{{#gAwk6j%|K36Wcrx-Z zDBuV5-R-~I;@8;l*yr}=_xShx{`~y_{Td7!{r>#`1^@zxvDKIVAJ?B1c2ZXvZZlkB uU;qZ}2Vg*eW0eWa_yywvNgf7(00RJ0?>)A@UfIF`0000`tbb&P~tyW8d(D~GxMiUp8x`gh2bB=pZ|ZjUUI!&{yK1G;4d%$ zIuA;MS%3cg{`2Rrii*m`ix&X`h=t(`1IH^)u0vdsLXv;@{sQG7;18Jf2Mqqg05F6A i0*HaZmVqPy5MTgGElxU<64PS<0000a|fPuet^$h(7pHv_{jfB<3vn*8q{15ov!pR5qo|Ns4BVf^v!57RHO zo?l?}`yWs<(7C?=0*LYNK?X*pGKOD3v;Q#s|MUOfZxH$qCjb2cBQWFtZ$@_cPkRpn z1P}|u9|n-AAQdnT|9?TXAyk7H4FCQBl>h_~&`AvcLF)bhMS(&{8jwh^2qVzve;5D) zh>=0RIIAq+{+o}$pxEl(3%2T)`P!1-fBt~{@Pp~sA7J?W`}60ovKZgl)=2;X#KQ37 z&mWM7{{H^+4`$e}UqIEMAo>Rk|KALM|1kdh!vsX^3=B^I0*D0|DL|!?{M^6*VPKPH z00z{*-?BnHps)wJ`QKllIe-8D1EGJQNCgNWMh3}bctpOPvlbWzK!=K^+cJPc;};D5 g19O2S13-WQ0NlBGh$rR(5C8xG07*qoM6N<$f_QiWUjP6A diff --git a/source/masterserver/flags/sg.png b/source/masterserver/flags/sg.png deleted file mode 100644 index dd34d6121073fffcb2fcb5b9402b3e6361cded35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1EAP)dtOYis{Le*Dj#JuDs`KNc)tl9OYUmifJZ zA4uJ=-~WIA`uFP>kj*SB3$z3vfIu4l|NYA>FaP8D^M5;ba1<8<4f|GC2UPm+H&ER# zkRGsxe?Y{*01!YRC;dKnkj2`X)zkCW_8s5b+Wvn23^5y|0jv~A0#!5q{{4%A0U&@_ zfL8pya^=_l{r?#l8F+XY{;)G~as30ko(ZTFY%s&0Ka9WsFiJ`S6$1niy`;Hnv5 zfRT}r0R;fL{~@sn5I`&p|Ni}W_wFAQ`~gBVzyJ~jk&qMs5MThRyiZo6SsHx+0000< KMNUMnLSTY6dB!#X diff --git a/source/masterserver/flags/sh.png b/source/masterserver/flags/sh.png deleted file mode 100644 index 4b1d2a29107be96413eb86e64a75ac7a3ba5793d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmYL{Z%9*77>Cd9?woAXO+#E-F%m^1b0Xy*Qky9{B^@hJqB6}jOKKPc70u1CS|Ug( z7>SA^1`5-}4+VvY=3G*k2%(8O!OWTIn!4?td(P>GANugV4?p-l@2B^fCONIbD;IAODX_{rV|BCn_NC>%qlWoHrzH=l|0Y^Rhgkwr%>N3 z(d)FjlCqjgyY4&yRH!;rb)|Z-v~HjxIkvar`*JLyzxBc-B?Ix`3*qGz4q3JAd`#LY+Xw^k(ph!n`d2H7`aI`Eh(LrOLs%9g zj93;8ws%s88WHkIqXqnSf?YSjh=@dF-}4L7dS0HFB@iNj8OY*&4>%Dn8t&*i)aXz6 zSX_wQ?~e=9UcwhrAtAf8XLVoTbE5+<^|-KK=D&>)yX6u!zrPCrbEr|4Yi(XyIGTQI zFEDsraAY{)DhUd*DN;Q?!uSxvkoT|31dF#>2L0DGeRcNZNehm>xm~}-9q?gtV@Qz` zv-lB19|m}3LHcg92}TUOb+%v(0bnUhB(5rQI9?ZY)h~Hw=%2Au&~WB@t;^kVE@F0Y z%=8f1ZN}R1MniiNxkJ!a;3!XFerfimE2A;1XJChGXJ=)MAVRubE8WFo1T(1Cmhdfa ztzC{Qms6asjkstFkFp5L#maeek84Y+NtW^Wf=SRytjpC1=BCX4NH^VxnQ`+YXocAv zR?lKskkKZN7D>{S3>4;4+gPYYq0_5iq@jsB^}M0yMT0|p`lM;R_dwbVrBg^4RRbsq Y$WB%-43-yHbAJTXS^1gPjGK@C0`m$%7XSbN diff --git a/source/masterserver/flags/si.png b/source/masterserver/flags/si.png deleted file mode 100644 index bb1476ff5fe8e0d3af4fc6bd11e513d95fd9cccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmVm9@#;PEzrU@Gx(rNA|FHo^Mn<3|00G3vEO>ZAhtlWIf1*N!=PZ8p<;&lH z{~7-L`S<7dzu$lU0~x=8==VP$LqeQ==EOq)0mSn6{g=m2e$<)X`O9Zpu5&$Np~P9Kn=gZ0kf<1I-4a zUtk1c`~{K>fBu3(0U&^Y8d(1RW7^4V^6LZG89>!QBmXe{`pfY9FT=0Dj8O6)!|#7g zK*az7#L~(TO=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d002F*|Nr~{=Pyu%qcHbB24G}l{PX7zKmY(S0M7peLS*D^UKK~y z+6(XH|9gD^r>6bY*OZ>+`2GX^{Qmv@{`~#_{QUm>{r(dW1b1xK0st`p&i@3&%J4-( z6Giy=|7vRh4-WrbUHx`??d0*<@CX3>{QLa=`~Cm?`~Ld;{u~zu0R89!i0SVi2B1U! z{r&fU#+3gbKmA|6l!@v8=U+^J{{8>`mjUR&KfnL~{sUtC1qTg400I5L26X!4i0my} zo;{uZo#CfPX{7DT1DwDAf(-fnkMZ|^ra%9I0mS$d6bftr0mQhUfkCOfiE zM%HqlKU{maemr>kAILSo!3gZ8-+$N@WcKe}3J^dnRtyZx@9+FOdynDWy$P0%j62V; zZC)?>`}hA}zy1SB2;@n0006p>>h67sJD!pI8@uK6+#GPW%ce@CEFZM znTD)%K!F4J_qpc@AQp(ZPk%rA2T{TB=kLG2fBygZ4O9eD_xsnsUl6u5yEM=SfB<5# z6|+@gR}o|u1R4pn+XF1YrQf2oylS zAbS3(sBkhcTmc9mV6grHN=r(zLW3F{=D&YK84x>x_WT70A}|U80*H};VI?9O(a}F7 e1_Utx1Q-B;QgQb4eH!Wj0000PEol7!5I{@}e;EG$`~Mq){{FvoV+so& z6Zek;JYV*``O13q$!wq?2!V|I&+z9TKmf4-@!$W9Km&lr1Ie!(IeUNcyZo#F`{&0p z?&{CqnEw9%50U)~((nf$fIu4l{AK07*qoM6N<$g2hARp#T5? diff --git a/source/masterserver/flags/sn.png b/source/masterserver/flags/sn.png deleted file mode 100644 index eabb71db4e8275a5bfb7b1b8f3a8374d50da95db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmV+v0_**WP)6{xSen|M~Ox&!2yPfTn)={d@hr-#`EU4p90fz>J~+=oo+i0%`d3@9*!wzk#ZO z2WQUEDXOGe*gO;$t?-?1~^z5 zels!xNuY7SApXOk^arFAjDSu82p~p=WCoxfknArIdOZOgs+`19}IpFa%0{xSUi1L7diFBr+f01$veIX40Tgn<}np4MoMn3N`o$god9 zrkzn;+j{#q5F}xeh49xZuI$05IKi0v3Lq917Le*!UxBJYN`Vr8|1$jj50VD5fvSOw z-(ZF~46zx($8#~-kUKOh9u19TNY0I~dG z`1hBA5y<}g_y4cI3}({*g*gAq^Z#dL_#dnH|JmpNJMaAe2etv|3x;0|00G4G>kr86 zzYquf`+xk=e@^EAQat}9xc>97{@;He<|?3qzo3u+2q2a}APrzwf*tnl_y6c6m z5?7266~G|=0}2mdsDK;{bP_-SF*1~XW%vY(NDyK`u#uw~6h{mUJPZH<1^~BhckWKq{Jk|L6Yw|Nrm*vcLXk{sL#*k)f0!)jRF?KX6FHLLC_7zyJOQ#RJf}AnqSv4E_E0 z_d>^cfB<4-C}v>z1dGUDNRj#r9OZBkNc8hC00bBS^Nnc?6(4BA00000NkvXXu0mjf DM=x{`~^7feaw| z@9%GBrr%pd7ytr@3Fu&;D>$G0;d%9&ckUlP_FsJLznOpkI<);49~%fU|NOOg<1c>p zU%YI;<@gu?0tjRS1JJ?0e*b^_hvDg;|Nnpg`SWY#%HJzjff!!CzZWj}wP?w&U%!5b zMg95nhXEjfKpOu4{R2W=zZm2}8km@V1qJfIu3a z^ZvQT`ny}__wU`%Fad@Sg!~P3A(#OSI%WR9r+OFw0*K`e1H&7RKZ`vj#ee<&!}=E_ z2M*0Ye}N7Llfc;c2aF@2)L(`#3;+SdxR!w-xR`AxVx?>``QKoX4p z{r>$=Qj`^FFF*h>?mzuiS(feBuYdplGyMPm{~rVab^il$89+1;fd$yvm=2wM1rR`t zfB*hvWMl+7=|4yZ16bGpcem@l{$rO?srZisfXY67`UDU_ED+y9gdmKw*T0{<`x@v9 zlkZkl}Tegi}1FC>)y z`~`;fe+5al?K4jS1P}|@5C%z67NEr6KmWj?{{J^f1u*QH|Ne!BH7L;kfnp0FfEXE= rk23safJY>Z`~zeELt=n*00bBSq*!cC{}>3t00000NkvXXu0mjfg_GrH diff --git a/source/masterserver/flags/sy.png b/source/masterserver/flags/sy.png deleted file mode 100644 index f5ce30dcb79b443ebc1615fe4889cc26e2d762b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^ZuP)@|4`Xj5kLT%`al?B=W5I`)SK7Qoo3V-qKd5l^# zgv$taFhBq?zJ2?apPwJU>mjm?jEr~g+yMw6Mj$IKE$!aDd%wZp7Z^YoAQH^_^XK=U zKYvwJR4!h;2oOM^VEz63kEEm|Pzoptl!JgjVAdZn_zMF-#Q*_BG6D!N0MDLEDh$KY Qwg3PC07*qoM6N<$f z|Nj36M1Mf!|33`>e*gaqWCO|HKwFtO#a&sZ0t5gt0M7pel4t!zdFAutyc%F2ByLSib7d z-@iY8{9s{WsjaVha_-{UlG^LGvEO)A^**!$6$1ni3ljqaFhGRYPy6$qf&JG{kKey{ z|N8ae_ixs}{}``bdDhkT?#VOp#VvoBm>H#|fo1~)5aY*A1~#Xrf1jTKgW~`H-wePI z{Ri~aZw6pM{r$!84-_k)u=@Ltg1)Cf2{xiF#iKZ95W~`fDE7~ z|1pDN1{?_>vH!pR*Zxoe2p~qo;+=0k{eVOy5dHe~@Bg1a48OqWACLsaJOfY!7)!uZ dz{3I%U;rfUVNTmRI(Yy9002ovPDHLkV1m_xKPvzL diff --git a/source/masterserver/flags/tc.png b/source/masterserver/flags/tc.png deleted file mode 100644 index 8fc1156bec3389e54d3c5bb8339901773a881e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmV-$0+0QPP)Mt z2Fbqp@bUfi_XiXZ_x%As_WHU2H1hfc9TM^w3-JC0{^0Bg`~MgK0Qv%mWs{6kqN+Cc z+b3Uc-enXLWmi^s_2~6APR{Qy8GilxQ)j#p({t5y7`^LQ4&lw9Z0Ra5^`SSP!?%<&3?fU!$2L%N9{QCa@0Qv%mW$D2m zA^~iFet$Uihac>@UpF6ozx?O#ufL4HfBpRUndtzp5U;>@#TUPR{|1KG4}bt-0)`aO z`@jDF|MM3p^6S^{zdwKf{q+mXVfa4fgq7?27ZxvH%|34Sm*EEk!#{ukVgYLS^A{)$ z3^fq>3urc&4I=;kz4MwgW4X`2zkh%J`Om=vauPrQ0X6*k{pY`=2p7%A_P)?P zUwuVdAkKe=-@h3}_C6p$AOxEwQo+UIeHT5%mg3lYGL;@HP(LjqG0$?6F}(Ht8A z0K*^*BsuTDFa|;zm9Mc;PRcq|KMMBO%8|{GkrU*a2x&r-3HS3`xnqW1|R~39RolBu`vAj19S<{HjoWK z4L}tj8-Qm20eTwfuYbROLyY(bwgDi3SQvf*HG+%>>H*pSauQI_zkmNAP67ugNCPlf z{{97O00g6G8FFbZ~XHln?_bqJeH^V)*lb;YTJ&0)m(r7ytqc06HRil3NF`RsaA107*qo IM6N<$g5!7R+W-In diff --git a/source/masterserver/flags/tf.png b/source/masterserver/flags/tf.png deleted file mode 100644 index 80529a4361941e01d1def5d581bf2847cf99fef6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmV+q0`UEbP)KfiwinSYl|od6I(APxT+{=azr6>87_{|pZw{QvzM zh#vfW|M&NwU%!FG-`~IfN=xzq?EwhD!Wi2C0Dv&)|Bp?Zs+hPi0R-LQn75%cY-O8s zAPsw;Q!9X27=Hcx_y6DDzyCn0!4P6RP{Xg^fBpb%_yyDhbQs7f8-Qku33L4cS@IvK z8OZ(n2kOgTzyGb@ek0IRW9ouaN6$P0x*s5bfH4)06qlIj4>;1{Yyp4(0|4dQTo>gF RMrQy3002ovPDHLkV1fdR=hFZH diff --git a/source/masterserver/flags/tg.png b/source/masterserver/flags/tg.png deleted file mode 100644 index 3aa00ad4dface0a9c23744ab451cec0443f187bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmV-20?qx2P)@|6mN}b_RwI3=Dr@=ogG+VE_mq7La^(HIVqv%*^=nCj$%1|9}7Uoj(8m`RC6+ zAo~61@1NiQe*Xrt|Nh=Ea}z)Sfi-Y&{FjhmFg0aZxaj}$=L~=U)(L)O`TP6-zu*7= z1Ib@N^zYwqCU)6YF9v`BVgi}{>lcH)J%gU!|J)p)>i@rg^Kt&>WCWsLoQyxgk29dnvBpN5vQb0*LYVQ3gi&tp7jnGyMMp z@*mKbe}4Uk_!#8f-w;8De}5R+mEP<>2M|CkH{LKvi2wQh{WmZi827ytqc0C8?ZF&p#S!~g&Q07*qoM6N<$g49|K A6951J diff --git a/source/masterserver/flags/th.png b/source/masterserver/flags/th.png deleted file mode 100644 index dd8ba91719ba641502bc7ffda16c25dc71b2066c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmV;#0XzPQP)@|4`Xj5kLTn#2^O%5QJf({+!S7KyMr1NSdb0?wsyYS6cNVdko7wub89?$EL;)x)00Ic8;m6; z*ldXL$Yz5{poPB}7`^}m5DPc2nu@9r4=+1782$pC1a=$HjDKJ@i17#P6G=(#Q>V-T z0*LYF&!5c9%>VxV!xcCX0F(uW(%ZLh0Ro8SA3Hl!NeKhQjeq|#{05SL7=Ql;MhF4{ ujRQ&nZP~jQAb=RZqDCa1IEDa#00RK>mSUL#9?hx%0000(5Af|u+{y|g&!S9Ft%(8imf-XR*|Ns8{XO&`< ztN44b9;zJZ^?&~W0*LYB$B#TbJpUo){|D*(`>^x>w|gKB?9z<#wQ%E^n3(S0zYh>V zEO6uD3`W^f29Wmu3`mZF`w$?27#UO<(rVJ~y}I}N&+p%VfB*XP3y6U1Uw^?QNbuL6 zzrX+d{i`Cbal7Zfib@b53s27mx! mU=U|u;Adc9XCM*)1Q-C-v^a{iiydVE0000+lNu{Qmp=|FW6D0*D1<1Ovm9m%kYQ|7p*Yo3ikU z7~kiESLFZv{{Q#iA0zqwf4<*Xu-*CD8$MYncA&8U0mQ`ckKy0n|9}7f|MB&2MbDkQ z1j{KKBL!IA2(Z7F;(zkuBe#mo9TT;SzkoLU{s(jwKmai@{QdX$=kGt?etVi7(p9*e z(|o73K&5wiaQBkXEB9so{`tH8jIplb^d$ZPi5h|uLD4*o5RnOS|{Qd{@Cr~j!0D)}y0}8T#$FHit{lE#dc*g~k_utsL zxj&Wpto`+k?f2h5mv;mM4gK>M6!-uE1hnA~P_?8O+wWh(`!4wX{Cn2j=z=is`~Uxb zzx=@K_DcEUJ7IZAUZAu8{sn~+Kmai^Fsw$4O9qB73=GeJhA}V*Ffg!yW&gnt6F`6g Y0QOrYft$MNbN~PV07*qoM6N<$f;FEW z@b~ZkKS1)&|37~i{`~p>`}cn&^2?@800G1T)Nta$zvt>t<757@uK4@^{4bCmpb7~3 z1tfp{|Md&VW|Wov$G`v(Kp+kO{{26+>+jbuf7A2+upj>Wf7$Q%RxoV1$N0e}Fas1Q1BW)@@rKJa|xATBWA`D>(WW1JFHv zzy7cP0k+{MTm!^O009K@!>LoJmn~avX#S_9;5YZ-KmTX``u`YaHjD&?*dJiPF#rS* zNW;&cKP?=87yABYZ~OCq-%n(9P{tpi22h9t6$1niNQ1e-pD1xDrvBdy@BT2zfI@>2 zY$OAO1fsuxAqeOsfB<52Wnfst00RHO2+qJn5C9Nh04p0wT74^6IRF3v07*qoM6N<$ Ef~oTCkN^Mx diff --git a/source/masterserver/flags/tm.png b/source/masterserver/flags/tm.png deleted file mode 100644 index 828020ecd0f6fc73348373c9e7a235fdced09de7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0VKiqu&g@GZ_kb&V31Gky(*8`UselaloV1SZ886W^4001!n&i@1e004Y* zk0R&!|NaLC5DIk$@CyeC@AU9ebDYiJ)zswL{Qdm<{`>p<{rmm%TMiuO{1voVt6d+$)WVk%^O){nwx0zkdJv^%rQ#Z=eQ%0Ac}Z`19}Y zkI%oqe*ekA`2WvehFzDBOo*xZ{rB(cQ`_&qdGhP`Z=jyvAOx}jAb?nae){+CFDvWc zZ(siLa{c@D=g;LQw^HX+sY@u`d-M3!$G1SGAWQ!Ifj9{ufLMTG0<_`#=U?|Ye)D|< z8pH7G?=PVA*@stt1I-4xpA0e#40jk9 f${7d%fB*vk3(!F(w2U8u00000NkvXXu0mjf+94t7 diff --git a/source/masterserver/flags/tn.png b/source/masterserver/flags/tn.png deleted file mode 100644 index 183cdd3dc98c6957bde83f375a431e543a3ce9e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmV@|4`Xj5kLT%gT|L_r@28Q3iff@h;hzaCwplYy<4FCT9KXmB7 zhQ|Nt)Bg(#gN*m^{Qvt8$Of<_K(zn?!~}BDpT8hi0uj&>pxItt|NHv>A2{&e(C|Mm zFGw7s;m;qS=>P!)((wQ9AF!W(0sZ}7M&|#9_5TYB{zpfHZ20g2t^wjCfB*tH2_nSs z8?4R7=Kq6S{f9wP5^T(0hI#XVIvK%6GC)WrB}fdh6SO{nUiXv3iAlW}aH!uJM5J&?vILH{_iZHeP0c!XQ3PuJ7 zfB*t%VEX-sK~fTI%wL8-Af1e0BN-qh5dHlNK|sX-0mS$fH6j^sMDRaYQUC}r0RA0L U-~OCsp8x;=07*qoM6N<$f)6&Rz5oCK diff --git a/source/masterserver/flags/tr.png b/source/masterserver/flags/tr.png deleted file mode 100644 index be32f77e9910c0896c1ee8e7ed4f0edf815a517e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmV@|4`Xj5kLT%yy% zCxE~j7#aURc>+`lQtjr(@bBOM9XtMi`UFz<>-YcPzyAOF1!ObI$^vZw2q2J#|6qeb zs-vSBOie-Rl$HN?bb!_U0_g#3VEFwTr~x2=m_Y6Zss`GqsL0^t^nd#F|4B*zH*EO- z_3QuT%m4H6g6)A?0#pkSKujPf{rCwIb#eU5`( z{s2t}2q2J#|9}60{Pg58FvR|AYlEDjruP5RC6KEgJ^H_IA4CJhNdN)F0>q49OBog~ z{?Etvzo-c07$As@{Qu?4|3!FoS~(Xu$ujuK&Ki|5;f$7pYF;Nfxh(xqFs zZUMDjzjMbfEbRY>5C0Dx`v3aP|JSeozj_5kj66I)?%V+g05Jg0{{w&k0RJ5w0P^!X zSy|WJ-R9=z(aMV97z{4myy=pj4$^bx3|zy{hYtY)h`Ao9!QA5iyLbPuTmkB_PfP?Vee~$j z!-o&gUAyj)n+wu&>J&%=KmU)%j{yP*q=CWA45Z=rFNTYkfO?!$Q_o+&{s0WlT)E;? zRQUhj|NkdWF!J+%fBF<4fS7B68jOwqzkLe|6QI@S&;S4b-#s()-1Y1C!Qjl5tA6F> zpisYc>&x@!00G2Y!@$5~Xb92(47=Z8{{bD%z~Ggi4>bPny?b}>+&OjWQc!g@0~6Et z-Maw-h`Ac5K~JB7o9jOp7XvpB0}lu>-nqlT$mpA&|LpDCZ{NOs`t<42?c44-IbZwx z0Rjj;B7x{N1H(%OhUW|nPgz+XA3Vr_1a9x%4G>@ep<^{rq?UTJ00000NkvXXu0mjf Doa;3l diff --git a/source/masterserver/flags/tv.png b/source/masterserver/flags/tv.png deleted file mode 100644 index 28274c5fb40e5d3bacd7c05d9a1b8017eeaffa6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536 zcmV+z0_XjSP)mzpv3Mmw05Sgm{~xFtLc$sUu>nR##!sI<0R#{WMEdpj-yJ7j ze)|0V&%b{_!~X#7`1>EofS_N0|E)GoUH&SsFy}2m05O4F@}ffYb$qvjbfSUipMQUU zgY^9U_4m&&5D8KZ)HC5u^uad<48Q&W1P~L@hOIAb7eDp_T4W)^*Xg48{r4ZBJ-_}k z{QCPJq~Q-pPnz693xQJ%zkUG(5aZwHtqd&u|9`*u&+TyOvq{_Ghd=&6oB?#w{~Yv(xYPgr|NRH*haKioowt*& z{dC`3v>70P7=Ql!$;`|Q@(GT>fdHT^FqGcDeG3pkjNS|k>E&sEfzAeo{ckY&=g(gd z`CCrwmxA8!XLtTy-uM6CzrVnM%iVPzAb=R%ks=j>et^j`MFs;Wh8c4i)_^1XKP)u> a1Q-A&>r+tW$-Nl>0000<~s!0-E7R}a|Ns2?4|9|}gs%Dgx1=;`*KrBFO{{8#+``2Fv2B6@-@8AFY{`(K80jdYk13&NH4;SYnOGgJvc0I@K9VW@Vk1}Xmk4~YK$|NH0P z-@pI<0D+Rop8&DnA}oIvEc_iD{O9-Y-=|4+U?1uFgf@9*z_zyJRJ z%fS3QR^zuR^Y0tyerNXndi(YlP_?gzto2+5fB<3vIsj-gQ0X6_*?&Q*d^>boB3^zoi8Kq^tbl{qlR!{9jwQ|Nij< z=(=A?F~8j-MSe1{Hl8Yc@zaXo%Ljk}VgUvb(2HJbe?0kqy?_3vsPXrUmq2rWE6M!I zE@4*I;Mw}vw&7&iFGdC>zW)rr{s9CK3xfnhrsi*1wqMhx{@J=6sPgxpU%z6)f4fBr zzxpd#a3tyYE8}0lKnA+|-+zWbe*glA<)R0}-=}{Pnt#7~1q_Mb;=;f3i~oshNgsS> zIr~z~(_bRL|NZ|1LO_>;A_pLVSoBpHQd9nLa7ao@{lMMx#__lBLe9Cjx?EiU z71{s)`Oon8FXP|;z>s7BItd_v7-5mj(Adb}701wVj$!S*>kNN{fN~5FV)t0eYh-DxnQ(+0I@JIfmA>F`X8wD?>`2h#NWRRzyE`zA&Pzh5tt#% z!^rUCA3y+sZ1@LM1hf`pHc0ia|NsB|1uKPX0CRu;1-SztfLMSo`wOxir1}rsY$VlC z667idh7Sw?0mQ-}a!Q0#;n&}vAb0=!_Zy@WNd5!6=O2ju7s{65Vq=gx0uVrqe;+b1 z$mIY3|KLBvF9x7j{{!v#g_UGtQhI;<6hHv607H@yECdWlR7EJN!LomVp$!l~APvkQ z4p0cL2#YobhQA>6hXEjfKpL3-19eKmL_s!=;22W8vpXP)6RGKQPvx1q)UK1Q6rb{|u}Q zRsa7#{m<~1f#L7}|GzNK{&HxZVEKJ4>jAefr9{u_M=MTegAo-i2ynN}MJ5kZm z42KRel$J95{>|{~*Z<$Y8RdVo9Ap3pAeIsa2H!t_KmPs=bot-kKnMR0GBy2s>sC=w zQFmwO;@`jj{`v(%zkl=p`BTQg01!Yd{Xp;j{qx|@pI^U!0X_En_iwRd$6{h)tX8f( zaOhC?&!0e%U%!3phy1#1%V=eK#YHXK~n$!{#(ib5I~Gyfqpu4^P)1J@ZrOUii!$=0Ad7ci1(2A^!3kwFaT->5i7Ttz54h6XL$JkA3s3o z=g)t?e>01U3h&zo5I`(I-#Hr#t~u}$WXZu-Kyv1Rm&rE5wcB1YFI@@=0EYkn8G$4- z^Xb{M0Ro8S57@^*QJ}#<$Im$M^4iKw z00a=@`Sa(sw6y;I{R{T)e~6KA2AmBHF`#D(ii!XNh(#nN}rF)(}plRy9vU;su%e@J`J?dSji002ov JPDHLkV1n4Y8}|SJ diff --git a/source/masterserver/flags/us.png b/source/masterserver/flags/us.png deleted file mode 100644 index 10f451fe85c41c6c9a06d543a57114ae2f87ecc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmV-n0-pVeP){qW|y?pud`Sa)3|NY&vWd%S0u>b>P!2!lUe;6EF*#G_c zFVXVt@6Q{uX@40W{p0iY2Aa+A^Cu7i8KT+YH}2j52q4BskM2rJ$^k9;2Xxc_|Np=M z&VaLlA*IO5FlECMfB<5VUNC{tBZO(|zW*;@GJN;|bTJ71`0*d;`d`2P!x=ymOA`2> z+y@9C##^^8%gd{MW@Y91_2d742B2~OQNf=-zkmD?Vqkdk_wPTUNeuu2#KPTG{_;O4 v7C%8E5*DLB7#Kb?Fnj}}-(W6879hX?8lYRg`Y`<~00000NkvXXu0mjfD6Jtx diff --git a/source/masterserver/flags/uy.png b/source/masterserver/flags/uy.png deleted file mode 100644 index 31d948a067fe02d067a8c2e69f28cca446bc7c57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmV+v0_**WP)_vmzq~N}&z08z z0*LYY{pZr+B0$d}2MCnI@DC;m3N;oM#uMkR0R#{ugY)L9Y<*xj0QCR^`!^)W!R$Za z5CobHbl5+T3;%B|S`QFFjQ1Zt|MTw;G#Vi+hCg5i(ELAtfD|ak8UBG;ObiSF0R{lf Wla#5zB1?M!0000JMe1P}`Y1HZufM;3|NZsr4^XwNEI-g5fB<4iWtjhPj`qjL zFGT_P{{Q>;-(R370Ro7T!5$Ws$Po%5A+Zb!3j_cNFaSC{Z(fWD@s$7o002ovPDHLk FV1jsy^u+)G diff --git a/source/masterserver/flags/va.png b/source/masterserver/flags/va.png deleted file mode 100644 index b31eaf225d6fd770e0557c2baf8747c91ce88983..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmV+^0@nSBP)|05Jg_ z#sD@3Z1&&(|Ni{{_Zx)%v%Gr!NnLzkb;C z@#QWhJ{xI9$+*)bNX$S?E90e{K^EMkYok78VXhR-hjM0*K`g z$j^Tmm_>oEVgxdn{xJOg$-v0L$jHRN$OsH@P9Y&+^ne@=1^@xXcy~X;zaPM$WdOPj ri2i^{AeYDB@IM9-1r;P))4B5XW#s0WPsWLbObPT z00IbN14#96puqp%TKvBf)PA*{`~CO-uM~~n%6z|m{re4Z55!3T0R+GV5`UO(`=kK4te?c|?1P~}#f$jmC10=!0@{8gBFK@Zu z-~WJALqveC|MTzfA7GIDVE_mqkOrW8BqZ2?K4D^#WMJTBVE7%b47BbKBg1c?EHl#| zW&XdQF#ikE01!Zo3=CVrargu%_x5NZPzVyc@Ms2-@*Gr#1lu5DU{kh6%sopXB}uDxAo`@Bt_a*7F+) z{Q{%kjEu5C8vp``Wse8Lf5q7h438n|z~nEOsZga5l7ZnjPy;{!05Jg0{{a91!FF~d z;^O)I`~dv>{`>s@o}L{E2?GEB|Mm6!N=n`P`~Ld+{`>p?A0G$7!M*~B3FM_eAU;q6 zNCH*w+4I@c^Ny?Q?QPpWZQiU1R1HBuWkA0H1P}`l|NYDG=gP=Ihyj(0CItil0R{kn^jdV2 S*Eqib00003_-&c2+@O*Bba;fM%rBo$$qwJnuekcf#0k*RG7MM`2+5Y7dK4k?R% z*@ue~6f;u_A~T0evP6qS=VxXnGS_mt>CSmS&gmG`kLSL)e_Vf_=c&!fKB7`4C;*C(7s2O*P zOs1$U0urzb3<=a`d9ABG4Q$eK<6~5Cg~V%B8`UqrfRSN8f&?QTVICs^VT=&p*?Eut zt4Ur&-BL_ON(Z|Xfgo93lf|gRkT$Mz-7^OQoD^XMF@}g>R?uoU0094KbXv)l?aF0E zh@GXQVr04m@05R(Rjxq*p|CCIRfv;QJmH1kf!hsqX*sha?_l;f%e5i5I~4YG#H4;6sPG2&U~bv( zNr`eMXGIX9?wP^zPQP(6+&$05Jg0{{;N}{t6CR|M}we`P%>f+X)5&j)Fc04NUj< zI`HZ2Woe@k6UF22`V|Qe2MTi(6bb?WF#yj00*Hv<{QLmnFd+P z9@fS%;@9^E|H1b5`Vk8^2@Yw;#}(}C_yUN9iGkt%y>Cxm>T2lO13mifZBc!n`jhHL z!MK>$6Z_d%|GfHMapIVnqod%T-`{|q1_&S~IR%b4Z+;63vi@iI?>jBz=eJjkjQ{>J z{QUQa@gMhBW_GSe5B=V~`@+h~@c%z3lmG&V@$K8U{QUg?|NjRX|KX9x@@rf{MxIY^ z?fG>3gQ&3ruaE-Yw>fW_PfAH~0~Or8dmA8tSRg?T(ZDLQOiOw%6RWM9%$i>kkAMHu z-oH0qLBYb*loP0ck&zJ?LI42-(g0BnBsn<*tTlsx%zxbLe*S!R<%*E3>|Z7(9Y#iG zpdch>0Ro8e`Sa&!arp;m4%k`<1H=Xjf<=G;Aix0Vb{`Xo7A9K&0000@|4`Xj5kLT%B_22*h{r-RE_y1qN|Ns8=|JN^|IHRmA&<212VgZ}|A4N4# z+WpUe-rxU^{Q|504bi~x`!`SnKmf4-F(Xhl(8fQ1fG+vp^85d{-~aW0|NsB{f9tRR zg1`PJA~XO^2M8drlm7gLxRT-bpa1p0|1bLmQVm3Azy5pw{{IQ;B%q-{(*XjA3FM@| zf53hMJK)W)|CK-uK=ku}!>|93eu7kk5yVLV0R(o^Z;+)RSAk6exg_KF|98LtFaPy_ z#c#OrKtum9FaQJ)NCPuC$bbfbRI>n`@$3IHusZAC|2cmD|MKhqAD{+Mr~sV<5I`Ue zOuzpyNJ@f@0s0=KlTj9AB*>SXe;D}wK*A7+fQkVEi190GMB<5K2mlB$03I1qT8uIj Q5C8xG07*qoM6N<$f}XY6qW}N^ diff --git a/source/masterserver/flags/vu.png b/source/masterserver/flags/vu.png deleted file mode 100644 index b3397bc63d718b344e604266259134e653925c9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)7(YpZ_rO%ce~L0mQ<@*ghnz= zZvXM=_iyVze?clB=ogUu_5ar|Ae&KE_8$WSKmaiTHT?Vg|MaE5OE>+VAUAUr;?j4FCZIvLVX%uQ>mocOU*NTK^}%njy93_oP3+fBpUa=kKpye|`ZO zzyE?r`Mc+5Xcyo_v6>E-#|Nl{r(LkAS94bRQz)6 z1Oq?-fi&zp{`>yDUnV+0)eJF{zWfaN_0t9DjNiZhfxY|}ME?2z=O_CghC>Vh0R+`!~0W%8&aG{{H+4 zRPp!M??1nPG5q=k)Wabw3seITKp+kO{xLwc{r>&$?_UrCGJgGL;^k4Qujka#`tk7L zjnovNAkb9+0R(gvNCCu>f4~1QF);xde}DY=^Xr#I=|`5hhp|NZyp>({@(egUPqbabS$v+tIbNu;L>xVSv%=>ggR z5I`*V_U`A@(fj`3!N1?XfHr^}17rYw{OcFcC69Z0BvMmfELgy8V88%&5l9HrLN(5b9xs8l&q^Gm-@&XkD1Q1BW|346ee?wJ+H2_`p`^l3V z+1Wtu|3AMO{`_T8Q2{Cj2q2bUARGR$NlJo(=nv2bFrDDw2U!bb{QV0-KNuJQ0*G-b s1H(6@xcrC2{sj~H2V-zBFaQJ?0G2^Lae{Q+uK)l507*qoM6N<$f;6K8u>b%7 diff --git a/source/masterserver/flags/ws.png b/source/masterserver/flags/ws.png deleted file mode 100644 index c16950802ea95b40a4e024be6cce870b1991f40e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmV<20VDp2P)>E69JA<-5ee*C|6>(%ey48MQ<`3*E1sOaY}WDP*a00a=wNxxYB{9yb2 zOU?HFZD2h;3gJl2w`NO~f5I`Ue%-|qnfGfh(_6MlpFT>xzKtBKk z5J&^l?>`KZl3-*0GW-GQWCR<@03m_s?_UT4Dh3E3#;>Rm$$$~H$WlN65MTgr(_Ikn S3@&c~00004%P)h=Z!r1m*T3JtfNUmdS)dI70mLHE z+xy?%p5eHez0mS(A>sL-rPOy{yGk_s3 zz{tq>=+Ps90Al&~?;k`pNCN|I|RMxbJV00L=%3E(v!XamT}{{RArWx|9$7Z{pWi2U{IKN}lRCnF;x&=P&!(V3Rv&T;|GP6K500a;d#1A^U zy8js%fB*jT=jRXRU*A|5K#2L*r(ZvQ{P_O!=da%umKG4l0|XG%NkAKznV4BvSbj4y zawHV~fBoj~uiyXJSQwZYIoR0QIXM3O{tc7`Dgy{0# diff --git a/source/masterserver/flags/za.png b/source/masterserver/flags/za.png deleted file mode 100644 index 57c58e2119f402072640ca758657798b621f3fb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642 zcmV-|0)737P)Cfuwe;F7c=r;qyPX>nX3=Cfx7(O#Fd}LsF&%p4OfdL?Z7#j~W z{9>KL@b8bfkaUokt?1q(EJu$q{Qdp^&mV?AfBydlG2rBvO`8A$h{fmzgIW0J+B07s zK74uV#pQB`MAdI!SdN|k|KJ`--LK#OfB*Xb>lcvCC@cGqfdL=@05Jg0{{a910Lj6A zAt&mC*9zzO1pWQ@b1`Tn1`iV6=KuBe|Nj2}{{8>`{{Q~|0SOB6tE&PCq@k>=Oh@B| zgDu0v2b@p;u)h2C^Y4EK4rY$O|Ni{`3qc?^$?%A8m^2X}fLMSU{`~p7aqHLD@0rW| zzIWc|c>Ry-$DePXKfn0(_xG>AzksTL{re5n#{Tyw!wUw000L?F`}dEV6O*(3zu6Di z9{gne@#pKG|NpqSh1vf81DXBz&mW+Me}8zmL>PD&00Ic4!QY)xLzl7RCikV!EWdtz zoorLj&BXoYF88-DfB*gk`{Eza7yo#;S!C4G00M|*elvr*8B6X-zBgb0FtGkEHc8mM zoOScs_b*;Q0~!ksq<=swfJjA!^Ww!_00G4E&x@hvA~zQkvxU59n3VsHd7Nj?ec|R~ zkmuqAx#JHo0{#K*`TG}00$uYDAb=PdGJ(Ek5Vx?d6PS=4{E7kSFNS|$^b5xL14ayB ck_{lh0N_F{UmK66LjV8(07*qoM6N<$f>aVd=Kufz diff --git a/source/masterserver/flags/zm.png b/source/masterserver/flags/zm.png deleted file mode 100644 index c25b07beef894408ae11c3be294d6e0eeb28c0bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmVLz(k0+Rp#|Nr~{@4x^5fB>iy$Oe)U zA3pkg`SAPSuU~)vaR2(F*|!oPfLI`Azxw(Lr25~#KmY#x{rl(7|GyyW-|wp|{||Bf z=)Cuc_0O*fYWnY`7ytr@1!(pEfB(To0uBE22c#NA{{8#+_rKq)zyAFG`zKdY6euFW z2yzlY0I`6SGJqWbGV%`;{r&ytA5hcp-u`P`AAdOg`t|1D?}h2=^+y>10tjRS&?yMj zfBygt2HEouXg1LCzyJLD1w#LR1MLR}1V8|>0KE@nffPa916Bvu_V4#Epof105yNkw zzknJ50tl=DS->P)FK#X6%e&u3i|I74$@9uP0*YE!se={)r{r~?r68Z&3 zzZn^2KYiK`5I`&p3=IF7JHD>uaSofgtUAf*-w!6nU;qF7`S<(x|35&+uYZ4j|Njjl zS;T)|pU40ZKrEjoRWbQ1@P?oGFzcPCjLiCzcU8ZC{rmejNW<@6e}U*1kPT$~=Kk_~ z83O}A05QHjx|ikdd7h}_|NsB_wl9j+&d<}^`}fbEzkmP!1q4tEL@O#P9zA*#Ab?m{ zv`qe9Isj6Ah@Z*IdsTw}WYHgB8-D!*lmGvK*?)d>i2vThzyJ_HEdLn(@uk-N0|t-& z`$Yv&?#y3UfPVP*`ya#a|BS!>G5-DsFR)1c1&eHCHYDzO7ytqc0P0;>l>h9)WB>pF M07*qoM6N<$g71PE`~Uy| diff --git a/source/masterserver/functions.php b/source/masterserver/functions.php deleted file mode 100644 index 3de8e3ac..00000000 --- a/source/masterserver/functions.php +++ /dev/null @@ -1,122 +0,0 @@ - here already, but then you don't filter non-visible bytes here) - //$text=strtolower($text); - //$code_entities_match = array('!','@','#','$','%','^','&','*','(',')','_','+','{','}','|','"','<','>','?','[',']','\\',';',"'",',','/','*','+','~','`','='); - //$code_entities_replace = array('','','','','','','','','','','','','','','','','','','','',''); - $code_entities_match = array('$','%','^','&','_','+','{','}','|','"','<','>','?','[',']','\\',';',"'",'/','+','~','`','='); - $code_entities_replace = array('','','','','','','','','','','','',''); - - $text = str_replace( $code_entities_match, $code_entities_replace, $text ); - return $text; - } - - function db_connect() - { - // If we may use persistent MYSQL database server links... - if ( defined( 'MYSQL_LINK_PERSIST' ) && MYSQL_LINK_PERSIST === true ) - { - // ...then reuse an existing link or create a new one, ... - $linkid = mysql_pconnect( MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD ); - } - else - { - // ...otherwise create a standard link - $linkid = mysql_connect( MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD ); - } - mysql_select_db( MYSQL_DATABASE ); - return $linkid; - } - - function db_disconnect( $linkid ) - { - // note that mysql_close() only closes non-persistent connections - return mysql_close( $linkid ); - } - - function get_localsubnet_ip_prefix() - { - // If this is supposed to match any RFC1918 or even any unroutable IP address space then this is far from complete. - // Consider using something like the 'IANA Private list' provided at http://sites.google.com/site/blocklist/ instead. - // The data in this list is a subset of what IANA makes available at http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xhtml - // Note that you may want/need to add in the IPv6 equivalent, too: http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml - return "192."; - } - - function get_external_ip() - { - return $_SERVER['SERVER_ADDR']; - //return "209.52.70.192"; - } - - function cleanupServerList() - { - // on a busy server, this function should be invoked by cron in regular intervals instead (one SQL query less for the script) - mysql_query( 'DELETE FROM glestserver WHERE status <> 3 AND lasttime < DATE_add(NOW(), INTERVAL -1 minute);' ); - //return mysql_query( 'UPDATE glestserver SET status=\'???\' WHERE lasttime diff --git a/source/masterserver/images/game_icon.png b/source/masterserver/images/game_icon.png deleted file mode 100644 index 6782ad1696711bb45b8f7fb751a658887a298655..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7035 zcmZ{pRZtu-x5t-a#VPJyTozc|iY)H#uEkm0DN?LZbb(^U-6<_vTo*0AIExl2#fo3P zJNM;#xS2Wm<(!i<$xQN)$v;k0T>%G^0uulL;3z4|X}?hEKlU2!rT2tj!C!#lAgv}1 z05m3JJy@Z>_(%|K1sOoyB-P=ILuaF?tp)%DG6MkNQ2@Z*ODOyR0Pq0<07sSpfM^x~ zKQh^D6TJJ#C`o56Gf3hTILl!20at~y;m9>9@5ixf8DL`S9_s=yYq)H@TY-8(tcM# zPrHVJgipS^)MKuw+0PQCG-kCNkkjmc4IVWZ!^V4)JK1D1q!EN@ZPv&ZOiWij5*v7i zVf$1rf$#{k`i{C|;gyr6%loHV=%j}OZCE>Hs@FN$URUIOzrL*s#m>I!d`T>ODlZvd zO*G4-QrCIdyRS11ix74JN~baB%hASstZdoEN8J-MDZC*K^QXUYTmkhgXj$RBp#;<+LB{Z9$3*J=E0+`=>>xekfL zBNuh0JSJ#ZgUgur>Ll#x-;S`@_5Ny&k)n;i%ue~j7fKfrH!YnXc4i}SV4v}v?95EM z{O1!9Y+Qs_NaQW0aDL!L<33t1)f!P5PnY=Rt*X4b-rJV@^grUzx?N4FuzF(BVF`;4+GN`f7uG4bH8+xbzSk0 z)zC1uti^DnZnfU7zh24=ss3hbqh$ceo;GIV40dPe8zOghVfLzzw(H*K`x2s76XcU| z5f1CY)chRE-ys3P@3y=`=vjm#GUs@@JAV|xnYX?%3!F}=9Ii|6Tm>wroRWSM7vwVb zwhGBu^V)Oi0=MRPHlHkt5HsF?S6r{eUYPn6XPzT?t7^hH*T~d^wZ55Y=IOB4YwEXB zaDpw)U{W1>wwb-7I_)XwmzfqHweh7F9 zN$K_;Zq5qWG$&)YSv9(-s@tlZopN6Nkmsv!?lY;3^K@K4m4COZ$L&1bTXQXv9h26D zD#~^EN96T~P^?^aR2^skuFllsIe%}TJYl{eF7x*9h9d_O$mcYecY}(gMY=%tD%D_y zSN+uyY^>x6nXhuM9noS^HKJ4IiSeT=Dl3rQMyF5JB<8AJsZru7;9tZp&DlwJ-Gc(D zMe9?3Qt8bvGa*VjMLm2cKG`@-St0qArMD?q?85fY@~-N*nyNlc-mw2rl_pm-i07f+ zZ}eQzm#rqFQ21sTa`1258Q)>q$}icj{38h3sH5Gfn2+OgQl1=GjjpGO@h(RTZN2MPp zV=Gvs2jcN6(VVZYIk8q)a*uu{F%QOz zP2QKzBQ6^7)(uh&LExq<(-pvBe;} z(GLL)Sw`vBXRq1R97y12e^@%;SJ0*UcV7^o^z+x;*`d_0%!%tJ>M{2|U&lKZ<4DqU zTIphB|JEgXsu~;-^Pl{TE3owNULSuFPd|G%$AB@xNT(!KuIZiY51i`#-7N_Fd*)2r zYu}hcGLYT&Pu8J(civz%F4jFhT_ZbJ#1^$lJ@&$4?T%XCZ&E-0g&6kUipq%%W@D$a zs$M%&!G5KxPR%2VgGqwYQ*sK}iMX%4=tG7=8H=%rhUKfDK@m?xqK0lIGPtgx({U@7 z0o1AINGfz>)j#YbgCu88u;4yz#xfCf=}Wi}BgPHP3 zWZ%_oDpLO=B+^oFaRxM)j6G=8JZr1ZQH`C1H5Ei<+%TrXe|s>%(~eozu~>Tsr_#u5 zrwyp2Lqd*~SNR9b(&KQ&vKP$eK%tV}RV84vqH*>6Ws$};)*yhkiMw1#iMfsN`~KJ1 zzNYfagO#Qqt1 zY*LTUhROJ9b?{Nf*SoSW!f6fR_C}=G$W^8?^iWhVAdS@;w4*>z`jtA+za2L5!`2;< zv}VS*!QRZVOcoBk=AixScF|MABt1_~%25YdgmH1y<50A&$8LiZ`1GyB-L~2p(pw}Z z6g!Ia%cN{dS(qrl%z#~U^?l;Yv~3Rc!?uD)V<(Z~`8@wUldqVTt{K^PG7sY`Zc(G_VM?MuI+xb@? z5Tk#RV;&M;G~c(*n=fb-rYhJ4Hx5qweAOK(W`O;g8 zs!`WV*kkHs)n{|*v>5Wr^So0kZP~tpwc^-FU{9ah15(hYCAZbuO!)pZmTs3W($g2=QaP>f2?HM04(1BSjTi-S}(in>+h|Knz&P z*0IjjD~lWs>Uuw%?9)DY!GV&Wx+7-yRTD#DIvPIpTLIv^S!gl_(UkJx%5sSKezXZ#PL~T#Jx5N73U{94Ymh)+J`vit71>+Fd2uZ=_!q zSo@|G)|~JSV%8JrMfm*Axw`Tafo{BpHOb+O$LC(GT4I-29iVKoS`L|FZE-DRHbR<&3BXbp^f|${`ycgOf`mSL zD6e@sbsgHeeg-YOQw;69^V(e8k|-`?pHx@Y|F{+%KGK5@y5sKu5}C?%9PGv7)*f?+ zjaDlfOpD|x>Fc||4-Wl#C?rgu@6ys;B{)l(%dO$o<1+R5kHw-;<#cQ*%)FymAp$n$ z3js-OdBl;#+Y!jxgzBOQU;lBt;`ibf(id87@|WYQYsGwDpCQBmLM>&J)0K%ul8In% za*5!ZvQ->Sn{p6(R%1YV$LG2^)6vyfi|#d*qdFm=5u8EV(+DByl%8@~w>BHb%AEHV ztIXl$l6k&gfB#!bx_=^htKI0$L@iq(-7>yPjuyM)<}Ax5D^=8*tWhH8pcazTJAywx z(mqjBnW?)6xXDXF>KV%MUui{22D7CFo*t(J3wHc_x7z?S?>;nLMnADFmcu2)3*qWy z+}_GnS21&)2AiO1Idm|2VJs3pW_+(D=%>4@NXVS#sja4&Sri(@BgUH^ zF)cc{@L)*bDY=L0)@M({w!KLB5QTLCB`ouozu_JG_{{RXR1m&o*owbHPwhty@Yu}L zq+v$S(TayyH~+L2MSe%RmTg?+f~tACi7K!e&HGg`9br@3ml%uByj?lq{8#C^-C1mo z<ZGZ{6Ji5HMyjqDJ$)4>3>5<(( zt>M*=NqV@^&b;+pSkfAo54wDqHBE1#n2g^YQ8GD@gU)Z&jVOPjnVO1;F}G#>`F#>?hKqaX)KWBh znfmrHfpClworQQ#V!4z6s?eV0jXE>x%?YCeeG2p|K)ghU)yc}bP{_B@Igm|+!3jsI zpT^biA6tZF2F`Nwb>mq3&jpMy(-47|pN3;>{T9$fewYMLR=opiV@8pac?R)rDh3f2 z>NE(ad=W29jZyq7MWm3)5C|N~pQhB^&~&#^ccf(YNM35G@O#4ddsDF(tx_p&uqUsl zQD@fJWi}6t4MR39-Mg~nx92GJVpQCu{YQ1D;fy$154P(+=|Pu=gY=8ZF$Yt+d#%`I zo+j3vhM1IzJ?|~{n5!oNw|n&|!T07Z7*mYES)POMq06Vnzj5`~2Qaq1a&{hp@07KXZgpwe z%RUIi{n1yCsINj2Os-d)nIJFKg=b>p^~^#}e?@ED^%U!zwy)y(4SRS^*?dQF0Oap> z2M1gQmTG+OVA;#&m2`W#lT>!)I;Ae0GYm6qO%D6&pz=9m!K$Qh%O`YfHjmjUWjSkF z!&baKiOO9iBq)JYK%n?^q$xX2 zygfD@R&@sQpErzZMonbeg0dYl^PgN*s0^@3jz8r(=1&4^3Y{t9Z>dUTXy{M`{m46s zef~sM;iv-@h{5Yn4X}lBBHmfZ`PU%pi$%8qYd3VsYiG^ju)@*7C9>@|bX$djBOjN{(4c`UJKG=^=VdtOW3y_w|TdY_>EI zTLnM^@;R@c#v^v>9d-wwo!jWA&5KMK%z3Acx^$%yMtRAwDyONimZSkeIN0tVda7vb zGJHJJQHgTw#q8LgmAy-DZX!w5zZrlucqHzBN&vz`rX-`s1oVJ^o3Az`@VhnCi6vWLVpEOoM?TxH-N+Xw~YomIJ-Y%p{81dsKflgcZ6o;hyQpN#Tl#2 zv_}p%osf0%ic1>x#|e_S*uV?zh^Pb}HcXO^Wb4d&ndD6PLBeXKANtt2{ZiE1)7=`) zbpR@H4AL~wAV8ykAmBN;L_~#WIJW91OU~M@oR?mI&5t&*vCfMC>6W7$OtykZX6U;) zY))Tv@!t2}UuA5{sc7rXBM-U+LfA#`_IjZ-lvp5D0pI6qp)<-bP$!b8jlH$a);NjT zFqg_T6j*|oDF^MGAr-_tW!ZpAv3E~(}EK7wJ;K?pCE7^QKr%8 zq+=A;_vUYtXD)ZNM~w!$`=yURMMVMH+HX;gd5=iWgr&vF{$4*E!6^cBcU(-U$kK|F zh5{864^~UvI30?nG*VR7YkJ#9J#*xL?)jVTWALmtUu1cnmJZXe@sx%$O4h zV*7_brR?q}U9D^lj=-~Q#zs#OwGEp3NA%=vW6adw;Q1#B*P2?VMSUG@%e1 zD^!{v9C}BQskn#A!=Bs-jZT+b{U15aX$<8r|Iw8-4&M)_jmh_<{qET5kUdKVovj?x zs|1)gh}7+(oI{FWjp4+w+`1}OTWvZZ-3pZlI{Ox`o@|R~Q`BabF{g|A@Q{Vr#q~A4 zMnG#fVi+%sPJLqlwc=Lc>yaB2OxBZYhgnM`-Bb4k?_fQ%SH+oD(EMM`?OxTww2(3a zDsZ^qq-(zS)fNIw6X!gtkXB;R8I#LOj#mMzAXLe`UQvzHD;aG6I)%xH9M0>&u*&~k ze4CHZtt2=+crC{m?N5_+AReBnLMp>2AU!76J56E8h~E8OYNzd!a*ARt&%QB67ryj$ zpYu>kGhsmk<}Y`eVC&88soKCJ-QYV14a>8Oo=O|x(@-_NMIDgqoB+n&5(V#v*F@E{?6mOPe6Qjcn}S2Mh5P zd4~;hx^ya=xFey#fgerat)!dnIJVPn!pS}zKViL9?7{a0O^UCvD>yG=FU$ZPtJVBI;Br;KXzY1;ot|Q zwr;b?jmK}a_uagaR&VtS9be6t5!1@(8r{4l%!WX_a`5m4SkkxA2mC#imbQH&vbjoI zeu{m>ybnQY?++CL2iVTYS8_`6eI;#uT)Dv>^7gyeJdeAjjIIv=uhc}&+9t(^Tooh{ zcVC@25qD-V#1F>K$uYjqU20!Nv@FZ~H86uv?e4jY$8IG-477+ID;%2*R&r?!^Jtdf z=4K5`Iz(z_(?kIll6k?5;!8f(cYTr=>u&6b0_J+8LZS_yTYzHAz3lp>dA3mhxX)8 zkH$to6S_JfmXW|W{`B7UFtLP;gmJ0M+h>a!CV(QT_W>F=5ploa{gpT>GVQ4r2H>ur z=HHFmR3nIejE&18m658NLSK6Da1!sv+ws3un*Y;n!t9=r9AX8i&fR-(UIeAL-e5y- zTPtrnQ5!G27XbKxynI|hUM^k{U0z;M0gxzAfCC5=1p=F~M)v-zz}4N>$v)u!FX+?v yFn%c@{m%*>ZVsZ>PTpL$b{^i2Tz+0o-rja@fY;>%oPS@Y0F=P$a&HIYv}$d&Y8|kxb!g>yy5GH?HeUU4&UJl%zW3Lgi*@a1?`J=I zt##jPt-aYmJ9L0d2Hti?en+4`0AF9~`(g(lf1i&j;t<^(wQ0=g&wsXvzpIJ@{j;^Ggfn;Z^qA#n0`MHlxV zIC=WP&C>^PivfCt!qqbjj^3eg@a+S5$DBehKImqlQP&EckV}2YFm9yh4hR=d=&L{S$$BHI#}4 zoQzZ;R)dAzYax$S!z*?$3ff;sc3=T~`SUu-ekkJ9=oK~(ei3ufQy30^RWjTYhT$d7 zpaQ=mJRupri9@jf4DDkUz z;~*P027yT#z_1CBCXYw^5jhA8IfmDhCm~>XHoBxth9YGm{Jma6Hfjnmst9hW)1eqO z8FJqD=WWkX(-AysDl*f!u8isM*G@&CHV=N93WTNeIqB07m@y4OnbY7gx&XnM`3M=E zk0AaWnl+tE0Yb8h5I&|5A=$<79#@RWoSEo7ZU%%2(;=NS3$IP6M9_qJP)sU8;KXtW z1yd0=fMG$wID`#maGtpq*>h%N*lax_(-}ew4k4{{DX_E@>ne(nvA_hON)J@6g=}#R zTq?I9c76kL7MT&MH^XiDGK^ik3gZ{QjS0NXS+WY!>i6)v@hwc?&pAu17|&$_mmK{n zjM2XX52FPW4Da9#!)i?8lFLPEs==70HJG$?4SKGq!xY{I>HdM-Woyu{vI)~xtigm8 zwU}aD3$Hb+kZ-C*wEiN-uX-Qxw)f$?ZZ~Fbv>|%aPV{~M0AkEf;cmMQrS%8Q+PoPf zx9vd3y@xSv$3Zyke1usa??TZ2CM-F42t7YJkA;VhA?CAYBsMUxlj|_xbB3c|UBlL^ zr{UlFGp^k|gUW~Bod9hlR14o=YIO*wXoD@yQRZME;>@F?)}>R-|sy7scoI_n1~hoYy10mfAXu=wE08G zGyA>$(UKm)l8ZmT@1Vc!7Bw*Gt$(~1>DTr8_rJYp`(@wj;S;PM&v%wxzU49?+GFZ> zJA^6k9+=jpaaV`-K8nH0A%#O@bT__^y|m|Q{)Txu$&*ys0W&Uqd+7YOE6eJ}X@-v; zmFSi5*$+=|-fbDNX~FcO+?4b;vW^~n*zMlgjv+zrf$_cKCN4c@IN9l&(}T)N-dsJi zVEw{X|N8RyiBsnefBr@DS6`fI`fU4u!sP#TY%!lmb=H?lA{VO1|Ly0UIO-2B%zMB{ z=07BZ`43KKfxPunj$oc~!CgwhVHuIah zkVWS$V1A=ZSR`-lW2&k1Sj@DAOeof~@bR;lg3nV-FK3|>XEVjv87!f25mRIrGcUeI z=(rLVHhCUX73)}Z(Gup8R>*P|8`*%odCY%oF$?4Gh1|I;U|b(&N&1Ad~rqFt7fD7`^Km9L@at zCyITtm7Y8M^%mziMh{}IC8jfKyK{d!2gk7XZhn7$&*v^E$YJ$sbZp9u5^;>yqP4q+ z_Ge@t+1f2CQA|F!)Hg&MNk6?OUL(tvh;!WI5=C2RoNOYUD7CS$!zWnUwR^1K+i%2{ z`n@*nV}6_)yKeHoONdfjlh$^R9U@{rVCq~^pSLhV^q(*!Ozpa8ZlrNF8+N>z4cS`H z$Ud^a|$>7+B=fTbT$!}+oyK3y`LOnufKIjw4bmfAz!E^|D!nn zlwYKW>ViF?J+AP4!~FQ~ptYl3sB> z$DZ(_oNG7HB|aecf7AFTkzIm7N+0GURzqvI<7v;`cVeDr8GG(JYG zDO6V|H;I3WebPs|X$^ZE+xe$4(oglC^i%%X>k;K6;cvHrz9If;ZHhC(m$AoUoD;@0 zpXwoe`Z3qusp9)S?;a7kC%fr;5q~@Pf8{^nE$ZjGDF28Ls_kTtJzuG%_$2*g59uf0 zDE9~hsx?&qVlK9_NvE!hx@nv+Abcpl>05i=i(LMtpSUNVNuOB%c|6h>#UJrQPYQZE7zx?PAw|Xc49LZVS8LdY(1&T1?~9YHi{?k@vswByQ~-kgv3-QC?I2 zQ$3*gBR!)3RD0|k^8BS-t2ywIxR+4$teT(7r>lL1!uA$R0mrpFGCM0{hg6;@5WuBauf>6MglI$PoQ6l$;Rr zk}w+)F_(?*Rl#!nr?C-37cou#e9>R3o&7((DDJZ&-`szyvFa&`fZjJKUS>2l-Gf$&WmR$@}JHggd6b{xx9t-xBN>Kidp}Zd92T*7tD9)b>v`7HbDC)|NKl7bM;5& zQ#eP=9lvkyiF*sxfC&9D(RcEn^3^}n^h!T*K;l1il8Ap)r>9~JCU|UPB;@}f-%1u2 zn$H$>-N@#68b$y2K+o*@iGT5|&2qp&YaOPxzC*0BIlt@_=%{uAeX<4oLqV)QGx?1OK2Qukv5i$uXckmF%GU5x(iHs9#m{hp3;h7SGU} z|DZt+U&R2$KIH&mPd22zcKa3olmmqOI~|X(1{`Bo@FA=3W@4ivr;2r*_Ft;Sbj}Mr zarG4jbS5JkDE3G{;Xv_7LU_vuE)ub)mSU1}gT{&bq=XtaEMOy}_)k#i#X4d4pD;*C zld zXiXZk?^m=IVMKlMhrXjaYPXHfxim)hQA_sHd=j#OFrjnflHL2oGbHT=Boq_W(%FE7 z`qcjY9ocP{Wm|VM68m>FZtv4GVNBoJ=iA4~KH~rHzr}y=@aO;EeY&UMSHzgah3=96 z+pmk$>v*k)H$vT9(B8uz5)TDJ-DCJ&ZWx^8VaS%H!&MQEkYI02aUKh&z$kpyVIH~$ zE8!G006jya;S?6jZ&6pm#gpHi^7~m=elL3*Yf#d81Kx3}#t_d^xJM-VQu>Zko8mZJKr?)h*l%ha|!x%--&$u6N_*jvWOh$BzuwW^f9bB3qNl& z_TmIe9GaoQeH@Uk!R9X8QR1mbTDv>w*Lxi1<2qbI=U_Zq;nyb*Gw=Ye@x$R6KMeBt zB#i616YBQ=M(@~kbX94=;}tc2<%sY66azx_NL8#sRAM3mRioh-I~7y9T|!W|Ul5d- zf{p{nBh}*zcnnI%*PXsabZ-m%2c;o&z<3M~+5qXG97K9tM#$ha%nsPV_18l1IgP;n zOA)G?k74dNkrcZKfr-UXMQlNc_bsHW-$2}m6a?@)-DR<};Xfi1A4D#JZxX*t9gz!l z=rPDOT^kOc_!e~DhB-$2jw zVuWPyyWNqC5Sx{QKABSylbH+uq3hwp?{r@uQ-ChnGZCC!h^TQh5uP&_2@{H-7rdjv4Orj0h<;VEDWh=v=lM5fkpAZs9oC7Up8_q8wyY8W2A76#7iNgRn(g z(cZ8Lk<%Cgmc5IOOK0&rTMNz`$6*k^r^S*}aMB;e74sNKmwt?h>Z9nr zFevKy_(mR`8&~6l&FipYb3NkUd5P6qwnMq@5fs~-vAk|S+IG)^!;T*iw}D~z?mE1? z`yjCQCPEG!Mf^t>pxpKcGCsbHm!B-b`U9UrefS%A9lr#JV|USZY9)kEp5VKa+i>n= z1H#W;Kvd%cp!pHvPCm!evzu_{EYFDxH&ENu0$hHAkgJd3f8#D3ZvBpXH$Fq;&40si z^CqU>zKzm5w}1!#LhAii1h+ncjo%Xw{N)LrwSI;DKewXg`LB5S`;YuS_{D!L0cN#C zB9k~uTpT+{Wc(+QI5_YD2bqgR;^@NP$YdQlNcgiv;?l0212$DCGi^4V&RVFfwwO${ z7M(t?+Gfzz+NvvyErt}EEi*B%+M+AcnJb->G_N)0HB?#+DMnjfL$S$Vu@sq#8!AmH zrrPq?D)5bC9@j&t+X@8#aE&-RD1-hJ-KjeYyh-ERHq+CRRM%T)@gLL(?-W^+-Bq{U!1<~u6#lybG|*|Sg7 zs)rl)eeuJ zeeu=xPafX8`}ppuBd7OWt5ao3&%FyjTsUaj-8SQbpyk}F)EWKLO zj~UxH|Kgl?_~fB?Q@N%6m(HFv zCp+7(m*5u{7a9@K&12vg-zc}a^UOBMm47~{H+EGtKD{F^J#(q)^Q}I`3zn^1Icd(| zvE6*a$M+jQJSNCb=o#ka-=&9JlkFEi zcx?E{elbCD(P6!Pdv$c1=QPcs(fIw7#g3X2zm^KRPxm%8y(^#o-kPPu1XY&WZ_?o8 zURu8XkmxYqp4~b|_IQ1eV~ctFv;DFY5AL5(=6-tSz?tQ_o42f4m7Oy#Su=6Oi0=IY zh6Dx;mHYdK^zH2C^!ilC7UkLd-|v5N@#dqN;!n?PZkn#0&gaj0bN-~{iGv4^?Gum@ z5iw!d!05hFeEG=9l9ojMgGUd(*?#Tj+1z7i_8uryPv5d_&74{D-^}SXcEIR2(jo#Q zhPa2gNB8yO=EyrVn{3}d`Tp(i?|=R6*1eaS4y0;wmoHm6fBu`M z4)N{Hr$-JfbZE3%PdwVs4bt8G_E=NXfxKd^cF|k2XJ_YV^NPn63?Df%CTOV7ura+y zdCi>8_m^gyuIACzM-SG?Ke=@2eAB1pS^NuCuv$}`C+9`JxHvf>VS<#GGL@^%P*g5! zu^I9oJ$ZIQa4o%g=~B~2g4#o^aGs)4sa>T!oHWiJQjNwnizlDNy4q@!wdjlT?>~7^ z>gedm6@0!`(aBNb=;$ePk@0QMQRdl|?}VLXp1dO|%hVT1j;0owzUS6glsw>Sk-+WVFRg_p+Zm{X9stVPa zw%V$c6g_`qs5PZnYZHsj4lO2|t*WfZRBO&pNhvaLG1u~5zQJm>n)&jE+FFCjXs{T{ zOl3t@qpIb{ADdfRu3Wj&EH=&j=}Kcui`ZUi;ZIktw6rwRNOQ}TmQCjWcqsb6!T&V` F{s#@uwn_j1 diff --git a/source/masterserver/index.php b/source/masterserver/index.php deleted file mode 100644 index c5d1bedb..00000000 --- a/source/masterserver/index.php +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/source/masterserver/install/scheme_mysql.sql b/source/masterserver/install/scheme_mysql.sql deleted file mode 100644 index b491ea5d..00000000 --- a/source/masterserver/install/scheme_mysql.sql +++ /dev/null @@ -1,166 +0,0 @@ --- --- Table structure for table `glestmaps` --- - -DROP TABLE IF EXISTS `glestmaps`; -CREATE TABLE `glestmaps` ( - `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestversion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `mapname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `playercount` int(11) NOT NULL, - `crc` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(1024) COLLATE utf8_unicode_ci NOT NULL, - `imageUrl` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, - `disabled` int(11) NOT NULL DEFAULT '0', - `crcnew` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - PRIMARY KEY (`mapname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glestscenarios` --- - -DROP TABLE IF EXISTS `glestscenarios`; -CREATE TABLE `glestscenarios` ( - `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestversion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `scenarioname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `crc` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(1024) COLLATE utf8_unicode_ci NOT NULL, - `imageUrl` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, - `disabled` int(11) NOT NULL DEFAULT '0', - `crcnew` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`scenarioname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glestserver` --- - -DROP TABLE IF EXISTS `glestserver`; -CREATE TABLE `glestserver` ( - `lasttime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestVersion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `platform` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `binaryCompileDate` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `serverTitle` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `ip` varchar(15) COLLATE utf8_unicode_ci NOT NULL, - `tech` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `map` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `tileset` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `activeSlots` int(11) NOT NULL, - `networkSlots` int(11) NOT NULL, - `connectedClients` int(11) NOT NULL, - `externalServerPort` int(11) NOT NULL, - `country` varchar(2) COLLATE utf8_unicode_ci NOT NULL, - `status` int(11) NOT NULL DEFAULT '0', - `gameUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - KEY `lasttime` (`lasttime`) - KEY `gameUUID` (`gameUUID`) - KEY `status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glestgamestats` --- - -DROP TABLE IF EXISTS `glestgamestats`; -CREATE TABLE `glestgamestats` ( - `lasttime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `gameUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `tech` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `factionCount` int(11) NOT NULL, - `framesPlayed` int(11) NOT NULL, - `framesToCalculatePlaytime` int(11) NOT NULL, - `maxConcurrentUnitCount` int(11) NOT NULL, - `totalEndGameConcurrentUnitCount` int(11) NOT NULL, - `isHeadlessServer` int(11) NOT NULL, - - KEY `gameUUID` (`gameUUID`) - KEY `framesToCalculatePlaytime` (`framesToCalculatePlaytime`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glestgameplayerstats` --- - -DROP TABLE IF EXISTS `glestgameplayerstats`; -CREATE TABLE `glestgameplayerstats` ( - `lasttime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `gameUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `playerUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `platform` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `factionIndex` int(11) NOT NULL, - `controlType` int(11) NOT NULL, - `resourceMultiplier` DECIMAL(10,6) NOT NULL, - `factionTypeName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - `personalityType` int(11) NOT NULL, - `teamIndex` int(11) NOT NULL, - `wonGame` int(11) NOT NULL, - `killCount` int(11) NOT NULL, - `enemyKillCount` int(11) NOT NULL, - `deathCount` int(11) NOT NULL, - `unitsProducedCount` int(11) NOT NULL, - `resourceHarvestedCount` int(11) NOT NULL, - `playerName` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `quitBeforeGameEnd` int(11) NOT NULL, - `quitTime` int(11) NOT NULL, - - KEY `gameUUID` (`gameUUID`) - KEY `playerUUID` (`playerUUID`) - KEY `platform` (`platform`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glesttechs` --- - -DROP TABLE IF EXISTS `glesttechs`; -CREATE TABLE `glesttechs` ( - `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestversion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `techname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `factioncount` int(11) NOT NULL, - `crc` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(1024) COLLATE utf8_unicode_ci NOT NULL, - `imageUrl` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, - `disabled` int(11) NOT NULL DEFAULT '0', - `crcnew` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`techname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glesttilesets` --- - -DROP TABLE IF EXISTS `glesttilesets`; -CREATE TABLE `glesttilesets` ( - `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestversion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `tilesetname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `crc` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(1024) COLLATE utf8_unicode_ci NOT NULL, - `imageUrl` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, - `disabled` int(11) NOT NULL DEFAULT '0', - `crcnew` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`tilesetname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `recent_servers` --- - -DROP TABLE IF EXISTS `recent_servers`; -CREATE TABLE `recent_servers` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `server` varchar(25) COLLATE utf8_unicode_ci NOT NULL, - `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `players` varchar(10) COLLATE utf8_unicode_ci NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=550 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - - diff --git a/source/masterserver/robots.txt b/source/masterserver/robots.txt deleted file mode 100644 index 1f53798b..00000000 --- a/source/masterserver/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: / diff --git a/source/masterserver/scripts/desktop_notifications.js b/source/masterserver/scripts/desktop_notifications.js deleted file mode 100644 index 623e5614..00000000 --- a/source/masterserver/scripts/desktop_notifications.js +++ /dev/null @@ -1,355 +0,0 @@ -// Copyright (C) 2013 Mike Hoffert ("Omega") -// Licensed under GNU GPL v3.0 -// ============================================================== - -var DEFAULT_REFRESH_TIME = 20000; - -// Get query arguments -var get_data = {}; -var args = location.search.substr(1).split(/&/); -var version = ''; - -// Break up URL to find the get queries -for (var i = 0; i < args.length; i++) -{ - var tmp = args[i].split(/=/); - if(tmp[0] !== "") - { - get_data[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp.slice(1).join("").replace("+", " ")); - } -} - -// Check if there's a version query -if(get_data['version']) -{ - version = get_data['version']; -} - -// Will store the data about servers last time we checked, so we can compare if there -// are any changes -var serverList = {}; -var firstLoop = true; - - -// Modify the document body -var domUl = document.getElementById("noJsUsage"); -var domBody = document.getElementsByTagName("body"); - -var wrapperDiv = document.createElement("div"); -wrapperDiv.innerHTML = "The parameters used by the masterserver API will display when you move your mouse pointer over any of the table headings.

" + - "
" + - " "; -wrapperDiv.style.paddingLeft = "30px"; - -domBody[0].insertBefore(wrapperDiv, domUl); -domUl.parentNode.removeChild(domUl); - - -// Modifying string object to support startsWith(String) function -// Created by CMS -if (typeof String.prototype.startsWith != 'function') { - // see below for better implementation! - String.prototype.startsWith = function (str){ - return this.indexOf(str) == 0; - }; -} - -// Request permission for issuing desktop notifications when the checkbox is ticked -var notifications = document.getElementById("enableNotifications"); -notifications.onclick = function() -{ - if(notifications.checked) - { - Notification.requestPermission(); - } -}; - - -// Helper function for escpaing special characters -function escapeHtml(text) { - return text.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); -} - - -// Check the JSON data for changes at intervals and update table -function timedRequest() -{ - // Break out if the checkbox isn't ticked - if(!notifications.checked) - { - return; - } - - // Get JSON of server list - var request = new XMLHttpRequest(); - request.open('GET', 'showServersJson.php', true); - request.send(); - - // Function calls as soon as we receive the right data from the site - request.onreadystatechange = function() - { - if (request.readyState === 4 && request.status === 200) - { - // Parse the JSON data for safety - var jsonText = JSON.parse(request.responseText); - var newServerList = {}; - - games_with_stats = 100; - // Repopulate table content - var table = "\n" + - " Version\n" + - " Status\n" + - " Game Duration\n" + - " Country\n" + - " Title\n" + - " Techtree\n" + - " Network players\n" + - " Network slots\n" + - " Total slots\n" + - " Map\n" + - " Tileset\n" + - " IPv4 address\n" + - " Game protocol port\n" + - " Platform\n" + - " Play date\n" + - "\n"; - - // Loop through all json objects - for(var i = 0; i < jsonText.length; i++) - { - // Check if version filter is active - if(version == '' || jsonText[i].glestVersion == version) - { - ////// DYNAMIC TABLE SECTION - - table += ""; - - /// Version - table += "" + escapeHtml(jsonText[i].glestVersion) + ""; - - /// Status - var statusCode = jsonText[i].status; - - // Change text if the server is full - if((statusCode == 0) && (jsonText[i].networkSlots <= jsonText[i].connectedClients)) - { - statusCode = 1; - } - var statusTitle, statusClass; - // Note that the json value is stored as a string, not a number - switch(statusCode) - { - case "0": - statusTitle = 'waiting for players'; - statusClass = 'waiting_for_players'; - break; - case "1": - statusTitle = 'game full, pending start'; - statusClass = 'game_full_pending_start'; - break; - case "2": - statusTitle = 'in progress'; - statusClass = 'in_progress'; - break; - case "3": - statusTitle = 'finished'; - statusClass = 'finished'; - break; - default: - statusTitle = 'unknown'; - statusClass = 'unknown'; - } - - //debugger; - if ((statusCode == "2" || statusCode == "3") && jsonText[i].gameUUID !== "") - { - var specialColHTML = "" + escapeHtml(statusTitle) + ""; - table += specialColHTML; - } - else - { - table += "" + escapeHtml(statusTitle) + ""; - } - - /// Game Duration - table += "" + escapeHtml(jsonText[i].gameDuration) + ""; - - /// Country - if(jsonText[i].country !== "") - { - var flagFile = "flags/" + jsonText[i].country.toLowerCase() + ".png"; - table += "\"""; - } - else - { - table += "Unknown"; - } - - /// Server title - table += "" + escapeHtml(jsonText[i].serverTitle) + ""; - - /// Tech - table += "" + escapeHtml(jsonText[i].tech) + ""; - - /// Connected clients - table += "" + escapeHtml(jsonText[i].connectedClients) + ""; - - /// Network slots - table += "" + escapeHtml(jsonText[i].networkSlots) + ""; - - /// Active slots - table += "" + escapeHtml(jsonText[i].activeSlots) + ""; - - /// Map - table += "" + escapeHtml(jsonText[i].map) + ""; - - /// Tileset - table += "" + escapeHtml(jsonText[i].tileset) + ""; - - /// IP - table += "" + escapeHtml(jsonText[i].ip) + ""; - - /// Port - table += "" + escapeHtml(jsonText[i].externalServerPort) + ""; - - /// Platform - table += "" + escapeHtml(jsonText[i].platform) + ""; - - /// Play date - table += "" + escapeHtml(jsonText[i].lasttime) + ""; - - table += ""; - - if ((statusCode == "2" || statusCode == "3") && jsonText[i].gameUUID !== "") - { - table += ""; - table += ""; - table += ""; - - games_with_stats++; - } - - ////// DESKTOP NOTIFICATIONS SECTION - - // Store data in an array keyed by the concatenation of the IP and port - var identifier = jsonText[i].ip + ":" + jsonText[i].externalServerPort; - newServerList[identifier] = { 'ip': jsonText[i].ip, 'port': jsonText[i].externalServerPort, 'title': jsonText[i].serverTitle, 'free': (jsonText[i].networkSlots - jsonText[i].connectedClients), 'version': jsonText[i].glestVersion, 'connectedClients': jsonText[i].connectedClients }; - - // Only check for changes if NOT the first time - if(!firstLoop) - { - if((newServerList[identifier].free > 0 && !serverList[identifier] && statusCode == 0 && (serverList[identifier] === undefined || !serverList[identifier].title.startsWith("Headless"))) || // doesn't exist in old list - (newServerList[identifier].free > 0 && serverList[identifier].connectedClients == 0 && newServerList[identifier].connectedClients > 0 && statusCode == 0 && (serverList[identifier] !== undefined && serverList[identifier].title.startsWith("Headless")))) // Headless server that previously had zero players - { - // Create notification - var notification = new Notification("Open server", { - iconUrl: 'images/game_icon.png', - body: 'Server "' + newServerList[identifier].title + '" has ' + newServerList[identifier].free + ' free slots available. Click to join now.', - }); - - notification.onclick = function() { window.location.assign('http://play.mg/?version=' + newServerList[identifier].version + '&mgg_host=' + newServerList[identifier].ip + '&mgg_port=' + newServerList[identifier].port); }; - } - } - else - { - firstLoop = false; - } - } - } - // Replace old list with new one - serverList = newServerList; - - // Write to actual table when done only, otherwise the browser trips as it tries to fix the partial table formatting - var tableDOM = document.getElementById("gamesTable"); - tableDOM.innerHTML = table; - - //debugger; - for(var gameIndex = 100; gameIndex < 200; ++gameIndex) { - setupGameStatsLink(gameIndex); - } - - // Catch empty case - if(jsonText.length === 0) - { - serverList = { }; - } - } - // Empty server list - else if(request.readyState === 4 && request.status === 0) - { - serverList = { }; - } - }; -} - - -// Default time in miliseconds between updates -var refreshTime = DEFAULT_REFRESH_TIME; - -// Check if there's an HTTP refresh query. If so, we need to overwrite it -if(get_data['refresh']) -{ - // Get the base URL without any GET parameters (because we have to remove the - // old refresh variable) - var redirectLocation = location.href.split("?")[0] + "?"; - - // If a version variable was specified, add that back in - if(get_data['version']) - { - redirectLocation += "version=" + get_data['version'] + "&"; - } - - // Finally the new refresh variable just for JS use - redirectLocation += "jsrefresh=" + get_data['refresh']; - - window.location.replace(redirectLocation); -} - -// Check if there's a js refresh query -if(get_data['jsrefresh']) -{ - // In seconds, so multiply by 1000 for miliseconds - refreshTime = parseInt(get_data['jsrefresh']) * 1000; -} - -// Initialize value in text field -var refreshTimeBox = document.getElementById("refreshTimeId"); -refreshTimeBox.value = refreshTime / 1000; - - -// Initiate interval -timedRequest(); -var interval = setInterval(timedRequest, refreshTime); - - -// Catch changes to the refresh time box -refreshTimeBox.onchange = function() -{ - // Validate if the input is a number - if(!isNaN(parseFloat(refreshTimeBox.value)) && isFinite(refreshTimeBox.value)) - { - if(refreshTimeBox.value < 10) - { - refreshTime = 10000; - refreshTimeBox.value = 10; - } - else if(refreshTimeBox.value > 999) - { - refreshTime = 999000; - refreshTimeBox.value = 999; - } - else - { - refreshTime = refreshTimeBox.value * 1000; - } - } - else - { - refreshTime = DEFAULT_REFRESH_TIME; - refreshTimeBox.value = 20; - } - - // Reset the interval - clearInterval(interval); - interval = setInterval(timedRequest, refreshTime); -}; \ No newline at end of file diff --git a/source/masterserver/scripts/json2.js b/source/masterserver/scripts/json2.js deleted file mode 100644 index d89ecc7a..00000000 --- a/source/masterserver/scripts/json2.js +++ /dev/null @@ -1,486 +0,0 @@ -/* - json2.js - 2013-05-26 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, regexp: true */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -if (typeof JSON !== 'object') { - JSON = {}; -} - -(function () { - 'use strict'; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function () { - - return isFinite(this.valueOf()) - ? this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' - : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function () { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' - ? c - : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 - ? '[]' - : gap - ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' - : '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === 'string') { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 - ? '{}' - : gap - ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' - : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ - .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') - .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' - ? walk({'': j}, '') - : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); diff --git a/source/masterserver/scripts/utils.js b/source/masterserver/scripts/utils.js deleted file mode 100644 index 89a05e54..00000000 --- a/source/masterserver/scripts/utils.js +++ /dev/null @@ -1,56 +0,0 @@ -function asynchGet(url, target) { - //debugger; - //alert(target); - //document.getElementById(target).style.display='visible'; - document.getElementById(target).innerHTML = ' Fetching data...'; - if (window.XMLHttpRequest) { - req = new XMLHttpRequest(); - } else if (window.ActiveXObject) { - req = new ActiveXObject("Microsoft.XMLHTTP"); - } - if (req != undefined) { - req.onreadystatechange = function() {asynchDone(url, target);}; - req.open("GET", url, true); - req.send(""); - } -} - -function asynchDone(url, target) { - //debugger; - if (req.readyState == 4) { // only if req is "loaded" - if (req.status == 200) { // only if "OK" - document.getElementById(target).innerHTML = req.responseText; - } else { - document.getElementById(target).innerHTML=" MG Error:\n"+ req.status + "\n" +req.statusText; - } - } -} - -function setupGameStatsLink(gameIndex) { - if(document.getElementById('gameStats_' + gameIndex) ) { - var link = document.getElementById('gameStats_' + gameIndex); - link.onclick = function() { - var row = document.getElementById('content_row_' + this.getAttribute('gameuuid')); - //if(row && row.className == 'fullyhide') { - if(row) { - row.className = 'fullyshow'; - row.innerHTML = 'Hide Stats

'; - - var link2 = document.getElementById('hide_stats_' + this.getAttribute('gameuuid')); - link2.onclick = function() { - this.parentNode.parentNode.className = 'fullyhide'; - }; - - var div = document.getElementById('content_' + this.getAttribute('gameuuid')); - asynchGet('showGameStats.php?gameUUID=' + this.getAttribute('gameuuid'),div.id); - } - return false; - }; - } -} -//debugger; - -for(var gameIndex = 1; gameIndex < 200; ++gameIndex) { - setupGameStatsLink(gameIndex); -} - diff --git a/source/masterserver/showGameStats.php b/source/masterserver/showGameStats.php deleted file mode 100644 index 5cf31cd7..00000000 --- a/source/masterserver/showGameStats.php +++ /dev/null @@ -1,246 +0,0 @@ -Game Stats' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - - // get stats for a specific game - $gameUUID = ""; - if ( isset( $_GET['gameUUID'] ) ) - { - $gameUUID = (string) clean_str( $_GET['gameUUID'] ); - - //printf( "Game UUID = %s\n", htmlspecialchars( $gameUUID, ENT_QUOTES ), PHP_EOL ); - - define( 'DB_LINK', db_connect() ); - // consider replacing this by a cron job - cleanupServerList(); - - $whereClause = 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\''; - - $stats_in_db = mysql_query( 'SELECT * FROM glestgamestats WHERE ' . $whereClause . ';'); - $all_stats = array(); - while ( $stats = mysql_fetch_array( $stats_in_db ) ) - { - array_push( $all_stats, $stats ); - } - unset( $stats_in_db ); - unset( $stats ); - - $player_stats_in_db = mysql_query( 'SELECT * FROM glestgameplayerstats WHERE ' . $whereClause . ' ORDER BY factionIndex;'); - $all_player_stats = array(); - while ( $player_stats = mysql_fetch_array( $player_stats_in_db ) ) - { - array_push( $all_player_stats, $player_stats ); - } - unset( $player_stats_in_db ); - unset( $player_stats ); - - db_disconnect( DB_LINK ); - unset( $linkid ); - - foreach( $all_stats as $stats ) - { - echo "\t\t\t" . '' . PHP_EOL; - - // Game Stats - $gameDuration = $stats['framesToCalculatePlaytime']; - $gameDuration = getTimeString($gameDuration); - - printf( "\t\t\t\t%s", htmlspecialchars( $gameDuration, ENT_QUOTES ), PHP_EOL ); - - printf( "\t\t\t\t%s", htmlspecialchars( $stats['maxConcurrentUnitCount'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $stats['totalEndGameConcurrentUnitCount'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $stats['isHeadlessServer'], ENT_QUOTES ), PHP_EOL ); - - echo "\t\t\t" . '' . PHP_EOL; - echo '
Game DurationMaximum Concurrent UnitsTotal Units at EndHeadless Server
%s%s%s%s
' . PHP_EOL; - - // Player stats for Game - - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - - $best_score = 0; - $best_score_enemyKillCount = 0; - $best_score_unitsProducedCount = 0; - $best_score_resourceHarvestedCount = 0; - foreach( $all_player_stats as $player_stats ) - { - if($best_score_enemyKillCount < $player_stats['enemyKillCount']) - { - $best_score_enemyKillCount = $player_stats['enemyKillCount']; - } - if($best_score_unitsProducedCount < $player_stats['unitsProducedCount']) - { - $best_score_unitsProducedCount = $player_stats['unitsProducedCount']; - } - if($best_score_resourceHarvestedCount < $player_stats['resourceHarvestedCount']) - { - $best_score_resourceHarvestedCount = $player_stats['resourceHarvestedCount']; - } - - $player_score = $player_stats['enemyKillCount'] * 100 + $player_stats['unitsProducedCount'] * 50 + $player_stats['resourceHarvestedCount'] / 10; - - if($best_score < $player_score) - { - $best_score = $player_score; - } - } - - foreach( $all_player_stats as $player_stats ) - { - echo "\t\t\t" . '' . PHP_EOL; - - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['factionIndex']+1, ENT_QUOTES ), PHP_EOL ); - - $controlType = $player_stats['controlType']; - switch ( $controlType ) - { - case 0: - $controlTypeTitle = "Closed"; - break; - case 1: - $controlTypeTitle = "CPU Easy"; - break; - case 2: - $controlTypeTitle = "CPU"; - break; - case 3: - $controlTypeTitle = "CPU Ultra"; - break; - case 4: - $controlTypeTitle = "CPU Mega"; - break; - case 5: - $controlTypeTitle = "Network Player"; - break; - case 6: - $controlTypeTitle = "Network Unassigned"; - break; - case 7: - $controlTypeTitle = "Human Host"; - break; - case 8: - $controlTypeTitle = "Network CPU Easy"; - break; - case 9: - $controlTypeTitle = "Network CPU"; - break; - case 10: - $controlTypeTitle = "Network CPU Ultra"; - break; - case 11: - $controlTypeTitle = "Network CPU Mega"; - break; - default: - $controlTypeTitle = 'unknown'; - } - - printf( "\t\t\t\t%s", htmlspecialchars( $controlTypeTitle, ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['playerName'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['platform'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", number_format(htmlspecialchars( $player_stats['resourceMultiplier'], ENT_QUOTES ),2), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['factionTypeName'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['teamIndex']+1, ENT_QUOTES ), PHP_EOL ); - - $wonGame_class = "player_loser"; - if($player_stats['wonGame']) - { - $wonGame_class = "player_winner"; - } - - printf( "\t\t\t\t%s", $wonGame_class, htmlspecialchars( ($player_stats['wonGame'] ? "yes" : "no"), ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['killCount'], ENT_QUOTES ), PHP_EOL ); - - $player_score_class = "player_losing_score"; - if($best_score_enemyKillCount == $player_stats['enemyKillCount']) - { - $player_score_class = "player_high_score"; - } - - printf( "\t\t\t\t%s", $player_score_class, htmlspecialchars( $player_stats['enemyKillCount'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['deathCount'], ENT_QUOTES ), PHP_EOL ); - - $player_score_class = "player_losing_score"; - if($best_score_unitsProducedCount == $player_stats['unitsProducedCount']) - { - $player_score_class = "player_high_score"; - } - - printf( "\t\t\t\t%s", $player_score_class, htmlspecialchars( $player_stats['unitsProducedCount'], ENT_QUOTES ), PHP_EOL ); - - $player_score_class = "player_losing_score"; - if($best_score_resourceHarvestedCount == $player_stats['resourceHarvestedCount']) - { - $player_score_class = "player_high_score"; - } - - printf( "\t\t\t\t%s", $player_score_class, htmlspecialchars( $player_stats['resourceHarvestedCount'], ENT_QUOTES ), PHP_EOL ); - - $player_score = $player_stats['enemyKillCount'] * 100 + $player_stats['unitsProducedCount'] * 50 + $player_stats['resourceHarvestedCount'] / 10; - $player_score_class = "player_losing_score"; - if($player_score == $best_score) - { - $player_score_class = "player_high_score"; - } - - printf( "\t\t\t\t%s", $player_score_class, number_format(htmlspecialchars( $player_score, ENT_QUOTES ),0), PHP_EOL ); - - printf( "\t\t\t\t%s", htmlspecialchars( ($player_stats['quitBeforeGameEnd'] ? "yes" : "no"), ENT_QUOTES ), PHP_EOL ); - - $quitTime = $player_stats['quitTime']; - $quitTime = getTimeString($quitTime); - - printf( "\t\t\t\t%s", htmlspecialchars( $quitTime, ENT_QUOTES ), PHP_EOL ); - - echo "\t\t\t" . '' . PHP_EOL; - } - - unset( $all_player_stats ); - unset( $player_stats ); - } - - unset( $all_stats ); - unset( $stats ); - } - - echo '
Player #Player TypePlayer NamePlatformResource MultiplierFaction TypeTeamWinnerKillsEnemy KillsDeathsUnits ProducedResources HarvestedScoreQuit Before Game EndedQuit Time
%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s
' . PHP_EOL; - - //echo '

' . PHP_EOL; - //echo '
' . PHP_EOL; - //echo '

' . PHP_EOL; -?> diff --git a/source/masterserver/showMapsForGlest.php b/source/masterserver/showMapsForGlest.php deleted file mode 100644 index e8eb1586..00000000 --- a/source/masterserver/showMapsForGlest.php +++ /dev/null @@ -1,65 +0,0 @@ -=")) { - $addItem = true; - } - } - else if (version_compare($glestVersion,$itemVersion,">=")) { - $addItem = true; - } - - if ( $addItem == true ) { - if ( isset( $_GET['version'] ) ) { $mgversion = $_GET["version"]; } else { $mgversion = ''; } - if($mgversion == '') - { - $outString = - "${map['mapname']}|${map['playercount']}|${map['crc']}|${map['description']}|${map['url']}|${map['imageUrl']}|"; - } - else { - $outString = - "${map['mapname']}|${map['playercount']}|${map['crcnew']}|${map['description']}|${map['url']}|${map['imageUrl']}|"; - } - $outString = $outString . "\n"; - - echo ($outString); - } - } - unset( $all_maps ); - unset( $map ); -?> - diff --git a/source/masterserver/showPlayers.php b/source/masterserver/showPlayers.php deleted file mode 100644 index deaa6326..00000000 --- a/source/masterserver/showPlayers.php +++ /dev/null @@ -1,118 +0,0 @@ -= DATE_SUB(NOW(), INTERVAL 1 DAY) "; - } - else if( $period == "week") { - $timelimit = " and s.lasttime >= DATE_SUB(NOW(), INTERVAL 1 WEEK) "; - } - else if( $period == "month") { - $timelimit = " and s.lasttime >= DATE_SUB(NOW(), INTERVAL 1 MONTH) "; - } - - $players_in_db = mysql_query( 'select playername, count(*) as c, SEC_TO_TIME(sum(ggs.framesToCalculatePlaytime)/30) as playtime from glestgameplayerstats s , glestgamestats ggs where s.gameUUID=ggs.gameUUID and controltype>4 '.$timelimit.' group by playername having c >1 order by c desc,playername LIMIT 100' ); - $all_players = array(); - while ( $players = mysql_fetch_array( $players_in_db ) ) - { - array_push( $all_players, $players ); - } - unset( $players_in_db ); - unset( $players ); - - db_disconnect( DB_LINK ); - unset( $linkid ); - - // Representation starts here - header( 'Content-Type: text/html; charset=utf-8' ); - - echo '' . PHP_EOL; - echo '' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . htmlspecialchars( PRODUCT_NAME ) . ' top 100 players' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo '

' . htmlspecialchars( PRODUCT_NAME ) . ' Top 100 Players

' . PHP_EOL; - - if( $period == "day") { - echo ' ' . PHP_EOL; - } - echo ' ' . htmlspecialchars( 'day' ) . ' ' . PHP_EOL; - if( $period == "day") { - echo '' . PHP_EOL; - } - - if( $period == "week") { - echo ' ' . PHP_EOL; - } - echo ' ' . htmlspecialchars( 'week' ) . ' ' . PHP_EOL; - if( $period == "week") { - echo '' . PHP_EOL; - } - - if( $period == "month") { - echo ' ' . PHP_EOL; - } - echo ' ' . htmlspecialchars( 'month' ) . ' ' . PHP_EOL; - if( $period == "month") { - echo '' . PHP_EOL; - } - - if( $period == "") { - echo ' ' . PHP_EOL; - } - echo ' ' . htmlspecialchars( 'all time' ) . ' ' . PHP_EOL; - if( $period == "") { - echo '' . PHP_EOL; - } - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - - $position = 0; - foreach( $all_players as $player ) - { - $position +=1; - echo "\t\t\t" . '' . PHP_EOL; - // # - printf( "\t\t\t\t%s", htmlspecialchars( $position, ENT_QUOTES ), PHP_EOL ); - // playername - printf( "\t\t\t\t%s", htmlspecialchars( $player['playername'], ENT_QUOTES ), PHP_EOL ); - // # of games games - printf( "\t\t\t\t%s", htmlspecialchars( $player['c'], ENT_QUOTES ), PHP_EOL ); - // # of games games - printf( "\t\t\t\t%s", htmlspecialchars( $player['playtime'], ENT_QUOTES ), PHP_EOL ); - echo "\t\t\t" . '' . PHP_EOL; - } - echo '
'.htmlspecialchars('#').'Player NameGames PlayedTotal Time Played
%s%s%s%s
' . PHP_EOL; - - //echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo '' . PHP_EOL; - - unset( $all_players ); - unset( $player ); -?> diff --git a/source/masterserver/showRecentServers.php b/source/masterserver/showRecentServers.php deleted file mode 100644 index a18b652a..00000000 --- a/source/masterserver/showRecentServers.php +++ /dev/null @@ -1,20 +0,0 @@ -"; - while($recent_server = mysql_fetch_assoc($recents_query)) { - echo "{$recent_server['name']}{$recent_server['players']}"; - } - echo ""; - - db_disconnect($link); -?> diff --git a/source/masterserver/showScenariosForGlest.php b/source/masterserver/showScenariosForGlest.php deleted file mode 100644 index 2ab97e6d..00000000 --- a/source/masterserver/showScenariosForGlest.php +++ /dev/null @@ -1,66 +0,0 @@ -=")) { - $addItem = true; - } - } - else if (version_compare($glestVersion,$itemVersion,">=")) { - $addItem = true; - } - - if($addItem == true) { - if ( isset( $_GET['version'] ) ) { $mgversion = $_GET['version']; } else { $mgversion = ''; }; - if($mgversion == '') - { - $outString = - "${scenario['scenarioname']}|${scenario['crc']}|${scenario['description']}|${scenario['url']}|${scenario['imageUrl']}|"; - } - else { - $outString = - "${scenario['scenarioname']}|${scenario['crcnew']}|${scenario['description']}|${scenario['url']}|${scenario['imageUrl']}|"; - } - $outString = $outString . "\n"; - - echo ($outString); - } - } - unset( $all_scenarios ); - unset( $scenario ); -?> - diff --git a/source/masterserver/showServers.php b/source/masterserver/showServers.php deleted file mode 100644 index 7c712800..00000000 --- a/source/masterserver/showServers.php +++ /dev/null @@ -1,230 +0,0 @@ - 3 OR (status = 3 AND a.lasttime > DATE_add(NOW(), INTERVAL - ' . MAX_HOURS_OLD_GAMES . ' hour)) ORDER BY status, a.lasttime DESC, connectedClients > 0 DESC, (networkSlots - connectedClients) , ip DESC;' ); - $all_servers = array(); - while ( $server = mysql_fetch_array( $servers_in_db ) ) - { - array_push( $all_servers, $server ); - } - unset( $servers_in_db ); - unset( $server ); - - db_disconnect( DB_LINK ); - unset( $linkid ); - - // Representation starts here - header( 'Content-Type: text/html; charset=utf-8' ); - if ( REFRESH_INTERVAL != 0 ) { - if ( REFRESH_INTERVAL <= 10 ) { - header( 'Refresh: 10' ); - } else { - header( 'Refresh: ' . REFRESH_INTERVAL ); - } - } - echo '' . PHP_EOL; - echo '' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . htmlspecialchars( PRODUCT_NAME ) . ' gameservers' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo '

' . htmlspecialchars( PRODUCT_NAME ) . ' gameservers

' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - - $games_with_stats = 0; - foreach( $all_servers as $server ) - { - # Filter by version if requested - if ( FILTER_VERSION == $server['glestVersion'] or FILTER_VERSION == '' ) - { - echo "\t\t\t" . '' . PHP_EOL; - - // glestVersion - printf( "\t\t\t\t%s", htmlspecialchars( $server['glestVersion'], ENT_QUOTES ), htmlspecialchars( $server['glestVersion'], ENT_QUOTES ), PHP_EOL ); - - // status - $status_code = $server['status']; - if ( $status_code == 0) - { - $gameFull = ( $server['networkSlots'] <= $server['connectedClients'] ); - if ( $gameFull == true ) - { - $status_code = 1; - } - } - switch ( $status_code ) - { - case 0: - $status_title = 'waiting for players'; - $status_class = 'waiting_for_players'; - break; - case 1: - $status_title = 'game full, pending start'; - $status_class = 'game_full_pending_start'; - break; - case 2: - $status_title = 'in progress'; - $status_class = 'in_progress'; - break; - case 3: - $status_title = 'finished'; - $status_class = 'finished'; - break; - default: - $status_title = 'unknown'; - $status_class = 'unknown'; - } - - if (($status_code == 2 || $status_code == 3) && $server['gameUUID'] != "") - { - $games_with_stats++; - printf( "\t\t\t\t%s", PHP_EOL ); - } - else - { - printf( "\t\t\t\t%s", $server['status'], $status_class, htmlspecialchars( $status_title, ENT_QUOTES ), PHP_EOL ); - } - - // Game Stats - $gameDuration = $server['framesToCalculatePlaytime']; - $gameDuration = getTimeString($gameDuration); - printf( "\t\t\t\t%s", htmlspecialchars( $gameDuration, ENT_QUOTES ), PHP_EOL ); - - // country - if ( $server['country'] !== '' ) { - $flagfile = 'flags/' . strtolower( $server['country'] ).'.png'; - if ( file_exists( $flagfile ) ) { - printf( "\t\t\t\t%s", $flagfile, $server['country'], $server['country'], PHP_EOL ); - } else { - printf( "\t\t\t\t%s", htmlspecialchars( $server['country'], ENT_QUOTES ), PHP_EOL ); - } - } - else { - printf( "\t\t\t\t%s", PHP_EOL ); - } - - // serverTitle - printf( "\t\t\t\t%s", htmlspecialchars( $server['serverTitle'], ENT_QUOTES ), PHP_EOL ); - - // tech - printf( "\t\t\t\t%s", htmlspecialchars( $server['tech'], ENT_QUOTES ), PHP_EOL ); - - // connectedClients - printf( "\t\t\t\t%s", htmlspecialchars( $server['connectedClients'], ENT_QUOTES ), PHP_EOL ); - - // networkSlots - printf( "\t\t\t\t%s", htmlspecialchars( $server['networkSlots'], ENT_QUOTES ), PHP_EOL ); - - // activeSlots - printf( "\t\t\t\t%s", htmlspecialchars( $server['activeSlots'], ENT_QUOTES ), PHP_EOL ); - - // map - printf( "\t\t\t\t%s", htmlspecialchars( $server['map'], ENT_QUOTES ), PHP_EOL ); - - // tileset - printf( "\t\t\t\t%s", htmlspecialchars( $server['tileset'], ENT_QUOTES ), PHP_EOL ); - - // ip - printf( "\t\t\t\t%s", htmlspecialchars( $server['ip'], ENT_QUOTES ), PHP_EOL ); - - // externalServerPort - printf( "\t\t\t\t%s", htmlspecialchars( $server['externalServerPort'], ENT_QUOTES ), PHP_EOL ); - - // platform - printf( "\t\t\t\t%s", htmlspecialchars( $server['platform'], ENT_QUOTES ), PHP_EOL ); - - // game play time - printf( "\t\t\t\t%s", htmlspecialchars( $server['lasttime'], ENT_QUOTES ), PHP_EOL ); - - echo "\t\t\t" . '' . PHP_EOL; - - if (($status_code == 2 || $status_code == 3) && $server['gameUUID'] != "") - { - //echo "\t\t\t" . '' . PHP_EOL; - printf( "\t\t\t\t%s", $server['gameUUID'], PHP_EOL ); - printf( "%s", PHP_EOL ); - echo "\t\t\t" . '' . PHP_EOL; - } - } - } - - echo '
VersionStatusGame DurationCountryTitleTechtreeNetwork playersNetwork slotsTotal slotsMapTilesetIPv4 addressGame protocol portPlatformPlay date
%s%s", $server['status'], $status_class, $games_with_stats, $server['gameUUID'], htmlspecialchars( $status_title, ENT_QUOTES ) ); - printf( "%s%s\"%s%sunknown%s%s%s%s%s%s%s%s%s%s%s
' . PHP_EOL; - - echo '

' . PHP_EOL; - echo '
' . PHP_EOL; - echo '

' . PHP_EOL; - - echo ' ' . PHP_EOL; - - if ( FILTER_VERSION != '' ) - { - echo "\t\t

Filters active:

" . PHP_EOL; - echo "\t\t
    " . PHP_EOL; - printf( "\t\t\t
  • Version %s
  • %s", htmlspecialchars( FILTER_VERSION, ENT_QUOTES ), PHP_EOL ); - echo "\t\t
" . PHP_EOL; - } - - echo '

Usage:

' . PHP_EOL; - echo '
    ' . PHP_EOL; - echo '
  • You can have this page auto refresh every 60 seconds by appending ?refresh=60 to the URL. Minimum refresh time is 10 seconds.
  • ' . PHP_EOL; - echo '
  • The parameters used by the masterserver API will display when you move your mouse pointer over any of the table headings.
  • ' . PHP_EOL; - echo '
' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo '' . PHP_EOL; - - unset( $all_servers ); - unset( $server ); -?> diff --git a/source/masterserver/showServersForGlest.php b/source/masterserver/showServersForGlest.php deleted file mode 100644 index 3c3bab9b..00000000 --- a/source/masterserver/showServersForGlest.php +++ /dev/null @@ -1,58 +0,0 @@ - 3 ORDER BY status, connectedClients > 0 DESC, (networkSlots - connectedClients) , ip DESC;' ); - $all_servers = array(); - while ( $server = mysql_fetch_array( $servers_in_db ) ) - { - array_push( $all_servers, $server ); - } - unset( $servers_in_db ); - unset( $server ); - - db_disconnect( DB_LINK ); - - // Representation starts here - header( 'Content-Type: text/plain; charset=utf-8' ); - foreach( $all_servers as &$server ) - { - $outString = - "${server['glestVersion']}|${server['platform']}|${server['binaryCompileDate']}|${server['serverTitle']}|${server['ip']}|${server['tech']}|${server['map']}|${server['tileset']}|${server['activeSlots']}|${server['networkSlots']}|${server['connectedClients']}|${server['externalServerPort']}|"; - - if ( $server['country'] !== '' ) - { - $outString = $outString . "${server['country']}|"; - } - else - { - $outString = $outString . DEFAULT_COUNTRY . "|"; - } - - $calculatedStatus = $server['status']; - if($calculatedStatus == 0) - { - $gameFull = ($server['networkSlots'] <= $server['connectedClients']); - if($gameFull == true) - { - $outString = $outString . "1|"; - } - } - $outString = $outString . "$calculatedStatus|\n"; - - echo ($outString); - } - unset( $all_servers ); - unset( $server ); -?> - diff --git a/source/masterserver/showServersJson.php b/source/masterserver/showServersJson.php deleted file mode 100644 index cafd5a5c..00000000 --- a/source/masterserver/showServersJson.php +++ /dev/null @@ -1,36 +0,0 @@ - 3 OR (status = 3 AND a.lasttime > DATE_add(NOW(), INTERVAL - ' . MAX_HOURS_OLD_GAMES . ' hour)) ORDER BY status, a.lasttime DESC, connectedClients > 0 DESC, (networkSlots - connectedClients), ip DESC;' ); - $all_servers = array(); - while ( $server = mysql_fetch_array( $servers_in_db ) ) - { - // Game Stats - $rowIndex = count($all_servers); - $gameDuration = $server["framesToCalculatePlaytime"]; - $server["gameDuration"] = getTimeString($gameDuration); - - array_push( $all_servers, $server ); - - } - unset( $servers_in_db ); - unset( $server ); - - db_disconnect( DB_LINK ); - unset( $linkid ); - - header('Content-type: application/json'); - echo json_encode($all_servers); - unset( $all_servers ); -?> diff --git a/source/masterserver/showTechsForGlest.php b/source/masterserver/showTechsForGlest.php deleted file mode 100644 index a2f899e1..00000000 --- a/source/masterserver/showTechsForGlest.php +++ /dev/null @@ -1,65 +0,0 @@ -=")) { - $addItem = true; - } - } - else if (version_compare($glestVersion,$itemVersion,">=")) { - $addItem = true; - } - - if($addItem == true) { - if ( isset( $_GET['version'] )) { $mgversion = $_GET['version']; } else { $mgversion = ''; }; - if($mgversion == '') - { - $outString = - "${tech['techname']}|${tech['factioncount']}|${tech['crc']}|${tech['description']}|${tech['url']}|${tech['imageUrl']}|"; - } - else { - $outString = - "${tech['techname']}|${tech['factioncount']}|${tech['crcnew']}|${tech['description']}|${tech['url']}|${tech['imageUrl']}|"; - } - $outString = $outString . "\n"; - - echo ($outString); - } - } - unset( $all_techs ); - unset( $tech ); -?> - diff --git a/source/masterserver/showTilesetsForGlest.php b/source/masterserver/showTilesetsForGlest.php deleted file mode 100644 index 55f24413..00000000 --- a/source/masterserver/showTilesetsForGlest.php +++ /dev/null @@ -1,65 +0,0 @@ -=")) { - $addItem = true; - } - } - else if (version_compare($glestVersion,$itemVersion,">=")) { - $addItem = true; - } - - if($addItem == true) { - if ( isset( $_GET['version'] ) ) { $mgversion = $_GET['version']; } else { $mgversion = ''; } - if($mgversion == '') - { - $outString = - "${tileset['tilesetname']}|${tileset['crc']}|${tileset['description']}|${tileset['url']}|${tileset['imageUrl']}|"; - } - else { - $outString = - "${tileset['tilesetname']}|${tileset['crcnew']}|${tileset['description']}|${tileset['url']}|${tileset['imageUrl']}|"; - } - $outString = $outString . "\n"; - - echo ($outString); - } - } - unset( $all_tilesets ); - unset( $tileset ); -?> - diff --git a/source/masterserver/style/screen.css b/source/masterserver/style/screen.css deleted file mode 100644 index 9b9cead1..00000000 --- a/source/masterserver/style/screen.css +++ /dev/null @@ -1,66 +0,0 @@ -/* - ============================================================== - Copyright: (C) 2012 Mark Vejvoda, Titus Tscharntke and Tom Reynolds - The Megaglest Team, under GNU GPL v3.0 - ============================================================== -*/ - -body { - font-family: sans-serif; -} - -h1 { - text-align: center; -} - -table { - width: 100%; - border: 2px solid black; -} - -th, td { - border: 1px solid black; - padding: 5px; - text-align: center; - text-transform: capitalize; -} - -th { - background-color: LightGray; -} - -.waiting_for_players { - background-color: LightGreen; -} - -.game_full_pending_start { - background-color: Yellow; -} - -.in_progress { - background-color: Tomato; -} - -.finished { - background-color: Gray; -} - -.unknown { - background-color: Red; -} - -.player_high_score { - background-color: LightGreen; -} -.player_losing_score { - background-color: Yellow; -} -.player_winner { - background-color: LightGreen; -} -.player_loser { - background-color: Red; -} - -.fullyhide { display: none } -.fullyshow { display: }