www.delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2012/10/24/12:47:22

X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f
X-Recipient: geda-user AT delorie DOT com
Date: Wed, 24 Oct 2012 09:46:45 -0700
From: Colin D Bennett <colin AT gibibit DOT com>
To: geda-user AT delorie DOT com
Subject: [geda-user] pcb-shrink pads, Python script to scale SMT Pads (was: Re:
[geda-user] Pin hole size)
Message-ID: <20121024094645.3d8519a1@svelte>
In-Reply-To: <CAKakQcdeVMtvyWuFB02H_-B16MJebjKOcr0SD9Toyp0rLE-dNQ@mail.gmail.com>
References: <20121023111430 DOT GY32696 AT fi DOT muni DOT cz>
<3v1jl9x07b DOT ln2 AT skate DOT rswarbrick>
<1351032683 DOT 2442 DOT 5 DOT camel AT AMD64X2 DOT fritz DOT box>
<CAKakQcdeVMtvyWuFB02H_-B16MJebjKOcr0SD9Toyp0rLE-dNQ AT mail DOT gmail DOT com>
X-Mailer: Claws Mail 3.8.0 (GTK+ 2.24.10; x86_64-pc-linux-gnu)
Mime-Version: 1.0
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - gator297.hostgator.com
X-AntiAbuse: Original Domain - delorie.com
X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain - gibibit.com
X-BWhitelist: no
X-Source:
X-Source-Args:
X-Source-Dir:
X-Source-Sender: (svelte) [65.61.115.34]:21256
X-Source-Auth: colin AT gibibit DOT com
X-Email-Count: 2
X-Source-Cap: c2t5bGVuO3NreWxlbjtnYXRvcjI5Ny5ob3N0Z2F0b3IuY29t
Reply-To: geda-user AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: geda-user AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

--MP_/4zjLx/xXRvKpH34qlwpgEz.
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On Wed, 24 Oct 2012 11:15:38 +1100
Stephen Ecob <stephen DOT ecob AT sioi DOT com DOT au> wrote:

> Simple, human readable file formats are, however,
> one of the great strengths and advantages of gEDA.  I personally
> wouldn't hesitate to show beginners our file formats and how
> easily they can be analysed and manipulated with text processing
> tools - it's a feature of gEDA that I greatly value.

Absolutely.  Not only can you edit footprints by hand easily,
once you learn the basic syntax, you can easily write scripts to
generate or process them.  For instance, see the attached script I
wrote to scale all Pad[] entities in a footprint.  For making
custom solder paste stencil apertures, I generally use this by
copying all Pads in the VIM editor, pasting them, and processing
them through "pcb-shrink-pads --scale=0.85" or something, depending
on size/shape of the pads, then adding the 'nopaste' flag to the
original full-size pads.

Another benefit of a readable text file format is that you can use
version control tools side-by-side diff tools to easily compare
changes made to footprint files.

I rarely look at the .pcb layout files, actually, but I frequently
work on footprint files in a text editor.

Now, I do wish for many other features in pcb to make footprint
editing easier.  For instance, having to "explode" footprints into
the component pads/pins to edit them, then "composite" them back
together (losing a lot of information, like pin/pad 'square' flag,
solder mask gap, pad name, etc.) is really a bummer.  It would be
a huge improvement if we could open and edit footprint files
directly.  Also, being able to add EVERY type of pcb entity to a
footprint, and have custom layers like "keepout", "assembly
drawing outline", "silk screen outline", etc. would be extremely
helpful.

Regards,
Colin

--MP_/4zjLx/xXRvKpH34qlwpgEz.
Content-Type: application/octet-stream; name=pcb-shrink-pads
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=pcb-shrink-pads

IyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIwojIFNocmluayBnRURB
L3BjYiBwYWRzIGZyb20gYSBmb290cHJpbnQgYnkgYSBnaXZlbiBhbW91bnQuCiMgVGhlIHBhZCBp
cyBzaHJ1bmsgYnkgYSBzcGVjaWZpZWQgZGlzdGFuY2UgZnJvbSBlYWNoIGVkZ2UuCiMKIyBUaGlz
IGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgc29sZGVyIHBhc3RlIHN0ZW5jaWwgZGVmaW5pdGlvbnMK
IyB3aGljaCBhcmUgc21hbGxlciB0aGFuIHRoZSBTTVQgcGFkcy4KIwojIENvbGluIEQgQmVubmV0
dCA8Y29saW5AZ2liaWJpdC5jb20sIDIwMTItMDMtMjcuCgpmcm9tIHN5cyBpbXBvcnQgc3RkaW4K
ZnJvbSBzeXMgaW1wb3J0IHN0ZG91dAppbXBvcnQgcmUKaW1wb3J0IG51bXB5IGFzIG5wCgoKIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIwojIFJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJucwojIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoj
IE1hdGNoIGEgbnVtYmVyIHdpdGggb3Igd2l0aCBzaWduIG9yIGRlY2ltYWwgcG9pbnQgYW5kIGZy
YWN0aW9uYWwgZGlnaXRzLgojIE9ubHkgbWF0Y2ggdmFsdWVzIHN1ZmZpeGVkIHdpdGgg4oCcbWls
4oCdIChubyBzcGFjZSBiZXR3ZWVuIG51bWJlciBhbmQgdW5pdCkuCk1JTF9WQUxVRSA9IHJlLmNv
bXBpbGUociJcYihbLStdP1xkKyg/OlwuXGQqKT8pbWlsXGIiKQoKIyBNYXRjaCBhIFBhZFtdIGVu
dGl0eSBmcm9tIGEgcGNiIGZvb3RwcmludC4KUEFEX1BBVFRFUk4xID0gcmUuY29tcGlsZSgKICAg
IHIiXGJQYWRccypcWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCZWdpbiBQYWRb
XSBlbnRpdHkKICAgICsgciJccyooWy0rXT9cZCsoPzpcLlxkKik/KShtaWx8bW18XGIpIiAgICAg
IyBYMSAgKDEpIG51bWJlcjsgKDIpIHVuaXQKICAgICsgciJccysoWy0rXT9cZCsoPzpcLlxkKik/
KShtaWx8bW18XGIpIiAgICAgIyBZMSAgKDMpIG51bWJlcjsgKDQpIHVuaXQKICAgICsgciJccyso
Wy0rXT9cZCsoPzpcLlxkKik/KShtaWx8bW18XGIpIiAgICAgIyBYMiAgKDUpIG51bWJlcjsgKDYp
IHVuaXQKICAgICsgciJccysoWy0rXT9cZCsoPzpcLlxkKik/KShtaWx8bW18XGIpIiAgICAgIyBZ
MiAgKDcpIG51bWJlcjsgKDgpIHVuaXQKICAgICsgciJccysoWy0rXT9cZCsoPzpcLlxkKik/KSht
aWx8bW18XGIpIiAgICAgIyBUaGlja25lc3MgICg5KSBudW1iZXI7ICgxMCkgdW5pdAogICAgKyBy
IlxzKyhbLStdP1xkKyg/OlwuXGQqKT8pKG1pbHxtbXxcYikiICAgICAjIENsZWFyYW5jZSAoPTIq
Z2FwKSAgKDExKSBudW1iZXI7ICgxMikgdW5pdAogICAgKyByIlxzKyhbLStdP1xkKyg/OlwuXGQq
KT8pKG1pbHxtbXxcYikiICAgICAjIE1hc2sgb3BlbmluZyAoPXRoaWNrbmVzcyArIDIqZ2FwKSAg
KDEzKSBudW1iZXI7ICgxNCkgdW5pdAogICAgKyByJ1xzKyIoW14iXSopIicgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIFBpbiBuYW1lICgxNSkKICAgICsgcidccysiKFteIl0qKSInICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBQaW4gbnVtYmVyICgxNikKICAgICsgcidccysiKFteIl0q
KSInICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTeW1ib2xpYyBmbGFncyAoMTcpCiAgICAr
IHInXHMqXF0nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRW5kIFBhZFtdIGVu
dGl0eQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIwojIENsYXNzZXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKY2xhc3MgUGFkKG9i
amVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi54MSA9IE5vbmUKICAg
ICAgICBzZWxmLnkxID0gTm9uZQogICAgICAgIHNlbGYueDIgPSBOb25lCiAgICAgICAgc2VsZi55
MiA9IE5vbmUKICAgICAgICBzZWxmLncgPSBOb25lCiAgICAgICAgc2VsZi5jbHJnYXAgPSBOb25l
CiAgICAgICAgc2VsZi5tYXNrZ2FwID0gTm9uZQogICAgICAgIHNlbGYubmFtZSA9IE5vbmUKICAg
ICAgICBzZWxmLm51bWJlciA9IE5vbmUKICAgICAgICBzZWxmLmZsYWdzID0gTm9uZQoKICAgIGRl
ZiBvdXRwdXQoc2VsZik6CiAgICAgICAgcyA9ICJQYWRbIgogICAgICAgIHMgKz0gZm9ybWF0X2xl
bmd0aChzZWxmLngxKQogICAgICAgIHMgKz0gIiAiICsgZm9ybWF0X2xlbmd0aChzZWxmLnkxKQog
ICAgICAgIHMgKz0gIiAiICsgZm9ybWF0X2xlbmd0aChzZWxmLngyKQogICAgICAgIHMgKz0gIiAi
ICsgZm9ybWF0X2xlbmd0aChzZWxmLnkyKQogICAgICAgIHMgKz0gIiAiICsgZm9ybWF0X2xlbmd0
aChzZWxmLncpCiAgICAgICAgcyArPSAiICIgKyBmb3JtYXRfbGVuZ3RoKDIgKiBzZWxmLmNscmdh
cCkKICAgICAgICBzICs9ICIgIiArIGZvcm1hdF9sZW5ndGgoc2VsZi53ICsgMiAqIHNlbGYubWFz
a2dhcCkKICAgICAgICBzICs9ICcgIicgKyBzZWxmLm5hbWUgKyAnIicKICAgICAgICBzICs9ICcg
IicgKyBzZWxmLm51bWJlciArICciJwogICAgICAgIHMgKz0gJyAiJyArIHNlbGYuZmxhZ3MgKyAn
IicKICAgICAgICBzICs9ICJdIgogICAgICAgIHJldHVybiBzCgojIENyZWF0ZSBhIFBhZCBvYmpl
Y3QgZnJvbSBhbiAncmUnIG1hdGNoIG9iamVjdC4KZGVmIHBhZF9mcm9tX21hdGNoKG0pOgogICAg
cGFkID0gUGFkKCkKICAgIHBhZC54MSA9IGdldF9sZW5ndGgobS5ncm91cCgxKSwgbS5ncm91cCgy
KSkKICAgIHBhZC55MSA9IGdldF9sZW5ndGgobS5ncm91cCgzKSwgbS5ncm91cCg0KSkKICAgIHBh
ZC54MiA9IGdldF9sZW5ndGgobS5ncm91cCg1KSwgbS5ncm91cCg2KSkKICAgIHBhZC55MiA9IGdl
dF9sZW5ndGgobS5ncm91cCg3KSwgbS5ncm91cCg4KSkKICAgIHBhZC53ID0gZ2V0X2xlbmd0aCht
Lmdyb3VwKDkpLCBtLmdyb3VwKDEwKSkKICAgIHBhZC5jbHJnYXAgPSBnZXRfbGVuZ3RoKG0uZ3Jv
dXAoMTEpLCBtLmdyb3VwKDEyKSkgLyAyCiAgICBwYWQubWFza2dhcCA9IChnZXRfbGVuZ3RoKG0u
Z3JvdXAoMTMpLCBtLmdyb3VwKDE0KSkgLSBwYWQudykgLyAyCiAgICBwYWQubmFtZSA9IG0uZ3Jv
dXAoMTUpCiAgICBwYWQubnVtYmVyID0gbS5ncm91cCgxNikKICAgIHBhZC5mbGFncyA9IG0uZ3Jv
dXAoMTcpCiAgICByZXR1cm4gcGFkCgojIENvbnZlcnQgdGhlIGdpdmVuIGxlbmd0aCBxdWFudGl0
eSAnbnVtYmVyJyAoaW4gdW5pdHMgJ3VuaXQnKQojIGludG8gYSBtaWxsaW1ldGVyIHZhbHVlLgpk
ZWYgZ2V0X2xlbmd0aChudW1iZXIsIHVuaXQpOgogICAgbiA9IGZsb2F0KG51bWJlcikKICAgIGlm
IHVuaXQgPT0gJ21tJzoKICAgICAgICByZXR1cm4gbiAgICAjIExldCBtbSBiZSB0aGUgY2Fub25p
Y2FsIHVuaXQKICAgIGVsaWYgdW5pdCA9PSAnbWlsJzoKICAgICAgICByZXR1cm4gbiAqIDAuMDI1
NCAgICMgQ29udmVydCBtaWwgdG8gbW0KICAgIGVsaWYgdW5pdCA9PSAnJyBvciB1bml0ID09ICdj
bWlsJzoKICAgICAgICByZXR1cm4gbiAqIDAuMDI1NCAvIDEwMCAgICMgQ29udmVydCBjbWlsIHRv
IG1tCiAgICBlbHNlOgogICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiaW52YWxpZCB1bml0ICciICsg
dW5pdCArICInIGZvciBsZW5ndGgiKQoKIyBSZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJl
c2VudGluZyB0aGUgZ2l2ZW4KIyBsZW5ndGggcXVhbnRpdHkgKGluIG1tKS4KZGVmIGZvcm1hdF9s
ZW5ndGgobGVuZ3RoX21tKToKICAgIHJldHVybiAiJTkuNmZtbSIgJSBsZW5ndGhfbW0KCiMgQ2Fs
Y3VsYXRlIHRoZSBtYWduaXR1ZGUgb2YgYSB2ZWN0b3IuCiMgRmFzdGVyIHRoYW4gdXNpbmcgbnVt
cHkubGluYWxnLm5vcm0oKQojIDxodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85MTg0NTYwLzk5
NDE1Mz4uCmRlZiBtYWcodik6CiAgICByZXR1cm4gbnAuc3FydCh2LmRvdCh2KSkKCiMgUmV0dXJu
IHRoZSB1bml0IHZlY3RvciBpbiB0aGUgZGlyZWN0aW9uIG9mIHYuCmRlZiBub3JtYWxpemUodik6
CiAgICByZXR1cm4gdiAvIG1hZyh2KQoKIyBSZXR1cm4gYSBuZXcgUGFkIG9iamVjdCByZXByZXNl
bnRpbmcgYSBzY2FsZWQgdmVyc2lvbiBvZgojIHRoZSBQYWQgbWF0Y2hlZCBieSB0aGUgcmVndWxh
ciBleHByZXNzaW9uIG1hdGNoICdtYXRjaCcuCmRlZiBzaHJpbmtfbWF0Y2hlZF9wYWQobWF0Y2gp
OgogICAgcGFkID0gcGFkX2Zyb21fbWF0Y2gobWF0Y2gpCgogICAgIyMjIEZpcnN0IGV4dHJhY3Qg
dGhlIHJlZmVyZW5jZSBsaW5lIGVuZHBvaW50cyB0aGF0IHBjYiB1c2VzLgogICAgIyBQb2ludCBh
CiAgICBhID0gbnAuYXJyYXkoW3BhZC54MSwgcGFkLnkxXSkKICAgICMgUG9pbnQgYgogICAgYiA9
IG5wLmFycmF5KFtwYWQueDIsIHBhZC55Ml0pCgogICAgIyMjIFRoZW4gaWRlbnRpZnkgdGhlIHJl
YWwgb3JpZ2luYWwgbGVuZ3RoIG9mIHRoZSBwYWQuCiAgICBsZW5ndGhfZGlyZWN0aW9uID0gbm9y
bWFsaXplKGIgLSBhKSAgICAgIyBEaXJlY3Rpb24gZnJvbSBhIHRvIGIKICAgIGVuZF9hID0gYSAt
IChwYWQudy8yKSAqIGxlbmd0aF9kaXJlY3Rpb24gICAgIyBBY3R1YWwgY2VudGVyIG9mIGVuZCBl
ZGdlCiAgICBlbmRfYiA9IGIgKyAocGFkLncvMikgKiBsZW5ndGhfZGlyZWN0aW9uICAgICMgQWN0
dWFsIGNlbnRlciBvZiBlbmQgZWRnZQogICAgY2VudGVyID0gZW5kX2EgKyAoZW5kX2IgLSBlbmRf
YSkgLyAyICAgICMgQ2VudGVyIHBvaW50IG9mIHRoZSBwYWQKCiAgICBsZW5ndGggPSBtYWcoZW5k
X2IgLSBlbmRfYSkgICAgICAgICAgICAgIyBUcnVlIGxlbmd0aCBvZiB0aGUgcGFkCgoKICAgICMj
IyMjIyMjIyBDb25zdHJ1Y3QgbW9kaWZpZWQgcGFkCgogICAgbmV3X2xlbmd0aCA9IGxlbmd0aCAq
IG9wdGlvbnMuc2NhbGVfbGVuZ3RoCiAgICBuZXdfd2lkdGggPSBwYWQudyAqIG9wdGlvbnMuc2Nh
bGVfd2lkdGgKCiAgICBuZXdfYSA9IGNlbnRlciAtIChuZXdfbGVuZ3RoLzIgLSBuZXdfd2lkdGgv
MikgKiBsZW5ndGhfZGlyZWN0aW9uCiAgICBuZXdfYiA9IGNlbnRlciArIChuZXdfbGVuZ3RoLzIg
LSBuZXdfd2lkdGgvMikgKiBsZW5ndGhfZGlyZWN0aW9uCgogICAgbmV3X3BhZCA9IFBhZCgpCiAg
ICBuZXdfcGFkLngxID0gbmV3X2FbMF0KICAgIG5ld19wYWQueTEgPSBuZXdfYVsxXQogICAgbmV3
X3BhZC54MiA9IG5ld19iWzBdCiAgICBuZXdfcGFkLnkyID0gbmV3X2JbMV0KICAgIG5ld19wYWQu
dyA9IG5ld193aWR0aAogICAgbmV3X3BhZC5jbHJnYXAgPSBwYWQuY2xyZ2FwCiAgICBuZXdfcGFk
Lm1hc2tnYXAgPSBwYWQubWFza2dhcAogICAgbmV3X3BhZC5uYW1lID0gcGFkLm5hbWUKICAgIG5l
d19wYWQubnVtYmVyID0gcGFkLm51bWJlcgogICAgbmV3X3BhZC5mbGFncyA9IHBhZC5mbGFncwoK
ICAgIHJldHVybiBuZXdfcGFkLm91dHB1dCgpCgoKCiMKIyBNYWluIHByb2dyYW0KIwoKaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGltcG9ydCBvcHRwYXJzZQogICAgdXNhZ2UgPSAiIiJV
c2FnZTogJXByb2cgW29wdGlvbnNdClRoZSBwY2IgZm9vdHByaW50IGNvbnRlbnQgaXMgcmVhZCBm
cm9tIHN0ZGluIGFuZCBmaWx0ZXJlZCwKc2NhbGluZyBQYWQgZW50aXRpZXMgYnkgdGhlIHNwZWNp
ZmllZCBmYWN0b3JzIGFuZCB3cml0aW5nCnRoZSByZXN1bHQgdG8gc3Rkb3V0LiIiIgoKICAgIHBh
cnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSkKICAgIHBhcnNlci5hZGRfb3B0aW9u
KCItLXNjYWxlIiwgZGVzdD0ic2NhbGUiLCB0eXBlPSJmbG9hdCIsCiAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSJzZXQgdW5pZm9ybSBzY2FsZSBmYWN0b3IiKQogICAgcGFyc2VyLmFkZF9vcHRp
b24oIi0tc2NhbGUtbGVuZ3RoIiwgZGVzdD0ic2NhbGVfbGVuZ3RoIiwgdHlwZT0iZmxvYXQiLAog
ICAgICAgICAgICAgICAgICAgICAgaGVscD0ic2V0IGxlbmd0aCAobG9uZyBzaWRlKSBzY2FsZSBm
YWN0b3IiKQogICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tc2NhbGUtd2lkdGgiLCBkZXN0PSJzY2Fs
ZV93aWR0aCIsIHR5cGU9ImZsb2F0IiwKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InNldCB3
aWR0aCAoc2hvcnQgc2lkZSkgc2NhbGUgZmFjdG9yIikKCiAgICBnbG9iYWwgb3B0aW9ucyAgIyBQ
dXQgb3B0aW9ucyBpbiBtb2R1bGUgbmFtZXNwYWNlCiAgICAjIHNvIG90aGVyIGZ1bmN0aW9ucyBj
YW4gcmVhZCBpdC4KCiAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCgog
ICAgIyBDdXJyZW50bHkgbm8gd29yZCBhcmd1bWVudHMgYXJlIHN1cHBvcnRlZC4KICAgICMgVGhl
IGNvbnRlbnQgaXMgcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0IG9ubHkuCiAgICBpZiBsZW4oYXJn
cykgIT0gMDoKICAgICAgICBwYXJzZXIuZXJyb3IoIkV4dHJhIGFyZ3VtZW50IG9uIGNvbW1hbmQg
bGluZS4iKQoKICAgICMgRGVmYXVsdCBzY2FsZSBpcyAxLjAgZm9yIGVpdGhlciBheGlzLgogICAg
aWYgb3B0aW9ucy5zY2FsZSBpcyBOb25lOgogICAgICAgIG9wdGlvbnMuc2NhbGUgPSAxLjAKCiAg
ICAjIEV4cGFuZCBhbnkgdW5pZm9ybSBzY2FsZSBvcHRpb24gdmFsdWUuCiAgICBpZiBvcHRpb25z
LnNjYWxlX3dpZHRoIGlzIE5vbmU6CiAgICAgICAgb3B0aW9ucy5zY2FsZV93aWR0aCA9IG9wdGlv
bnMuc2NhbGUKICAgIGlmIG9wdGlvbnMuc2NhbGVfbGVuZ3RoIGlzIE5vbmU6CiAgICAgICAgb3B0
aW9ucy5zY2FsZV9sZW5ndGggPSBvcHRpb25zLnNjYWxlCgogICAgaW5wdXQgPSBzdGRpbi5yZWFk
KCkKICAgIG91dHB1dCA9IFBBRF9QQVRURVJOMS5zdWIoc2hyaW5rX21hdGNoZWRfcGFkLCBpbnB1
dCkKICAgIHN0ZG91dC53cml0ZShvdXRwdXQpCgoK

--MP_/4zjLx/xXRvKpH34qlwpgEz.--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019