Полезная информация

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№1687608-07-2023 22:53:37

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 115.0

Re: Custom Buttons

На немецком сайте обновили - Показать количество закладок в папках.
Изменения- количество закладок переместили в крайний правый ряд. Теперь можно эти цифры выделять различным цветом

скрытый текст

Выделить код

Код:

//------------- Показать количество закладок в папках ..........................................................................................................

(function() {

    if (!window.gBrowser)
        return;
    
    setTimeout(function() {
        setFunction();
    },50);

    function setFunction() {

        const css =`
            .countClass::after {
                content: attr(data-value); 
                color: green;
                padding-right: 7px;
            }
        `;

        const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);

        let bmbMenu = document.getElementById('bookmarks-menu-button');
        let bookMenu = document.getElementById('bookmarksMenu');
        let persToolBar = document.getElementById('PersonalToolbar');
        
        if(bmbMenu)
            bmbMenu.addEventListener('popupshowing', onPopupShowing ); 
        if(bookMenu)
            bookMenu.addEventListener('popupshowing', onPopupShowing ); 
        if(persToolBar)
            persToolBar.addEventListener('popupshowing', onPopupShowing ); 
    }
    
    function onPopupShowing(aEvent) {
        
        let popup = aEvent.originalTarget;

        for (let item of popup.children) {
            if (item.localName != 'menu' || item.id?.startsWith('history'))
                continue;
            setTimeout(() => {
              let itemPopup = item.menupopup;
              itemPopup.openPopup();
              itemPopup.hidePopup();
              let menuitemCount = 0;
              let menuCount = 0;
              for (let subitem of itemPopup.children) {
                if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) {
                  if (subitem.localName == 'menuitem') {
                    menuitemCount++;
                  } else if (subitem.localName == 'menu') {
                    menuCount++;
                  }
                }
              }
              
              let label = item.childNodes[3]; //[1]Anzeige links//label.menu-iconic-text
  
              label.classList.add('countClass');
// https://www.camp-firefox.de/forum/thema/136572-nur-die-anzeige-der-ordner-lesezeichenanzahl-in-einer-anderen-farbe-darstellen/?pageNo=7Die Funktion padStart füllt eine Zeichenkette zu Beginn auf. Der erste Parameter gibt die Anzahl der Stellen an, die du haben möchest, der zweite Parameter ist das, womit du auffüllen möchtest, bis diese Anzahl erreicht ist.
              let strCountOut = String(menuCount).padStart(2,'0') + "/" + String(menuitemCount).padStart(2,'0'); 
              label.setAttribute('data-value', strCountOut);

            }, 100);
        }
    }
    
})();

Отсутствует

 

№1687712-07-2023 05:04:30

brake
Участник
 
Группа: Members
Зарегистрирован: 05-05-2022
Сообщений: 14
UA: Firefox 116.0

Re: Custom Buttons

Dummy,Антиподписячий код not works in FF 117 nightly
log show that cannot import resource://gre/modules/WebRequestCommon.jsm

Отсутствует

 

№1687812-07-2023 12:55:57

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 78.0

Re: Custom Buttons

brake пишет

Dummy,Антиподписячий код not works in FF 117 nightly

Not confirm.
Tested on Nightly 117 (appBuildID: 20230711213659).


I replace false with an empty string "", restart,
and Browser console show me AppConstants.MOZ_REQUIRE_SIGNING
as empty string, not as false.


log show that cannot import resource://gre/modules/WebRequestCommon.jsm

It's impossible.
WebRequestCommon.jsm imports only if "permitCPOWsInScope" in Cu is true.
But this property has been removed in Firefox 77.

Отсутствует

 

№1687912-07-2023 16:06:50

brake
Участник
 
Группа: Members
Зарегистрирован: 05-05-2022
Сообщений: 14
UA: Firefox 116.0

Re: Custom Buttons

Dumby пишет
brake пишет

Dummy,Антиподписячий код not works in FF 117 nightly

Not confirm.
Tested on Nightly 117 (appBuildID: 20230711213659).


I replace false with an empty string "", restart,
and Browser console show me AppConstants.MOZ_REQUIRE_SIGNING
as empty string, not as false.


log show that cannot import resource://gre/modules/WebRequestCommon.jsm

It's impossible.
WebRequestCommon.jsm imports only if "permitCPOWsInScope" in Cu is true.
But this property has been removed in Firefox 77.


Sorry, it was my fault, TWP addon translate webpage broke the code.

Отсутствует

 

№1688013-07-2023 18:00:20

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 261
UA: Firefox 102.0

Re: Custom Buttons

Где взять версию СВ 0.0.7.0.0.26 paxmode?

Отсутствует

 

№1688113-07-2023 18:07:04

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 595
UA: Firefox 114.0

Re: Custom Buttons

toxa пишет

Где взять версию СВ 0.0.7.0.0.26 paxmode?

https://disk.yandex.ru/d/-BaJJ8GBeYEFNg


«The Truth Is Out There»

Отсутствует

 

№1688213-07-2023 18:32:34

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 261
UA: Firefox 102.0

Re: Custom Buttons

Благодарю, unter_officer
:beer:

Отсутствует

 

№1688315-07-2023 07:18:26

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: Custom Buttons

Andrey_Krropotkin
Его можно приспособить к ucf? Он работает в боковой или в панели закладок? (Ох, как же долго добавляются комментарий, у меня одного так?)

Отредактировано b0ttle (15-07-2023 07:19:41)

Отсутствует

 

№1688415-07-2023 08:40:19

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 115.0

Re: Custom Buttons

b0ttle обыкновенный скрипт вместо CSS, конечно можно, посмотрите  в той ветке, там примеров много, а я не силен в этом
там еще один вариант сделали, добавили иконки перед счетчиками

скрытый текст

Выделить код

Код:

(function() {

    if (!window.gBrowser) return;
    
    setTimeout(function() {
        setFunction();
    },50);

    function setFunction() {

        const css =`
            .countClass1::before {
                content: "";
                background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAABoElEQVQ4T42SS0sCURTH77plyz5AX6WGHlhYBC5qHbQIgiCIICJaRLQJgiINpJDCcjLMCHtJ2SY3UmQPoyISc0bzMZMGt3vO3HmZgQf+3DvD+f3u3MMQqNSl6zh14aINhfUiZK3k2QD9UU7tKUcw1WLYFujlmFm6oFoKaSkGMZVCgFbyfvqd26aq7MO1riBx1G8K/oHVrJeq0iaFXo6ZFT/o0wT1YAYBrGQ8uEIvx8y6DjlRgCCH8VQLXE6v4gq9J1vdzRzVKib2GgLjkzkMYPF9CZO9HUVBTOyRGTPEcUKifgdOHGELVHidp/nnWZpPTeM+HR9EgSKL9NzvUDhOSMTXxe4e1qC3RWz+epkzYPlhEve6oPSxTIHhuCZQpV0GL9jA3OMUle8nqJQcx2ddAD02QdjbgXeuPVWHpbsxlFkFwHCckP11ASdsnMpgHYTBfd6MoMwqAIbjmgAGZ/1kK5xJDOM7XZB9mqFBj1DgOCE7K204QNvda64A0QWBNUE+3Oh0cpwQ0S1EQdJI9tztV39+JFbworXBtLBAfxMhhPwCpRF9VGzn5xwAAAAASUVORK5CYII="); 
                background-repeat: no-repeat;
                background-size: 16px;  /* icon size */
                background-position: center;
                margin-left: 16px !important;    /* Abstand links minimum für schmale Popus  CHANGE  */ 
                margin-right: 4px !important;    /* Abstand bis zum "Wert" der Ordner CHANGE  */ 
                height: 16px;
                width: 16px;
                /*fill: #c0c0c0;*/
                fill-opacity: 1;
            }
                                  /* Default FX left margin ist 16px !! -->  CHANGE  */ 
            .countClass1 label {
                margin-inline: 0px !important;
           }

                              /* Ordner container Inhalt zentriert -->  CHANGE  */ 

            hbox.menu-accel-container.countClass1 {
                align-items: center !important;
            }

            .countClass1::after {
                content: attr(data-value1) !important;
                font-family:  Consolas, "Lucida Console", "Courier New", monospace !important;
                font-size: 12px !important;
                font-weight: 900 !important;
                color: green !important;                     /*  TEST  */  
               /*  background-color: lightblue;           TEST  */
                height: 12px;                                 /* height = font size Text zentriert CHANGE  */
            }


            .countClass2::before {
                content: "";
                background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAAChElEQVQ4T5WSa0jTYRjF3w2FLuLUjCnMy5bWzKKgPiTUpyi/BUFhBFF20bnNEvvg0iya3QT/Ni/zMm0lZmpNTbc0dF4JSZ12IQQ1AjNKM01ScpF6etQXYkhhPzg8z3vec174w5/9i6bCrXqrQXGeH/+PvAtixexomfPrgGE8O45JuL16Ws0RJszWAtNPYDOEpXJ7dRjjxbJv/alTmDABk6X41HVxxBDL1vPrv5OjYe7GeDfZc/PuBxhNB4bTSDQ/ZqMxSykYtSJptpqJeXwZ2y3/hL6yiJp3dZG9Yx1RIzMvz81gMAEY0JISSTpg8CoWBm5gukf3/XNzzPCg5XC34+5eS/WVDdGs3SC34lU00H8KeHMMeB0F9B0Beo+SaHccB3pOkE7THgt0q2iPB1rOoEEvNbPMWBZkvym1z7UdAjoPAm17gNZdQPMOoGkb8CwcqCdZtwN1O4Gn++CsioQ1RWLhH8GYoGJBjWnejXM2KtaHUWgLYFNSiWYtqToUeLwJqFDgZ4lyoe6SR7kQx3x5fZkMFZO1pEnsqKFi9WagimSh4iNSBZUfKjBfIl+wJa+rzIhjPrzmSpVujR4VIUA5FRZVpgBKSSVy4F4w5k2BKE10O8vjK+m45lm5VLgfzEVFM82iAKCAlBeABt1agcdX8va6twPFgUAxFQvlGBf8fkwKfk4Y6ZxLvsEfL5I9GnjclSwN8x27vfELTGGYEEKc9iTPtlwNO5mvFanak7y6ptJDfsEQiveXJUOZaubOa3/I17LwD3rpeGeKr6NAI4oR1Ey66GdpmZh2WZFGlNir8+kfSvIapj926c6FHC3zMWrYAXo9mFsuLD50R82UlNlPWY9ll7HfciF/3F34yfwAAAAASUVORK5CYII=");        /*  TEST  */
                /*background-image: url("chrome://browser/skin/bookmark-hollow.svg");*/
                background-repeat: no-repeat;
                background-size: 16px;  /* icon size */
                background-position: center;
                margin-right: 4px !important;   /* Abstand bis zum "Wert" der Links */
                margin-left: 4px !important;   /* Abstand bis zum Icon der (Links) ORDNER  CHANGE */
                height: 16px;
                width: 16px;
                /*fill: #c0c0c0;*/         /*  TEST  */
                fill-opacity: 1;
            }

            .countClass2::after {
                content: attr(data-value2);
                font-family:  Consolas, "Lucida Console", "Courier New", monospace !important;
                font-size: 12px !important;
                font-weight: 900 !important; 
                color: red !important;                     /*  TEST  */
                /*margin-right: -6px !important;*/  /* Abstand zum Pfeil rechts CHANGE */
                /* background-color: lightblue;          TEST  */
                height: 12px;                                 /* height = font size Text zentriert CHANGE  */
            }


            .countClass2 image {
                order: 1;                       /* Pfeil hinter dem "Wert" der Links */
            }
        `;

        const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);

        let bmbMenu = document.getElementById('bookmarks-menu-button');
        let bookMenu = document.getElementById('bookmarksMenu');
        let persToolBar = document.getElementById('PersonalToolbar');
        
        if(bmbMenu)
            bmbMenu.addEventListener('popupshowing', onPopupShowing ); 
        if(bookMenu)
            bookMenu.addEventListener('popupshowing', onPopupShowing ); 
        if(persToolBar)
            persToolBar.addEventListener('popupshowing', onPopupShowing ); 
    }
    
    function onPopupShowing(aEvent) {
        
        let popup = aEvent.originalTarget;

        for (let item of popup.children) {
            if (item.localName != 'menu' || item.id?.startsWith('history')) {
                continue;
            }    
            setTimeout(() => {
              let itemPopup = item.menupopup;
              itemPopup.hidden = true;
              itemPopup.collapsed = true;
              itemPopup.openPopup();
              itemPopup.hidePopup();
              let menuitemCount = 0;
              let menuCount = 0;
              for (let subitem of itemPopup.children) {
                if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) {
                  if (subitem.localName == 'menuitem') {
                    menuitemCount++;
                  } else if (subitem.localName == 'menu') {
                    menuCount++;
                  }
                }
              }
              itemPopup.hidden = false;
              itemPopup.collapsed = false;
              //item.style.color = '#c0c0c0';
              
              let label1 = item.childNodes[3];
  
              label1.classList.add('countClass1');
              let strCountOut1 = String(menuCount).padEnd(2, '\xa0');  //  TEST CHANGE?
              //let strCountOut1 = String(menuCount).padEnd(2) + '\xa0';     // padEnd2 => zwei Stellen, plus Abstand 
              label1.setAttribute('data-value1', strCountOut1);

              let label2 = item.childNodes[4];
  
              label2.classList.add('countClass2');
              let strCountOut2 = String(menuitemCount).padEnd(3, '\xa0');  // padEnd3 => drei Stellen, Abstand bei nur einer Ziffer    
              label2.setAttribute('data-value2', strCountOut2);

            }, 100);
        }
    }    
})();

