ruby-netmon-qt 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rubocop.yml +10 -0
- data/.ruby-version +1 -0
- data/LICENSE +674 -0
- data/README.md +30 -0
- data/Rakefile +12 -0
- data/exe/netmon-qt +6 -0
- data/lib/netmon-qt/app/assets/README.md +6 -0
- data/lib/netmon-qt/app/assets/app.svg +1 -0
- data/lib/netmon-qt/app/assets/flags/ad.svg +148 -0
- data/lib/netmon-qt/app/assets/flags/ae.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/af.svg +81 -0
- data/lib/netmon-qt/app/assets/flags/ag.svg +14 -0
- data/lib/netmon-qt/app/assets/flags/ai.svg +29 -0
- data/lib/netmon-qt/app/assets/flags/al.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/am.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/ao.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/aq.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/ar.svg +32 -0
- data/lib/netmon-qt/app/assets/flags/arab.svg +109 -0
- data/lib/netmon-qt/app/assets/flags/as.svg +73 -0
- data/lib/netmon-qt/app/assets/flags/asean.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/at.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/au.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/aw.svg +186 -0
- data/lib/netmon-qt/app/assets/flags/ax.svg +18 -0
- data/lib/netmon-qt/app/assets/flags/az.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/ba.svg +12 -0
- data/lib/netmon-qt/app/assets/flags/bb.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/bd.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/be.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/bf.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/bg.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/bh.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/bi.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/bj.svg +14 -0
- data/lib/netmon-qt/app/assets/flags/bl.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/bm.svg +97 -0
- data/lib/netmon-qt/app/assets/flags/bn.svg +36 -0
- data/lib/netmon-qt/app/assets/flags/bo.svg +674 -0
- data/lib/netmon-qt/app/assets/flags/bq.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/br.svg +45 -0
- data/lib/netmon-qt/app/assets/flags/bs.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/bt.svg +89 -0
- data/lib/netmon-qt/app/assets/flags/bv.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/bw.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/by.svg +18 -0
- data/lib/netmon-qt/app/assets/flags/bz.svg +145 -0
- data/lib/netmon-qt/app/assets/flags/ca.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/cc.svg +19 -0
- data/lib/netmon-qt/app/assets/flags/cd.svg +12 -0
- data/lib/netmon-qt/app/assets/flags/cefta.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/cf.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/cg.svg +12 -0
- data/lib/netmon-qt/app/assets/flags/ch.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/ci.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/ck.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/cl.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/cm.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/cn.svg +11 -0
- data/lib/netmon-qt/app/assets/flags/co.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/cp.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/cr.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/cu.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/cv.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/cw.svg +14 -0
- data/lib/netmon-qt/app/assets/flags/cx.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/cy.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/cz.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/de.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/dg.svg +130 -0
- data/lib/netmon-qt/app/assets/flags/dj.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/dk.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/dm.svg +152 -0
- data/lib/netmon-qt/app/assets/flags/do.svg +122 -0
- data/lib/netmon-qt/app/assets/flags/dz.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/eac.svg +48 -0
- data/lib/netmon-qt/app/assets/flags/ec.svg +138 -0
- data/lib/netmon-qt/app/assets/flags/ee.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/eg.svg +38 -0
- data/lib/netmon-qt/app/assets/flags/eh.svg +11 -0
- data/lib/netmon-qt/app/assets/flags/er.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/es-ct.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/es-ga.svg +187 -0
- data/lib/netmon-qt/app/assets/flags/es-pv.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/es.svg +547 -0
- data/lib/netmon-qt/app/assets/flags/et.svg +14 -0
- data/lib/netmon-qt/app/assets/flags/eu.svg +28 -0
- data/lib/netmon-qt/app/assets/flags/fi.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/fj.svg +123 -0
- data/lib/netmon-qt/app/assets/flags/fk.svg +89 -0
- data/lib/netmon-qt/app/assets/flags/fm.svg +11 -0
- data/lib/netmon-qt/app/assets/flags/fo.svg +12 -0
- data/lib/netmon-qt/app/assets/flags/fr.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/ga.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/gb-eng.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/gb-nir.svg +131 -0
- data/lib/netmon-qt/app/assets/flags/gb-sct.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/gb-wls.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/gb.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/gd.svg +27 -0
- data/lib/netmon-qt/app/assets/flags/ge.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/gf.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/gg.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/gh.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/gi.svg +32 -0
- data/lib/netmon-qt/app/assets/flags/gl.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/gm.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/gn.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/gp.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/gq.svg +23 -0
- data/lib/netmon-qt/app/assets/flags/gr.svg +16 -0
- data/lib/netmon-qt/app/assets/flags/gs.svg +132 -0
- data/lib/netmon-qt/app/assets/flags/gt.svg +204 -0
- data/lib/netmon-qt/app/assets/flags/gu.svg +19 -0
- data/lib/netmon-qt/app/assets/flags/gw.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/gy.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/hk.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/hm.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/hn.svg +18 -0
- data/lib/netmon-qt/app/assets/flags/hr.svg +56 -0
- data/lib/netmon-qt/app/assets/flags/ht.svg +116 -0
- data/lib/netmon-qt/app/assets/flags/hu.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/ic.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/id.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/ie.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/il.svg +14 -0
- data/lib/netmon-qt/app/assets/flags/im.svg +36 -0
- data/lib/netmon-qt/app/assets/flags/in.svg +25 -0
- data/lib/netmon-qt/app/assets/flags/io.svg +130 -0
- data/lib/netmon-qt/app/assets/flags/iq.svg +10 -0
- data/lib/netmon-qt/app/assets/flags/ir.svg +219 -0
- data/lib/netmon-qt/app/assets/flags/is.svg +12 -0
- data/lib/netmon-qt/app/assets/flags/it.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/je.svg +62 -0
- data/lib/netmon-qt/app/assets/flags/jm.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/jo.svg +16 -0
- data/lib/netmon-qt/app/assets/flags/jp.svg +11 -0
- data/lib/netmon-qt/app/assets/flags/ke.svg +23 -0
- data/lib/netmon-qt/app/assets/flags/kg.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/kh.svg +61 -0
- data/lib/netmon-qt/app/assets/flags/ki.svg +36 -0
- data/lib/netmon-qt/app/assets/flags/km.svg +16 -0
- data/lib/netmon-qt/app/assets/flags/kn.svg +14 -0
- data/lib/netmon-qt/app/assets/flags/kp.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/kr.svg +17 -0
- data/lib/netmon-qt/app/assets/flags/kw.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/ky.svg +103 -0
- data/lib/netmon-qt/app/assets/flags/kz.svg +36 -0
- data/lib/netmon-qt/app/assets/flags/la.svg +12 -0
- data/lib/netmon-qt/app/assets/flags/lb.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/lc.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/li.svg +43 -0
- data/lib/netmon-qt/app/assets/flags/lk.svg +22 -0
- data/lib/netmon-qt/app/assets/flags/lr.svg +14 -0
- data/lib/netmon-qt/app/assets/flags/ls.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/lt.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/lu.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/lv.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/ly.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/ma.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/mc.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/md.svg +71 -0
- data/lib/netmon-qt/app/assets/flags/me.svg +118 -0
- data/lib/netmon-qt/app/assets/flags/mf.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/mg.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/mh.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/mk.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/ml.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/mm.svg +10 -0
- data/lib/netmon-qt/app/assets/flags/mn.svg +14 -0
- data/lib/netmon-qt/app/assets/flags/mo.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/mp.svg +86 -0
- data/lib/netmon-qt/app/assets/flags/mq.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/mr.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/ms.svg +25 -0
- data/lib/netmon-qt/app/assets/flags/mt.svg +56 -0
- data/lib/netmon-qt/app/assets/flags/mu.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/mv.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/mw.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/mx.svg +377 -0
- data/lib/netmon-qt/app/assets/flags/my.svg +18 -0
- data/lib/netmon-qt/app/assets/flags/mz.svg +21 -0
- data/lib/netmon-qt/app/assets/flags/na.svg +16 -0
- data/lib/netmon-qt/app/assets/flags/nc.svg +12 -0
- data/lib/netmon-qt/app/assets/flags/ne.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/nf.svg +11 -0
- data/lib/netmon-qt/app/assets/flags/ng.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/ni.svg +129 -0
- data/lib/netmon-qt/app/assets/flags/nl.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/no.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/np.svg +18 -0
- data/lib/netmon-qt/app/assets/flags/nr.svg +12 -0
- data/lib/netmon-qt/app/assets/flags/nu.svg +10 -0
- data/lib/netmon-qt/app/assets/flags/nz.svg +36 -0
- data/lib/netmon-qt/app/assets/flags/om.svg +115 -0
- data/lib/netmon-qt/app/assets/flags/pa.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/pc.svg +33 -0
- data/lib/netmon-qt/app/assets/flags/pe.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/pf.svg +18 -0
- data/lib/netmon-qt/app/assets/flags/pg.svg +16 -0
- data/lib/netmon-qt/app/assets/flags/ph.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/pk.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/pl.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/pm.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/pn.svg +53 -0
- data/lib/netmon-qt/app/assets/flags/pr.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/ps.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/pt.svg +57 -0
- data/lib/netmon-qt/app/assets/flags/pw.svg +11 -0
- data/lib/netmon-qt/app/assets/flags/py.svg +156 -0
- data/lib/netmon-qt/app/assets/flags/qa.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/re.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/ro.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/rs.svg +296 -0
- data/lib/netmon-qt/app/assets/flags/ru.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/rw.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/sa.svg +25 -0
- data/lib/netmon-qt/app/assets/flags/sb.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/sc.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/sd.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/se.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/sg.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/sh-ac.svg +690 -0
- data/lib/netmon-qt/app/assets/flags/sh-hl.svg +164 -0
- data/lib/netmon-qt/app/assets/flags/sh-ta.svg +76 -0
- data/lib/netmon-qt/app/assets/flags/sh.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/si.svg +18 -0
- data/lib/netmon-qt/app/assets/flags/sj.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/sk.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/sl.svg +12 -0
- data/lib/netmon-qt/app/assets/flags/sm.svg +73 -0
- data/lib/netmon-qt/app/assets/flags/sn.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/so.svg +11 -0
- data/lib/netmon-qt/app/assets/flags/sr.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/ss.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/st.svg +16 -0
- data/lib/netmon-qt/app/assets/flags/sv.svg +593 -0
- data/lib/netmon-qt/app/assets/flags/sx.svg +56 -0
- data/lib/netmon-qt/app/assets/flags/sy.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/sz.svg +34 -0
- data/lib/netmon-qt/app/assets/flags/tc.svg +50 -0
- data/lib/netmon-qt/app/assets/flags/td.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/tf.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/tg.svg +14 -0
- data/lib/netmon-qt/app/assets/flags/th.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/tj.svg +26 -0
- data/lib/netmon-qt/app/assets/flags/tk.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/tl.svg +13 -0
- data/lib/netmon-qt/app/assets/flags/tm.svg +205 -0
- data/lib/netmon-qt/app/assets/flags/tn.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/to.svg +10 -0
- data/lib/netmon-qt/app/assets/flags/tr.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/tt.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/tv.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/tw.svg +32 -0
- data/lib/netmon-qt/app/assets/flags/tz.svg +15 -0
- data/lib/netmon-qt/app/assets/flags/ua.svg +6 -0
- data/lib/netmon-qt/app/assets/flags/ug.svg +30 -0
- data/lib/netmon-qt/app/assets/flags/um.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/un.svg +16 -0
- data/lib/netmon-qt/app/assets/flags/us.svg +9 -0
- data/lib/netmon-qt/app/assets/flags/uy.svg +28 -0
- data/lib/netmon-qt/app/assets/flags/uz.svg +30 -0
- data/lib/netmon-qt/app/assets/flags/va.svg +190 -0
- data/lib/netmon-qt/app/assets/flags/vc.svg +8 -0
- data/lib/netmon-qt/app/assets/flags/ve.svg +26 -0
- data/lib/netmon-qt/app/assets/flags/vg.svg +59 -0
- data/lib/netmon-qt/app/assets/flags/vi.svg +28 -0
- data/lib/netmon-qt/app/assets/flags/vn.svg +11 -0
- data/lib/netmon-qt/app/assets/flags/vu.svg +21 -0
- data/lib/netmon-qt/app/assets/flags/wf.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/ws.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/xk.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/xx.svg +4 -0
- data/lib/netmon-qt/app/assets/flags/ye.svg +7 -0
- data/lib/netmon-qt/app/assets/flags/yt.svg +5 -0
- data/lib/netmon-qt/app/assets/flags/za.svg +17 -0
- data/lib/netmon-qt/app/assets/flags/zm.svg +27 -0
- data/lib/netmon-qt/app/assets/flags/zw.svg +21 -0
- data/lib/netmon-qt/app/components/connstableview/sortfilterproxymodel.rb +67 -0
- data/lib/netmon-qt/app/components/connstableview/statusbar.rb +73 -0
- data/lib/netmon-qt/app/components/connstableview/store.rb +236 -0
- data/lib/netmon-qt/app/components/connstableview.rb +239 -0
- data/lib/netmon-qt/app/components.rb +1 -0
- data/lib/netmon-qt/app/services/conns_lookup_service.rb +46 -0
- data/lib/netmon-qt/app/services.rb +1 -0
- data/lib/netmon-qt/app/views/mainwindow.rb +40 -0
- data/lib/netmon-qt/app/views.rb +1 -0
- data/lib/netmon-qt/app.rb +26 -0
- data/lib/netmon-qt/config/initializers/qt6.rb +8 -0
- data/lib/netmon-qt/config/settings.rb +33 -0
- data/lib/netmon-qt/config.rb +8 -0
- data/lib/netmon-qt/lib/contrib/sighandler.rb +24 -0
- data/lib/netmon-qt/lib/contrib.rb +1 -0
- data/lib/netmon-qt/lib/netmon/connection.rb +57 -0
- data/lib/netmon-qt/lib/netmon/localaddresscheck.rb +19 -0
- data/lib/netmon-qt/lib/netmon/procnet.rb +49 -0
- data/lib/netmon-qt/lib/netmon.rb +3 -0
- data/lib/netmon-qt/lib.rb +2 -0
- data/lib/netmon-qt/version.rb +3 -0
- data/lib/netmon-qt.rb +7 -0
- data/misc/screenshots/mainwindow.png +0 -0
- metadata +373 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-vi" viewBox="0 0 512 512">
|
|
2
|
+
<path fill="#fff" d="M0 0h512v512H0z"/>
|
|
3
|
+
<path fill="#369443" stroke="#010002" stroke-miterlimit="10" stroke-width="1.2" d="M163.5 316s-.4-2.9 4.9-5c5.3-2 5.7-9.7 4.7-14.8 0 0-2.8 4.9-6.2 6.5 0 0-5.5 2.9-5.8 8.4 0 0 0 2-.4 3.5-.2.9-2.7-6.8 2-12.6 4.7-5.9 6-10.7 2.3-20 0 0-.4 5.6-4.1 8.9-3.8 3.2-4.2 3.5-4.2 11.2 0 0 0 2.7-1.3 3.6 0 0-3-4.3-3.7-7-.8-2.9-1.1-4 2.2-7.3 0 0 10.6-6.9 3-22 0 0-.3 5.3-4 8.3-3.6 3-3.3 5.1-3.5 10.4s-.6 5-1 5.7c0 0-6.7-12.4-1.5-19s8.1-8 2.4-20.3c0 0 .2 6.3-4.4 9.4s-3.5 10.5-3.5 10.5.3 2.7-.7 4.7c0 0-6.5-12.7-.3-19.5 5.3-5.8 5.7-9.9 2.8-18.1 0 0-.3 3.8-3.2 5.9-3 2-5.2 4-4.7 12 0 0 .2 5.5-.5 7 0 0-2.7-5-3.5-8.3s-1-5.2 1-8.5 10-12.8.4-26.4c0 0-.3 4.4-2.7 8.4s-1.3 8.7-.8 12.3-1.2 7.1-1.2 7.1-4.1-7.6-3.3-16.3c1-8.7-2.6-16-10.7-21 0 0-5.8 13.5 2.2 20.4 0 0 6.8 6.8 8.5 15 0 0-5.2-.6-9.8-9.7s-14.4-7.6-15-7.7c0 0 1.5 14 16.4 18 0 0 9.6 1.7 11.3 8.7 0 0 1.6 4.8 2.3 7.4 0 0-3-1.2-5.8-5.3-2.8-4.2-2.4-4.7-11.8-5.6 0 0-3.8-.4-5.8-3.1 0 0 4 14.9 14.1 14.8 0 0 9.3-1 14.5 11.2l-2.4-1.6c-1.3-1-4.8-2.7-11.6-1.8s-8.7-.4-10.4-1c0 0 6.9 12.7 16.6 9 9.7-3.8 14.4 9.8 14.5 10.1 0 0-1.3-1-3-2.7s-5.3-3.7-12-1.6c0 0-4.9 1.9-9.8.4 0 0 4.7 9.1 15.8 7.6 11-1.6 13.9 8.2 13.9 8.2l-2.5-1.7c-1-.8-4.8-3-12.8-.6s-10.9-.4-10.9-.4 4.5 8.1 13 9c0 0 4.7 0 6.8-.7a9 9 0 0 1 11 3.3s-1 .2-2.6-.5c0 0-5.7-2-10 1.6 0 0-3.8 4-9.3 3.2 0 0 7 6.8 18.3 1 0 0 3.8-2.7 6.5-.6s9.3-2 9.3-2z"/>
|
|
4
|
+
<g fill="#f4c53d" stroke="#010002" stroke-miterlimit="10" stroke-width="1.2">
|
|
5
|
+
<path d="M225.8 147s-1.3-11.7 8-12.8c9.6-1.1 14.4.9 14.4.9l4.3 8.5-1.5 5.8-6 2.7s1-8.8-7-9c-2 0-3.3.8-6.5.3s-5 3-5.7 3.5z"/>
|
|
6
|
+
<path d="M291 175.7c-1.4 1.8-6.9 2.4-6.9 2.4s5.7 4.3 8.1 10.6c2.5 6.2-65.8 0-65.8 0s3-2.1 5-6c0 0-3 1-6.1-2 0 0 2.3.8 5.2-3.7 0 0 4.4-5.6 7.5-7.1 0 0-1.5.9-4.9-1 0 0 6-.8 8-10.9 0 0 .4-2.2 2.7-5.5 2.2-3.2 1.7.7 5.9-4.3 0 0 1.9-3.6.2-5.7s-3.4-1.4-6.9-3.5-5-3.2-3.8-6.4 4.2-2.7 4.7-2.7.7-2.8 4.4-4.7a29 29 0 0 1 15.4-.3c1.5.9 7.6 2.7 11.1 11.6 3.6 9-1 12.4 8.8 26 0 0-4 .8-6.4 0 0 0 5 9 13.8 13.2z"/>
|
|
7
|
+
<path fill="none" d="M248.7 137.8c-7.8-.4-4.8-7.9-4.8-7.9"/>
|
|
8
|
+
<path d="M262.4 138.8s-1.4-.7-2.5-2.2c-1.7-2.2-5.4-3.2-7.4-1.2 0 0-2 2.3-3.8 2.4 0 0 2 .6 3.4 1.9q2 2.1 5 2c2-.4 2.4-1.5 3.3-2.1 1-.7 2-.8 2-.8z"/>
|
|
9
|
+
</g>
|
|
10
|
+
<path fill="#369443" stroke="#010002" stroke-miterlimit="10" stroke-width="1.2" d="M162.3 333.2s-.2-5 6.2-5.5l18.8 26.2s-.7 1.7-9.2 1.5c0 0-1 0-1.4 1-.7 1.6-14.4-23.2-14.4-23.2z"/>
|
|
11
|
+
<g id="vi-a" fill="#f4c53d" stroke="#010002" stroke-width="10" transform="translate(2.9 85)scale(.12044)">
|
|
12
|
+
<path d="M1495 1807.9s-49.9 85.6-110.2 87c0 0-103.7-12.6-133 14.5-20.5 18.9-41.4 34.5-50 82.8-8.4 48.3 16.5 58.7 22.4 60.8 0 0 4.6 34.5 38.7 25.5 0 0 2 36 62.2 18.7s85.3-11.8 97-71.8c11.9-60.1 22.8-59.1 33.5-66.3 14.4-9.7 41.5-18.8 61.6-30.4 18-10.4 87.2-45.6 110.8-48.3 23.6-2.8 18.4-82.2 18.4-82.2h-61l-29.5-43.5zm192-429.4s-61 49.7-112.2 0c0 0-20.6 24.8-62 17.6-41.2-7.3-48.1-29-52-41.4 0 0-35.8 20.8-66 4.3-30-16.4-30-41.3-30-41.3s-52.5 10.4-79.4-25.2c-26.9-35.5-10.5-70.7 4-74.9 0 0-56.7 14.9-72.2-33.8a56 56 0 0 1 16.4-62.8s-119.4-.6-168.4-38c0 0-40.7-25.6-16.4-52.5 0 0-107.5-17.2-134.4-60 0 0-11.8-11.8-7.9-32.5 0 0 .7-11.7 12.5-12.4 0 0-122.6-19-158-59.4 0 0-17-18.6-8.5-43.5 0 0 1.8-6.5 4.7-11 0 0-111.6-23.5-166.6-73.2 0 0-31.8-28.3-15.4-66.3 0 0-186.5-51-143.3-133.2 0 0-87.2-28.3-59.6-107 0 0-72.1-36.6-40.7-94.6 30.1-55.5 122.6 9.7 232 40 0 0 296.4 93.2 442.3 118l414.6 617.3 241.9 93.2z"/>
|
|
13
|
+
<path d="M1689.9 923.9s-38.9-29.2-108.2 5.1c0 0-23.3 16.1-41.7-1.5a37.3 37.3 0 0 1 4.3-57.5c51.7-38.3 70.8-153.2-7.8-200.9 0 0-114-67.6-532.3-174 0 0-35-9.8-53.8-5.1a52 52 0 0 0-37.6 37.8S894 581.1 957 611.6c0 0 28.4 13 57.7 21.4 0 0-32.2-7-46 24.8-13 30.4 6 61.5 65 81.5 0 0 16 6.2 38.7 11.7 0 0-50.5 14.5-26.2 55.3 0 0 21.6 42.8 98 50.4 0 0-57 6.2-16.8 60.4 0 0 17.7 29.7 73.4 40.7 0 0-42.2 1.4-21 39.3 21.4 38 71.5 59.4 120.9 62.9 0 0 26.7 1.4 45.4-2.8 0 0-47 23.5-19.4 62.8 0 0 20.3 28 71.1 26.6 0 0-13.1 44 24.1 60.6 29 13 53.1-7.8 53.1-7.8s-9.8 47.1 32.5 63.7c0 0 21.1 10.9 52.6 0 0 0 24 53.9 109.6 16 85.6-37.7 20.2-355.1 20.2-355.1zm5 489.4s-12.5 67.4-112 152.2c0 0-76.8 67.7-74.9 145.7 2 79.5-13.7 88.4-43.9 115.3 0 0 62.3 4.9 92.4-36.6 0 0-1.3 69-10.5 75.3 0 0 19.6 1.2 47.9-29.7 0 0 17-18 32.8-24.9 0 0-18.4 47.7-4 91.9 0 0 4.6-17.3 28.9-24.9 0 0 44-9 61-72.5 0 0 11.1-42 80-79.4 0 0 78-29.4 76-67.8-2-38.5-173.6-244.6-173.6-244.6z"/>
|
|
14
|
+
<path stroke-miterlimit="10" d="M2056.5 2282.2s-17.9 78.8-80 72.5c0 0-43.9-4.2-40.6-77.4 0 0-64.9 34.6-75.4-51 0 0-59 13.7-58.3-66.3 0 0-55 9.6-48.5-61.5 0 0-59.7 16-59.7-51 0 0-139.6-23.2 151.4-288.6l259.6 154.6z"/>
|
|
15
|
+
<path d="M2085.4 1928.3s-43.3 38.4-74.1-19c0 0-42-2-48.5-33.8 0 0-34.1-3.4-40.7-35.9 0 0-46.5-4.8-45.2-44.1 0 0-84.6-6.6 0-102.4s228.1 159 228.1 159zm48.2-23.8c42 0 89.5 262 77.2 419.9-4.5 57.3-35.2 104.1-77.2 104.1s-72.6-46.8-77-104.1c-12.4-157.9 35.1-419.9 77-419.9"/>
|
|
16
|
+
<ellipse cx="2133.6" cy="1902.5" rx="58" ry="86"/>
|
|
17
|
+
<path fill="none" stroke-miterlimit="10" d="M1935.9 2277.3s6.6-138.7 126.8-337.6m-202.2 286.6s-18.7-80.1 150.8-317c0 0-19.7-56.5 40.6-92.8M1802.2 2160s-5.3-86.7 160.6-284.5c0 0-14.7-51 45.4-91.8m-254.5 314.8s6.2-87.6 168.4-258.9c0 0-8-52.4 50-84.9m-278 292.8s11.7-100.1 182.8-252c0 0-5.9-39.4 51.1-79.4"/>
|
|
18
|
+
<path fill="none" d="M372.3 432s134.3 77.8 552.9 155.6M431.9 539S795.6 657.6 965 672.2m-389.9 0s213.4 67 463.3 109.3m-281.2 30.3s241 57.9 356.2 67.5M919 925.6s203.9 42.5 255.5 47.6m-125.7 57.3s148.8 22.6 208 21.4m-23.2 69s60.2-2.8 89.1-7.6m-33.4 104.3s51.2-13.8 81.3-33.1m-5.9 133.2s39.4-15.2 58.4-56.6m37.7 93.6s30.4-27.3 32.4-57.7m81.6 81.5s-11.4-9.9-3.6-52.7m-11.1-62.8s-6-12.2-4-31.6m-211-581.3s68.8 27.6 91.7 65.6 7.9 74.9 0 96c-3.9 10.7-52.4 104.2 4.6 171.9M1346 1057s.4-.3 24.6-8m-169.8-91.4s41 8.2 81.3 8.6m-138-109.8s48.2 4.9 93.5 4.2m-165.2-109.8s69.5 13.8 106.8 14.5M1014.7 633s85.7 24.4 149.4 33.1m141.6 50.4s-61.6 57.3 12.5 110.5c0 0-30.8 48.3 30.8 98.7m-16.4 23.8s-9.2 92.2 103.6 92.2c0 0-21.7 82.1 87.2 79.4 0 0 12.4 65.6 91 52.4M1441.3 1895s-17.9 4-56.6 0m-108.8 48.3s-54.4-8.3-51.8 109.8m84.6-82.9s-49.2-6.2-46 108.4m520.7-384.5s-23.6 4.8-40 23.5-47.8 15.1-47.8 15.1 17-13.8 23-48.3c5.8-34.5 24.9-44.9 24.9-44.9m-56.3-32.6s-23.6 4.8-40 23.4c-16.4 18.7-47.9 15.2-47.9 15.2s17-13.8 23-48.3 24.9-44.9 24.9-44.9m23.7 188.5s-20.6 4.3-34.9 20.5c-14.3 16.3-41.8 13.3-41.8 13.3s15-12 20-42.2c5.2-30.1 21.8-39.2 21.8-39.2"/>
|
|
19
|
+
</g>
|
|
20
|
+
<use xlink:href="#vi-a" width="100%" height="100%" stroke="#010002" stroke-width="10" transform="matrix(-1 0 0 1 517.8 0)"/>
|
|
21
|
+
<path fill="#0081c6" stroke="#010002" stroke-miterlimit="10" stroke-width="1.2" d="m379.7 272.7-6.9-4-11.4 49.5-4.7-3.4 11.1-47.4-7.8.2 18.5-33.8 1.2 39zm27 13.4-4.3-7-34.4 40.7-3.7-4.2 34.3-40-7-3.8 31.4-20.7z"/>
|
|
22
|
+
<path fill="#0081c6" stroke="#010002" stroke-miterlimit="10" stroke-width="1.2" d="m399.8 263.4-5.7-5.8-30.8 59.2-4.7-2.8 31-59-7.6-2 26.1-27.6zm-44.1 71.5-2.3 9.4 6.3 6.3-9 37.6-7.9-10.6-11.7 5.5 9-37.7 8.2-2.3 2.1-9.4s2.5-1 5.3 1.2z"/>
|
|
23
|
+
<path fill="#0081c6" stroke="#010002" stroke-miterlimit="10" stroke-width="1.2" d="m357.8 328.6-4.5 8.5 4.5 7.8-17.9 34-5-12.5-12.7 2.1 17.9-34h8.5l4.4-8.4s3.2 0 4.8 2.5z"/>
|
|
24
|
+
<path fill="#0081c6" stroke="#010002" stroke-miterlimit="10" stroke-width="1.2" d="m358.6 331.1-12.1 15.4 2.8 8.6-24.7 28.9-2.3-13.3-12.8-1 24.7-28.9 8.3 2 12.8-16.2s3.5 1.7 3.3 4.5zm-306.2-36c2.9-1.2 5-2.3 5-5.4q0-1-1.3-4.8l-19.3-59.1a51 51 0 0 0-2.4-6.4c-.9-1.7-2.6-2.4-4.9-3.3h24.6c-2.7 1.2-5.1 2.2-5 5q0 1.8.8 4.7L64.8 272l14.8-46.3q1-3 1-4.6c-.1-3-2.7-4-5.2-5.1h23.9c-2.2.9-4 1.5-4.9 3.3q-.7 1.1-2.4 6.4l-19.3 59a30 30 0 0 0-1.3 5s-.9 3.7 5 5.3zm412.2-6v-67a5 5 0 0 0-.6-2.6c-.3-.7-2-2.4-4.4-3.4h22.2a9 9 0 0 0-4.4 3.3 5 5 0 0 0-.6 2.7v67q0 1.6.6 2.7c.4.6 2 2.2 4.4 3.3h-22.2c2.4-1 4-2.7 4.4-3.3q.6-1 .6-2.8z"/>
|
|
25
|
+
<path fill="#fff" stroke="#010002" stroke-width="1.2" d="M259.9 311.8s59.2-26.3 59.4-87H200.4c.2 60.7 59.5 87 59.5 87z"/>
|
|
26
|
+
<path fill="#a60032" stroke="#010002" stroke-width="1.2" d="M209.6 224.8v38.8s4.5 9 9.1 14.7v-53.5zm18.3 0v64s5.7 5.6 9.1 8.3v-72.3zm18.2 0v79s6.6 4.3 9.2 5.7v-84.7zm64 0v38.8s-4.5 9-9.1 14.7v-53.5zm-18.3 0v64s-5.7 5.6-9 8.3v-72.3zm-18.2 0v79s-6.6 4.3-9.2 5.7v-84.7z"/>
|
|
27
|
+
<path fill="#162667" stroke="#010002" stroke-miterlimit="10" stroke-width="1.2" d="M319.3 180.6s-29.1 15.2-59.4-1.2c-30.4 16.4-59.5 1.2-59.5 1.2v44.2h118.9z"/>
|
|
28
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-vn" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="vn-a">
|
|
4
|
+
<path fill-opacity=".7" d="M177.2 0h708.6v708.7H177.2z"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
</defs>
|
|
7
|
+
<g fill-rule="evenodd" clip-path="url(#vn-a)" transform="translate(-128)scale(.72249)">
|
|
8
|
+
<path fill="#da251d" d="M0 0h1063v708.7H0z"/>
|
|
9
|
+
<path fill="#ff0" d="m661 527.5-124-92.6-123.3 93.5 45.9-152-123.2-93.8 152.4-1.3L536 129.8 584.3 281l152.4.2-122.5 94.7z"/>
|
|
10
|
+
</g>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-vu" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="vu-a">
|
|
4
|
+
<path d="M0 0v475l420-195h480v-85H420Z"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
</defs>
|
|
7
|
+
<path fill="#009543" d="M0 0h512v512H0z"/>
|
|
8
|
+
<path fill="#d21034" d="M0 0h512v256H0z"/>
|
|
9
|
+
<g clip-path="url(#vu-a)" transform="scale(.56889 1.0779)">
|
|
10
|
+
<path stroke="#fdce12" stroke-width="110" d="m0 0 420 195h480v85H420L0 475"/>
|
|
11
|
+
<path fill="none" stroke="#000" stroke-width="60" d="m0 0 420 195h480m0 85H420L0 475"/>
|
|
12
|
+
</g>
|
|
13
|
+
<g fill="#fdce12" transform="translate(-35.6 26.7)scale(.96552)">
|
|
14
|
+
<path d="M106.9 283v27c23.5 0 69.7-18 69.7-76.1s-49.3-68.9-64-68.9-60.3 10.6-60.3 58c0 47.6 44.7 52 53.5 52s41.8-8 38-43.6a35.5 35.5 0 0 1-35.4 31.5c-24 0-39-17.8-39-35.4s14.6-41.2 39.9-41.2 43.8 22.5 43.8 45.1-17.8 51.5-46.2 51.5z"/>
|
|
15
|
+
<g id="vu-b">
|
|
16
|
+
<path stroke="#fdce12" stroke-width=".8" d="m86.2 247.7 1.4 1s11.2-25.5 41.1-43.6c-3.8 2-23.8 12-42.5 42.6z"/>
|
|
17
|
+
<path d="M89.1 243.3s-3.4-7-.4-10.2 1.7 8.3 1.7 8.3l1.3-1.9s-2-8.6.2-10.4 1.2 8.3 1.2 8.3l1.4-1.8s-1.5-8.4.7-10 .9 8 .9 8l1.6-2s-1.2-8 1.5-9.9.3 7.6.3 7.6l1.8-2s-.8-7.3 1.5-9c2.3-1.6.4 7 .4 7l1.6-1.8s-.5-6.8 1.7-8.4.2 6.5.2 6.5l1.7-1.6s-.4-6.9 2.4-8.2-.5 6.4-.5 6.4l2-1.6s.5-8 2.9-8.7c2.4-.8-1 7-1 7l1.7-1.4s.9-6.8 3.5-7.6c2.7-.9-1.6 6.2-1.6 6.2l1.7-1.3s1.9-6.8 4.4-7.6c2.4-.7-2.6 6.5-2.6 6.5l1.7-1.2s2.7-6.2 5-6.6c2.1-.4-2.6 5.1-2.6 5.1l2.1-1.2s3.5-6.4 4.8-4.5-5 4.9-5 4.9l-2 1.2s7.5-3.6 8.4-1.8-10.3 3-10.3 3l-1.8 1.2s7.5-2 6.6-.1-8.4 1.5-8.4 1.5l-1.7 1.2s7.5-1.8 6.5 0c-1 1.6-8.3 1.5-8.3 1.5l-1.8 1.5s7.3-2 6.2.3-9.4 2.1-9.4 2.1l-2 2s7.7-2.7 7-.6c-.6 2-9.4 3-9.4 3l-2 2s8.3-2.7 5.8-.2c-2.4 2.6-8.5 3.2-8.5 3.2l-2.3 3s8.2-5 7-2.2-9.2 4.7-9.2 4.7l-1.6 2s7.4-4.3 6.6-2c-.7 2.5-8.6 5-8.6 5l-1.3 1.8s8.7-5.2 8-2.5c-.8 2.6-9.1 4.5-9.1 4.5l-1 1.7s8-4.7 8-2.4c.2 2.2-9.4 4.4-9.4 4.4z"/>
|
|
18
|
+
</g>
|
|
19
|
+
<use xlink:href="#vu-b" width="100%" height="100%" transform="matrix(-1 0 0 1 220 0)"/>
|
|
20
|
+
</g>
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ws" viewBox="0 0 512 512">
|
|
2
|
+
<g fill-rule="evenodd" stroke-width="1pt">
|
|
3
|
+
<path fill="#ce1126" d="M0 0h512v512H0z"/>
|
|
4
|
+
<path fill="#002b7f" d="M0 0h256v256H0z"/>
|
|
5
|
+
<path fill="#fff" d="m147 231.4-19.6-13.3-18.9 13.5 6-23.5-18-14.7 23.2-1.3 7.7-22.4 8.5 22.8 22.8.5-18.2 15.5zm-3.4-156.8-15.6-10-15.4 10 4.2-19-13.7-12.1 18.3-1.6 6.8-17.5 7.1 17.7 18 1.4-14 12.5zM74.3 131l-15.2-10.8-15.4 10.4 4.6-18.3L34 100.2l18.2-.8 6.7-18.1 6.6 17.8 18.3 1.1-14.3 12zm139-12.7-14.7-9.5-14.3 9.7 4-17.4-13-11.2 17.3-1.4 6-16.4 6.6 16.6 16.8 1-13.2 11.6zm-41.1 41.3-9.7-6.2-9.6 6.2 2.5-11.6-8.7-7.7 11.4-1 4.4-11 4.5 11 11.2 1-8.5 7.7z"/>
|
|
6
|
+
</g>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-xk" viewBox="0 0 512 512">
|
|
2
|
+
<path fill="#244AA5" d="M0 0h512v512H0z"/>
|
|
3
|
+
<path fill="#D0A650" d="m202.3 245.7 1.3-.7 1.6-.5s.8-.4 1.2-.4 1.3.5 1.5.9c.3.4 1.7 1 1.7 1s1 .4 1.1 0q.3-.4 1-.5c.7-.1.6-.4.6-.7q0-.5.5-1.1c.3-.4 1-.6 1-.6s1-.4 1-1 1.1-1 1.7-1c.5-.1 0-.4 1.3-.2 1.4.1 1.6-.3 1.7-.7 0-.5 0-.9.9-.8q1.3.3 1.3-.4c0-.4.8-.7-.6-1-1.4-.5-1.3-.2-1.4-.8s0-.6-1-.7-.4-.5-.5-1q-.1-.6-.5-1c-.2-.4-.7-.4-.7-.8q.2-.8-.6-.8c-.8 0-.7 0-.7-.4q0-.8.6-.9.9-.2.7-.9v-1.5l.6-.8 2.3-2c.2-.3.9-.6 1.2 0q.4.9.8 1.2c.2.3 1 0 1.2-.2.2-.4.2-1.5.7-2.2q.8-.9.9-1.4 0-.9.9-1c.9-.1.9-.7.9-1.1s.2-.9 1-1c.6 0 1-.5 1.2.1s.4.7.9.9q.7.5 1.4.2c.4-.3.5-.8 1-.5q.8.4 1-.6l.2-1.5s.1-.4 1-.4.2-.5.6-.8c.5-.4.5-.7 1-.5s1.5-.2 1-.7c-.4-.6-1.4-1.4-.9-2 .6-.6.8-1.7.3-1.8s-1.4.1-1.5-.5-.3-1 .3-1.2c.7 0 1.9 0 2.2-.4s1.5-.5 1.5-1.4c0-1 .3-1 .4-1.6.1-.5.1-1.6-.3-2.1l-1.3-1.6a2 2 0 0 0-1.2-1q-1.2-.2-1.3-.8c0-.6.5 0 .5-1.3s-1-1.6-1-1.6l-1.3-.8s-2.4-.6-3-.6-1.4-.7-.7-1.1q1.2-.8.7-1.8c-.5-1-.5-1-1.5-1.3q-1.5-.3-.9-1.1c.5-.6.6-1 1.2-.6q.9.7 2.2.2 1-.6 1.4-.2c.3.3.8.7 1.4.2.5-.6 1.5-.6 2-.4.5.3 1.6.2 2 0s1-.8 1-1.1.5-1 1-1.2c.4-.3 1-1.1 1.5-1.1s.6-.5.6-.9.4-1 .5-1.2c0-.3 1-.7 1.6-.1s1.5.7 1.5.7h1.4q.8-.4 1.8 0c.6.5 1.6.5 1.6.5l.1-1q.2-.7-.1-1.2c-.4-.3-.9-.6-.1-1.2.7-.5.7-.4 1.4-.4l1.8.1c.6 0 1.5.5 1.5 1s.4.9.8 1.1q.9.4.9 1-.4.6.3.7.9 0 .8.6-.2.7.7.9t.8 1l.1 1c.1.4.8 1.1.8 1.1s1 1.2-.3.6-1.6-.8-2-.7l-.8.3-1 .2c-.6 0-1 1-.3 1.1q1.1.1 1 1c-.1.9-.2.4-.6.8s-.7.2-1.3.2q-1 .1-.8 1c.2.9.2.4.5.8q.5.7 1.2.1c.5-.4.9-.7 1.1.1s.7.8 1.2.8q.8 0 1.2-.3.8-.3 1.2.7.1.9 1 1 .6.4.8.9.2.7.8.3.9-.4 1.5 0l.8 1v.8l1.8.6.2.8q0 .6.7.4h1.3s.7-.3.7-.8.3-.6.7-.6c.5 0 1.5.3 1.8-.2q.6-.8 1.7-.4l2.4.9s-.2 0 .3 1c.6.8 1.6.8 1.6.8l.3 1.1c.2.3 1 .5 1.5.2q.6-.7 1.6-.8 1 0 1-.3c0-.3-.6-.6-.6-1.2s.6-.5.7-1 .6 0 1 .3q.6.4.8 1c.2.6.8 1.5 1.2 1.7.5.2 1.7.3 2-.2s1.3-.6 1.3.5c-.1 1-.3 1 .3 1.4s.8 1.6.2 1.9q-.7.3-.7 1-.2 1.1.2 1.6.8.5.8 1c0 .5.5 1.9.5 1.9s.3 1.5.2 1.8-.2 1 .6.9q1.1-.3 1 .6c-.1.9.3 1-.2 1.2s-.7 1-.3 1.3q.8.2 1 .7c0 .4.8 1 1.3.6q.4-.5.9-.6.7 0 .3-.7-.6-.7-.1-1.2c.4-.2.5-1 .5-1s.6-.8 1.2 0c.7.7.8.4 1.2.4q.7.1.7.9c0 .8 1 .3 1 1l.1 2.3s0 1 .6 1.3.4.4.1.9q-.2.7-.1 1.4c.1.7.1.5-.3.9q-.8.5-.4 1.2c.3.6.2.9 1 1.5.7.6.6.9.6 1.3s.7 1 .7 1.4c0 .5.6 1 1 1s1 .9 1 1.3l.2 1.6s-.1.2.4.2 1 .6 1.1 0q.5-.9 1.1-1c.4-.2 1.2-.5 1.5-.3q.7.4 1.2.3h2.2s.4 0 .7.7 1.1 1.4.7 1.8c-.5.3-.5 1 0 1q1-.1 1.2.4-.1.8.5.5.8-.4 1 0t1 .6q.5.4.9-.2c.3-.4 1.4-.7 1.4-.7s1.5-.3 2-.2l1.3.5s.4.9.2 1.4-.4.4-.2 1.2q.1 1-.5.8-.7-.3-.8.6c-.1.9-.4.8-.4 1.4s0 .5-.3.8q-.7.5 0 .8c.6 0 .4.6.4 1v1s0 .5-.6.5q-1.1-.1-1.3.4c-.2.5-.8 1-.2 1.5q.9.6.1.8c-.4.2-.6 1 0 1.3q1 .4.3.9c-.5.3-1.4.6-1.4 1q0 .7-.8.7-1.2.1-.1 1.6c.6.9.8.7 1.3.7s.4-.7.4-.7h2q.9 0 1.5-.2c.4-.2 1.4-.7 1.4.1s.2.7.7 1 .5.1 1 .6q.4.6.6-.5c.3-.6.9-1.2 1.3-.5s.5.5 1 .5q.9 0 .8.7c-.1.7.6.4 1.2.3s.7.4 1 .8q.3.5.8.4.5.1 1-.4c.3-.3.6-.8 1-.2s1.1.4 1.3-.2 1-1.1 1.5-.4q.6.7 1.3.7t1.4.5c.3.5 1.2 1.2.5 1.7s-1.4 1.2-.8 1.3q.9.2 1.3.8c.4.4 1.6.6 2.1.7s1 .2 1.7-.4c.6-.5 1.3-.5 1.2.2s.3 1.5.3 1.5.4 1 .4 1.5q-.2.4.8 1c1 .6.7.9 1.4.4q.9-.8.8-1.2v-1.4s1-.2 1.3-.4 1.9-1 2.2-.7.9.2 1.2 0h1.5q.6.2 1.8-.6c.7-.6.7-.4 1.2 0s.4 1 .2 1.3 0 1 .6 1q1 0 .8.9l.2 1.3c.1.4.1.5 1.1.8 1 .2.9.8 1 1.3q.4.6-.3.7-.9 0-.8.7c-.1.4-1 .6-1 .6l-.8-.2s-.6 0-.8.4c-.3.3-.9 1-.5 1.6q.6.9 0 1.2c-.4.3-.6 1.5-1 1.3s-.8 0-1.1.2-.3 1.4.4 1.8q1.1.9 1 1l.8 1.3-.5.7c-.2.4-.7 1.3-.2 1.5s.3 1-.2 1-1.2-.2-1.3.5-.4.5-1 .4-2-.4-2.3.3q-.3 1-1 .8c-.7 0-.5 1-.3 1.5s.9 1 .9 1 .5.4.5 1.3-.4.8-.7.2-1.1-.5-1.2.1-.2 1.7-.9 1.7q-.8 0-1.2.6c-.2.3-.7.9-.7 1.2s-.1.7-.6.8c-.4 0-.5 1-.5 1s-1.1.2-1.2.6 0 1.1-.9 1.2q-1.3.3-1.7 1.1-.5.7 0 1.2c.4.4.6 1.8 1 2q1 .3.8 1c0 .8-.6 1.3.1 1.3q1.2 0 1 .8c-.3.6-.3.6-.9.9-.5.3-.8.3-.8 1s.2.6-.3.9q-.6.4-.5 1c0 .6-.1.4-.7 1s-1.3.6-1.8.4q-.5 0-.6-.6c-.1-.6-1-.6-1.4-.5-.5.1-1.1.6-1.1.6s-.8.5-.5 1q.5.8-.4 1c-.7 0-2.2.7-2.6 0-.5-.9-1.8-1.4-2-.3s.6.9.5 2c-.1 1-.3 1-.7 1.3q-.4.4-.4 1c-.1.4-.2 1.4.4 1.7s1 1.3 1 1.8 0 1 .6 1q1.1.2 1.3-.7c.1-.6 1.4-.9 1.5.3s0 1.8.6 2.3l1.2 1.5c.6.6 1 2.4 1 2.4-1 .2-1.2 1.4-1.8 1.6l-1 .2-.5.7c-.7.3-.5-.8-1.4-.4-.7.3-.8 1.2-1.8.8-.6-.2-1-2.3-1.1-2.8 0-.3-.7-1.2-.9-1.5-.6-1-1.8 0-2.2-.3-.7-.4-.4-1.2-1.3-1.2-2-.2-.6 1.1-1.4 1.4-1.5.6-1.5-1.4-2.7-.5-.4.3.7.6.4 1.2-.2.4-1.4 1.2-1.3 1.8.1.8 1 1 1.2 1.7.7 1.7-.4 3-2.2 1.6-1-.8-1.1-2.2-2.6-2.1l-.9.4q-.4-.2-1-.2c-.5.2 0 .6-.1.9l-.9.8c-.4.5-.3 1-.9 1.5-.5.3-.9.1-1.4.7-.6.6-.7 1.5-1.4 2.1-.4.3-.6-.9-1 0q-.2 0-.3.2v.6c1 2-1 2.6-1.7 4-.3.5.5 1 .2 1.4l-1.2 1.4q0 .4-.3.8c-.2.2-.7 0-.8.3 0 .3.6.6.8.8s-.1.5 0 .6c1 1 .4.7.9 1.6 0 .2.4 0 .5.3l-.1.6.8 1.1c0 .3-1.5 1-1.8 1-.9 0 .8-1.8-.7-1.8-.6 0-.6 1.4-.8 1.6h-.8c-.9 0-1.5 1.1-1.9 1.2h-1.1c-.4 0-.8.4-1.2.4q-.2 0-.5-.3l-1.6-.5c-.3 0-.8.4-1 .2-.2-.1.3-.7-.4-1l-.6-1.4q.4-1.2.4-2.5c-.2-1-1.5-1.7-2-2.4-.2-.5-.4-2-1-2.3a5 5 0 0 1-1.4-1.7q.2-.3 0-.8-.5-.3-.8-.8c-.1-.4 0-1.5-.4-1.7-.4-.3-3.3-.6-4-.7q-.5 0-.9-.3l-.4-.5-.9.1h-.7c-1 .6-1.1 1.4-2 2-.9.8-1.8.7-2.7 1.5-.6.5-1 1.7-1.5 2.2-.2.3-.6 0-.7.1l-1.6 1.5s0 .3-.2.4l-1 .2h-1c-.4.2-.4.7-2 1l-.3.2-.6.5h-.6q-.6.1-1 .4c-.9 0-2.2-.4-2.8-.1-.4.1-1.5 1.3-2 1.4h-.6c-.2 0-.5 1.4-.6 1.7l-2 1.7-.5.8q-.3.4-.8.4-.7-.1-1.3-.4c-.7 0-2.7-.2-3.3 0-.6 0-.4 1.9-2 2l-2.7.4s-.6-.4-1.2-.2c-.2 0-.8.7-.8 1v.3l.1.3c-.3.5-1.1 1-1.4 1.6l-.2.3c-.2.2-1.3.6-1.4.8-.3.6.7 1.2.6 1.5-.2.8-1.4 1.6-1.7 2.4-.1.3.4 1.3.3 1.7l-.4 3.3.2 1.3.6.4c.1.2 1.4 2.6 1.4 2.9.2 1.7-2.3 1.1-.8 2.9l.6.8 2.3 1.8c0 .3-1.6.6-1.8.8-.8.8-1.4 2.1-2.1 2.9-.5.4-.9 0-1.4 1-.2.4 0 1.3-.3 1.6-.4.4-.7-.2-1 0-.2 0-.3.6-.4.7-.5.3-4.2 2.3-4.5 2.1-.2 0-.4-.7-.4-.9l-.5-.8c-1-.8-2.4-1-3.3 0l-.6 1-1.6 1.2s-.3.4-.5.3c-.3 0-1.2-1-1.5-1.3-.4-.5-1.6-1.7-1.7-2.2 0-2-1.5-3.9-2.1-5.8h1c1-.6.7-2.4 2.5-1.7.3-.3.2-.6.7-.9q.4 0 .5-.3c.7-1 1.4-4.6.8-5.6-.6-.8-1.2-.8-1.7-2.2v-1.2c0-.4-.7-2.4-.8-2.6l-.5-.5c0-.1-.2-2.3-.1-2.5-.6-1.7-2.8-2.8-2.9-3l-.8-1.4-.5-1.3c0-.2-.4-.4-.4-.7 0-.4 1.2-1.4 1.2-2.1 0-.3-.8-1-.7-1.5s1-1.4 1-2-1.3-2-1.5-2.7c0-.4.5-.7.4-.9l-1.7-1.8c-.1-.3.5-.6 0-1s0-.3-.1-.7l-.8-1.2-1.3-4.6-.6-.8-.4-1s-1.3-.4-1.5-.8c-.2-.3-.2-1.2-.6-1.7q-.2-.3-.6-.4l-.2-.5c-.4-.5-1.1 0-1.6-2l-2-1.4-.2-.3q-.9-.1-1.6-.6l-1.6-.1-.4-.6c-.6-.2-1.7-.1-2.2-.6s-.6-2.2-1.3-2h-.4c-.5-.7-2.2-.8-3-1.2-.2-.1-.8 0-.8-.2l.1-1-1-1.1c-.6-.2-.3-.3-.8-.5-1.1-.1-1.2 0-2 .8l-.8.3c-.4.2-.5 1-1 .6l-.5-.4c-.3-.3-.5-.1-.6-.6-1-.5-3.6 1.2-4.2 0-.5-.3-.8 0-1.2-.3-.2-.2.5-2.4-1.4-3.2l1.4-1v-.8c0-.3.2-1 .1-1.3l-.4-.8-.2-1-.6-.3q-.8-.5-1.4-1.1l-.3-.4c-.3-.2-1.5-.6-1.4-1.1q0-.2.3-.4l.2-.7c.5-.7 1.7-.4 1.5-1.7 0-.6-.5-1.1-.6-1.8l-.4-.5c-1.2-.1-1-1.3-1.4-1.6-1.3-.8-2.2-.3-.8-2 .2-.5-1.2-1.4-1.5-1.6-.5-.5-.2-1.5-.4-2-.1-.3-1-.7-1.2-1l-.4-.8v-.2q.4-.3 0-.8-.2-.2-.5-.2-1.8-1.4-4-2c-.4-.2-.2-.5-.6-.7l-2.3-1c-.3 0-.4-.9-.6-1.1l-.7-.8c0-.8-.5-.9-1-1.3l-.2-.5.5-1.7.5-1-.4-1.8c-.6-1.6-1.3-1.4-1-3.6q0-.6.3-1.1l.2-.3 1-.7c.3-.4.5-1.5 1-1.8.2-.3 1.2-.8 1.3-1q.4-.4.3-1h-1c-.1 0-.5-.4-.9-.4l-.2-.4-.2-.2-1-.3-1.5-.5c-.7-.4-1.5-1.6-2.3-1.7h-2.5c-.6.1-.6-.2-1-.4-.7-.2-.2.4-1.7-.1q-.2-.5.1-.9h-.8c-1.2-.3-.8-1.4-1-2q-.4-.3-1-.2v-.3c.3-.3-.4-1.1-.4-1.2 0-.3 1.5-.5 1.7-.5l-.1-.6.3-1.4-1-1q.3-.2.4-.5c.7-2 1.8-.4 2.8-2.2l.5-1h.2l.6.2q.2-.3.6-.4l.4.1c1.8-.4 1.4-1 2.4-1.8.3-.2 1.1-.2 1.5-.4l1.7 1.1c.5.2 2.3.6 2.6.8l.9.9c1 .5.4-.4 1.4-.2s1.8 1 2.8 1.4h.7c.3 0 2-.4 2.1-.3l.7.3c.2 0 .4-.5.5-.5.7.1.8.4 1.7.3 0 0 .5-2.6 1-2.7.2 0 .9.6 1 .7.4 0 0-.6 0-.6 0-.2-.6-1.8-.5-2h.6q1 0 1.6-.6l.9-1.2-.1-.8.7-.5q.3-.6.8-1c1.7-.2 2.2-1.5 3.7-1.7h.5l.3.5c.1.1 1 .7 1.3.7l.3-.3c.3 0 1.1-.5 1.2-.8q-.2 0 0-.4c0-.1 1-1 1.2-1h1.1l.5.5h.9l.5-.5z"/>
|
|
4
|
+
<path fill="#FFF" d="m281.4 124.5 12.9 39.7-33.8-24.5h41.7l-33.7 24.5zm50.2 8.9 12.9 39.7-33.8-24.5h41.8L318.7 173zm47.9 17.4 13 39.7-33.8-24.5h41.7l-33.8 24.5zm-149.1-26.3-13 39.7 33.8-24.5h-41.7l33.8 24.5-13-39.7zm-50.2 8.9-13 39.7 33.8-24.5h-41.7L193 173l-13-39.7zm-47.7 17.4 12.9 39.7-33.8-24.5h41.7l-33.7 24.5z"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ye" viewBox="0 0 512 512">
|
|
2
|
+
<g fill-rule="evenodd" stroke-width="1pt">
|
|
3
|
+
<path fill="#fff" d="M0 0h512v504.3H0z"/>
|
|
4
|
+
<path fill="#f10600" d="M0 0h512v167.9H0z"/>
|
|
5
|
+
<path fill="#000001" d="M0 344.1h512V512H0z"/>
|
|
6
|
+
</g>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-za" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="za-a">
|
|
4
|
+
<path fill-opacity=".7" d="M70.1 0h499.6v499.6H70.1z"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
</defs>
|
|
7
|
+
<g clip-path="url(#za-a)" transform="translate(-71.9)scale(1.0248)">
|
|
8
|
+
<g fill-rule="evenodd" stroke-width="1pt">
|
|
9
|
+
<path fill="#000001" d="M0 397.9v-296l220.4 147.9z"/>
|
|
10
|
+
<path fill="#000c8a" d="m150.4 499.7 247.4-166.5h351.6v166.5z"/>
|
|
11
|
+
<path fill="#e1392d" d="M134.5 0h615v166.6H397.7S137.8-1.6 134.5 0"/>
|
|
12
|
+
<path fill="#ffb915" d="M0 62.5v39.3l220.4 148L0 397.8v39.4l277.6-187.4z"/>
|
|
13
|
+
<path fill="#007847" d="M0 62.5V0h92.6l294 199h362.8v101.7H386.6l-294 198.9H0v-62.4l277.6-187.4z"/>
|
|
14
|
+
<path fill="#fff" d="M92.6 0h57.8l247.4 166.6h351.6V199H386.6zm0 499.7h57.8l247.4-166.5h351.6v-32.4H386.6z"/>
|
|
15
|
+
</g>
|
|
16
|
+
</g>
|
|
17
|
+
</svg>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-zm" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="zm-a">
|
|
4
|
+
<path fill-opacity=".7" d="M248 0h496v496H248z"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
</defs>
|
|
7
|
+
<g fill-rule="evenodd" clip-path="url(#zm-a)" transform="translate(-256)scale(1.0321)">
|
|
8
|
+
<path fill="#198a00" d="M0 0h744v496H0z"/>
|
|
9
|
+
<path fill="#ef7d00" d="M656.8 178.2H744V496h-87.3z"/>
|
|
10
|
+
<path fill="#000001" d="M569.6 178h87.2v318h-87.2z"/>
|
|
11
|
+
<path fill="#de2010" d="M480.5 178.3h89V496h-89z"/>
|
|
12
|
+
<g fill="#ef7d00" stroke="#000">
|
|
13
|
+
<path stroke-linejoin="round" stroke-width=".9" d="M685.6 63.5s32.9-14 36-16.9c1.5 1.7-13.1 19.4-41.5 26 25.8-6.2 47.8-25.3 52.2-24.7 1.3.3 1 18.7-58 34.6 40.8-10.7 64.6-30.4 64.3-28.2.3.4-4 15.5-39.8 27.2 10-2.3 37-18.8 36.7-15.6.9 1.3-26.2 36-75.1 24.7 39 10.2 64.4-14.3 68-13.9.8.2-7.2 21.4-56.4 22.7 23.6-2.4 16.8-.1 16.8-.1s-14 10.9-30.7 3.5c13.2 3.6 14.6 3.7 14.9 4.9-.9 1.4-11.7 3.6-22.2-2 8.4 3.4 16 4 16.1 5.3a11 11 0 0 1-10.3 1.3c-4.7-2.1-48.8-29.2-48.8-29.2l75-20.6zm-88.2 73.3a6 6 0 0 0-6.7 5.8s-.6.5-.2 3.3l1.6-2.5c.7 0 3.8 1 8.5-2.7-4.3 4.5-1.7 6.2-1.7 6.2s-1 3.6 2.3 4.3c-1-1.5-.4-2.7-.4-2.7s4.6-.5 4.3-6.2c.2 5.1 3 6.4 3 6.4s0 2.8 3 3c-1.6-1.4-1.3-3.6-1.3-3.6s4-2.9.6-7.7c2-1.1 3.7-4.3 3.7-4.3s-2.8-1.2-4-2.2c-.6-1.2 0-8.2 0-8.2l-1.7-9-4.7 14c.2-2 .3 6-6.3 6z"/>
|
|
14
|
+
<path stroke-linejoin="round" stroke-width=".9" d="M630 116.5c.1.2 5 5.5 9.6 5.2 1.7-1.4-3.7-4.6-3.7-5.3 2 1.7 9.9 8.5 15 6 2-2.8-3.7-2.4-9.9-10.2 4.3 2.9 15.2 9.3 20.3 6.8 2.1-2.3-11.3-9.6-15.8-15.2l-11.6-6-15.8 13z"/>
|
|
15
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width=".9" d="M612.2 72.5s5.4-3.2 26.8-1.6c2.3.3 14.6-4.2 18.5-5.5 6.2-1.1 26-5.5 31.4-9.5 3.8-.5-1 7-5.8 8.7-5 2.3-23.4 8.7-30 7.8 7.9.1 3.5 6.5-9.5 3.4 6.2 3.5 4 4.1 4 4.1s-11 .6-14-1.9c7.4 2.8 4.4 3.8 4.4 3.8s-7.6.7-11-.9c5.3 1.6 2.6 2.6 2.6 2.6s-4.4.7-8-.6-9.1-10.4-9.4-10.4"/>
|
|
16
|
+
<path stroke-linejoin="round" stroke-width=".9" d="m620.8 119.5.8 14.2-.8 1.1c-.4.5-10-1.5-8.7 6 0 3 0 3.7 2 5.4-.5-2-.3-3.4-.3-3.4s2.7 1.7 5.4-2.8c-1.8 4.4-.5 6-.1 6 .4.9-.7 4.5 2.9 4.4-1.4-1.3-.7-3.3-.7-3.3s3.8-.6 2.4-7.5c1.4-1.4 2 0 2 0s.4 4 3.7 3.2c1.5.9-.2 3.1-.2 3.1s2.4 0 3.1-2 1.6-5.7-2.4-7.2c-.5-1.5 1.6-1.6 1.6-1.6s2.5.8 3.3 2.1.4-3.3-2.7-3.8c-3.9-.1-4.1-1-4.1-1.1l-1-13.2z"/>
|
|
17
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M634.3 131.6c0-.7-6.6-9.6-5-10.8 1.7.4 4.5 4.5 6.7 3.1-.6-1.6-2.6-.7-5-4.7-2.2-4.6-2.5-11.5-10.5-19 5.2 8 16.9 12.6 17.4 10.2s-10.3-11-9.8-13.2c2.1 4.4 13 14 21 13.3.5-1.9-6.6-5.7-8.4-9.2-5-3.4-18.7-15.2-19-17.9a32 32 0 0 0-9.5-10.3q-.8-1-.8-1.7c-3.1-7.2 1-9.6 3.4-10 2-.1 2.5.1 4-.5l-5.1-2c2.2 1.6 7.8.2 6.5 4.8 2.5-.9 7.7-7-5.9-8.5-4.4-5-22.5-8-27 14.1.3.3.5.6 1.7 1.5-5.8-2.8-21.2-5-26.8-5.8-15-4.4-30.6-14.8-32.1-13.6-2 1 9 11.3 8.5 11.5-9.7-5.6-18.4-9.6-26.6-13.2-5.8-2.2-11.5-7.2-12.2-6.2-2 4.4 9.3 15.4 11.4 16.7s18.7 9 18.4 9c-25-11.3-29.2-13.4-30.4-14.7-2.2-.5-7.6-7.7-9-7.3-.9.8.7 12.3 12.7 17.4 2 1.4 25.5 10 25.3 10.6l-28.1-11.6c-5.2-2-11.6-9.2-12.8-8.4-1.1.8 3 8.5 8.2 11 2.8 1.2 13.3 6.4 22.9 9.7.6.3-17.1-6.7-25.7-10.3-3.8-2-5.7-4.8-6.2-4.2-1 .6 1.4 12 28.8 18.5.7.3 9.6-2.1 9.2-1.8a112 112 0 0 1-15.4 2.7c-.3.8 1.7 4.9 15.9 4 1.8 0 11.6-3.5 10.8-2.8-.4.4-13.4 4.6-14.4 4.7-.8 0-5.4.6-5.5 1-.2.7 3.3 3.6 11 4 6.7.4 19.4-4 19.2-3.7-.3.3-12.3 4.4-12.7 4.6-.4.3-4.8.5-5 .9-.3.8 6.4 7.1 26.3.4-2 2.7-11.6 4.5-11.6 5s2.1 2.5 5.5 3.2c1.7.4 4 .3 6 0a25 25 0 0 0 13-7c.5 1.5-12.7 8.3-12.1 8.9 2.9 2.7 12.4-.4 13-.7A148 148 0 0 0 587 91.7c.3 1.5-23 14.2-22.7 14.7 1.5 2.3 9.5-.2 9.8-.4l10.4-5.6c.3-.2-11.4 6.9-10.4 8-.5 4.5 18.3-3.2 19.8-4.2.7-.5-9 4.3-9 6.6 3 5.3 13.2 3.6 14.7 2.4.8-.5-1 4-.4 3.6a17 17 0 0 0 3-4.2c-.2 1.5-1.4 3.8-2 6.5s-.8 5.8-1.7 9c-.2 1.4 6.2-2.8 5.3-12.8.5 5.2-2 15-1.4 15.4 1.4 1 5-4.8 5.5-8.8 1 2 3.4 6.2 5.4 7.2-.2-3 0-3-.9-5.9q.6-6.2.7-15.6c5.5 10.4 7.6 14.8 6.1 22.8 1.6.7 4.2-5.6 4-8.8 2 9 11 10.3 11.2 10z"/>
|
|
18
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M543.9 65.6s-3.7 2.8-8.3 2.6c1.1 4.6 10.7 1.1 10.7 1.1s-4.6 5.1-8 6c2 1.5 10.3 1 11.7.2s3.9-4 3.9-4-8.5 9.8-9.8 9.7c-.1 1.1 9 .7 10.9-1s6.6-4.3 6.6-4.3-12.5 8.7-13 8.7c4.6 1.3 14-1.4 20-5.1-8.9 5.9-9.7 7-14.2 9 4 .8 6 3.5 19.7-2.4 7.8-3.7 12.2-10.4 12.2-10.4a79 79 0 0 1-21 17.4c-.4 1 9.1 5 21.3-7.6"/>
|
|
19
|
+
<path stroke-linecap="round" d="M609.9 93s.8 3.9 4 6.8c3.3 3 3.6 5.9 3.6 5.9m-9.3-37.8s1.2 3.5 4.5 5.7a38 38 0 0 1 9 10.4 114 114 0 0 1 2.3 13.4m-36.7-24.2c.2 1.4-4.8 8 2.1 15.8-6.3 7.7-6.3 8.7-6.3 8.7s3.5 2 9.9-3.5c10.4 12.8 7 18.7 7 18.7"/>
|
|
20
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M599 103.9s-.9-1.4.8-6.5c1.6 1.8 3.3 2.2 4 3s8.7 1.9 9.2 7.1"/>
|
|
21
|
+
<path d="M608.3 55.7c0-.4-1.6-3.8-7.5.4 3.2.2 6.3 2 7.5-.4z"/>
|
|
22
|
+
<path stroke-linejoin="round" d="M664.7 71.2c.3.2 17.7 4 23.5 2-7.4 9.9-22.2 3.2-22.2 3.2 7.3 2.2 7.6 2 9.9 4 .7 2-13.3 1.1-18-1.5 13 4 13.2 3.8 13.6 5.3.6 2.2-21-.5-23-3.4 5.8 4.5 9 5.3 12.2 7.4-4 1.7-11.2 3.4-24.5-6 17.5 16 33.3 15 35.8 17.8-6.1 9-29.7-5.3-40.6-12.6-10.8-7.2 23.8 17.5 27 17.1-1.6 2.5-13 .3-13.8-.9"/>
|
|
23
|
+
<path stroke-linecap="round" d="M669.2 87.9c-2 .3-8 .3-9 .1"/>
|
|
24
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M538.8 63s13.2 7 18.8 6.5c-1.5 1.4-3.7 2-3.7 2 1.4.5 5.2 2.6 11 1.2-1.3 1.4-3.1 3-3.1 3s5 1.9 10.6-1l-2.7 3.6 4 .3"/>
|
|
25
|
+
</g>
|
|
26
|
+
</g>
|
|
27
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-zw" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="zw-a">
|
|
4
|
+
<path fill="#00f" fill-rule="evenodd" d="M1.3-.1h421.4v420.2H1.3z"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
</defs>
|
|
7
|
+
<g clip-path="url(#zw-a)" transform="matrix(1.2149 0 0 1.2184 -1.5 .1)">
|
|
8
|
+
<path fill="#006400" d="M0 0h840v420H0z"/>
|
|
9
|
+
<path fill="#ffd200" d="M0 60h840v300H0z"/>
|
|
10
|
+
<path fill="#d40000" d="M0 120h840v180H0z"/>
|
|
11
|
+
<path fill="#000001" d="M0 180h840v60H0z"/>
|
|
12
|
+
<path stroke="#000" stroke-width="20" d="M0 0v420l280-210z"/>
|
|
13
|
+
<path fill="#fff" d="M0 0v420l280-210z"/>
|
|
14
|
+
<path fill="#d40000" d="M106.5 104.4 162 275.1 16.8 169.6h179.5L51 275.1z"/>
|
|
15
|
+
<path fill="#fc0" d="m82.8 253.7 9.8-1.8 18.1-.7 6.7.6 15 2.5 1.1-1.5V242l1.8-9.3 3-9.4 3.3-7.5 4.2-7.8 6.8 1.7h1.8l.2-1.3-14.4-12.3-15-11.5-21.7-16.2-2-.5-2.3-17-1.7-5.1-2.3-2-4.3-1.4-4.8.2-2.2 1.2-4.6 1-2.4.4-1.6 1.9-.2 2.4 6.7.2 1.7.7-.2.7-3.8.5-1.8.6 2.1 1.6 2.2.8 2.8 1 .6 2 .2 25.8-1.5 4-.5 7.5 2.2 9-5.6 6.4L77 216l-.6 3.5-1.7 3.5-.2 2.2 1.1 2.4 4.3 14.2 2.2 11.7z"/>
|
|
16
|
+
<path d="M88 142c-1.8 0-2.6.2-4.3 1.1a11 11 0 0 1-4.6 1.4c-2.5 0-4.5 1.8-4.5 4.1v1.5l3.6-.1c10.6.3 1 1.3.2 1.4-2.6.5.6 2.6 3.7 3.7 3.3 1 3.1.4 3.1 15 0 11.9 0 13.6-1 16.3-1.3 4-1.3 10 0 14 .6 1.6 1 3 1 3.3s-1.6 2.1-3.5 4.3c-3.5 4-5.6 8.1-5.6 11a6 6 0 0 1-1 2.6c-1.3 1.7-1.3 4.6-.1 5.7 1.3 1.2 6.6 21.8 6.7 25.7 0 1.4.2 1.4 8.3-.2 6.6-1.3 22.1-1.6 30-.6 3.6.5 7.8 1.3 9.3 1.6 4.8 1.3 4.6 1.5 4.6-4.3a74 74 0 0 1 5.1-26.7 95 95 0 0 1 6.9-14s1.8.2 4 .8c4.1 1 5.3.9 5.3-1 0-1-4.3-4.6-25.4-21a432 432 0 0 0-26.3-19.9q-1 0-1.3-.7l-1.5-9.5c-.7-4.9-1.7-9.7-2.1-10.7q-2-4.4-8.6-4.8zm.1 1h2c6.6.4 7.8 2.2 9.6 14l1.2 9.4q.1 1.1-3.2 3.3a47 47 0 0 0-10 9.5l-1.3 1.8-.3-4.2V165c.3-8.7 0-9.5-2.8-10.5-2.3-.8-5.3-1.6-4.5-2.1 1-.6 2-.2 4.4-.9 1-.2.9-.1.7-.9-.2-1.3-1.6-2-5.3-1.8-3 .2-3.3.1-3.1-.7q.7-2.4 4.5-2.9a13 13 0 0 0 4.4-1.3 7 7 0 0 1 3.7-1zm14.9 25.8h.4c1.7.3 50.8 38.7 50.8 39.8q0 .7-1 .7c-.4 0-12.9-3.5-27.7-7.8-23.6-7-27-8-28-9.3a5 5 0 0 1-.1-6.2 5 5 0 0 0 1-2c0-1.2-2.5 1.8-3 3.5-.5 2 .5 5.4 2 6.5.6.5 5.1 2 10 3.5 8.4 2.4 9 2.7 9.4 4.1 1 3.3-2.5 7.2-7.5 8.3a15 15 0 0 0-5.2 2.4 68 68 0 0 1-17.2 10.4c-.4.3-.9 1.9-1.2 3.4-.6 3.3-.8 3.8-1.8 3.8q-.8.1-.2-1.4c.7-2 .6-4.4-.1-4.4q-.7 0-.7 1.8c0 1-.3 2.2-.7 2.5-.5.6-.6.2-.4-2.3.2-1.7.1-3-.1-3-.5 0-1.4 2.5-1.7 4.7q-.2 2-.6-.3c-.3-1.2-.2-2 .7-3.5a9 9 0 0 0 1-3.5c0-1.3 1-2.6 5.7-7.3 3-3.1 6.7-7 8-8.7 2.3-2.8 2.4-3 2.3-5.9 0-1.6-.2-3.1-.4-3.3-.6-.6-1.4 2.6-1 4.3.2 1.6 0 2.1-3.3 6a113 113 0 0 1-7.5 7.8c-3.9 3.6-5.3 5.6-5.3 7.4 0 .6-.4 2-1 3.3s-.8 2.6-.6 2.9q.2.5-.3 0-.7-.6-.1-3a7 7 0 0 0 .2-2.6c-.5-1-1.2.2-1.5 2.7-.2 1.4-.5 2.5-.8 2.3-.7-.4-.5-3 .4-4.4.5-.7 1-2.3 1.3-3.6.7-3.7 2.3-6.7 5.8-10.7l3.2-3.8-1-3.3a25 25 0 0 1-.2-13.7q1.9-5.6 8-11.7c4-3.9 7.9-6.3 10-6.4m15 32.2a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m2.5.3a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m2.6.5a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m2.4.5a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m-6.3.6a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m2.4.4a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m5.2.2a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m-2.7 0a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m5 .6c.1 0 3.7.8 8 2l7.9 2.3-1.5 2.7-2.4 4.4c-1 2-1.2 2-6 .9-5.2-1.2-13.4-2.3-21.8-3l-8-.7 3-1.1 5.3-2.4c2-1.1 2.8-1.3 5.9-1q6.8.4 8.7-2.4l1-1.7zm-8.8.6a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m5.6 0a.9.6 0 0 1 1 .6.9.6 0 0 1-1.6 0 .9.6 0 0 1 .7-.6zm-8 0a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.5zm5.3.2a.9.6 0 0 1 1 .5.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.5m-6.6 1.1a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m2.5 0a.9.6 0 0 1 1 .7.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6zm2.6.2a.9.6 0 0 1 1 .5.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.5m2.8 0a.9.6 0 0 1 1 .6.9.6 0 0 1-1.7 0 .9.6 0 0 1 .7-.6m-20.3 8.1a191 191 0 0 1 35.1 4.2c.1.1-.6 2.5-1.7 5.4l-2 6q0 .7-2.5.3c-8.3-1.3-32.3-1.2-41.5.2-5.3.8-6 .7-5.6-.4l1-3.5.6-2.7L93 221a63 63 0 0 0 10.2-6.5h.9zm-27 14.2q.5 0 1.6.8c1 .6 2.2 1.1 2.7 1.1 2.6 0 4 3.7 6.2 16l.8 4.4c.2 1 0 1.2-2.3 1.7-2.8.6-3.5.7-3.5.3 0-1-2.8-13.7-4-18.2l-1.6-6h.1zm28.6 2h2.9l-1 1c-1.7 2-2.5 2.1-3.7.8l-1-1.5c0-.2 1.3-.4 2.8-.4zm6.1 0h5.4l-1.2 1.2c-1.4 1.6-1.5 1.6-3 0l-1.2-1.3zm8.2 0h1.3c.7 0 2 0 2.8.2l1.5.3-1.4 1.3q-1.3 1.2-1.6 1.2l-1.4-1.6zm8.5.3 1.2.3c.7.2 2.2.3 3.3.4h2l-1.5 1.3-1.8 1.3c-.1 0-1-.8-1.7-1.7zm-30.2.1h.2q.1.5-1 1.7l-1 1.4-1.5-1.2-1.5-1.3 2.4-.3zm2.3.2 1.6 1.4 1.6 1.5-3 .2-3 .1 1.4-1.5zm18 0q.4 0 .8.3l1.3 1.7q.8 1.1-1 1l-2.5-.5-1.2-.3 1.3-1.3q.8-1 1.4-1zm-8.3 0q.7-.1 1.6 1.3c.7 1.1.7 1.1-2 1.1h-2.7l1.4-1.3q1-1 1.7-1zm17 .2 1.2 1.2q2.1 2 .6 2l-2.8-.3-2.2-.2 1.6-1.3zm-35.2.7q.5 0 1.6 1.2l1.2 1.3-2.5.4-3.5.5q-1.1.3 1-1.6 1.7-1.7 2.2-1.8m-3.7 0h.4c.8.2.8.4-.6 1.8l-1.5 1.5-.5-1.3c-.4-1-.3-1.3.6-1.7zm46 1.8q.3 0 0 .6c-.2.8-1.1 1-1.1.2q0-.3.7-.7zm-21.4 1.6c7.7 0 15.5.2 17.4.4 3.1.4 3.4.5 3.4 1.7 0 1.4-.4 1.5-4.6.8-1.2-.3-6.3-.7-11.2-1.1a150 150 0 0 0-28.5 1c-1.9.2-2.4 0-2.4-.6 0-1.3 10.2-2.2 25.9-2.2m-10.3 2.9h5.4l-1.2 1.3c-1.5 1.6-1.6 1.6-3 0zm7 0 1.4 1.4 1.4 1.6-2.9.1h-2.9l1.5-1.6zm2.1 0h5.4l-1.2 1.3c-1.4 1.6-1.5 1.6-3 0zm-12.8 0q.3 0-.7 1.5-1.2 1.5-1.5 1.6-.5-.1-1.5-1.3l-1.2-1.3H96a9 9 0 0 0 2.7-.4zm2 .5 1.3 1.2 1.5 1.3-2.6.2-2.9.2 1.4-1.5zm17.4 0 1.4 1.6c1.6 1.7 1.5 1.8-2.1 1.1l-1.7-.3 1.2-1.2zm2 0h2.4q3.8-.1 1.4 1.8c-1.2 1-1.2 1-2.6-.5zm-30.6.5c1.2 0 1.1.1-.4 1.6-1.1 1.1-1.2 1.1-1.6.3q-.3-1.6 2-1.9m38.8.2 2 .2 2.3.4-1.3 1.2-1.2 1.2-1.1-1.4-1-1.6zm-36 .5q.4 0 1.1.7c1 1 1 1 .2 1.4l-2.4.4H90l1.3-1.4q1-1 1.3-1.1zm34.1.3q.5-.1 1.2 1l.9 1.2h-2.1q-2 0-2-.6.3-.7 1.3-1.3zm6.4 1.3q.3 0 .2.5c0 1-.9 1.7-1.3 1q-.1-.5.5-1.1zm-25.9 1.2c8.7 0 18.3.6 24 1.6l1.6.3v4.4c0 3.3-.2 4.4-.7 4.4l-5-1a126 126 0 0 0-35-1l-2.3.3-.6-3.7-.4-3.8s2.3-.5 5-.8c3.3-.5 8.2-.7 13.4-.7"/>
|
|
17
|
+
<path id="zw-b" d="M124.8 217.8c-3 0-5.1 2.1-5.1 5.2 0 4.8 5.4 7.2 8.6 3.8s1-9-3.5-9m0 1.2a4 4 0 0 1 4 4c0 3-3.3 5-6 3.7-2.7-1.5-2.5-6.1.4-7.3z"/>
|
|
18
|
+
<use xlink:href="#zw-b" width="100%" height="100%" x="-20.1" y="-.6"/>
|
|
19
|
+
<path d="M88 145.3a1.7 1.8 0 0 0-1.6 1.7 1.7 1.8 0 1 0 3.5 0 1.7 1.8 0 0 0-1.9-1.7m.1.6a1.2 1.2 0 0 1 1.2 1.1 1.2 1.1 0 1 1-2.4 0 1.2 1.2 0 0 1 1.2-1.1"/>
|
|
20
|
+
</g>
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
class ConnsTableView < RubyQt6::Bando::QWidget
|
|
2
|
+
class SortFilterProxyModel < RubyQt6::Bando::QSortFilterProxyModel
|
|
3
|
+
def filter_accepts_row(source_row, source_parent)
|
|
4
|
+
{
|
|
5
|
+
COLUMN_PROCESS_NAME => parent.processfilter,
|
|
6
|
+
COLUMN_PROTOCOL => parent.protocolfilter,
|
|
7
|
+
COLUMN_STATE => parent.statefilter,
|
|
8
|
+
COLUMN_USER => parent.userfilter
|
|
9
|
+
}.each do |column, filter|
|
|
10
|
+
filter_value = filter.current_text
|
|
11
|
+
next if filter_value == "*"
|
|
12
|
+
|
|
13
|
+
value = source_model.data(source_model.index(source_row, column)).value
|
|
14
|
+
next if filter_value == value
|
|
15
|
+
next if column == COLUMN_PROTOCOL && value.starts_with(filter_value)
|
|
16
|
+
|
|
17
|
+
return false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def less_than(lhs, rhs)
|
|
24
|
+
case lhs.column
|
|
25
|
+
when COLUMN_PROCESS_NAME
|
|
26
|
+
less_than_process_name(lhs, rhs)
|
|
27
|
+
when COLUMN_LOCAL_ADDRESS, COLUMN_REMOTE_ADDRESS
|
|
28
|
+
less_than_column_address(lhs, rhs)
|
|
29
|
+
when COLUMN_PROCESS_ID, COLUMN_LOCAL_PORT, COLUMN_REMOTE_PORT
|
|
30
|
+
less_than_column_numeric(lhs, rhs)
|
|
31
|
+
else
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def less_than_process_name(lhs, rhs)
|
|
39
|
+
lhs_data = source_model.data(lhs).value
|
|
40
|
+
rhs_data = source_model.data(rhs).value
|
|
41
|
+
case lhs_data <=> rhs_data
|
|
42
|
+
when +0
|
|
43
|
+
lhs = source_model.index(lhs.row, COLUMN_STATE)
|
|
44
|
+
rhs = source_model.index(rhs.row, COLUMN_STATE)
|
|
45
|
+
less_than(lhs, rhs)
|
|
46
|
+
when +1
|
|
47
|
+
false
|
|
48
|
+
when -1
|
|
49
|
+
true
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def less_than_column_address(lhs, rhs)
|
|
54
|
+
lhs_data = IPAddr.new(source_model.data(lhs).value.to_s)
|
|
55
|
+
rhs_data = IPAddr.new(source_model.data(rhs).value.to_s)
|
|
56
|
+
return false if lhs_data.ipv6? && rhs_data.ipv4?
|
|
57
|
+
return true if lhs_data.ipv4? && rhs_data.ipv6?
|
|
58
|
+
lhs_data < rhs_data
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def less_than_column_numeric(lhs, rhs)
|
|
62
|
+
lhs_data = source_model.data(lhs).value.to_s.to_i
|
|
63
|
+
rhs_data = source_model.data(rhs).value.to_s.to_i
|
|
64
|
+
lhs_data < rhs_data
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
class ConnsTableView < RubyQt6::Bando::QWidget
|
|
2
|
+
class StatusBar < RubyQt6::Bando::QWidget
|
|
3
|
+
def initialize(storeproxymodel)
|
|
4
|
+
super()
|
|
5
|
+
|
|
6
|
+
@storeproxymodel = storeproxymodel
|
|
7
|
+
|
|
8
|
+
initialize_labels
|
|
9
|
+
|
|
10
|
+
mainlayout = QHBoxLayout.new(self)
|
|
11
|
+
mainlayout.add_widget(@connections_label)
|
|
12
|
+
mainlayout.add_widget(@established_label)
|
|
13
|
+
mainlayout.add_widget(@listening_label)
|
|
14
|
+
mainlayout.add_widget(@time_wait_label)
|
|
15
|
+
mainlayout.add_widget(@close_wait_label)
|
|
16
|
+
mainlayout.add_stretch
|
|
17
|
+
mainlayout.add_widget(@check_internal_label)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def refresh
|
|
21
|
+
connections = @storeproxymodel.row_count
|
|
22
|
+
established = 0
|
|
23
|
+
listening = 0
|
|
24
|
+
time_wait = 0
|
|
25
|
+
close_wait = 0
|
|
26
|
+
|
|
27
|
+
0.upto(connections - 1) do |row|
|
|
28
|
+
index = @storeproxymodel.index(row, COLUMN_STATE)
|
|
29
|
+
text = @storeproxymodel.data(index).value
|
|
30
|
+
case text
|
|
31
|
+
when Netmon::Connection::STATE_ESTABLISHED then established += 1
|
|
32
|
+
when Netmon::Connection::STATE_LISTEN then listening += 1
|
|
33
|
+
when Netmon::Connection::STATE_TIME_WAIT then time_wait += 1
|
|
34
|
+
when Netmon::Connection::STATE_CLOSE_WAIT then close_wait += 1
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
@connections_label.set_text("CONNECTIONS: #{connections}")
|
|
39
|
+
@established_label.set_text("ESTABLISHED: #{established}")
|
|
40
|
+
@listening_label.set_text("LISTENING: #{listening}")
|
|
41
|
+
@time_wait_label.set_text("TIME WAIT: #{time_wait}")
|
|
42
|
+
@close_wait_label.set_text("CLOSE WAIT: #{close_wait}")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def initialize_labels
|
|
48
|
+
@connections_label = initialize_label("", "#000000")
|
|
49
|
+
@established_label = initialize_label("", COLORS_TCP_STATE[Netmon::Connection::STATE_ESTABLISHED])
|
|
50
|
+
@listening_label = initialize_label("", COLORS_TCP_STATE[Netmon::Connection::STATE_LISTEN])
|
|
51
|
+
@time_wait_label = initialize_label("", COLORS_TCP_STATE[Netmon::Connection::STATE_TIME_WAIT])
|
|
52
|
+
@close_wait_label = initialize_label("", COLORS_TCP_STATE[Netmon::Connection::STATE_CLOSE_WAIT])
|
|
53
|
+
|
|
54
|
+
value = NetmonQt.settings.GET_connections_check_interval / 1_000
|
|
55
|
+
@check_internal_label = initialize_check_internal_label("Refresh Internal: #{value} sec", "#000000")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def initialize_label(text, color)
|
|
59
|
+
label = QLabel.new(text)
|
|
60
|
+
label.set_fixed_width(128)
|
|
61
|
+
label.set_style_sheet("color: #{color};")
|
|
62
|
+
label
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def initialize_check_internal_label(text, color)
|
|
66
|
+
label = QLabel.new(text)
|
|
67
|
+
label.set_fixed_width(192)
|
|
68
|
+
label.set_style_sheet("color: #{color};")
|
|
69
|
+
label.set_alignment(Qt::AlignRight | Qt::AlignVCenter)
|
|
70
|
+
label
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
class ConnsTableView < RubyQt6::Bando::QWidget
|
|
2
|
+
# rubocop:disable Layout
|
|
3
|
+
COLUMN_CONNECTION_KEY = 0
|
|
4
|
+
COLUMN_PROCESS_NAME = 1
|
|
5
|
+
COLUMN_PROCESS_ID = 2
|
|
6
|
+
COLUMN_PROTOCOL = 3
|
|
7
|
+
COLUMN_STATE = 4
|
|
8
|
+
COLUMN_USER = 5
|
|
9
|
+
COLUMN_LOCAL_ADDRESS = 6
|
|
10
|
+
COLUMN_LOCAL_PORT = 7
|
|
11
|
+
COLUMN_REMOTE_ADDRESS = 8
|
|
12
|
+
COLUMN_REMOTE_PORT = 9
|
|
13
|
+
|
|
14
|
+
# TCP: Use Traffic Light Color Palette
|
|
15
|
+
COLORS_TCP_STATE = {
|
|
16
|
+
Netmon::Connection::STATE_ESTABLISHED => "#27AE60",
|
|
17
|
+
Netmon::Connection::STATE_LISTEN => "#2980B9",
|
|
18
|
+
Netmon::Connection::STATE_SYN_SENT => "#F1C40F",
|
|
19
|
+
Netmon::Connection::STATE_SYN_RECV => "#F1C40F",
|
|
20
|
+
Netmon::Connection::STATE_FIN_WAIT1 => "#8E44AD",
|
|
21
|
+
Netmon::Connection::STATE_FIN_WAIT2 => "#8E44AD",
|
|
22
|
+
Netmon::Connection::STATE_CLOSING => "#9B59B6",
|
|
23
|
+
Netmon::Connection::STATE_CLOSE_WAIT => "#E67E22",
|
|
24
|
+
Netmon::Connection::STATE_LAST_ACK => "#D35400",
|
|
25
|
+
Netmon::Connection::STATE_TIME_WAIT => "#7F8C8D",
|
|
26
|
+
Netmon::Connection::STATE_CLOSE => "#C0392B"
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
# UDP: Use Blue To Cyan Color Palette
|
|
30
|
+
COLORS_UDP_STATE = {
|
|
31
|
+
Netmon::Connection::STATE_ESTABLISHED => "#1ABC9C",
|
|
32
|
+
Netmon::Connection::STATE_LISTEN => "#3498DB",
|
|
33
|
+
Netmon::Connection::STATE_SYN_SENT => "#9B59B6",
|
|
34
|
+
Netmon::Connection::STATE_SYN_RECV => "#9B59B6",
|
|
35
|
+
Netmon::Connection::STATE_FIN_WAIT1 => "#34495E",
|
|
36
|
+
Netmon::Connection::STATE_FIN_WAIT2 => "#34495E",
|
|
37
|
+
Netmon::Connection::STATE_CLOSING => "#34495E",
|
|
38
|
+
Netmon::Connection::STATE_CLOSE_WAIT => "#34495E",
|
|
39
|
+
Netmon::Connection::STATE_LAST_ACK => "#34495E",
|
|
40
|
+
Netmon::Connection::STATE_TIME_WAIT => "#BDC3C7",
|
|
41
|
+
Netmon::Connection::STATE_CLOSE => "#95A5A6"
|
|
42
|
+
}
|
|
43
|
+
# rubocop:enable Layout
|
|
44
|
+
|
|
45
|
+
class Store
|
|
46
|
+
DataItem = Struct.new(:keyitem)
|
|
47
|
+
|
|
48
|
+
attr_reader :itemmodel
|
|
49
|
+
|
|
50
|
+
def initialize(parent)
|
|
51
|
+
@geoiolookup = begin
|
|
52
|
+
MaxMind::DB.new(NetmonQt.settings.GET_geolite2_mmdb, mode: MaxMind::DB::MODE_MEMORY)
|
|
53
|
+
rescue Errno::EACCES, Errno::ENOENT
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
@active_processes = Set.new
|
|
57
|
+
@active_protocols = Set.new
|
|
58
|
+
.add(Netmon::Connection::PROTOCOL_TCP)
|
|
59
|
+
.add(Netmon::Connection::PROTOCOL_UDP)
|
|
60
|
+
.add(Netmon::Connection::PROTOCOL_TCP4)
|
|
61
|
+
.add(Netmon::Connection::PROTOCOL_TCP6)
|
|
62
|
+
.add(Netmon::Connection::PROTOCOL_UDP4)
|
|
63
|
+
.add(Netmon::Connection::PROTOCOL_UDP6)
|
|
64
|
+
.freeze
|
|
65
|
+
@active_states = Set.new
|
|
66
|
+
.add(Netmon::Connection::STATE_ESTABLISHED)
|
|
67
|
+
.add(Netmon::Connection::STATE_LISTEN)
|
|
68
|
+
.add(Netmon::Connection::STATE_SYN_SENT)
|
|
69
|
+
.add(Netmon::Connection::STATE_SYN_RECV)
|
|
70
|
+
.add(Netmon::Connection::STATE_FIN_WAIT1)
|
|
71
|
+
.add(Netmon::Connection::STATE_FIN_WAIT2)
|
|
72
|
+
.add(Netmon::Connection::STATE_CLOSING)
|
|
73
|
+
.add(Netmon::Connection::STATE_CLOSE_WAIT)
|
|
74
|
+
.add(Netmon::Connection::STATE_LAST_ACK)
|
|
75
|
+
.add(Netmon::Connection::STATE_TIME_WAIT)
|
|
76
|
+
.add(Netmon::Connection::STATE_CLOSE)
|
|
77
|
+
.freeze
|
|
78
|
+
@active_users = Set.new
|
|
79
|
+
.add(Etc.getpwuid.name)
|
|
80
|
+
|
|
81
|
+
@dataitems = {}
|
|
82
|
+
@itemmodel = QStandardItemModel.new(parent)
|
|
83
|
+
@itemmodel.set_horizontal_header_labels(
|
|
84
|
+
QStringList.new
|
|
85
|
+
.push("Connection Key")
|
|
86
|
+
.push("Process Name")
|
|
87
|
+
.push("Process ID")
|
|
88
|
+
.push("Protocol")
|
|
89
|
+
.push("State")
|
|
90
|
+
.push("User")
|
|
91
|
+
.push("Local Address")
|
|
92
|
+
.push("Local Port")
|
|
93
|
+
.push("Remote Address")
|
|
94
|
+
.push("Remote Port")
|
|
95
|
+
)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def active_processes
|
|
99
|
+
@active_processes.sort
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def active_protocols
|
|
103
|
+
@active_protocols.to_a
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def active_states
|
|
107
|
+
@active_states.to_a
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def active_users
|
|
111
|
+
@active_users.sort
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def refresh
|
|
115
|
+
srv = ConnsLookupService.new
|
|
116
|
+
conns = srv.perform
|
|
117
|
+
|
|
118
|
+
removed = @dataitems.keys - conns.keys
|
|
119
|
+
removed.each do |key|
|
|
120
|
+
update_itemmodel_removeitem(key)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
conns.each do |key, conn|
|
|
124
|
+
dataitem = @dataitems[key]
|
|
125
|
+
dataitem.nil? ? update_itemmodel_additem(key, conn) : update_itemmodel_updateitem(dataitem, conn)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
private
|
|
130
|
+
|
|
131
|
+
def initialize_standarditem(*args)
|
|
132
|
+
item = QStandardItem.new(*args.compact)
|
|
133
|
+
item.set_editable(false)
|
|
134
|
+
item
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def initialize_icon_process(comm)
|
|
138
|
+
icon =
|
|
139
|
+
case comm
|
|
140
|
+
when "adb" then "android-file-transfer"
|
|
141
|
+
when "fcitx5" then "fcitx"
|
|
142
|
+
when "kdeconnectd" then "kdeconnect"
|
|
143
|
+
when "msedge" then "microsoft-edge"
|
|
144
|
+
when Netmon::Connection::COMM_DEFUNCT then "error"
|
|
145
|
+
when Netmon::Connection::COMM_UNKNOWN then "question"
|
|
146
|
+
else comm
|
|
147
|
+
end
|
|
148
|
+
icon = QIcon.from_theme(icon)
|
|
149
|
+
icon.null? ? QIcon.from_theme("terminal") : icon
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def initialize_icon_ipaddress(ipaddress)
|
|
153
|
+
return if @geoiolookup.nil?
|
|
154
|
+
|
|
155
|
+
islocal = Netmon.local_address?(ipaddress)
|
|
156
|
+
return QIcon.from_theme(QIcon::ThemeIcon::Computer) if islocal
|
|
157
|
+
|
|
158
|
+
record = @geoiolookup.get(ipaddress)
|
|
159
|
+
return QIcon.from_theme("question") if record.nil?
|
|
160
|
+
|
|
161
|
+
code = record.dig("country", "iso_code")&.downcase
|
|
162
|
+
return QIcon.from_theme("question") if code.nil?
|
|
163
|
+
|
|
164
|
+
file = "assets:/flags/#{code}.svg"
|
|
165
|
+
return initialize_icon_non_existent unless QFile.exists(file)
|
|
166
|
+
|
|
167
|
+
QIcon.new(file)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def initialize_icon_non_existent
|
|
171
|
+
pixmap = QPixmap.new(64, 64)
|
|
172
|
+
pixmap.fill(QColor.new(Qt::White))
|
|
173
|
+
QIcon.new(pixmap)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def update_itemmodel_additem(key, conn)
|
|
177
|
+
keyitem = initialize_standarditem(key)
|
|
178
|
+
@dataitems[key] = DataItem.new(keyitem)
|
|
179
|
+
|
|
180
|
+
comm = conn.comm_text
|
|
181
|
+
@itemmodel.append_row(
|
|
182
|
+
keyitem,
|
|
183
|
+
initialize_standarditem(initialize_icon_process(comm), comm),
|
|
184
|
+
initialize_standarditem(conn.pid_text),
|
|
185
|
+
initialize_standarditem(conn.protocol),
|
|
186
|
+
initialize_standarditem(conn.state),
|
|
187
|
+
initialize_standarditem(conn.uname),
|
|
188
|
+
initialize_standarditem(initialize_icon_ipaddress(conn.local_address), conn.local_address),
|
|
189
|
+
initialize_standarditem(conn.local_port.to_s),
|
|
190
|
+
initialize_standarditem(initialize_icon_ipaddress(conn.remote_address), conn.remote_address),
|
|
191
|
+
initialize_standarditem(conn.remote_port.to_s)
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
@active_processes.add(comm)
|
|
195
|
+
@active_users.add(conn.uname)
|
|
196
|
+
|
|
197
|
+
update_itemmodel_updateitemcolor(
|
|
198
|
+
keyitem.index,
|
|
199
|
+
conn.protocol,
|
|
200
|
+
conn.state
|
|
201
|
+
)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def update_itemmodel_removeitem(key)
|
|
205
|
+
dataitem = @dataitems.delete(key)
|
|
206
|
+
@itemmodel.remove_row(dataitem.keyitem.row)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def update_itemmodel_updateitem(dataitem, conn)
|
|
210
|
+
keyitem = dataitem.keyitem
|
|
211
|
+
keyitemindex = keyitem.index
|
|
212
|
+
|
|
213
|
+
{
|
|
214
|
+
COLUMN_PROCESS_ID => conn.pid_text,
|
|
215
|
+
COLUMN_STATE => conn.state,
|
|
216
|
+
COLUMN_USER => conn.uname
|
|
217
|
+
}.each do |column, text|
|
|
218
|
+
item = @itemmodel.item_from_index(keyitemindex.sibling_at_column(column))
|
|
219
|
+
item.set_text(text)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
update_itemmodel_updateitemcolor(
|
|
223
|
+
keyitemindex,
|
|
224
|
+
conn.protocol,
|
|
225
|
+
conn.state
|
|
226
|
+
)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def update_itemmodel_updateitemcolor(keyitemindex, protocol, state)
|
|
230
|
+
colors = protocol.include?("TCP") ? COLORS_TCP_STATE : COLORS_UDP_STATE
|
|
231
|
+
color = QBrush.new(QColor.new(colors[state]))
|
|
232
|
+
item = @itemmodel.item_from_index(keyitemindex.sibling_at_column(COLUMN_STATE))
|
|
233
|
+
item.set_foreground(color)
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|