From bf1d7fa8d8e093cdcb6ce93484053538a76cd03f Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:17:24 +0100 Subject: [PATCH 01/10] v3 --- Camera_Dumps/AW-HE2_camdata.txt | 17 + Camera_Dumps/AW-HE40_cam1_camdata.txt | 46 + Camera_Dumps/AW-HE40_cam2_camdata.txt | 46 + Camera_Dumps/AW-HE40_cam3_camdata.txt | 46 + Camera_Dumps/AW-UE150_Setup_Dump.txt | 199 ++ Camera_Dumps/Camera_Setup_Dump.txt | 199 ++ DEBUG-PACKAGED | 0 LICENSE | 2 +- README.md | 75 + companion/HELP.md | 143 ++ companion/manifest.json | 34 + package.json | 32 +- src/.DS_Store | Bin 0 -> 6148 bytes src/actions.js | 618 +++++++ src/choices.js | 491 +++++ src/common.js | 22 + src/config.js | 63 + src/feedbacks.js | 254 +++ src/icons.js | 89 + src/index.js | 262 +++ src/models.js | 744 ++++++++ src/presets.js | 869 +++++++++ src/upgrades.js | 12 + src/variables.js | 70 + yarn.lock | 2436 +++++++++++++++++++++++++ 25 files changed, 6751 insertions(+), 18 deletions(-) create mode 100644 Camera_Dumps/AW-HE2_camdata.txt create mode 100644 Camera_Dumps/AW-HE40_cam1_camdata.txt create mode 100644 Camera_Dumps/AW-HE40_cam2_camdata.txt create mode 100644 Camera_Dumps/AW-HE40_cam3_camdata.txt create mode 100644 Camera_Dumps/AW-UE150_Setup_Dump.txt create mode 100644 Camera_Dumps/Camera_Setup_Dump.txt create mode 100644 DEBUG-PACKAGED create mode 100644 companion/HELP.md create mode 100644 companion/manifest.json create mode 100644 src/.DS_Store create mode 100644 src/actions.js create mode 100644 src/choices.js create mode 100644 src/common.js create mode 100644 src/config.js create mode 100644 src/feedbacks.js create mode 100644 src/icons.js create mode 100644 src/index.js create mode 100644 src/models.js create mode 100644 src/presets.js create mode 100644 src/upgrades.js create mode 100644 src/variables.js create mode 100644 yarn.lock diff --git a/Camera_Dumps/AW-HE2_camdata.txt b/Camera_Dumps/AW-HE2_camdata.txt new file mode 100644 index 0000000..d8810ab --- /dev/null +++ b/Camera_Dumps/AW-HE2_camdata.txt @@ -0,0 +1,17 @@ +p1 +OID:AW-HE2 +CGI_TIME:0 +OSA:87:10 +TITLE:Stage +OAW:4 +OBR:0 +OUS:0 +d30 +s07 +OSD:4F:7F +rt1 +axz555 +axf555 +pE0000000001FF +pE010000000000 +pE020000000000 diff --git a/Camera_Dumps/AW-HE40_cam1_camdata.txt b/Camera_Dumps/AW-HE40_cam1_camdata.txt new file mode 100644 index 0000000..bff5228 --- /dev/null +++ b/Camera_Dumps/AW-HE40_cam1_camdata.txt @@ -0,0 +1,46 @@ +p1 +OID:AW-HE40 +CGI_TIME:0 +OSA:87:0x14 +TITLE:Left +OGU:0x80 +OTD:0x1E +OAW:9 +OSH:0xB +ODT:1 +OSF:0 +OBR:0 +sWZ0 +OSE:71:1 +iNS1 +OUS:0 +d10 +d30 +s53 +OSA:30:87 +d20 +d60 +d40 +OSD:4F:9F +OER:0 +rt1 +axzB6C +rER00 +axfF9C +pE0023800FFFFF +pE01FFFFFFFEBF +pE02000004840E +uPVS650 +lC10 +lC20 +lC30 +lC40 +ORG:0x1E +OBG:0x1E +OSD:B1:0x00C +pST2 +pRF0 +OIS:0 +OSE:70:0 +OSD:B3:0 +ODE:0 diff --git a/Camera_Dumps/AW-HE40_cam2_camdata.txt b/Camera_Dumps/AW-HE40_cam2_camdata.txt new file mode 100644 index 0000000..d6233c5 --- /dev/null +++ b/Camera_Dumps/AW-HE40_cam2_camdata.txt @@ -0,0 +1,46 @@ +p1 +OID:AW-HE40 +CGI_TIME:0 +OSA:87:0x14 +TITLE:Center +OGU:0x80 +OTD:0x1E +OAW:9 +OSH:0xB +ODT:1 +OSF:0 +OBR:0 +sWZ0 +OSE:71:1 +iNS1 +OUS:0 +d10 +d30 +s53 +OSA:30:87 +d20 +d60 +d40 +OSD:4F:B8 +OER:0 +rt1 +axz919 +rER00 +axfF22 +pE0023800FFFFF +pE01FFFFFFFEBF +pE02000002140E +uPVS650 +lC10 +lC20 +lC30 +lC40 +ORG:0x1E +OBG:0x1E +OSD:B1:0x00C +pST2 +pRF0 +OIS:0 +OSE:70:0 +OSD:B3:0 +ODE:0 diff --git a/Camera_Dumps/AW-HE40_cam3_camdata.txt b/Camera_Dumps/AW-HE40_cam3_camdata.txt new file mode 100644 index 0000000..b89350b --- /dev/null +++ b/Camera_Dumps/AW-HE40_cam3_camdata.txt @@ -0,0 +1,46 @@ +p1 +OID:AW-HE40 +CGI_TIME:0 +OSA:87:0x14 +TITLE:Right +OGU:0x80 +OTD:0x1E +OAW:9 +OSH:0xB +ODT:1 +OSF:0 +OBR:0 +sWZ0 +OSE:71:1 +iNS1 +OUS:0 +d10 +d30 +s53 +OSA:30:87 +d20 +d60 +d40 +OSD:4F:CD +OER:0 +rt1 +axzCF1 +rER00 +axfF96 +pE0023800FFFFF +pE01FFFFFFFEBF +pE02000004840E +uPVS650 +lC10 +lC20 +lC30 +lC40 +ORG:0x1E +OBG:0x1E +OSD:B1:0x00C +pST2 +pRF0 +OIS:0 +OSE:70:0 +OSD:B3:0 +ODE:0 diff --git a/Camera_Dumps/AW-UE150_Setup_Dump.txt b/Camera_Dumps/AW-UE150_Setup_Dump.txt new file mode 100644 index 0000000..b75cc12 --- /dev/null +++ b/Camera_Dumps/AW-UE150_Setup_Dump.txt @@ -0,0 +1,199 @@ +HTTP Recived from PTZ: p1 +HTTP Recived from PTZ: OID:AW-UE150 +HTTP Recived from PTZ: CGI_TIME:0 +HTTP Recived from PTZ: OSA:87:0x11 +HTTP Recived from PTZ: TITLE:AW-UE150-2 +HTTP Recived from PTZ: OSJ:5C:41572D55453135302D3200000000000000000000 +HTTP Recived from PTZ: OSF:0 +HTTP Recived from PTZ: OSD:48:0x23 +HTTP Recived from PTZ: ORS:1 +HTTP Recived from PTZ: d31 +HTTP Recived from PTZ: OSJ:01:0x1 +HTTP Recived from PTZ: OSJ:02:0x0 +HTTP Recived from PTZ: OSJ:C0:0x0 +HTTP Recived from PTZ: OSJ:03:0x0 +HTTP Recived from PTZ: OSJ:06:0x003C +HTTP Recived from PTZ: OSJ:09:0x001F4 +HTTP Recived from PTZ: OSD:BF:2 +HTTP Recived from PTZ: OGU:0x0F +HTTP Recived from PTZ: OSI:28:0 +HTTP Recived from PTZ: OSD:69:03 +HTTP Recived from PTZ: OSA:65:0x00 +HTTP Recived from PTZ: OFT:0 +HTTP Recived from PTZ: d60 +HTTP Recived from PTZ: OAW:9 +HTTP Recived from PTZ: OSI:20:0x00A6E:0 +HTTP Recived from PTZ: OSG:39:0x800 +HTTP Recived from PTZ: OSG:3A:0x800 +HTTP Recived from PTZ: OSJ:4A:0x00C80:0 +HTTP Recived from PTZ: OSJ:4B:0x800 +HTTP Recived from PTZ: OSJ:4C:0x800 +HTTP Recived from PTZ: OSJ:4D:0x800 +HTTP Recived from PTZ: OSJ:0C:0x0 +HTTP Recived from PTZ: OSI:25:0 +HTTP Recived from PTZ: OSJ:0D:0x80 +HTTP Recived from PTZ: OSJ:0E:0x80 +HTTP Recived from PTZ: OSD:B0:0x80 +HTTP Recived from PTZ: OSJ:0B:0x80 +HTTP Recived from PTZ: OSJ:0F:0x800 +HTTP Recived from PTZ: ORP:0x09A +HTTP Recived from PTZ: OSJ:10:0x096 +HTTP Recived from PTZ: OBP:0x096 +HTTP Recived from PTZ: OSJ:11:0 +HTTP Recived from PTZ: ODT:0 +HTTP Recived from PTZ: OSA:30:80 +HTTP Recived from PTZ: OSJ:12:0x0F +HTTP Recived from PTZ: OSD:A1:0x80 +HTTP Recived from PTZ: OSD:A2:0x80 +HTTP Recived from PTZ: OSJ:13:0x80 +HTTP Recived from PTZ: OSG:3F:0x02 +HTTP Recived from PTZ: OSA:38:0x80 +HTTP Recived from PTZ: OSA:39:0x80 +HTTP Recived from PTZ: OSA:40:0 +HTTP Recived from PTZ: OSD:A3:0x90 +HTTP Recived from PTZ: OSJ:14:0x1 +HTTP Recived from PTZ: OSJ:15:0x6C +HTTP Recived from PTZ: OSJ:16:0x0F +HTTP Recived from PTZ: OSJ:17:0x87 +HTTP Recived from PTZ: OSJ:18:0x80 +HTTP Recived from PTZ: OSJ:19:0x80 +HTTP Recived from PTZ: OSJ:1A:0x02 +HTTP Recived from PTZ: OSE:72:0 +HTTP Recived from PTZ: OSA:6A:0x76 +HTTP Recived from PTZ: OSA:10:3 +HTTP Recived from PTZ: OSA:0F:0x00 +HTTP Recived from PTZ: OSA:25:0x7C +HTTP Recived from PTZ: OSA:21:0x62 +HTTP Recived from PTZ: OSA:07:0x80 +HTTP Recived from PTZ: OSJ:1B:0x1 +HTTP Recived from PTZ: OSE:33:0 +HTTP Recived from PTZ: OSA:2D:2 +HTTP Recived from PTZ: OSG:97:4 +HTTP Recived from PTZ: OSA:20:0x7E +HTTP Recived from PTZ: OSA:24:0x63 +HTTP Recived from PTZ: OSI:40:0 +HTTP Recived from PTZ: OSI:41:0x1C +HTTP Recived from PTZ: OSI:42:0x0A +HTTP Recived from PTZ: OSA:2E:1 +HTTP Recived from PTZ: OSA:2A:0x13 +HTTP Recived from PTZ: OSD:3A:0x01 +HTTP Recived from PTZ: OSE:31:0 +HTTP Recived from PTZ: OSJ:4F:0 +HTTP Recived from PTZ: OSD:A4:0x80 +HTTP Recived from PTZ: OSD:A5:0x80 +HTTP Recived from PTZ: OSD:A6:0x90 +HTTP Recived from PTZ: OSD:A7:0x93 +HTTP Recived from PTZ: OSD:A8:0x80 +HTTP Recived from PTZ: OSD:A9:0x92 +HTTP Recived from PTZ: OSD:80:0x8F +HTTP Recived from PTZ: OSD:81:0x86 +HTTP Recived from PTZ: OSD:82:0x8D +HTTP Recived from PTZ: OSD:83:0x8A +HTTP Recived from PTZ: OSD:84:0x84 +HTTP Recived from PTZ: OSD:85:0x8A +HTTP Recived from PTZ: OSD:9A:0x82 +HTTP Recived from PTZ: OSD:9B:0x86 +HTTP Recived from PTZ: OSD:86:0x80 +HTTP Recived from PTZ: OSD:87:0x81 +HTTP Recived from PTZ: OSD:9C:0x84 +HTTP Recived from PTZ: OSD:9D:0x86 +HTTP Recived from PTZ: OSD:88:0x85 +HTTP Recived from PTZ: OSD:89:0x8B +HTTP Recived from PTZ: OSD:9E:0x8A +HTTP Recived from PTZ: OSD:9F:0x83 +HTTP Recived from PTZ: OSD:8A:0x88 +HTTP Recived from PTZ: OSD:8B:0x80 +HTTP Recived from PTZ: OSJ:1C:0x83 +HTTP Recived from PTZ: OSJ:1D:0x82 +HTTP Recived from PTZ: OSD:8C:0x92 +HTTP Recived from PTZ: OSD:8D:0x88 +HTTP Recived from PTZ: OSD:8E:0x94 +HTTP Recived from PTZ: OSD:8F:0x90 +HTTP Recived from PTZ: OSD:90:0x8F +HTTP Recived from PTZ: OSD:91:0x92 +HTTP Recived from PTZ: OSD:92:0x89 +HTTP Recived from PTZ: OSD:93:0x88 +HTTP Recived from PTZ: OSD:94:0x81 +HTTP Recived from PTZ: OSD:95:0x8B +HTTP Recived from PTZ: OSD:96:0x85 +HTTP Recived from PTZ: OSD:97:0x76 +HTTP Recived from PTZ: OAF:0 +HTTP Recived from PTZ: d10 +HTTP Recived from PTZ: OSD:B3:0 +HTTP Recived from PTZ: OSE:70:0 +HTTP Recived from PTZ: OSE:7A:10 +HTTP Recived from PTZ: ODE:0 +HTTP Recived from PTZ: OSJ:4E:0 +HTTP Recived from PTZ: OIS:0 +HTTP Recived from PTZ: axz557 +HTTP Recived from PTZ: axf64C +HTTP Recived from PTZ: axiFE9 +HTTP Recived from PTZ: OSD:4F:FC +HTTP Recived from PTZ: OIF:0x1C +HTTP Recived from PTZ: OSE:77:1 +HTTP Recived from PTZ: fAN0 +HTTP Recived from PTZ: fA20 +HTTP Recived from PTZ: OBR:0 +HTTP Recived from PTZ: tAE1 +HTTP Recived from PTZ: TLR:0 +HTTP Recived from PTZ: dA0 +HTTP Recived from PTZ: TLG:0 +HTTP Recived from PTZ: tAA000000000 +HTTP Recived from PTZ: OSJ:2E:0x0 +HTTP Recived from PTZ: OSI:32:0 +HTTP Recived from PTZ: OSI:33:1 +HTTP Recived from PTZ: OSI:16:1 +HTTP Recived from PTZ: OSI:1A:7 +HTTP Recived from PTZ: OSI:17:1 +HTTP Recived from PTZ: OSJ:2F:0x3C0 +HTTP Recived from PTZ: OSJ:30:0x21C +HTTP Recived from PTZ: OSJ:31:0x3C0 +HTTP Recived from PTZ: OSJ:32:0x21C +HTTP Recived from PTZ: OSJ:33:0x3C0 +HTTP Recived from PTZ: OSJ:34:0x21C +HTTP Recived from PTZ: iNS0 +HTTP Recived from PTZ: OSJ:2D:0 +HTTP Recived from PTZ: sWZ1 +HTTP Recived from PTZ: OAZ:0 +HTTP Recived from PTZ: lC10 +HTTP Recived from PTZ: lC20 +HTTP Recived from PTZ: lC30 +HTTP Recived from PTZ: lC40 +HTTP Recived from PTZ: OSJ:29:0 +HTTP Recived from PTZ: pST2 +HTTP Recived from PTZ: uPVS999 +HTTP Recived from PTZ: OSJ:A8:1 +HTTP Recived from PTZ: OSJ:AB:0x03 +HTTP Recived from PTZ: OSE:71:0 +HTTP Recived from PTZ: OSE:7C:0 +HTTP Recived from PTZ: OSJ:2A:0x0 +HTTP Recived from PTZ: OSJ:2B:0x1 +HTTP Recived from PTZ: OSJ:2C:0x0 +HTTP Recived from PTZ: OSJ:5B:0 +HTTP Recived from PTZ: OSE:7D:0 +HTTP Recived from PTZ: pRF0 +HTTP Recived from PTZ: pE000000000313 +HTTP Recived from PTZ: pE010000000000 +HTTP Recived from PTZ: pE020000000000 +HTTP Recived from PTZ: s0 +HTTP Recived from PTZ: OUS:0 +HTTP Recived from PTZ: OSJ:40:0: +HTTP Recived from PTZ: OER:0 +HTTP Recived from PTZ: OSI:46:0x00000000 +HTTP Recived from PTZ: rER00 +HTTP Recived from PTZ: aPC80007C00 +HTTP Recived from PTZ: OSJ:45:2 +HTTP Recived from PTZ: OSJ:46:00 +HTTP Recived from PTZ: OSI:30:1 +HTTP Recived from PTZ: OSJ:54:0 +HTTP Recived from PTZ: OSJ:55:0 +HTTP Recived from PTZ: OSJ:C1:0 +HTTP Recived from PTZ: OSJ:56:0 +HTTP Recived from PTZ: OSJ:1F:0 +HTTP Recived from PTZ: OSJ:57:0 +HTTP Recived from PTZ: OSJ:22:0 +HTTP Recived from PTZ: OSJ:58:0 +HTTP Recived from PTZ: OSJ:24:0 +HTTP Recived from PTZ: OSJ:59:0 +HTTP Recived from PTZ: OSJ:26:0 +HTTP Recived from PTZ: OSJ:5A:0 \ No newline at end of file diff --git a/Camera_Dumps/Camera_Setup_Dump.txt b/Camera_Dumps/Camera_Setup_Dump.txt new file mode 100644 index 0000000..b75cc12 --- /dev/null +++ b/Camera_Dumps/Camera_Setup_Dump.txt @@ -0,0 +1,199 @@ +HTTP Recived from PTZ: p1 +HTTP Recived from PTZ: OID:AW-UE150 +HTTP Recived from PTZ: CGI_TIME:0 +HTTP Recived from PTZ: OSA:87:0x11 +HTTP Recived from PTZ: TITLE:AW-UE150-2 +HTTP Recived from PTZ: OSJ:5C:41572D55453135302D3200000000000000000000 +HTTP Recived from PTZ: OSF:0 +HTTP Recived from PTZ: OSD:48:0x23 +HTTP Recived from PTZ: ORS:1 +HTTP Recived from PTZ: d31 +HTTP Recived from PTZ: OSJ:01:0x1 +HTTP Recived from PTZ: OSJ:02:0x0 +HTTP Recived from PTZ: OSJ:C0:0x0 +HTTP Recived from PTZ: OSJ:03:0x0 +HTTP Recived from PTZ: OSJ:06:0x003C +HTTP Recived from PTZ: OSJ:09:0x001F4 +HTTP Recived from PTZ: OSD:BF:2 +HTTP Recived from PTZ: OGU:0x0F +HTTP Recived from PTZ: OSI:28:0 +HTTP Recived from PTZ: OSD:69:03 +HTTP Recived from PTZ: OSA:65:0x00 +HTTP Recived from PTZ: OFT:0 +HTTP Recived from PTZ: d60 +HTTP Recived from PTZ: OAW:9 +HTTP Recived from PTZ: OSI:20:0x00A6E:0 +HTTP Recived from PTZ: OSG:39:0x800 +HTTP Recived from PTZ: OSG:3A:0x800 +HTTP Recived from PTZ: OSJ:4A:0x00C80:0 +HTTP Recived from PTZ: OSJ:4B:0x800 +HTTP Recived from PTZ: OSJ:4C:0x800 +HTTP Recived from PTZ: OSJ:4D:0x800 +HTTP Recived from PTZ: OSJ:0C:0x0 +HTTP Recived from PTZ: OSI:25:0 +HTTP Recived from PTZ: OSJ:0D:0x80 +HTTP Recived from PTZ: OSJ:0E:0x80 +HTTP Recived from PTZ: OSD:B0:0x80 +HTTP Recived from PTZ: OSJ:0B:0x80 +HTTP Recived from PTZ: OSJ:0F:0x800 +HTTP Recived from PTZ: ORP:0x09A +HTTP Recived from PTZ: OSJ:10:0x096 +HTTP Recived from PTZ: OBP:0x096 +HTTP Recived from PTZ: OSJ:11:0 +HTTP Recived from PTZ: ODT:0 +HTTP Recived from PTZ: OSA:30:80 +HTTP Recived from PTZ: OSJ:12:0x0F +HTTP Recived from PTZ: OSD:A1:0x80 +HTTP Recived from PTZ: OSD:A2:0x80 +HTTP Recived from PTZ: OSJ:13:0x80 +HTTP Recived from PTZ: OSG:3F:0x02 +HTTP Recived from PTZ: OSA:38:0x80 +HTTP Recived from PTZ: OSA:39:0x80 +HTTP Recived from PTZ: OSA:40:0 +HTTP Recived from PTZ: OSD:A3:0x90 +HTTP Recived from PTZ: OSJ:14:0x1 +HTTP Recived from PTZ: OSJ:15:0x6C +HTTP Recived from PTZ: OSJ:16:0x0F +HTTP Recived from PTZ: OSJ:17:0x87 +HTTP Recived from PTZ: OSJ:18:0x80 +HTTP Recived from PTZ: OSJ:19:0x80 +HTTP Recived from PTZ: OSJ:1A:0x02 +HTTP Recived from PTZ: OSE:72:0 +HTTP Recived from PTZ: OSA:6A:0x76 +HTTP Recived from PTZ: OSA:10:3 +HTTP Recived from PTZ: OSA:0F:0x00 +HTTP Recived from PTZ: OSA:25:0x7C +HTTP Recived from PTZ: OSA:21:0x62 +HTTP Recived from PTZ: OSA:07:0x80 +HTTP Recived from PTZ: OSJ:1B:0x1 +HTTP Recived from PTZ: OSE:33:0 +HTTP Recived from PTZ: OSA:2D:2 +HTTP Recived from PTZ: OSG:97:4 +HTTP Recived from PTZ: OSA:20:0x7E +HTTP Recived from PTZ: OSA:24:0x63 +HTTP Recived from PTZ: OSI:40:0 +HTTP Recived from PTZ: OSI:41:0x1C +HTTP Recived from PTZ: OSI:42:0x0A +HTTP Recived from PTZ: OSA:2E:1 +HTTP Recived from PTZ: OSA:2A:0x13 +HTTP Recived from PTZ: OSD:3A:0x01 +HTTP Recived from PTZ: OSE:31:0 +HTTP Recived from PTZ: OSJ:4F:0 +HTTP Recived from PTZ: OSD:A4:0x80 +HTTP Recived from PTZ: OSD:A5:0x80 +HTTP Recived from PTZ: OSD:A6:0x90 +HTTP Recived from PTZ: OSD:A7:0x93 +HTTP Recived from PTZ: OSD:A8:0x80 +HTTP Recived from PTZ: OSD:A9:0x92 +HTTP Recived from PTZ: OSD:80:0x8F +HTTP Recived from PTZ: OSD:81:0x86 +HTTP Recived from PTZ: OSD:82:0x8D +HTTP Recived from PTZ: OSD:83:0x8A +HTTP Recived from PTZ: OSD:84:0x84 +HTTP Recived from PTZ: OSD:85:0x8A +HTTP Recived from PTZ: OSD:9A:0x82 +HTTP Recived from PTZ: OSD:9B:0x86 +HTTP Recived from PTZ: OSD:86:0x80 +HTTP Recived from PTZ: OSD:87:0x81 +HTTP Recived from PTZ: OSD:9C:0x84 +HTTP Recived from PTZ: OSD:9D:0x86 +HTTP Recived from PTZ: OSD:88:0x85 +HTTP Recived from PTZ: OSD:89:0x8B +HTTP Recived from PTZ: OSD:9E:0x8A +HTTP Recived from PTZ: OSD:9F:0x83 +HTTP Recived from PTZ: OSD:8A:0x88 +HTTP Recived from PTZ: OSD:8B:0x80 +HTTP Recived from PTZ: OSJ:1C:0x83 +HTTP Recived from PTZ: OSJ:1D:0x82 +HTTP Recived from PTZ: OSD:8C:0x92 +HTTP Recived from PTZ: OSD:8D:0x88 +HTTP Recived from PTZ: OSD:8E:0x94 +HTTP Recived from PTZ: OSD:8F:0x90 +HTTP Recived from PTZ: OSD:90:0x8F +HTTP Recived from PTZ: OSD:91:0x92 +HTTP Recived from PTZ: OSD:92:0x89 +HTTP Recived from PTZ: OSD:93:0x88 +HTTP Recived from PTZ: OSD:94:0x81 +HTTP Recived from PTZ: OSD:95:0x8B +HTTP Recived from PTZ: OSD:96:0x85 +HTTP Recived from PTZ: OSD:97:0x76 +HTTP Recived from PTZ: OAF:0 +HTTP Recived from PTZ: d10 +HTTP Recived from PTZ: OSD:B3:0 +HTTP Recived from PTZ: OSE:70:0 +HTTP Recived from PTZ: OSE:7A:10 +HTTP Recived from PTZ: ODE:0 +HTTP Recived from PTZ: OSJ:4E:0 +HTTP Recived from PTZ: OIS:0 +HTTP Recived from PTZ: axz557 +HTTP Recived from PTZ: axf64C +HTTP Recived from PTZ: axiFE9 +HTTP Recived from PTZ: OSD:4F:FC +HTTP Recived from PTZ: OIF:0x1C +HTTP Recived from PTZ: OSE:77:1 +HTTP Recived from PTZ: fAN0 +HTTP Recived from PTZ: fA20 +HTTP Recived from PTZ: OBR:0 +HTTP Recived from PTZ: tAE1 +HTTP Recived from PTZ: TLR:0 +HTTP Recived from PTZ: dA0 +HTTP Recived from PTZ: TLG:0 +HTTP Recived from PTZ: tAA000000000 +HTTP Recived from PTZ: OSJ:2E:0x0 +HTTP Recived from PTZ: OSI:32:0 +HTTP Recived from PTZ: OSI:33:1 +HTTP Recived from PTZ: OSI:16:1 +HTTP Recived from PTZ: OSI:1A:7 +HTTP Recived from PTZ: OSI:17:1 +HTTP Recived from PTZ: OSJ:2F:0x3C0 +HTTP Recived from PTZ: OSJ:30:0x21C +HTTP Recived from PTZ: OSJ:31:0x3C0 +HTTP Recived from PTZ: OSJ:32:0x21C +HTTP Recived from PTZ: OSJ:33:0x3C0 +HTTP Recived from PTZ: OSJ:34:0x21C +HTTP Recived from PTZ: iNS0 +HTTP Recived from PTZ: OSJ:2D:0 +HTTP Recived from PTZ: sWZ1 +HTTP Recived from PTZ: OAZ:0 +HTTP Recived from PTZ: lC10 +HTTP Recived from PTZ: lC20 +HTTP Recived from PTZ: lC30 +HTTP Recived from PTZ: lC40 +HTTP Recived from PTZ: OSJ:29:0 +HTTP Recived from PTZ: pST2 +HTTP Recived from PTZ: uPVS999 +HTTP Recived from PTZ: OSJ:A8:1 +HTTP Recived from PTZ: OSJ:AB:0x03 +HTTP Recived from PTZ: OSE:71:0 +HTTP Recived from PTZ: OSE:7C:0 +HTTP Recived from PTZ: OSJ:2A:0x0 +HTTP Recived from PTZ: OSJ:2B:0x1 +HTTP Recived from PTZ: OSJ:2C:0x0 +HTTP Recived from PTZ: OSJ:5B:0 +HTTP Recived from PTZ: OSE:7D:0 +HTTP Recived from PTZ: pRF0 +HTTP Recived from PTZ: pE000000000313 +HTTP Recived from PTZ: pE010000000000 +HTTP Recived from PTZ: pE020000000000 +HTTP Recived from PTZ: s0 +HTTP Recived from PTZ: OUS:0 +HTTP Recived from PTZ: OSJ:40:0: +HTTP Recived from PTZ: OER:0 +HTTP Recived from PTZ: OSI:46:0x00000000 +HTTP Recived from PTZ: rER00 +HTTP Recived from PTZ: aPC80007C00 +HTTP Recived from PTZ: OSJ:45:2 +HTTP Recived from PTZ: OSJ:46:00 +HTTP Recived from PTZ: OSI:30:1 +HTTP Recived from PTZ: OSJ:54:0 +HTTP Recived from PTZ: OSJ:55:0 +HTTP Recived from PTZ: OSJ:C1:0 +HTTP Recived from PTZ: OSJ:56:0 +HTTP Recived from PTZ: OSJ:1F:0 +HTTP Recived from PTZ: OSJ:57:0 +HTTP Recived from PTZ: OSJ:22:0 +HTTP Recived from PTZ: OSJ:58:0 +HTTP Recived from PTZ: OSJ:24:0 +HTTP Recived from PTZ: OSJ:59:0 +HTTP Recived from PTZ: OSJ:26:0 +HTTP Recived from PTZ: OSJ:5A:0 \ No newline at end of file diff --git a/DEBUG-PACKAGED b/DEBUG-PACKAGED new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE b/LICENSE index aedfe31..c294579 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Bitfocus AS +Copyright (c) 2018 Bitfocus AS Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 5b35a0e..03ae422 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,77 @@ # companion-module-axis-ptz + See HELP.md and LICENSE + +Current support is based on "HD/4K Integrated Camera Interface Specifications" version 1.12 from Apr. 27, 2020. +For more information on the axis API, please refer to: +[axis Interface Specifications, Protocol](https://eww.pass.axis.co.jp/pro-av/support/content/guide/EN/top.html) + +**V1.0.7** + +- Added Hanging and Desktop mode +- Added One Touch Auto Focus +- Zoom and Focus speed + +**V1.0.8** + +- Fixed bug with changing config settings, forcing the user to disable and re-enable the module to connect again. +- Fixed bug with OTAF missing an action + +**V1.0.9** + +- Cleaned up "Help.md" file +- Cleaned up "Index.js" file, by splitting it up into difrent files +- Sorted Actions in dropdown +- Fixed Auto Focus Action having wrong default +- Added Feedback Structure and Support +- Added Variables Structure and Support +- Added Auto Detect Model, and the option to specify camera type +- Made Actions Model specific, with options that match the model +- Updated all presets to work with current feedbacks and actions, and is made dynamicly based on model + +**V1.0.10** + +- Added Basic support for AW-HE2 +- Added Config option to enable PTZ debug to the "Info" and "Warn" log window +- Added Support for Start and Stop Recording on SD Card (Only some models) + +**V1.0.11** + +- Added support for AW-UE4 + +**V1.0.12** + +- Hotfix for SD Card Record Action +- Bug Fix: Tally on variable, not working on integer variables, now works with both integer and string variables + +**V1.0.13** + +- Bug Fix: some actions not working with defaults, due too not having a default declared +- Enabled presets on Aw-HE2 + +**V1.0.14** + +- Updated Help.md +- Fixed bug with importing unused dependencies +- Fixed bug with Auto/Manual focus being mirrored + +**V1.0.15** + +- Added Auto detect TCP port based on instance ID/nr, as these will always be unique on one system. Currently, it's based on the default TCP port (31004)+ instance nr. If you only have one instance = 31004 + 1, it is the fifth instance = 31004 + 5. that should help out with errors when using more than one instance/camera. (The user selected port, gets ignored when auto mode is selected) +- Cleaned up config page +- Fix bug with tally not being reported corectly in feedbacks with AW-HE40 series camera's + +**V1.0.16** + +- Converted Feedbacks to Boolean Feedbacks for more flexibility + +**V1.0.17 & V1.0.18** + +- Minor changes, and update script fixes + +**V1.0.19** + +- Added Action, Feedback, Preset and Variable for "Preset - Mode A, B, C" +- Fixed Tally follow variable option +- cleaned up the subscription codebase Init_tcp() +- Changed "Auto TCP" port, to be handled by node instead of an offset diff --git a/companion/HELP.md b/companion/HELP.md new file mode 100644 index 0000000..e94d74a --- /dev/null +++ b/companion/HELP.md @@ -0,0 +1,143 @@ +axis PTZ Cameras + +## This module supports the following axis PTZ cameras. + +**AW-HE2, AW-HE50, AW-HE60, AW-HE120, AW-HE130, AW-HR140, AW-UE4, AW-SFU01, AK-UB300,
AW-HE40 series, AW-HE42 series, AW-UE70 series, AW-UE150 series** + +**HE40 series** + +- AW-HE35, AW-HE38, AW-HE40, AW-HE48, AW-HE58, AW,HE65, AW-HE70 +- AW-HN38, AW-HN40, AW-HN65, AW-HN70 +- AW HEF5 + +**HE42 series** + +- AW-HE42, AW-HE68, AW-HE75 + +**UE70 series** + +- AW-UE63, AW-UE65, AW-UE70 +- AW-UN70 + +**UE150 series** + +- AW-UE100, AW-UE150, AW-UE155 +- AW-UN145 + +**Disclaimer, not all models supports all actions, variables and feedbacks. But it should be auto sorted so that you can only use actions, feedbacks, variables and presets that works with your model** + +## When using more than on PTZ + +**When Configuring** more than one instance, please make sure you have **"AUTO TCP"** enabled or change the **TCP** port accordingly, this is a port used in companion, and you will not find a setting for it on the cameras. The TCP port **NEEDS** to be unique for each PTZ instance you add. It's strongly recomended to leave **"Auto TCP"** turned on. + +## Actions + +The actions are separated into the following categories. +It's recommended to use the presets as much as possible as there is a lot of actions. + +**Pan/Tilt** + +- Up, Down, Left, Right, UpLeft, UpRight, DownLeft, DownRight +- Set Pan/Tilt Speed +- Pan/Tilt Speed Up +- Pan/Tilt Speed Down +- Pan/Tilt Home + +**Lens** + +- Zoom In +- Zoom Out +- Set Zoom Speed +- Zoom Speed Up +- Zoom Speed Down +- Focus Far, Focus Near +- Set Focus Speed +- Focus Speed Up +- Focus Speed Down +- Focus Mode (Auto/Manual) +- One Touch Auto Focus (OTAF) + +**Exposure** + +- Set Iris +- Iris Open +- Iris Close +- Iris Mode (Auto/Manual) +- Set Gain +- Gain Up +- Gain Down +- Set Shutter +- Shutter Up +- Shutter Down +- Set Pedestal +- Pedestal Up +- Pedestal Down +- Set ND Filter +- ND Filter Up +- ND Filter Down + +**System** + +- Power Off +- Power On +- Installation position Desktop and Hanging +- Tally Off +- Tally On +- SD Card Recording Start/Stop + +**Save presets** + +- Save Preset 1-100 + +**Recall Presets** + +- Recall Preset 1-100 +- Set Preset Playback Speed +- Set Preset Playback Time (AW-UE150) +- Set Preset Playback Mode (AW-UE150) + +## Variables + +A list of all the available Variables in this module sorted into the following categories. For their correct naming, refer to the list under "Edit" "Instance". + +**System** + +- PTZ Series +- PTZ Model +- PTZ Name +- Firmware Version +- PTZ Error Codes +- Power ON/OFF +- Install Position +- Tally State + +**Lens** + +- Auto Focus Mode +- Pan/Tilt, Zoom and Focus Speed + +**Exposure** + +- Auto Iris Mode + +## Feedbacks + +A list of all the available Feedbacks in this module sorted into the following categories. + +**System** + +- Power ON/OFF +- Tally State +- Install Position + +**Lens** + +- Auto Focus Mode + +**Exposure** + +- Auto Iris Mode + +Current support is based on "HD/4K Integrated Camera Interface Specifications" version 1.12 from Apr. 27, 2020. + +For additional actions, please raise a feature request on [GitHub](https://github.com/bitfocus/companion-module-axis-ptz/). diff --git a/companion/manifest.json b/companion/manifest.json new file mode 100644 index 0000000..ab1929f --- /dev/null +++ b/companion/manifest.json @@ -0,0 +1,34 @@ +{ + "id": "axis-ptz", + "name": "axis-ptz", + "shortname": "axis-PTZ", + "description": "Companion module for axis PTZ Cameras", + "version": "0.0.0", + "license": "MIT", + "repository": "git+https://github.com/bitfocus/companion-module-axis-ptz.git", + "bugs": "https://github.com/bitfocus/companion-module-axis-ptz/issues", + "maintainers": [ + { + "name": "Andreas H. Thomsen", + "email": "mc-hauge@hotmail.com" + }, + { + "name": "Per Røine", + "email": "per.roine@gmail.com" + }, + { + "name": "Joseph Adams", + "email": "josephdadams@gmail.com" + } + ], + "legacyIds": [], + "runtime": { + "type": "node18", + "api": "nodejs-ipc", + "apiVersion": "0.0.0", + "entrypoint": "../src/index.js" + }, + "manufacturer": "axis", + "products": ["PTZ Camera"], + "keywords": ["ptz", "Camera"] +} diff --git a/package.json b/package.json index adb0e7c..9004c64 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,24 @@ { "name": "axis-ptz", "version": "2.0.0", - "api_version": "1.0.0", - "keywords": [ - "Camera" - ], - "manufacturer": "axis", - "product": "PTZ Camera", - "shortname": "axis", - "description": "axis PTZ camera control", - "main": "index.js", - "author": "Frans Bosman ", + "main": "src/index.js", + "type": "module", + "scripts": { + "lint:raw": "eslint --ext .ts --ext .js --ignore-pattern dist --ignore-pattern pkg", + "lint": "yarn lint:raw ." + }, "license": "MIT", - "dependencies": { - "request": "^2.85.0" - }, - "homepage": "https://github.com/bitfocus/companion-module-axis-ptz#readme", - "bugs": { - "url": "https://github.com/bitfocus/companion-module-axis-ptz/issues" - }, "repository": { "type": "git", "url": "git+https://github.com/bitfocus/companion-module-axis-ptz.git" + }, + "dependencies": { + "@companion-module/base": "~1.0.0", + "got": "^12.5.3", + + "urllib":"^3.10.0" + }, + "devDependencies": { + "@companion-module/tools": "^0.5.1" } } diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dcbbfa4842f8033df8ac9d320c3c423984214ea8 GIT binary patch literal 6148 zcmeHKOHRWu5FNK&q@P8XY>;w-O57lnvS7^x=#Nqe3F-&2%$_@N1;k-E3@dmu9#G?& zEkZC8jh|!B%fv6T9TSloZf8eCeIiQWjI9oeh;cvro;9?Ec}|{DQbB7P&^1akQ@|AX z?F#VR?a-K}w4o*K%-^%ToKEs`f_`2cj^TrMG1Qndr7OfQf%DHfA8?)nP8+c$-Qwar zvP#q$?l8(I=n{DrQO0Ay=plBFYeo|p)lK}}+*`m)kf8u;P7kp>jYSaOmQiqg9?#Ht z4HzA|qZQ)U@J*c4JP9~m+JdzJZ!GVoYinJ#=1aip(LLf<7||Fi;A7(t$#b0KgWS#Zc$p1?HrRnPTM;Juv5~ zKu>jg#BiRD_Eh6C#mb|nlheb8)67m!C{D8D`Kg4H%RE|X3YY?Q1)Bc0&-?%B_vimQ z$?i-6Q{Yc2;98^e(GWw@y>)MJyw|4i3pg9cRUU { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = "-" + action.options.speed + ",0"; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + + + + actions.right = { + name: "Pan/Tilt - Pan Right", + options: [speeddefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = action.options.speed + ",0"; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + + + + actions.up = { + name: "Pan/Tilt - Tilt Up", + options: [speeddefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = "0," + action.options.speed; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + + actions.down = { + name: "Pan/Tilt - Tilt Down", + options: [speeddefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = "0," + "-" + action.options.speed; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + + + + actions.upLeft = { + name: "Pan/Tilt - Up Left", + options: [speeddefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = "-" + action.options.speed + "," + action.options.speed; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + + + + actions.upRight = { + name: "Pan/Tilt - Up Right", + options: [speeddefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = action.options.speed + "," + action.options.speed; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + + + actions.downLeft = { + name: "Pan/Tilt - Down Left", + options: [speeddefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = "-" + action.options.speed + "," + "-" + action.options.speed; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + + + + actions.downRight = { + name: "Pan/Tilt - Down Right", + options: [speeddefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = action.options.speed + "," + "-" + action.options.speed; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + + + + actions.stop = { + name: "Pan/Tilt - Stop", + options: [], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = "0,0"; + + await sendPTZ(self, cmd, param); + self.getCameraPosition(); + self.checkFeedbacks(); + }, + }; + + + + actions.home = { + name: "Pan/Tilt - Home", + options: [], + ccallback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouspantiltmove"; + param = "0,0"; + + await sendPTZ(self, cmd, param); + }, + }; + +const seriesActions = {} +seriesActions.ptSpeed = false; + + if (seriesActions.ptSpeed) { + actions.ptSpeedS = { + name: "Pan/Tilt - Speed", + options: [ + { + type: "dropdown", + label: "speed setting", + id: "speed", + default: 25, + choices: c.CHOICES_SPEED, + }, + ], + callback: async (action) => { + self.ptSpeed = action.options.speed; + + const idx = c.CHOICES_SPEED.findIndex((sp) => sp.id === self.ptSpeed); + if (idx > -1) { + self.ptSpeedIndex = idx; + } + + self.ptSpeed = c.CHOICES_SPEED[self.ptSpeedIndex].id; + self.setVariable("ptSpeedVar", self.ptSpeed); + }, + }; + } + + if (seriesActions.ptSpeed) { + actions.ptSpeedU = { + name: "Pan/Tilt - Speed Up", + options: [], + callback: async (action) => { + if (self.ptSpeedIndex == 0) { + self.ptSpeedIndex = 0; + } else if (self.ptSpeedIndex > 0) { + self.ptSpeedIndex--; + } + self.ptSpeed = c.CHOICES_SPEED[self.ptSpeedIndex].id; + self.setVariable("ptSpeedVar", self.ptSpeed); + }, + }; + } + + if (seriesActions.ptSpeed) { + actions.ptSpeedD = { + name: "Pan/Tilt - Speed Down", + options: [], + callback: async (action) => { + if (self.ptSpeedIndex == c.CHOICES_SPEED.length) { + self.ptSpeedIndex = c.CHOICES_SPEED.length; + } else if (self.ptSpeedIndex < c.CHOICES_SPEED.length) { + self.ptSpeedIndex++; + } + self.ptSpeed = c.CHOICES_SPEED[self.ptSpeedIndex].id; + self.setVariable("ptSpeedVar", self.ptSpeed); + }, + }; + } + + // ###################### + // #### Lens Actions #### + // ###################### + + if (seriesActions.zoom) { + actions.zoomI = { + name: "Lens - Zoom In", + options: [zoomdefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouszoommove"; + + param = action.options.zoomspeed; + //self.ptzMove(param, cmd, opt.speed) + self.log("debug", "zoomspeed: " + param); + + await sendPTZ(self, cmd, param); + }, + }; + } + + if (seriesActions.zoom) { + actions.zoomO = { + name: "Lens - Zoom Out", + options: [zoomdefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuouszoommove"; + param = "-" + action.options.zoomspeed; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + } + + if (seriesActions.zoom) { + actions.zoomS = { + name: "Lens - Zoom Stop", + options: [], + callback: async (action) => { + cmd = "continuouszoommove"; + param = 0; + await sendPTZ(self, cmd, param); + self.getCameraPosition(); + self.checkFeedbacks(); + }, + }; + } + + if (seriesActions.zSpeed) { + actions.zSpeedS = { + name: "Lens - Zoom Speed", + options: [ + { + type: "dropdown", + label: "speed setting", + id: "speed", + default: 25, + choices: c.CHOICES_SPEED, + }, + ], + callback: async (action) => { + self.zSpeed = action.options.speed; + + const idx = c.CHOICES_SPEED.findIndex((sp) => sp.id === self.zSpeed); + if (idx > -1) { + self.zSpeedIndex = idx; + } + + self.zSpeed = c.CHOICES_SPEED[self.zSpeedIndex].id; + self.setVariable("zSpeedVar", self.zSpeed); + }, + }; + } + + if (seriesActions.zSpeed) { + actions.zSpeedU = { + name: "Lens - Zoom Speed Up", + options: [], + callback: async (action) => { + if (self.zSpeedIndex == 0) { + self.zSpeedIndex = 0; + } else if (self.zSpeedIndex > 0) { + self.zSpeedIndex--; + } + self.zSpeed = c.CHOICES_SPEED[self.zSpeedIndex].id; + self.setVariable("zSpeedVar", self.zSpeed); + }, + }; + } + + if (seriesActions.zSpeed) { + actions.zSpeedD = { + name: "Lens - Zoom Speed Down", + options: [], + callback: async (action) => { + if (self.zSpeedIndex == c.CHOICES_SPEED.length) { + self.zSpeedIndex = c.CHOICES_SPEED.length; + } else if (self.zSpeedIndex < c.CHOICES_SPEED.length) { + self.zSpeedIndex++; + } + self.zSpeed = c.CHOICES_SPEED[self.zSpeedIndex].id; + self.setVariable("zSpeedVar", self.zSpeed); + }, + }; + } + + if (seriesActions.focus) { + actions.focusI = { + name: "Lens - focus In", + options: [speeddefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuousfocusmove"; + + param = action.options.speed; + //self.ptzMove(param, cmd, opt.speed) + self.log("debug", "speed: " + param); + + await sendPTZ(self, cmd, param); + }, + }; + } + + if (seriesActions.focus) { + actions.focusO = { + name: "Lens - focus Out", + options: [speeddefinition], + callback: async (action) => { + //console.log(util.inspect(action.options, {showHidden: false, depth: null, colors: true})) + + cmd = "continuousfocusmove"; + param = "-" + action.options.speed; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + }, + }; + } + + if (seriesActions.focus) { + actions.focusF = { + name: "Lens - Focus Far", + options: [], + callback: async (action) => { + await sendPTZ(self, "F" + parseInt(50 + self.fSpeed)); + }, + }; + } + + if (seriesActions.focus) { + actions.focusS = { + name: "Lens - Focus Stop", + options: [], + callback: async (action) => { + await sendPTZ(self, "F50"); + }, + }; + } + + if (seriesActions.fSpeed) { + actions.fSpeedS = { + name: "Lens - Focus Speed", + options: [ + { + type: "dropdown", + label: "speed setting", + id: "speed", + default: 25, + choices: c.CHOICES_SPEED, + }, + ], + callback: async (action) => { + self.fSpeed = action.options.speed; + + const idx = c.CHOICES_SPEED.findIndex((sp) => sp.id === self.fSpeed); + if (idx > -1) { + self.fSpeedIndex = idx; + } + + self.fSpeed = c.CHOICES_SPEED[self.fSpeedIndex].id; + self.setVariable("fSpeedVar", self.fSpeed); + }, + }; + } + + if (seriesActions.fSpeed) { + actions.fSpeedU = { + name: "Lens - Focus Speed Up", + options: [], + callback: async (action) => { + if (self.fSpeedIndex == 0) { + self.fSpeedIndex = 0; + } else if (self.fSpeedIndex > 0) { + self.fSpeedIndex--; + } + self.fSpeed = c.CHOICES_SPEED[self.fSpeedIndex].id; + self.setVariable("fSpeedVar", self.fSpeed); + }, + }; + } + + if (seriesActions.fSpeed) { + actions.fSpeedD = { + name: "Lens - Focus Speed Down", + options: [], + callback: async (action) => { + if (self.fSpeedIndex == c.CHOICES_SPEED.length) { + self.fSpeedIndex = c.CHOICES_SPEED.length; + } else if (self.fSpeedIndex < c.CHOICES_SPEED.length) { + self.fSpeedIndex++; + } + self.fSpeed = c.CHOICES_SPEED[self.fSpeedIndex].id; + self.setVariable("fSpeedVar", self.fSpeed); + }, + }; + } + + actions.focusM = { + name: "Lens - Focus Mode (Auto Focus)", + options: [ + { + type: "dropdown", + label: "Auto / Manual Focus", + id: "bol", + default: 0, + choices: [ + { id: 0, label: "Auto Focus" }, + { id: 1, label: "Manual Focus" }, + ], + }, + ], + + callback: async (action) => { + cmd = "autofocus"; + self.log("debug", "focusparm: " + action.options.bol); + if (action.options.bol == 0) { + param = "on"; + } else { + param = "off"; + } + + await sendPTZ(self, cmd, param); + self.getCameraPosition(); + self.checkFeedbacks(); + }, + }; + + + // ######################### + // #### Presets Actions #### + // ######################### + seriesActions.preset = true + + if (seriesActions.preset) { + actions.Setpreset = { + name: "Preset - Save", + options: [ + { + type: "dropdown", + label: "Preset Nr.", + id: "val", + default: CHOICES_PRESET[0].id, + choices: CHOICES_PRESET, + }, + ], + callback: async (action) => { + cmd = "setserverpresetno"; + param = action.options.val; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + self.getCameraPosition(); + self.checkFeedbacks(); + await sendPTZ(self, "M" + action.options.val); + }, + }; + } + if (seriesActions.preset) { + actions.preset = { + name: "Preset - Recall", + options: [ + { + type: "dropdown", + label: "Preset Nr.", + id: "val", + default: CHOICES_PRESET[0].id, + choices: CHOICES_PRESET, + }, + ], + callback: async (action) => { + cmd = "gotoserverpresetno"; + param = action.options.val; + //self.ptzMove(param, cmd, opt.speed) + + await sendPTZ(self, cmd, param); + self.getCameraPosition(); + self.checkFeedbacks(); + }, + }; + } + + return actions; +} diff --git a/src/choices.js b/src/choices.js new file mode 100644 index 0000000..6ec601f --- /dev/null +++ b/src/choices.js @@ -0,0 +1,491 @@ +export const c = { + // ######################## + // #### Value Look Ups #### + // ######################## + CHOICES_SPEED: [ + { id: 49, label: 'Speed 49 (Fast)' }, + { id: 48, label: 'Speed 48' }, + { id: 47, label: 'Speed 47' }, + { id: 46, label: 'Speed 46' }, + { id: 45, label: 'Speed 45' }, + { id: 44, label: 'Speed 44' }, + { id: 43, label: 'Speed 43' }, + { id: 42, label: 'Speed 42' }, + { id: 41, label: 'Speed 41' }, + { id: 40, label: 'Speed 40' }, + { id: 39, label: 'Speed 39' }, + { id: 38, label: 'Speed 38' }, + { id: 37, label: 'Speed 37' }, + { id: 36, label: 'Speed 36' }, + { id: 35, label: 'Speed 35' }, + { id: 34, label: 'Speed 34' }, + { id: 33, label: 'Speed 33' }, + { id: 32, label: 'Speed 32' }, + { id: 31, label: 'Speed 31' }, + { id: 30, label: 'Speed 30' }, + { id: 29, label: 'Speed 29' }, + { id: 28, label: 'Speed 28' }, + { id: 27, label: 'Speed 27' }, + { id: 26, label: 'Speed 26' }, + { id: 25, label: 'Speed 25' }, + { id: 24, label: 'Speed 24' }, + { id: 23, label: 'Speed 23' }, + { id: 22, label: 'Speed 22' }, + { id: 21, label: 'Speed 21' }, + { id: 20, label: 'Speed 20' }, + { id: 19, label: 'Speed 19' }, + { id: 18, label: 'Speed 18' }, + { id: 17, label: 'Speed 17' }, + { id: 16, label: 'Speed 16' }, + { id: 15, label: 'Speed 15' }, + { id: 14, label: 'Speed 14' }, + { id: 13, label: 'Speed 13' }, + { id: 12, label: 'Speed 12' }, + { id: 11, label: 'Speed 11' }, + { id: 10, label: 'Speed 10' }, + { id: 9, label: 'Speed 09' }, + { id: 8, label: 'Speed 08' }, + { id: 7, label: 'Speed 07' }, + { id: 6, label: 'Speed 06' }, + { id: 5, label: 'Speed 05' }, + { id: 4, label: 'Speed 04' }, + { id: 3, label: 'Speed 03' }, + { id: 2, label: 'Speed 02' }, + { id: 1, label: 'Speed 01 (Slow)' }, + { id: 0, label: 'Stop' }, + ], + + // ####################### + // #### Gain Look Ups #### + // ####################### + CHOICES_GAIN_HE50: [ + { id: '80', label: 'Auto' }, + { id: '08', label: '0dB' }, + { id: '0B', label: '3db' }, + { id: '0E', label: '6dB' }, + { id: '11', label: '9dB' }, + { id: '14', label: '12dB' }, + { id: '17', label: '15dB' }, + { id: '1A', label: '18dB' }, + ], + CHOICES_GAIN_HE120: [ + { id: '80', label: 'Auto' }, + { id: '08', label: '0dB' }, + { id: '09', label: '1dB' }, + { id: '0A', label: '2dB' }, + { id: '0B', label: '3db' }, + { id: '0C', label: '4dB' }, + { id: '0D', label: '5dB' }, + { id: '0E', label: '6dB' }, + { id: '0F', label: '7dB' }, + { id: '10', label: '8dB' }, + { id: '11', label: '9dB' }, + { id: '12', label: '10dB' }, + { id: '13', label: '11dB' }, + { id: '14', label: '12dB' }, + { id: '15', label: '13dB' }, + { id: '16', label: '14dB' }, + { id: '17', label: '15dB' }, + { id: '18', label: '16dB' }, + { id: '19', label: '17dB' }, + { id: '1A', label: '18dB' }, + ], + CHOICES_GAIN_HE130: [ + { id: '80', label: 'Auto' }, + { id: '08', label: '0dB' }, + { id: '09', label: '1dB' }, + { id: '0A', label: '2dB' }, + { id: '0B', label: '3db' }, + { id: '0C', label: '4dB' }, + { id: '0D', label: '5dB' }, + { id: '0E', label: '6dB' }, + { id: '0F', label: '7dB' }, + { id: '10', label: '8dB' }, + { id: '11', label: '9dB' }, + { id: '12', label: '10dB' }, + { id: '13', label: '11dB' }, + { id: '14', label: '12dB' }, + { id: '15', label: '13dB' }, + { id: '16', label: '14dB' }, + { id: '17', label: '15dB' }, + { id: '18', label: '16dB' }, + { id: '19', label: '17dB' }, + { id: '1A', label: '18dB' }, + { id: '1B', label: '19dB' }, + { id: '1C', label: '20dB' }, + { id: '1D', label: '21dB' }, + { id: '1E', label: '22dB' }, + { id: '1F', label: '23dB' }, + { id: '20', label: '24dB' }, + { id: '21', label: '25dB' }, + { id: '22', label: '26dB' }, + { id: '23', label: '27dB' }, + { id: '24', label: '28dB' }, + { id: '25', label: '29dB' }, + { id: '26', label: '30dB' }, + { id: '27', label: '31dB' }, + { id: '28', label: '32dB' }, + { id: '29', label: '33dB' }, + { id: '2A', label: '34dB' }, + { id: '2B', label: '35dB' }, + { id: '2C', label: '36dB' }, + ], + CHOICES_GAIN_HR140: [ + { id: '80', label: 'Auto' }, + { id: '08', label: '0dB' }, + { id: '09', label: '1dB' }, + { id: '0A', label: '2dB' }, + { id: '0B', label: '3db' }, + { id: '0C', label: '4dB' }, + { id: '0D', label: '5dB' }, + { id: '0E', label: '6dB' }, + { id: '0F', label: '7dB' }, + { id: '10', label: '8dB' }, + { id: '11', label: '9dB' }, + { id: '12', label: '10dB' }, + { id: '13', label: '11dB' }, + { id: '14', label: '12dB' }, + { id: '15', label: '13dB' }, + { id: '16', label: '14dB' }, + { id: '17', label: '15dB' }, + { id: '18', label: '16dB' }, + { id: '19', label: '17dB' }, + { id: '1A', label: '18dB' }, + { id: '1B', label: '19dB' }, + { id: '1C', label: '20dB' }, + { id: '1D', label: '21dB' }, + { id: '1E', label: '22dB' }, + { id: '1F', label: '23dB' }, + { id: '20', label: '24dB' }, + { id: '21', label: '25dB' }, + { id: '22', label: '26dB' }, + { id: '23', label: '27dB' }, + { id: '24', label: '28dB' }, + { id: '25', label: '29dB' }, + { id: '26', label: '30dB' }, + { id: '27', label: '31dB' }, + { id: '28', label: '32dB' }, + { id: '29', label: '33dB' }, + { id: '2A', label: '34dB' }, + { id: '2B', label: '35dB' }, + { id: '2C', label: '36dB' }, + { id: '2D', label: '37dB' }, + { id: '2E', label: '38dB' }, + { id: '2F', label: '39dB' }, + { id: '30', label: '40dB' }, + { id: '31', label: '41dB' }, + { id: '32', label: '42dB' }, + ], + CHOICES_GAIN_HE40: [ + { id: '80', label: 'Auto' }, + { id: '08', label: '0dB' }, + { id: '0B', label: '3db' }, + { id: '0E', label: '6dB' }, + { id: '11', label: '9dB' }, + { id: '14', label: '12dB' }, + { id: '17', label: '15dB' }, + { id: '1A', label: '18dB' }, + { id: '1D', label: '21dB' }, + { id: '20', label: '24dB' }, + { id: '23', label: '27dB' }, + { id: '26', label: '30dB' }, + { id: '29', label: '33dB' }, + { id: '2C', label: '36dB' }, + { id: '2F', label: '39dB' }, + { id: '32', label: '42dB' }, + { id: '35', label: '45dB' }, + { id: '38', label: '48dB' }, + ], + CHOICES_GAIN_UE4: [ + { id: '08', label: '0dB' }, + { id: '0B', label: '3db' }, + { id: '0E', label: '6dB' }, + { id: '11', label: '9dB' }, + { id: '14', label: '12dB' }, + { id: '17', label: '15dB' }, + { id: '1A', label: '18dB' }, + { id: '1D', label: '21dB' }, + { id: '20', label: '24dB' }, + { id: '23', label: '27dB' }, + { id: '26', label: '30dB' }, + { id: '29', label: '33dB' }, + { id: '2C', label: '36dB' }, + { id: '2F', label: '39dB' }, + { id: '32', label: '42dB' }, + ], + CHOICES_GAIN_UB300: [ + { id: '01', label: 'LOW' }, + { id: '04', label: 'MID' }, + { id: '08', label: 'HIGH' }, + { id: '06', label: 'S.GAIN1' }, + { id: '0C', label: 'S.GAIN2' }, + { id: '0E', label: 'S.GAIN3' }, + ], + CHOICES_GAIN_HE60: function () { + return this.CHOICES_GAIN_HE50 + }, + CHOICES_GAIN_UE150: function () { + return this.CHOICES_GAIN_HR140 + }, + CHOICES_GAIN_UE70: function () { + return this.CHOICES_GAIN_HE40 + }, + CHOICES_GAIN_HE42: function () { + return this.CHOICES_GAIN_HE40 + }, + CHOICES_GAIN_OTHER: function () { + return this.CHOICES_GAIN_HR140 + }, + + // ########################## + // #### Shutter Look Ups #### + // ########################## + CHOICES_SHUTTER_OTHER: [ + { id: '0', label: 'OFF' }, + { id: '2', label: '1/60' }, + { id: '3', label: '1/100' }, + { id: '4', label: '1/120' }, + { id: '5', label: '1/250' }, + { id: '6', label: '1/500' }, + { id: '7', label: '1/1000' }, + { id: '8', label: '1/2000' }, + { id: '9', label: '1/4000' }, + { id: 'A', label: '1/10000' }, + { id: 'B', label: 'Syncro Scan' }, + { id: 'C', label: 'ELC' }, + { id: 'D', label: '1/24' }, + { id: 'E', label: '1/25' }, + { id: 'F', label: '1/30' }, + ], + CHOICES_SHUTTER_HE50: [ + { id: '0', label: 'OFF' }, + { id: '3', label: '1/100 (59.94Hz) or 1/120 (50Hz)' }, + { id: '5', label: '1/250' }, + { id: '6', label: '1/500' }, + { id: '7', label: '1/1000' }, + { id: '8', label: '1/2000' }, + { id: '9', label: '1/4000' }, + { id: 'A', label: '1/10000' }, + { id: 'B', label: 'Syncro Scan' }, + ], + CHOICES_SHUTTER_HE120: [ + { id: '0', label: 'OFF' }, + { id: '3', label: '1/100 (59.94Hz) or 1/120 (50Hz)' }, + { id: '5', label: '1/250' }, + { id: '6', label: '1/500' }, + { id: '7', label: '1/1000' }, + { id: '8', label: '1/2000' }, + { id: '9', label: '1/4000' }, + { id: 'A', label: '1/10000' }, + { id: 'B', label: 'Syncro Scan' }, + { id: 'C', label: 'ELC' }, + ], + CHOICES_SHUTTER_HE130: [ + { id: '0', label: 'OFF' }, + { id: '2', label: '1/60' }, + { id: '3', label: '1/100' }, + { id: '4', label: '1/120' }, + { id: '5', label: '1/250' }, + { id: '6', label: '1/500' }, + { id: '7', label: '1/1000' }, + { id: '8', label: '1/2000' }, + { id: '9', label: '1/4000' }, + { id: 'A', label: '1/10000' }, + { id: 'B', label: 'Syncro Scan' }, + { id: 'C', label: 'ELC' }, + { id: 'D', label: '1/24' }, + { id: 'E', label: '1/25' }, + { id: 'F', label: '1/30' }, + ], + CHOICES_SHUTTER_UE4: [ + { id: '0001', label: '1/1' }, + { id: '0002', label: '1/2' }, + { id: '0005', label: '1/5' }, + { id: '000A', label: '1/10' }, + { id: '0014', label: '1/20' }, + { id: '0019', label: '1/25' }, + { id: '001E', label: '1/30' }, + { id: '0032', label: '1/50' }, + { id: '003C', label: '1/60' }, + { id: '0064', label: '1/100' }, + { id: '0078', label: '1/120' }, + { id: '00F0', label: '1/240' }, + { id: '00F4', label: '1/250' }, + { id: '01E0', label: '1/480' }, + { id: '01F4', label: '1/500' }, + { id: '03E8', label: '1/1000' }, + { id: '07D0', label: '1/2000' }, + { id: '0FA0', label: '1/4000' }, + { id: '1F40', label: '1/8000' }, + { id: '3E80', label: '1/16000' }, + ], + CHOICES_SHUTTER_UB300: [ + { id: '00', label: '1/48' }, + { id: '01', label: '1/50' }, + { id: '02', label: '1/60' }, + { id: '03', label: '1/96' }, + { id: '04', label: '1/100' }, + { id: '05', label: '1/120' }, + { id: '06', label: '1/125' }, + { id: '07', label: '1/250' }, + { id: '08', label: '1/500' }, + { id: '09', label: '1/1000' }, + { id: '0A', label: '1/1500' }, + { id: '0B', label: '1/2000' }, + { id: '0C', label: '180.0 deg' }, + { id: '0D', label: '172.8 deg' }, + { id: '0E', label: '144.0 deg' }, + { id: '0F', label: '120.0 deg' }, + { id: '10', label: '90.0 deg' }, + { id: '11', label: '45.0 deg' }, + ], + + CHOICES_SHUTTER_HE60: function () { + return this.CHOICES_SHUTTER_HE50 + }, + CHOICES_SHUTTER_HE40: function () { + return this.CHOICES_SHUTTER_HE50 + }, + CHOICES_SHUTTER_UE70: function () { + return this.CHOICES_SHUTTER_HE50 + }, + CHOICES_SHUTTER_HE42: function () { + return this.CHOICES_SHUTTER_HE50 + }, + CHOICES_SHUTTER_HR140: function () { + return this.CHOICES_SHUTTER_HE130 + }, + + // ########################### + // #### Pedestal Look Ups #### + // ########################### + CHOICES_PEDESTAL_HE40: function () { + const p = [] + for (let i = 0; i <= 300; ++i) { + p.push({ + id: ('00' + i.toString(16)).substr(-3, 3).toUpperCase(), + label: 'Pedestal ' + ((i - 150) / 15).toPrecision(3), + }) + } + return p + }, + + CHOICES_PEDESTAL_HE120: function () { + const p = [] + for (let i = 0; i <= 300; ++i) { + p.push({ id: ('00' + i.toString(16)).substr(-3, 3).toUpperCase(), label: 'Pedestal ' + (i - 150) }) + } + return p + }, + + CHOICES_PEDESTAL_HE42: function () { + return this.CHOICES_PEDESTAL_HE40() + }, + CHOICES_PEDESTAL_HE50: function () { + return this.CHOICES_PEDESTAL_HE40() + }, + CHOICES_PEDESTAL_HE60: function () { + return this.CHOICES_PEDESTAL_HE40() + }, + CHOICES_PEDESTAL_UE70: function () { + return this.CHOICES_PEDESTAL_HE40() + }, + CHOICES_PEDESTAL_HE130: function () { + return this.CHOICES_PEDESTAL_HE120() + }, + CHOICES_PEDESTAL_HR140: function () { + return this.CHOICES_PEDESTAL_HE120() + }, + CHOICES_PEDESTAL_OTHER: function () { + return this.CHOICES_PEDESTAL_HE120() + }, + + // ########################### + // #### ND Filter Look Ups #### + // ########################### + CHOICES_FILTER_UE70: [ + { id: '0', label: 'Through' }, + { id: '1', label: '1/4' }, + { id: '2', label: '1/16' }, + { id: '3', label: '1/64' }, + { id: '4', label: '1/8' }, + { id: '8', label: 'AUTO' }, + ], + + CHOICES_FILTER_HE120: [ + { id: '0', label: 'Through' }, + { id: '1', label: '1/4' }, + { id: '2', label: '1/16' }, + { id: '3', label: '1/64' }, + ], + + CHOICES_FILTER_HE130: [ + { id: '0', label: 'Through' }, + { id: '3', label: '1/64' }, + { id: '4', label: '1/8' }, + ], + + CHOICES_FILTER_UB300: [ + { id: '0', label: 'Clear' }, + { id: '1', label: '1/4' }, + { id: '2', label: '1/16' }, + { id: '3', label: '1/64' }, + ], + + CHOICES_FILTER_UE150: function () { + return this.CHOICES_FILTER_HE120 + }, + CHOICES_FILTER_HR140: function () { + return this.CHOICES_FILTER_HE130 + }, + CHOICES_FILTER_HE42: function () { + return this.CHOICES_FILTER_UE70 + }, + CHOICES_FILTER_OTHER: function () { + return this.CHOICES_FILTER_UE70 + }, + + // ############################### + // #### Preset Speed Look Ups #### + // ############################### + CHOICES_PSSPEED: [ + { id: 999, label: 'Speed 30 (Fast)' }, + { id: 975, label: 'Speed 29' }, + { id: 950, label: 'Speed 28' }, + { id: 925, label: 'Speed 27' }, + { id: 900, label: 'Speed 26' }, + { id: 875, label: 'Speed 25' }, + { id: 850, label: 'Speed 24' }, + { id: 825, label: 'Speed 23' }, + { id: 800, label: 'Speed 22' }, + { id: 775, label: 'Speed 21' }, + { id: 750, label: 'Speed 20' }, + { id: 725, label: 'Speed 19' }, + { id: 700, label: 'Speed 18' }, + { id: 675, label: 'Speed 17' }, + { id: 650, label: 'Speed 16' }, + { id: 625, label: 'Speed 15' }, + { id: 600, label: 'Speed 14' }, + { id: 575, label: 'Speed 13' }, + { id: 550, label: 'Speed 13' }, + { id: 525, label: 'Speed 11' }, + { id: 500, label: 'Speed 10' }, + { id: 475, label: 'Speed 09' }, + { id: 450, label: 'Speed 08' }, + { id: 425, label: 'Speed 07' }, + { id: 400, label: 'Speed 06' }, + { id: 375, label: 'Speed 05' }, + { id: 350, label: 'Speed 04' }, + { id: 325, label: 'Speed 03' }, + { id: 300, label: 'Speed 02' }, + { id: 275, label: 'Speed 01 (Slow)' }, + ], + + CHOICES_PSTIME: function () { + const p = [] + for (let i = 1; i <= 99; ++i) { + p.push({ id: ('00' + i.toString(16)).substr(-3, 3).toUpperCase(), label: i + ' Sec' }) + } + return p + }, +} diff --git a/src/common.js b/src/common.js new file mode 100644 index 0000000..3bf4623 --- /dev/null +++ b/src/common.js @@ -0,0 +1,22 @@ +import { MODELS, SERIES_SPECS } from './models.js' + +export function getAndUpdateSeries(self) { + // Set the model and series selected, if in auto, dettect what model is connected via TCP + if (self.config.model === 'Auto') { + self.data.model = self.data.modelTCP + } else { + self.data.model = self.config.model + } + + if (self.data.model !== 'NaN') { + self.data.series = MODELS.find((MODELS) => MODELS.id == self.data.model).series + } + + // Find the specific commands for a given series + let SERIES = + self.data.series !== 'Auto' && self.data.series !== 'Other' + ? SERIES_SPECS.find((SERIES_SPECS) => SERIES_SPECS.id == self.data.series) + : undefined + + return SERIES || SERIES_SPECS.find((SERIES_SPECS) => SERIES_SPECS.id == 'Other') +} diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..90133c3 --- /dev/null +++ b/src/config.js @@ -0,0 +1,63 @@ +import { MODELS } from "./models.js"; + +export const ConfigFields = [ + { + type: "static-text", + id: "info", + width: 12, + label: "Information", + value: + "This module controls Axis PTZ cameras. In a later release it will ask the camera about the attributes, up till then not all commands will work with each axis camera", + }, + { + type: "textinput", + id: "host", + label: "Camera IP", + width: 10, + // regex: Regex.IP + }, + { + type: "number", + id: "httpPort", + label: "HTTP Port (Default: 80)", + width: 10, + default: 80, + min: 1, + max: 65535, + }, + { + type: "static-text", + id: "dummy1", + width: 12, + label: " ", + value: " ", + }, + { + type: "textinput", + id: "user", + label: "User name", + tooltip: "The user name.", + width: 10, + }, + { + type: "textinput", + id: "password", + label: "Password", + tooltip: "The password", + width: 10, + }, + { + type: "dropdown", + id: "authmethod", + default: "0", + label: "Authentication method", + width: 10, + + choices: [ + { id: 0, label: "BasicAuth" }, + { id: 1, label: "DigestAuth" }, + ], + + // regex: Regex.IP + }, +]; diff --git a/src/feedbacks.js b/src/feedbacks.js new file mode 100644 index 0000000..f5a7652 --- /dev/null +++ b/src/feedbacks.js @@ -0,0 +1,254 @@ +import { combineRgb } from "@companion-module/base"; + +// ########################## +// #### Define Feedbacks #### +// ########################## +export function getFeedbackDefinitions(self) { + const feedbacks = {}; + + const foregroundColor = combineRgb(255, 255, 255); // White + const backgroundColorRed = combineRgb(255, 0, 0); // Red + + feedbacks.autoFocus = { + type: "boolean", + name: "Lens - Auto Focus State", + description: "Indicate if Auto focus is ON or OFF", + defaultStyle: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + options: [ + { + type: "dropdown", + label: "Indicate in X State", + id: "option", + default: "1", + choices: [ + { id: "0", label: "Manual" }, + { id: "1", label: "Auto" }, + ], + }, + ], + callback: function (feedback) { + const opt = feedback.options; + const autofocus = self.getVariableValue("autofocus"); + + switch (opt.option) { + case "0": + if (autofocus == "off") { + return true; + } + break; + case "1": + if (autofocus == "on") { + return true; + } + break; + default: + break; + } + return false; + }, + }; + + feedbacks.MaxPanLimit = { + type: "boolean", + name: "PT-MaxPan Limit", + description: + "When the camera reaches the max pan-linit the background changes color", + defaultStyle: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + options: [], + callback: function () { + var maxpan; + + maxpan = Number(self.getVariableValue("MaxPan")) - 1; + + var pan; + pan = Number(self.getVariableValue("pan")); + + if (pan > maxpan) { + return true; + } + + return false; + }, + }; + feedbacks.MinPanLimit = { + type: "boolean", + name: "PT-MinPan Limit", + description: + "When the camera reaches the min (left) pan-linit the background changes color", + defaultStyle: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + options: [], + callback: function () { + var minpan; + minpan = self.getVariableValue("MinPan") + 1; + + var pan; + pan = self.getVariableValue("pan"); + + if (pan < minpan) { + return true; + } + + return false; + }, + }; + feedbacks.MinTiltLimit = { + type: "boolean", + name: "PT-MinTiltLimit", + description: + "When the camera reaches the min (under) tilt-linit the background changes color", + defaultStyle: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + options: [], + callback: function () { + var min; + min = self.getVariableValue("MinTilt") + 1; + + var pos; + pos = self.getVariableValue("tilt"); + + if (pos < min) { + return true; + } + + return false; + }, + }; + feedbacks.MaxTiltLimit = { + type: "boolean", + name: "PT-MaxTiltLimit", + description: + "When the camera reaches the max (upper) tilt-linit the background changes color", + defaultStyle: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + options: [], + callback: function () { + var max; + + max = self.getVariableValue("MaxTilt") - 1; + + var pos; + pos = self.getVariableValue("tilt"); + + if (pos > max) { + return true; + } + + return false; + }, + }; + feedbacks.maxfocus = { + type: "boolean", + name: "maxfocus", + description: + "When the camera reaches the maxfocus-linit the background changes color", + defaultStyle: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + options: [], + callback: function () { + var max; + + max = self.getVariableValue("MaxFocus") - 1; + + var pos; + pos = self.getVariableValue("focus"); + + if (pos > max) { + return true; + } + + return false; + }, + }; + feedbacks.minfocus = { + type: "boolean", + name: "minfocus", + description: + "When the camera reaches the minfocus-linit the background changes color", + defaultStyle: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + options: [], + callback: function () { + var max; + + min = Number(self.getVariableValue("MinFocus")) - 1; + + var pos; + pos = Number(self.getVariableValue("focus")); + + if (pos < min) { + return true; + } + + return false; + }, + }; + + feedbacks.maxzoom = { + type: "boolean", + name: "maxzoom", + description: + "When the camera reaches the maxzoom-linit the background changes color", + defaultStyle: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + options: [], + callback: function () { + var max; + + max = Number(self.getVariableValue("MaxZoom")) - 1; + + var pos; + pos = self.getVariableValue("zoom"); + + if (pos > max) { + return true; + } + + return false; + }, + }; + feedbacks.minzoom = { + type: "boolean", + name: "minzoom", + description: + "When the camera reaches the minzoom-linit the background changes color", + defaultStyle: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + options: [], + callback: function () { + var min; + + min = Number(self.getVariableValue("MinZoom")) + 1; + + var pos; + pos = self.getVariableValue("zoom"); + + if (pos < min) { + return true; + } + + return false; + }, + }; + return feedbacks; +} diff --git a/src/icons.js b/src/icons.js new file mode 100644 index 0000000..9d11610 --- /dev/null +++ b/src/icons.js @@ -0,0 +1,89 @@ +/* + * This file is part of the Companion project + * Copyright (c) 2018 Bitfocus AS + * Authors: William Viker , HĂ¥kon Nessjøen + * + * This program is free software. + * You should have received a copy of the MIT licence as well as the Bitfocus + * Individual Contributor License Agreement for companion along with + * this program. + * + * You can be released from the requirements of the license by purchasing + * a commercial license. Buying such a license is mandatory as soon as you + * develop commercial activities involving the Companion software without + * disclosing the source code of your own applications. + * + */ + +// Variables for Base64 image data do not edit + +export const icons = { + ICON_POWER_UNKNOWN: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAN0GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxNjo0OToyNyswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTY6NDk6MjcrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmU0YmQzODYyLWRmOWYtNDQxOC1iNWNmLTE3MTUwNzE0ODg0ZiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmYwZmFmYmM0LTc0MmEtMmE0NS1iMjBkLWU4NWQ2NmZhZjEzNyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YmM0OWQzYi05YzRmLTRkNmQtODQyNi0yNzlmYzc3YjI2NWMiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTY6MTA6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGJmNDFmYTctZTNmMi00NzdiLWIzMjktMDQ3NzU2NzhjOWMwIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDE2OjQ5OjI3KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmU0YmQzODYyLWRmOWYtNDQxOC1iNWNmLTE3MTUwNzE0ODg0ZiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQxNjo0OToyNyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YmY0MWZhNy1lM2YyLTQ3N2ItYjMyOS0wNDc3NTY3OGM5YzAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIiBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIi8+IDxwaG90b3Nob3A6VGV4dExheWVycz4gPHJkZjpCYWc+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIHJlZCIgcGhvdG9zaG9wOkxheWVyVGV4dD0iPSIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvZmYiIHBob3Rvc2hvcDpMYXllclRleHQ9IuKPuyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0i4o+7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0i4o+7IHBvd2VyIHdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSLij7siLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEJhY2sgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEJhY2sgQmx1ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOSIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIHdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI6Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBGd2QgQmx1ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBsYXkgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IEdyZWVuIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjsiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQYXVzZSBZZWxsb3ciIHBob3Rvc2hvcDpMYXllclRleHQ9IjsiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTdG9wIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBSZWQiIHBob3Rvc2hvcDpMYXllclRleHQ9IiZsdDsiLz4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pris6fwAAAIoSURBVHja7Zv9jYUgDMDfCrfCW8EVXMEVWIEVXMEVXIEVWMEVWIHD2FzemZMKFC1em/QvIx8/obSlvrz3L9FjFQgCSAAJIAH0ZEBUEtrqg1q/iQuqT773fEChnc7/LVoAbZOcDgA5AbRN0hwA8gJIAAkgASSABJAAEkCtAQrP3kFHmLwO+kUNKDxWQWdwNPtmAMHA92KPIOUAAvh7mdgDgrjKpcRWqYAisZuH1coT0LpCgi6RwRsiQNrHpeMKCBv4RARoQPqx7ACBUcakJ7RBC9KX4gZoQgasKU8xxNZ5AMgDENgen2p7CI55XXsVUQFSyEDfFR1FE+l35gJoTjXMhIAwg80CUPTIvSDUiBns3t987RNz2paLYrGxluNIAagv2V5EgGLbbLobkM452okBxT6SEUBxJ1UA/QdAKsfBbGWLxQY3F9yuWszBbMVIFx/zu/hqXZFDwju8j3kYpCtxFAvz2bwdRYpQoxBQE6FGUbBaCMjWsj/U6Q6Xm+4ogIOlOwZOCbMxN2FGXHTFL2H2kXJ1WAKLEA7aV4tJ+1XGQjjqBBzjGd+L2ROQlqMEPnJTO59o27G99knYap/esj7ylaAtdRIM6daqffXcJUDaAzOgOe+T3qrWLl7oMyeZK2Nz5S8FKylVVA04l9QHgRNpKoFZKA3yrQVU4NUuRGB+flV4XIUZbAdTsGJ+FWM9tgRvd4TbCBCDuALyO9SdKhAEkAASQAKIsX4DYdkApCQP1LkAAAAASUVORK5CYII=', + + ICON_POWER_ON: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAANhmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxNjo0NzozMiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTY6NDc6MzIrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc1Y2FkMGI0LTE3MjEtNDFjNC1iZDVmLTllZDViYWY1YmIxYiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmM4NWY0YzgzLTRhZGQtMmU0ZC1iNTc5LWM3ZjFkZjRmZmQyOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YmM0OWQzYi05YzRmLTRkNmQtODQyNi0yNzlmYzc3YjI2NWMiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTY6MTA6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MmI3NzU5NjEtNDUxMC00OTY5LTg1NzQtYTJhZjgyYmVmMThiIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDE2OjQ3OjMyKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjc1Y2FkMGI0LTE3MjEtNDFjNC1iZDVmLTllZDViYWY1YmIxYiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQxNjo0NzozMiswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYjc3NTk2MS00NTEwLTQ5NjktODU3NC1hMmFmODJiZWYxOGIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIiBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIi8+IDxwaG90b3Nob3A6VGV4dExheWVycz4gPHJkZjpCYWc+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIHJlZCIgcGhvdG9zaG9wOkxheWVyVGV4dD0iPSIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvZmYiIHBob3Rvc2hvcDpMYXllclRleHQ9IuKPuyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0i4o+7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4p5jCxAAACmUlEQVR42u2bLU/EQBCG568Q/gMWg8ciEDgUioRgECQYzBmCQGAgwWBQp3AnEEgSFA6NxCAo927SZNN0Z7c702P3OpuMu7bb5+Z7p9Q0DZmExSAYIANkgAzQOgPSWmc3dLKzoG/6oGbzjX6PHmiect0kAJ1f0z7AdCUF0iQAHTzRex8gaJIBWq7dZ/rqA+TEABkgA2SADJABMkAGqDJAF1e0ffhIL3h5ZMSXM9rQBnR8R/d7c/pEoolSpRpA2Hj3RVFnhSDlAAL87m8BqnhAqKtciTCgthoKKFS7tc8oFhA0ZOuVfkKbdyAUADnQod8vBQCLBBTbuCtKFQCd3tKMew7MuThAcMrcpiFwpFo+iNNUCPxgUYBCLYuU3k4OIM7XQQCwGEAuOjFwQr5HGuZjJq2hRSqA+sK6L878RkoUuWuRIxUBCBsZ6pi1AMUcdhk+KBJyxy41OIctzbDFgLikzW18BbVYX1atlTiKAbnQLTAvDUCcmUnLDzEgLpKknm1JAXF/Eu49eUBckmqApgAolEfFEswqTIzbnMuPMk9XUXDGEswqnLRGmPfrK2ide+HEVXyYx+KKxpREUbKKTxQ1Sg3JqqLUkBarktXOFI3hf1TbHZyZpUSjnBVrd0C7immYcY5ySMiXDl0V2TBrW66cFrUNLC04Kc+qrmkPcZomWHjxGBxpcjjquRjnNH31DzXwuZNaLlr6Y3vFHvukmpqfLUPrQrkS7tUeL6fcT9O0Rj16TvERIWAwD0jO9dqnqqMOL8CEcl4yV+Dbqht/ydWkoaJtViudD0ISyfZ7BAJnr+mQ/3WACllt7Lg4VfxPFdZuwgzmkKtRANwdxlrbETw/hIdyJwBpJ9RCqYB9DmXfixkgA2SADJBJSP4ASMA94BfKlEUAAAAASUVORK5CYII=', + + ICON_POWER_OFF: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAANhmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxNjo0ODowNiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTY6NDg6MDYrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmE1NGY3MWNkLThiNjEtNDRlZC04MGQ5LTI5ZTgxNjUxZGM3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjMxMjc2NTI4LWIwYjYtNjQ0Yi1hZmJmLWJjN2JiZjVkYWQ0ZiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YmM0OWQzYi05YzRmLTRkNmQtODQyNi0yNzlmYzc3YjI2NWMiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTY6MTA6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGM0MGRlOGItMGIwYi00YjVhLTgyYmMtNGQ3NTAxZjdmYTNmIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDE2OjQ4OjA2KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmE1NGY3MWNkLThiNjEtNDRlZC04MGQ5LTI5ZTgxNjUxZGM3YiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQxNjo0ODowNiswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YzQwZGU4Yi0wYjBiLTRiNWEtODJiYy00ZDc1MDFmN2ZhM2YiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIiBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIi8+IDxwaG90b3Nob3A6VGV4dExheWVycz4gPHJkZjpCYWc+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIHJlZCIgcGhvdG9zaG9wOkxheWVyVGV4dD0iPSIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvZmYiIHBob3Rvc2hvcDpMYXllclRleHQ9IuKPuyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0i4o+7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4ShOyRAAACK0lEQVR42u2b7XHDIAyGvUJXyApZwSt4BVZgBa/gFbwCKzBCWYEVKG50vdR3fItEOMrd+yvBwBMQkpAn59zECoshMCAGxIAY0JUBYX2+p2n20l7Oy3rJnHYfAcjDuAOYsyQDegDaAoAsA3oAUgFAjgExIAbEgBgQA2JADGg0QH5yN68VJi+9vrAB+e+F1w6O5jwMIBj4ebI6BKkGEMA//34jDwjiKlsSW5UCisRuv32QBXSsEC8TGbxCAiQjfRy6UwWUGviGBGhJ9KPJAQKj7BKaEW2QSfQlqAHaEgOWmKdYwtYdMmQAge1xpbYH4ZiXvVcRFiCRGOitl6MYa3v4SFQA7aWGGRFQ1GBTARQ9cnuHGgmDPb8VUMJpM6+IxQJeNYrjiAFobtleSIBi22x7NyBZc7QjA4r9SYoBxZ1UBvQJgESNgznKFosNbm+4XdUpB3MUI918zJ/iq2NFLrltyB/zMDHb4ii2fMg7ihihRmPCf4hQoylYbQSke9kf7HSHrU13NMBJpTsWSgmztTZhhlx0RS9h9pRytakEFiIcO1TKNXPJH1ob4YgMOIryvZjOgGRCCfzETe2e8WxL9tqnYKs9e8sy5CvBs0QmGNSt1fvq+V4A6QxMgWray5GKF+bKSdZqHa78pWEllUr0gPOS+iBwIlUnMAbTIL+1gApiJoME5u9VhctVmMGppBpWzL9irMuW4J2OcB0BomKuAL8Oxe+LMSAGxIAYECukH5Mh8Lty9l7DAAAAAElFTkSuQmCC', + + ICON_FWD_ACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHlmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTA0VDAwOjA2OjM1KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTA0VDAwOjA2OjM1KzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wNFQwMDowNjozNSswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4ZWVlYjA0NC0xM2YyLTQxZjAtYjZiNS1hN2QzZTM1YjE0ZmIiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowZjBiZDI2Ni03NGNjLTUyNDQtYjcxMi1mNTMzY2RkNGZhMmQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMGE0ZWY2Yy01OTJiLTQxOTUtOWM2ZS05M2RjM2VhYzYwZTkiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MzBhNGVmNmMtNTkyYi00MTk1LTljNmUtOTNkYzNlYWM2MGU5IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDAwOjA2OjM1KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjhlZWViMDQ0LTEzZjItNDFmMC1iNmI1LWE3ZDNlMzViMTRmYiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNjozNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9Ij0iIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI5IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iOiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjQiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI7IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iJmx0OyIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+4xhgvAAAAUBJREFUaN7t2t0JgzAQB3D3cQ2HcBg3cAMHcQEXcAAplL5IoQ8FKaVQ2qOCiB8xOWlyvf5DHnw59QchXu6MoqhROgEDDDDAAAMMsF+GFcUljg+8x2RZm6YnXmzbPl6fQRdfgZXltWnuPFuen7vuybP5gNHdeTaCUSzP5gnGs/Uwns0fjGEbYAybV5irbQxztfmGOdkmMCdbAJi9bQ6zt4WB9TYerH/XJDkKhdGo6xsPZmMLCdu0GWCbtsAws80MM9vCwwy2TZjBJgK2ZrOBrdmkwBZtlrBFmyDY3GYPm9tkwSY2J9jEJg42trnCxjmNRBgNiuLBBptQWFV1e2C0ILEUsXlgu/+PD7TOlEpnEqzz2KLzoKmzNKCzmKOz/KazYKqzxK2zKaGzjaSz8aezVau2uY7/PAADDDDAAAMMsJ3zDSf4V4b8XLKIAAAAAElFTkSuQmCC', + + ICON_FWD_INACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMToxMiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjE6MTIrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmU3OWRiOTk3LTUzMzAtNDA0MC04MWZhLTBjYmY3ZWY2ZjU4ZSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmQyM2E5ZDJmLTM2NDgtMTI0Yi04ZGU2LTZiYjM4ZTQ5ZTkwOSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ZGJiODQ5OS0xYjNiLTQ0YzAtOGU0Ny1lZWJhYjVmNDhjMzUiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjE6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZTc5ZGI5OTctNTMzMC00MDQwLTgxZmEtMGNiZjdlZjZmNThlIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIxOjEyKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkYmI4NDk5LTFiM2ItNDRjMC04ZTQ3LWVlYmFiNWY0OGMzNSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5i6Z7uAAABPElEQVR42u3a4Q2CMBCG4a7gCqzgLK7gCs7iCq7gCo4AK7hCrUqISAstPaN3viTfTwg8SUt7Pee9dyQdEAACCCCAAAIIIICILJBz7SFk48SudheyLb1r5v26EN+n+wbQMeQih9TuQ66lSL8O5OWQHkC+FEkDkBDSAFSEpAVIAGkElI2kCagSaQKUhaQNqAIpCrSIpBFoJVISaBZJK1CPJAbk+w9uLAHdcxYEiiJpBypAygKaIFkAykTKBhohWQHKQCoCGpAsAS0gFQPNImkFmkFaBZRE0gyUQFoNFEXSDhRBqgKaIFkAekOqBhpW8JaA/PM5YkAv2xw7QKcPADUMsT8YYkzS/OZZKLLVYLNKuYOCGSVXqyVXivYc+3BwyNEzzQu0v9BARQue1RY8mjgJQAABBBBAAAEEEEAkkRszs/0O3FXJfAAAAABJRU5ErkJggg==', + + ICON_REW_ACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHXGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTA0VDAwOjA1OjQxKzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTA0VDAwOjA1OjQxKzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wNFQwMDowNTo0MSswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0YTc3YWIzZC01ZmYxLTQ4ZTgtYjI2Yy01MGE3NzM0NWY0M2EiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3NWVhZTBlOS0yZGY1LTI1NDQtYTE0MS1kOTY1ZDA3NDcyZWQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTdmZmU4OC01YWY0LTQ3MGItYjRjZi05ODk0NWQxOTkzNmUiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDE3ZmZlODgtNWFmNC00NzBiLWI0Y2YtOTg5NDVkMTk5MzZlIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDAwOjA1OjQxKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjRhNzdhYjNkLTVmZjEtNDhlOC1iMjZjLTUwYTc3MzQ1ZjQzYSIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNTo0MSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9Ij0iIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI5IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iNCIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjsiIHBob3Rvc2hvcDpMYXllclRleHQ9IjsiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSImbHQ7IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5d0tPMAAABUklEQVRo3u3aOw6CQBAGYDQaEjUWGhsvYOk9bMCOC1DZWnAHrsABjBew8RokFNraGBtjY0yMJFxAd+fxS2ZCQcGG/cKwO2HoBMEpaGN0g5aGwQxmMIMZzGD/HL3vL91sBstl2Jzv94/j8eVwvyQJd7un21x/GvvDE6tVaTppjsWi7zCzPB9n2dRZVRRzxFSsVdvtzEc1HHbhYMIqIZi8SgKmomKHaal4YYoqRpiuigumrmKBIajoYSAqYhiOihIGpSKDoaloYIAqAhimyhcGq/KCIau8YOv12HlsHI9YVV6wKLqcz85fL26Hwx0UVpZvH9tqdWW1eeUDss030WFtBG8wpo1maQK0ka25aDbKzQTKRrxL4tjot38QG0tdg2DjKtjUbYyVqK6Nt8RWtLE3JbRsEm0kFZtQ40/eJteqbWxVJWTr2P+KBjOYwQxmMIMZTCw++aoeVmSF6JQAAAAASUVORK5CYII=', + + ICON_REW_INACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMDozMCswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjA6MzArMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjEzNzY2ZmM2LTlhYzYtNDdlOS1iZGQ2LTA4ZmU4YWZiNWM1MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjE5MTI4MGUwLWIwM2UtZTg0Yy04ODRiLTEzMjg5ZGYzN2ZiNCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ZWQ3NjVkMS0yMjdmLTQyZTgtYTZmYy0wNzhmNjhkMWU4OWEiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjA6MzArMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MTM3NjZmYzYtOWFjNi00N2U5LWJkZDYtMDhmZThhZmI1YzUxIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIwOjMwKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRlZDc2NWQxLTIyN2YtNDJlOC1hNmZjLTA3OGY2OGQxZTg5YSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Aq/YNAAABX0lEQVR42u3bTRHCMBAF4KYOsEBxUAsgAQtFApUAEsAKWMABaEBCCEwPvcCUIZt9u7ydeT110s5H+peEOsZYMe9TV6yPRSACEYhABCIQgQhEoC8rhNsyZTvKPIRQ5cmtnbrvxHNtNXrQ86C7UeZ5frNrN7SXpQack5NL7IVzEMCZOQDCwwECwsQBAcLFAQDCxlEGwsdRBLKBowRkB0cBKC9Oak8UpzCQPZyCQDZxCgHZxSkAZBtHGMg+jiCQDxwhID84AkC+cCR6UJe5vbUmjgTQKuWSr7lFnzZHR0CLuwDSRhNJ4CbtC0noMe8HSfBF0QeS8KeGfaQCH6u2kQoNd9hFKjhgZhOp8JBrfqQYG1EkhUF7W0hK0z52kBQnDm0gKU894yMBLF7ARgJZ/oKLBLSAChMJbAkeHlL9w4H3KWGUc57/aDX3lH7q/l8geehBeEUgAhGIQAQiEIEI9K/1APdX1qz3Plq4AAAAAElFTkSuQmCC', + + ICON_REC_ACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHImlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTAzVDIzOjU4OjUwKzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTAzVDIzOjU4OjUwKzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wM1QyMzo1ODo1MCswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiMTY2ZDY2Yi1mMTBlLTQyNzAtYjM4OS04MzYwZDY3ZTZkNTYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplZDYzNjJmNi02ZDZjLTdiNDgtODJiYi0wNDYxNDBmZGFhZWMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozN2Q2YTZlYS02MWQxLTQ5YTgtYjk2Yi1jZTU5ZDk5MDQ0OTAiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MzdkNmE2ZWEtNjFkMS00OWE4LWI5NmItY2U1OWQ5OTA0NDkwIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTAzVDIzOjU4OjUwKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmIxNjZkNjZiLWYxMGUtNDI3MC1iMzg5LTgzNjBkNjdlNmQ1NiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wM1QyMzo1ODo1MCswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9Ij0iIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI0IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iOyIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IiZsdDsiIHBob3Rvc2hvcDpMYXllclRleHQ9IiZsdDsiLz4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ps0tfYQAAAElSURBVGje7dndDYQgDAdw9nENtnEFN3ADJ3ACF2ABB3AABvDp9OSa3Mt9+GBsCbX+G58uHOYXSkFwD+dMPg4wwAADDDDAAAMMMM2wqlq7jp70F+/fqcHFYEtdb+OYDgQ1o8YXgC3eHyT98rzXC1ubJp2Oeaa/a4StbZvYQZ3ogu1WiJM2KipKYKwM3LVJ5KRAtaDpIQujDvm1hAt7DkPKENRtSRgtQSlbMNc3jcMlMmisHZP87PqeaZw9l6JiKFseGXnY97lh9IoSsBCyw0IoANumKTeMXlECFmN2WIyAIRXvWzzMlnuzC7TZLZXdTbDhzxazH5qWjwbMHuZYPn6zfGAqkpNKj7gtX0p8Dt3xayTZgcLFH65qAQMMMMAAAwwwwO4LewFv1x++++/jUAAAAABJRU5ErkJggg==', + + ICON_REC_INACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToxOTo1NiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MTk6NTYrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmI1OWFjODM5LTY5NjUtNDk1Yy1hYmFmLTM4MWViOWNkNTMyOCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmIzYjVlMTQzLThjMjctNWE0Zi1hOTI5LWFkZTk3NDI5OTdmMSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozNGQwMjhhNS02YTEzLTRlY2EtOWUzYi03NjdiNzM2MmU0ZWUiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MTk6NTYrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YjU5YWM4MzktNjk2NS00OTVjLWFiYWYtMzgxZWI5Y2Q1MzI4IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjE5OjU2KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjM0ZDAyOGE1LTZhMTMtNGVjYS05ZTNiLTc2N2I3MzYyZTRlZSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4w3nxFAAABJUlEQVR42u3aUQ2FIBiGYSpYwSxWoIIVrGAFKljhVDDCsYIVOLDh5oXo5lB+OK/bd+XU8UxQ4FfWWkXiAQEggAACCCCAAAKIAARQTUBfpRqXIcRGsp1vVOSoDsg1tnP5nKDE4q/pqgVyjWtvwhxBtVUBuQbpBDD7rP6eVQC5hvSJcfbpiwa6GIBTZSgS6IFudRZdFFAYkNcXgfyz2pKAzIs4W0wRQOE/x2ZKVwKQyQhkRAOF6cOaEcg/u5EMpDPiPPJFSw00CgAaJQNNAoAmyUCzAKBZMtAiAGgBqGAguhiDNJ95fhSZajBZLXSyynIHC2YsubJoz7YPG4f1bBw+3N00xQv/Urxw8DbdLX/R1dcHUUBFCR5ABCCAAAIIIIAAAogAdJUfDkEOTMmL2+oAAAAASUVORK5CYII=', + + ICON_STOP_INACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMjo0NyswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjI6NDcrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBmM2U0Y2VhLTQ2NDEtNDhhYS04N2I2LWMxYjRlZTJkOWE5NCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBjYzc0NDRhLWE1ZDUtNmY0NC05NjdjLWU4YWRlZmI2MTYzOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OTliODFjZC00NzM3LTRmYzAtYWIwYi1jMGY2YzgwNzk1ODkiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjI6NDcrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGYzZTRjZWEtNDY0MS00OGFhLTg3YjYtYzFiNGVlMmQ5YTk0IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIyOjQ3KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjg5OWI4MWNkLTQ3MzctNGZjMC1hYjBiLWMwZjZjODA3OTU4OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4n7NdoAAAAb0lEQVR42u3aMQ0AIADEwPevEbQ8GGAGkhtq4OambXQOAiBAgAABAgQIkAABeh1oJHPXy01AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmTB8ygCAgQIECABAgQIEKAvWz9emwZhCZEoAAAAAElFTkSuQmCC', + + ICON_STOP_ACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAG6GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTAzVDIzOjU1OjEzKzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTAzVDIzOjU1OjEzKzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wM1QyMzo1NToxMyswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMDE2YzFjMy0zZjk1LTRiOTktYTdmNi02ZjgxN2RhMjdhMzciIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmM2ViMzllYi1mOWE5LWM1NGItODU1OC1mMTY0MTJhMWYyMjEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNThhNzQ3My02NWY3LTQyZDUtODkwMS0yMmRmMGU5ODA0ZDQiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjU4YTc0NzMtNjVmNy00MmQ1LTg5MDEtMjJkZjBlOTgwNGQ0IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTAzVDIzOjU1OjEzKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmEwMTZjMWMzLTNmOTUtNGI5OS1hN2Y2LTZmODE3ZGEyN2EzNyIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wM1QyMzo1NToxMyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjQiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI7IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iJmx0OyIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SyfS5wAAAFtJREFUaN7t2bkJADAMA0DtP6lnSJGndx0C4YR6cbUyki8bMDAwMDAwMDCwd7BZtS7nTICBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYG5asHAwMDAwMDAwHo3E4b4mX2rqSkAAAAASUVORK5CYII=', + + ICON_PAUSE_INACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMjoxOSswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjI6MTkrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmRkZDAxZWNjLTZjMzItNGZjMi04YzgxLTMwM2Y2Y2M5MzVhNCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjEwOTEyZDk3LWI1MWEtOWI0Ny05YWRkLWQ0MGNmM2Y0NDFkYyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplOGIyZmYzNC0xNmFmLTQ5MzItYjE1Yy1kMmZlNDE3Y2EyOTkiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjI6MTkrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGRkMDFlY2MtNmMzMi00ZmMyLThjODEtMzAzZjZjYzkzNWE0IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIyOjE5KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmU4YjJmZjM0LTE2YWYtNDkzMi1iMTVjLWQyZmU0MTdjYTI5OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4GJG/aAAAAeElEQVR42u3aMQ0AIAxFwarFE94QgYOCAVImFq7JWzvc/CMzQ+cgAAIECBAgQIAA6S3QHNF2WdSjuNs/gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACZAQsQIECAAAECBOjzFkEkVRGHBIsZAAAAAElFTkSuQmCC', + + ICON_PAUSE_ACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAG6GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTAzVDIzOjU2OjA4KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTAzVDIzOjU2OjA4KzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wM1QyMzo1NjowOCswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjMDNjYWFiMy0xMGRhLTQ0ZDMtOTJiNS0zZDFjOGQxOTU2NTkiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpiYTMzMTRkYS0xZDJkLWJiNDUtODlkZS00MmYwMzQzOGUyYmQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1Y2YwYWU5OS0xMTkyLTQwZGItODc1MC0yODI1NjljMDg5OTIiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NWNmMGFlOTktMTE5Mi00MGRiLTg3NTAtMjgyNTY5YzA4OTkyIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTAzVDIzOjU2OjA4KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmMwM2NhYWIzLTEwZGEtNDRkMy05MmI1LTNkMWM4ZDE5NTY1OSIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wM1QyMzo1NjowOCswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjQiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI7IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iJmx0OyIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+QneD4QAAAGZJREFUaN7t2qENQCEUA8C3P/swDROgwPzkK5iABIEg5JraivONVuLJBhgYGBgYGNiTsK+mscjf89kVGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgY2E0wPw8wMDAwMDCwzU6B9pQlPyOaGwAAAABJRU5ErkJggg==', + + ICON_PLAY_INACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMTo0NSswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjE6NDUrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjRmZWVhMGMzLTU1NjQtNDBkNi04NTFhLTJhOThmYjY3OTQ3ZSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjJlOGYwNzIzLTJmNTktOWY0Ny1hNDA0LTBhYTk5MmI4OTA5MiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphMzAxMDE1Mi1mNDc5LTQzMmItYjdlYi1iZmYxOGU4ZWZlN2IiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjE6NDUrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGZlZWEwYzMtNTU2NC00MGQ2LTg1MWEtMmE5OGZiNjc5NDdlIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIxOjQ1KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmEzMDEwMTUyLWY0NzktNDMyYi1iN2ViLWJmZjE4ZThlZmU3YiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6vUl74AAAA8ElEQVR42u3bSw3CQBQF0FqoBSxgAQu1gIVawAIWagELSAALWHgMTbtownwIK8ghuRu6IDkJc9uZ1y4iOskHAiBAgAABWn7s1o0p/ea7Lz//BnRJuafsAOWBIuWRcgCUB1ozACoDxbwuASoCvTIBKgPFcq0HlAeKteEAlTM3HKB6BkD1jIDqmQDVc801HKBtw+0BfdhwgN7nCKieE6CGhgPU2HCAGhoOUEPDAWpoOEANDQeonDMgfzGLtJp3o+hRw8Oq7Q4bZrZcAdm0d+zj4NDRs+EF4y8GqIzgGeI0BgzIILlXEbzMIoAAAQIE6DfyBIZxyJlmS8HgAAAAAElFTkSuQmCC', + + ICON_PLAY_ACTIVE: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGbmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTAzVDIzOjUwOjI3KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTAzVDIzOjUwOjI3KzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wM1QyMzo1MDoyNyswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1NzMxZTNiZC1iNGFmLTRlY2UtOGNmMS05Y2ZkNzI0MzI3MWUiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowMzJhZjhlMi0yYTgwLTk4NDItOTc4NS02MjkzNzEyYWQ1NDYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1MTRjNzVjOS1jMDRlLTRhOTQtYmZhMC0xZmI0ZTg2N2RlNmQiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTE0Yzc1YzktYzA0ZS00YTk0LWJmYTAtMWZiNGU4NjdkZTZkIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTAzVDIzOjUwOjI3KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjU3MzFlM2JkLWI0YWYtNGVjZS04Y2YxLTljZmQ3MjQzMjcxZSIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wM1QyMzo1MDoyNyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjQiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoxcPIcAAAETSURBVGje7ZrBCYNAEEW3H9uwCHuwBTuwAyuwAhvwkkMOHgI5RMghECSQQ8BADgEzYAlZZycv89nT3h64z92ZCWEXmMvBHMzBHMwGWHNpsn0GBBsew/Sa8iEHgi3LMr/n8lgCwdZUp4oJJpEjxwST9PeeCSaRTW1V6oBJtFWpBqatSk0wVVXqgympMgmYhipTgUnG57ihKhOCraosDgUQbENVJgdbU59rJpikvbZMsMiqNAUWU5XWwKKp0iBYHFXaBIugSstgX6nSOFh36/xTdHm47v0H/Z9XKuYlGPhsYT40maUBZjGHWX5jFkyBJW5mU4LZRmI2/pitWmZzHTgOwRxgYY4cYYfEfF7RwRzMwX55fQBYBye7afDLZQAAAABJRU5ErkJggg==', + + ICON_UP: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6AQMAAAApyY3OAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAIFJREFUKM+90EEKgzAQRmFDFy49ghcp5FquVPBighcRegHBjWDJ68D8U6F7m00+EnhkUlW3ru6rdyCV0INQzSg1zFLLKmU2aeCQQMEEJXIQORRsTLNyKJhNm3IoaPBg4mQorp2Mh1+00kKN307o/bZrpt5O/FlPU/c75X91/fPd6wPRD1eHyHEL4wAAAABJRU5ErkJggg==', + + ICON_DOWN: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6AQMAAAApyY3OAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAIlJREFUKM/F0DEOwyAMBVAjDxk5Qo7CtdiClIv1KJF6gUpZIhXxY2zTDJ2benoS8LFN9MsKbYjxF2XRS1UZ4bCeGFztFmNqphURpidm146kpwFvLDYJpPQtLSLNoySyP2bRpoqih2oSFW8K3lYAxmJGXA88XMnjeuDmih7XA8vXvNeeqX6U6aY6AacbWAQNWOPUAAAAAElFTkSuQmCC', + + ICON_LEFT: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6AQMAAAApyY3OAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAHpJREFUKM+1kTEOgCAQBM9Q2JjwA/mJPA2fxlN4giWF8TRBBhMpbKSaZie3i8gPb4Y8FNZKGm8YIAONkNWacIruQLejy+gyug1dQhfRqZa0v6gYA6QfqSWapZnto1B6XdUuFaVHoJunr2MD21nIdJYUEhLYfoGmP777BKKIXC0eYSD5AAAAAElFTkSuQmCC', + + ICON_RIGHT: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6AQMAAAApyY3OAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAHhJREFUKM+10LERgCAMQFE4CktHcBRWcRMYzVEcwdKCI+od+fGksVCq3/AuiXOfvZnaNXzRClVrEKtMLdSqP2RTRQAFMAFGwAlw7MAk0sAzGnhVoerLKg/F5Pv4NoFNZZNGpk9sxJYeLsDdL5T7S8IFOM/R3OZ+fQeQZV9pMy+bVgAAAABJRU5ErkJggg==', + + ICON_UP_RIGHT: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAMAAAAk2e+/AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAABhlBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+X02G5AAAAgXRSTlMAAte32QZhZx7d+TywDTf8/d5VstYPOxULNvKmSY8TFBrxyeGCluJeELQ5uw7ULND4BedlKuv2P/vDA8UgCk30WO41s8+5X8dABAz6QhHVaR156JpPnihSfTJDNOMBm4bzSICqr23NsRjcGRbtjTCS2lzsOmyu9+WLKb2fTL8+RPDhqO4yAAABfElEQVRYw+3WZW/CUBQG4AO0FBsOwwcMm7sLc3d3d3e388/HGGs7lpD0tsm+9P3S5CT3SdPec+8BkCNHzv9FAVAAEABYdQDkA7jo9GNUIDMBzstb5vr0/Gx8Z35zOjI36R2xbu+619eWa2xCoK0FClF5h1cWxDHEwilEOyLlQc8hokoAlMRcESBh7siQlJBWKkijNaHuPrWBED9iYiDQ7Pv1D4Z4/DXyFo2JgeAghQEkEgAvT6IgNo/PIUmgd62oj80mqEIpINoXRkmg2j2UBDIWVXKLTSXEUIOF/xbV5aRQsJvvUOoqMqjZZ+c7FcX8ThYCtTbxHV0fkEGDA73D3Dpzi/6rWEYAdSn579PZ/t3IBJChkef0dLRlHXdkJ6TSmSnmiYPq1LQIiGHX9BvZYinJ7/+R6q1czUG0j9KSOTxDc6UhshZhMIQrS78mncwZtzErrNcYL6V2Zd0tJ6i7QFtAYPcvHv25W6J+/Y3BrRA/x6WGuGN5mpUjhyyfsGtrpKE95HoAAAAASUVORK5CYII=', + + ICON_DOWN_RIGHT: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAMAAAAk2e+/AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAABXFBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9jYfXuAAAAc3RSTlMAQ98Ox1j9gAtRNTqBPfgu9p/MTQ+G1Qfx7Y0VBYyJgjkGd3ysU+Zz1IQvMM20PgwBp8Mi4TSUiDvlPxylsaF2WfcjJh0S+wLzQLmY4l/ovX3ra1rPLAOSKa4RUEvgcZwbFHqPzodGbX7qPMvCtsEq1laguT+HEwAAAVlJREFUWMPt1sduwkAQgOGxDfFCIITe0nvvvZHee++992TeX4pJQIC9hPWaQ6T41x6skfY7WGPJAGZm/6qgZjIH4AMgOp2Lq32batTkdW/trPt9+qC70DVmSKS2BXF7A1fX9DDnN2FUSpe8y5hID3SZuJMmrcwmoSFm5vD0BDWSNTnCUmZoD1PZtJCDGfIgRUpBMjPkR4rEAwUtFIkHAkKRuCCaxAdRJE5IK/FCGumWF1JLEW5ILfFD2ST9UBaJA6JLPBCQ57xAJcp5NQbtSgBReJSsH8QI5No8ODo+u397ecL3T35IGhcRA4jig8E9qmjAX2OGnAV5ggrxr0ELOaByVmg6B1TGvEYyTvxcKUaMv/ii7xN/VAZYY2dfSHkkPOYY7Kpf7OmLzLfGPIFGd6izWrRUjdYt9Xfo+ULsLpgRKqGtGyadAEIUmnuhXSAwMAXD5j+omZlZRl+X30CWTm2dHwAAAABJRU5ErkJggg==', + + ICON_UP_LEFT: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAMAAAAk2e+/AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAABLFBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9PVkEkAAAAY3RSTlMAAQ/6Uc0OEAvHTzL7TcudsMHvdwnfUwMcG8UGiIfTrIkg9QI+/ZTDe460km73LNovCo1vQUuR4Lwk45/OK+3UERTkekziZlSK8QQnoOsFaaXmLqOylvPZLYDRZTUWUpiTDfAuEmiSAAABUklEQVRYw+3WZ2+DMBAG4EtTygrQ7NHsJt1777333vv+/38o6gIMSo0dqf3AK1lIZ/mRjPEJgCBBgvxtQr8WqDKbCiWUG1AnYXU7C7UJqKQSR5oKQwqIPphsYW24nEPjJCYXilf9F+G+qeTmThTP5w8X8gK9NLqOGMGPhD8fdXtBkGihlmlsmF5aqK2xg9FmQe3/DupuEhTpoT41z/V1HVHfxWRRo/6ORBfyjILx9mRo+2MDlS3ggF5q4uP9qzmVNjfOA+EDdDLcWA8IW6FJEJPkCbFI3hCDZEFVPsmC7mQuyYJ0iUuyIAG4JDvEJTkgHskJcUgExC6RECmxQ4REDa24ILsU6wL/rfYHskmX9C87Pfi9aA5cUmnRx/kffDmncSCkat7X342KSzOIuesNR1WSl7GU8Xfbbs9Gyoo0TvRp6Tie8d2TOsyx51UMEiQIS94B13oTqqYgGGoAAAAASUVORK5CYII=', + + ICON_DOWN_LEFT: + 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAMAAAAk2e+/AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAABg1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8aT76cAAAAgHRSTlMAafwJfflezc+3WA7Z5Rk6PAvpBNE73kJT89QxZ48czNIv9A1DnI3qKQUaymjT4a7HdVuGf85LR20CVHr+tLBlA0GvYSTYZEnbAcazNPX4yB4GrAgnmL6Bcj4qIVKIe8kdVadIEe27B90bOG/3Er1rYJq1wibyh+4Q5CMzRllMXDo5euMAAAGfSURBVFjD7dblUwJBGAbw5aSlBJRGQERBkLC7u7u7u7veP90jDnaEcdhjP+k9X5h9Zu43O7PLe4eQECH/KGsIaUooOEcLK75LpehH628idSrE+nMANfyQ3MY2BRm0C6mM462tUwJAJtVyUB1WmsoSFZEk46D6TBcYS3UKPpCYawxD5VxHImVD/RHIxMQbGintkGQcppkcOkuutQPYfkDfmjck556ZTSydve2YY5UWk0Mww672VPh+XFqCU8tA+whtL+KOpa+bF3Rh8B4ymDNaSnSzG9IPIpsL34/HTPZfS58auMPYuYNMWcQXOsD3U9ZDOkZkkCvqwSIqUI2WfEDmgiQxRANiIp8GKtDLO6/Znw19oOdXhKoROtEUBr1F5Y9f4dt1XygqKgh6YqcHwMQkQBWICr1H6czTgrpoQde0IGnekJEWNEwLMv/GPDDB/M/fDioVeLYA5GqoYt+xNRY4toJkCiBUG7vTEVxJu2Z549RbqXQuba7uVDZWO66mgw6d7kYaEPvvCb+REIp/srGzLP4aa0n8zKFkKUSIkD+Qb9QrYMvxAbaBAAAAAElFTkSuQmCC', +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..7dd8919 --- /dev/null +++ b/src/index.js @@ -0,0 +1,262 @@ +import { + runEntrypoint, + InstanceBase, + InstanceStatus, +} from "@companion-module/base"; +import { UpgradeScripts } from "./upgrades.js"; +import { getActionDefinitions } from "./actions.js"; +import { getFeedbackDefinitions } from "./feedbacks.js"; +import { getPresetDefinitions } from "./presets.js"; +import { setVariables, checkVariables } from "./variables.js"; +import { ConfigFields } from "./config.js"; + +import util from "util"; +import { HttpClient } from "urllib"; + +// ######################## +// #### Instance setup #### +// ######################## +class axisPTZInstance extends InstanceBase { + getCameraInformation() { + const urllib = new HttpClient(); + urllib + .request( + this.config.host + "/axis-cgi/param.cgi?action=list", + this.config.authtext + ) + .then((result) => { + // store header information + var resObj = result.data; + if (!String(resObj).includes('"status": 200')) { + this.updateStatus(InstanceStatus.ConnectionFailure); + this.log("debug", "Connection Failure: " + resObj); + } else { + this.updateStatus(InstanceStatus.Ok); + this.processCameraInformation(resObj); + } + }) + .catch((err) => { + this.log("debug", "Axis Error: " + util.inspect(err)); + this.updateStatus(InstanceStatus.ConnectionFailure); + }); + } + + processCameraInformation(data) { + let resultObj = String(data); + if (resultObj.includes("401 Unauthorized")) { + this.updateStatus(InstanceStatus.ConnectionFailure); + } else { + this.updateStatus(InstanceStatus.Ok); + + let chunks = resultObj.split("\n"); + + var attarr = []; + + for (let i = 0; i < chunks.length - 1; i += 1) { + const val = chunks[i].split("=")[1]; + + switch (String(chunks[i].split("=")[0])) { + case "root.Brand.ProdShortName": + attarr["CameraType"] = val; + break; + case "root.PTZ.Limit.L1.MaxFocus": + attarr["MaxFocus"] = Number(val); + break; + case "root.PTZ.Limit.L1.MinFocus": + attarr["MinFocus"] = Number(val); + break; + case "root.PTZ.Limit.L1.MaxPan": + attarr["MaxPan"] = val; + break; + case "root.PTZ.Limit.L1.MaxTilt": + attarr["MaxTilt"] = Number(val); + break; + case "root.PTZ.Limit.L1.MaxZoom": + attarr["MaxZoom"] = Number(val); + break; + case "root.PTZ.Limit.L1.MinZoom": + attarr["MinZoom"] = Number(val); + break; + case "root.PTZ.Limit.L1.MinTilt": + attarr["MinTilt"] = Number(val); + break; + case "root.PTZ.Limit.L1.MinPan": + attarr["MinPan"] = Number(val); + break; + case "root.PTZ.UserAdv.U1.MoveSpeed": + attarr["speed"] = Number(val); + break; + } + } + this.setVariableValues(attarr); + this.checkFeedbacks(); + } + } + + getCameraPosition() { + const urllib = new HttpClient(); + urllib + .request( + this.config.host + "/axis-cgi/com/ptz.cgi?query=position", + this.config.authtext + ) + .then((result) => { + var resObj = result.data; + this.processCameraPosition(resObj); + }) + .catch((err) => { + this.log("debug", "Axis Error: " + util.inspect(err)); + }); + } + + processCameraPosition(data) { + let resultObj = String(data); + let chunks = resultObj.split("\n"); + + var attarr = []; + + for (let i = 0; i < chunks.length - 1; i += 1) { + const val = chunks[i].split("=")[1]; + + switch (chunks[i].split("=")[0]) { + case "pan": + attarr["pan"] = val; + break; + case "tilt": + attarr["tilt"] = val; + break; + case "zoom": + attarr["zoom"] = val; + break; + + case "focus": + attarr["focus"] = val; + break; + + case "autofocus": + attarr["autofocus"] = val.trim(); + + break; + case "brightness": + attarr["brightness"] = val; + break; + } + } + + //this.checkVariables(this, attarr) + this.setVariableValues(attarr); + this.checkFeedbacks(); + } + + // When module gets deleted + async destroy() { + // Remove TCP Server and close all connections + } + // Initalize module + async init(config) { + this.config = config; + + if (Number(this.config.authmethod) == 1) { + this.config.authtext = { digestAuth: `root:werken` }; + } else { + this.config.authtext = { auth: `root:werken` }; + } + + this.data = { + debug: false, + modelTCP: "NaN", + model: "Auto", + series: "Auto", + name: "NaN", + version: "NaN", + error: "NaN", + power: "NaN", + ins: "NaN", + tally: "NaN", + oaf: "NaN", + irisMode: "NaN", + recallModePset: "NaN", + }; + + this.ptSpeed = 25; + this.ptSpeedIndex = 25; + this.zSpeed = 25; + this.zSpeedIndex = 25; + this.fSpeed = 25; + this.fSpeedIndex = 25; + + this.config.host = this.config.host || ""; + this.config.httpPort = this.config.httpPort || 80; + this.config.tcpPort = this.config.tcpPort || 31004; + + this.config.authmethod = this.config.authmethod || 0; + + this.updateStatus(InstanceStatus.Connecting); + + // this.init_tcp() + this.init_actions(); // export actions + this.init_presets(); + this.init_variables(); + this.init_feedbacks(); + this.getCameraInformation(); + this.getCameraPosition(); + // this.checkVariables(); + + this.checkFeedbacks(); + } + // Update module after a config change + async configUpdated(config) { + this.config = config; + this.updateStatus(InstanceStatus.Connecting); + if (Number(this.config.authmethod) == 1) { + this.config.authtext = { digestAuth: `root:werken` }; + } else { + this.config.authtext = { auth: `root:werken` }; + } + + // this.init_tcp() + this.init_actions(); // export actions + this.init_presets(); + this.init_variables(); + this.init_feedbacks(); + // this.checkVariables(); + this.getCameraInformation(); + this.getCameraPosition(); + + this.checkFeedbacks(); + } + + // Return config fields for web config + getConfigFields() { + return ConfigFields; + } + + // ########################## + // #### Instance Presets #### + // ########################## + init_presets() { + this.setPresetDefinitions(getPresetDefinitions(this)); + } + // ############################ + // #### Instance Variables #### + // ############################ + init_variables() { + this.setVariableDefinitions(setVariables(this)); + } + // Setup Initial Values + checkVariables() { + checkVariables(this); + } + // ############################ + // #### Instance Feedbacks #### + // ############################ + init_feedbacks() { + this.setFeedbackDefinitions(getFeedbackDefinitions(this)); + } + + init_actions() { + this.setActionDefinitions(getActionDefinitions(this)); + } +} + +runEntrypoint(axisPTZInstance, UpgradeScripts); diff --git a/src/models.js b/src/models.js new file mode 100644 index 0000000..ce7e977 --- /dev/null +++ b/src/models.js @@ -0,0 +1,744 @@ +import { c } from './choices.js' + +export const MODELS = [ + { id: 'Auto', series: 'Auto', label: 'Auto Detect' }, + { id: 'AW-HE2', series: 'AW-HE2', label: 'AW-HE2' }, + { id: 'AW-HE35', series: 'HE40', label: 'AW-HE35' }, + { id: 'AW-HE38', series: 'HE40', label: 'AW-HE48' }, + { id: 'AW-HE40', series: 'HE40', label: 'AW-HE40' }, + { id: 'AW-HE42', series: 'HE42', label: 'AW-HE42' }, + { id: 'AW-HE48', series: 'HE40', label: 'AW-HE48' }, + { id: 'AW-HE50', series: 'AW-HE50', label: 'AW-HE50' }, + { id: 'AW-HE58', series: 'HE40', label: 'AW-HE58' }, + { id: 'AW-HE60', series: 'AW-HE60', label: 'AW-HE60' }, + { id: 'AW-HE65', series: 'HE40', label: 'AW-HE65' }, + { id: 'AW-HE68', series: 'HE42', label: 'AW-HE68' }, + { id: 'AW-HE70', series: 'HE40', label: 'AW-HE70' }, + { id: 'AW-HE75', series: 'HE42', label: 'AW-HE75' }, + { id: 'AW-HE120', series: 'AW-HE120', label: 'AW-HE120' }, + { id: 'AW-HE130', series: 'AW-HE130', label: 'AW-HE130' }, + { id: 'AW-HR140', series: 'AW-HR140', label: 'AW-HR140' }, + { id: 'AW-HN38', series: 'HE40', label: 'AW-HN38' }, + { id: 'AW-HN40', series: 'HE40', label: 'AW-HN40' }, + { id: 'AW-HN65', series: 'HE40', label: 'AW-HN65' }, + { id: 'AW-HN70', series: 'HE40', label: 'AW-HN70' }, + { id: 'AW-UE4', series: 'AW-UE4', label: 'AW-UE4' }, + { id: 'AW-UE63', series: 'UE70', label: 'AW-UE63' }, + { id: 'AW-UE65', series: 'UE70', label: 'AW-UE65' }, + { id: 'AW-UE70', series: 'UE70', label: 'AW-UE70' }, + { id: 'AW-UE100', series: 'UE150', label: 'AW-UE100' }, + { id: 'AW-UE150', series: 'UE150', label: 'AW-UE150' }, + { id: 'AW-UE155', series: 'UE150', label: 'AW-UE155' }, + { id: 'AW-UN70', series: 'UE70', label: 'AW-UN70' }, + { id: 'AW-UN145', series: 'UE150', label: 'AW-UN145' }, + { id: 'AW-HEF5', series: 'AW-HEF5', label: 'AW-HEF5' }, + { id: 'AW-SFU01', series: 'AW-SFU01', label: 'AW-SFU01' }, + { id: 'AK-UB300', series: 'AK-UB300', label: 'AK-UB300' }, + { id: 'Other', series: 'Other', label: 'Other Cameras' }, +] + +// list of all Series: +// Other +// HE40 +// HE42 +// UE70 +// UE150 +// AW-HE2 +// AW-HE50 +// AW-HE60 +// AW-HE120 +// AW-HE130 +// AW-HR140 +// AW-HEF5 +// AW-UE4 +// AW-SHU01 +// AK-UB300 + +export const SERIES_SPECS = [ + { + // Includes all Actions / Variabels / Feedbacks + id: 'Other', + variables: { + version: true, // If a camera sends a package every minute with the firmware version (qSV3) + error: true, // Camera can return Error messages when actions fail (rER) + ins: true, // Install position (iNS0 or iNS1) + power: true, // Power State (p1 or p0) + tally: true, // Tally State (TLR:1 or TLR:0) + OAF: true, // Has Auto Focus (OAF:1 or OAF:0) + iris: true, // Has Auto Iris (d30 or d31) + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, // Power State (p1 or p0) + tallyState: true, // Tally State (TLR:1 or TLR:0) + insState: true, // Install position (iNS0 or iNS1) + autoFocus: true, // Has Auto Focus (OAF:1 or OAF:0) + autoIris: true, // Has Auto Iris (d30 or d31) + preset: true, + }, + actions: { + panTilt: true, // Has Pan/Tilt Support (PTSxx) + ptSpeed: true, // Internal Speed Options + zoom: true, // Has Zoom Support (Zxx) + zSpeed: true, // Internal Speed Options + focus: true, // Has Focus Support (Fxx) + fSpeed: true, // Internal Speed Options + OAF: true, // Has Auto Focus Support (D10 or D11) + OTAF: true, // Has One Touch Auto Focus Support (OSE:69:1) + iris: true, // Has Iris Support (manual and auto) (Ixx) + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_OTHER() }, // Has Gain Support + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_OTHER }, // Has Shutter Support + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_OTHER() }, // Has Pedistal Support + filter: { cmd: 'OFT:', dropdown: c.CHOICES_FILTER_OTHER() }, // Has ND Filter Support + preset: true, // Can Save and Recall Presets (Mxxx or Rxxx) + speedPset: true, // Has Preset Recall Speed Control (UPVSxx) + timePset: true, // Has Preset Recall Time Control (UPVSxx or OSJ:29:xx) + power: true, // Has Power Control (O0 or O1) + tally: true, // Has Red Tally Light Control (DA1 or DA0) + ins: true, // Has Install Position Control (INSx) + sdCard: true, // Has SD Card Recording Control (sdctrl?save=start or sdctrl?save=end) + }, + }, + + { + // Specific for the HE40 Series + id: 'HE40', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_HE40 }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_HE40() }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_HE40() }, + filter: false, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: true, + }, + }, + + { + // Specific for the HE42 Series + id: 'HE42', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_HE42() }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_HE42() }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_HE42() }, + filter: { cmd: 'OFT:', dropdown: c.CHOICES_FILTER_HE42() }, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: true, + }, + }, + + { + // Specific for the UE70 Series + id: 'UE70', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_UE70() }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_UE70() }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_UE70() }, + filter: { cmd: 'OFT:', dropdown: c.CHOICES_FILTER_UE70 }, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: true, + }, + }, + + { + // Specific for the UE150 Series + id: 'UE150', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_UE150() }, + shut: false, // TODO: Add it's own shutter "OSJ:06:" + ped: false, // TODO: Add it's own Pedestal "OSJ:0F:" + filter: { cmd: 'OFT:', dropdown: c.CHOICES_FILTER_UE150() }, + preset: true, + speedPset: true, + timePset: true, + power: true, + ins: true, + tally: true, + sdCard: false, + }, + }, + + { + // Specific for the AW-HE2 Camera + id: 'AW-HE2', // A lot has been turned off since it will need custop setups for this camera, can be added if requested + variables: { + version: true, + error: true, + ins: false, + power: true, + tally: true, + OAF: false, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: false, + autoFocus: false, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: false, + fSpeed: false, + OAF: false, + OTAF: false, + iris: true, // Might not work correctly (Auto/Manual should work though) + gain: false, + shut: false, + ped: false, + filter: false, + preset: true, + speedPset: false, + timePset: false, + power: true, + tally: true, + ins: false, + sdCard: false, + }, + }, + + { + // Specific for the AW-HE50 Camera + id: 'AW-HE50', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_HE50 }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_HE50 }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_HE50() }, + filter: false, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: false, + }, + }, + + { + // Specific for the AW-HE60 Camera + id: 'AW-HE60', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_HE60() }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_HE60() }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_HE60() }, + filter: false, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: false, + }, + }, + + { + // Specific for the AW-HE120 Camera + id: 'AW-HE120', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_HE120 }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_HE120 }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_HE120() }, + filter: { cmd: 'OFT:', dropdown: c.CHOICES_FILTER_HE120 }, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: false, + }, + }, + + { + // Specific for the AW-HE130 Camera + id: 'AW-HE130', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_HE130 }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_HE130 }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_HE130() }, + filter: { cmd: 'OFT:', dropdown: c.CHOICES_FILTER_HE130 }, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: false, + }, + }, + + { + // Specific for the AW-HR140 Camera + id: 'AW-HR140', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_HR140 }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_HR140() }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_HR140() }, + filter: { cmd: 'OFT:', dropdown: c.CHOICES_FILTER_HR140() }, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: false, + }, + }, + + { + // Specific for the AW-HEF5 Camera + id: 'AW-HEF5', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_HE50 }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_HE50 }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_HE50() }, + filter: true, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: false, + }, + }, + + { + // Specific for the AW-UE4 Camera + id: 'AW-UE4', // A lot has been turned off since it will need custop setups for this camera, can be added if requested + variables: { + version: false, + error: true, + ins: true, + power: true, + tally: true, + OAF: false, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: false, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: false, + OTAF: false, + iris: true, // Might not work correctly (Auto/Manual should work though) + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_UE4 }, + shut: { cmd: 'OSJ:06:', dropdown: c.CHOICES_SHUTTER_UE4 }, + ped: false, + filter: false, + preset: true, + speedPset: false, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: false, + }, + }, + + { + // Specific for the AW-SHU01 Camera + id: 'AW-SHU01', + variables: { + version: true, + error: true, + ins: true, + power: true, + tally: true, + OAF: true, + iris: true, + gainValue: true, + preset: true, + }, + feedbacks: { + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + preset: true, + }, + actions: { + panTilt: true, + ptSpeed: true, + zoom: true, + zSpeed: true, + focus: true, + fSpeed: true, + OAF: true, + OTAF: true, + iris: true, + gain: { cmd: 'OGU:', dropdown: c.CHOICES_GAIN_UE70() }, + shut: { cmd: 'OSH:', dropdown: c.CHOICES_SHUTTER_UE70() }, + ped: { cmd: 'OTP:', dropdown: c.CHOICES_PEDESTAL_UE70() }, + filter: { cmd: 'OFT:', dropdown: c.CHOICES_FILTER_UE70 }, + preset: true, + speedPset: true, + timePset: false, + power: true, + tally: true, + ins: true, + sdCard: false, + }, + }, + + { + // Specific for the AK-UB300 Camera + id: 'AK-UB300', + variables: { + version: false, + error: true, + power: true, + ins: false, + OAF: false, + iris: false, + preset: false, + }, + feedbacks: { + powerState: true, + insState: false, + autoFocus: false, + autoIris: false, + preset: false, + }, + actions: { + panTilt: false, + ptSpeed: false, + zoom: false, + zSpeed: false, + focus: false, + fSpeed: false, + OAF: false, + OTAF: false, + iris: false, + gain: { cmd: 'OGS:', dropdown: c.CHOICES_GAIN_UB300 }, + shut: { cmd: 'OSG:5D:', dropdown: c.CHOICES_SHUTTER_UB300 }, + ped: false, // TODO: Add UB300 Pedestal "OSG:4A:" + filter: { cmd: 'OFT:', dropdown: c.CHOICES_FILTER_UB300 }, + preset: false, + speedPset: false, + timePset: false, + power: false, + ins: false, + tally: false, + sdCard: false, + }, + }, +] diff --git a/src/presets.js b/src/presets.js new file mode 100644 index 0000000..80d4ab0 --- /dev/null +++ b/src/presets.js @@ -0,0 +1,869 @@ +import { combineRgb } from "@companion-module/base"; + +import { icons } from "./icons.js"; + +export function getPresetDefinitions(self) { + const presets = {}; + + const foregroundColor = combineRgb(255, 255, 255); // White + const backgroundColorRed = combineRgb(255, 0, 0); // Red + + const seriesActions = {}; + seriesActions.panTilt = true; + + // console.log(SERIES); + + // ########################## + // #### Pan/Tilt Presets #### + // ########################## + + if (seriesActions.panTilt) { + presets["pan-tilt-up"] = { + type: "button", + category: "Pan/Tilt", + name: "UP", + style: { + png64: icons.ICON_UP, + pngalignment: "center:center", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "up", + options: { + speed: 25, + }, + }, + ], + up: [ + { + actionId: "stop", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "MaxTiltLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["pan-tilt-down"] = { + type: "button", + category: "Pan/Tilt", + name: "DOWN", + style: { + text: "", + png64: icons.ICON_DOWN, + pngalignment: "center:center", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "down", + options: { + speed: 25, + }, + }, + ], + up: [ + { + actionId: "stop", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "MinTiltLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["pan-tilt-left"] = { + type: "button", + category: "Pan/Tilt", + name: "LEFT", + style: { + text: "", + png64: icons.ICON_LEFT, + pngalignment: "center:center", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "left", + options: { + speed: 25, + }, + }, + ], + up: [ + { + actionId: "stop", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "MinPanLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["pan-tilt-right"] = { + type: "button", + category: "Pan/Tilt", + name: "RIGHT", + style: { + text: "", + png64: icons.ICON_RIGHT, + pngalignment: "center:center", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "right", + options: { + speed: 25, + }, + }, + ], + up: [ + { + actionId: "stop", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "MaxPanLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["pan-tilt-up-right"] = { + type: "button", + category: "Pan/Tilt", + name: "UP RIGHT", + style: { + text: "", + png64: icons.ICON_UP_RIGHT, + pngalignment: "center:center", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "upRight", + options: { + speed: 25, + }, + }, + ], + up: [ + { + actionId: "stop", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "MaxTiltLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + { + feedbackId: "MaxPanLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["pan-tilt-up-left"] = { + type: "button", + category: "Pan/Tilt", + name: "UP LEFT", + style: { + text: "", + png64: icons.ICON_UP_LEFT, + pngalignment: "center:center", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "upLeft", + options: { + speed: 25, + }, + }, + ], + up: [ + { + actionId: "stop", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "MaxTiltLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + { + feedbackId: "MinPanLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["pan-tilt-down-left"] = { + type: "button", + category: "Pan/Tilt", + name: "DOWN LEFT", + style: { + text: "", + png64: icons.ICON_DOWN_LEFT, + pngalignment: "center:center", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "downLeft", + options: { + speed: 25, + }, + }, + ], + up: [ + { + actionId: "stop", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "MinTiltLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + { + feedbackId: "MinPanLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["pan-tilt-down-right"] = { + type: "button", + category: "Pan/Tilt", + name: "DOWN RIGHT", + style: { + text: "", + png64: icons.ICON_DOWN_RIGHT, + pngalignment: "center:center", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "downRight", + options: { + speed: 25, + }, + }, + ], + up: [ + { + actionId: "stop", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "MinTiltLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + { + feedbackId: "MaxPanLimit", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["pan-tilt-home"] = { + type: "button", + category: "Pan/Tilt", + name: "Home", + style: { + text: "HOME", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "home", + options: {}, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + } + seriesActions.ptSpeed = false; + if (seriesActions.ptSpeed) { + presets["pan-tilt-speed-up"] = { + type: "button", + category: "Pan/Tilt", + name: "Speed Up", + style: { + text: "SPEED\\nUP\\n$(axis-PTZ:ptSpeedVar)", + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "ptSpeedU", + options: {}, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + + presets["pan-tilt-speed-down"] = { + type: "button", + category: "Pan/Tilt", + name: "Speed Down", + style: { + text: "SPEED\\nDOWN\\n$(axis-PTZ:ptSpeedVar)", + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "ptSpeedD", + options: {}, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + + presets["pan-tilt-speed-high"] = { + type: "button", + category: "Pan/Tilt", + name: "Speed Set High", + style: { + text: "SET\\nSPEED\\nHIGH", + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "ptSpeedS", + options: { + speed: 40, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + + presets["pan-tilt-speed-mid"] = { + type: "button", + category: "Pan/Tilt", + name: "Speed Set Mid", + style: { + text: "SET\\nSPEED\\nMID", + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "ptSpeedS", + options: { + speed: 25, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + + presets["pan-tilt-speed-low"] = { + type: "button", + category: "Pan/Tilt", + name: "Speed Set Low", + style: { + text: "SET\\nSPEED\\nLOW", + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "ptSpeedS", + options: { + speed: 10, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + } + + // ###################### + // #### Lens Presets #### + // ###################### + + seriesActions.zoom = true; + if (seriesActions.zoom) { + presets["lens-zoom-in"] = { + type: "button", + category: "Lens", + name: "Zoom In", + style: { + text: "ZOOM\\nIN", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "zoomI", + options: { + zoomspeed: 25, + }, + }, + ], + up: [ + { + actionId: "zoomS", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "maxzoom", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["lens-zoom-out"] = { + type: "button", + category: "Lens", + name: "Zoom Out", + style: { + text: "ZOOM\\nOUT", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "zoomO", + options: { + zoomspeed: 25, + }, + }, + ], + up: [ + { + actionId: "zoomS", + options: {}, + }, + ], + }, + ], + feedbacks: [ + { + feedbackId: "minzoom", + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + } + + seriesActions.focus = true; + if (seriesActions.focus) { + presets["lens-focus-near"] = { + type: "button", + category: "Lens", + name: "Focus Near", + style: { + text: "FOCUS\\nNEAR", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "focusN", + options: {}, + }, + ], + up: [ + { + actionId: "focusS", + options: {}, + }, + ], + }, + ], + feedbacks: [], + }; + + presets["lens-focus-far"] = { + type: "button", + category: "Lens", + name: "Focus Far", + style: { + text: "FOCUS\\nFAR", + size: "18", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "focusF", + options: {}, + }, + ], + up: [ + { + actionId: "focusS", + options: {}, + }, + ], + }, + ], + feedbacks: [], + }; + } + + seriesActions.OAF = true; + if (seriesActions.OAF) { + presets["lens-focus-manual"] = { + type: "button", + category: "Lens", + name: "Manual Focus", + style: { + text: "MANUAL\\nFOCUS", + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "focusM", + options: { + bol: 1, + }, + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: "autoFocus", + options: { + option: "0", + }, + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + + presets["lens-focus-auto"] = { + type: "button", + category: "Lens", + name: "Auto Focus", + style: { + text: "AUTO\\nFOCUS", + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "focusM", + options: { + bol: 0, + }, + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: "autoFocus", + options: { + option: "1", + }, + style: { + color: foregroundColor, + bgcolor: backgroundColorRed, + }, + }, + ], + }; + } + + // ########################### + // #### Load/save Presets #### + // ########################### + seriesActions.preset = true; + if (seriesActions.preset) { + for (let save = 0; save < 100; save++) { + presets[`save-preset-${save}`] = { + type: "button", + category: "Save Preset", + name: "Save Preset " + parseInt(save), + style: { + text: "SAVE\\nPSET\\n" + parseInt(save), + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "Setpreset", + options: { + val: ("0" + save.toString(10).toUpperCase()).substr(-2, 2), + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + } + } + + if (seriesActions.timePset) { + presets["recall-preset-preset-mode-speed"] = { + type: "button", + category: "Recall Preset", + name: "Preset Mode Speed", + style: { + text: "PRESET\\nMODE\\nSPEED", + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "modePset", + options: { + mode: 0, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + + presets["recall-preset-preset-mode-time"] = { + type: "button", + category: "Recall Preset", + name: "Preset Mode Time", + style: { + text: "PRESET\\nMODE\\nTIME", + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "modePset", + options: { + mode: 1, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + } + + for (let recall = 0; recall < 100; recall++) { + presets[`recall-preset-${recall}`] = { + type: "button", + category: "Recall Preset", + name: "Recall Preset " + parseInt(recall), + style: { + text: "Recall\\nPSET\\n" + parseInt(recall), + size: "14", + color: 16777215, + bgcolor: combineRgb(0, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: "preset", + options: { + val: ("0" + recall.toString(10).toUpperCase()).substr(-2, 2), + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + }; + } + + return presets; +} diff --git a/src/upgrades.js b/src/upgrades.js new file mode 100644 index 0000000..b69aaf0 --- /dev/null +++ b/src/upgrades.js @@ -0,0 +1,12 @@ +import { CreateConvertToBooleanFeedbackUpgradeScript } from '@companion-module/base' + +export const UpgradeScripts = [ + CreateConvertToBooleanFeedbackUpgradeScript({ + powerState: true, + tallyState: true, + insState: true, + autoFocus: true, + autoIris: true, + modePset: true, + }), +] diff --git a/src/variables.js b/src/variables.js new file mode 100644 index 0000000..931c355 --- /dev/null +++ b/src/variables.js @@ -0,0 +1,70 @@ +export function setVariables() { + var variables = []; + + // Set the model and series selected, if in auto, dettect what model is connected via TCP + + // Find the specific commands for a given series + + // console.log(SERIES); + + // console.log('variable set'); + // console.log(self.config.model); + // console.log(self.data.model); + // console.log(self.data.modelTCP); + // console.log(self.data.series); + variables.push({ variableId: "CameraType", name: "Camera Type" }); + variables.push({ variableId: "autofocus", name: "AutoFocus" }); + variables.push({ variableId: "MaxPan", name: "MaxPan" }); + variables.push({ variableId: "MinPan", name: "MinPan" }); + variables.push({ variableId: "MaxTilt", name: "Maxtilt" }); + variables.push({ variableId: "MinTilt", name: "Mintilt" }); + + variables.push({ variableId: "MaxZoom", name: "MaxZoom" }); + variables.push({ variableId: "MinZoom", name: "MinZoom" }); + variables.push({ variableId: "MaxFocus", name: "Maxfocus" }); + variables.push({ variableId: "MinFocus", name: "MinFocus" }); + + variables.push({ variableId: "pan", name: "Current Pan Position" }); + variables.push({ variableId: "tilt", name: "Current Tilt Position" }); + + variables.push({ variableId: "zoom", name: "Current Zoom Position" }); + variables.push({ variableId: "focus", name: "Current Focus Position" }); + variables.push({ variableId: "brightness", name: "Current Brightness" }); + variables.push({ variableId: "speed", name: "PTZ Speed" }); + + return variables; +} + +// ######################### +// #### Check Variables #### +// ######################### +export function checkVariables(self) { + self.setVariableValues({ + series: self.data.series, + model: self.data.model, + name: self.data.name, + version: self.data.version, + error: self.data.error, + ins: self.data.ins, + power: self.data.power, + tally: self.data.tally, + OAF: self.data.oaf, + irisMode: self.data.irisMode, + presetMode: self.data.recallModePset, + ptSpeedVar: self.ptSpeed, + zSpeedVar: self.zSpeed, + fSpeedVar: self.fSpeed, + }); +} +export function getVariableValue(name) { + let _this = this; + if ( + Object.prototype.hasOwnProperty.call(_this.variables.changes.values, name) + ) { + return _this.variables.changes.values[name]; + } + let variable = _this.variables.definitions[name]; + if (variable) { + return variable.value; + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..ebd8803 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2436 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@companion-module/base@~1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@companion-module/base/-/base-1.0.0.tgz#25688fc530a03fdfe2100b5a08e328f11f7e9566" + integrity sha512-r/SDr2N1JqvHnMsr9E35REizoXExnl7o7iUVBMDVSz4UVPhS6Zal63j8lZbmUZM4MjHLvv5KiE6bfv+iWWezjg== + dependencies: + "@sentry/node" "^7.21.1" + "@sentry/tracing" "^7.21.1" + ajv "^8.11.2" + ejson "^2.2.3" + eventemitter3 "^4.0.7" + nanoid "^3.3.4" + p-queue "^6.6.2" + p-timeout "^4.1.0" + tslib "^2.4.1" + +"@companion-module/tools@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@companion-module/tools/-/tools-0.5.1.tgz#bb714648e09ef102c7270d58db1dd11489561f94" + integrity sha512-p3qefMkQHyYGltEHcx56OWmn+/Pf2ONKVUTiY3O5MZndBA08dB/4O2M0XvGOKhC5P0ovtaj8vhUWqeNI7BMf+Q== + dependencies: + "@typescript-eslint/eslint-plugin" "^5.44.0" + "@typescript-eslint/parser" "^5.44.0" + eslint "^8.28.0" + eslint-config-prettier "^8.5.0" + eslint-plugin-node "^11.1.0" + eslint-plugin-prettier "^4.2.1" + find-up "^6.3.0" + parse-author "^2.0.0" + prettier "^2.8.0" + tar "^6.1.12" + webpack "^5.75.0" + webpack-cli "^5.0.0" + zx "^7.1.1" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@sentry/core@7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.23.0.tgz#d320b2b6e5620b41f345bc01d69b547cdf28f78d" + integrity sha512-oNLGsscSdMs1urCbpwe868NsoJWyeTOQXOm5w2e78yE7G6zm2Ra473NQio3lweaEvjQgSGpFyEfAn/3ubZbtPw== + dependencies: + "@sentry/types" "7.23.0" + "@sentry/utils" "7.23.0" + tslib "^1.9.3" + +"@sentry/node@^7.21.1": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.23.0.tgz#a9573a1a93994b6dc7ed3539c27cb8faf7bacfb2" + integrity sha512-w6J+5YRsQEn55508yQYT43ahMP5IHruxq8XnFqYMFZvRohVxrZ1qTz7AMoSgc8fDcHr+LKhs1PxJIqqNwkWrFA== + dependencies: + "@sentry/core" "7.23.0" + "@sentry/types" "7.23.0" + "@sentry/utils" "7.23.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@^7.21.1": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.23.0.tgz#9b6c5d3761d7664b6e40c476912281589d7cbe43" + integrity sha512-sbwvf6gjLgUTkBwZQOV7RkZPah7KnnpeVcwnNl+vigq6FNgNtejz53FFCo6t4mNGZSerfWbEy/c3C1LMX9AaXw== + dependencies: + "@sentry/core" "7.23.0" + "@sentry/types" "7.23.0" + "@sentry/utils" "7.23.0" + tslib "^1.9.3" + +"@sentry/types@7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.23.0.tgz#5d2ce94d81d7c1fad702645306f3c0932708cad5" + integrity sha512-fZ5XfVRswVZhKoCutQ27UpIHP16tvyc6ws+xq+njHv8Jg8gFBCoOxlJxuFhegD2xxylAn1aiSHNAErFWdajbpA== + +"@sentry/utils@7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.23.0.tgz#5f38640fe49f5abac88f048b92d3e83375d7ddf7" + integrity sha512-ad/XXH03MfgDH/7N7FjKEOVaKrfQWdMaE0nCxZCr2RrvlitlmGQmPpms95epr1CpzSU3BDRImlILx6+TlrXOgg== + dependencies: + "@sentry/types" "7.23.0" + tslib "^1.9.3" + +"@sindresorhus/is@^5.2.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc" + integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw== + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.4.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" + integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/fs-extra@^9.0.13": + version "9.0.13" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" + +"@types/http-cache-semantics@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/minimist@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + +"@types/node@*", "@types/node@^18.7.20": + version "18.11.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" + integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== + +"@types/ps-tree@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/ps-tree/-/ps-tree-1.1.2.tgz#5c60773a38ffb1402e049902a7b7a8d3c67cd59a" + integrity sha512-ZREFYlpUmPQJ0esjxoG1fMvB2HNaD3z+mjqdSosZvd3RalncI9NEur73P8ZJz4YQdL64CmV1w0RuqoRUlhQRBw== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@types/which@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/which/-/which-2.0.1.tgz#27ecd67f915b7c3d6ba552135bb1eecd66e63501" + integrity sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ== + +"@typescript-eslint/eslint-plugin@^5.44.0": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.1.tgz#ee5b51405f6c9ee7e60e4006d68c69450d3b4536" + integrity sha512-cOizjPlKEh0bXdFrBLTrI/J6B/QMlhwE9auOov53tgB+qMukH6/h8YAK/qw+QJGct/PTbdh2lytGyipxCcEtAw== + dependencies: + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/type-utils" "5.45.1" + "@typescript-eslint/utils" "5.45.1" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.44.0": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.1.tgz#6440ec283fa1373a12652d4e2fef4cb6e7b7e8c6" + integrity sha512-JQ3Ep8bEOXu16q0ztsatp/iQfDCtvap7sp/DKo7DWltUquj5AfCOpX2zSzJ8YkAVnrQNqQ5R62PBz2UtrfmCkA== + dependencies: + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/typescript-estree" "5.45.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.1.tgz#5b87d025eec7035d879b99c260f03be5c247883c" + integrity sha512-D6fCileR6Iai7E35Eb4Kp+k0iW7F1wxXYrOhX/3dywsOJpJAQ20Fwgcf+P/TDtvQ7zcsWsrJaglaQWDhOMsspQ== + dependencies: + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/visitor-keys" "5.45.1" + +"@typescript-eslint/type-utils@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.45.1.tgz#cb7d300c3c95802cea9f87c7f8be363cf8f8538c" + integrity sha512-aosxFa+0CoYgYEl3aptLe1svP910DJq68nwEJzyQcrtRhC4BN0tJAvZGAe+D0tzjJmFXe+h4leSsiZhwBa2vrA== + dependencies: + "@typescript-eslint/typescript-estree" "5.45.1" + "@typescript-eslint/utils" "5.45.1" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.1.tgz#8e1883041cee23f1bb7e1343b0139f97f6a17c14" + integrity sha512-HEW3U0E5dLjUT+nk7b4lLbOherS1U4ap+b9pfu2oGsW3oPu7genRaY9dDv3nMczC1rbnRY2W/D7SN05wYoGImg== + +"@typescript-eslint/typescript-estree@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.1.tgz#b3dc37f0c4f0fe73e09917fc735e6f96eabf9ba4" + integrity sha512-76NZpmpCzWVrrb0XmYEpbwOz/FENBi+5W7ipVXAsG3OoFrQKJMiaqsBMbvGRyLtPotGqUfcY7Ur8j0dksDJDng== + dependencies: + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/visitor-keys" "5.45.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.1.tgz#39610c98bde82c4792f2a858b29b7d0053448be2" + integrity sha512-rlbC5VZz68+yjAzQBc4I7KDYVzWG2X/OrqoZrMahYq3u8FFtmQYc+9rovo/7wlJH5kugJ+jQXV5pJMnofGmPRw== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/typescript-estree" "5.45.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.1.tgz#204428430ad6a830d24c5ac87c71366a1cfe1948" + integrity sha512-cy9ln+6rmthYWjH9fmx+5FU/JDpjQb586++x2FZlveq7GdGuLLW9a2Jcst2TGekH82bXpfmRNSwP9tyEs6RjvQ== + dependencies: + "@typescript-eslint/types" "5.45.1" + eslint-visitor-keys "^3.3.0" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f" + integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A== + +"@webpack-cli/info@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0" + integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA== + +"@webpack-cli/serve@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8" + integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.11.2: + version "8.11.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" + integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +author-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" + integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.14.5: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.1: + version "10.2.3" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.3.tgz#25277efe121308ab722c28b4164e51382b4adeb1" + integrity sha512-6BehRBOs7iurNjAYN9iPazTwFDaMQavJO8W1MEm3s2pH8q/tkPTtLDRUZaweWK87WFGf2Y5wLAlaCJlR5kOz3w== + dependencies: + "@types/http-cache-semantics" "^4.0.1" + get-stream "^6.0.1" + http-cache-semantics "^4.1.0" + keyv "^4.5.2" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001400: + version "1.0.30001436" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz#22d7cbdbbbb60cdc4ca1030ccd6dea9f5de4848b" + integrity sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.1.2.tgz#d957f370038b75ac572471e83be4c5ca9f8e8c45" + integrity sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.14: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" + integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +copy-to@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" + integrity sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w== + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +data-uri-to-buffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" + integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== + +debug@4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +default-user-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-user-agent/-/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6" + integrity sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw== + dependencies: + os-name "~1.0.3" + +defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +destroy@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +digest-header@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/digest-header/-/digest-header-1.0.0.tgz#60227a57b55e5f0b023055a875111a247662189d" + integrity sha512-sRTuakZ2PkOUCuAaVv+SLjhr/hRf8ldZP0XnGEQ69RFGxmll5fVaMsnRXWKKK4XsUTnJf8+eRPSFNgE/lWa9wQ== + dependencies: + utility "^1.17.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +ejson@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/ejson/-/ejson-2.2.3.tgz#2b18c2d8f5d61a5cfc6e3eab72c3343909e7afd2" + integrity sha512-hsFvJp6OpGxFRQfBR3PSxFpaPALdHDY+SB3TRbMpLWNhvu8GzLiZutof5+/DFd2QekZo3KyXau75ngdJqQUSrw== + +electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.28.0: + version "8.29.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.29.0.tgz#d74a88a20fb44d59c51851625bc4ee8d0ec43f87" + integrity sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +eventemitter3@^4.0.4, eventemitter3@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" + integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== + dependencies: + reusify "^1.0.4" + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +form-data-encoder@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" + integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== + +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== + +formdata-node@^4.3.3: + version "4.4.1" + resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" + integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== + dependencies: + node-domexception "1.0.0" + web-streams-polyfill "4.0.0-beta.3" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +formstream@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/formstream/-/formstream-1.1.1.tgz#17259d2440c35ca9736db9f45fb3ba3f8669c750" + integrity sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q== + dependencies: + destroy "^1.0.4" + mime "^2.5.2" + pause-stream "~0.0.11" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" + integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +got@^12.5.3: + version "12.5.3" + resolved "https://registry.yarnpkg.com/got/-/got-12.5.3.tgz#82bdca2dd61258a02e24d668ea6e7abb70ac3598" + integrity sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w== + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.1" + decompress-response "^6.0.0" + form-data-encoder "^2.1.2" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http2-wrapper@^2.1.10: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" + integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +ignore@^5.1.1, ignore@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" + integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +locate-path@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.1.1.tgz#8e1e5a75c7343770cef02ff93c4bf1f0aa666374" + integrity sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg== + dependencies: + p-locate "^6.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27, mime-types@^2.1.35: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.0, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-domexception@1.0.0, node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@3.2.10: + version "3.2.10" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.2.10.tgz#e8347f94b54ae18b57c9c049ef641cef398a85c8" + integrity sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +normalize-url@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" + integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +os-name@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf" + integrity sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew== + dependencies: + osx-release "^1.0.0" + win-release "^1.0.0" + +osx-release@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c" + integrity sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A== + dependencies: + minimist "^1.1.0" + +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-timeout@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-4.1.0.tgz#788253c0452ab0ffecf18a62dff94ff1bd09ca0a" + integrity sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-author@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" + integrity sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw== + dependencies: + author-regex "^1.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pause-stream@0.0.11, pause-stream@~0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== + dependencies: + through "~2.3" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9" + integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA== + +ps-tree@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== + dependencies: + event-stream "=3.3.4" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + +regexpp@^3.0.0, regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.10.1, resolve@^1.20.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== + dependencies: + lowercase-keys "^3.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +semver@^5.0.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.1.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== + dependencies: + through "2" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== + dependencies: + duplexer "~0.1.1" + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^6.1.12: + version "6.1.12" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6" + integrity sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terser-webpack-plugin@^5.1.3: + version "5.3.6" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" + integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.14.1" + +terser@^5.14.1: + version "5.16.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" + integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tslib@^1.8.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.4.0, tslib@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +undici@^5.6.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.15.0.tgz#cb8437c43718673a8be59df0fdd4856ff6689283" + integrity sha512-wCAZJDyjw9Myv+Ay62LAoB+hZLPW9SmKbQkbHIhMw/acKSlpn7WohdMUc/Vd4j1iSMBO0hWwU8mjB7a5p5bl8g== + dependencies: + busboy "^1.6.0" + +unescape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96" + integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ== + dependencies: + extend-shallow "^2.0.1" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urllib@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/urllib/-/urllib-3.10.0.tgz#b8287afa18d9936e4c6753585be3b368238d942c" + integrity sha512-8QFJE6O2tQfJ5/Q+mPMQgUgNo127e4ziauG1/3nnKBdbwzFx2dHBqZqq5m/MzcJqWRwiCYA08oM4soQEzi4wUg== + dependencies: + default-user-agent "^1.0.0" + digest-header "^1.0.0" + form-data-encoder "^1.7.2" + formdata-node "^4.3.3" + formstream "^1.1.1" + mime-types "^2.1.35" + pump "^3.0.0" + tslib "^2.4.0" + undici "^5.6.0" + +utility@^1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/utility/-/utility-1.17.0.tgz#60819f712a6e0ce774f52fb1d691992a5f59d362" + integrity sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw== + dependencies: + copy-to "^2.0.1" + escape-html "^1.0.3" + mkdirp "^0.5.1" + mz "^2.7.0" + unescape "^1.0.1" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +web-streams-polyfill@4.0.0-beta.3: + version "4.0.0-beta.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" + integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== + +web-streams-polyfill@^3.0.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + +webpack-cli@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.1.tgz#95fc0495ac4065e9423a722dec9175560b6f2d9a" + integrity sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.0.1" + "@webpack-cli/info" "^2.0.1" + "@webpack-cli/serve" "^2.0.1" + colorette "^2.0.14" + commander "^9.4.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" + +webpack-merge@^5.7.3: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.75.0: + version "5.75.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" + integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +win-release@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" + integrity sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw== + dependencies: + semver "^5.0.1" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.3.tgz#9b3a4c8aff9821b696275c79a8bee8399d945207" + integrity sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + +zx@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/zx/-/zx-7.1.1.tgz#8dc709fb8acd90ae5f39476145e5a2f3883dca1e" + integrity sha512-5YlTO2AJ+Ku2YuZKSSSqnUKuagcM/f/j4LmHs15O84Ch80Z9gzR09ZK3gR7GV+rc8IFpz2H/XNFtFVmj31yrZA== + dependencies: + "@types/fs-extra" "^9.0.13" + "@types/minimist" "^1.2.2" + "@types/node" "^18.7.20" + "@types/ps-tree" "^1.1.2" + "@types/which" "^2.0.1" + chalk "^5.0.1" + fs-extra "^10.1.0" + globby "^13.1.2" + minimist "^1.2.6" + node-fetch "3.2.10" + ps-tree "^1.2.0" + which "^2.0.2" + yaml "^2.1.1" From 3027ecb5bc590567d5fea4e61193dea46d1705be Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:24:02 +0100 Subject: [PATCH 02/10] Delete feedbacks.js --- feedbacks.js | 439 --------------------------------------------------- 1 file changed, 439 deletions(-) delete mode 100644 feedbacks.js diff --git a/feedbacks.js b/feedbacks.js deleted file mode 100644 index 08479d6..0000000 --- a/feedbacks.js +++ /dev/null @@ -1,439 +0,0 @@ -module.exports = { - - getVariableValue(name) { - let _this = this; - if (Object.prototype.hasOwnProperty.call(_this.variables.changes.values, name)) { - return _this.variables.changes.values[name]; - } - let variable = _this.variables.definitions[name]; - if (variable) { - return variable.value; - } - }, - getFeedbacks(i) { - var feedbacks = {}; - var self =i; - - - feedbacks['autofocus'] = { - label: 'AutoFocus', - description: 'When autofocos is off, the background will change', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - var str - self.getVariable('autofocus', function(res) { - str = res - }) - //self.log('debug', 'feedback: '+str) - if (str === 'off') { - //self.log('debug', 'feedback result: '+str) - return{ - color: feedback.options.fg, - bgcolor: feedback.options.bg - } - - }; - } - }; - feedbacks['MaxPanLimit'] = { - label: 'MaxPanLimit', - description: 'When de camera reaches the upper PanLimit the background changes color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - var maxpan - self.getVariable('MaxPan', function(res) { - maxpan = Number(res)-1 - }) - //self.log('debug', 'feedback: '+maxpan) - var pan - self.getVariable('pan', function(res) { - pan = Number(res) - }) - //('debug', 'feedback: '+pan) - - if (pan > maxpan) { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - feedbacks['MinPanLimit'] = { - label: 'MinPanLimit', - description: 'When de camera reaches the lower PanLimit the background changes color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - var minpan - self.getVariable('MinPan', function(res) { - minpan = Number(res)+1 - }) - //self.log('debug', 'feedback minpan: '+minpan) - var pan - self.getVariable('pan', function(res) { - pan = Number(res) - }) - //self.log('debug', 'feedback: '+pan) - - if (pan < minpan) { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - feedbacks['MaxTiltLimit'] = { - label: 'MaxTiltLimit', - description: 'When de camera reaches the upper TiltLimit the background changes color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - var maxtilt - self.getVariable('MaxTilt', function(res) { - maxtilt = Number(res)-1 - }) - //self.log('debug', 'feedback maxtilt: '+maxtilt) - var tilt - self.getVariable('tilt', function(res) { - tilt = Number(res) - }) - //self.log('debug', 'feedback tilt: '+tilt) - - if (tilt > maxtilt) { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - feedbacks['MinTiltLimit'] = { - label: 'MinTiltLimit', - description: 'When de camera reaches the lower TiltLimit the background changes color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - var mintilt - self.getVariable('MinTilt', function(res) { - mintilt = Number(res)+1 - }) - //self.log('debug', 'feedback mintilt: '+mintilt) - var tilt - self.getVariable('tilt', function(res) { - tilt = Number(res) - }) - //self.log('debug', 'feedback tilt: '+tilt) - - if (tilt < mintilt) { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - feedbacks['MinZoomLimit'] = { - label: 'MinZoomLimit', - description: 'When de camera reaches the lower ZoomLimit the background changes color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - - //self.log('debug', 'feedback mintilt: '+mintilt) - var zoom - self.getVariable('zoom', function(res) { - zoom = Number(res) - }) - //self.log('debug', 'feedback tilt: '+tilt) - - if (zoom == 1) { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - feedbacks['MaxZoomLimit'] = { - label: 'MaxZoomLimit', - description: 'When de camera reaches the upper ZoomLimit the background changes color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - var maxzoom - self.getVariable('MaxZoom', function(res) { - maxzoom = Number(res) - }) - //self.log('debug', 'feedback mintilt: '+mintilt) - var zoom - self.getVariable('zoom', function(res) { - zoom = Number(res) - }) - //self.log('debug', 'feedback tilt: '+tilt) - - if (zoom == maxzoom) { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - feedbacks['MaxFocusLimit'] = { - label: 'MaxFocusLimit', - description: 'When de camera reaches the upper FocusLimit the background changes color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - var maxfocus - self.getVariable('MaxFocus', function(res) { - maxfocus = Number(res) - }) - self.log('debug', 'feedback minfocus: '+maxfocus) - var focus - self.getVariable('focus', function(res) { - focus = Number(res) - }) - self.log('debug', 'feedback focus: '+focus) - - if (focus == maxfocus) { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - feedbacks['MinFocusLimit'] = { - label: 'MinFocusLimit', - description: 'When de camera reaches the lower FocusLimit the background changes color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - var minfocus - self.getVariable('MinFocus', function(res) { - minfocus = Number(res) - }) - self.log('debug', 'feedback minfocus: '+minfocus) - var focus - self.getVariable('focus', function(res) { - focus = Number(res) - }) - self.log('debug', 'feedback focus: '+focus) - - if (focus == minfocus) { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - feedbacks['streaming'] = { - label: 'Change background when streaming', - description: 'When camera is streaming, background color will change', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - if (self.streaming == 1) { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - - feedbacks['tally_PGM'] = { - label: 'Tally on PGM', - description: 'When the camera tally is on, change background color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(255, 255, 255) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(255, 0, 0) - } - ], - callback: (feedback, bank) => { - if (self.tally == 'Program') { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - - feedbacks['tally_PVW'] = { - label: 'Tally on PVW', - description: 'When the camera tally is on, change background color', - options: [ - { - type: 'colorpicker', - label: 'Foreground color', - id: 'fg', - default: self.rgb(0, 0, 0) - - }, - { - type: 'colorpicker', - label: 'Background color', - id: 'bg', - default: self.rgb(250, 255, 0) - } - ], - callback: (feedback, bank) => { - if (self.tally == "Preview") { - return { - color: feedback.options.fg, - bgcolor: feedback.options.bg - }; - } - } - }; - - return feedbacks; - } -} From 5c3ab4beee2875b55185a461c4281b5d6a73ca1f Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:24:15 +0100 Subject: [PATCH 03/10] Delete choices.js --- choices.js | 491 ----------------------------------------------------- 1 file changed, 491 deletions(-) delete mode 100644 choices.js diff --git a/choices.js b/choices.js deleted file mode 100644 index 6b2eaa2..0000000 --- a/choices.js +++ /dev/null @@ -1,491 +0,0 @@ -module.exports = { - // ######################## - // #### Value Look Ups #### - // ######################## - CHOICES_SPEED: [ - { id: 49, label: 'Speed 49 (Fast)' }, - { id: 48, label: 'Speed 48' }, - { id: 47, label: 'Speed 47' }, - { id: 46, label: 'Speed 46' }, - { id: 45, label: 'Speed 45' }, - { id: 44, label: 'Speed 44' }, - { id: 43, label: 'Speed 43' }, - { id: 42, label: 'Speed 42' }, - { id: 41, label: 'Speed 41' }, - { id: 40, label: 'Speed 40' }, - { id: 39, label: 'Speed 39' }, - { id: 38, label: 'Speed 38' }, - { id: 37, label: 'Speed 37' }, - { id: 36, label: 'Speed 36' }, - { id: 35, label: 'Speed 35' }, - { id: 34, label: 'Speed 34' }, - { id: 33, label: 'Speed 33' }, - { id: 32, label: 'Speed 32' }, - { id: 31, label: 'Speed 31' }, - { id: 30, label: 'Speed 30' }, - { id: 29, label: 'Speed 29' }, - { id: 28, label: 'Speed 28' }, - { id: 27, label: 'Speed 27' }, - { id: 26, label: 'Speed 26' }, - { id: 25, label: 'Speed 25' }, - { id: 24, label: 'Speed 24' }, - { id: 23, label: 'Speed 23' }, - { id: 22, label: 'Speed 22' }, - { id: 21, label: 'Speed 21' }, - { id: 20, label: 'Speed 20' }, - { id: 19, label: 'Speed 19' }, - { id: 18, label: 'Speed 18' }, - { id: 17, label: 'Speed 17' }, - { id: 16, label: 'Speed 16' }, - { id: 15, label: 'Speed 15' }, - { id: 14, label: 'Speed 14' }, - { id: 13, label: 'Speed 13' }, - { id: 12, label: 'Speed 12' }, - { id: 11, label: 'Speed 11' }, - { id: 10, label: 'Speed 10' }, - { id: 9, label: 'Speed 09' }, - { id: 8, label: 'Speed 08' }, - { id: 7, label: 'Speed 07' }, - { id: 6, label: 'Speed 06' }, - { id: 5, label: 'Speed 05' }, - { id: 4, label: 'Speed 04' }, - { id: 3, label: 'Speed 03' }, - { id: 2, label: 'Speed 02' }, - { id: 1, label: 'Speed 01 (Slow)' }, - { id: 0, label: 'Stop' }, - ], - - // ####################### - // #### Gain Look Ups #### - // ####################### - CHOICES_GAIN_HE50: [ - { id: '80', label: 'Auto' }, - { id: '08', label: '0dB' }, - { id: '0B', label: '3db' }, - { id: '0E', label: '6dB' }, - { id: '11', label: '9dB' }, - { id: '14', label: '12dB' }, - { id: '17', label: '15dB' }, - { id: '1A', label: '18dB' }, - ], - CHOICES_GAIN_HE120: [ - { id: '80', label: 'Auto' }, - { id: '08', label: '0dB' }, - { id: '09', label: '1dB' }, - { id: '0A', label: '2dB' }, - { id: '0B', label: '3db' }, - { id: '0C', label: '4dB' }, - { id: '0D', label: '5dB' }, - { id: '0E', label: '6dB' }, - { id: '0F', label: '7dB' }, - { id: '10', label: '8dB' }, - { id: '11', label: '9dB' }, - { id: '12', label: '10dB' }, - { id: '13', label: '11dB' }, - { id: '14', label: '12dB' }, - { id: '15', label: '13dB' }, - { id: '16', label: '14dB' }, - { id: '17', label: '15dB' }, - { id: '18', label: '16dB' }, - { id: '19', label: '17dB' }, - { id: '1A', label: '18dB' }, - ], - CHOICES_GAIN_HE130: [ - { id: '80', label: 'Auto' }, - { id: '08', label: '0dB' }, - { id: '09', label: '1dB' }, - { id: '0A', label: '2dB' }, - { id: '0B', label: '3db' }, - { id: '0C', label: '4dB' }, - { id: '0D', label: '5dB' }, - { id: '0E', label: '6dB' }, - { id: '0F', label: '7dB' }, - { id: '10', label: '8dB' }, - { id: '11', label: '9dB' }, - { id: '12', label: '10dB' }, - { id: '13', label: '11dB' }, - { id: '14', label: '12dB' }, - { id: '15', label: '13dB' }, - { id: '16', label: '14dB' }, - { id: '17', label: '15dB' }, - { id: '18', label: '16dB' }, - { id: '19', label: '17dB' }, - { id: '1A', label: '18dB' }, - { id: '1B', label: '19dB' }, - { id: '1C', label: '20dB' }, - { id: '1D', label: '21dB' }, - { id: '1E', label: '22dB' }, - { id: '1F', label: '23dB' }, - { id: '20', label: '24dB' }, - { id: '21', label: '25dB' }, - { id: '22', label: '26dB' }, - { id: '23', label: '27dB' }, - { id: '24', label: '28dB' }, - { id: '25', label: '29dB' }, - { id: '26', label: '30dB' }, - { id: '27', label: '31dB' }, - { id: '28', label: '32dB' }, - { id: '29', label: '33dB' }, - { id: '2A', label: '34dB' }, - { id: '2B', label: '35dB' }, - { id: '2C', label: '36dB' }, - ], - CHOICES_GAIN_HR140: [ - { id: '80', label: 'Auto' }, - { id: '08', label: '0dB' }, - { id: '09', label: '1dB' }, - { id: '0A', label: '2dB' }, - { id: '0B', label: '3db' }, - { id: '0C', label: '4dB' }, - { id: '0D', label: '5dB' }, - { id: '0E', label: '6dB' }, - { id: '0F', label: '7dB' }, - { id: '10', label: '8dB' }, - { id: '11', label: '9dB' }, - { id: '12', label: '10dB' }, - { id: '13', label: '11dB' }, - { id: '14', label: '12dB' }, - { id: '15', label: '13dB' }, - { id: '16', label: '14dB' }, - { id: '17', label: '15dB' }, - { id: '18', label: '16dB' }, - { id: '19', label: '17dB' }, - { id: '1A', label: '18dB' }, - { id: '1B', label: '19dB' }, - { id: '1C', label: '20dB' }, - { id: '1D', label: '21dB' }, - { id: '1E', label: '22dB' }, - { id: '1F', label: '23dB' }, - { id: '20', label: '24dB' }, - { id: '21', label: '25dB' }, - { id: '22', label: '26dB' }, - { id: '23', label: '27dB' }, - { id: '24', label: '28dB' }, - { id: '25', label: '29dB' }, - { id: '26', label: '30dB' }, - { id: '27', label: '31dB' }, - { id: '28', label: '32dB' }, - { id: '29', label: '33dB' }, - { id: '2A', label: '34dB' }, - { id: '2B', label: '35dB' }, - { id: '2C', label: '36dB' }, - { id: '2D', label: '37dB' }, - { id: '2E', label: '38dB' }, - { id: '2F', label: '39dB' }, - { id: '30', label: '40dB' }, - { id: '31', label: '41dB' }, - { id: '32', label: '42dB' }, - ], - CHOICES_GAIN_HE40: [ - { id: '80', label: 'Auto' }, - { id: '08', label: '0dB' }, - { id: '0B', label: '3db' }, - { id: '0E', label: '6dB' }, - { id: '11', label: '9dB' }, - { id: '14', label: '12dB' }, - { id: '17', label: '15dB' }, - { id: '1A', label: '18dB' }, - { id: '1D', label: '21dB' }, - { id: '20', label: '24dB' }, - { id: '23', label: '27dB' }, - { id: '26', label: '30dB' }, - { id: '29', label: '33dB' }, - { id: '2C', label: '36dB' }, - { id: '2F', label: '39dB' }, - { id: '32', label: '42dB' }, - { id: '35', label: '45dB' }, - { id: '38', label: '48dB' }, - ], - CHOICES_GAIN_UE4: [ - { id: '08', label: '0dB' }, - { id: '0B', label: '3db' }, - { id: '0E', label: '6dB' }, - { id: '11', label: '9dB' }, - { id: '14', label: '12dB' }, - { id: '17', label: '15dB' }, - { id: '1A', label: '18dB' }, - { id: '1D', label: '21dB' }, - { id: '20', label: '24dB' }, - { id: '23', label: '27dB' }, - { id: '26', label: '30dB' }, - { id: '29', label: '33dB' }, - { id: '2C', label: '36dB' }, - { id: '2F', label: '39dB' }, - { id: '32', label: '42dB' }, - ], - CHOICES_GAIN_UB300: [ - { id: '01', label: 'LOW' }, - { id: '04', label: 'MID' }, - { id: '08', label: 'HIGH' }, - { id: '06', label: 'S.GAIN1' }, - { id: '0C', label: 'S.GAIN2' }, - { id: '0E', label: 'S.GAIN3' }, - ], - CHOICES_GAIN_HE60: function () { - return this.CHOICES_GAIN_HE50 - }, - CHOICES_GAIN_UE150: function () { - return this.CHOICES_GAIN_HR140 - }, - CHOICES_GAIN_UE70: function () { - return this.CHOICES_GAIN_HE40 - }, - CHOICES_GAIN_HE42: function () { - return this.CHOICES_GAIN_HE40 - }, - CHOICES_GAIN_OTHER: function () { - return this.CHOICES_GAIN_HR140 - }, - - // ########################## - // #### Shutter Look Ups #### - // ########################## - CHOICES_SHUTTER_OTHER: [ - { id: '0', label: 'OFF' }, - { id: '2', label: '1/60' }, - { id: '3', label: '1/100' }, - { id: '4', label: '1/120' }, - { id: '5', label: '1/250' }, - { id: '6', label: '1/500' }, - { id: '7', label: '1/1000' }, - { id: '8', label: '1/2000' }, - { id: '9', label: '1/4000' }, - { id: 'A', label: '1/10000' }, - { id: 'B', label: 'Syncro Scan' }, - { id: 'C', label: 'ELC' }, - { id: 'D', label: '1/24' }, - { id: 'E', label: '1/25' }, - { id: 'F', label: '1/30' }, - ], - CHOICES_SHUTTER_HE50: [ - { id: '0', label: 'OFF' }, - { id: '3', label: '1/100 (59.94Hz) or 1/120 (50Hz)' }, - { id: '5', label: '1/250' }, - { id: '6', label: '1/500' }, - { id: '7', label: '1/1000' }, - { id: '8', label: '1/2000' }, - { id: '9', label: '1/4000' }, - { id: 'A', label: '1/10000' }, - { id: 'B', label: 'Syncro Scan' }, - ], - CHOICES_SHUTTER_HE120: [ - { id: '0', label: 'OFF' }, - { id: '3', label: '1/100 (59.94Hz) or 1/120 (50Hz)' }, - { id: '5', label: '1/250' }, - { id: '6', label: '1/500' }, - { id: '7', label: '1/1000' }, - { id: '8', label: '1/2000' }, - { id: '9', label: '1/4000' }, - { id: 'A', label: '1/10000' }, - { id: 'B', label: 'Syncro Scan' }, - { id: 'C', label: 'ELC' }, - ], - CHOICES_SHUTTER_HE130: [ - { id: '0', label: 'OFF' }, - { id: '2', label: '1/60' }, - { id: '3', label: '1/100' }, - { id: '4', label: '1/120' }, - { id: '5', label: '1/250' }, - { id: '6', label: '1/500' }, - { id: '7', label: '1/1000' }, - { id: '8', label: '1/2000' }, - { id: '9', label: '1/4000' }, - { id: 'A', label: '1/10000' }, - { id: 'B', label: 'Syncro Scan' }, - { id: 'C', label: 'ELC' }, - { id: 'D', label: '1/24' }, - { id: 'E', label: '1/25' }, - { id: 'F', label: '1/30' }, - ], - CHOICES_SHUTTER_UE4: [ - { id: '0001', label: '1/1' }, - { id: '0002', label: '1/2' }, - { id: '0005', label: '1/5' }, - { id: '000A', label: '1/10' }, - { id: '0014', label: '1/20' }, - { id: '0019', label: '1/25' }, - { id: '001E', label: '1/30' }, - { id: '0032', label: '1/50' }, - { id: '003C', label: '1/60' }, - { id: '0064', label: '1/100' }, - { id: '0078', label: '1/120' }, - { id: '00F0', label: '1/240' }, - { id: '00F4', label: '1/250' }, - { id: '01E0', label: '1/480' }, - { id: '01F4', label: '1/500' }, - { id: '03E8', label: '1/1000' }, - { id: '07D0', label: '1/2000' }, - { id: '0FA0', label: '1/4000' }, - { id: '1F40', label: '1/8000' }, - { id: '3E80', label: '1/16000' }, - ], - CHOICES_SHUTTER_UB300: [ - { id: '00', label: '1/48' }, - { id: '01', label: '1/50' }, - { id: '02', label: '1/60' }, - { id: '03', label: '1/96' }, - { id: '04', label: '1/100' }, - { id: '05', label: '1/120' }, - { id: '06', label: '1/125' }, - { id: '07', label: '1/250' }, - { id: '08', label: '1/500' }, - { id: '09', label: '1/1000' }, - { id: '0A', label: '1/1500' }, - { id: '0B', label: '1/2000' }, - { id: '0C', label: '180.0 deg' }, - { id: '0D', label: '172.8 deg' }, - { id: '0E', label: '144.0 deg' }, - { id: '0F', label: '120.0 deg' }, - { id: '10', label: '90.0 deg' }, - { id: '11', label: '45.0 deg' }, - ], - - CHOICES_SHUTTER_HE60: function () { - return this.CHOICES_SHUTTER_HE50 - }, - CHOICES_SHUTTER_HE40: function () { - return this.CHOICES_SHUTTER_HE50 - }, - CHOICES_SHUTTER_UE70: function () { - return this.CHOICES_SHUTTER_HE50 - }, - CHOICES_SHUTTER_HE42: function () { - return this.CHOICES_SHUTTER_HE50 - }, - CHOICES_SHUTTER_HR140: function () { - return this.CHOICES_SHUTTER_HE130 - }, - - // ########################### - // #### Pedestal Look Ups #### - // ########################### - CHOICES_PEDESTAL_HE40: function () { - var p = [] - for (var i = 0; i <= 300; ++i) { - p.push({ - id: ('00' + i.toString(16)).substr(-3, 3).toUpperCase(), - label: 'Pedestal ' + ((i - 150) / 15).toPrecision(3), - }) - } - return p - }, - - CHOICES_PEDESTAL_HE120: function () { - var p = [] - for (var i = 0; i <= 300; ++i) { - p.push({ id: ('00' + i.toString(16)).substr(-3, 3).toUpperCase(), label: 'Pedestal ' + (i - 150) }) - } - return p - }, - - CHOICES_PEDESTAL_HE42: function () { - return this.CHOICES_PEDESTAL_HE40() - }, - CHOICES_PEDESTAL_HE50: function () { - return this.CHOICES_PEDESTAL_HE40() - }, - CHOICES_PEDESTAL_HE60: function () { - return this.CHOICES_PEDESTAL_HE40() - }, - CHOICES_PEDESTAL_UE70: function () { - return this.CHOICES_PEDESTAL_HE40() - }, - CHOICES_PEDESTAL_HE130: function () { - return this.CHOICES_PEDESTAL_HE120() - }, - CHOICES_PEDESTAL_HR140: function () { - return this.CHOICES_PEDESTAL_HE120() - }, - CHOICES_PEDESTAL_OTHER: function () { - return this.CHOICES_PEDESTAL_HE120() - }, - - // ########################### - // #### ND Filter Look Ups #### - // ########################### - CHOICES_FILTER_UE70: [ - { id: '0', label: 'Through' }, - { id: '1', label: '1/4' }, - { id: '2', label: '1/16' }, - { id: '3', label: '1/64' }, - { id: '4', label: '1/8' }, - { id: '8', label: 'AUTO' }, - ], - - CHOICES_FILTER_HE120: [ - { id: '0', label: 'Through' }, - { id: '1', label: '1/4' }, - { id: '2', label: '1/16' }, - { id: '3', label: '1/64' }, - ], - - CHOICES_FILTER_HE130: [ - { id: '0', label: 'Through' }, - { id: '3', label: '1/64' }, - { id: '4', label: '1/8' }, - ], - - CHOICES_FILTER_UB300: [ - { id: '0', label: 'Clear' }, - { id: '1', label: '1/4' }, - { id: '2', label: '1/16' }, - { id: '3', label: '1/64' }, - ], - - CHOICES_FILTER_UE150: function () { - return this.CHOICES_FILTER_HE120 - }, - CHOICES_FILTER_HR140: function () { - return this.CHOICES_FILTER_HE130 - }, - CHOICES_FILTER_HE42: function () { - return this.CHOICES_FILTER_UE70 - }, - CHOICES_FILTER_OTHER: function () { - return this.CHOICES_FILTER_UE70 - }, - - // ############################### - // #### Preset Speed Look Ups #### - // ############################### - CHOICES_PSSPEED: [ - { id: 999, label: 'Speed 30 (Fast)' }, - { id: 975, label: 'Speed 29' }, - { id: 950, label: 'Speed 28' }, - { id: 925, label: 'Speed 27' }, - { id: 900, label: 'Speed 26' }, - { id: 875, label: 'Speed 25' }, - { id: 850, label: 'Speed 24' }, - { id: 825, label: 'Speed 23' }, - { id: 800, label: 'Speed 22' }, - { id: 775, label: 'Speed 21' }, - { id: 750, label: 'Speed 20' }, - { id: 725, label: 'Speed 19' }, - { id: 700, label: 'Speed 18' }, - { id: 675, label: 'Speed 17' }, - { id: 650, label: 'Speed 16' }, - { id: 625, label: 'Speed 15' }, - { id: 600, label: 'Speed 14' }, - { id: 575, label: 'Speed 13' }, - { id: 550, label: 'Speed 13' }, - { id: 525, label: 'Speed 11' }, - { id: 500, label: 'Speed 10' }, - { id: 475, label: 'Speed 09' }, - { id: 450, label: 'Speed 08' }, - { id: 425, label: 'Speed 07' }, - { id: 400, label: 'Speed 06' }, - { id: 375, label: 'Speed 05' }, - { id: 350, label: 'Speed 04' }, - { id: 325, label: 'Speed 03' }, - { id: 300, label: 'Speed 02' }, - { id: 275, label: 'Speed 01 (Slow)' }, - ], - - CHOICES_PSTIME: function () { - var p = [] - for (var i = 1; i <= 99; ++i) { - p.push({ id: ('00' + i.toString(16)).substr(-3, 3).toUpperCase(), label: i + ' Sec' }) - } - return p - }, -} From 4d29e27aefed3264ac286de1885cd601add05748 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:24:24 +0100 Subject: [PATCH 04/10] Delete icons.js --- icons.js | 89 -------------------------------------------------------- 1 file changed, 89 deletions(-) delete mode 100644 icons.js diff --git a/icons.js b/icons.js deleted file mode 100644 index c1bb268..0000000 --- a/icons.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This file is part of the Companion project - * Copyright (c) 2018 Bitfocus AS - * Authors: William Viker , HĂ¥kon Nessjøen - * - * This program is free software. - * You should have received a copy of the MIT licence as well as the Bitfocus - * Individual Contributor License Agreement for companion along with - * this program. - * - * You can be released from the requirements of the license by purchasing - * a commercial license. Buying such a license is mandatory as soon as you - * develop commercial activities involving the Companion software without - * disclosing the source code of your own applications. - * - */ - -// Variables for Base64 image data do not edit - -module.exports = { - ICON_POWER_UNKNOWN: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAN0GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxNjo0OToyNyswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTY6NDk6MjcrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmU0YmQzODYyLWRmOWYtNDQxOC1iNWNmLTE3MTUwNzE0ODg0ZiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmYwZmFmYmM0LTc0MmEtMmE0NS1iMjBkLWU4NWQ2NmZhZjEzNyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YmM0OWQzYi05YzRmLTRkNmQtODQyNi0yNzlmYzc3YjI2NWMiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTY6MTA6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGJmNDFmYTctZTNmMi00NzdiLWIzMjktMDQ3NzU2NzhjOWMwIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDE2OjQ5OjI3KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmU0YmQzODYyLWRmOWYtNDQxOC1iNWNmLTE3MTUwNzE0ODg0ZiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQxNjo0OToyNyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YmY0MWZhNy1lM2YyLTQ3N2ItYjMyOS0wNDc3NTY3OGM5YzAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIiBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIi8+IDxwaG90b3Nob3A6VGV4dExheWVycz4gPHJkZjpCYWc+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIHJlZCIgcGhvdG9zaG9wOkxheWVyVGV4dD0iPSIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvZmYiIHBob3Rvc2hvcDpMYXllclRleHQ9IuKPuyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0i4o+7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0i4o+7IHBvd2VyIHdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSLij7siLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEJhY2sgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEJhY2sgQmx1ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOSIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIHdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI6Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBGd2QgQmx1ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBsYXkgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IEdyZWVuIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjsiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQYXVzZSBZZWxsb3ciIHBob3Rvc2hvcDpMYXllclRleHQ9IjsiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTdG9wIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBSZWQiIHBob3Rvc2hvcDpMYXllclRleHQ9IiZsdDsiLz4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pris6fwAAAIoSURBVHja7Zv9jYUgDMDfCrfCW8EVXMEVWIEVXMEVXIEVWMEVWIHD2FzemZMKFC1em/QvIx8/obSlvrz3L9FjFQgCSAAJIAH0ZEBUEtrqg1q/iQuqT773fEChnc7/LVoAbZOcDgA5AbRN0hwA8gJIAAkgASSABJAAEkCtAQrP3kFHmLwO+kUNKDxWQWdwNPtmAMHA92KPIOUAAvh7mdgDgrjKpcRWqYAisZuH1coT0LpCgi6RwRsiQNrHpeMKCBv4RARoQPqx7ACBUcakJ7RBC9KX4gZoQgasKU8xxNZ5AMgDENgen2p7CI55XXsVUQFSyEDfFR1FE+l35gJoTjXMhIAwg80CUPTIvSDUiBns3t987RNz2paLYrGxluNIAagv2V5EgGLbbLobkM452okBxT6SEUBxJ1UA/QdAKsfBbGWLxQY3F9yuWszBbMVIFx/zu/hqXZFDwju8j3kYpCtxFAvz2bwdRYpQoxBQE6FGUbBaCMjWsj/U6Q6Xm+4ogIOlOwZOCbMxN2FGXHTFL2H2kXJ1WAKLEA7aV4tJ+1XGQjjqBBzjGd+L2ROQlqMEPnJTO59o27G99knYap/esj7ylaAtdRIM6daqffXcJUDaAzOgOe+T3qrWLl7oMyeZK2Nz5S8FKylVVA04l9QHgRNpKoFZKA3yrQVU4NUuRGB+flV4XIUZbAdTsGJ+FWM9tgRvd4TbCBCDuALyO9SdKhAEkAASQAKIsX4DYdkApCQP1LkAAAAASUVORK5CYII=', - - ICON_POWER_ON: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAANhmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxNjo0NzozMiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTY6NDc6MzIrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc1Y2FkMGI0LTE3MjEtNDFjNC1iZDVmLTllZDViYWY1YmIxYiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmM4NWY0YzgzLTRhZGQtMmU0ZC1iNTc5LWM3ZjFkZjRmZmQyOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YmM0OWQzYi05YzRmLTRkNmQtODQyNi0yNzlmYzc3YjI2NWMiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTY6MTA6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MmI3NzU5NjEtNDUxMC00OTY5LTg1NzQtYTJhZjgyYmVmMThiIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDE2OjQ3OjMyKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjc1Y2FkMGI0LTE3MjEtNDFjNC1iZDVmLTllZDViYWY1YmIxYiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQxNjo0NzozMiswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYjc3NTk2MS00NTEwLTQ5NjktODU3NC1hMmFmODJiZWYxOGIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIiBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIi8+IDxwaG90b3Nob3A6VGV4dExheWVycz4gPHJkZjpCYWc+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIHJlZCIgcGhvdG9zaG9wOkxheWVyVGV4dD0iPSIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvZmYiIHBob3Rvc2hvcDpMYXllclRleHQ9IuKPuyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0i4o+7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4p5jCxAAACmUlEQVR42u2bLU/EQBCG568Q/gMWg8ciEDgUioRgECQYzBmCQGAgwWBQp3AnEEgSFA6NxCAo927SZNN0Z7c702P3OpuMu7bb5+Z7p9Q0DZmExSAYIANkgAzQOgPSWmc3dLKzoG/6oGbzjX6PHmiect0kAJ1f0z7AdCUF0iQAHTzRex8gaJIBWq7dZ/rqA+TEABkgA2SADJABMkAGqDJAF1e0ffhIL3h5ZMSXM9rQBnR8R/d7c/pEoolSpRpA2Hj3RVFnhSDlAAL87m8BqnhAqKtciTCgthoKKFS7tc8oFhA0ZOuVfkKbdyAUADnQod8vBQCLBBTbuCtKFQCd3tKMew7MuThAcMrcpiFwpFo+iNNUCPxgUYBCLYuU3k4OIM7XQQCwGEAuOjFwQr5HGuZjJq2hRSqA+sK6L878RkoUuWuRIxUBCBsZ6pi1AMUcdhk+KBJyxy41OIctzbDFgLikzW18BbVYX1atlTiKAbnQLTAvDUCcmUnLDzEgLpKknm1JAXF/Eu49eUBckmqApgAolEfFEswqTIzbnMuPMk9XUXDGEswqnLRGmPfrK2ide+HEVXyYx+KKxpREUbKKTxQ1Sg3JqqLUkBarktXOFI3hf1TbHZyZpUSjnBVrd0C7immYcY5ySMiXDl0V2TBrW66cFrUNLC04Kc+qrmkPcZomWHjxGBxpcjjquRjnNH31DzXwuZNaLlr6Y3vFHvukmpqfLUPrQrkS7tUeL6fcT9O0Rj16TvERIWAwD0jO9dqnqqMOL8CEcl4yV+Dbqht/ydWkoaJtViudD0ISyfZ7BAJnr+mQ/3WACllt7Lg4VfxPFdZuwgzmkKtRANwdxlrbETw/hIdyJwBpJ9RCqYB9DmXfixkgA2SADJBJSP4ASMA94BfKlEUAAAAASUVORK5CYII=', - - ICON_POWER_OFF: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAANhmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxNjo0ODowNiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTY6NDg6MDYrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmE1NGY3MWNkLThiNjEtNDRlZC04MGQ5LTI5ZTgxNjUxZGM3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjMxMjc2NTI4LWIwYjYtNjQ0Yi1hZmJmLWJjN2JiZjVkYWQ0ZiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YmM0OWQzYi05YzRmLTRkNmQtODQyNi0yNzlmYzc3YjI2NWMiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTY6MTA6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGM0MGRlOGItMGIwYi00YjVhLTgyYmMtNGQ3NTAxZjdmYTNmIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDE2OjQ4OjA2KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmE1NGY3MWNkLThiNjEtNDRlZC04MGQ5LTI5ZTgxNjUxZGM3YiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQxNjo0ODowNiswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YzQwZGU4Yi0wYjBiLTRiNWEtODJiYy00ZDc1MDFmN2ZhM2YiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIiBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6Y2VkNjIxY2ItNTcyYi00YzJlLWFhNTgtNTBhMmI3ZjBjM2NkIi8+IDxwaG90b3Nob3A6VGV4dExheWVycz4gPHJkZjpCYWc+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUmVjIHJlZCIgcGhvdG9zaG9wOkxheWVyVGV4dD0iPSIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvZmYiIHBob3Rvc2hvcDpMYXllclRleHQ9IuKPuyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IuKPuyBwb3dlciBvbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0i4o+7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4ShOyRAAACK0lEQVR42u2b7XHDIAyGvUJXyApZwSt4BVZgBa/gFbwCKzBCWYEVKG50vdR3fItEOMrd+yvBwBMQkpAn59zECoshMCAGxIAY0JUBYX2+p2n20l7Oy3rJnHYfAcjDuAOYsyQDegDaAoAsA3oAUgFAjgExIAbEgBgQA2JADGg0QH5yN68VJi+9vrAB+e+F1w6O5jwMIBj4ebI6BKkGEMA//34jDwjiKlsSW5UCisRuv32QBXSsEC8TGbxCAiQjfRy6UwWUGviGBGhJ9KPJAQKj7BKaEW2QSfQlqAHaEgOWmKdYwtYdMmQAge1xpbYH4ZiXvVcRFiCRGOitl6MYa3v4SFQA7aWGGRFQ1GBTARQ9cnuHGgmDPb8VUMJpM6+IxQJeNYrjiAFobtleSIBi22x7NyBZc7QjA4r9SYoBxZ1UBvQJgESNgznKFosNbm+4XdUpB3MUI918zJ/iq2NFLrltyB/zMDHb4ii2fMg7ihihRmPCf4hQoylYbQSke9kf7HSHrU13NMBJpTsWSgmztTZhhlx0RS9h9pRytakEFiIcO1TKNXPJH1ob4YgMOIryvZjOgGRCCfzETe2e8WxL9tqnYKs9e8sy5CvBs0QmGNSt1fvq+V4A6QxMgWray5GKF+bKSdZqHa78pWEllUr0gPOS+iBwIlUnMAbTIL+1gApiJoME5u9VhctVmMGppBpWzL9irMuW4J2OcB0BomKuAL8Oxe+LMSAGxIAYECukH5Mh8Lty9l7DAAAAAElFTkSuQmCC', - - ICON_FWD_ACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHlmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTA0VDAwOjA2OjM1KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTA0VDAwOjA2OjM1KzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wNFQwMDowNjozNSswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4ZWVlYjA0NC0xM2YyLTQxZjAtYjZiNS1hN2QzZTM1YjE0ZmIiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowZjBiZDI2Ni03NGNjLTUyNDQtYjcxMi1mNTMzY2RkNGZhMmQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMGE0ZWY2Yy01OTJiLTQxOTUtOWM2ZS05M2RjM2VhYzYwZTkiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MzBhNGVmNmMtNTkyYi00MTk1LTljNmUtOTNkYzNlYWM2MGU5IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDAwOjA2OjM1KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjhlZWViMDQ0LTEzZjItNDFmMC1iNmI1LWE3ZDNlMzViMTRmYiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNjozNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9Ij0iIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI5IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iOiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjQiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI7IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iJmx0OyIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+4xhgvAAAAUBJREFUaN7t2t0JgzAQB3D3cQ2HcBg3cAMHcQEXcAAplL5IoQ8FKaVQ2qOCiB8xOWlyvf5DHnw59QchXu6MoqhROgEDDDDAAAMMsF+GFcUljg+8x2RZm6YnXmzbPl6fQRdfgZXltWnuPFuen7vuybP5gNHdeTaCUSzP5gnGs/Uwns0fjGEbYAybV5irbQxztfmGOdkmMCdbAJi9bQ6zt4WB9TYerH/XJDkKhdGo6xsPZmMLCdu0GWCbtsAws80MM9vCwwy2TZjBJgK2ZrOBrdmkwBZtlrBFmyDY3GYPm9tkwSY2J9jEJg42trnCxjmNRBgNiuLBBptQWFV1e2C0ILEUsXlgu/+PD7TOlEpnEqzz2KLzoKmzNKCzmKOz/KazYKqzxK2zKaGzjaSz8aezVau2uY7/PAADDDDAAAMMsJ3zDSf4V4b8XLKIAAAAAElFTkSuQmCC', - - ICON_FWD_INACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMToxMiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjE6MTIrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmU3OWRiOTk3LTUzMzAtNDA0MC04MWZhLTBjYmY3ZWY2ZjU4ZSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmQyM2E5ZDJmLTM2NDgtMTI0Yi04ZGU2LTZiYjM4ZTQ5ZTkwOSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ZGJiODQ5OS0xYjNiLTQ0YzAtOGU0Ny1lZWJhYjVmNDhjMzUiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjE6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZTc5ZGI5OTctNTMzMC00MDQwLTgxZmEtMGNiZjdlZjZmNThlIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIxOjEyKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkYmI4NDk5LTFiM2ItNDRjMC04ZTQ3LWVlYmFiNWY0OGMzNSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5i6Z7uAAABPElEQVR42u3a4Q2CMBCG4a7gCqzgLK7gCs7iCq7gCo4AK7hCrUqISAstPaN3viTfTwg8SUt7Pee9dyQdEAACCCCAAAIIIICILJBz7SFk48SudheyLb1r5v26EN+n+wbQMeQih9TuQ66lSL8O5OWQHkC+FEkDkBDSAFSEpAVIAGkElI2kCagSaQKUhaQNqAIpCrSIpBFoJVISaBZJK1CPJAbk+w9uLAHdcxYEiiJpBypAygKaIFkAykTKBhohWQHKQCoCGpAsAS0gFQPNImkFmkFaBZRE0gyUQFoNFEXSDhRBqgKaIFkAekOqBhpW8JaA/PM5YkAv2xw7QKcPADUMsT8YYkzS/OZZKLLVYLNKuYOCGSVXqyVXivYc+3BwyNEzzQu0v9BARQue1RY8mjgJQAABBBBAAAEEEEAkkRszs/0O3FXJfAAAAABJRU5ErkJggg==', - - ICON_REW_ACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHXGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTA0VDAwOjA1OjQxKzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTA0VDAwOjA1OjQxKzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wNFQwMDowNTo0MSswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0YTc3YWIzZC01ZmYxLTQ4ZTgtYjI2Yy01MGE3NzM0NWY0M2EiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3NWVhZTBlOS0yZGY1LTI1NDQtYTE0MS1kOTY1ZDA3NDcyZWQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTdmZmU4OC01YWY0LTQ3MGItYjRjZi05ODk0NWQxOTkzNmUiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDE3ZmZlODgtNWFmNC00NzBiLWI0Y2YtOTg5NDVkMTk5MzZlIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDAwOjA1OjQxKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjRhNzdhYjNkLTVmZjEtNDhlOC1iMjZjLTUwYTc3MzQ1ZjQzYSIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNTo0MSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9Ij0iIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI5IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iNCIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjsiIHBob3Rvc2hvcDpMYXllclRleHQ9IjsiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSImbHQ7IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5d0tPMAAABUklEQVRo3u3aOw6CQBAGYDQaEjUWGhsvYOk9bMCOC1DZWnAHrsABjBew8RokFNraGBtjY0yMJFxAd+fxS2ZCQcGG/cKwO2HoBMEpaGN0g5aGwQxmMIMZzGD/HL3vL91sBstl2Jzv94/j8eVwvyQJd7un21x/GvvDE6tVaTppjsWi7zCzPB9n2dRZVRRzxFSsVdvtzEc1HHbhYMIqIZi8SgKmomKHaal4YYoqRpiuigumrmKBIajoYSAqYhiOihIGpSKDoaloYIAqAhimyhcGq/KCIau8YOv12HlsHI9YVV6wKLqcz85fL26Hwx0UVpZvH9tqdWW1eeUDss030WFtBG8wpo1maQK0ka25aDbKzQTKRrxL4tjot38QG0tdg2DjKtjUbYyVqK6Nt8RWtLE3JbRsEm0kFZtQ40/eJteqbWxVJWTr2P+KBjOYwQxmMIMZTCw++aoeVmSF6JQAAAAASUVORK5CYII=', - - ICON_REW_INACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMDozMCswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjA6MzArMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjEzNzY2ZmM2LTlhYzYtNDdlOS1iZGQ2LTA4ZmU4YWZiNWM1MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjE5MTI4MGUwLWIwM2UtZTg0Yy04ODRiLTEzMjg5ZGYzN2ZiNCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ZWQ3NjVkMS0yMjdmLTQyZTgtYTZmYy0wNzhmNjhkMWU4OWEiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjA6MzArMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MTM3NjZmYzYtOWFjNi00N2U5LWJkZDYtMDhmZThhZmI1YzUxIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIwOjMwKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRlZDc2NWQxLTIyN2YtNDJlOC1hNmZjLTA3OGY2OGQxZTg5YSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Aq/YNAAABX0lEQVR42u3bTRHCMBAF4KYOsEBxUAsgAQtFApUAEsAKWMABaEBCCEwPvcCUIZt9u7ydeT110s5H+peEOsZYMe9TV6yPRSACEYhABCIQgQhEoC8rhNsyZTvKPIRQ5cmtnbrvxHNtNXrQ86C7UeZ5frNrN7SXpQack5NL7IVzEMCZOQDCwwECwsQBAcLFAQDCxlEGwsdRBLKBowRkB0cBKC9Oak8UpzCQPZyCQDZxCgHZxSkAZBtHGMg+jiCQDxwhID84AkC+cCR6UJe5vbUmjgTQKuWSr7lFnzZHR0CLuwDSRhNJ4CbtC0noMe8HSfBF0QeS8KeGfaQCH6u2kQoNd9hFKjhgZhOp8JBrfqQYG1EkhUF7W0hK0z52kBQnDm0gKU894yMBLF7ARgJZ/oKLBLSAChMJbAkeHlL9w4H3KWGUc57/aDX3lH7q/l8geehBeEUgAhGIQAQiEIEI9K/1APdX1qz3Plq4AAAAAElFTkSuQmCC', - - ICON_REC_ACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHImlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTAzVDIzOjU4OjUwKzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTAzVDIzOjU4OjUwKzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wM1QyMzo1ODo1MCswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiMTY2ZDY2Yi1mMTBlLTQyNzAtYjM4OS04MzYwZDY3ZTZkNTYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplZDYzNjJmNi02ZDZjLTdiNDgtODJiYi0wNDYxNDBmZGFhZWMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozN2Q2YTZlYS02MWQxLTQ5YTgtYjk2Yi1jZTU5ZDk5MDQ0OTAiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MzdkNmE2ZWEtNjFkMS00OWE4LWI5NmItY2U1OWQ5OTA0NDkwIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTAzVDIzOjU4OjUwKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmIxNjZkNjZiLWYxMGUtNDI3MC1iMzg5LTgzNjBkNjdlNmQ1NiIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wM1QyMzo1ODo1MCswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9Ij0iIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI0IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iOyIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IiZsdDsiIHBob3Rvc2hvcDpMYXllclRleHQ9IiZsdDsiLz4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ps0tfYQAAAElSURBVGje7dndDYQgDAdw9nENtnEFN3ADJ3ACF2ABB3AABvDp9OSa3Mt9+GBsCbX+G58uHOYXSkFwD+dMPg4wwAADDDDAAAMMMM2wqlq7jp70F+/fqcHFYEtdb+OYDgQ1o8YXgC3eHyT98rzXC1ubJp2Oeaa/a4StbZvYQZ3ogu1WiJM2KipKYKwM3LVJ5KRAtaDpIQujDvm1hAt7DkPKENRtSRgtQSlbMNc3jcMlMmisHZP87PqeaZw9l6JiKFseGXnY97lh9IoSsBCyw0IoANumKTeMXlECFmN2WIyAIRXvWzzMlnuzC7TZLZXdTbDhzxazH5qWjwbMHuZYPn6zfGAqkpNKj7gtX0p8Dt3xayTZgcLFH65qAQMMMMAAAwwwwO4LewFv1x++++/jUAAAAABJRU5ErkJggg==', - - ICON_REC_INACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToxOTo1NiswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MTk6NTYrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmI1OWFjODM5LTY5NjUtNDk1Yy1hYmFmLTM4MWViOWNkNTMyOCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmIzYjVlMTQzLThjMjctNWE0Zi1hOTI5LWFkZTk3NDI5OTdmMSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozNGQwMjhhNS02YTEzLTRlY2EtOWUzYi03NjdiNzM2MmU0ZWUiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MTk6NTYrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YjU5YWM4MzktNjk2NS00OTVjLWFiYWYtMzgxZWI5Y2Q1MzI4IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjE5OjU2KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjM0ZDAyOGE1LTZhMTMtNGVjYS05ZTNiLTc2N2I3MzYyZTRlZSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4w3nxFAAABJUlEQVR42u3aUQ2FIBiGYSpYwSxWoIIVrGAFKljhVDDCsYIVOLDh5oXo5lB+OK/bd+XU8UxQ4FfWWkXiAQEggAACCCCAAAKIAARQTUBfpRqXIcRGsp1vVOSoDsg1tnP5nKDE4q/pqgVyjWtvwhxBtVUBuQbpBDD7rP6eVQC5hvSJcfbpiwa6GIBTZSgS6IFudRZdFFAYkNcXgfyz2pKAzIs4W0wRQOE/x2ZKVwKQyQhkRAOF6cOaEcg/u5EMpDPiPPJFSw00CgAaJQNNAoAmyUCzAKBZMtAiAGgBqGAguhiDNJ95fhSZajBZLXSyynIHC2YsubJoz7YPG4f1bBw+3N00xQv/Urxw8DbdLX/R1dcHUUBFCR5ABCCAAAIIIIAAAogAdJUfDkEOTMmL2+oAAAAASUVORK5CYII=', - - ICON_STOP_INACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMjo0NyswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjI6NDcrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBmM2U0Y2VhLTQ2NDEtNDhhYS04N2I2LWMxYjRlZTJkOWE5NCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBjYzc0NDRhLWE1ZDUtNmY0NC05NjdjLWU4YWRlZmI2MTYzOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OTliODFjZC00NzM3LTRmYzAtYWIwYi1jMGY2YzgwNzk1ODkiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjI6NDcrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGYzZTRjZWEtNDY0MS00OGFhLTg3YjYtYzFiNGVlMmQ5YTk0IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIyOjQ3KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjg5OWI4MWNkLTQ3MzctNGZjMC1hYjBiLWMwZjZjODA3OTU4OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4n7NdoAAAAb0lEQVR42u3aMQ0AIADEwPevEbQ8GGAGkhtq4OambXQOAiBAgAABAgQIkAABeh1oJHPXy01AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmTB8ygCAgQIECABAgQIEKAvWz9emwZhCZEoAAAAAElFTkSuQmCC', - - ICON_STOP_ACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAG6GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTAzVDIzOjU1OjEzKzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTAzVDIzOjU1OjEzKzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wM1QyMzo1NToxMyswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMDE2YzFjMy0zZjk1LTRiOTktYTdmNi02ZjgxN2RhMjdhMzciIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmM2ViMzllYi1mOWE5LWM1NGItODU1OC1mMTY0MTJhMWYyMjEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNThhNzQ3My02NWY3LTQyZDUtODkwMS0yMmRmMGU5ODA0ZDQiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjU4YTc0NzMtNjVmNy00MmQ1LTg5MDEtMjJkZjBlOTgwNGQ0IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTAzVDIzOjU1OjEzKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmEwMTZjMWMzLTNmOTUtNGI5OS1hN2Y2LTZmODE3ZGEyN2EzNyIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wM1QyMzo1NToxMyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjQiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI7IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iJmx0OyIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SyfS5wAAAFtJREFUaN7t2bkJADAMA0DtP6lnSJGndx0C4YR6cbUyki8bMDAwMDAwMDCwd7BZtS7nTICBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYG5asHAwMDAwMDAwHo3E4b4mX2rqSkAAAAASUVORK5CYII=', - - ICON_PAUSE_INACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMjoxOSswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjI6MTkrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmRkZDAxZWNjLTZjMzItNGZjMi04YzgxLTMwM2Y2Y2M5MzVhNCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjEwOTEyZDk3LWI1MWEtOWI0Ny05YWRkLWQ0MGNmM2Y0NDFkYyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplOGIyZmYzNC0xNmFmLTQ5MzItYjE1Yy1kMmZlNDE3Y2EyOTkiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjI6MTkrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGRkMDFlY2MtNmMzMi00ZmMyLThjODEtMzAzZjZjYzkzNWE0IiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIyOjE5KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmU4YjJmZjM0LTE2YWYtNDkzMi1iMTVjLWQyZmU0MTdjYTI5OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4GJG/aAAAAeElEQVR42u3aMQ0AIAxFwarFE94QgYOCAVImFq7JWzvc/CMzQ+cgAAIECBAgQIAA6S3QHNF2WdSjuNs/gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACZAQsQIECAAAECBOjzFkEkVRGHBIsZAAAAAElFTkSuQmCC', - - ICON_PAUSE_ACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAG6GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTAzVDIzOjU2OjA4KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTAzVDIzOjU2OjA4KzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wM1QyMzo1NjowOCswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjMDNjYWFiMy0xMGRhLTQ0ZDMtOTJiNS0zZDFjOGQxOTU2NTkiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpiYTMzMTRkYS0xZDJkLWJiNDUtODlkZS00MmYwMzQzOGUyYmQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1Y2YwYWU5OS0xMTkyLTQwZGItODc1MC0yODI1NjljMDg5OTIiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NWNmMGFlOTktMTE5Mi00MGRiLTg3NTAtMjgyNTY5YzA4OTkyIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTAzVDIzOjU2OjA4KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmMwM2NhYWIzLTEwZGEtNDRkMy05MmI1LTNkMWM4ZDE5NTY1OSIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wM1QyMzo1NjowOCswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjQiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSI7IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iJmx0OyIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+QneD4QAAAGZJREFUaN7t2qENQCEUA8C3P/swDROgwPzkK5iABIEg5JraivONVuLJBhgYGBgYGNiTsK+mscjf89kVGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgY2E0wPw8wMDAwMDCwzU6B9pQlPyOaGwAAAABJRU5ErkJggg==', - - ICON_PLAY_INACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAYAAAATBx+NAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMKmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0wNi0wNFQxMToyMTo0NSswMjowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTgtMDYtMDRUMTE6MjE6NDUrMDI6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjRmZWVhMGMzLTU1NjQtNDBkNi04NTFhLTJhOThmYjY3OTQ3ZSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjJlOGYwNzIzLTJmNTktOWY0Ny1hNDA0LTBhYTk5MmI4OTA5MiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkFkb2JlIFJHQiAoMTk5OCkiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlZDYyMWNiLTU3MmItNGMyZS1hYTU4LTUwYTJiN2YwYzNjZCIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wNFQwMDowNzoyNSswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphMzAxMDE1Mi1mNDc5LTQzMmItYjdlYi1iZmYxOGU4ZWZlN2IiIHN0RXZ0OndoZW49IjIwMTgtMDYtMDRUMTE6MjE6NDUrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGZlZWEwYzMtNTU2NC00MGQ2LTg1MWEtMmE5OGZiNjc5NDdlIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTA0VDExOjIxOjQ1KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmEzMDEwMTUyLWY0NzktNDMyYi1iN2ViLWJmZjE4ZThlZmU3YiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZWQ2MjFjYi01NzJiLTRjMmUtYWE1OC01MGEyYjdmMGMzY2QiLz4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgV2hpdGUiIHBob3Rvc2hvcDpMYXllclRleHQ9Ij0iLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJSZWMgcmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI9Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI5Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU2tpcCBCYWNrIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjkiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJTa2lwIEZ3ZCB3aGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iOiIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlNraXAgRndkIEJsdWUiIHBob3Rvc2hvcDpMYXllclRleHQ9IjoiLz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJQbGF5IFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI0Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGxheSBHcmVlbiIgcGhvdG9zaG9wOkxheWVyVGV4dD0iNCIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlBhdXNlIFdoaXRlIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iUGF1c2UgWWVsbG93IiBwaG90b3Nob3A6TGF5ZXJUZXh0PSI7Ii8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iU3RvcCBXaGl0ZSIgcGhvdG9zaG9wOkxheWVyVGV4dD0iJmx0OyIvPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlN0b3AgUmVkIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSImbHQ7Ii8+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6VGV4dExheWVycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6vUl74AAAA8ElEQVR42u3bSw3CQBQF0FqoBSxgAQu1gIVawAIWagELSAALWHgMTbtownwIK8ghuRu6IDkJc9uZ1y4iOskHAiBAgAABWn7s1o0p/ea7Lz//BnRJuafsAOWBIuWRcgCUB1ozACoDxbwuASoCvTIBKgPFcq0HlAeKteEAlTM3HKB6BkD1jIDqmQDVc801HKBtw+0BfdhwgN7nCKieE6CGhgPU2HCAGhoOUEPDAWpoOEANDQeonDMgfzGLtJp3o+hRw8Oq7Q4bZrZcAdm0d+zj4NDRs+EF4y8GqIzgGeI0BgzIILlXEbzMIoAAAQIE6DfyBIZxyJlmS8HgAAAAAElFTkSuQmCC', - - ICON_PLAY_ACTIVE: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAIAAACcZYjaAAABJmlDQ1BBZG9iZSBSR0IgKDE5OTgpAAAoz2NgYDJwdHFyZRJgYMjNKykKcndSiIiMUmA/z8DGwMwABonJxQWOAQE+IHZefl4qAwb4do2BEURf1gWZxUAa4EouKCoB0n+A2CgltTiZgYHRAMjOLi8pAIozzgGyRZKywewNIHZRSJAzkH0EyOZLh7CvgNhJEPYTELsI6Akg+wtIfTqYzcQBNgfClgGxS1IrQPYyOOcXVBZlpmeUKBhaWloqOKbkJ6UqBFcWl6TmFit45iXnFxXkFyWWpKYA1ULcBwaCEIWgENMAarTQZKAyAMUDhPU5EBy+jGJnEGIIkFxaVAZlMjIZE+YjzJgjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJiaIQODgD4Dw745AMDGT/0ZOjZcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGbmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTA2LTAzVDIzOjUwOjI3KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTA2LTAzVDIzOjUwOjI3KzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0wNi0wM1QyMzo1MDoyNyswMjowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1NzMxZTNiZC1iNGFmLTRlY2UtOGNmMS05Y2ZkNzI0MzI3MWUiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowMzJhZjhlMi0yYTgwLTk4NDItOTc4NS02MjkzNzEyYWQ1NDYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1MTRjNzVjOS1jMDRlLTRhOTQtYmZhMC0xZmI0ZTg2N2RlNmQiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJBZG9iZSBSR0IgKDE5OTgpIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTE0Yzc1YzktYzA0ZS00YTk0LWJmYTAtMWZiNGU4NjdkZTZkIiBzdEV2dDp3aGVuPSIyMDE4LTA2LTAzVDIzOjUwOjI3KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjU3MzFlM2JkLWI0YWYtNGVjZS04Y2YxLTljZmQ3MjQzMjcxZSIgc3RFdnQ6d2hlbj0iMjAxOC0wNi0wM1QyMzo1MDoyNyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IjQiIHBob3Rvc2hvcDpMYXllclRleHQ9IjQiLz4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoxcPIcAAAETSURBVGje7ZrBCYNAEEW3H9uwCHuwBTuwAyuwAhvwkkMOHgI5RMghECSQQ8BADgEzYAlZZycv89nT3h64z92ZCWEXmMvBHMzBHMwGWHNpsn0GBBsew/Sa8iEHgi3LMr/n8lgCwdZUp4oJJpEjxwST9PeeCSaRTW1V6oBJtFWpBqatSk0wVVXqgympMgmYhipTgUnG57ihKhOCraosDgUQbENVJgdbU59rJpikvbZMsMiqNAUWU5XWwKKp0iBYHFXaBIugSstgX6nSOFh36/xTdHm47v0H/Z9XKuYlGPhsYT40maUBZjGHWX5jFkyBJW5mU4LZRmI2/pitWmZzHTgOwRxgYY4cYYfEfF7RwRzMwX55fQBYBye7afDLZQAAAABJRU5ErkJggg==', - - ICON_UP: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6AQMAAAApyY3OAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAIFJREFUKM+90EEKgzAQRmFDFy49ghcp5FquVPBighcRegHBjWDJ68D8U6F7m00+EnhkUlW3ru6rdyCV0INQzSg1zFLLKmU2aeCQQMEEJXIQORRsTLNyKJhNm3IoaPBg4mQorp2Mh1+00kKN307o/bZrpt5O/FlPU/c75X91/fPd6wPRD1eHyHEL4wAAAABJRU5ErkJggg==', - - ICON_DOWN: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6AQMAAAApyY3OAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAIlJREFUKM/F0DEOwyAMBVAjDxk5Qo7CtdiClIv1KJF6gUpZIhXxY2zTDJ2benoS8LFN9MsKbYjxF2XRS1UZ4bCeGFztFmNqphURpidm146kpwFvLDYJpPQtLSLNoySyP2bRpoqih2oSFW8K3lYAxmJGXA88XMnjeuDmih7XA8vXvNeeqX6U6aY6AacbWAQNWOPUAAAAAElFTkSuQmCC', - - ICON_LEFT: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6AQMAAAApyY3OAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAHpJREFUKM+1kTEOgCAQBM9Q2JjwA/mJPA2fxlN4giWF8TRBBhMpbKSaZie3i8gPb4Y8FNZKGm8YIAONkNWacIruQLejy+gyug1dQhfRqZa0v6gYA6QfqSWapZnto1B6XdUuFaVHoJunr2MD21nIdJYUEhLYfoGmP777BKKIXC0eYSD5AAAAAElFTkSuQmCC', - - ICON_RIGHT: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6AQMAAAApyY3OAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAHhJREFUKM+10LERgCAMQFE4CktHcBRWcRMYzVEcwdKCI+od+fGksVCq3/AuiXOfvZnaNXzRClVrEKtMLdSqP2RTRQAFMAFGwAlw7MAk0sAzGnhVoerLKg/F5Pv4NoFNZZNGpk9sxJYeLsDdL5T7S8IFOM/R3OZ+fQeQZV9pMy+bVgAAAABJRU5ErkJggg==', - - ICON_UP_RIGHT: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAMAAAAk2e+/AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAABhlBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+X02G5AAAAgXRSTlMAAte32QZhZx7d+TywDTf8/d5VstYPOxULNvKmSY8TFBrxyeGCluJeELQ5uw7ULND4BedlKuv2P/vDA8UgCk30WO41s8+5X8dABAz6QhHVaR156JpPnihSfTJDNOMBm4bzSICqr23NsRjcGRbtjTCS2lzsOmyu9+WLKb2fTL8+RPDhqO4yAAABfElEQVRYw+3WZW/CUBQG4AO0FBsOwwcMm7sLc3d3d3e388/HGGs7lpD0tsm+9P3S5CT3SdPec+8BkCNHzv9FAVAAEABYdQDkA7jo9GNUIDMBzstb5vr0/Gx8Z35zOjI36R2xbu+619eWa2xCoK0FClF5h1cWxDHEwilEOyLlQc8hokoAlMRcESBh7siQlJBWKkijNaHuPrWBED9iYiDQ7Pv1D4Z4/DXyFo2JgeAghQEkEgAvT6IgNo/PIUmgd62oj80mqEIpINoXRkmg2j2UBDIWVXKLTSXEUIOF/xbV5aRQsJvvUOoqMqjZZ+c7FcX8ThYCtTbxHV0fkEGDA73D3Dpzi/6rWEYAdSn579PZ/t3IBJChkef0dLRlHXdkJ6TSmSnmiYPq1LQIiGHX9BvZYinJ7/+R6q1czUG0j9KSOTxDc6UhshZhMIQrS78mncwZtzErrNcYL6V2Zd0tJ6i7QFtAYPcvHv25W6J+/Y3BrRA/x6WGuGN5mpUjhyyfsGtrpKE95HoAAAAASUVORK5CYII=', - - ICON_DOWN_RIGHT: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAMAAAAk2e+/AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAABXFBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9jYfXuAAAAc3RSTlMAQ98Ox1j9gAtRNTqBPfgu9p/MTQ+G1Qfx7Y0VBYyJgjkGd3ysU+Zz1IQvMM20PgwBp8Mi4TSUiDvlPxylsaF2WfcjJh0S+wLzQLmY4l/ovX3ra1rPLAOSKa4RUEvgcZwbFHqPzodGbX7qPMvCtsEq1laguT+HEwAAAVlJREFUWMPt1sduwkAQgOGxDfFCIITe0nvvvZHee++992TeX4pJQIC9hPWaQ6T41x6skfY7WGPJAGZm/6qgZjIH4AMgOp2Lq32batTkdW/trPt9+qC70DVmSKS2BXF7A1fX9DDnN2FUSpe8y5hID3SZuJMmrcwmoSFm5vD0BDWSNTnCUmZoD1PZtJCDGfIgRUpBMjPkR4rEAwUtFIkHAkKRuCCaxAdRJE5IK/FCGumWF1JLEW5ILfFD2ST9UBaJA6JLPBCQ57xAJcp5NQbtSgBReJSsH8QI5No8ODo+u397ecL3T35IGhcRA4jig8E9qmjAX2OGnAV5ggrxr0ELOaByVmg6B1TGvEYyTvxcKUaMv/ii7xN/VAZYY2dfSHkkPOYY7Kpf7OmLzLfGPIFGd6izWrRUjdYt9Xfo+ULsLpgRKqGtGyadAEIUmnuhXSAwMAXD5j+omZlZRl+X30CWTm2dHwAAAABJRU5ErkJggg==', - - ICON_UP_LEFT: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAMAAAAk2e+/AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAABLFBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9PVkEkAAAAY3RSTlMAAQ/6Uc0OEAvHTzL7TcudsMHvdwnfUwMcG8UGiIfTrIkg9QI+/ZTDe460km73LNovCo1vQUuR4Lwk45/OK+3UERTkekziZlSK8QQnoOsFaaXmLqOylvPZLYDRZTUWUpiTDfAuEmiSAAABUklEQVRYw+3WZ2+DMBAG4EtTygrQ7NHsJt1777333vv+/38o6gIMSo0dqf3AK1lIZ/mRjPEJgCBBgvxtQr8WqDKbCiWUG1AnYXU7C7UJqKQSR5oKQwqIPphsYW24nEPjJCYXilf9F+G+qeTmThTP5w8X8gK9NLqOGMGPhD8fdXtBkGihlmlsmF5aqK2xg9FmQe3/DupuEhTpoT41z/V1HVHfxWRRo/6ORBfyjILx9mRo+2MDlS3ggF5q4uP9qzmVNjfOA+EDdDLcWA8IW6FJEJPkCbFI3hCDZEFVPsmC7mQuyYJ0iUuyIAG4JDvEJTkgHskJcUgExC6RECmxQ4REDa24ILsU6wL/rfYHskmX9C87Pfi9aA5cUmnRx/kffDmncSCkat7X342KSzOIuesNR1WSl7GU8Xfbbs9Gyoo0TvRp6Tie8d2TOsyx51UMEiQIS94B13oTqqYgGGoAAAAASUVORK5CYII=', - - ICON_DOWN_LEFT: - 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAA6CAMAAAAk2e+/AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAARnQU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAABg1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8aT76cAAAAgHRSTlMAafwJfflezc+3WA7Z5Rk6PAvpBNE73kJT89QxZ48czNIv9A1DnI3qKQUaymjT4a7HdVuGf85LR20CVHr+tLBlA0GvYSTYZEnbAcazNPX4yB4GrAgnmL6Bcj4qIVKIe8kdVadIEe27B90bOG/3Er1rYJq1wibyh+4Q5CMzRllMXDo5euMAAAGfSURBVFjD7dblUwJBGAbw5aSlBJRGQERBkLC7u7u7u7veP90jDnaEcdhjP+k9X5h9Zu43O7PLe4eQECH/KGsIaUooOEcLK75LpehH628idSrE+nMANfyQ3MY2BRm0C6mM462tUwJAJtVyUB1WmsoSFZEk46D6TBcYS3UKPpCYawxD5VxHImVD/RHIxMQbGintkGQcppkcOkuutQPYfkDfmjck556ZTSydve2YY5UWk0Mww672VPh+XFqCU8tA+whtL+KOpa+bF3Rh8B4ymDNaSnSzG9IPIpsL34/HTPZfS58auMPYuYNMWcQXOsD3U9ZDOkZkkCvqwSIqUI2WfEDmgiQxRANiIp8GKtDLO6/Znw19oOdXhKoROtEUBr1F5Y9f4dt1XygqKgh6YqcHwMQkQBWICr1H6czTgrpoQde0IGnekJEWNEwLMv/GPDDB/M/fDioVeLYA5GqoYt+xNRY4toJkCiBUG7vTEVxJu2Z549RbqXQuba7uVDZWO66mgw6d7kYaEPvvCb+REIp/srGzLP4aa0n8zKFkKUSIkD+Qb9QrYMvxAbaBAAAAAElFTkSuQmCC', -} From 78d34f8e40931ed15aaf0ec5d04a0fa80c52b990 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:24:33 +0100 Subject: [PATCH 05/10] Delete index.js --- index.js | 778 ------------------------------------------------------- 1 file changed, 778 deletions(-) delete mode 100644 index.js diff --git a/index.js b/index.js deleted file mode 100644 index 75003a2..0000000 --- a/index.js +++ /dev/null @@ -1,778 +0,0 @@ -var instance_skel = require('../../instance_skel') -var request = require('request') -var tcp = require('../../tcp') - -var presets = require('./presets') -var variables = require('./variables') -var feedbacks = require('./feedbacks') -const speeddefinition = { - type: 'number', - label: 'Speed', - id: 'speed', - min: 1, - max: 100, - default: 50, - step: 1, - required: true, - range: false -} - -var debug -var switchonofftosend -var log -var instance_speed = 1 - -/** - * Companion instance for Axis PTZ cameras. - * @author Frans Bosman - */ - - - -class instance extends instance_skel { - constructor(system, id, config) { - super(system, id, config) - var self = this - - // Characterworks Port # - self.actions() - self.BASEURI = '' - self.init_presets() - self.init_feedbacks() - self.getCameraInformation() - - /** - * @param name Instance variable name - * @returns Value of instance variable or undefined - * @description Retrieves instance variable from any vMix instances - */ - this.get = (variable) => { - let data; - this.instance.parseVariables(variable, (value) => { - data = value; - }); - return data; - }; - } - - actions(system) { - var self = this - - self.setActions({ - left: { - label: 'Pan Left', - options: [ - speeddefinition, - ], - default: '1', - }, - right: { - label: 'Pan Right', - options: [ - speeddefinition, - ], - default: '1', - }, - up: { - label: 'Tilt up', - options: [ - speeddefinition, - ], - default: '1', - }, - down: { - label: 'Tilt down', - options: [ - speeddefinition, - ], - default: '1', - }, - upleft: { - label: 'Pan Up/Left', - options: [ - speeddefinition, - ], - default: '1', - }, - upright: { - label: 'Pan Up/Right', - options: [ - speeddefinition, - ], - default: '1', - }, - downleft: { - label: 'Pan Down/Left', - options: [ - speeddefinition, - ], - default: '1', - }, - downright: { - label: 'Pan Down/Right', - options: [ - speeddefinition, - ], - default: '1', - }, - stop: { label: 'PTZ Stop' }, - zoomI: { label: 'Zoom In' , - options: [ - { - type: 'number', - label: 'Speed', - id: 'speed', - min: -100, - max: 100, - default: 50, - step: 1, - required: true, - range: false - }, - ], - default: '1',}, - - zoomO: { label: 'Zoom Out' , - options: [ - { - type: 'number', - label: 'Speed', - id: 'speed', - min: -100, - max: 100, - default: 50, - step: 1, - required: true, - range: false - }, - ], - default: '1',}, - zoomstop: { label: 'Zoom Stop' }, - preset: { - label: 'Goto preset', - options: [ - { - type: 'textinput', - width: 3, - regex: self.REGEX_NUMBER, - label: 'Preset #', - id: 'preset', - }, - ], - }, - Setpreset: { - label: 'Set preset', - options: [ - { - type: 'textinput', - width: 3, - regex: self.REGEX_NUMBER, - label: 'Set Preset #', - id: 'preset', - }, - ], - }, - Reload: { - label: 'Reload Camera Info', - - }, - setDefaultSpeed: { - label: 'Set default speed', - options: [ - speeddefinition, - ], - }, - setAutoFocus: { - label: 'Set Auto Focus', - options: [ - { - type: 'dropdown', - label: 'Autofocus', - id: 'switchonoff', - choices: [ - { id: 'on', label: 'on' }, - { id: 'off', label: 'off' }, - - ], - default: 'on', - }, - ], - }, - Focus: { - label: 'Adjust Focus', - options: [ - { - type: 'number', - label: 'Steps', - id: 'steps', - tooltip: '1 ... 9999 Moves focus n steps to the specified absolute position. A high value means focus far, a low value means focus near. ', - min: 1, - max: 9999, - default: 50, - step: 1, - required: true, - range: false - }, - ], - }, - ContinousFocusMove: { - label: 'Continous Focus Move', - options: [ - { - type: 'number', - label: 'Steps', - id: 'steps', - tooltip: '-100 ... 100 Continuous focus motion. Positive values mean focus far and negative values mean focus near. 0 means stop. ', - min: -100, - max: 100, - default: 0, - step: 1, - required: true, - range: false - }, - ], - }, - }) - } - ptzConfig(direction, action) { - var self = this - //self.log('debug', direction + '-' + actio + '-' + speed) - - //if (speed == -1) { - // speed = self.instance_speed - //} - - //if (isNaN(speed)) { - // self.log('warn', 'INVALID PTZ SPEED') - // return 0 - //} - - //if ((action !== 'start') && (action !== 'stop')) { - // self.log('warn', 'INVALID PTZ COMMAND!'); - // return 0; - //} - var uri = self.BASEURI + '/axis-cgi/com/ptzconfig.cgi?' + action + '=' + direction + '&camera=1' - - //if (direction == 'GotoPreset') { - // uri += '&code=' + direction + '&arg1=0&arg2=' + speed + '&arg3=0'; - //} else { - // uri += '&code=' + direction + '&arg1=' + speed +'&arg2=' + speed + '&arg3=0'; - //}; - - //self.log('debug', uri) - - request(uri, function (error, response, body) { - if (error) { - self.log('warn', 'Send Error: ' + error) - // Start init to reconnect to cam because probably network lost - self.init() - } - self.getCameraInformation() - self.checkFeedbacks() - }).auth(self.config.user, self.config.password, false) - } - - ptzMove(direction, action) { - var self = this - //self.log('debug', direction+'-'+action); - - //if (speed == '-1,-1') { - //speed = self.instance_speed - //} - - //if (isNaN(speed)) { - // self.log('warn', 'INVALID PTZ SPEED') - // return 0 - //} - - - var uri = self.BASEURI + '/axis-cgi/com/ptz.cgi?' + action + '=' + direction + '&camera=1' - - //if (direction == 'GotoPreset') { - // uri += '&code=' + direction + '&arg1=0&arg2=' + speed + '&arg3=0'; - //} else { - // uri += '&code=' + direction + '&arg1=' + speed +'&arg2=' + speed + '&arg3=0'; - //}; - - //self.log('debug', 'uri: '+uri) - - request(uri, function (error, response, body) { - if (error) { - self.log('warn', 'Send Error: ' + error) - // Start init to reconnect to cam because probably network lost - self.init() - } - self.getCameraInformation() - - }).auth(self.config.user, self.config.password, false) - } - ptzCommand(option, action, bol= 1) { - var self = this - self.log('debug', 'Ptzcommand: '+ option+'-'+action+' '+bol); - - - - - if (bol == '0') { - switchonofftosend = 'off' - } - if (option == '1') { - switchonofftosend = 'on' - } - - var uri = self.BASEURI + '/axis-cgi/com/ptz.cgi?' + action + '=' + switchonofftosend + '&camera=1' - - //if (direction == 'GotoPreset') { - // uri += '&code=' + direction + '&arg1=0&arg2=' + speed + '&arg3=0'; - //} else { - // uri += '&code=' + direction + '&arg1=' + speed +'&arg2=' + speed + '&arg3=0'; - //}; - - self.log('debug', uri) - - request(uri, function (error, response, body) { - if (error) { - self.log('warn', 'Send Error: ' + error) - // Start init to reconnect to cam because probably network lost - self.init() - } - self.getCameraInformation() - self.checkFeedbacks() - }).auth(self.config.user, self.config.password, false) - } - action(action) { - var self = this - var cmd - var param - var opt = action.options - //self.log('debug', 'action='+action.action+opt.speed) - - switch (action.action) { - case 'left': - cmd = 'continuouspantiltmove' - param = '-' + opt.speed + ',0' - self.ptzMove(param, cmd, opt.speed) - break - - case 'right': - cmd = 'continuouspantiltmove' - param = opt.speed + ',0' - self.ptzMove(param, cmd, opt.speed) - break - - case 'up': - cmd = 'continuouspantiltmove' - param = '0,' + opt.speed - self.ptzMove(param, cmd, opt.speed) - break - - case 'down': - cmd = 'continuouspantiltmove' - param = '0,-' + opt.speed - self.ptzMove(param, cmd, opt.speed) - break - - case 'upleft': - cmd = 'continuouspantiltmove' - param = '-' + opt.speed + ',' + opt.speed - self.ptzMove(param, cmd, opt.speed) - break - - case 'upright': - cmd = 'continuouspantiltmove' - param = opt.speed + ',' + opt.speed - self.ptzMove(param, cmd, opt.speed) - break - - case 'downleft': - cmd = 'continuouspantiltmove' - param = '-' + opt.speed + ',-' + opt.speed - self.ptzMove(param, cmd, opt.speed) - break - - case 'downright': - cmd = 'continuouspantiltmove' - param = opt.speed + ',-' + opt.speed - self.ptzMove(param, cmd, opt.speed) - break - - case 'stop': - cmd = 'continuouspantiltmove' - param = '0,0' - self.ptzMove(param, cmd, 1) - break - - case 'zoomI': - cmd = 'continuouszoommove' - param = opt.speed - self.ptzMove(1, cmd, 0) - break - case 'zoomO': - cmd = 'continuouszoommove' - param = '-' + opt.speed - self.ptzMove(-1, cmd, 0) - break - case 'zoomstop': - cmd = 'continuouszoommove' - param = '-' + opt.speed - self.ptzMove(0, cmd, 0) - break - - case 'preset': - cmd = 'gotoserverpresetno' - param = opt.preset - self.ptzMove(param, cmd, opt.preset) - break - - case 'Setpreset': - cmd = 'setserverpresetno' - - param = opt.preset - self.ptzMove(param, cmd, opt.preset) - - break - case 'setAutoFocus': - cmd = 'autofocus' - - - param = opt.switchonoff - self.ptzMove(param, cmd, opt.switchonoff) - - break - case 'Focus': - cmd = 'focus' - //self.log('debug',' case focus'+action+'-'+action.options.steps) - - - param = action.options.steps - self.ptzMove(param, cmd, action.options.steps) - - break - case 'ContinousFocusMove': - cmd = 'continuousfocusmove' - //self.log('debug',' case focus'+action+'-'+action.options.steps) - - - param = action.options.steps - self.ptzMove(param, cmd, action.options.steps) - - break - - case 'setDefaultSpeed': - // Only speed of this instance, not send to camera - self.instance_speed = opt.speed - break - - case 'reload': - // Only speed of this instance, not send to camera - self.getCameraInformation(); - - self.checkFeedbacks() - break - } - } - - // Web config fields - config_fields() { - var self = this - return [ - { - type: 'textinput', - id: 'host', - label: 'Axis API IP Address', - tooltip: 'The IP of the camera', - width: 6, - regex: self.REGEX_IP, - }, - { - type: 'textinput', - id: 'port', - label: 'Axis API Port Number (default 80)', - tooltip: 'The Port Number camera.', - width: 6, - default: 80, - regex: self.REGEX_PORT, - }, - { - type: 'textinput', - id: 'user', - label: 'User name', - tooltip: 'The user name.', - width: 6, - regex: self.REGEX_SOMETHING, - }, - { - type: 'textinput', - id: 'password', - label: 'Password', - tooltip: 'The password', - width: 6, - regex: self.REGEX_SOMETHING, - }, - ] - } - - destroy() { - var self = this - debug('destroy') - } - - init() { - var self = this - self.data = { - autofocus: 'on', - - - - } - debug = self.debug - log = self.log - self.instance_speed = 1 - - self.status(self.STATUS_WARNING, 'Connecting...') - - // Connecting on init not neccesary for http (request). But during init try to tcp connect - // to get the status of the module right and automatically try reconnecting. Which is - // implemented in ../../tcp. - if (self.config.host !== undefined) { - self.tcp = new tcp(self.config.host, self.config.port) - - self.tcp.on('status_change', function (status, message) { - self.status(status, message) - }) - - self.tcp.on('error', function () { - // Ignore - }) - self.tcp.on('connect', function () { - // disconnect immediately because further comm takes place via Request and not - // via this tcp sockets. - if (self.tcp !== undefined) { - self.tcp.destroy() - } - delete self.tcp - self.BASEURI = 'http://' + self.config.host + ':' + self.config.port - - //Try a ptz stop command to be sure username and password are correct and this user is allowed PTZ on this camera - request(self.BASEURI + '/axis-cgi/com/ptz.cgi?move=stop', function (error, response, body) { - if (error || response.statusCode !== 204) { - self.status(self.STATUS_ERROR, 'Username/password') - // self.log('warn', 'response.statusCode: ' + response.statusCode) - } else { - self.status(self.STATUS_OK, 'Connected') - } - self.init_variables() - self.init_feedbacks() - }).auth(self.config.user, self.config.password, false) - }) - } - } - - updateConfig(config) { - var self = this - self.config = config - - if (self.tcp !== undefined) { - self.tcp.destroy() - delete self.tcp - } - - self.init() - - } -} -instance.prototype.init_variables = function () { - this.setVariableDefinitions(variables.setVariables(this)) -} -instance.prototype.getVariablesValue = function () { - this.setVariableDefinitions(variables.getVariableValue(this)) -} - -instance.prototype.init_feedbacks = function () { - this.setFeedbackDefinitions(feedbacks.getFeedbacks(this)) -} -instance.prototype.init_presets = function () { - this.setPresetDefinitions(presets.setPresets(this)) -} - -//instance.prototype.getVariable = function (name){ -// this.getVariable(name, (val) => (selectedValue = val)) -// return selectedValue -// //return selectedValue -//} - - -instance.prototype.getCameraInformation = function () { - var self = this - - if (self.config.host) { - self.BASEURI = 'http://' + self.config.host + ':' + self.config.port - uri = '/axis-cgi/param.cgi?action=list' - //console.log('debug', ' Axis get info: '+ self.BASEURI + uri); - request(self.BASEURI + uri, function (error, response, body) { - //console.log('warn'," axis camera error: " + error) - if (!(error === null)) { - self.status(self.STATUS_ERROR, 'Username/password') - self.log('warn', 'response ' + response) - } else { - self.status(self.STATUS_OK, 'Connected') - //str = JSON.parse(response); - //console.log('debug', ' Axis connected:'+body) - let chunks = body.split('\n'); - //console.log('chunks: '+chunks); - - - const attarr = new Set([]); - for (let i = 0; i < chunks.length-1; i += 1) { - //camattr[chunks[i].split('=')[0]] = chunks[i].split('=')[1].trim() - - attarr.add - ( - {label: 'Axis Camera '+chunks[i].split('=')[0], - name: chunks[i].split('=')[0], - value: chunks[i].split('=')[1].trim(), - } - ) - self.setVariable(chunks[i].split('=')[0],chunks[i].split('=')[1].trim()) - - - } - //console.log (attarr) - - - } - }).auth(self.config.user, self.config.password, false) - } - if (self.config.host) { - self.BASEURI = 'http://' + self.config.host + ':' + self.config.port - uri = '/axis-cgi/com/ptz.cgi?query=position&camera=1' - //console.log('debug', ' Axis get info: '+ self.BASEURI + uri); - request(self.BASEURI + uri, function (error, response, body) { - //console.log('warn'," axis camera error: " + error) - if (!(error === null)) { - self.status(self.STATUS_ERROR, 'Username/password') - self.log('warn', 'response ' + response) - } else { - self.status(self.STATUS_OK, 'Connected') - //str = JSON.parse(response); - // console.log('debug', ' Axis connected:'+body) - let chunks = body.split('\n'); - // console.log('chunks: '+chunks); - - - const attarr = new Set([]); - for (let i = 0; i < chunks.length-1; i += 1) { - //camattr[chunks[i].split('=')[0]] = chunks[i].split('=')[1].trim() - - attarr.add - ( - {label: 'Axis Camera '+chunks[i].split('=')[0], - name: chunks[i].split('=')[0], - value: chunks[i].split('=')[1].trim(), - } - ) - self.setVariable(chunks[i].split('=')[0],chunks[i].split('=')[1].trim()) - if (chunks[i].split('=')[0] == 'autofocus'){ - self.data.autofocus = chunks[i].split('=')[1].trim() - //self.log('debug','autofocus set: '+self.data.autofocus) - } - - } - //console.log (attarr) - self.checkFeedbacks() - - - - - - - - - - } - }).auth(self.config.user, self.config.password, false) - self.BASEURI = 'http://' + self.config.host + ':' + self.config.port - uri = '/axis-cgi/com/ptz.cgi?query=limits&camera=1' - //console.log('debug', ' Axis get info: '+ self.BASEURI + uri); - request(self.BASEURI + uri, function (error, response, body) { - //console.log('warn'," axis camera error: " + error) - if (!(error === null)) { - self.status(self.STATUS_ERROR, 'Username/password') - self.log('warn', 'response ' + response) - } else { - self.status(self.STATUS_OK, 'Connected') - //str = JSON.parse(response); - //console.log('debug', ' Axis connected:'+body) - let chunks = body.split('\n'); - //console.log('chunks: '+chunks); - - - const attarr = new Set([]); - for (let i = 0; i < chunks.length-1; i += 1) { - //camattr[chunks[i].split('=')[0]] = chunks[i].split('=')[1].trim() - - attarr.add - ( - {label: 'Axis Camera '+chunks[i].split('=')[0], - name: chunks[i].split('=')[0], - value: chunks[i].split('=')[1].trim(), - } - ) - self.setVariable(chunks[i].split('=')[0],chunks[i].split('=')[1].trim()) - - } - //console.log (attarr) - self.checkFeedbacks() - - - - - - - - } - }).auth(self.config.user, self.config.password, false) - self.BASEURI = 'http://' + self.config.host + ':' + self.config.port - uri = '/axis-cgi/com/ptz.cgi?query=speed&camera=1' - //console.log('debug', ' Axis speed info: '+ self.BASEURI + uri); - request(self.BASEURI + uri, function (error, response, body) { - //console.log('warn'," axis camera error: " + error) - if (!(error === null)) { - self.status(self.STATUS_ERROR, 'Username/password') - self.log('warn', 'response ' + response) - } else { - self.status(self.STATUS_OK, 'Connected') - //str = JSON.parse(response); - //console.log('debug', ' Axis connected:'+body) - let chunks = body.split('\n'); - // console.log('chunks: '+chunks); - - - const attarr = new Set([]); - for (let i = 0; i < chunks.length-1; i += 1) { - //camattr[chunks[i].split('=')[0]] = chunks[i].split('=')[1].trim() - - attarr.add - ( - {label: 'Axis Camera '+chunks[i].split('=')[0], - name: chunks[i].split('=')[0], - value: chunks[i].split('=')[1].trim(), - } - ) - self.setVariable(chunks[i].split('=')[0],chunks[i].split('=')[1].trim()) - - } - //console.log (attarr) - - - - - - - - } - - }).auth(self.config.user, self.config.password, false) - } -} -exports = module.exports = instance From 717108ba123b19ef2a65d8613ac4e11f526c9ab5 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:25:22 +0100 Subject: [PATCH 06/10] Delete presets.js --- presets.js | 1244 ---------------------------------------------------- 1 file changed, 1244 deletions(-) delete mode 100644 presets.js diff --git a/presets.js b/presets.js deleted file mode 100644 index c9eacb4..0000000 --- a/presets.js +++ /dev/null @@ -1,1244 +0,0 @@ -//var { MODELS, SERIES_SPECS } = require('./models.js'); -const c = require('./choices') - -module.exports = { - setPresets: function (i) { - var self = i - var presets = [] - var SERIES = {} - - - var s = {} - - - // ########################## - // #### Pan/Tilt Presets #### - // ########################## - s.panTilt = true - if (s.panTilt == true) { - presets.push({ - category: 'Pan/Tilt', - label: 'UP', - bank: { - style: 'png', - text: '', - png64: self.ICON_UP, - pngalignment: 'center:center', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'up', - options: { - speed: 25, - }, - }, - ], - release_actions: [ - { - action: 'stop', - }, - ], - feedbacks: [ - { - type: 'MaxTiltLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - ], - }) - - presets.push({ - category: 'Pan/Tilt', - label: 'DOWN', - bank: { - style: 'png', - text: '', - png64: self.ICON_DOWN, - pngalignment: 'center:center', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'down', - options: { - speed: 25, - }, - }, - ], - release_actions: [ - { - action: 'stop', - }, - ], - feedbacks: [ - { - type: 'MinTiltLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - ], - }) - - presets.push({ - category: 'Pan/Tilt', - label: 'LEFT', - bank: { - style: 'png', - text: '', - png64: self.ICON_LEFT, - pngalignment: 'center:center', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'left', - options: { - speed: 25, - }, - }, - ], - release_actions: [ - { - action: 'stop', - }, - ], - feedbacks: [ - { - type: 'MinPanLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - ], - }) - - presets.push({ - category: 'Pan/Tilt', - label: 'RIGHT', - bank: { - style: 'png', - text: '', - png64: self.ICON_RIGHT, - pngalignment: 'center:center', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'right', - options: { - speed: 25, - }, - }, - ], - release_actions: [ - { - action: 'stop', - }, - ], - feedbacks: [ - { - type: 'MaxPanLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - ], - }) - - presets.push({ - category: 'Pan/Tilt', - label: 'UP RIGHT', - bank: { - style: 'png', - text: '', - png64: self.ICON_UP_RIGHT, - pngalignment: 'center:center', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'upright', - options: { - speed: 25, - }, - }, - ], - release_actions: [ - { - action: 'stop', - }, - ], - feedbacks: [ - { - type: 'MaxTiltLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - { - type: 'MaxPanLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - - ], - }) - - presets.push({ - category: 'Pan/Tilt', - label: 'UP LEFT', - bank: { - style: 'png', - text: '', - png64: self.ICON_UP_LEFT, - pngalignment: 'center:center', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'upleft', - options: { - speed: 25, - }, - }, - ], - release_actions: [ - { - action: 'stop', - }, - ], - feedbacks: [ - { - type: 'MaxTiltLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - { - type: 'MinPanLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - - ], - }) - - presets.push({ - category: 'Pan/Tilt', - label: 'DOWN LEFT', - bank: { - style: 'png', - text: '', - png64: self.ICON_DOWN_LEFT, - pngalignment: 'center:center', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'downleft', - options: { - speed: 25, - }, - }, - ], - release_actions: [ - { - action: 'stop', - }, - ], - feedbacks: [ - { - type: 'MinTiltLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - { - type: 'MinPanLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - - ], - }) - - presets.push({ - category: 'Pan/Tilt', - label: 'DOWN RIGHT', - bank: { - style: 'png', - text: '', - png64: self.ICON_DOWN_RIGHT, - pngalignment: 'center:center', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'downright', - options: { - speed: 25, - }, - }, - ], - release_actions: [ - { - action: 'stop', - }, - ], - feedbacks: [ - { - type: 'MinTiltLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - { - type: 'MaxPanLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - - ], - }) - - presets.push({ - category: 'Pan/Tilt', - label: 'Home', - bank: { - style: 'text', - text: 'HOME', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'home', - }, - ], - }) - } - - - s.zoom = true - if (s.zoom == true) { - presets.push({ - category: 'Lens', - label: 'Zoom In', - bank: { - style: 'text', - text: 'ZOOM\\nIN', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'zoomI', - options: { - speed: 10, - }, - }, - ], - release_actions: [ - { - action: 'zoomstop', - }, - ], - feedbacks: [ - { - type: 'MaxZoomLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - { - type: 'MinZoomLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - ], - }) - - presets.push({ - category: 'Lens', - label: 'Zoom Out', - bank: { - style: 'text', - text: 'ZOOM\\nOUT', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'zoomO', - options: { - speed: 10, - }, - }, - ], - release_actions: [ - { - action: 'zoomstop', - }, - ], - feedbacks: [ - { - type: 'MaxZoomLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - { - type: 'MinZoomLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - ], - }) - } - - - - - - - s.OAF = true - if (s.OAF == true) { - presets.push({ - category: 'Lens', - label: 'Manual Focus', - bank: { - style: 'text', - text: 'MANUAL\\nFOCUS', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'setAutoFocus', - options: { - switchonoff: 'off', - }, - }, - ], - feedbacks: [ - { - type: 'autofocus', - options: { - switchonoff: '0', - }, - }, - ], - }) - - presets.push({ - category: 'Lens', - label: 'Auto Focus', - bank: { - style: 'text', - text: 'AUTO\\nFOCUS', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'setAutoFocus', - options: { - switchonoff: 'on', - }, - }, - ], - feedbacks: [ - { - type: 'autofocus', - options: { - option: '1', - }, - }, - ], - }) - presets.push({ - category: 'Lens', - label: 'Focus Adjust', - bank: { - style: 'text', - text: 'AJUST\\nFOCUS', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'Focus', - options: { - steps: 50, - }, - }, - ], - feedbacks: [ - { - type: 'MaxFocusLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - { - type: 'MinFocusLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - ], - - }) - presets.push({ - category: 'Lens', - label: 'Continous Focus Move', - bank: { - style: 'text', - text: 'CNT Focus\\nMOVE', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'ContinousFocusMove', - options: { - steps: 0, - }, - }, - ], - release_actions: [ - { - action: 'ContinousFocusMove', - options: { - steps: 0, - }, - }, - ], - feedbacks: [ - { - type: 'MaxFocusLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - { - type: 'MinFocusLimit', - options: { - fg: self.rgb(255, 255, 255), - bg: self.rgb(255, 0, 0), - } - }, - - ], - - }) - - } - - // ########################## - // #### Exposure Presets #### - // ########################## - - s.iris = false - if (s.iris == true) { - presets.push({ - category: 'Exposure', - label: 'Iris Up', - bank: { - style: 'text', - text: 'IRIS\\nUP', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'irisU', - }, - ], - }) - - presets.push({ - category: 'Exposure', - label: 'Iris Down', - bank: { - style: 'text', - text: 'IRIS\\nDOWN', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'irisD', - }, - ], - }) - - presets.push({ - category: 'Exposure', - label: 'Manual Iris', - bank: { - style: 'text', - text: 'MANUAL\\nIRIS', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'irisM', - options: { - bol: 1, - }, - }, - ], - feedbacks: [ - { - type: 'autoIris', - options: { - option: '0', - }, - }, - ], - }) - - presets.push({ - category: 'Exposure', - label: 'Auto Iris', - bank: { - style: 'text', - text: 'AUTO\\nIRIS', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'irisM', - options: { - bol: 0, - }, - }, - ], - feedbacks: [ - { - type: 'autoIris', - options: { - option: '1', - }, - }, - ], - }) - } - - s.gain = false - if (s.gain.cmd) { - presets.push({ - category: 'Exposure', - label: 'Gain Up', - bank: { - style: 'text', - text: 'GAIN\\nUP', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'gainU', - }, - ], - }) - - presets.push({ - category: 'Exposure', - label: 'Gain Down', - bank: { - style: 'text', - text: 'GAIN\\nDOWN', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'gainD', - }, - ], - }) - } - - s.shutcmd = false - if (s.shutcmd) { - presets.push({ - category: 'Exposure', - label: 'Shutter Up', - bank: { - style: 'text', - text: 'Shut\\nUP', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'shutU', - }, - ], - }) - - presets.push({ - category: 'Exposure', - label: 'Shutter Down', - bank: { - style: 'text', - text: 'Shut\\nDOWN', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'shutD', - }, - ], - }) - } - - s.pedcmd = false - if (s.pedcmd) { - presets.push({ - category: 'Exposure', - label: 'Pedestal Up', - bank: { - style: 'text', - text: 'Pedestal\\nUP', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'pedU', - }, - ], - }) - - presets.push({ - category: 'Exposure', - label: 'Pedestal Down', - bank: { - style: 'text', - text: 'Pedestal\\nDOWN', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'pedD', - }, - ], - }) - } - - // ######################## - // #### System Presets #### - // ######################## - - s.power = false - if (s.power == true) { - presets.push({ - category: 'System', - label: 'Power Off', - bank: { - style: 'text', - text: 'Power\\nOFF', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'powerOff', - }, - ], - feedbacks: [ - { - type: 'powerState', - options: { - option: '0', - }, - }, - ], - }) - - presets.push({ - category: 'System', - label: 'Power On', - bank: { - style: 'text', - text: 'Power\\nON', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'powerOn', - }, - ], - feedbacks: [ - { - type: 'powerState', - options: { - option: '1', - }, - }, - ], - }) - } - - s.tally = false - if (s.tally == true) { - presets.push({ - category: 'System', - label: 'Tally Off', - bank: { - style: 'text', - text: 'Tally\\nOFF', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'tallyOff', - }, - ], - feedbacks: [ - { - type: 'tallyState', - options: { - option: '0', - }, - }, - ], - }) - - presets.push({ - category: 'System', - label: 'Tally On', - bank: { - style: 'text', - text: 'Tally\\nON', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'tallyOn', - }, - ], - feedbacks: [ - { - type: 'tallyState', - options: { - option: '1', - }, - }, - ], - }) - } - - s.ins = false - if (s.ins == true) { - presets.push({ - category: 'System', - label: 'INS Desktop', - bank: { - style: 'text', - text: 'INS\\nDesk', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'insPosition', - options: { - position: 0, - }, - }, - ], - feedbacks: [ - { - type: 'insState', - options: { - option: '0', - }, - }, - ], - }) - - presets.push({ - category: 'System', - label: 'INS Hanging', - bank: { - style: 'text', - text: 'INS\\nHang', - size: 'auto', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'insPosition', - options: { - position: 1, - }, - }, - ], - feedbacks: [ - { - type: 'insState', - options: { - option: '1', - }, - }, - ], - }) - } - - s.sdcard = false - if (s.sdCard == true) { - presets.push({ - category: 'System', - label: 'SD Card Recording Start', - bank: { - style: 'text', - text: 'SD Card\\nRecording\\nStart', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'sdCardRec', - options: { - value: 'start', - }, - }, - ], - }) - - presets.push({ - category: 'System', - label: 'SD Card Recording Stop', - bank: { - style: 'text', - text: 'SD Card\\nRecording\\nStop', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'sdCardRec', - options: { - value: 'end', - }, - }, - ], - }) - } - // ########################### - // #### Load/save Presets #### - // ########################### - - s.preset = true - if (s.preset == true) { - for (var save = 1; save < 100; save++) { - presets.push({ - category: 'Save Preset', - label: 'Save Preset ' + parseInt(save), - bank: { - style: 'text', - text: 'SAVE\\nPSET\\n' + parseInt(save), - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'Setpreset', - options: { - preset: save, - }, - }, - ], - }) - } - } - - s.timePset = false - if (s.timePset == true) { - presets.push({ - category: 'Recall Preset', - label: 'Preset Mode Speed', - bank: { - style: 'text', - text: 'PRESET\\nMODE\\nSPEED', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'modePset', - options: { - mode: 0, - }, - }, - ], - }) - - presets.push({ - category: 'Recall Preset', - label: 'Preset Mode Time', - bank: { - style: 'text', - text: 'PRESET\\nMODE\\nTIME', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'modePset', - options: { - mode: 1, - }, - }, - ], - }) - } - - s.speedPset = false - if (s.speedPset == true) { - presets.push({ - category: 'Recall Preset', - label: 'Set Recall Speed High', - bank: { - style: 'text', - text: 'RECALL\\nSPEED\\nHIGH', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'speedPset', - options: { - speed: 25, - }, - }, - ], - }) - - presets.push({ - category: 'Recall Preset', - label: 'Set Recall Speed Mid', - bank: { - style: 'text', - text: 'RECALL\\nSPEED\\nMID', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'speedPset', - options: { - speed: 15, - }, - }, - ], - }) - - presets.push({ - category: 'Recall Preset', - label: 'Set Recall Speed Low', - bank: { - style: 'text', - text: 'RECALL\\nSPEED\\nLOW', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'speedPset', - options: { - speed: 5, - }, - }, - ], - }) - } - - s.timePset = false - if (s.timePset == true) { - presets.push({ - category: 'Recall Preset', - label: 'Set Recall Time High', - bank: { - style: 'text', - text: 'RECALL\\nTIME\\n5 Sec', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'speedPset', - options: { - speed: 5, - }, - }, - ], - }) - - presets.push({ - category: 'Recall Preset', - label: 'Set Recall Time Mid', - bank: { - style: 'text', - text: 'RECALL\\nTIME\\n10 Sec', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'speedPset', - options: { - speed: 10, - }, - }, - ], - }) - - presets.push({ - category: 'Recall Preset', - label: 'Set Recall Time Low', - bank: { - style: 'text', - text: 'RECALL\\nTIME\\n30 Sec', - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'speedPset', - options: { - speed: 30, - }, - }, - ], - }) - } - - s.preset = true - if (s.preset == true) { - for (var recall = 1; recall < 100; recall++) { - presets.push({ - category: 'Recall Preset', - label: 'Recall Preset ' + parseInt(recall), - bank: { - style: 'text', - text: 'preset ' + parseInt(recall), - size: '13', - color: '16777215', - bgcolor: self.rgb(0, 0, 0), - }, - actions: [ - { - action: 'preset', - options: { - preset: recall, - }, - }, - ], - }) - } - } - - return presets - }, -} From 88947f656616267939cf4940e7b963279c100fdc Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:25:31 +0100 Subject: [PATCH 07/10] Delete variables.js --- variables.js | 77 ---------------------------------------------------- 1 file changed, 77 deletions(-) delete mode 100644 variables.js diff --git a/variables.js b/variables.js deleted file mode 100644 index c19b9c1..0000000 --- a/variables.js +++ /dev/null @@ -1,77 +0,0 @@ - - -module.exports = { - // ########################## - // #### Define Variables #### - // ########################## - setVariables: function (i) { - var self = i - var variables = [] - var SERIES = {} - - // Set the model and series selected, if in auto, dettect what model is connected via TCP - - - // Find the specific commands for a given series - - // console.log(SERIES); - - // console.log('variable set'); - // console.log(self.config.model); - // console.log(self.data.model); - // console.log(self.data.modelTCP); - // console.log(self.data.series); - variables.push({ name: 'root.Brand.ProdShortName', label: 'root.Brand.ProdShortName'}) - variables.push({ name: 'autofocus', label: 'AutoFocus' }) - variables.push({ name: 'MaxPan', label: 'MaxPan' }) - variables.push({ name: 'MinPan', label: 'MinPan' }) - variables.push({ name: 'MaxTilt', label: 'Maxtilt' }) - variables.push({ name: 'MinTilt', label: 'Mintilt' }) - - variables.push({ name: 'MaxZoom', label: 'MaxZoom' }) - variables.push({ name: 'MaxFocus', label: 'Maxfocus' }) - variables.push({ name: 'MinFocus', label: 'MinFocus' }) - - variables.push({ name: 'pan', label: 'Current Pan Position' }) - variables.push({ name: 'tilt', label: 'Current Tilt Position' }) - - variables.push({ name: 'zoom', label: 'Current Zoom Position' }) - variables.push({ name: 'focus', label: 'Current Focus Position' }) - variables.push({ name: 'speed', label: 'PTZ Speed' }) - return variables - }, - - // ######################### - // #### Check Variables #### - // ######################### - checkVariables: function (i) { - var self = i - - self.setVariable('series', self.data.series) - self.setVariable('model', self.data.model) - self.setVariable('name', self.data.name) - self.setVariable('version', self.data.version) - self.setVariable('error', self.data.error) - self.setVariable('ins', self.data.ins) - self.setVariable('power', self.data.power) - self.setVariable('tally', self.data.tally) - self.setVariable('OAF', self.data.oaf) - self.setVariable('irisMode', self.data.irisMode) - self.setVariable('presetMode', self.data.recallModePset) - self.setVariable('ptSpeedVar', self.ptSpeed) - self.setVariable('zSpeedVar', self.zSpeed) - self.setVariable('fSpeedVar', self.fSpeed) - }, - getVariableValue(name) { - let _this = this; - if (Object.prototype.hasOwnProperty.call(_this.variables.changes.values, name)) { - return _this.variables.changes.values[name]; - } - let variable = _this.variables.definitions[name]; - if (variable) { - return variable.value; - } - }, - - -} From 8724cfa7a3924cd594259f9704fedfc2148454e3 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:25:47 +0100 Subject: [PATCH 08/10] Delete workspace.code-workspace --- workspace.code-workspace | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 workspace.code-workspace diff --git a/workspace.code-workspace b/workspace.code-workspace deleted file mode 100644 index 876a149..0000000 --- a/workspace.code-workspace +++ /dev/null @@ -1,8 +0,0 @@ -{ - "folders": [ - { - "path": "." - } - ], - "settings": {} -} \ No newline at end of file From 10d7de2899fa16c02d99b0c48e6c510fbe72ad5a Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:26:38 +0100 Subject: [PATCH 09/10] Delete Camera_Dumps directory --- Camera_Dumps/AW-HE2_camdata.txt | 17 --- Camera_Dumps/AW-HE40_cam1_camdata.txt | 46 ------ Camera_Dumps/AW-HE40_cam2_camdata.txt | 46 ------ Camera_Dumps/AW-HE40_cam3_camdata.txt | 46 ------ Camera_Dumps/AW-UE150_Setup_Dump.txt | 199 -------------------------- Camera_Dumps/Camera_Setup_Dump.txt | 199 -------------------------- 6 files changed, 553 deletions(-) delete mode 100644 Camera_Dumps/AW-HE2_camdata.txt delete mode 100644 Camera_Dumps/AW-HE40_cam1_camdata.txt delete mode 100644 Camera_Dumps/AW-HE40_cam2_camdata.txt delete mode 100644 Camera_Dumps/AW-HE40_cam3_camdata.txt delete mode 100644 Camera_Dumps/AW-UE150_Setup_Dump.txt delete mode 100644 Camera_Dumps/Camera_Setup_Dump.txt diff --git a/Camera_Dumps/AW-HE2_camdata.txt b/Camera_Dumps/AW-HE2_camdata.txt deleted file mode 100644 index d8810ab..0000000 --- a/Camera_Dumps/AW-HE2_camdata.txt +++ /dev/null @@ -1,17 +0,0 @@ -p1 -OID:AW-HE2 -CGI_TIME:0 -OSA:87:10 -TITLE:Stage -OAW:4 -OBR:0 -OUS:0 -d30 -s07 -OSD:4F:7F -rt1 -axz555 -axf555 -pE0000000001FF -pE010000000000 -pE020000000000 diff --git a/Camera_Dumps/AW-HE40_cam1_camdata.txt b/Camera_Dumps/AW-HE40_cam1_camdata.txt deleted file mode 100644 index bff5228..0000000 --- a/Camera_Dumps/AW-HE40_cam1_camdata.txt +++ /dev/null @@ -1,46 +0,0 @@ -p1 -OID:AW-HE40 -CGI_TIME:0 -OSA:87:0x14 -TITLE:Left -OGU:0x80 -OTD:0x1E -OAW:9 -OSH:0xB -ODT:1 -OSF:0 -OBR:0 -sWZ0 -OSE:71:1 -iNS1 -OUS:0 -d10 -d30 -s53 -OSA:30:87 -d20 -d60 -d40 -OSD:4F:9F -OER:0 -rt1 -axzB6C -rER00 -axfF9C -pE0023800FFFFF -pE01FFFFFFFEBF -pE02000004840E -uPVS650 -lC10 -lC20 -lC30 -lC40 -ORG:0x1E -OBG:0x1E -OSD:B1:0x00C -pST2 -pRF0 -OIS:0 -OSE:70:0 -OSD:B3:0 -ODE:0 diff --git a/Camera_Dumps/AW-HE40_cam2_camdata.txt b/Camera_Dumps/AW-HE40_cam2_camdata.txt deleted file mode 100644 index d6233c5..0000000 --- a/Camera_Dumps/AW-HE40_cam2_camdata.txt +++ /dev/null @@ -1,46 +0,0 @@ -p1 -OID:AW-HE40 -CGI_TIME:0 -OSA:87:0x14 -TITLE:Center -OGU:0x80 -OTD:0x1E -OAW:9 -OSH:0xB -ODT:1 -OSF:0 -OBR:0 -sWZ0 -OSE:71:1 -iNS1 -OUS:0 -d10 -d30 -s53 -OSA:30:87 -d20 -d60 -d40 -OSD:4F:B8 -OER:0 -rt1 -axz919 -rER00 -axfF22 -pE0023800FFFFF -pE01FFFFFFFEBF -pE02000002140E -uPVS650 -lC10 -lC20 -lC30 -lC40 -ORG:0x1E -OBG:0x1E -OSD:B1:0x00C -pST2 -pRF0 -OIS:0 -OSE:70:0 -OSD:B3:0 -ODE:0 diff --git a/Camera_Dumps/AW-HE40_cam3_camdata.txt b/Camera_Dumps/AW-HE40_cam3_camdata.txt deleted file mode 100644 index b89350b..0000000 --- a/Camera_Dumps/AW-HE40_cam3_camdata.txt +++ /dev/null @@ -1,46 +0,0 @@ -p1 -OID:AW-HE40 -CGI_TIME:0 -OSA:87:0x14 -TITLE:Right -OGU:0x80 -OTD:0x1E -OAW:9 -OSH:0xB -ODT:1 -OSF:0 -OBR:0 -sWZ0 -OSE:71:1 -iNS1 -OUS:0 -d10 -d30 -s53 -OSA:30:87 -d20 -d60 -d40 -OSD:4F:CD -OER:0 -rt1 -axzCF1 -rER00 -axfF96 -pE0023800FFFFF -pE01FFFFFFFEBF -pE02000004840E -uPVS650 -lC10 -lC20 -lC30 -lC40 -ORG:0x1E -OBG:0x1E -OSD:B1:0x00C -pST2 -pRF0 -OIS:0 -OSE:70:0 -OSD:B3:0 -ODE:0 diff --git a/Camera_Dumps/AW-UE150_Setup_Dump.txt b/Camera_Dumps/AW-UE150_Setup_Dump.txt deleted file mode 100644 index b75cc12..0000000 --- a/Camera_Dumps/AW-UE150_Setup_Dump.txt +++ /dev/null @@ -1,199 +0,0 @@ -HTTP Recived from PTZ: p1 -HTTP Recived from PTZ: OID:AW-UE150 -HTTP Recived from PTZ: CGI_TIME:0 -HTTP Recived from PTZ: OSA:87:0x11 -HTTP Recived from PTZ: TITLE:AW-UE150-2 -HTTP Recived from PTZ: OSJ:5C:41572D55453135302D3200000000000000000000 -HTTP Recived from PTZ: OSF:0 -HTTP Recived from PTZ: OSD:48:0x23 -HTTP Recived from PTZ: ORS:1 -HTTP Recived from PTZ: d31 -HTTP Recived from PTZ: OSJ:01:0x1 -HTTP Recived from PTZ: OSJ:02:0x0 -HTTP Recived from PTZ: OSJ:C0:0x0 -HTTP Recived from PTZ: OSJ:03:0x0 -HTTP Recived from PTZ: OSJ:06:0x003C -HTTP Recived from PTZ: OSJ:09:0x001F4 -HTTP Recived from PTZ: OSD:BF:2 -HTTP Recived from PTZ: OGU:0x0F -HTTP Recived from PTZ: OSI:28:0 -HTTP Recived from PTZ: OSD:69:03 -HTTP Recived from PTZ: OSA:65:0x00 -HTTP Recived from PTZ: OFT:0 -HTTP Recived from PTZ: d60 -HTTP Recived from PTZ: OAW:9 -HTTP Recived from PTZ: OSI:20:0x00A6E:0 -HTTP Recived from PTZ: OSG:39:0x800 -HTTP Recived from PTZ: OSG:3A:0x800 -HTTP Recived from PTZ: OSJ:4A:0x00C80:0 -HTTP Recived from PTZ: OSJ:4B:0x800 -HTTP Recived from PTZ: OSJ:4C:0x800 -HTTP Recived from PTZ: OSJ:4D:0x800 -HTTP Recived from PTZ: OSJ:0C:0x0 -HTTP Recived from PTZ: OSI:25:0 -HTTP Recived from PTZ: OSJ:0D:0x80 -HTTP Recived from PTZ: OSJ:0E:0x80 -HTTP Recived from PTZ: OSD:B0:0x80 -HTTP Recived from PTZ: OSJ:0B:0x80 -HTTP Recived from PTZ: OSJ:0F:0x800 -HTTP Recived from PTZ: ORP:0x09A -HTTP Recived from PTZ: OSJ:10:0x096 -HTTP Recived from PTZ: OBP:0x096 -HTTP Recived from PTZ: OSJ:11:0 -HTTP Recived from PTZ: ODT:0 -HTTP Recived from PTZ: OSA:30:80 -HTTP Recived from PTZ: OSJ:12:0x0F -HTTP Recived from PTZ: OSD:A1:0x80 -HTTP Recived from PTZ: OSD:A2:0x80 -HTTP Recived from PTZ: OSJ:13:0x80 -HTTP Recived from PTZ: OSG:3F:0x02 -HTTP Recived from PTZ: OSA:38:0x80 -HTTP Recived from PTZ: OSA:39:0x80 -HTTP Recived from PTZ: OSA:40:0 -HTTP Recived from PTZ: OSD:A3:0x90 -HTTP Recived from PTZ: OSJ:14:0x1 -HTTP Recived from PTZ: OSJ:15:0x6C -HTTP Recived from PTZ: OSJ:16:0x0F -HTTP Recived from PTZ: OSJ:17:0x87 -HTTP Recived from PTZ: OSJ:18:0x80 -HTTP Recived from PTZ: OSJ:19:0x80 -HTTP Recived from PTZ: OSJ:1A:0x02 -HTTP Recived from PTZ: OSE:72:0 -HTTP Recived from PTZ: OSA:6A:0x76 -HTTP Recived from PTZ: OSA:10:3 -HTTP Recived from PTZ: OSA:0F:0x00 -HTTP Recived from PTZ: OSA:25:0x7C -HTTP Recived from PTZ: OSA:21:0x62 -HTTP Recived from PTZ: OSA:07:0x80 -HTTP Recived from PTZ: OSJ:1B:0x1 -HTTP Recived from PTZ: OSE:33:0 -HTTP Recived from PTZ: OSA:2D:2 -HTTP Recived from PTZ: OSG:97:4 -HTTP Recived from PTZ: OSA:20:0x7E -HTTP Recived from PTZ: OSA:24:0x63 -HTTP Recived from PTZ: OSI:40:0 -HTTP Recived from PTZ: OSI:41:0x1C -HTTP Recived from PTZ: OSI:42:0x0A -HTTP Recived from PTZ: OSA:2E:1 -HTTP Recived from PTZ: OSA:2A:0x13 -HTTP Recived from PTZ: OSD:3A:0x01 -HTTP Recived from PTZ: OSE:31:0 -HTTP Recived from PTZ: OSJ:4F:0 -HTTP Recived from PTZ: OSD:A4:0x80 -HTTP Recived from PTZ: OSD:A5:0x80 -HTTP Recived from PTZ: OSD:A6:0x90 -HTTP Recived from PTZ: OSD:A7:0x93 -HTTP Recived from PTZ: OSD:A8:0x80 -HTTP Recived from PTZ: OSD:A9:0x92 -HTTP Recived from PTZ: OSD:80:0x8F -HTTP Recived from PTZ: OSD:81:0x86 -HTTP Recived from PTZ: OSD:82:0x8D -HTTP Recived from PTZ: OSD:83:0x8A -HTTP Recived from PTZ: OSD:84:0x84 -HTTP Recived from PTZ: OSD:85:0x8A -HTTP Recived from PTZ: OSD:9A:0x82 -HTTP Recived from PTZ: OSD:9B:0x86 -HTTP Recived from PTZ: OSD:86:0x80 -HTTP Recived from PTZ: OSD:87:0x81 -HTTP Recived from PTZ: OSD:9C:0x84 -HTTP Recived from PTZ: OSD:9D:0x86 -HTTP Recived from PTZ: OSD:88:0x85 -HTTP Recived from PTZ: OSD:89:0x8B -HTTP Recived from PTZ: OSD:9E:0x8A -HTTP Recived from PTZ: OSD:9F:0x83 -HTTP Recived from PTZ: OSD:8A:0x88 -HTTP Recived from PTZ: OSD:8B:0x80 -HTTP Recived from PTZ: OSJ:1C:0x83 -HTTP Recived from PTZ: OSJ:1D:0x82 -HTTP Recived from PTZ: OSD:8C:0x92 -HTTP Recived from PTZ: OSD:8D:0x88 -HTTP Recived from PTZ: OSD:8E:0x94 -HTTP Recived from PTZ: OSD:8F:0x90 -HTTP Recived from PTZ: OSD:90:0x8F -HTTP Recived from PTZ: OSD:91:0x92 -HTTP Recived from PTZ: OSD:92:0x89 -HTTP Recived from PTZ: OSD:93:0x88 -HTTP Recived from PTZ: OSD:94:0x81 -HTTP Recived from PTZ: OSD:95:0x8B -HTTP Recived from PTZ: OSD:96:0x85 -HTTP Recived from PTZ: OSD:97:0x76 -HTTP Recived from PTZ: OAF:0 -HTTP Recived from PTZ: d10 -HTTP Recived from PTZ: OSD:B3:0 -HTTP Recived from PTZ: OSE:70:0 -HTTP Recived from PTZ: OSE:7A:10 -HTTP Recived from PTZ: ODE:0 -HTTP Recived from PTZ: OSJ:4E:0 -HTTP Recived from PTZ: OIS:0 -HTTP Recived from PTZ: axz557 -HTTP Recived from PTZ: axf64C -HTTP Recived from PTZ: axiFE9 -HTTP Recived from PTZ: OSD:4F:FC -HTTP Recived from PTZ: OIF:0x1C -HTTP Recived from PTZ: OSE:77:1 -HTTP Recived from PTZ: fAN0 -HTTP Recived from PTZ: fA20 -HTTP Recived from PTZ: OBR:0 -HTTP Recived from PTZ: tAE1 -HTTP Recived from PTZ: TLR:0 -HTTP Recived from PTZ: dA0 -HTTP Recived from PTZ: TLG:0 -HTTP Recived from PTZ: tAA000000000 -HTTP Recived from PTZ: OSJ:2E:0x0 -HTTP Recived from PTZ: OSI:32:0 -HTTP Recived from PTZ: OSI:33:1 -HTTP Recived from PTZ: OSI:16:1 -HTTP Recived from PTZ: OSI:1A:7 -HTTP Recived from PTZ: OSI:17:1 -HTTP Recived from PTZ: OSJ:2F:0x3C0 -HTTP Recived from PTZ: OSJ:30:0x21C -HTTP Recived from PTZ: OSJ:31:0x3C0 -HTTP Recived from PTZ: OSJ:32:0x21C -HTTP Recived from PTZ: OSJ:33:0x3C0 -HTTP Recived from PTZ: OSJ:34:0x21C -HTTP Recived from PTZ: iNS0 -HTTP Recived from PTZ: OSJ:2D:0 -HTTP Recived from PTZ: sWZ1 -HTTP Recived from PTZ: OAZ:0 -HTTP Recived from PTZ: lC10 -HTTP Recived from PTZ: lC20 -HTTP Recived from PTZ: lC30 -HTTP Recived from PTZ: lC40 -HTTP Recived from PTZ: OSJ:29:0 -HTTP Recived from PTZ: pST2 -HTTP Recived from PTZ: uPVS999 -HTTP Recived from PTZ: OSJ:A8:1 -HTTP Recived from PTZ: OSJ:AB:0x03 -HTTP Recived from PTZ: OSE:71:0 -HTTP Recived from PTZ: OSE:7C:0 -HTTP Recived from PTZ: OSJ:2A:0x0 -HTTP Recived from PTZ: OSJ:2B:0x1 -HTTP Recived from PTZ: OSJ:2C:0x0 -HTTP Recived from PTZ: OSJ:5B:0 -HTTP Recived from PTZ: OSE:7D:0 -HTTP Recived from PTZ: pRF0 -HTTP Recived from PTZ: pE000000000313 -HTTP Recived from PTZ: pE010000000000 -HTTP Recived from PTZ: pE020000000000 -HTTP Recived from PTZ: s0 -HTTP Recived from PTZ: OUS:0 -HTTP Recived from PTZ: OSJ:40:0: -HTTP Recived from PTZ: OER:0 -HTTP Recived from PTZ: OSI:46:0x00000000 -HTTP Recived from PTZ: rER00 -HTTP Recived from PTZ: aPC80007C00 -HTTP Recived from PTZ: OSJ:45:2 -HTTP Recived from PTZ: OSJ:46:00 -HTTP Recived from PTZ: OSI:30:1 -HTTP Recived from PTZ: OSJ:54:0 -HTTP Recived from PTZ: OSJ:55:0 -HTTP Recived from PTZ: OSJ:C1:0 -HTTP Recived from PTZ: OSJ:56:0 -HTTP Recived from PTZ: OSJ:1F:0 -HTTP Recived from PTZ: OSJ:57:0 -HTTP Recived from PTZ: OSJ:22:0 -HTTP Recived from PTZ: OSJ:58:0 -HTTP Recived from PTZ: OSJ:24:0 -HTTP Recived from PTZ: OSJ:59:0 -HTTP Recived from PTZ: OSJ:26:0 -HTTP Recived from PTZ: OSJ:5A:0 \ No newline at end of file diff --git a/Camera_Dumps/Camera_Setup_Dump.txt b/Camera_Dumps/Camera_Setup_Dump.txt deleted file mode 100644 index b75cc12..0000000 --- a/Camera_Dumps/Camera_Setup_Dump.txt +++ /dev/null @@ -1,199 +0,0 @@ -HTTP Recived from PTZ: p1 -HTTP Recived from PTZ: OID:AW-UE150 -HTTP Recived from PTZ: CGI_TIME:0 -HTTP Recived from PTZ: OSA:87:0x11 -HTTP Recived from PTZ: TITLE:AW-UE150-2 -HTTP Recived from PTZ: OSJ:5C:41572D55453135302D3200000000000000000000 -HTTP Recived from PTZ: OSF:0 -HTTP Recived from PTZ: OSD:48:0x23 -HTTP Recived from PTZ: ORS:1 -HTTP Recived from PTZ: d31 -HTTP Recived from PTZ: OSJ:01:0x1 -HTTP Recived from PTZ: OSJ:02:0x0 -HTTP Recived from PTZ: OSJ:C0:0x0 -HTTP Recived from PTZ: OSJ:03:0x0 -HTTP Recived from PTZ: OSJ:06:0x003C -HTTP Recived from PTZ: OSJ:09:0x001F4 -HTTP Recived from PTZ: OSD:BF:2 -HTTP Recived from PTZ: OGU:0x0F -HTTP Recived from PTZ: OSI:28:0 -HTTP Recived from PTZ: OSD:69:03 -HTTP Recived from PTZ: OSA:65:0x00 -HTTP Recived from PTZ: OFT:0 -HTTP Recived from PTZ: d60 -HTTP Recived from PTZ: OAW:9 -HTTP Recived from PTZ: OSI:20:0x00A6E:0 -HTTP Recived from PTZ: OSG:39:0x800 -HTTP Recived from PTZ: OSG:3A:0x800 -HTTP Recived from PTZ: OSJ:4A:0x00C80:0 -HTTP Recived from PTZ: OSJ:4B:0x800 -HTTP Recived from PTZ: OSJ:4C:0x800 -HTTP Recived from PTZ: OSJ:4D:0x800 -HTTP Recived from PTZ: OSJ:0C:0x0 -HTTP Recived from PTZ: OSI:25:0 -HTTP Recived from PTZ: OSJ:0D:0x80 -HTTP Recived from PTZ: OSJ:0E:0x80 -HTTP Recived from PTZ: OSD:B0:0x80 -HTTP Recived from PTZ: OSJ:0B:0x80 -HTTP Recived from PTZ: OSJ:0F:0x800 -HTTP Recived from PTZ: ORP:0x09A -HTTP Recived from PTZ: OSJ:10:0x096 -HTTP Recived from PTZ: OBP:0x096 -HTTP Recived from PTZ: OSJ:11:0 -HTTP Recived from PTZ: ODT:0 -HTTP Recived from PTZ: OSA:30:80 -HTTP Recived from PTZ: OSJ:12:0x0F -HTTP Recived from PTZ: OSD:A1:0x80 -HTTP Recived from PTZ: OSD:A2:0x80 -HTTP Recived from PTZ: OSJ:13:0x80 -HTTP Recived from PTZ: OSG:3F:0x02 -HTTP Recived from PTZ: OSA:38:0x80 -HTTP Recived from PTZ: OSA:39:0x80 -HTTP Recived from PTZ: OSA:40:0 -HTTP Recived from PTZ: OSD:A3:0x90 -HTTP Recived from PTZ: OSJ:14:0x1 -HTTP Recived from PTZ: OSJ:15:0x6C -HTTP Recived from PTZ: OSJ:16:0x0F -HTTP Recived from PTZ: OSJ:17:0x87 -HTTP Recived from PTZ: OSJ:18:0x80 -HTTP Recived from PTZ: OSJ:19:0x80 -HTTP Recived from PTZ: OSJ:1A:0x02 -HTTP Recived from PTZ: OSE:72:0 -HTTP Recived from PTZ: OSA:6A:0x76 -HTTP Recived from PTZ: OSA:10:3 -HTTP Recived from PTZ: OSA:0F:0x00 -HTTP Recived from PTZ: OSA:25:0x7C -HTTP Recived from PTZ: OSA:21:0x62 -HTTP Recived from PTZ: OSA:07:0x80 -HTTP Recived from PTZ: OSJ:1B:0x1 -HTTP Recived from PTZ: OSE:33:0 -HTTP Recived from PTZ: OSA:2D:2 -HTTP Recived from PTZ: OSG:97:4 -HTTP Recived from PTZ: OSA:20:0x7E -HTTP Recived from PTZ: OSA:24:0x63 -HTTP Recived from PTZ: OSI:40:0 -HTTP Recived from PTZ: OSI:41:0x1C -HTTP Recived from PTZ: OSI:42:0x0A -HTTP Recived from PTZ: OSA:2E:1 -HTTP Recived from PTZ: OSA:2A:0x13 -HTTP Recived from PTZ: OSD:3A:0x01 -HTTP Recived from PTZ: OSE:31:0 -HTTP Recived from PTZ: OSJ:4F:0 -HTTP Recived from PTZ: OSD:A4:0x80 -HTTP Recived from PTZ: OSD:A5:0x80 -HTTP Recived from PTZ: OSD:A6:0x90 -HTTP Recived from PTZ: OSD:A7:0x93 -HTTP Recived from PTZ: OSD:A8:0x80 -HTTP Recived from PTZ: OSD:A9:0x92 -HTTP Recived from PTZ: OSD:80:0x8F -HTTP Recived from PTZ: OSD:81:0x86 -HTTP Recived from PTZ: OSD:82:0x8D -HTTP Recived from PTZ: OSD:83:0x8A -HTTP Recived from PTZ: OSD:84:0x84 -HTTP Recived from PTZ: OSD:85:0x8A -HTTP Recived from PTZ: OSD:9A:0x82 -HTTP Recived from PTZ: OSD:9B:0x86 -HTTP Recived from PTZ: OSD:86:0x80 -HTTP Recived from PTZ: OSD:87:0x81 -HTTP Recived from PTZ: OSD:9C:0x84 -HTTP Recived from PTZ: OSD:9D:0x86 -HTTP Recived from PTZ: OSD:88:0x85 -HTTP Recived from PTZ: OSD:89:0x8B -HTTP Recived from PTZ: OSD:9E:0x8A -HTTP Recived from PTZ: OSD:9F:0x83 -HTTP Recived from PTZ: OSD:8A:0x88 -HTTP Recived from PTZ: OSD:8B:0x80 -HTTP Recived from PTZ: OSJ:1C:0x83 -HTTP Recived from PTZ: OSJ:1D:0x82 -HTTP Recived from PTZ: OSD:8C:0x92 -HTTP Recived from PTZ: OSD:8D:0x88 -HTTP Recived from PTZ: OSD:8E:0x94 -HTTP Recived from PTZ: OSD:8F:0x90 -HTTP Recived from PTZ: OSD:90:0x8F -HTTP Recived from PTZ: OSD:91:0x92 -HTTP Recived from PTZ: OSD:92:0x89 -HTTP Recived from PTZ: OSD:93:0x88 -HTTP Recived from PTZ: OSD:94:0x81 -HTTP Recived from PTZ: OSD:95:0x8B -HTTP Recived from PTZ: OSD:96:0x85 -HTTP Recived from PTZ: OSD:97:0x76 -HTTP Recived from PTZ: OAF:0 -HTTP Recived from PTZ: d10 -HTTP Recived from PTZ: OSD:B3:0 -HTTP Recived from PTZ: OSE:70:0 -HTTP Recived from PTZ: OSE:7A:10 -HTTP Recived from PTZ: ODE:0 -HTTP Recived from PTZ: OSJ:4E:0 -HTTP Recived from PTZ: OIS:0 -HTTP Recived from PTZ: axz557 -HTTP Recived from PTZ: axf64C -HTTP Recived from PTZ: axiFE9 -HTTP Recived from PTZ: OSD:4F:FC -HTTP Recived from PTZ: OIF:0x1C -HTTP Recived from PTZ: OSE:77:1 -HTTP Recived from PTZ: fAN0 -HTTP Recived from PTZ: fA20 -HTTP Recived from PTZ: OBR:0 -HTTP Recived from PTZ: tAE1 -HTTP Recived from PTZ: TLR:0 -HTTP Recived from PTZ: dA0 -HTTP Recived from PTZ: TLG:0 -HTTP Recived from PTZ: tAA000000000 -HTTP Recived from PTZ: OSJ:2E:0x0 -HTTP Recived from PTZ: OSI:32:0 -HTTP Recived from PTZ: OSI:33:1 -HTTP Recived from PTZ: OSI:16:1 -HTTP Recived from PTZ: OSI:1A:7 -HTTP Recived from PTZ: OSI:17:1 -HTTP Recived from PTZ: OSJ:2F:0x3C0 -HTTP Recived from PTZ: OSJ:30:0x21C -HTTP Recived from PTZ: OSJ:31:0x3C0 -HTTP Recived from PTZ: OSJ:32:0x21C -HTTP Recived from PTZ: OSJ:33:0x3C0 -HTTP Recived from PTZ: OSJ:34:0x21C -HTTP Recived from PTZ: iNS0 -HTTP Recived from PTZ: OSJ:2D:0 -HTTP Recived from PTZ: sWZ1 -HTTP Recived from PTZ: OAZ:0 -HTTP Recived from PTZ: lC10 -HTTP Recived from PTZ: lC20 -HTTP Recived from PTZ: lC30 -HTTP Recived from PTZ: lC40 -HTTP Recived from PTZ: OSJ:29:0 -HTTP Recived from PTZ: pST2 -HTTP Recived from PTZ: uPVS999 -HTTP Recived from PTZ: OSJ:A8:1 -HTTP Recived from PTZ: OSJ:AB:0x03 -HTTP Recived from PTZ: OSE:71:0 -HTTP Recived from PTZ: OSE:7C:0 -HTTP Recived from PTZ: OSJ:2A:0x0 -HTTP Recived from PTZ: OSJ:2B:0x1 -HTTP Recived from PTZ: OSJ:2C:0x0 -HTTP Recived from PTZ: OSJ:5B:0 -HTTP Recived from PTZ: OSE:7D:0 -HTTP Recived from PTZ: pRF0 -HTTP Recived from PTZ: pE000000000313 -HTTP Recived from PTZ: pE010000000000 -HTTP Recived from PTZ: pE020000000000 -HTTP Recived from PTZ: s0 -HTTP Recived from PTZ: OUS:0 -HTTP Recived from PTZ: OSJ:40:0: -HTTP Recived from PTZ: OER:0 -HTTP Recived from PTZ: OSI:46:0x00000000 -HTTP Recived from PTZ: rER00 -HTTP Recived from PTZ: aPC80007C00 -HTTP Recived from PTZ: OSJ:45:2 -HTTP Recived from PTZ: OSJ:46:00 -HTTP Recived from PTZ: OSI:30:1 -HTTP Recived from PTZ: OSJ:54:0 -HTTP Recived from PTZ: OSJ:55:0 -HTTP Recived from PTZ: OSJ:C1:0 -HTTP Recived from PTZ: OSJ:56:0 -HTTP Recived from PTZ: OSJ:1F:0 -HTTP Recived from PTZ: OSJ:57:0 -HTTP Recived from PTZ: OSJ:22:0 -HTTP Recived from PTZ: OSJ:58:0 -HTTP Recived from PTZ: OSJ:24:0 -HTTP Recived from PTZ: OSJ:59:0 -HTTP Recived from PTZ: OSJ:26:0 -HTTP Recived from PTZ: OSJ:5A:0 \ No newline at end of file From 94e115253fc05603b7706edf93b49afef0b2e695 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Fri, 27 Jan 2023 18:30:08 +0100 Subject: [PATCH 10/10] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 03ae422..f066e7d 100644 --- a/README.md +++ b/README.md @@ -75,3 +75,7 @@ For more information on the axis API, please refer to: - Fixed Tally follow variable option - cleaned up the subscription codebase Init_tcp() - Changed "Auto TCP" port, to be handled by node instead of an offset + +**V2.0 ** +Refactored for version 3 +added digest auth