Отредактировано Andrey_Krropotkin (15-07-2023 08:43:34)

Отсутствует

 

№1688515-07-2023 21:11:00

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: Custom Buttons

Andrey_Krropotkin, а в какую секцию добавляли в файле CustomStylesScripts.jsm? Просто, пару раз пробовал, что-то никак. Ничего не происходит. Был на их сайте, пробовал оттуда два скрипта, никакой реакций.

Добавлено 15-07-2023 21:30:49
Заработал, работает только в одном меню, и с первого раза как-то непривычно. Наверно из-за темной темы, можно и под себя настроить, но все же, посмотрел, как-то не особо нужная вещь в моем случае. Все равно, спасибо.

Отредактировано b0ttle (15-07-2023 21:35:27)

Отсутствует

 

№1688616-07-2023 14:16:58

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Chrome 102.0

Re: Custom Buttons

Dumby
Подскажите, нет ли нечто подобного , типа Dom inspectora для Хрома ? Тамошняя шняга на панели не наводится.

Отсутствует

 

№1688716-07-2023 17:54:09

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 78.0

Re: Custom Buttons

ВВП пишет

Подскажите, нет ли нечто подобного , типа Dom inspectora для Хрома ?

Не могу подсказать.
У меня нет никакого Хрома, и я абсолютно ничего о нём не знаю.

Отсутствует

 

№1688816-07-2023 20:56:22

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Chrome 102.0

Re: Custom Buttons

Dumby


Посмотрите , что тут нагородил, проще можно ? Ссылку открыть и т.д

скрытый текст

Выделить код

Код:

/*Initialization Code*/

var sysPlayerName = "CentBrowser ";
	var path = "D:\\CentBrowser 5.0\\X-Cent.exe";
	

	self.image = "moz-icon://file://" + path;



var popup = document.getElementById("contentAreaContextMenu");
	addEventListener("popupshowing", {
	
	
	handleEvent() {
			if (this.hidden) return;
			var menuitem = document.createXULElement("menuitem");
			
           
			for(var args of Object.entries({
				image: self.image,
				oncommand: "play()",
				class: "menuitem-iconic",
				label: "Открыть в " + sysPlayerName
			}))
			 
				menuitem.setAttribute(...args);
			menuitem.play = () => play(gContextMenu.linkURL || gContextMenu.mediaURL);
			document.getElementById("context-savelink").before(menuitem);
			addDestructor(() => menuitem.remove());
			this.handleEvent = e => {
				if (e.target == popup) menuitem.hidden = this.hidden;
			}
		}
	}, false, popup || 1);
	





this._handleClick = () => {



 play(gBrowser.currentURI.spec, "");


	


       

             
};
function play(link, param) {
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   file.initWithPath(path);
   process.init(file);
 CustomizableUI.setToolbarVisibility("PersonalToolbar", document.querySelector("#PersonalToolbar").closed);
gBrowser.selectedBrowser.browsingContext.mediaController.stop();
  process.run(false, [link], 1);
  
};



this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };

Отредактировано ВВП (17-07-2023 14:46:59)

Отсутствует

 

№1688919-07-2023 12:23:12

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Firefox 100.0

Re: Custom Buttons

Приветствую. Может есть готовая кнопка поиска для FF 100? Нужно искать по клику на неё текст из буфера без появления панели поиска.
И ещё нужна кнопка "Открыть URL" для FF 100.

Отредактировано manuk (19-07-2023 17:41:23)

Отсутствует

 

№1689020-07-2023 20:41:27

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 34
UA: Firefox 52.0

Re: Custom Buttons

Приветствую.
Мои: FF52 ESR x64/Win10

Имеется функция

скрытый текст

Выделить код

Код:

function getXYP() {
        var url=gContextMenu.linkURL;
        var url=decodeURIComponent(url);
        var url=url.substring(8).replace(new RegExp("/",'g'),"\\");
        var pathway="C:\\Program Files (x86)\\XYplorer\\XYplorer.exe";
        startProcess(pathway,[url]);
        gClipboard.write(url);
    function startProcess(path, args) {
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
     file.initWithPath(path);
     var process = Components.classes["@mozilla.org/process/util;1"]
    .createInstance(Components.interfaces.nsIProcess);
     process.init(file);
     process.runw(false, args, args.length);
};  }


