Click here to get back home

Proposal: String::Format::General

 HomeNewsGroups | Search | About
 comp.lang.perl.modules    Post an article   get this group's latest topics as an RSS feed add this group's latest topics to your My MSN content add this group's latest topics to your My Yahoo content
Subject Author Date
Proposal: String::Format::General harryfmudd [AT] comcast [DOT] 12-02-2006
Posted by harryfmudd [AT] comcast [DOT] on December 2, 2006, 1:53 pm
Please log in for more thread options


This is a multi-part message in MIME format.
--------------030109020907070509070903
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

All -

This is the promised proposal - not as prompt as I thought. Must have
dismissed the previous attempt without sending.

The module is actually sort of a meta-formatter, since the user must
provide the code to implement the actual output conversions. The current
POD is attached. This should be considered pre-Alpha, since it has
changed since yesterday, and I am seriously considering passing the
format parameters to the output conversion code as a hash reference
instead of a large number of arguments.

Anyhow, here it is, if I push the correct button.

Tom Wyant

--------------030109020907070509070903
Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0";
name="String-Format-General.txt"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="String-Format-General.txt"

TkFNRQogICAgU3RyaW5nOjpGb3JtYXQ6OkdlbmVyYWwgLSBDb25maWd1cmFibGUgc3ByaW50
Zi1zdHlsZSBmb3JtYXR0ZXIKClNZTk9QU0lTCiAgICAgdXNlIFN0cmluZzo6Rm9ybWF0OjpH
ZW5lcmFsOwogICAgICRmbXQgPSBTdHJpbmc6OkZvcm1hdDo6R2VuZXJhbC0+bmV3ICgKICAg
ICAgICAgZm9ybWF0ID0+ICclTiA9ICUtck4nLAogICAgICAgICBuZXdsaW5lID0+ICJcbiIs
CiAgICAgKTsKICAgICAkZm10LT5kZWZpbmUgKGNvbnZlcnNpb24gPT4KICAgICAgIEwgPT4g
c3ViIHsgICAjIExpdGVyYWwKICAgICAgICAgbXkgKCRmbXQsICRkdGEsICRpbngsICRmbGcs
ICR4ZmcsICR3aWQsICRkcCwgJHN0ciwgJHRybiwgJGNjKSA9IEBfOwogICAgICAgICBzcHJp
bnRmICIlJGZsZypzIiwgJHdpZCwgJGR0YTsKICAgICAgIH0sIDEwLCAnVGV4dCcpOwogICAg
ICRmbXQtPmRlZmluZSAodHJhbnNmb3JtID0+CiAgICAgICByID0+IHN1YiB7ICAgIyBSZXZl
cnNlCiAgICAgICAgIG15ICgkZm10LCAkZHRhLCAkaW54LCAkZmxnLCAkeGZnLCAkd2lkLCAk
ZHAsICRzdHIsICR0cm4sICRjYykgPSBAXzsKICAgICAgICAgc2NhbGFyIHJldmVyc2UgJGR0
YTsKICAgICAgIH0sICdSZXZlcnNlZCcpOwogICAgIHByaW50ICRmbXQtPmhlYWQgKCk7CiAg
ICAgcHJpbnQgJGZtdC0+Zm9ybWF0ICgnRGVzcGVyYWRvJyk7CgogICAgd2hpY2ggd291bGQg
cHJvZHVjZSB0aGUgZm9sbG93aW5nIG91dHB1dDoKCiAgICAgICAgICAgICAgID0gIFJldmVy
c2VkCiAgICAgICBUZXh0ICAgID0gICAgVGV4dCAgCiAgICAgRGVzcGVyYWRvID0gb2RhcmVw
c2VECgogICAgVGhlIGlkZWEgaXMgdGhhdCB5b3UgY2FuIHBhc3MgYXJiaXRyYXJ5IGRhdGEg
aW4sIGFuZCBoYXZlIGFyYml0cmFyeQogICAgZGlzcGxheXMgbWFkZSBvdXQgb2YgdGhlbS4g
U29tZSBsaW1pdGVkIGhlYWRpbmcgY2FwYWJpbGl0eSBpcyBwcm92aWRlZC4KCkRFU0NSSVBU
SU9OCiAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGZvcm1hdHRlciBjbGFzcyB3aGljaCBh
bGxvd3MgaXRzIHVzZXIgdG8KICAgIGltcGxlbWVudCBhcmJpdHJhcnkgc3ByaW50Zi1saWtl
IG9yIHN0cmZ0aW1lLWxpa2UgZm9ybWF0cy4gVGhlIGZvcm1hdHRlcgogICAgY2xhc3MgcHJv
dmlkZXMgZm9ybWF0IHBhcnNpbmcsIGFuZCBtYXJzaGFsaW5nIG9mIG91dHB1dCBmb3IgYm90
aCBkYXRhCiAgICBhbmQgaGVhZGluZ3MuIFRoZSB1c2VyIG9mIHRoZSBjbGFzcyBwcm92aWRl
cyBjb2RlIHRvIGltcGxlbWVudCB0aGUKICAgIGluZGl2aWR1YWwgb3V0cHV0IGNvbnZlcnNp
b24gY2hhcmFjdGVycy4KCiAgICBBIGZvcm1hdCBpcyBiYXNpY2FsbHkgYSBzdHJpbmcgaW50
byB3aGljaCBkYXRhIGFyZSB0byBiZSBpbnNlcnRlZC4gVGhlCiAgICBpbnNlcnRpb24gaXMg
Y29udHJvbGxlZCBieSBjb252ZXJzaW9uIGRlc2NyaXB0b3JzLCB3aGljaCBiZWdpbiB3aXRo
IGEKICAgICclJyAob3Igd2hhdGV2ZXIgdGhlIHZhbHVlIG9mIHRoZSAnbGVhZGVyJyBhdHRy
aWJ1dGUgaXMpLCBlbmQgd2l0aCB0aGUKICAgIGNvbnZlcnNpb24gY2hhcmFjdGVyLCBhbmQg
Y29udGFpbiBhIG51bWJlciBvZiBvcHRpb25hbCBmaWVsZHMgd2hpY2ggbWF5CiAgICBhZmZl
Y3QgdGhlIGNvbnZlcnNpb24uIFRoZXNlIGZpZWxkcyBhcmU6CgogICAgcGFyYW1ldGVyIGlu
ZGV4IC0gYSBudW1iZXIgZm9sbG93ZWQgYnkgYSBsaXRlcmFsIGRvbGxhciBzaWduLCB3aGlj
aCBieQogICAgY29udmVudGlvbiBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgZGF0dW0gdG8gYmUg
Y29udmVydGVkIHdoZW4gZm9ybWF0dGluZyBhCiAgICBsaXN0IHJlZmVyZW5jZS4gVGhpcyB3
aWxsIGJlIGRlZmF1bHRlZCAwLCAxLCAyLCBhbmQgc28gb24gbGVmdCB0byByaWdodAogICAg
aW4gdGhlIGZvcm1hdC4gVGhhdCBpcyB0byBzYXksIGlmICVkIGZvcm1hdHMgYW4gaW50ZWdl
ciBpbiBkZWNpbWFsIGFuZAogICAgZm9ybWF0IHN0cmluZyAnJTIkMDNkICUwM2QgJTAzZCcg
aXMgdXNlZCBvbiBbMSwgMiwgM10sIHRoZSByZXN1bHQgd2lsbAogICAgYmUgJzAwMyAwMDEg
MDAyJy4KCiAgICBmbGFncyAtIHRoZSBzdGFuZGFyZCBzcHJpbnRmIGZsYWdzIGFyZSBhbGxv
d2VkLCBhbmQgeW91IGNhbiBkZWZpbmUgeW91cgogICAgb3duLiBVc2VyLWRlZmluZWQgYW5k
IHN0YW5kYXJkIGZsYWdzIGNhbiBiZSBpbnRlcm1pbmdsZWQgaW4gdGhlIGZvcm1hdAogICAg
c3BlY2lmaWNhdGlvbiwgYnV0IGFyZSBwYXNzZWQgc2VwYXJhdGVseSB0byB0aGUgY29udmVy
c2lvbiByb3V0aW5lLgoKICAgIHdpZHRoIC0gYSBudW1iZXIgd2hpY2ggYnkgY29udmVudGlv
biByZXByZXNlbnRzIHRoZSB3aWR0aCBvZiB0aGUgZmllbGQuCiAgICBUaGUgc3ByaW50ZiAn
KicgaXMgbm90IGFsbG93ZWQuCgogICAgcGxhY2VzIC0gYSBkb3QgKCcuJykgZm9sbG93ZWQg
YnkgYSBudW1iZXIuIEJ5IGNvbnZlbnRpb24gdGhpcyByZXByZXNlbnRzCiAgICB0aGUgbnVt
YmVyIG9mIGRlY2ltYWwgcGxhY2VzIGlmIGFwcGxpY2FibGUuIFRoZSBzcHJpbnRmICcqJyBp
cyBub3QKICAgIGFsbG93ZWQuCgogICAgc3RyaW5nIC0gYW4gYXJiaXRyYXJ5IHN0cmluZywg
cXVvdGVkIGJ5IGN1cmx5IGJyYWNrZXRzIG9yIHdoYXRldmVyIHRoZQogICAgY29udGVudHMg
b2YgdGhlICdxdW90ZScgYXR0cmlidXRlIGFyZS4gVGhpcyBzdHJpbmcgbWF5IG5vdCBjb250
YWluCiAgICB3aGF0ZXZlciBjaGFyYWN0ZXIgY2xvc2VzIHRoZSBxdW90ZSwgYnV0IG1heSBi
ZSB1c2VkIGluIGFueSB3YXkgdGhlCiAgICBjb252ZXJzaW9uIGRlc2lyZXMsIG9yIGlnbm9y
ZWQuCgogICAgdHJhbnNmb3JtIC0gY2hhcmFjdGVycyBzcGVjaWZ5aW5nIGEgdHJhbnNmb3Jt
YXRpb24gb2YgdGhlIGRhdGEgYmVmb3JlCiAgICBpdHMgb3V0cHV0IGNvbnZlcnNpb24uIFRy
YW5zZm9ybWF0aW9ucyBhcmUgdXNlci1kZWZpbmVkLgoKICAgIEZvciBleGFtcGxlLCBvbmUg
Y291bGQgZGVmaW5lIGNvbnZlcnNpb24gJ2YnIGZvciBmbG9hdGluZy1wb2ludCBvdXRwdXQs
CiAgICBhbmQgaW52b2tlIHRoaXMgd2l0aCBmb3JtYXQgJyU1LjJmJy4gT3Igb25lIGNvdWxk
IGRlZmluZSBjb252ZXJzaW9uICdUJwogICAgdG8gb3V0cHV0IHRoZSB0aW1lIG9mIGRheSBh
Y2NvcmRpbmcgdG8gc29tZSBkZWZhdWx0IGZvcm1hdCBvdmVycmlkZGVuIGJ5CiAgICB0aGUg
Y29udGVudHMgb2YgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uLCBh
bmQgdXNlIGZvcm1hdAogICAgJyV7JUk6JU06JVMgJXB9VCcgdG8gb3V0cHV0IHRpbWUgd2l0
aCBhIG1lcmlkaWFuIGluZGljYXRvci4KCiAgICBJbiBhZGRpdGlvbiB0byBmb3JtYXR0aW5n
IGZ1bmN0aW9uYWxpdHksIGEgbnVtYmVyIG9mIG91dHB1dCBtb2RlcyBhcmUKICAgIHByb3Zp
ZGVkLiBEaXNjdXNzaW9uIG9mIHRoZXNlIGlzIGdpdmVuIHVuZGVyIHRoZSBtb2RlIGF0dHJp
YnV0ZS4KCiAgTWV0aG9kcwogICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBmb2xsb3dp
bmcgcHVibGljIG1ldGhvZHM6CgogICAgJGZtdCA9IFN0cmluZzo6Rm9ybWF0OjpHZW5lcmFs
LT5uZXcgKCk7CiAgICAgICAgVGhpcyBtZXRob2QgaW5zdGFudGlhdGVzIGEgbmV3IFN0cmlu
Zzo6Rm9ybWF0OjpHZW5lcmFsIG9iamVjdC4gQW55CiAgICAgICAgYXJndW1lbnRzIGFyZSBw
YXNzZWQgdG8gJGZtdC0+c2V0ICgpOwoKICAgICAgICBOb3RlIHRoYXQgdGhpcyBjYW4gYmUg
Y2FsbGVkIGFzIGEgbm9ybWFsIG1ldGhvZCwgaS5lLgoKICAgICAgICAgbXkgJGZtdDIgPSAk
Zm10LT5uZXcgKCk7CgogICAgICAgIFRoaXMgbWFrZXMgJGZtdDIgYSBjbG9uZSBvZiAkZm10
LiBBbnkgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8KICAgICAgICAkZm10Mi0+c2V0ICgpLgoK
ICAgICRmbXQtPmNsZWFyX2NhY2hlICgpOwogICAgICAgIFRoaXMgbWV0aG9kIGNsZWFycyBk
YXRhIGNhY2hlZCBieSB0aGUgZm9ybWF0dGVyLiBUaGlzIHdvdWxkIGJlIGRvbmUKICAgICAg
ICB0byBmb3JjZSB0aGUgZGF0YSB0byBiZSByZWNvbXB1dGVkLiBDYWNoZWQgZGF0YSBpbmNs
dWRlIHRoZSByZWd1bGFyCiAgICAgICAgZXhwcmVzc2lvbiB1c2VkIHRvIHBhcnNlIHRoZSBm
b3JtYXQgc3RyaW5nLCBhbmQgdGhlIGNvbXB1dGVkIHdpZHRocwogICAgICAgIGZvciB0aGUg
Y29sdW1ucyBiZWluZyBmb3JtYXR0ZWQuIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBkZWZpbmUo
KQogICAgICAgIG1ldGhvZCwgYW5kIGJ5IHRoZSBtdXRhdG9yIGZvciB0aGUgJ2Zvcm1hdCcs
ICdsZWFkZXInLCBhbmQgJ3F1b3RlJwogICAgICAgIGF0dHJpYnV0ZXMuIEl0IHNob3VsZCBi
ZSBjYWxsZWQgYnkgdGhlIG11dGF0b3Igb2YgYW55IHVzZXItYWRkZWQKICAgICAgICBhdHRy
aWJ1dGUgdGhhdCBhZmZlY3RzIGZvcm1hdCBwYXJzaW5nIG9yIGZvcm1hdCgpIG9yIGhlYWQo
KSBvdXRwdXQKICAgICAgICBpbiBhbnkgd2F5LgoKICAgICAgICBUaGlzIG1ldGhvZCBtYXkg
bm90IGJlIGNhbGxlZCBhcyBhIHN0YXRpYyBtZXRob2QuCgogICAgJGZtdDEgPSAkZm10LT5j
bG9uZSAoKTsKICAgICAgICBUaGlzIG1ldGhvZCBkdXBsaWNhdGVzIHRoZSBnaXZlbiBvYmpl
Y3QuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvCiAgICAgICAgY2xvbmUgYW4gZXhpc3Rpbmcg
b2JqZWN0IHRoYW4gdG8gbWFudWZhY3R1cmUgb25lIGZyb20gc2NyYXRjaAogICAgICAgIChh
c3N1bWluZyB5b3UgaGF2ZSBhIHN1aXRhYmxlIGV4aXN0aW5nIG9iamVjdCBvbiBoYW5kKSwg
YmVjYXVzZQogICAgICAgIHRoZXJlIGlzIG5vIG5lZWQgdG8gdmFsaWRhdGUgZGVmaW5lKCkg
Y2FsbHMuCgogICAgICAgIFRoaXMgbWV0aG9kIG1heSBub3QgYmUgY2FsbGVkIGFzIGEgc3Rh
dGljIG1ldGhvZC4KCiAgICAkZm10LT5kZWZpbmUgKCR3aGF0ID0+ICRuYW1lLCAuLi4pOwog
ICAgICAgIFRoaXMgbWV0aG9kIGRlZmluZXMgdGhpbmdzLiBUaGUgJHdoYXQgYXJndW1lbnQg
c2F5cyB3aGF0IGlzIGJlaW5nCiAgICAgICAgZGVmaW5lZCwgYW5kIG11c3QgYmUgb25lIG9m
ICdhdHRyaWJ1dGUnLCAnY29udmVyc2lvbicsICdmbGFnJywKICAgICAgICAnbW9kZScsIG9y
ICd0cmFuc2Zvcm0nLiBUaGUgJG5hbWUgYXJndW1lbnQgbXVzdCBjb25mb3JtIHRvIHRoZQog
ICAgICAgIG5hbWluZyBjb252ZW50aW9ucyBmb3IgdGhlIHRoaW5nIGJlaW5nIGRlZmluZWQs
IGFuZCB0aGUgc3Vic2VxdWVudAogICAgICAgIGFyZ3VtZW50cyBkZXBlbmQgb24gdGhlIHdo
YXQgaXMgYmVpbmcgZGVmaW5lZC4KCiAgICAgICAgSWYgJHdoYXQgZXEgJ2F0dHJpYnV0ZScs
IGEgbmV3IGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzCiAgICAgICAgY3JlYXRl
ZC4gVGhlIG5leHQgYXJndW1lbnQgaXMgZWl0aGVyIGZhbHNlIG9yIGEgcmVmZXJlbmNlIHRv
IHRoZQogICAgICAgIG11dGF0b3IgZm9yIHRoZSBvYmplY3QuIFRoZSBtdXRhdG9yIHNob3Vs
ZCBleHBlY3QgdGhlIGZvbGxvd2luZwogICAgICAgIGFyZ3VtZW50czoKCiAgICAgICAgIC0g
YSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBiZWluZyBtdXRhdGF0ZWQ7CiAgICAgICAgIC0g
dGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBtdXRhdGVkOwogICAgICAgICAtIHRo
ZSBuZXcgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4KCiAgICAgICAgVGhlIG11dGF0b3IgbXVz
dCByZXR1cm4gdGhlIHZhbHVlIHRvIGJlIHBsYWNlZCBpbiB0aGUgYXR0cmlidXRlLiBJZgog
ICAgICAgIHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGl0IHNob3VsZCByYWlzZSBhbiBleGNlcHRp
b24uIEluIHRoZSBjYXNlIG9mIGEKICAgICAgICBmYWxzZSB2YWx1ZSBiZWluZyBwYXNzZWQg
Zm9yIHRoZSBtdXRhdG9yLCB0aGUgbXV0YXRvciBpcyBzdWIKICAgICAgICB7JF9bMl19LgoK
ICAgICAgICBJZiAkd2hhdCBlcSAnY29udmVyc2lvbicsIGEgbmV3IGNvbnZlcnNpb24gaXMg
Y3JlYXRlZC4gVGhlIG5hbWUgbXVzdAogICAgICAgIGJlIGEgc2luZ2xlIGNoYXJhY3RlciBh
bmQgbm90IGJlIGEgZGlnaXQsICcgJywgJy0nLCAnKycsICcjJywgJy4nLAogICAgICAgICck
Jywgb3IgdGhlIHF1b3RlIGNoYXJhY3Rlci4gVGhlIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFy
ZToKCiAgICAgICAgIC0gYSByZWZlcmVuY2UgdG8gY29kZSB0byBpbXBsZW1lbnQgdGhlIGNv
bnZlcnNpb247CiAgICAgICAgIC0gYSBoZWFkaW5nIG9yIGNvZGUgdG8gY29tcHV0ZSB0aGUg
aGVhZGluZzsKICAgICAgICAgLSBhIGxpdGVyYWwgZGVmYXVsdCB3aWR0aCBvciBjb2RlIHRv
IGNvbXB1dGUgdGhlIHdpZHRoLgoKICAgICAgICBJZiAkd2hhdCBlcSAnZmxhZycsIGEgbmV3
IGZsYWcgaXMgY3JlYXRlZC4gVGhlIG5hbWUgbXVzdCBjb25mb3JtIHRvCiAgICAgICAgdGhl
IHNhbWUgcmVzdHJpY3Rpb25zIGFzIGEgJ2NvbnZlcnNpb24nLiBBbnkgZXh0cmEgYXJndW1l
bnRzIGFyZQogICAgICAgIGlnbm9yZWQuCgogICAgICAgIElmICR3aGF0IGVxICdtb2RlJywg
YSBuZXcgb3V0cHV0IG1vZGUgaXMgY3JlYXRlZC4gVGhlIHN1YnNlcXVlbnQKICAgICAgICBh
cmd1bWVudHMgYXJlOgoKICAgICAgICAgLSBhIHJlZmVyZW5jZSB0byBjb2RlIHRvIGltcGxl
bWVudCBmb3JtYXQoKSBvdXRwdXQ7CiAgICAgICAgIC0gYSByZWZlcmVuY2UgdG8gY29kZSB0
byBpbXBsZW1lbnQgaGVhZCgpIG91dHB1dDsKICAgICAgICAgLSBhbiBvcHRpb25hbCByZWZl
cmVuY2UgdG8gY29kZSB0byBzZWUgaWYgdGhlIG1vZGUKICAgICAgICAgICBtYXkgYmUgdXNl
ZCwgYW5kIGlmIHNvIHRvIGxvYWQgYW55IG1vZHVsZXMgbmVlZGVkLgoKICAgICAgICBUaGUg
Zm9ybWF0KCkgb3V0cHV0IGNvZGUgc2hvdWxkIGV4cGVjdCBhcyBpbnB1dCB0aGUgZm9ybWF0
dGVyIG9iamVjdAogICAgICAgIGFuZCBhIGxpc3Qgb2YgZm9ybWF0dGVkIGRhdGEgdG8gYmUg
aW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGxpbmUgYW5kCiAgICAgICAgcmV0dXJuZWQuIFRo
ZSBoZWFkKCkgb3V0cHV0IGNvZGUgc2hvdWxkIGV4cGVjdCBhcyBpbnB1dCB0aGUKICAgICAg
ICBmb3JtYXR0ZXIgb2JqZWN0IGFuZCBhIGxpc3Qgb2YgaGVhZGVycywgYW5kIHJldHVybiBh
IGxpc3Qgb2YgaGVhZGVyCiAgICAgICAgbGluZXMuIFRoZSBjaGVjayBjb2RlIHNob3VsZCBl
eHBlY3QgYXMgaW5wdXQgdGhlIGZvcm1hdHRlciBvYmplY3QsCiAgICAgICAgYW5kIHJhaXNl
IGFuIGV4Y2VwdGlvbiBpZiB0aGUgbW9kZSBtYXkgbm90IGJlIHVzZWQuCgogICAgICAgIElm
ICR3aGF0IGVxICd0cmFuc2Zvcm0nLCBhIG5ldyB0cmFuc2Zvcm0gaXMgY3JlYXRlZC4gVGhl
IG5hbWUgbXVzdAogICAgICAgIGNvbmZvcm0gdG8gdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFz
IGEgJ2NvbnZlcnNpb24uIFRoZSBzdWJzZXF1ZW50CiAgICAgICAgYXJndW1lbnRzIGFyZToK
CiAgICAgICAgIC0gYSByZWZlcmVuY2UgdG8gY29kZSB0byBpbXBsZW1lbnQgdGhlIHRyYW5z
Zm9ybTsKICAgICAgICAgLSBhIGhlYWRpbmcgb3IgY29kZSB0byBpbXBsZW1lbnQgdGhlIGhl
YWRpbmcuCgogICAgICAgIE9uY2UgYW4gYXR0cmlidXRlLCBjb252ZXJzaW9uLCBmbGFnLCBt
b2RlLCBvciB0cmFuc2Zvcm0gaXMgZGVmaW5lZAogICAgICAgIGl0IG1heSBub3QgYmUgZGVs
ZXRlZC4gSXQgbWF5IGJlIHJlZGVmaW5lZCBieSB0aGUgY2xhc3MgKGkuZS4KICAgICAgICBu
YW1lc3BhY2UpIHRoYXQgbWFkZSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiwgb3IgYnkgYSBz
dWJjbGFzcyBvZgogICAgICAgIHRoYXQgY2xhc3MsIHVzaW5nIHRoZSBkZWZpbmUoKSBtZXRo
b2Q7IGJ1dCBpdCBtYXkgbm90IGJlIG1hZGUgaW50bwogICAgICAgIHNvbWV0aGluZyBkaWZm
ZXJlbnQuIFRoYXQgaXMsIGlmIGEgY2xhc3MgaGFzIGRlZmluZWQgYXR0cmlidXRlICd4JywK
ICAgICAgICBhIHN1YmNsYXNzIG1heSBub3QgbWFrZSAneCcgaW50byBhIGNvbnZlcnNpb24s
IGZsYWcsIG9yIHRyYW5zZm9ybSwKICAgICAgICB0aG91Z2ggaXQgY2FuIGNoYW5nZSBpdHMg
bXV0YXRvci4KCiAgICAgICAgRXhjZXB0IGFzIG5vdGVkIGFib3ZlLCB3aGVuIGNvZGUgaXMg
Y2FsbGVkIGZvciBpdCBzaG91bGQgZXhwZWN0IHRvCiAgICAgICAgYmUgY2FsbGVkIHdpdGgg
dGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CgogICAgICAgICAkZm10IDogVGhlIHJlbGV2YW50
IFN0cmluZzo6Rm9ybWF0OjpHZW5lcmFsIG9iamVjdDsKICAgICAgICAgJGR0YSA6IFRoZSBk
YXRhIHRvIGJlIGZvcm1hdHRlZCAodW5kZWYgaWYgbm9uZSk7CiAgICAgICAgICRpbnggOiBU
aGUgcGFyYW1ldGVyIGluZGV4IHRvIGJlIGNvbnZlcnRlZCAoZnJvbSB6ZXJvKTsKICAgICAg
ICAgJGZsZyA6IFRoZSBzcHJpbnRmLXN0eWxlIGZsYWdzICgnJyBpZiBub25lKTsKICAgICAg
ICAgJHhmZyA6IFRoZSBleHRlbmRlZCBmbGFncyAoJycgaWYgbm9uZSk7CiAgICAgICAgICR3
aWQgOiBUaGUgZmllbGQgd2lkdGggKCcnIGlmIG5vbmUpOwogICAgICAgICAkZHAgIDogVGhl
IGRlY2ltYWwgcGxhY2VzICh1bmRlZiBpZiBub25lKTsKICAgICAgICAgJHN0ciA6IFRoZSBh
cmJpdHJhcnkgc3RyaW5nICh1bmRlZiBpZiBub25lKTsKICAgICAgICAgJHRybiA6IFRoZSB0
cmFuc2Zvcm0gY2hhcmFjdGVycyAoJycgaWYgbm9uZSk7CiAgICAgICAgICRjYyAgOiBUaGUg
Y29udmVyc2lvbiBjaGFyYWN0ZXIuCgogICAgICAgIFdoYXQgdGhlIGNvZGUgcmV0dXJucyBk
ZXBlbmRzIG9uIGl0cyBwdXJwb3NlLgoKICAgICAgICBUaGUgY29udmVyc2lvbiBjb2RlIGlz
IGV4cGVjdGVkIHRvIHJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGEuCgogICAgICAgIEhlYWRp
bmcgY29kZSBpcyBleHBlY3RlZCB0byByZXR1cm4gdGhlIHJlbGV2YW50IGhlYWRpbmcsIGFz
IGVpdGhlciBhCiAgICAgICAgc3RyaW5nIG9yIGEgbGlzdCBvZiBzdHJpbmdzLiBUaGUgJGR0
YSBhcmd1bWVudCB3aWxsIGJlIHdoYXRldmVyCiAgICAgICAgYXJndW1lbnQgd2FzIHBhc3Nl
ZCB0byB0aGUgaGVhZCgpIGNhbGwuCgogICAgICAgIFRyYW5zZm9ybSBjb2RlIGlzIGV4cGVj
dGVkIHRvIHJldHVybiB0aGUgdHJhbnNmb3JtZWQgZGF0YS4KCiAgICAgICAgV2lkdGggY29k
ZSBpcyBleHBlY3RlZCB0byByZXR1cm4gdGhlIHdpZHRoLCB3aGljaCB3aWxsIGJlIHBhc3Nl
ZCB0bwogICAgICAgIGhlYWRpbmcsIHRyYW5zZm9ybSwgYW5kIGNvbnZlcnNpb24gY29kZSBp
biB0aGUgJHdpZCBhcmd1bWVudC4gVGhlCiAgICAgICAgJGR0YSBhcmd1bWVudCB3aWxsIGJl
IHVuZGVmLCBhbmQgdGhlICR3aWQgYXJndW1lbnQgbWF5IGJlIGVtcHR5LgoKICAgICAgICBU
aGlzIG1ldGhvZCBtYXkgbm90IGJlIGNhbGxlZCBhcyBhIHN0YXRpYyBtZXRob2QuCgogICAg
ICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG9iamVjdCBpdHNlbGYuCgogICAgJHdoYXQg
PSAkZm10LT5kZWZpbmVkX2FzICgkbmFtZSk7CiAgICAgICAgVGhpcyBtZXRob2QgcmV0dXJu
cyB0aGUgdGhpbmcgdGhlICRuYW1lIGlzIGRlZmluZWQgYXMsIGFzIG9uZSBvZiB0aGUKICAg
ICAgICBzdHJpbmdzICdhdHRyaWJ1dGUnLCAnY29udmVyc2lvbicsICdmbGFnJywgJ21vZGUn
LCBvciAndHJhbnNmb3JtJy4KICAgICAgICBJZiB0aGUgJG5hbWUgaXMgbm90IGRlZmluZWQs
IHVuZGVmIGlzIHJldHVybmVkLgoKICAgICAgICBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVk
IGFzIGEgc3RhdGljIG1ldGhvZC4KCiAgICAkd2hvID0gJGZtdC0+ZGVmaW5lZF9ieSAoJG5h
bWUpOwogICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNsYXNz
IChpLmUuIG5hbWVzcGFjZSkgdGhhdAogICAgICAgIGRlZmluZWQgdGhlIGdpdmVuIHRoaW5n
LiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgdW5kZWYgaXMgcmV0dXJuZWQuCgogICAgICAgIFRo
aXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgYXMgYSBzdGF0aWMgbWV0aG9kLgoKICAgICR0ZXh0
ID0gJGZtdC0+Zm9ybWF0ICgkZGF0YSk7CiAgICAgICAgVGhpcyBtZXRob2QgZm9ybWF0cyB0
aGUgZ2l2ZW4gJGRhdGEgaW50byB0ZXh0IGluIHRoZSBjdXJyZW50IG91dHB1dAogICAgICAg
IG1vZGUsIGJ5IGFwcGx5aW5nIHRoZSBkZWZpbmVkIGNvbnZlcnNpb25zLCBmbGFncywgYW5k
IHRyYW5zZm9ybXMgdG8KICAgICAgICB0aGUgJ2Zvcm1hdCcgYXR0cmlidXRlLgoKICAgICAg
ICBUaGlzIG1heSBub3QgYmUgY2FsbGVkIGFzIGEgc3RhdGljIG1ldGhvZC4KCiAgICAkdmFs
dWUgPSAkZm10LT5nZXQgKCRuYW1lKTsKICAgICAgICBUaGlzIG1ldGhvZCByZXRyaWV2ZXMg
dGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBhdHRyaWJ1dGUuIEl0IG1heSBub3QKICAgICAgICBi
ZSBjYWxsZWQgYXMgYSBzdGF0aWMgbWV0aG9kLgoKICAgICRoYXNoX3JlZmVyZW5jZSA9ICRm
bXQtPmdldF9jYWNoZSAoJG5hbWUpOwogICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhl
IGNvbnRlbnRzIG9mIHRoZSBuYW1lZCBjYWNoZS4gVGhlIHJldHVybiB3aWxsCiAgICAgICAg
YmUgYSBoYXNoIHJlZmVyZW5jZSwgYW5kIHRoaXMgY2FjaGUgd2lsbCBiZSBjcmVhdGVkIGlm
IG5lY2Vzc2FyeS4KCiAgICAgICAgVGhlIGNhY2hlIGlzIGEgaGFzaCBhdHRhY2hlZCB0byB0
aGUgb2JqZWN0LiBVc2VyLWRlZmluZWQgY29kZSBtYXkKICAgICAgICB1c2UgdGhlIGNhY2hl
LCBidXQgYW55IHVzZSBvZiB0aGUgY2FjaGUgc2hvdWxkIGJlIHByZXBhcmVkIHRvCiAgICAg
ICAgY29tcHV0ZSB3aGF0ZXZlciBpcyBuZWVkZWQgaW4gY2FzZSB0aGUgY2FjaGUgaGFzIGJl
ZW4gY2xlYXJlZC4KCiAgICAgICAgQ2FjaGUgbmFtZXMgYmVnaW5uaW5nIHdpdGggYW4gdW5k
ZXJzY29yZSBhcmUgcmVzZXJ2ZWQgdG8gdGhpcyBjbGFzcy4KCiAgICAgICAgSXQgaXMgcmVj
b21tZW5kZWQgdGhhdCB0aGUgdXNlciBjcmVhdGUgYSBzaW5nbGUgYXBwcm9wcmlhdGVseS1u
YW1lZAogICAgICAgIGNhY2hlLCBhbmQgc3RvcmUgYWxsIHVzZXItZGVmaW5lZCBkYXRhIHVu
ZGVyIHRoaXMgbmFtZS4gVGhlCiAgICAgICAgcmVjb21tZW5kZWQgaWRpb20gZm9yIGFjY2Vz
c2luZyBkYXRhIGluIHRoaXMgY2FjaGUgaXMgc29tZXRoaW5nIGxpa2UKCiAgICAgICAgIG15
ICRteV9jYWNoZSA9ICRmbXQtPmdldF9jYWNoZSAoJ215X2NhY2hlJyk7CiAgICAgICAgIG15
ICRjYWNoZWRfZGF0YSA9ICRteV9jYWNoZS0+e2NhY2hlZF9kYXRhfSB8fD0gZG8gewogICAg
ICAgICAjIENvZGUgdG8gY29tcHV0ZSB0aGUgY2FjaGVkIGRhdGEuIEJlY2F1c2UgJG15X2Nh
Y2hlCiAgICAgICAgICMgaXMgaW4gdGhlIGNhY2hlLCB0aGUgY29tcHV0ZWQge2NhY2hlZF9k
YXRhfSB3aWxsCiAgICAgICAgICMgYmUgYWxzby4KICAgICAgICAgfTsKCiAgICAgICAgVGhp
cyBtZXRob2QgbWF5IG5vdCBiZSBjYWxsZWQgYXMgYSBzdGF0aWMgbWV0aG9kLgoKICAgIEBs
aW5lcyA9ICRmbXQtPmhlYWQgKCRkdGEpOwogICAgICAgIFRoaXMgbWV0aG9kIGdlbmVyYXRl
cyBhbGwgaGVhZGVycyBpbiB0aGUgY3VycmVudCBvdXRwdXQgbW9kZS4KCiAgICAgICAgVGhl
ICRkdGEgYXJndW1lbnQgaXMgb3B0aW9uYWwuIElmIGl0IGlzIHByb3ZpZGVkIGl0IHdpbGwg
YmUgcGFzc2VkCiAgICAgICAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNmb3JtcycgYW5kIGNv
bnZlcnNpb25zJyBoZWFkZXIgY29kZSBhcyB0aGUKICAgICAgICBzZWNvbmQgYXJndW1lbnQ7
IG90aGVyd2lzZSB1bmRlZiB3aWxsIGJlIHBhc3NlZC4KCiAgICAgICAgVGhlIGhlYWRpbmcg
Zm9yIGVhY2ggY29udmVyc2lvbiBpcyBmb3JtZWQgYnkgdGhlIGhlYWRpbmdzIG9mIHRoZQog
ICAgICAgIHRyYW5zZm9ybXMgKGlmIGFueSkgYW5kIGNvbnZlcnNpb24gY2hhcmFjdGVyIGZv
ciBlYWNoIGNvbnZlcnNpb24sCiAgICAgICAgam9pbmVkIHdpdGggJyAnLgoKICAgICAgICBJ
ZiB0aGUgcmV2ZXJzZV9oZWFkaW5ncyBhdHRyaWJ1dGUgaXMgdHJ1ZSAoaW4gdGhlIFBlcmwg
c2Vuc2UpIHRoZQogICAgICAgIGluZGl2aWR1YWwgaGVhZGluZ3Mgd2lsbCBiZSByZXZlcnNl
ZCBiZWZvcmUgYmVpbmcgam9pbmVkLCBpbiBhIGNydWRlCiAgICAgICAgYXR0ZW1wdCB0byBn
aXZlIGEgbW9yZSBuYXR1cmFsIHdvcmQgb3JkZXIgaW4gKGUuZy4pIHRoZSBSb21hbmNlCiAg
ICAgICAgbGFuZ3VhZ2VzLgoKICAgICAgICBJZiB0aGUgbWFrZV90ZXh0IGF0dHJpYnV0ZSBp
cyB0cnVlIChpbiB0aGUgUGVybCBzZW5zZSkgdGhlCiAgICAgICAgcmV2ZXJzZV9oZWFkaW5n
cyBhdHRyaWJ1dGUgaXMgaWdub3JlZC4gSW5zdGVhZCwgdGhlIGZpZWxkIGhlYWRpbmcsCiAg
ICAgICAgb25jZSBidWlsdCwgaXMgc3VibWl0dGVkIHRvIG1ha2V0ZXh0LCBhbmQgdGhlIHJl
c3VsdCBpcyB1c2VkIGFzIHRoZQogICAgICAgIGNvbHVtbiBoZWFkaW5nLiBJZiB0aGUgbWFr
ZXRleHQgY2FsbCBmYWlscywgdGhlIGluZGl2aWR1YWwgcGllY2VzIG9mCiAgICAgICAgdGhl
IGhlYWRpbmcgYXJlIHN1Ym1pdHRlZCB0byBtYWtldGV4dCwgYW5kIHRoZSByZXN1bHQgY29u
Y2F0ZW5hdGVkLgogICAgICAgIFRoZSBpbmRpdmlkdWFsIHRyYW5zbGF0ZWQgaGVhZGluZ3Mg
YXJlIHJldmVyc2VkIGJlZm9yZSBjb25jYXRlbmF0aW9uCiAgICAgICAgaWYgbWFrZXRleHQg
KCdfcmV2ZXJzZV9oZWFkaW5ncycpIGlzIHRydWUuCgogICAgICAgIFRoaXMgbWV0aG9kIG1h
eSBub3QgYmUgY2FsbGVkIGFzIGEgc3RhdGljIG1ldGhvZC4KCiAgICAkZm10ID0gJGZtdC0+
c2V0ICgkbmFtZSwgJHZhbHVlIC4uLikKICAgICAgICBUaGlzIG1ldGhvZCBjaGFuZ2VzIHRo
ZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIGF0dHJpYnV0ZXMuIE1vcmUgdGhhbgogICAgICAgIG9u
ZSBhdHRyaWJ1dGUvdmFsdWUgcGFpciBtYXkgYmUgZ2l2ZW4sIGJ1dCB0aGUgbmFtZWQgYXR0
cmlidXRlcyBtdXN0CiAgICAgICAgZXhpc3QuCgogICAgICAgIFRoaXMgbWV0aG9kIG1heSBu
b3QgYmUgY2FsbGVkIGFzIGEgc3RhdGljIG1ldGhvZC4KCiAgICAldXNlZCA9ICRmbXQtPnVz
ZWQgKCk7CiAgICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGhhc2ggZW51bWVyYXRpbmcg
dGhlIGNvbnZlcnNpb24gY2hhcmFjdGVycwogICAgICAgIHVzZWQgYnkgdGhlIGN1cnJlbnQg
Zm9ybWF0LiBUaGUgaGFzaCBrZXlzIGFyZSB0aGUgY29udmVyc2lvbgogICAgICAgIGNoYXJh
Y3RlcnMsIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggY2hh
cmFjdGVyIGlzCiAgICAgICAgdXNlZC4gQ29udmVyc2lvbiBjaGFyYWN0ZXJzIG5vdCB1c2Vk
IHdpbGwgbm90IGFwcGVhciBpbiB0aGUgaGFzaC4KCiAgICAgICAgVGhpcyBtZXRob2QgbWF5
IG5vdCBiZSBjYWxsZWQgYXMgYSBzdGF0aWMgbWV0aG9kLgoKICBBdHRyaWJ1dGVzCiAgICBU
aGUgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGJlbG93LCBsaXN0ZWQgYnkgbmFtZSwgZm9s
bG93ZWQgYnkgdGhlIGRhdGEKICAgIHR5cGUgaW4gcGFyZW50aGVzZXMuIFRoZSBkYXRhIHR5
cGVzIGFyZToKCiAgICBib29sZWFuIC0gQW55IHZhbHVlIGlzIHZhbGlkLCBhbmQgaXQgd2ls
bCBiZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8KICAgIFBlcmwncyBub3Rpb24gb2YgdHJ1
dGggYW5kIGZhbHNlaG9vZCAodW5kZWYsIDAsIGFuZCAnJyBhcmUgZmFsc2UsCiAgICBldmVy
eXRoaW5nIGVsc2UgaXMgdHJ1ZSk7CgogICAgY2hhcmFjdGVyIC0gVGhlIGF0dHJpYnV0ZSBt
dXN0IGJlIGEgc2luZ2xlIGNoYXJhY3RlciwgYW5kIGNlcnRhaW4KICAgIGNoYXJhY3RlcnMg
bWF5IGJlIGludmFsaWQ7CgogICAgaGFuZGxlIC0gc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0
aGUgYXR0cmlidXRlOwoKICAgIHN0cmluZyAtIEFueSBjaGFyYWN0ZXJzIGFyZSB2YWxpZC4K
CiAgICBJbiBhZGRpdGlvbiwgdGhlIHBhcmVudGhlc2VzIG1heSBjb250YWluIHRoZSB3b3Jk
ICdjYWNoZWQnIGlmIHRoZSBjbGFzcwogICAgY2FjaGVzIHJlc3VsdHMgY29tcHV0ZWQgZnJv
bSB0aGlzIGF0dHJpYnV0ZS4gQ2hhbmdpbmcgc3VjaCBhdHRyaWJ1dGVzCiAgICB3aWxsIGNh
dXNlIHRoZSBjYWNoZSB0byBiZSBmbHVzaGVkLCBhbmQgdGhlIGNvbXB1dGF0aW9ucyB3aWxs
IGJlIHJlZG9uZQogICAgdGhlIG5leHQgdGltZSB0aGV5IGFyZSBuZWVkZWQuCgogICAgVGhp
cyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgcHVibGljIGF0dHJpYnV0ZXM6Cgog
ICAgZm9ybWF0IChzdHJpbmcsIGNhY2hlZCkKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250
YWlucyB0aGUgZm9ybWF0IHN0cmluZyB0byBiZSB1c2VkIGJ5IHRoZQogICAgICAgIGZvcm1h
dCgpLCBoZWFkKCksIGFuZCB1c2VkKCkgbWV0aG9kcy4KCiAgICAgICAgVGhlcmUgaXMgbm8g
ZGVmYXVsdC4KCiAgICBsZWFkZXIgKHN0cmluZywgY2FjaGVkKQogICAgICAgIFRoaXMgYXR0
cmlidXRlIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyIHRoYXQgaW50cm9kdWNlcyBhIGNvbnZl
cnNpb24uCgogICAgICAgIFRoZSBkZWZhdWx0IGlzICclJy4KCiAgICBtYWtlX3RleHQgKHN0
cmluZyBvciBoYW5kbGUpCiAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGVpdGhl
ciB0aGUgbmFtZSBvZiBhIHN1YmNsYXNzIG9mCiAgICAgICAgTG9jYWxlOjpNYWtlVGV4dCBv
ciBhIGxhbmd1YWdlIGhhbmRsZSBnZW5lcmF0ZWQgYnkgY2FsbGluZyB0aGUKICAgICAgICBj
bGFzcycgZ2V0X2hhbmRsZSBtZXRob2QuIElmIGEgc3ViY2xhc3MgbmFtZSBpcyBzcGVjaWZp
ZWQsCiAgICAgICAgZ2V0X2hhbmRsZSB3aWxsIGJlIGNhbGxlZCBvbiB0aGF0IGNsYXNzLCBh
bmQgdGhlIG1ha2VfdGV4dCBhdHRyaWJ1dGUKICAgICAgICBzZXQgdG8gdGhlIHJlc3VsdCBv
ZiB0aGUgZ2V0X2hhbmRsZSBtZXRob2QuCgogICAgICAgIEFzIGEgY29uc2VxdWVuY2Ugb2Yg
dGhpcywgaWYgeW91IHdpc2ggdG8gY2hhbmdlIGxhbmd1YWdlcyBpbgogICAgICAgIG1pZC1z
dHJlYW0sIHlvdSBuZWVkIHRvIHJlc2V0IHRoZSBtYWtlX3RleHQgYXR0cmlidXRlLiBTb21l
dGhpbmcKICAgICAgICBsaWtlCgogICAgICAgICAkZm10LT5zZXQgKG1ha2VfdGV4dCA9PiBy
ZWYgJGZtdC0+Z2V0ICgnbWFrZV90ZXh0JykpCgogICAgICAgIHNob3VsZCBkbyB0aGUgam9i
LCB0aG91Z2ggZGVwZW5kaW5nIG9uIGhvdyB0aGUgY29udmVyc2lvbnMgYXJlCiAgICAgICAg
aW1wbGVtZW50ZWQgeW91IG1heSBhbHNvIG5lZWQgdG8gZG8gdGhpbmdzIGxpa2UgY2FsbAog
ICAgICAgIFBPU0lYOjpzZXRsb2NhbGUuCgogICAgICAgIFRoZSBoZWFkKCkgbWV0aG9kIG1h
a2VzIHVzZSBvZiB0aGlzIGF0dHJpYnV0ZSB0byB0cmFuc2xhdGUgZmllbGQKICAgICAgICBo
ZWFkaW5ncywgYnV0IGl0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBvdGhlciBwdXJwb3Nlcy4K
CiAgICAgICAgSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IChpLmUuIHRydWUgaW4gdGhlIFBl
cmwgc2Vuc2UpIHRoZQogICAgICAgIHJldmVyc2VfaGVhZGluZ3MgYXR0cmlidXRlIGlzIGln
bm9yZWQuCgogICAgICAgIFRoZSBkZWZhdWx0IGlzIHVuZGVmLgoKICAgIG1vZGUgKHN0cmlu
ZykKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250cm9scyB0aGUgb3V0cHV0IHByb2R1Y2Vk
IGJ5IHRoZSBmb3JtYXQoKSBhbmQKICAgICAgICBoZWFkKCkgbWV0aG9kcy4gSW5pdGlhbGx5
LCB2YWxpZCB2YWx1ZXMgYXJlOgoKICAgICAgICBjc3YgLSBDYXVzZXMgdGhlIG91dHB1dCB0
byBiZSBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzLiBUaGUgaGVhZCgpCiAgICAgICAgbWV0aG9k
IHJldHVybnMgb25seSBvbmUgbGluZSwgd2l0aCBhbGwgaGVhZGluZ3MgZm9yIGEgY29sdW1u
IGJlaW5nCiAgICAgICAgam9pbmVkIGJ5IHNpbmdsZSBzcGFjZXMuIENvbnRlbnRzIG9mIHRo
ZSAnZm9ybWF0JyBhdHRyaWJ1dGUgb3RoZXIKICAgICAgICB0aGFuIGNvbnZlcnNpb24gc3Bl
Y2lmaWNhdGlvbnMgYXJlIGlnbm9yZWQsIGFuZCBsZWFkaW5nIGFuZCB0cmFpbGluZwogICAg
ICAgIHNwYWNlcyB3aWxsIGJlIHN0cmlwcGVkIGJlZm9yZSBvdXRwdXQuIFRoZSBUZXh0OjpD
U1YgbW9kdWxlIGlzCiAgICAgICAgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIGxvYWRlZCBpZiBu
ZWVkZWQuCgogICAgICAgIGh0bWxfdGFibGUgLSBDYXVzZXMgdGhlIG91dHB1dCB0byBiZSBo
dG1sIHRhYmxlIHJvd3MuIFRoZSBoZWFkKCkKICAgICAgICBtZXRob2QgZW5jbG9zZXMgdGhl
IGhlYWRpbmdzIGluIDx0aD4gdGFncywgYW5kIHRoZSB3aG9sZSByb3cgaW4gPHRyPgogICAg
ICAgIHRhZ3MuIE9ubHkgb25lIHRhYmxlIHJvdyBpcyBnZW5lcmF0ZWQgYnkgdGhlIGhlYWQo
KSBtZXRob2QsIHdpdGggYWxsCiAgICAgICAgaGVhZGluZ3MgZm9yIGEgY29sdW1uIGJlaW5n
IGpvaW5lZCBieSBzaW5nbGUgc3BhY2VzLiBUaGUgZm9ybWF0KCkKICAgICAgICBtZXRob2Qg
ZW5jbG9zZXMgdGhlIGRhdGEgaW4gPHRkPiB0YWdzLCBhbmQgdGhlIHdob2xlIHJvdyBpbiA8
dHI+CiAgICAgICAgdGFncy4gQ29udGVudHMgb2YgdGhlICdmb3JtYXQnIGF0dHJpYnV0ZSBv
dGhlciB0aGFuIGNvbnZlcnNpb24KICAgICAgICBzcGVjaWZpY2F0aW9ucyBhcmUgaWdub3Jl
ZCwgYW5kIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyB3aWxsIGJlCiAgICAgICAgc3Ry
aXBwZWQgYmVmb3JlIG91dHB1dC4gVGhlIEhUTUw6OkVudGl0aWVzIG1vZHVsZSBpcyByZXF1
aXJlZCwgYW5kCiAgICAgICAgd2lsbCBiZSBsb2FkZWQgaWYgbmVlZGVkLgoKICAgICAgICB0
ZXh0IC0gQ2F1c2VzIHRoZSBvdXRwdXQgdG8gYmUgdGV4dCBmb3JtYXR0ZWQgcGVyIHRoZSBj
b250ZW50cyBvZgogICAgICAgIHRoZSAnZm9ybWF0JyBhdHRyaWJ1dGUuIFRoZSBoZWFkKCkg
bWV0aG9kIG1heSByZXR1cm4gbXVsdGlwbGUgbGluZXMKICAgICAgICBvZiB0ZXh0IGlmIG5l
Y2Vzc2FyeS4gTm8gYWRkaXRpb25hbCBtb2R1bGVzIGFyZSBuZWVkZWQuCgogICAgICAgIHRz
diAtIFNpbWlsYXIgdG8gJ2NzdicsIGJ1dCB0aGUgb3V0cHV0IGlzIHRhYi1zZXBhcmF0ZWQg
YW5kIHN0cmluZ3MKICAgICAgICBhcmUgbm90IHF1b3RlZC4gTm8gYWRkaXRpb25hbCBtb2R1
bGVzIGFyZSBuZWVkZWQuCgogICAgICAgIFRoZSB1c2VyIG1heSBvZiBjb3Vyc2UgZGVmaW5l
IGFkZGl0aW9uYWwgb3V0cHV0IG1vZGVzIHVzaW5nIHRoZQogICAgICAgIGRlZmluZSgpIG1l
dGhvZC4KCiAgICAgICAgVGhlIGRlZmF1bHQgaXMgJ3RleHQnLgoKICAgIG5ld2xpbmUgKHN0
cmluZykKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBzdHJpbmcgdG8gcGxh
Y2UgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUKICAgICAgICBvZiB0ZXh0IGdlbmVyYXRlZCBi
eSB0aGUgZm9ybWF0KCkgYW5kIGhlYWQoKSBtZXRob2RzIGluICd0ZXh0JywKICAgICAgICAn
aHRtbF9oZWFkJywgYW5kICd0c3YnIG1vZGVzLiBJbiAnY3N2JyBtb2RlIHRoZSByZXR1cm4g
aXMgcHJvdmlkZWQKICAgICAgICBieSBUZXh0OjpDU1YuIFRoZSB1c2Ugb2YgdGhpcyBpbiBh
IHVzZXItZGVmaW5lZCBtb2RlIGlzIGRldGVybWluZWQKICAgICAgICBieSB0aGUgZGVmaW5p
dGlvbiBvZiB0aGUgbW9kZS4KCiAgICAgICAgVGhlIGRlZmF1bHQgaXMgJycuCgogICAgcXVv
dGUgKGNoYXJhY3RlciwgY2FjaGVkKQogICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmll
cyB0aGUgY2hhcmFjdGVyIHRvIGRlbGltaXQgdGhlICdzdHJpbmcnCiAgICAgICAgcG9ydGlv
biBvZiB0aGUgY29udmVyc2lvbi4gVGhlIHNhbWUgY2hhcmFjdGVyIHdpbGwgYmUgdXNlZCB0
bwogICAgICAgIGRlbGltaXQgdGhlIGVuZCB1bmxlc3MgdGhlIGNoYXJhY3RlciBpcyBhIGJy
YWNrZXQgb2Ygc29tZSBzb3J0LCBpbgogICAgICAgIHdoaWNoIGNhc2UgdGhlIG9wcG9zaXRl
IGJyYWNrZXQgdGVybWluYXRlcyB0aGUgc3RyaW5nLiBZZXMsIHRoaXMKICAgICAgICBtZWFu
cyB0aGF0IGlmIHlvdSBiZWdpbiB0aGUgc3RyaW5nIHdpdGggYSByaWdodC1oYW5kIGJyYWNr
ZXQgeW91CiAgICAgICAgbXVzdCBlbmQgaXQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBsZWZ0
LWhhbmQgYnJhY2tldC4KCiAgICAgICAgRGlnaXRzIGFuZCB0aGUgY2hhcmFjdGVycyAnICcs
ICcrJywgJy0nLCAnIycsICckJywgYW5kICcuJyBhcmUKICAgICAgICBpbnZhbGlkLCBhcyBh
cmUgY2hhcmFjdGVycyBkZWZpbmVkIGFzIGhhdmluZyBvdGhlciBmdW5jdGlvbnMgKGUuZy4K
ICAgICAgICBjb252ZXJzaW9ucykuIEFuIGF0dGVtcHQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUg
dG8gb25lIG9mIHRoZXNlIHdpbGwKICAgICAgICBjcm9hay4KCiAgICAgICAgVGhlIGRlZmF1
bHQgaXMgJ3snLCB3aGljaCBtZWFucyAnfScgdGVybWluYXRlcyB0aGUgc3RyaW5nLgoKICAg
IHJldmVyc2VfaGVhZGluZ3MgKGJvb2xlYW4pCiAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3Bl
Y2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCBpbmRpdmlkdWFsIHRyYW5zZm9ybSBhbmQKICAg
ICAgICBjb252ZXJzaW9uIGhlYWRpbmdzIGFyZSBjb25jYXRlbmF0ZWQgdG8gbWFrZSBhIGZp
ZWxkIGhlYWRpbmcuIElmCiAgICAgICAgdHJ1ZSAoaW4gdGhlIFBlcmwgc2Vuc2UpIHRoZXkg
YXJlIHJldmVyc2VkLgoKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBpcyBpZ25vcmVkIGlmIHRo
ZSBtYWtlX3RleHQgYXR0cmlidXRlIHdhcyBzcGVjaWZpZWQuCgogICAgICAgIFRoZSBkZWZh
dWx0IGlzIHVuZGVmIChpLmUuIGZhbHNlKS4KCiAgICB0cmltIChib29sZWFuKQogICAgICAg
IFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvcm1hdCgp
IG1ldGhvZCB3aGVuIGEKICAgICAgICBkYXR1bSBkb2VzIG5vdCBmaXQgaW4gaXRzIGZpZWxk
LiBJZiB0cnVlLCB0aGUgZGF0dW0gd2lsbCBiZQogICAgICAgIHRydW5jYXRlZCBvbiB0aGUg
cmlnaHQuIElmIGZhbHNlLCB0aGUgZGF0dW0gd2lsbCBub3QgYmUgdHJ1bmNhdGVkLgoKICAg
ICAgICBIZWFkaW5ncyBhcmUgYWx3YXlzIHRydW5jYXRlZC4KCiAgICAgICAgVGhlIGRlZmF1
bHQgaXMgdW5kZWYgKGkuZS4gZmFsc2UpLgoKU1VCQ0xBU1NJTkcKICAgIFVubGVzcyB5b3Ug
aW50ZW5kIHRvIHVzZSB5b3VyIGZvcm1hdHMgaW4gbW9yZSB0aGFuIG9uZSBzY3JpcHQgeW91
IGRvIG5vdAogICAgbmVlZCB0byBzdWJjbGFzcy4gSW5zdGVhZCwgaW5zdGFudGlhdGUgYW4g
b2JqZWN0LCBkZWZpbmUoKSB3aGF0IHlvdSBuZWVkCiAgICBvbiBpdCwgYW5kIHRoZW4gY2xv
bmUoKSBpdCBpZiB5b3UgbmVlZCBtb3JlIHRoYW4gb25lIChzYXksIHRvIGF2b2lkIHRoZQog
ICAgb3ZlcmhlYWQgaW52b2x2ZWQgaW4gY2hhbmdpbmcgc29tZSBvZiB0aGUgYXR0cmlidXRl
cykuCgogICAgU2hvdWxkIHlvdSB3YW50IHRvIHN1YmNsYXNzLCBzb21ldGhpbmcgbGlrZSB0
aGlzIGlzIHByb2JhYmx5IHRoZQogICAgc2ltcGxlc3QgYXBwcm9hY2g6CgogICAgIHN1YiBu
ZXcgewogICAgICAgIG15ICRjbGFzcyA9IHNoaWZ0OwogICAgICAgIG15ICRzZWxmID0gJGNs
YXNzLT5TVVBFUjo6bmV3ICgpOwogICAgICAgICRzZWxmLT5kZWZpbmUgKC4uLik7CiAgICAg
ICAgIyBBcyBtYW55IGFzIGRlc2lyZWQuCiAgICAgICAgQF8gYW5kICRzZWxmLT5zZXQgKEBf
KTsKICAgICAgICAkc2VsZjsKICAgICB9CgogICAgU2luY2UgY2xvbmluZyBpcyBtb3JlIGVm
ZmljaWVudCB0aGFuIGRlZmluaW5nIGF0dHJpYnV0ZXMgKG5vIGNoZWNraW5nCiAgICBmb3Ig
Y29uZmxpY3RzKSB5b3UgbWF5IHdpc2ggdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKCiAg
ICAgbXkgJHByb3RvdHlwZSA9IF9fUEFDS0FHRV9fLT5TVVBFUjo6bmV3ICgpOwogICAgIF9z
ZXR1cCAoJHByb3RvdHlwZSk7CiAgICAgCiBzdWIgbmV3IHsKICAgICAgICBteSAkY2xhc3Mg
PSBzaGlmdDsKICAgICAgICBteSAkc2VsZiA9IHJlZiAkY2xhc3MgPyAkY2xhc3MtPmNsb25l
ICgpIDoKICAgICAgICAgICAgJGNsYXNzIGVxIF9fUEFDS0FHRV9fID8gJHByb3RvdHlwZS0+
Y2xvbmUgKCkgOgogICAgICAgICAgICBfc2V0dXAgKCRjbGFzcy0+U1VQRVI6Om5ldyAoKSk7
CiAgICAgICAgQF8gYW5kICRzZWxmLT5zZXQgKEBfKTsKICAgICB9CiAgICAgCiBzdWIgX3Nl
dHVwIHsKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgICAgICRzZWxmLT5kZWZpbmUg
KC4uLik7CiAgICAgICAgIyBBcyBtYW55IGFzIGRlc2lyZWQuCiAgICAgICAgJHNlbGY7CiAg
ICAgfQoKICAgIFlvdSBtYXkgZmluZCBpdCB1c2VmdWwgdG8gb3ZlcnJpZGUgdGhlIHNldCgp
IG1ldGhvZCBpbiBhIGNvdXBsZSBjYXNlczoKICAgIHlvdSBtYXkgd2lzaCB0byByZXN0cmlj
dCB0aGUgdmFsdWVzIG9mIHRoZSBiYXNlIGF0dHJpYnV0ZXMsIG9yIHlvdSBtYXkKICAgIHdp
c2ggdG8gYWx0ZXIgc29tZSBhdHRyaWJ1dGVzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2Ygb3Ro
ZXJzLiBJbiBib3RoCiAgICBjYXNlcyB0aGlzIGNhbiBiZSBkb25lIHdpdGggdGhlIGZvbGxv
d2luZyBwc2V1ZG8tUGVybDoKCiAgICAgc3ViIHNldCB7CiAgICAgICAgbXkgJHNlbGYgPSBz
aGlmdDsKICAgICAgICB3aGlsZSAoQF8pIHsKICAgICAgICAgICAgbXkgJG5hbWUgPSBzaGlm
dDsKICAgICAgICAgICAgbXkgJHZhbHVlID0gc2hpZnQ7CiAgICAgICAgICAgIGlmICgkbmFt
ZSBlcSAnc29tZXRoaW5nJykgewogICAgICAgICAgICAgICAgIyB0aHJvdyBhbiBleGNlcHRp
b24gaWYgeW91IGRvIG5vdCBsaWtlIHRoZSB2YWx1ZQogICAgICAgICAgICB9CiAgICAgICAg
ICAgICRzZWxmLT5TVVBFUjo6c2V0ICgkbmFtZSwgJHZhbHVlKTsKICAgICAgICAgICAgaWYg
KCRuYW1lIGVxICdzb21ldGhpbmcnKSB7CiAgICAgICAgICAgICAgICAjIGRvIG90aGVyIHBy
b2Nlc3Npbmcgbm93IHRoYXQgdGhlIHZhbHVlIGhhcyBiZWVuIHNldAogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICAgICRzZWxmOyAgICAgICMgc2luY2Ugc2V0KCkgaXMgZG9jdW1l
bnRlZCBhcyByZXR1cm5pbmcgdGhpcwogICAgIH0KCkJVR1MKICAgIEJ1Z3MgbWF5IGJlIHJl
cG9ydGVkIHRvIDxodHRwczovL3J0LmNwYW4ub3JnLz4gb3IgYnkgbWFpbCB0byB0aGUgYXV0
aG9yCiAgICAod3lhbnQgYXQgY3BhbiBkb3Qgb3JnKS4KClNFRSBBTFNPCiAgICA8aHR0cDov
L3NlYXJjaC5jcGFuLm9yZy8+IGZpbmRzIDI2NyBtb2R1bGVzIHdpdGggJ2Zvcm1hdCcgaW4g
dGhlaXIgbmFtZXMKICAgIGFzIG9mIE5vdmVtYmVyIDIgMjAwNi4gTW9zdCBvZiB0aGVzZSBz
ZWVtIHRvIGJlIHNwZWNpYWwtcHVycG9zZQogICAgZm9ybWF0dGVycywgcGFydHMgb2YgdGVt
cGxhdGUgc3lzdGVtcywgb3IgY29uY2VybmVkIHdpdGggYmxvY2tzIG9mIHRleHQuCiAgICBG
b3IgaW1wbGVtZW50aW5nIGEgZ2VuZXJhbCBzcHJpbnRmLWxpa2UgZm9ybWF0dGVyLCBvbmx5
IHRoZSBmb2xsb3dpbmcKICAgIHNlZW1lZCBtb3JlLW9yLWxlc3MgcmVsZXZhbnQgdG8gbWUu
CgogICAgPGh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvZGlzdC9TdHJpbmctRm9ybWF0PiBieSBE
YXJyZW4gQ2hhbWJlcmxhaW4gdXNlcwogICAgdGhlIGZvcm1hdCBjaGFyYWN0ZXJzIHRvIHNl
bGVjdCBsaWtlLWtleWVkIGRhdGEgZnJvbSBhIGhhc2guCgogICAgPGh0dHA6Ly9zZWFyY2gu
Y3Bhbi5vcmcvZGlzdC9TdHJpbmctRm9ybWF0WD4gYnkgTGFuY2UgQ2xldmVsYW5kIGlzCiAg
ICBvYmplY3Qtb3JpZW50ZWQsIGFuZCBhc3NvY2lhdGVzIHZhbHVlcyB3aXRoIENPQk9MLWxp
a2UgdGVtcGxhdGVzLgoKICAgIDxodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvRGF0YS1E
aXNwbGF5PiBieSBHZW8gVGlnZXIgaXMgY29uY2VybmVkCiAgICB3aXRoIHRoZSBtYXJzaGFs
aW5nIG9mIHRhYnVsYXIgZGF0YS4KCiAgICA8aHR0cDovL3NlYXJjaC5jcGFuLm9yZy9kaXN0
L0RhdGEtTWFza1ByaW50PiBieSBJbHlhIFZlcmxpbnNreSB1c2VzCiAgICBDT0JPTC1saWtl
IHRlbXBsYXRlcyB0byBmb3JtYXQgdGFidWxhciBkYXRhLgoKICAgIFRoZXJlIGFyZSBldmVu
IG1vcmUgdGVtcGxhdGluZyBzeXN0ZW1zLCB0aGUgbW9zdCBjb21wcmVoZW5zaXZlIChhbmQK
ICAgIGxhcmdlc3QpIGJlaW5nIDxodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvVGVtcGxh
dGUtVG9vbGtpdD4gYnkgQW5keQogICAgV2FyZGxleS4KCkNPUFlSSUdIVAogICAgQ29weXJp
Z2h0IDIwMDYgYnkgVGhvbWFzIFIuIFd5YW50LCBJSUkgKHd5YW50IGF0IGNwYW4gZG90IG9y
ZykuIEFsbAogICAgcmlnaHRzIHJlc2VydmVkLgoKICAgIFRoaXMgbW9kdWxlIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gdXNlIGl0LCByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCgo=
--------------030109020907070509070903--

Similar ThreadsPosted
Proposal: String::Format::General December 1, 2006, 11:04 am
Proposal: String::Format::General December 2, 2006, 2:56 pm
Proposal - AnyData::Format::Excel April 7, 2007, 10:03 pm
Spreadsheet::WriteExcel format width May 20, 2005, 1:04 pm
ANNOUNCE: OpenOffice-OODoc for Open Document format August 15, 2005, 9:39 pm
[RFC] Games::Sudoku::General November 30, 2005, 5:58 pm
Installing Config::General Failed October 22, 2007, 12:22 pm
General question on CPAN perl modules March 13, 2005, 6:34 pm
Module to retrieve general TTF font info May 31, 2005, 5:16 am
Aprroximate string matching May 4, 2005, 8:41 am

Our other projects:

Art Dolls, Fairies and Mermaids - Sunnyfaces.net

Roy's Linux, Programming and Search Engines messages

1-Script XML SitemapXML Sitemap