которая позволяет по url (вида - file:///D:/tmp/test/myFile.rar), переданному через меню ПКМ, открыть в файл-менеджере XYplorer папку с этим файлом, а его самого, в смысле файл, выделить (select).

Подобную вещь можно проделать в Javascripte с Проводником, используя аргумент /select приданный Explorer как одна из опций при его открытии:
var WshShell = WScript.CreateObject('WScript.Shell');
WshShell.Run('explorer /select, D:\\tmp\\test\\myFile.rar');
В этом коде путь не заменяется переменными!

Моя просьба, если возможно помочь скрестить эти коды.
Мне хотелось бы преобразовать getXYP() в getWE(), напр., так чтобы она проделывала то же самое в Проводнике (открывала папку с файлом по его url, а его самого выделяла).

Отсутствует

 

№1689121-07-2023 09:46:03

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 78.0

Re: Custom Buttons

ВВП пишет

Посмотрите , что тут нагородил, проще можно ?

Проще? Как по мне, так там наоборот, недостаточно.
Часть кода скрытия пункта потерялась.
И таблетка от двоящихся сепараторов отсутствует.

скрытый текст

Выделить код

Код:

var appName = "CentBrowser";
var appPath = "D:\\CentBrowser 5.0\\X-Cent.exe";

self.image = "moz-icon://file://" + appPath;
var popup = document.getElementById("contentAreaContextMenu");

addEventListener("popupshowing", {
	get url() {
		return gContextMenu.linkURL || gContextMenu.mediaURL;
	},
	handleEvent() {
		var {url} = this;
		if (!url) return;

		var menuitem = document.createXULElement("menuitem");
		menuitem.url = url;

		for(var args of Object.entries({
			image: self.image,
			class: "menuitem-iconic",
			oncommand: "run(this.url)",
			label: "Открыть в " + appName
		}))
			menuitem.setAttribute(...args);

		menuitem.run = self._handleClick;
		document.getElementById("context-savelink").before(menuitem);
		addDestructor(() => menuitem.remove());

		menuitem.render = () => menuitem.hidden = true;

		this.handleEvent = e => {
			if (e.target == popup)
				menuitem.hidden = !(menuitem.url = this.url);
		}
	}
}, false, popup || 1);
	
this._handleClick = (link = gBrowser.currentURI.spec) => {

	var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
	file.initWithPath(appPath);

	(run = link => {
		CustomizableUI.setToolbarVisibility("PersonalToolbar", false);
		gBrowser.selectedBrowser.browsingContext.mediaController.stop();

		var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
		process.init(file);
		process.runw(false, [link], 1);
	})(link); 
}

manuk пишет

Нужно искать по клику на неё текст из буфера без появления панели поиска.

Может так сойдёт

скрытый текст

Выделить код

Код:

(ts => {
	var find = async e => {
		var searchString = (await navigator.clipboard.readText())?.slice(0, 150);
		if (!searchString) return;

		var findPrevious = e.button > 0 || e.ctrlKey || e.shiftKey;

		var {finder} = gBrowser.selectedBrowser;
		var next = finder.searchString == searchString;

		var bar = gBrowser.selectedTab._findBar;
		if (bar) {
			ts = Cu.now();
			if (!bar.hasOwnProperty("open")) bar.open = mode =>
				Cu.now() - ts > 500 && delete bar.open && bar.open(mode);

			if (!next) return bar._findField.setUserInput(searchString);
		}
		next
			? finder.findAgain(searchString, findPrevious)
			: finder.fastFind(searchString);
	}
	this.onclick = e => e.button > 1 || find(e);
})();

И ещё нужна кнопка "Открыть URL"

Создаёшь новую кнопку, открываешь на редактирование,
в поле «Имя» вводишь «Открыть URL», жмёшь «OK».
Всё, готово. Нужна была «кнопка "Открыть URL"» — теперь она есть.


ruslaw пишет

var WshShell = WScript.CreateObject('WScript.Shell');
WshShell.Run('explorer /select, D:\\tmp\\test\\myFile.rar');
В этом коде путь не заменяется переменными!

Интересно, что бы это значило, «путь не заменяется переменными» :/.

/select,

О, полезный ключ и пример синтаксиса.
В том смысле, что это работает с папками,
чего, вроде, нельзя сделать из лисьего кода напрямую.


А вот с файлами, как раз, никогда проблем не было,
именно так и работает nsIFile.reveal()

скрытый текст

Выделить код

Код:

function getWE() {
	gContextMenu.linkURI.QueryInterface(Ci.nsIFileURL).file.reveal();
}

Отсутствует

 

№1689221-07-2023 12:31:02

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Firefox 100.0

Re: Custom Buttons

Dumby,

Dumby пишет

Может так сойдёт

отлично подойдёт. За кнопку "Открыть URL" отдельная благодарность. Оценил юмор. А что в неё добавить, для перехода по указанному в ней URL?

Отсутствует

 

№1689321-07-2023 12:55:15

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 595
UA: Firefox 115.0

Re: Custom Buttons

Dumby пишет

Может так сойдёт

скрытый текст

Выделить код

Код:

(ts => {
	var find = async e => {
		var searchString = (await navigator.clipboard.readText())?.slice(0, 150);
		if (!searchString) return;

		var findPrevious = e.button > 0 || e.ctrlKey || e.shiftKey;

		var {finder} = gBrowser.selectedBrowser;
		var next = finder.searchString == searchString;

		var bar = gBrowser.selectedTab._findBar;
		if (bar) {
			ts = Cu.now();
			if (!bar.hasOwnProperty("open")) bar.open = mode =>
				Cu.now() - ts > 500 && delete bar.open && bar.open(mode);

			if (!next) return bar._findField.setUserInput(searchString);
		}
		next
			? finder.findAgain(searchString, findPrevious)
			: finder.fastFind(searchString);
	}
	this.onclick = e => e.button > 1 || find(e);
})();

Dumby, а можно тоже самое, только для UCF?
И с добавлением хоткея, например Ctrl + F3.

Отредактировано unter_officer (21-07-2023 12:57:35)


«The Truth Is Out There»

Отсутствует

 

№1689421-07-2023 16:59:52

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Chrome 115.0

Re: Custom Buttons

Dumby
Да,так культурнее.

Отсутствует

 

№1689522-07-2023 11:02:25

Kot DaVinci
Участник
 
Группа: Members
Зарегистрирован: 11-10-2020
Сообщений: 18
UA: Firefox 115.0

Re: Custom Buttons

manuk пишет

А что в неё добавить, для перехода по указанному в ней URL?

ЛКМ - открыть в новой активной вкладке, колёсико - в фоновой.

скрытый текст

Выделить код

Код:

/*Initialization Code*/
// Настройка функций кликов мыши для кнопки
this.onclick =e=> {
	// действие при клике ЛКМ ....
	if ( e.button == 0 ) gBrowser.selectedTab = gBrowser.addTrustedTab("https://yandex.ru/images/search?text=Firefox");
	// действие при клике Колёсиком ....
	if ( e.button == 1 ) gBrowser.Tab = gBrowser.addTrustedTab("https://yandex.ru/images/search?text=Firefox");
};

// Подсказка для кнопки ..............
this.onmouseover =()=> {
	this.tooltipText = "Яндекс Картинки";  
};

Отсутствует

 

№1689622-07-2023 11:49:18

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 34
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

Интересно, что бы это значило, «путь не заменяется переменными»

Я имел в виду, что невозможно использовать такую запись:
path = "D:\\tmp\\test\\myFile.rar";
WshShell.Run('explorer /select, path');

Синтаксис действительно интересный, там еще есть ключи:
напр.: http://smallvoid.com/article/windows-explorer.html

Большое спасибо за код, отлично пошел.

Отсутствует

 

№1689722-07-2023 13:46:45

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Firefox 100.0

Re: Custom Buttons

Kot DaVinci, спасибо!

Отсутствует

 

№1689823-07-2023 00:32:31

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 78.0

Re: Custom Buttons

unter_officer пишет

Dumby, а можно тоже самое, только для UCF?
И с добавлением хоткея, например Ctrl + F3.

скрытый текст

Выделить код

Код:

(async (topic, self) => ({
	id: "806127",
	label: "■■■■■■■■■",
	tooltiptext: "tooltiptext",

	localized: false,
	onCreated(btn) {
		btn.onclick = this.click;
		btn.image = "chrome://devtools/skin/images/tool-application.svg";
	},
	click(e) {
		e.button > 1 || self.find(e, e.button > 0 || e.ctrlKey || e.shiftKey);
	},
	handleEvent(e) {
		e.ctrlKey && e.code == "F3" && !e.altKey && !e.repeat && this.find(e, e.shiftKey);
	},
	init() {
		this.sym = Symbol();
		this.args = ["keydown", this, true];
		Services.obs.addObserver(self = this, topic);
		Services.obs.addObserver(function quit(s, t) {
			Services.obs.removeObserver(quit, t);
			Services.obs.removeObserver(self, topic);
		}, "quit-application-granted");
		CustomizableUI.createWidget(this);
	},
	observe(win) {
		win.addEventListener(...this.args);
		var ucf = win.ucf_custom_script_win;
		ucf.unloadlisteners.push(this.sym);
		ucf[this.sym] = {destructor: () => win.removeEventListener(...this.args)};
	},
	maybeOpen(mode) {
		Cu.now() - self.ts > 500 && delete this.open && this.open(mode);
	},
	async find(e, findPrevious) {
		var win = e.view.windowRoot.ownerGlobal;
		var searchString = (await win.navigator.clipboard.readText())?.slice(0, 150);
		if (!searchString) return;

		var gb = win.gBrowser, {finder} = gb.selectedBrowser;
		var next = finder.searchString == searchString;

		var bar = gb.selectedTab._findBar;
		if (bar) {
			this.ts = Cu.now();
			if (!bar.hasOwnProperty("open")) bar.open = this.maybeOpen;

			if (!next) return bar._findField.setUserInput(searchString);
		}
		next
			? finder.findAgain(searchString, findPrevious)
			: finder.fastFind(searchString);
	}
}).init())("browser-delayed-startup-finished");

ruslaw пишет

Я имел в виду, что невозможно использовать такую запись:
path = "D:\\tmp\\test\\myFile.rar";
WshShell.Run('explorer /select, path');

Мне кажется, что использовать такую запись невозможно
не только в JavaScript, а вообще ни в каком языке.


Вот так работает, проверил.

скрытый текст

Выделить код

Код:

var path = "C:\\Windows\\notepad.exe";

var WshShell = WScript.CreateObject('WScript.Shell');
WshShell.Run('explorer /select, ' + path);

Отсутствует

 

№1689923-07-2023 01:27:15

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 595
UA: Firefox 115.0

Re: Custom Buttons

Dumby пишет

скрытый текст

Выделить код

Код:

(async (topic, self) => ({
	id: "806127",
	label: "■■■■■■■■■",
	tooltiptext: "tooltiptext",

	localized: false,
	onCreated(btn) {
		btn.onclick = this.click;
		btn.image = "chrome://devtools/skin/images/tool-application.svg";
	},
	click(e) {
		e.button > 1 || self.find(e, e.button > 0 || e.ctrlKey || e.shiftKey);
	},
	handleEvent(e) {
		e.ctrlKey && e.code == "F3" && !e.altKey && !e.repeat && this.find(e, e.shiftKey);
	},
	init() {
		this.sym = Symbol();
		this.args = ["keydown", this, true];
		Services.obs.addObserver(self = this, topic);
		Services.obs.addObserver(function quit(s, t) {
			Services.obs.removeObserver(quit, t);
			Services.obs.removeObserver(self, topic);
		}, "quit-application-granted");
		CustomizableUI.createWidget(this);
	},
	observe(win) {
		win.addEventListener(...this.args);
		var ucf = win.ucf_custom_script_win;
		ucf.unloadlisteners.push(this.sym);
		ucf[this.sym] = {destructor: () => win.removeEventListener(...this.args)};
	},
	maybeOpen(mode) {
		Cu.now() - self.ts > 500 && delete this.open && this.open(mode);
	},
	async find(e, findPrevious) {
		var win = e.view.windowRoot.ownerGlobal;
		var searchString = (await win.navigator.clipboard.readText())?.slice(0, 150);
		if (!searchString) return;

		var gb = win.gBrowser, {finder} = gb.selectedBrowser;
		var next = finder.searchString == searchString;

		var bar = gb.selectedTab._findBar;
		if (bar) {
			this.ts = Cu.now();
			if (!bar.hasOwnProperty("open")) bar.open = this.maybeOpen;

			if (!next) return bar._findField.setUserInput(searchString);
		}
		next
			? finder.findAgain(searchString, findPrevious)
			: finder.fastFind(searchString);
	}
}).init())("browser-delayed-startup-finished");

Dumby, большое спасибо. :beer:


«The Truth Is Out There»

Отсутствует

 

№1690023-07-2023 15:04:19

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 106.0

Re: Custom Buttons

Dumby
Это окно виндовское никак не раскрасить ?(w10)

скрытый текст

Выделить код

Код:

data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAhMAAACwCAIAAAA61nsaAAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3dd3wUZf4H8M8zsy3ZbHpIoSUuWRABDUQsAaUoFwQRNeLBYcQD5GieKMgvip4HnCCCiBRFiQpWED3kRGKUohD1EIwUQTYEQiCkt91ks23m+f0xsIYkhCymEO/7flmS2ZlnvjPPZL87T5llMTExIIQQQppMaOsACCGEtDOUOQghhHiHMgchhBDvUOYghBDiHZXyP1EU2zYOQgghVydJkuosUXl+ysrKat1gCCGEXO1iY2PrL6TWKkIIId6hzEEIIcQ7lDkIIYR4hzIHIYQQ71DmIIQQ4h3KHIQQQrxDmYMQQoh3KHMQQgjxDmUOQggh3qHMQQghxDuUOQghhHinqZljzm6wWoYzhpzU2q/WWaJIzQFjw7F7jme1OYwBu+usxubsZozlpA6vva/U4QzIaTAYZX1PsR67AcbmNLiLloiwtga3amS/hBDSEhhjBw4cuNSrBw4cYIz9/r14cc8xG+B8F+ecc542e9fwmEnN8oY4ZzewdHD95ZPSgN2r6y9PzQGWvthgUdt2IzFx6VIkYve23x9Y4xEmAvzUOn7BS5wDg5pxp4QQcgX2798fHx/fYPI4cOBAfHz8/v37f/9errC1atdLg9IwO2fH5t+5+xxg6Yups2cDmF17eSKAxMTd25bW32TzjpzExDRllfpFvZaUiNlzU19ceqn7leaKkBBCrkL9+vVrMHl40ka/fv1+/17auJ9jampOYtqkEdPX1X9pdlLSi0tR57ZmN5A2aXVSUiLQq876O3KQmLY5emjS7BGDNqcBOTtaOsKm6BGN+kmOEEJaTv3k0bxpA1ecObJzAByJNtZ9+/ZKag7SJk19bV0ioifWf3XEUNS/rdm2G7Ox1Dhxbv31N+/ISUpMQ/TQ6YOQlrju998PXTZCQgi5OtVOHs2eNnBlmSMHmDQ1ddfsNAx66ffse9Lq3bORFt1QGgAwCEhcN331pDRPz3MOsPTF1BGzUb9HYTeQNmn10KREIDoaSEwaWnvDFoqQEEKuWp7k0expA15ljqUAY4MZYzGMJaZNGnRxA04awGIm1RlxNCmGAWkNlqZ0O7+0a3YjHctJQ6Nrd3cr7VGDGmo42rYbiVgaPTSpwQ1bIsI6pe2e0wzDFQghpF24wrFVSac4i9lc++2yzlgjxbpTvMFW/hxg6Yupu2aj8buWidGo3d09afXuubPTGmw4Wrptd1IiED1U+XVoNJCYVKeDvXkjrFPaoJf4pY6iF4BoYyOHSQghzc7TSNXIaKsrdoX9HBOjkbjutfo92E2kdDs3ePdQx7rpgzanJSJnhzIYd9CIBgY47QawdNukNDAWo9wBxDCGtElXHJ5XERJCyNWmdt/GpUZb/R5XPraqlzH6yjb0qtt5aDTSEpN2r560eUfOusQ0DJpef50XU3NmY6nnfshzM5GGxCvrJ2/GjvGJ0XiJb6epHoSQVlO/S7zZk8eVZ44j2TlX1g4zafW2pnc7RwOz5058cSnSNk9VOsDrrJADpG3eUb/bXGmw2rE57QomdngVISGEXD0uNZKqeZPHFWaOObuRNilm+rpEbz9NLwWwdGnjHeN1jBiENMyendbwW/mOHCBtc/1WrGhg9tyJVzCx4woibITynJL6D0ohhJCW0MhIKk/y+P17uZKxVYyxpYMZ3zU7euL2K9jlZTvG6xgEJK6b3uBgXFwYOItBI+q/pKSc3asntUSE9UdqUXoghLQ5znkjA3D79evH+SWH8zQdi4mJASCKYlZW1u8vjhBCyB9JbGysJEl1FtJT1gkhhHiHMgchhBDvUOYghBDiHcochBBCvEOZgxBCiHcocxBCCPEOZQ5CCCHeocxBCCHEO5Q5CCGEeIcyByGEEO9Q5iCEEOIdlecno5G+t44QQshFBKGBGwy65yCEEOIdyhyEEEK8Q5mDEEKIdyhzEEII8Q5lDkIIId6hzEEIIcQ7lDkIIYR4R3X5VVoGY6z+wmb5anVCCCEtqrUzhyiKnHNZlhtMEowxQRAu9SohhJCrQetlDiUlSJIEAIwZDAYfH19RFAFwzu01NbaaGqfDrqwgCALnnPIHIYRchVo8cyitUsp9hkari+/Xt3evnjHRXaO7dgkP76DX6xlj4CgrLy8qLj558tTBQ0d+3P/TmTO5yuZKvmnpIAkhhDQdi4mJASCKYku8QTPGlPuGkNCwe0eNvOXmeENQWKlNPJhVdLLQkV/ucLrAGARRDA3QXNNBfdN1nXteE8odll+O/LLu7XczM38CJQ9CCGk7giCcbyuqpQUzh5I2tDqfUXePfOC+UUVWKeNXy87Mkjyrj0rjL7s5BwcADiaAgwuiIMnOIG3N4D4howZED+gVlf71ziVLXz57JteTgQghhLSmVs0coihKktSlS/TM6VM6dolZ/1X2N7/yCofeoPcX4WYCZxyCwHBhgBXn4Bwy55yJVptDjaqEnj5PjunTKUj9r0VLtm7d2oyxEUIIaaIGM4cYFBSECz3SzbUnxpgsy/36xT/3zFPnLHju/ZMH84NVmkA/HzWDmzGAwS3zGofkcMlOl+xwyrLMBYExBgbuqxHVGr/j+fKWvdkq2OdOH69Ra3/8cX9zhUcIIaSJGmzyaf7Moeymb7/4OU/M3P5j/oo0q6Tp4qsRmSDLXAaYwyU5nFIHf3VcbMA1EdquYVpjlK+fr1hYVmN3yqIoAJzLsq9WxUS/XUcqjprNsyeNioyM+Oabb5slQkIIIU3UYOZo/rFVnPPefa6f88TMTbuzNx7Q+Ad0Ztwlc3CZMwa70x0f6/9IYnScKcjgoxIFBjAADpd8tsT2/lc5/96TL0FQiUyWOYM71OC/2+ycunzXiml3FhQUvvHGWurzIISQttWc9xzKANyQ0LD/m/34d79WvPOdEOAfDtnpKdjhdE8f1eWFv17Xo4vBVysKAlMJgkoUVKKg1ajCAnVD+0b0ucaw66eCGhdUAuMcMpf1WnV2CTuenT37kbtycs+cOnUSaGD+OSGEkGbXSq1V0/82RfSPWLq1VGfoJHAXZ+cfjeV0SdPu7vT3e6NrHG67w+WWZKfLLXOu/KBM+JA5YqL8e3TWp/+YL8lKJmIc3Fer+7VAUvOK5FG37dj9ja26ullCJYQQ0riWba1SSr/xxv59+8U9veE413UVZKfEwRhnjNmd0p03BE76U2RJuU0UBcYY51KAn87ucALQ+/nYaySJc0EQXS73bTdEPnRHycrPTgcatJLEGZgkuQL1/uu/KezXLWT82LEvr1ghNHebVXbaIsSOacqaGeVIjn8BSG3GvRNCiGKcCdMWL4noOYypDQ4J+89WLHxls3nroraO6yLN9qxczrkgiGPH3Pvl/nMnKoK1AucAGOPg4FALPGlAqM1mdzodDodTltzV1fZXN2U+uuS7R1/6/oW3fiwqszLILpfT7Xa5nM7EG8OiQjQOt8wExhkHY4y73Cw49cvsm266KTo6hnPe4DMTr5gxMeWdKUmw/gzAuCnLeLGMF4xAeS5H8rz05PjhlDYIIS1hGDB/7Yov+ZBuYxcmDzfmpy9O6OqzZPEkmOa1dWgXaZ7MobyJ9+0b5xcQlH64RqPxY+dbvzjjzC3LnULUUQGw2R1Op8vlclbZ7HPXZr78WfGeLGlvlrzyi+JZazLziy2y5Ha7XFXVth5dDJFBKodTYgDnjHPIgK9aPJQnZp2runPo4JZ4qtWCrzNRYG5khTMVyPhwP9DYOoQQcsUGA6xL9+PlLmRuzjBj6ow3nUc/6q3FwOlD2zq0izTn93PcMfi2X/NdeZW+PmpRkmSlAUtgzO3m0eEaFXNBdoG7fNTynoOF32fLAf6GQD9dgF4dGeq/95j94EmLWpTtDofD6QSXDDrOGGMCEwQmiAJjgiBwp+yz7aeivjfc4OOrb8bICSHkanACkIrPDusVBjwEwAxUl+cBMAUZ2jq0izRPPwfnPDAwKDwi4j9HarjKwCUXAwPnDIyDCwKz2KQD2dXgkBkz6FTf/FKt0egYuCwr0wah99VqVMxut7tcMmOCyyU6nG7OIcmcc2U1CBwqUX2yRFVpk3t07/7zz5nNEvwVG2XCUwvmR1w/iqkNJQ5pxefmD556Ig7miU8m9R/5wK/66/dNeWnyslv8ut5mdQnr9uaumvQkcD7m+aNMo55aYIi4XmJqc4njiRWfmz94CoA5bZEQfS9TqwFYXTz9aMFT/7cG5g8ApIwyPfj4PEOX/mBqq4u/vy/3peTFQHrjPTQHs3B9aAaCEpRfX8goT02OR61+HeOmLKQkxgHPLpvQc+gktSHCIbHPzSVPPbHCZP5g+1dLcM399Ytd8n3lZHl1UMLTyq9ZQKJxU3YaPJFklKPXr7sCbhlcf9tPTiLio+EJT38ABClLNmUhJdHY+NlOGWUaPf2p0JhbuajNtboWv78v/aXkOussAsZkpwGxniUujtOlNTPf2mle+5iyZBjw5Lo5MbcmidpQh4Tt5pInn30Nme94NhllwvSnUmJuHS1qQ2ufZwBXcJbWju8bByxYNsE0fKqoDZUAT3XXifaFjPIH8uJjx2R7NleqBsCScaZh0xYbInpyps61ul7ZuG/rooWAecNEJDy933MaATgkHC6qeHD+Z0ifD2D/homeOqrN01fX4DW8CObLBpYdl1m7rr+Jf+Hp/bd7LjNPhTZ4nXvCdgL3rD9qnn+3p+SPZuLGx3+2cMPWXcf/sWEL9rxRO+w6lzoHSmtcb+08vfaxmXVi3pSFtxONr78+peuQaccc+pHTPsSeZxs/G3FIbbCalHWUbc9ZYcn7FUBHfxiietQ+0jnDkPTkutCYWyFqSxzSa9vN7zz5LJBZp5YbDKx2MKlA6s2Tai8RBJUTSDWfrR95G2qGew5BEABcExPtawg6eKraR6vhSvsVY5wxLkOrZodync99VPyPjcXzNxbPWZ//32xJoxbAmKgS1RpVtVNO7BvULVwot9S4XS7J7Swpq8rLt5YVlhWdLS7KKy7KK1R+qCwqOZ5dds7Ce/U04RJfD9U6JgILNqxbX5zQbdT0xcnDDfnp8+6/dtiiVwc+OjDSt2tIF2MHQT3ulfvTs4NPZaQbVNbHB3cd8/oqZdt1E5GwYMP09cXDu41KX5x8rSH/1Xn3Y9giACKQlicbkxYkDzc696+6//qIuYvnAZgJTJo//5h/gvGBVcnDje7MVX9N6Gp6biaA4YkpeemzALyQUe7pmCnPeMEJTP3k5H2JxpV/X8hLvwcwdXuekjYAPJuYwkt2L/++FCkpJmDthinCkKfHLvw2yditcMfc+68NWfDKvIEYeNI3YvisLUqBAIybsoYbjd+vTI4Odscnpx5elwRUp+chcfgsICUpMcX68+sAlnxfnhw/XA4tTlq+z2g0Zm0yesLbMjcpQpeVnDpwXVI8qg/nAcNnpV82bSwahocWv/rhme7GkZNTk4d3xS8LpyRg4tt1VksBZg1PRF56OWB8ISN5uPHQ+nndQmyL/z4CmAtgGPBK2qLKPlMefO7zJKPRvHnu6B6aDWvnwTRFKWEYsPjVRWe6PzRy8ofJw434JXVKQteJby8EcGVnCcDS5QONo+fN3m4xGod/MTfpWv+8p2beD4zxRFsNJK07nJocn5iC95OMcB4/6YRx6idK2tgwxTRy/nurfw4w3jVxVfLwCOvexZMShi16FUByKpTTmAUYjZumJBnz05fFR/qseTYZGA1gXHJq7vZZm7K4clUoFbHucHVyfBKQeqlruCmBea46pbRUpM4al8xztytXnVKhl7rOPWFrgKm3XwsMVE6+Cbh+2HOA4b+F+MfkN+qkjTqX+nCjcf285BDbob+P6Ia5i+vEnJJofGoMVDclVxQVSk6bsnnjZ+NS1aRsOzk59eR/5u4tcI4YMWLEiBEFe0cAmJWel5I4XLk+p7yS9nllH+ODz81NMmrMm+eN7jFlw1rA1JTAGjEGCDDe+E0Bx8IPLrtya2q21qouXTo5ZHVJlVoFWZbBwRkH41wZcyWKgk6r0em0yj8atUoURVEUJQkFxbYbo1V/G+YP2Wl3OO0Oh0rgP/5ScPJMlRoSJDeTJSZLkF2y0yk7qisrXbnFzogOHdr2C6DGLR+4s/q2N2c8D3PGmxnm/R/M0KJ8/J2xr75hMi9YBpSIetz6ryNzJt93R/KMA6sfZLCOuz0CmDcQuG3c8ud3Vme8OcMM84w3M8r3fxCrxcTxdwL42YIZU99G5jsZZvy66xWgwk+nAeALQKP5OdeBzFUZZhz9+hUNygd2iwRgBmwVDTzXqxpIP54P4JUM8w+p84Hym7uGASbl1RsH4pghetX8z4HMhbNMmoSpT234OXPz05nAkS83Q8oL1Ku6IeSLPJ1565O1izUD81/J6Fi2G5hoKcoEnBU2wLxV2aO7xgJg7ZmSiTBnWDpmrlpTJ6onN2cKp/8NdCvKBJwWG2DeWtH4qR4GPJCy4qvCbq9MWgBzxqIMsy1rnw84Qv3qr7zVDNjOF5hhxqIFH+L0nnAtMDoGwMznTO7Y0fM+Ppi5eUEmMPrpzeXfrUoIYTPnT1U2SVkxrLDbA5MWfGXOeCXDjKx9i8BtoX4+AK74LGm0ISUcW/dkAebHN2fi9P5OHQDEeaJ1AplFFmXD05lAdUl+NZB+HMAYIGHCUzvPhbw540WYM17JMH/29CStM2vuA7EYuByAchqVbb/OxL9nrIH1YFQoA3opYZzJ3ApcdIaLLE7l3vdS1zAw8bKBea46T2l2M1xum+eqa/w6L8pErtPCc3JujmYY87Cyi0dMOKe7GcgttwLYUr9ya1/qZmDBhxmn9yzSAqNjwuucTBPQPWnWbW+d6Tdg2D39+iif6xs/G41UE4BMYP/jm4HTF11sFTbAbAJGz3zuoDt2wbyPkbl5cyZWjX6alX83NSEEM+c3JbBG/HXRwKyAhL/982NgU+NrtrJmaK1S3r6DggLPFlkFjV6WZcYAzgBwcDAwJjLlWzjOf+sfc7u50+6osdnLy23jhoROGREou2qqnBAEQRAEpxPvp5+utDGDn0qSZAbG2Pm7C8a5TqfPL6m5zuSjVmskyf37478CA4HoG5Kiu4ijst+pvbxDEIBuys+evzEAm5eb+43Z36nDYEw0JZkhRt/wTnQXjMquvW23DkEA7h+Tovw6OcEUP+6xs7bAdz/7GsCLwIs97wOQFIcJE5/scceDQBBQ3sSA164197v3q1E9x8yfOA+pyQBufnjMB4dCYJ4PoPftY447Deblh5SVZ27BzC23n99yTMN/wMnjn6q/PGXBsHJcrzSdpAIYU7c1STF+/Nomhq24bzRYl/hdXxUqTUYAej/wIvDiZTdMMOGZKZN51yHfHrdhy6cDgZ6Dp2dBY37ptzEOGW+mjkwYP/T6LisxbzQWdom/76tChvRdyqsPvAi82Pv8Tq/0LA2cBmCLCXh4csLIsTPRtW/Tjz1pFtChf2ZGuefYU/ZgxOEvo/vFjv5L/y17Ll45Dg/OelYyXL/92+LLvtE05RpuOhMwds2UakvYb8EMbOw6B+AAjn1zoGd01Mz74lduAoDrpw48sMcZfU2TPs6agCmTE7oOeea4jW/59KLnEsUBKc8m7fUbjZX/avohDJy25bLV5G7osbDTB0LTc7A5CzC/pCxJBcZnvNllZMK8odcvXHnlgU0EgodOHr/iR6SnNP1AWkfzZA7OERQYWG5zCyofZfoeOOcMgKCkCoAJgiAIzOmSbZU2e3WN5HLV2N0PDu7w6PCAGls1Z4IoMDAhJEC3cefZ3YdsBoNOlmQBAhgEJoBxDg7ORIYKq1Ol1ur1eoulsk0eRmICYAhadaB6+Zg+TVl/E/DPwpygDuf/bqph6LPqAJZfsnNCaVQ9YcX817aa176mLIwDFq+eETX0kW+OOirWv3fLpIbflxu0B/jx45SEp+9c9MCNKakD55n24NZxK5/fD2A0oAnrZKkGkN/0Aut7e86wDzH2iTOP4Jbsy699QSyQnT0GGNPIuPWIXgCCt5SfbqiAhgUB2U8nANkAduXa3379LSD9dgARXeuseXQPRlbmhQV0wehOvbYAwRHlp1H/A+/vPEvzR5nu/b8F57TXL0/b96zzP4gd3UC0T9c6bxc+EnTsPhrQA87a6xfmbLum34xeEcGeKD2n0Q189kvZ2ldfv+wIwKZcw40EVqeofywf98+D13+QsBe47fy2pstf5+nzpZ73HRzY88aVmDUGyy3XPiwl7sDDIxqPHMDTCUHIzgaQa8frb+1C+m/tlkHA5qcTOBKOHLZctpw6Gq+miIewt6SBrbreDiCizsK8o3u6jKzsFBYAjFYupysI7O7nTPO+72Bem+jtgbSCZmut0mi1ksS4pORkzn9LFowxQRRFSeLlpdUl50qqyiq5y+Vw8pt6Bj40RF9RabU7nG6X0+5w+GiweXfeq5/ma7S+jEMQxPNlKEOrICj/dckih8DO76nNGqyiw/SeJtrLqrbkVwMosgDQAwOjwxpZOT45ddmUpKCcj95+8u4pb28ATMOA99MW8cGz7n9qx4z7bpWLXvU22jdT4cz6anisxjRr5uCpA7dnm7BpCQADALU2Mggwdfe2TI81U0wf+o9Nf/YRbzes3UB/qXHrGi0A9ZTOHZperKefY+eaeYPDC957eZppygYtALVGBGASPWu6AciyDcBRi7JC5w4AptQp8PecpQ1TTONefm/tyZg/9Rv7zjPJddKAJ1ql8f0FoxHlGZ6X1FoDAJVw0d+pJJkBFFfVeJZ4TuOxj5bd15Onvf+s0m12WY1fw40EVlvKgmH//HWAee20Ossve52vBIr2f9pbD9NzQ+6bia+KYoCVjazvofRzrJmXHF6w8+Vpg6dseM/TDFsO/GNJBgp2Jff2H/P6P5pSmuKy1RTe05R6uoF7DuX6FEV4YgAguwHIFhuAo1ccWHHnEel//7Lph9Cami1zMIAxQGDn0waYwMAYE1QiGLNaqksKSqsrKiFJKpXImeCv14wZ4Cs5rLYah8vltDscGhHvfHF2xb9LmeArCgxMFJRmKiYwUTw/PpcJEAS1WvD0jbdJJ3kpAIctvjMw5i+1l69ZMwZ4vsFNAkOjSwHsz7eVAnD8Jb6zp/MNwBjg+TUXdQms+Trzw9HPiNU//fm2MAycPm0etLGj//VVrnlrA81ETbEHyHgrxYCi50b1Dbl52vz0Q8rH0ncBXnK2EzDwkYs+e76+YhhufKkpJV/vi4PXp6Q/e+VzXL/OxPMz1iD3q2u0wIi6H4ELzQDKEnoEABM9C2eZMHP1640Xm2HG5GUfnvx8agjDQ/fcegBAYW4nAGNMddbMLwfMx80Aygp7BAATEzwvmYDVr896FzOv7CyNBhKSn/jJFrJq/IeekXVNdy77XcAZF6N8dP0NB3adKaqz8teZGP3MmsofUmO1eGjsb8P/q+2O+iVfwTXcoBGRwocYWz9tNPE6/2H9Jg3PmXr7tSEDn039/FTT92sGln2Y8fnUyQwn77k1RBnDqnjPjZ82L2Gw/vX2CAyse1k2eDYuW00mQOj1Z6Q3cD+dewBAoakTah+p4nh+ee2bv8YDq7/HcksksK3x1dpKc80EhNVq1esEJigJhAnn3/AFh91Vml9WWVIhO12iKDJRFARmd/IendWdg+ylFTbJ7aqx21WMf7SreP3OGpVGrxIZZ+dvNBgTIDDGIZzv7RAgqnVqJkkup8uNlrnnMIlinSWCCrXP1Rag4PDOCMbfm30H4mYoC5eNMlVGPQTsOL+JAE9j4HMmsJgbfshyYs/mnVvACw7fEcFmvDdb6X8zAQ8tG7WjMqrBYDQAQrQ6PQBNocPdYDxNtGQTnEe339KF7Ud/rPzUs/zYD+9q4HzmnljPB9Ulo0w1xsfxY5O+UOsksHbahy03QXL7u0DRoVuDMGXDFOVjXRxw13MzVv7qxQh3lcC2ADn73teArxjaCximLO8zEDyo8+f7C4DUd4GiQ9uDgA1TbvWMtnpuRtyvhruAlVd2lkIAaH2dbgA2KNHXu7oasWMhYD14cwRMs8Z5FkYZZx1xwPz23kY21IjnLw+dP/ItdT8+o2nXcFN8b1E1+KGhidf5a3vgPPZNYjQ74jcWm9YrC+t8fr8sgaFOw/u65Wae+02sBvOevKd2UZc6G5etpunDcEx3O/Zsrr/t+1vAc/b10mDYit+ydec+Awt4UOrndb9V6FKB1Rdmwrd7v4WpsZu2NtQMmUP51F9psXYI8pWcVYAggAmiCCZWlleXFpQ47TWiKAiiqLz5cy5oNWpjuOy0Vzld7hq7Qy3IR3Jsn/7g0vv5iYLSzKVkjfPNU6IgQlBarETOeUSwr7PGVlVl/f3B1/bsHXGIMAGYFtcJcUme5Qkm9Bj0OBDQORAJY+OV+t7w8iZe+t0tIezgxlnb0vd+l77tun99krLmCHC+1/LmAKRsmgjTqKQ4/PnVZVm8Z8rLW4A9m4DvNrzMeOmsW0L2Hty4bVv6J9+lH7nuX3tS1jw/EB9/9eHYJ1fBlJBgQtJbj0Pfe38ux5ZPK84BsL428pp7p636bNm06/76LeBjCtW/+/ps0+jFAeHjAXTw1yh/oqNMCOwcpweGdY+sfYBmIOPd+RxF63/Iqd2DunK+2ZG1JVaLg6vGbEvfu2/XtkFLt876d6HnWBJM0IcaAYwK9K19uYd2jQP0IgCTDkAcEGGaA2BK51DPanFAQNQjtcNTdI0D9KGe8p9fNRld7jxQyrG87u35JiDjnSWMl85JCNm1b2v6tm0bD+79IXgaVjZwzzHeBASEKz+bgBfGJsTcucQBfPHjcQAvztrjyPp4RBeWsmkhTKMmxOHO51d9V9p508sblE3eWbKJl2YkhLB9W+ds27br4N704GkbV77+wxWfJTPAK0tvDsCzmyY++/DD63ZsQNigAOCF2VFPvvmBEq0GiOvgf/50jTIhsHOkHqZRPQGsBDJee87AS1+b3C9uwioTsClllEKb6lEAAB2ZSURBVKrv2DWfZcG8sM5pjAPWzb4joO/4Uo7Qbw4fOrBx9oY93QY8uyfPoZwN38BRtSuikWv4soGZAOWqU4kA9PWvukaucyXsAH2oaXy4GTjx40eA87UfsoE90TPigFBTOBDXwPwYz04VYxNMdy55AYj58bgD+KJ2zOnA16/9HbxgXG9t0rJX5yKu8bPReDU9mxR3y8JNr23O99R1aMeJAB6JCgDi9gAfvziLObIWjugyKmUTYFo1Ia7znc9v+K4Um172XJMNBlb7L6KO1fNnrli6Yu7iNy+1Qttqhm+TVb44dtgdQ8c+PGny6iyNb5TIZJcbFWUWZ3W10lfBAFxoeuKAShSnDUPngAqJq8C5v5827ZBmY4YUbFC73Fx5hjrnXOl9B+cAk7nMwBlDZXX102MjfCyHV6xeI4pic91z1J9Pp8zDqj/ZyjOLapwJf395SahppCRqa88bUub+5FbHBpcc9+vazcXFgwXWZ5dsNW99zlPIknGmkX9/WRtqckiiMqFMme5X52Fnnnlqw4B/fDQnIn6i1a165evsTq/+34RPns1Dn39t+O61oXm152Tlxb8wJvuB2jOPas+WWD4Q3dbuuHv0N8qoKg9lRlhk3D2S6FdnDlSdqUzlQPwLGUhNrj2vqv5cMOUsTUTq0/s3eBY2clZrXPzLE6V1JuXVtnpG3NDkxeoQo9WF2rPzaqs/E1ACTpU4Vm/5buuiJcpd0SgTHp+X0qX/g0xtsLr4xn25ixa+oowqVsyIQ/Li1SHGoS6o9+Vakxe/j/SXrvgsAVgxzjR87kr4dfvpnOO5l95NTcwO/9PCLces0hPLxmxPbspMwGUT4oZPXaANNUkQzSWOZ1/bnvnOkwDqn0YXx9EC64J1Owa88+TM/e8i6Nb3DlbMvy9lEdJrh9f4NdyUKYq1ZwJuygISjXXmuylXXYPXee2wjZuyZqYkJuz56M8DM9IWrfTspfYJ9Kj/R1rikLZ8d2rRktWLzFvrT7j74L0pQbc8BeDbjPKEnscaPxsrxu1psJoi9i5LmPxE7ZNcm+dIPRN168zWbHAmoCcwz8zc+vasGRP+p4XzvizcNK2pnaktpKW+h1wZ3dStW7f/mzt32baSnKoIyW4vL6mQnE5Ruc/AhQ4LxsAEzqFVY/YoFqC2uiUAEof48Y+Gn0+rNCrl+59kDiiPveKcM3Z++BaD7JaZXleTcr//j7v/89WOHVfntzwp10pGeexV+Ejd79eN+cDv6ZV/vqGtAyGkfdgwET1S9i9ff/LDjStgPj9GwAQ8ODZh7LQpn1UnXHYea3vXYOZotvkcp07lVFvK+vcIOpBWDpvd7XaJogiwC7MxPJnj/L8GvTZEz51uCJCdklBqlUVRAOMMnDER5/MBv/APlMG+TknuEa6JCBAPHTmKNh1Y1Y6YANPIhM/NmIUMuW/SysU/tHVEhLQn7+6v/HDBRfc6yjxE37MZeDKtraJqW83z3CrGmCS5Dx05Gtd/sFBz2iHpVUr/0kWJQ2CMgQGCIMl4+ZNyyDUSZ4xBLaoq3UEqkdUaKsUZ4wBTnokrMHDInAuimt/SXVVSWHg276xa5UVPY2sKHGUCfP01QFwH70fTNL9XFqD7uPVLJKaSa5bts2HT1fW4ZkKuZgXAyl0HGnzp7T145O5DrRzPVaJ5xlYpn/0/27a9c6jmxli10y0LgqAMsKpHEBgTRCHPaih1R3JdlF2IPFsVKkF9fuqH8j9lVNWFxMMBBiZzVWSQ+44bItJ37FCJvw3Mvars3zBx2PLtQMfeemRvnoRFbf+R5FwOuKvQBby6t2ht8hR6SjwhTfdUKrC24aHwZiDlqSscJd/eNUM/hwfnfPaTs2KujZ+w5BcGf0H4rVe81n+ZIAh2J+8b65M8xBdum0ol/pgtbPzWJoqi0jDFPV0cv/WQQwCzOO3TRvj0DrI88/zzbpfz6uzkIISQP5IG+zmabyYgY4yx9Rs+6BiseujOUJvTJQqCwNiFVy4MsxUESRY6hmgeG2WICXVFBouhftK9/fl9Cb52F1eJyqRxUbkzEc4PyxVUomCX2A1G+c7rgz/d+h+nw05pgxBC2kpzfpssY6ykpGjd2+89OqpnfDdntQvi+SeHXNRa5ZZ4vMknzJ+5ZDUT1TLTCoLQs6Os14B7Vr7Q1AXGGIPTLej11TNGRB347/d79n4rCAKlDUIIaSvN+Z2ASvL4bMtn3+7a9fJjt3YKLre5IIqMMWUv5+8/wJgoQqPRaDRarUar1ag1Gp1KFBjjYKLALjxoRBAEQVQJjDOtysf++N0BQk3xurff1qjVzRgzIYQQbzVn5gDAOVepxOUrVp7JPrb67/0iA8urHEx14cGHSp+2RiVmnrDZ3aqgQB8fX53B4KvX604W8RqXSnW+a0TpK2cCYy5ZBbF8zujAGzppX1z6cpXVgquyY5wQQv53iEFBQQCat/3H7XZ/vXPX7Qn9JyfdfORUTnYh16q0KuVLOsBUolBq5XlF1dd28RUFJslI+2/ZeztrNDo9U0ZTCUxgXIBYI7OQoMpnksKuCXQvfOHFUydPqFQqUDsVIYS0lgY7lZtzbFWdPWm0upS5c+4acdfqTw6u/6rY5grUq1UqUWQCZ0ywOyWDxtklXFNucRZaNTqtXhBlcAFgbklyQ3BLFbf3xqQ7O5acPfmvxUuKCvNVKhV1bxBCSGtqqaePNEhJHm5Juv+++594bGpxjeqNrcd2/FxVY/eVofLR+ug0KoEJLjdUKqZRi7IMN2cOl4tzl07n6B7lGDekkzFI+vw/X7y1fr0suZvxEVWEEEKaqFUzBy4kD855aFiH6X+bPHTIYDvz2brHvD/bfbbYXVhqt9pkMLUoCjKX/f00HYI0EaGiKRK39wrs6K/66cd973348eHDP2u1WhqDSwghbaK1M8f5HSg3H253167RQ4cMvm/0iC5do0usjrJqbnWgusblcrr89DqRufSiI0ALe7V15649X36148iRwzqdVulXp7RBCCFtom0yBy48i4pzLsuyJPOY6Ohe1/Xs2cPUuVOUTqdzuVwul+vMmbwTp04f+eXoqZwcl9OhVqspZxBCSJtrs8zh2T0AZS9KK5bn5zpPtlJWbul4CCGEXFZLPWW9iTyZoHaGqM3zuKraKxNCCLnatF7m8KidIQghhLQ7zTyHnBBCyB8eZQ5CCCHeocxBCCHEO5Q5CCGEeIcyByGEEO9Q5iCEEOIdyhyEEEK8Q5mDEEKIdyhzEEII8Q5lDkIIId6hzEEIIcQ7lDkIIYR4hzIHIYQQ71DmIIQQ4h3KHIQQQrxDmYMQQoh3KHMQQgjxDmUOQggh3qHMQQghxDuUOQghhHiHMgchhBDvUOYghBDiHcochBBCvEOZgxBCiHcocxBCCPEOZQ5CCCHeocxBCCHEO6q2DoB4x8/PLzY2NjIy0tfXt61jaX9sNlt+fn5WVlZVVVWr7ZSqrFm0Sd2RS2ExMTEARFGUZbmtgyGXERUV1b9/f1EU2zqQ9k2SpH379p07d64V9kVV1rxas+6IQhAESZLqLBSDgoKU1zjnbREVaSo/P78BAwbQe9DvxxiLjIzMy8tzOp0tuiOqsmbXanVHPBhj9bMDtVa1G0ajkTFGt4bNgjFmNBoPHjzYonuhKmsJrVN3pHGUOdqN8PBwui9sRuHh4a2wC6qyltAKdUcaR5mj3dDpdPQ21Ix0Ol0r7IKqrCW0Qt2RxlHmaDeuzkYPDu5m7kptpVvl5oxHWiPbOqKryNVZZYT8fpQ52o2r8NOrDNmhcth0VZUdymxCjcspR1gi2jqoq0gTq4zJsk5yBDgsMliRX4fGV/a3VohuV7XW163zkQWaj0XaBmWOduMq/ABrF+2lviWFEfmBJgFOd02hW8656oJsQ02pMpHLfu6aWEdhqEqugtpeWVSlM7jV2vprqtxufU1VTFWxwV5VBs3pkKgqXwNX0Z8waQN02bUbV9U9h4M5LGprdWSFb1dX364BZ6uqpBKfkHM+V1WQbe6yZ4PJsl6q6Sxb++oc4YGGEherPlN8mqECTFKpa6+pkiQ/e1Wn8oLeUkWIo7rY5nYwMU/mNkMApzsP0uooc7QbLf2mzMEBMLDGV5Mg2TV2u97mDLUGdHMGRDBfnUrI1ekKfPWlAZQ5arvs2dC57bHOwn4+zuiEoT5BYb7FBT7Vu7+tLDW73BUBFzVb+VZVdrEW3WQv7BwR5qsLDa60SqfPqGy2Yx2N3GBoyYMgpAGUOdqNlm6tcsLFGBhnqktfFRIku8pRrC+RulRF9kb/LmFVNumbw8WqXwP9igP8XQYZ1Fr1m8tWmb+9MkQthQcafILCRB8/3+AOkTfc1O/oMW1RxaFSyeoX5FZrRLc7oNpyra24J6+Ojuzgq9OKnAuiEC47g20WdWlxjV7fOodDiAdljnajpT/OnwnJB4NW0oRUBmlklVDvaZh20WHVVVV1sIR3EzvHBMZEaXNKas5kuYRfAvzKAnzdDYxAvRNIWvY4/K691E6rgCc3H8NXrzT/8VwFLltlMpiVq0pczLe4wDe4g6BS68K7RFeUc4fTUVB6QmDVal8ft9NoLbxWsBv9NAZ/A3M6pRp7jaWqFGKloHJxfqm9RAEjR/bvMWCIPqATBLXEUWR1pu8//t3GL4CTLXC45H8IZY52o6UzR7WPTRMAUXCVS8y/2s/HrVNarjjnEpNq1E5HQA2LdHSK0UR31YUGqmvs7vxsqSJL5Vtk0Ll0IheV9q7a0oH0J5ZP6B9168OPPvpfYMPzyvI3nk9G1IDPzVVbP3gT54616HG1octWWb5PiL2q1Ha6zKd6d+QNN+nCu8Dl9Ot0jVHmhvL9LktREdeEcPfNruLOUeGGoCDY7XA47JWWvDMFGZrQLL8wS3CovqG99I/CuEf+Ina5be+vZXve2Xju2Le3XRt1x9D+yYOH9uxpevP1j3Hu25Y5aPI/gTJHu9HSrVUCRL8QaAN4hcsq5AmoZDqu4Zy7BckuOi1+VZqurogeqvhrwgw6sdRSs+94acUvanWeb4DTD0Aj7VRv/XD21ruyZW7Eb4fAq4AtP+fi7C8telBtqylVZtHoTzIIZeU3/nI0pqLcr9M1cDq0ekNobI/+2bnWinJfldgxPMpHp1XSRmVRaXZFzV5NaE5weI1/oFqtrr+XOODhRx9G1MA39pzLXP+csnD3L2d3/3J2/sOnbhz4qP3RB9c/VwlkNv8xk/8NlDnajZa+5/ArNfiG84BI1rmfLofZSh2VEbZgJ9xWrc0SUtWhh3hdbKipY7CvFieKy46fsBQcEANL/PTOJo2nqgL4uQpcvCbnwB+6R70pZ8Ypqsvgd8zp0hVauMPZTeZavUFk0AcERQeXu0VZBean9xXcbslWU1NeeaLS/rNbfSygQ41/EHx9VaJYfy8j/txRHXXzoQr89E46Lr4RTH/npwm9j90S1efHh+/95Z2fmvNoyf8SyhztRotnDpvOXWKXOqiN10Xh2pJcZjl3olzwk/0ixZ4xQV27+HcM9dOK7GRRWdbx6mIz1xfqtQ6NKAv1G6kaDh+18wS/8C8H0BcYMzsprPtgJvpIHIeKa1au/Bx521voSFtNE6vMJYhlhtDMCtmRX+FfsT80toc+IIg5nf6hYfAzwOGA3c7tjhqL9dy54n2C/2FDWGVYB41GIzaUNjoCXa+7A1AfPmvhvG6T1LfAPaf+GxTXZ0CPqPsevC562GP13wR2n+Xxlk1+PR8EcLACK554BzhfzqO9cPOsxS7WYc8vRe99+Q2ObE/qi4H3/d0Q2UtmYp7F9caWfXm7U1+d/SdlcwBHq1Dy2Mbb3hoIRClL/vrtuY7vzHt04qCO/UcLan8ZyLG4Fm74Bj994MXJJW2KRoK3G3IL0znVjiJWdQ4+3M8Y06HrdYE1nWrEWKljL9/4PlG9Onb0U/ucK68+lFWWd9TlzNYEVuvVbrEpJQ+T5Ur/EHl7iWeJkmtkzpVf/zJjgG/P4Qs/y31mwoSCjNfjOqiG/Xl4ixzkxa6qKqvw8T+uDUq3arKzcqynTsLpgMOhpA04HJbi0qzCijQYfg0IqwoKVqlUlyr/RllmwZEAviqzNriCzZoBICoUCE186bPsCROe+eWjCUDVR79UTZgw4f0FE8KkwzOWsLM7F7jdNaZAyHff6tm2+9ABQJi5Chte2ikf2jbhBnnA5AWbfvGd8MgLB95f0NmnbMrYBLnnQzOWbD+7cwHg3pZtXzLjmbfk7e8+8zQqDhdxTHj1v/JbT098MDIyYewbP1ZPmPDM8U8XXGOomXDvUFmOvHrqjjSOMke7wVuYyAVNtcZVyA/nnvYX/fubut1yW8TQm66JN3YN8wlyyq6TpSUHs4rO/SSzs1p/uw68qSGFc24T/Tkv9yzx3G8ov2p8AotcOPFZ9lnOT7z5PVAUGejX/EdYz1VVZS6V2iJo892itcLqrqyA3f7bPzV2l7W6qtpRIOiqdH6yj48gCJcqP4Bz6Hxrn946KvI4UMUY/rGi+MinL3B+9vwNIcA5Tz/Blzy3jPNtlYUnsk+V+fDCv/S9hvMozvkozi2hCajO9ez6xj+N2pUb8u17Czk/sSr9hOXX9E5q3DLkBs55ZeEJwG6xuzk/yzn/+ixHdVlxNfiBk5xzrT6wkovfH87j/OzPn51A9ZmQAMZ5r6afrpauO9I4aq1qN1rhr0XtEl2VPPeENTqoqnNkQPeIjjq1oBKYzVWTby3LzrIUHJG0hVpdjUbV1EYqAAgfgVJrMOfmOm3untaqqYu2AFsGdsOQxKSYPgOAYFxlc+avjFeHoJIkX8kVCslHJYpg5+827HbYHbA7VG7JV5ZD3U6b5OKyLF265AoAdht0uLh58De+wQB0Tjc4t9etkYvX/9kJY+7BPl2G8V534/BrceM7/Zzr27W3RSn4DnCfyNh7/HX3rF9fe6vYsMCMWuXw+p1b4HPfOIw3JlzXCSMfuatH39vgF4kqT/4i7QBljnajFe7QVTJzV7Gy0+786PKAYDFA6+vmzhpXTbmtKut0xbnjTkeOKtCuVsng4E3PHFHdB31zxiHLtb+KhwOQOVdGW3UDps4eHdh7xMEce8GGbxMejefo+AdokfDqEPyrKmPtZQPksk4dOhr0vkojlZI2YLf7q4RuKq4uzctg7ChnFWFhlyrne2BUaR7rGJsYEvBFQwHoA3oDqvxSLss/AzIu5BfOLwqYc0gc2fs3dO868LY7ry09KOPakdWrj6F3FAdkmasgQ2AfHKn6YvHf6u9FKXPsdX5jN2z4bWEVZJkDcidg8iO3Rg8af6xA2Lrtx3vvruDoqbzU9DNG2hBljnajFT6DM0CwM7FQnZ9foQtzxYSGuLijrLo6N9+Std8tnlEFVWtFDsZY09NGUieg+2173ztd//OvMraqE5Ayf3xZ18TnXs84+91rkwE8Go//pXsOlST526t7Ocp6q5xdwiN8dFrB7eZ2h6W41GWtVrklf5Ug2J16l9RVclUXF4hO6WdBqDYYJLW6fmlngNwj27t2HHBtJ79t/HZgd+1X+wBhMQPcwGc/53J+6EKg5/9zUcAcHPj2U9596K9Dr4uruOMvB6q78jNPASnKoSnXgDHCj/N+wH5lo3sB3Zw5H770klLm+0eqvlg0RXnp/SWTETCIcw7w2Y8P0t04cf5m84l/L7gLwN0pF05Xu6/0/xHUz9FuNL0J+PcQZKZ3ipV5Ut6ZqlJH8ZmK4uwTltz9XJun8bWpBZl7FUlHzoeMH5lZGsN3fVl7OThXAdxXwzkfxLm2a4+sInYmY+v5V8Ev1UbfvK6GKlO53f6O6m620j6io3uAzhAUpOJcstVUV1SeLKs6Wl5zotJutdjc1Q5VjTPALXevqLw+/9w1Z8/6WyyC09lgmZ+sP+M6u+eGQPSbcU+dl/4yqR8L77/nrOvM+k9qnQiO+t1W4OB8F+dnM7+MVrvDHrjt0z1FFzpPwDm2ce4uPtM3FKNnP8R5N855R85vfuyWbwsDGizTs2EC56HGuNPVQtanmecX8Vr/b5qWrjvSOLrnaDdap/WGAWqJWQtYSYD7THhFZQEqsgTHCVFvE0SJc+bFrcCgWCSNedja4461r+6B/LNn+bDOgD5IB/zJGLZdNpYgCzVV10di2EOTOlu+7nvzICAsQIvHptzzSmYofnizRY6zVTSlyvQ1VdHVZQNRYYyMNPgblEaqmvLKvLyi3bK+QB0SJrnUpeeiZXeAW0a1K8gp96ipUtec2MH5iagoS3Bw/TL3AetXrH1olnbmLbd87ffqzq3/PnN4x9DenUePGhLaa8h35+S1K96FvO+3GAJiAXWHAJUsG4EsZWFIp9gOAeGybPx+7c8P3Hwix9pd3rE9IFaGWh+ggmzsgCz520/XD3ms9wNxnYak/qOqKD/CHxnVobnLVwFySKdYwC9A71DKHNMZCOnYQYeOtxhPZcjcZjEF457HBmt+LR8wsC98jHo3Hh8T9rJ7OjavbK7zT1oOi4mJASCK4h+gWfmPLT4+vnV2xDm3qAR3R6dPXJXtuK/qnMa3gqkYhMs8RfciU4AhG5cBnRpf7Szw5IM7n77niz4PPs3F4H15NQdf2zj58WttwTe9/uWJH9955ncdyeXs37+/Rcu/bJWFVlX2cFn6MVv3DoH+vj4qQJklbi63/VDDjhpCqnR+/rK7Z0lh39Ki7hWVQQ6JSdwNZhWEIwbDT5GRRzt2rGwoeQDoDIwbn2C69R6/oCgIapeM0+VVX+w8krF5M3DGs9rGZVPQaYjn1wd3nsXaJ9fNG2no/RCAw1YsnPTuyrm2JYV/erhkbu+H1gEGAFZg0ruH8fnC8Qmdhz74sG+HnhLEvbmWNSs34cxXns2VEoonvTtk42DPxfDgzrNTfnpy0PQlzKfrr2XS++998exdAox3fbK/5LOlL9aOrREtXXfEQxAESZLqLKTM0W707du31fblAHP6wB3EVRamqYHazb1KGwD+Bgz9eLmMTntzqr7Z8p9DGT/Wfke4s0/nxDsGdLn5T2eZftYDO4DXm/kAmuann1p2EvVlqyyqsrSfs+xW0d7JGK0B5Bq7vdJyrMhywCn+oAm0BgbJPj5azgMsluvPne1bVNijskrPuci5m7GTgvB9ZGRGly6VUVEtehRXp5auO+LRYOag1qp2ozXbdkXO1TbGnILKLYucM3YlTwnh4B8cqtwy//n6nyLTD+amH/xg+dQTGPr4H3gs5mWrrEzrW2i3FNgcwRUWQSXWWKrO5ubvZgGH9cFlwSEajUYUBDdQGhx8gDGLoFLXnIp2Og2AjbECrfacVlukUmmo0Z+0Osoc7UZrZg4B0HCucckXdn0lhRyz4d//3A7kXmqFD9f8d2yfA//LmcOuUh/XB9shSCcLo5hUwoXd8D9hCK7yC1Cr1YwxTwlVfn4nIyK+Am7Nz+9gtRZotTs7dswOC4NeT93FpPVR5mg32ldzIgf2Z1fI8sZG1vkeuP3kf2W51x91FP9lq0wGytU6t85fXVMT7qqpFFRHfAOqffxkjUa8eHOnIJTr9cfDwzWyHODre06rPREaajUYhIaelUtIS6N+jnajd+/ebR3CH83hw4dbtPwmVhmTZbXDobdWujgv9g9UHmV4qZUDy8thtxer1czPT9BohP/VLyFv6bojHtTP0b5Ro0S708Qq44w5dDqHTgdAd7kNywMDUevvlq4K0iYoc7QbdFPY7lCVkT8qyhztBn26bHeoysgfFWWOdsPpdKobek4RuTIul6uld0FV1kJaoe5I4yhztBtWqzUwMLCto/jjsFqtrbALqrKW0Ap1RxpHmaPdKC8v9/f3Z8zLydykIZzz8vLylt4LVVlLaJ26I40Tg4KCAAiCQG2yVzlZlh0Oh16vb+tA2j3OeUFBgd1ub+kdUZU1u1arO+JRe0bqbwtpPkf7olarAwICfH19lW+iJl5xu902m62ysrI1G8qpyppFm9QdAT3xkBBCiLcazBz/oxNQCSGEXDHKHIQQQrxDmYMQQoh3KHMQQgjxDmUOQggh3qHMQQghxDuUOQghhHiHMgchhBDvUOYghBDiHcochBBCvEOZgxBCiHcocxBCCPEOZQ5CCCHe+e2xz4JAWYQQQsjlnc8c9R+iSwghhDTo/wHYj3/WXgwv9gAAAABJRU5ErkJggg==

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]