Building a TodoList in Javascript - Part 1/n
Tags: dml, javascript
Published: 2021-08-07 10:04:27

Welcome on board.

English is not my native language, so I hope you will be a little indulgent.

Before we start, I have to really thank  **Eckehard Fiedler** the author of [DML](https://efpage.de/DML/DML_homepage/index.html) 'The Document Makeup Library'.

I whished I discovered his library sooner, I would have spent more time in coding than learning how to use some hyped frameworks.

The scope of DML is to build web apps using Javascript and only Javascript. If that fits your brain, you will enjoy.

So let'start by presenting three functions that make part of the DML library :

**make**:

```js
// ----------------------------------------------------------------------------
// make: create element with content and appendBase at current base
// attributes is an JSON-object {"id":"test", "class": myclass}
// ----------------------------------------------------------------------------
function make(typ, attrib, c) {
  return appendBase(create(typ, attrib, c))
}

```
We can see it as a wrapper of **document.createElement**.

Here is an example of it'use : [make](https://flems.io/#0=N4IgtglgJlA2CmIBcB2ALAOhQVgDQgGcBjAJwHtZZkBtABl1oF18AzCBAm0AOwEMxESEBgAWAFzBV8RMtzHw5yECAC+uHv0EgokjACtO02fMVCAbrxIACAPoAjXgXi57j+AGUxvIgGsAvNTM9rBkvn4AhACMLrIk8AQQAF7wAKIIAnIEAYwA3DLcBGJWBGYA5nEsfgA6IOJiAA5IAPRNAO7tGK0AzBhkJKVNAEy0I00lpTW4AAoAkoN+gwBUALK8YiIYsy6FAJ4I1YRie-CT9hRQByzGALSt8BCl4khWduc5pxBesBBElze7CGen143yI7xALhYWRqVzk1wSyWepzsD3kAA8xH84Qj4M9Il1aABScEuOylA4OXzlMgAV24UGuMhCJCREPs5XgFxqlJ81LpDKZfWecSgJPZIvm3O8vPI-MZFCFVgAxCxsLQxWSdhTpXz6fLmc8VSwwcjShyFNqqbK9YKWcqAGwATmwGtKdlgNPglpltJtCrt7s9rr6vG4pS9UqtvoF-sNxvVpoSsDM8BI3t1MYNxXYKZIrp28EoZFa6etmcVRpYLHg8FdrREnwjIB5Gf1ivrjdd7ulpejbYDsGlrrEJFD0ObOrL-eFbt4AAp6IuGBhaNgAJR1kdj3ty20zhxzwbYPBHk-H5frsUig57qwijUepu3wO1058Mxamq3987MUd+Q3rGVj-q+bIFkWJZfkB4EhK0YpEAo8hpjU6JiNcIIPNwzwIXIqZXg84gHKh6HfKUWF3gRYhimIZD1AcuZiD8IIkZhzw0fUGpkGINFgPRqaMUQzEYWRzyvNxZBgGKkAwPsNQMUxsAsSJVjSXAoGQggaKqbJ2gQAQ9SDjszwsJpORWMJ3DXI2YAENhiF4ciHrISAbCwEholOYe9RohupwECIvBQMWFJkGi8IBUFrTPF03lWDFaJWGgsXlLwv7Ig8-mBcF3KheFWVRVY9qxUVCUABzJaOaVsgQYAgrA7gRdlza5ZlkXPIMsUdQl8VWClVUuGIGINflRHwBieVtVY2DFbFSUJXes4Lgwy20BgaBoL5bIoqUAAqQ2NZBIDEa1xbPOVCX4rF03zf0B5Loua0bZxJBQKmIUvambENtwxQUNA2bJg5bLcGQrwfc5YOvXatDeVegUQDS46Q6m1yjlACO2VY51SRA3AQAASvDiPvVDqNE5j11ivUgXo2GBzUzAuOlO1sOnA0NNM-THNhniV2xZEfNohqDxTNz5I1AztPM1YkQw0Lfm1ZQqz9LjBy1Sr5FdVJlilKrNTq7r5GU6cBu4wAMvALCYvrOu49cCBW88xtsqb3D45Rau25ZJCUU7rNbQ8yuGxbVuexr9uW2IeJy8LpRB7j7uPNb4Be6jvsyzHHzcMNkUHLc8B2D4nzXK8YUnQVuNOEU11TbFPXXF1C13Sty72k91xgGQiQly1B1AgU8DV4LcWxQ3sW3fO92t09pcTadViV4PtcJTX9eNxPS33RgbebaSoV+OyIEANRnODJ-ly4OylwfyMkOfB0n2SR81EaJpbWQUA7AAYppBzo-phljKmSsCZMa1wTLz3IK0KwINWijg4lYPQiNGIsB2PKXCchnj6W8PAEug87gKDFAkV6P8xqXE0uFH23AfDPFWi6U4TIaRgG4KQtE5CwHUgKuqKw-8DKpSAWNMyICKEQIKlAmBxZ4FilAWwmovDAHCMEacGR7hqYIQAIJlj-npPhRlFFC0QcgiAqD0EmCjsUNRuDLDRmkZpVROCABC+CazcG0QA-h+izJIMKMYtB+QzFYMsehMsRCBI+E-CAeoZAEiMVkM8fOhdi4+N8L+KwUSYkQDicUMJqT2K0P9qSMQBQjg6VaNAdY0cY5WBEPcJO7U5pCPkR43G3xuC4JkWZCyVl5A2TsrhPMhifEmP8YhPpSEzKuzOgUmwJkr77wltEz4mTyJsDRJyHIksmbPBKjkWe5c-YrxmglJMuZdl9FJmjDGUyhYtinLeSsVYWBnPBl9XGv1vhQF6pVHIDtzFqmJHkqaRIchbgKFcEgYA2KjgKIOeQc5rj-NwFYBFRJNo-KXjYQcYYaS8HDH4dU+RCg8K9PQC00QWBpkGOiooWLSg4vDFkagciTgQhqAoSYMISA1FyCwOkRBYk-XDGIM2oY6W4vgHOMQa5gBiAwDRM2xZUwAGE3CSrXBgAgNI7CFBIHOaIgwNzgrnAgIo8AF4-VpfS+Ia5jGSrlWQBVdwSAqqcGqvwfhLXioINQeAjA1xxDEDSEgP1MWiqtX4eAKheXcH5csqwZtJW4GcNwaVAag0-U0ZVDAelM2pTVQAfjENQUN2LxWMCQJEd1JaxXhgAGS1vgPm3E8wD6errbW7g+asJiCjXygV5kaQ0RRPSNVwATVWC9AAeTsHoeA-KMBCqmOQGiRx6jwEnSwNVuBXHTtnfOoVk7WjcCXbRfiOwABymgCBzngIavoxql4QCsGQFgMDpUwj7csmo7rV3wBfRO6gEBGD1qgsUkgNJ+V9BqOEd1EB62SsA4wCNiGMDDqgGqtcKhe0xv7YJSgiaMCEdvcAW1RRK5eBjX+19X9P2yH9YPdNVgxBzkIxgW92HY2yFsBAMAUSSDMbEEm99hwqETBAD+nYa7-1iHg5iagYg-XUpgX4WVCAwzrByEap9bypVjqXmmMaW5+Vf3YAoTQCGgPqriHwhCc4agYA5SAGwNQNy2rMGQf6tB3V+DKfSYs1ASB+uAL5yKAWkN5nHWQPwQUiBMMQhgUg8A1ipHSIhOzhBSAQHqGIFzOQyAapIL8ItQHcD5dkCEQKfg5xzjXH4AAfMALzfhrjXG4PW+A7WasqDXLgGLcW5CiCS1ADAvB6hrvpEqhssB0NkEw4WJwC9N23rTcGqw7n-oSswyoKo3Bo2cYtWQQKSr3DuETcm4TiMzU6p+DlkAOQLDWAgD53GkUMB9YyLKxLyW0jwA++l1pPgXO4AMwAHxByF4sb3Qj9dlUKn7H2CAOJ2DtXFl6BDpeID7bLLm6C5AgBgOIsADgAniDUwekx8ciAqCp3A+OBDo14AccrOwrBokmCQDA1M4hyHPR-eA2aB78aceCiVEBgc9arjtHjf7B1zj2wKmrJGMD04gIz7gYOah1RqN1jj-aSdneleO1xwAVA5BWz9Rt6XQZ7tuxJqTr6xD5rnK4qVGqSlelxFbmdc7bcqck1Rid8HXG3u3W744KmespqQM7sP+xBMpt13Gwzo5+Vne3dK+XcaICjvN0xlQ46SCleyLgLIUQci2ra7WucWRc07GzQQWvzu1w9ZqNbn336-f24ndK21u6fcYB8PAHY17b0YDU6UdYdXaCG6XkTvv87B-D5vT1xn8-ZUWEfCPnrvxwjqlz7K8FKRvAiDl7R7go6d-qiNeOklOR4AAB5YBj4UBPkQd+j5HzXEW2APrGCMBg7wL-vBjvpEK5pukQDapuimnpqan4CbuXpugQGuNfkvGQOam+jAcUH4NwNQGQLkGmEWgQMwPANQEQX4NniQHNrAAtl6BQSptQNwIpvlvUIjCfuxvNmaswawWqt1qVioPvhgIfsfqfjhssqOhXjPrAfAbakgSgUUGgW8tAeOlkDgXgWbvQUQUmqQUhhQVQTQeQXOAQQwUwZztwewdQZwaYf5DwT1mQFGvekbugVKtZPQYwaVlYSftZL-huLnnYZnlxmwGIO4IWD7veoJsRhXjSJQD+vRoGsGggc7lEUThGrEemkpsbmoE9mvgPkPtelKsDn4NkYvlvppg4UvGam8hAJIc+uQb-mbgLkQB6K9NerNkHrgUhkWngZhrntwInlxsnt4GICZgJkmunsALngManoJoEcEQgJBrqs4EWkwJHphv4T9HoB5twJOrmAbiRpuuEMtgxqtlRLauEFKhMXkLIESjut7gvrkcvqUbquOtpj9EofptgYhiCmFshoFvwUcT9D2msWkgGkcKOjfn4AAFLuCTrnpu6ia+KJrcBJG4AbTboHAU4HBWDs74qPEPpFBkYW7VFRYkEKbghMriZ+BkDwZpigG4Dcom72a4yNE0jNFzitFV5pjT64CVp+AkBO41BVA7bQaUkgYgCClcogAwZUm1o1BYmSkilV7cBHyUk9ZPazZIBKmUl-FxGvF9E-Q0xLoSq6bm41D371BxB1Y1BHzmmDyglSrPwgD35NA2mWmqBAllhnb4qpr-EqR+CrDrCc7Fh6qko9b+kbAeliCLBgBrhNBgB6lMbgYxo54+lhlyqJlEA8FAkQJhHek6lWCpnZm6pSrxm8DarJl5mpmll5GrFn4Tpoj1CyzlmMaplRKtDBm4DFlAkhClCNnGkplrAbDdm9k1miFcYJyipGmjHQHm7hCSr363r1qzliB1YJ5AmEpbi4xp7Tk+liDzlNpIDLmdrdrxmQDn7hG5nNkDnK6bnnknm8Boi7G56pm1QPm3lAlCrLA3lCbjE+lejnpMJ2CpjL4dn5rPlfm3pICRrvmDyrCvnfkTF+D-lgCAULE9aO7Pn3kG6QXxlRK4wjHEbm7ABogHm4BGSRo4WvkXnBo1DXZhgd6-rSaFpICpkRlrgOneTa7QUNCUU-k6k0UjhMz0X+6MWSoqYE7wA2YSoSxs6spikgDqoCVgA1a4BIUoUYYHklkkCVQb6ehblUU-TrafJNb0G+pdoHm-7xk1RkBcQn59l5m7m0D5q0AHl1aRD5qRAHmLCRlzhdDXBoSdm1lWU2WDBNnHH36OXOXLluUeW7kYDYD5pLCRlRyRANyLCiUpVSpeXxmTFDGmZ8Do52WMaypMlNHxDpaCkVXyWFoapaq0WlB2qDiFAzD0hjQbrlUVUuZHygEHk1XaoCVhgNWOBiDNWvRohtU1BNCdWgHxmvSvB8qTnnbAAPYLxm4+lrGK7LUEENgEBF46ww47UqGLkQB5AICWBS4CC0jMZVG05+CS7S6XUiH7aK5PZImUDbpg6yqjYGQ7CGGlaYZCYl71qfVjawA-WF6zZYZAl6Q7S0hEAiAAAi8AZgPwm2vF6arecgsNIghQlgt2byEOrQYO74DwawfQyu95MNEGIgUwmxYgBAU+RNvAyNpQpNHONksFlNcNNNeF9NtA8ZekywoMpmiNyNtm+lMCTNJNNEHOl2JA6i4YA2L2rVm6NQgtKICALmU+8ZNguMnwj5PphlVgxljuuIgJgVg8k62WyyeRU51RWRtxsqxRTeuJBe6BVRmBUWEAYW92HmRlMGyGeBha7RAd5anRSGqhjAkNtZUAo4pQ8OaW4REQ0+mB3AtOwOpWJe2ByJROUQuAjO9Avw6opxhx9l4lncKYKQKYcgZsekJgQFKEWNON-GkwNIPWhtsqcQ5dqQVdwqtdCg9d4AtITgkU3ALdhqtZNIy+wAHuYOBNbGPdHZ7q-OXg-Qg88G-OL6UIg8AAmnVkeGDuljRFTU3b7hGnKv7k7gZvalTfELjglt8IhAABroRF7L1Y231MD30QCITb2MhrjR5X2NHf1yDP28Cv1f0-1-24A530DvbxY0yV2IQ12FD926oN0330iTAiC4BRA9ZwMDYIM93IN11oNHRY1d2TAsA4O0n4OfUwCIPV191tKkOdyXY0j1BYPUN4PQ4fYjb0NENMMD2sNOAUMQhUO4O9Y8PxavCfyx786xYkAEB9BqxkApguYjn7bVI57YFF5i453RC0Nl2qPd1IOCOkNH1w0KBQCcMSOGOd3GMMO90oPMOH3kPGOUNcOSOxa8P2MV0CPONCND3wDsM2M0NSMDa+MmOMMBMsNBOiO4DiNhPePSMfx14k4JZBpKPOSvQsC8BRG3bxlLaG7r2c5xA92I25P5PKXoNw2iPebL0X3O5n0WM1Leqf1ANP2ow3Vv031tOMAQNyC-3qlNPyMP0gNdNPajPANiBDMr46O-Bi7rXhFjHcByNpljjgq8QoTQoECwrwBdDoZWliDsVohIpWnwAnNIrT7a7O5p35EED1p4awDV7N7alFV8NQCOPEOoOuPH0r23a4A0ieN0OfP+MkPpbCOcjFij0QhAsSPrB6SWUhH8oOKqqFWrauBOCeDSgeFziYsh74vYu+DP7qYiCuUjDwYgj8Tpbw3LBmwTpaWKiEteC+DbGpiiLoF2CsGouuprhA7Ms9iBA9b4vE79ViZ24B6O6GNw6pZyBI4zDoZSoaVAkEB2CjpOBzFiA8tGkaP9pCrauK6574vxm0tmxCruBTCGs+kCvEvj7rAmt0tVwWuek1CmtOtTAuZ7GSp1Y2s+Akuv5rhUv8bpYpCMuPY-TnMOlIpEs+BpK02pgvCFjFjEoJAihWAWu5YcEgL3o5C+v+uT5URrgit5tRL1A1arV5l5t2siAOtmxw0+DOuYikoHCfkEAJBhhWB0gas+4Gt8vyVo2ramvmuWtrgwYya1pBvMaut0sMvkB2i+vZjJAqR6S1RiBw3IpylHwXOTCJsi6shHzHM7u8BWyfSbtDuDzOvN6khuAxv5s1trk1K+CNvflG5+DntBEjs3XMY+E+mmv1vOup0h4QDxldvItatot+DRBejXDRCuI1CgeavauetyELw4kQD34nEf496bpVsv7rD35enACTs0szuphzvPALu-bZYs5vKlu9u5Z2BxC8A+AqDFsOBYsst+ulvKXwB1b4r1rvuXswYdYTsIDBvTv0tkdMvsceCceLtmqQA1RrDrvXCbtKk7uAV7ubvbsQjmQnt2hWmCcjvdHWsye3vVvxn1s2AgyvTiEq0iaCUUkMUO7VFehfZwo0XUwws-t5n864zMMAASO0dLNOka++8ZqEvOtn6LP0hj7n8AO0hmUXOrSLYg6i3EPsXL8gNtBF-x-FomQlXeInN6cBJO2FLeIAbe-KhXAeInRR9xo+QhcNj1CubxZGyGjBCR-FxwwpKasqVc6XAlWXEqqdVRd+FhSuACetNQ4I6qTXJ+61ERRTKdZ9U3U7yAuWtqLaqz1brnHxn9ilylL11AkQ-Th3G4-X7uGqg8J6a6-GP1zgVRWGOuvBZto5P08X6XelmBT2cXTH8g8dcgDxueA3GXEAw316YuKaHZI2Y2Vjk27A6G11wHa5-3C1Yxzx0W4Tn2aPgPAmPnjGleGOYrNX-6na+O-nqYQXIXWE+OX18PU26GKaPWInoPQ3g6ZVYuQHJZcP9IBrum4JVnNnOrCR+LRbMnsP42UACP02DxHBXr4QhjMjOwqRq2hthKFA-O3Z6Wr1sAVgDiqT2b-I+7sqqESqxgiEG4SvqTkvDPiPy+bzq2UFtZNg9PfPaL4t+L+a+LtvE2jPaqSA1vsjbviraFd5g+33ueIfBr8XelurcaBp5A9QOXKzghfQR+zX610Btq+XjnErZPX+Hzc4sfzgJu6eG4WbOflXDtpPr6bXqHJf26uA2ROlZVKauOF3RfT3WbILxfaPN66gagUJMJcJTMCJzPmG8fXGLBYgt3Kf0BxV3AgXwXZs6JEIiftE8-U-+pvP0vjPW-wAreNf8pznTG9axHNQobc76BIfMvUAmMJmijRQoso4AgSExQIgtI02ibz6x-d6Txj6dAvXzTA4EgMIKX3nv3t6N8y+lBLbECRCIfZ5WofAdrF2x4LpB4ePJAZmVrKMcwS5RNEmIDByRAXaS8JtiCnvzcAQUWHL0LVAj7cgJSBPJ3vGW4Daoy2mIUApgSbAzcUOridUNwAw45AlSn+C5piRm7mk8KDvIEiIEiD608ytAqSrUEiCTBFi2-apCFXPIoCVIzHBQSIEGDKCOyqgkQF0FkGMZ5B6WIwfoICrvdqkaAEwatjME1ARAaASwYYOwB2CfoDg2oNgBcHxkRA9odwVoLoG1B7QPgqQUWXFqeCqckwKwZozYHwUfSngjhhCBUH81ao4YXYq+08E8YxMQmCtoTwKxFZQ8IITEPHkspecAhng7BDC1GIxD+0AOb7pj08G8BJgqdKVHkNWyU5qcj3HCnEAqHaD0sNpSwUlz5wYYZqEAMwH0KCHowzAoQ2stAHGEZCl4riTwdMJcHtDXiazJpBEhaS4xcE7oUIIDghC9F1y5qVpPAHhrjDyC0w2nNwDOHTCrh4wzTIFWmEBDu2KLVVC8PPKqDiECwjQSDzA4Gt5hEwr4fGWMYkBDIrwgER8IWEClZK6SJZFkkJxrBxhtYYCOUhED5IDENSdOJnHkoS4oRrqIEQblUFZcaIZ5eIXIP6HchB0ZI2YdYJICkjZAW5NOpQQ9p+BGR5IygpnXywk51hz6TnJYEQh481m8IgVAcCRGMQ1GEIAgIGQySyADgVZCgBz0mAyjfkfgbyMBRlHsR1RD5aHjKOxFJxKSazMpFAHWDkETmKo1DOclTCEx0YxMEcHyjnAQAhgbFaSpaNBQEBNmREHZns3hSIpkU-yPtnwSBKoRBR84ZZvXyeyeDQxTHZQYwNeLwZ8cklT-tNjejQ9x2TojAK3wjy05sq9ZUMFAFLIIBEuGIMMQ0MfQqZDMZYiMfGOKCDxBumXDnpD3UBQJbINQJQdKPdxIBZSeyJIFsheDWiSAPcAxGCNETPAGwMAQhMu0sgGingcUa6NrnxFpcweEPJ0QDXxyyA4aE5cgr0GoRD52GO4oKPjHiBJBaCI2QdIsmSC05zxNEHEEdx6ESDE6HAngTiX4G1ghBgbXfga1z50UnOwlB3ExSaydoo4n2EIG0mS5zhd8rzIEuILkCwByRXoZ8WUSKC8DBB85QQVh1gn49cAuA1QYOEArPMaxP3PwJ4PwmFh9BKadYT+PFad5JW+aOnrvzv6Sphh0XZvEgAYlS8mJ+RfHOk1diJxCINQBcRCB4lXdXYIcZOEJNzFAl9hvgVCOWPa5VC1UfInYW0guETCoe6qdJiaLNEajueUNbgDP1mI+55JqHSoWBzjF8i2ejY7LmuKA4fNLaAqastukTHXdNWnIEamQmh4o9ayljXwKXBMnHVSMopYUrpidF+BY+NQGYOeimAABVHaHGIUr+4bwj7HwKXBm5kTCJoxbvhYTCmeCopsU+KckObzn010yUudKlNCgzdc8Ik44OTQ1j8SJJHFYSWszEmRwDgkkonvjl8mD4LgXk-mgZMHQlj8KcBbrJoLaTQIdaA0sQENINwqBqeZsIaZoiSzCjzSXELiP7hvGXivQ61aoiUO2o5A7qF1WXDtJlRrNZxycQYF1GiFnTakhEfrqQAoCwAAut0w9pEhkpqBpquAeaUZP5QrTl060tdPZKtpXE-ASzaVBv2T6SptqdJSrsDOqHFkvpK-H6WID+lrTf0rkn3A5OWRI4AAaiCE9Cgyz8eA01CQJQmviMO21XoHDNVF4c38H421CVwRYyjaIjk4wnKkMzm8MEruEqiyTKpSpVeBlX2lDL0hUzHJGM-lO5JapsIE8J1RwAQG4xTShpwAdcuBnmKekTc0qL0BsVxhstdUwAGTg2PB5IAy+GUw2XYGNmZEppZsi2Qk2-rTYAA6uiKQCBBJGDiJjjQl3xqAQ8TMsfKWULBZ03qPsmTrdSJGwik0qGNwGbIq4hTZMlMjKQ8OBHhzTZK4lnoITtlQBHZpokQLjljkiyMpxo9ETqJvRpzCwGc9ER3yvY+zcYM-cKf3xqDVzB0yggXDPyjnhy2ApczOesBO7AYq8VcqaQXKzlFz+c7ch2eXNO6VzKZEvW-v7z7kz8esCHHtqqlTlBQ3ZSWHwPWlwkdlKZDcwTD7IylbyRZMnFQEKjWz4zUa++bef3Nb4qAq4p8x8KOlnmDosxZ8lTFHWsE7zVKQFIic8QKIqTzhCwsAuVRP7VFXEf8tSQbnqLTz7eCec3LlKpEgAd5LQ4qb+gOBIlkKqYdnBAKYnI8TyBAUoAbzgqLVMeRnZSmmB+ETCw5KEQzEpHIg4Rxkoo5ZMZAgBrJRQmyHmIVFhh7I+4y8HhSVABinJb4ZMO0ZjGxi3I+w9yR5I8meRQxXkP0JRh8i+SpR0UjsIFAClohOxgUHozZlCjHC+iUUhIJFPoo3DaSMRVgI8HLFyxWTweTY36reiUxRYCAnw2sW8PA6uouRHIq3IcMKTFJjg6qTcaCH8DVZasDWDnJE2UqV5z8k-QFgPEQ6qougeDWOnj0MI9Y-2IgBtpazFz6w8FBCoHH4VrKOAfABC5ke7QLxvs6Ww7ZSg4tDlyUYZxECyGMiBgnxZkpcB0iYvahqgmpG4KxauLIC5DlCt1JxZZIJESpZsOEmkUyJqDb14gyIIpCTj8UxoAlVWGrPVmAD5Ywlkec1DjUoz-oaM73etJEt4IeKagvOGZT4oQDzKgGYQIJSsrWW-ZjGR3TZRRgQg7Kz89abPFEoXnvDXU8S3rIktlbMZRlqS9Jb9SyX4LKp8lEvJZ1DAWACAgweGqFVeLwAJpgkbgDCrhU8FGics2wCirRXw1lZVxB0WrN0yO5ZUAUAgIemPRJ8z06WZGgkHdAso1wB9dfHpHB77AoJB5OArStZW4hPZMPLlfSsLSUycVjgEifAuFUEBoh-9H2eKtrlJYPOIAcVZKoPkyj+UbCaVdCscDoCxAnMuSTUEGDWMIVPs3CpkGLw+zy4+KY+UvBMVWt7KQqjVTKJMU3yrV6Ih+XatRWaqTFr8k+edJtVFU3VMKwbJRCdVFAfVxK-1ZqvOmvzAKhsUWOsEVzSrBoqGeADGoHJdYdUZACPtKgTVog4SGazbCoEaJJZdUWaoVYmsLWWBjxqeJcD7JMXKrA1ScTDFXBrptIdo-udKkmgpCDhfALQ7IMJjQUoVa+MCIPAEEYJoVS1Oas4Z3JEA05s1uawfJ4HDyLFx113XuqpMcAn4E8VcEzJQAXUIBRKNQECJ61nWuR6o7uV+bfPLiiVk6PsmwOat3lO5Z15cBxE5Eg4YAugXlOtaqo1QHRzezIcUYtCnh0Igxj6g6Bui3piBH6M65deXDA1Vxt6EeA8tBp-X+hvRY4LnIhG1wnzL14tG9eXHzy7DilJakWV+ujW4xY1J+MdcRsTVd0YaBuT9YmrOG0bRulGlVYmvTWZrWOZwwjTKmXU0ayAdG2dYxv43Ma-iUxKciyJGnSoq4WMq4sLJ2qF5gAJ6pALnToWfRc6oqQEHzRY0JZE1pG49Kmp6y0Ax2lMjTZbkfVM1Ns9GnNR6N9HnkrNBOLiMljk0jYwwCAFYFeVmBNBIgpULktKvsh8lZ1cQVPK1iGC4ArIoW5jYhqo05qgtzGJcMxvs1xBCgfQTbFKqFX+bBV0W8SlMRC2DAk04WvLZFsC3GSIxtObTSeqBrLqT1ylR9SODzVdYbAsW4pQUQ1nABpN1MuTenUU3sBYAym6IKppZDqbXNuILTQwGM0izTND66DRZpq3LqbNTmuzYFsc1wofZpm9zQGU83ebfN6W-pJltY0xbjJuWsLc6MK1laot+27LXFuWgJbityW3oWxL827bitOW7gKFtwQnam+VRc7TpoO1ibk0ZWutRVtrTHqetXWIgBAEKx7rStT2Vre1scmdaxc3WygH1te7Lq9N5G2bVlssAZkIxoW+gLMANSA6etlWrLdVu01fr2N+amwODsh3o9RukmnjSLJPU7iT1YOXOrOr40Cbl12OrcnjumBzBytxO4HVVtB2YZGiJAbmpkHjWUzjVdNbICoANK01diRq2mjKJYLWEiKJFMijriiSg0uNidVrT7OZ3DyetbO6ILOvR0Ga61NgXXXsAI35EjdQukHfhnJ1sa6tHGm3RQDt1tJiZE6BIozI+oy7Vd6qatlPiI0XbOdJBT+qcyj39MVepMpjJB3IFa9aZVAz-IJt2G0aSS-TGPfJjj1bYlGVsfXR2ta1G4QUlM43WnMoBm6CBgekWbLp2oW7k1ZGq3bhpfRiAuN6YivU7pF0u77NlOhrYXo7327w9P25XMY1o1LEc9HZO+vHqNTLVEJd+DDnewbjv5P8S1SwMpgQy+oMAaIA9j6i6o56YyeWp7Nvrj376Lmp3DACryGDl6stAARxxQx1kRRAJVEGhTCT7f8u+mfTvp2CfbMMs6x-YFFHACQ39JAD-fxqLQ77TmUBuPT-sP3f6oDCBlXioDknQ6GdcO62gjvUCmakA9AT-iyC-D+bJgDEbseAGgBqRFx-emba7us2GZ1EpEF3JTIIP2bUI2rM4SpkpkMRWDPopzedkS3LajSJm4beto2CbafNtBqvbABmmCZFwkhpLdLXzWwhhpYcuDs2C7VeKnsNQTRKrlgBHre9p68PK0Kq3GAI0DpTdq9NihWlgO6sQfEWXE1PZ6AaYWHWUjXaeFpUgkBbJFSFUQ7C1zIygrsndl5A3AMsJACQGoADakMu+OtU1tK2p0AjjHNecEYWyDAwjER-zVEacPUBTNSGNAHgB9mxHxN8RrbDYFsNfyHD+KFraNIICuHmu7tTw2am8MizqdvhqHeJoSNBGGjoR8I5EaTrW7Cj-24o4EaSNdHUjPRjI30fCM5G-AeR-oyVqKPi5nuKrMoL7q9B-c5VKWX7IhHPSnZxgFQGGeMFyy556uS+V3PNyaYNZ+c3SjnjscSJvVWhxhKJdH1VQh5ne1g8YJihH2cCseyTAbPFzx63HHB3ERoC0HaCtBOgPQPoAMGGCjBDjslM4UcZ9InHqyafEgBnw3UrKrj9YlcTcdOy68m+RaUdbwWeOupXjIHTKcRkyHwKoiFknotmh6RZBShQJCgIsLJmeCKAtJn0qs2siMnt0hTdOVXHVnVGLaHWpmaMT0wK0oA1ssOSPPv7YmhuZBxcekVFVBDZTVcShgKflOZdaxqzVCAwcwgHBfk0QsStZi7USomgVgJoKUBhlylI8WC-3hFJAAIBJTkwZ01YzNkGDI88ZS5JAYcPi4PaJeaBtkFxJRZ1QZAZfdWzyxYc2tsqpzfXKmmTAZU-uMgz6aoNP51dJ+JAloUDoyjsxJBPAkgFzMvyw6Red1CQHgwqqUpnIJOpHgrMYB8qXoLyXWc3EBQwwtBDcOOkZwZSXmuAX4N2bDobheA9pqAT1lwmO8LU8ZW0Zkjxn3yBe5RH4zDi1V49EcF6czG0NtS3oUOBJbvCt2z0JFVm3UzkALJgTPzHwb8zRi4s5BTmyAMwHpKsYXO8MZWWxzIEjjRwi8NzyBZCUxnQKUmlhyGUkhXgSxVmoAx53oql2vMzndKGg19tKwwH-KVzb5pSRIS3NAC7aHxAC5unxzZil6x5rqcBb6PAdwL8MG81LNZPKZYLKM+C6+bXMbgieOBHfYeYuBQSFdBAHYDGhATR1JAMyQeM12h3VE0wvAVoLwE+AgIeLtldQG-0-5QAyDAAcRSCFTcANSQKKmFsiH8QAOqxCH5X9w1AyDX1UEMiNkBNADAsgPIAFEUaDw-AcUr+NcFKja5usCRDnBmv0o-lNUbkJAIJeEtFAOcxlyJbgC5weVnAXOVI6nS5xdB2JWGdYOInGlWAr+96AAAZBcdoUwWdn0HCDZI1giMZ4AABJxibuDKwQBUBxXVBY0OdK71YtJkNBTzOcI4DYsZlglwAWvPXkbxSomVAQBTBuBOGuIPLIlk9Ip35x1QkLm6Hkjt1pm7T9uuQI0uJVcu7yBRJAc3bNby2ypQrehCopukas5otKeaW9J+YAH4lULxEnAqSVFxTX8m14-y2dcsAn7Zr8SlQFmxG6T9fBwJmS4PG42lLp6YbJACdLUBJaokA8T60TOlRYY+R1YNw4mmACSWP4sl+S1gyGwqXjZNQDS3CF-Q6XNcINJiAKiMtKNKBW48y5iCss2W7LClGpGeRWWnFZUTlyK8mw14IAx8ZAeqjUGxaBpMYRzPK0zajYWHWbiMIaRVzWKDqOcUncs7Wn5tht0s26s1CDCKBXB+QSq6K7FaLKc2CA3NvkbKh8tdYibCgUSg1g-Tvc+bU13604HrShL4g+tunWVt4IkBHrDQZ62IHUEOH+LcBAW-9fe6K5vrxtq4riC+tqAos0Vx+nSwC7Anjxj++IFRF8K7imOn8HGvIC3FtnCZzt7DnODQA-pKZ4dnYIzZE4wmk7IsyO4jHjva39sutn6+7a-wkAdgmBTEMP1hJc5XUty-SO7aVtG3a7A8QjQWuU62VU0et922yQ7sDwhpdtrDFm2Ftzt0sx4wKKna8DyArA7qCw8naGxj3ks-1MrONnSxyWFLgmKCe4SriB3PQhQZ6cpdIbqIiACEbHLJT0vo3lkmN2QLkuu4joesFtlVvfu+DyBrbKOelW+fn5lbMCzhwu39c9t8i6g9Qa25KiPgAByfNPfr8DuAUgZsFIEqh2gS0BAVgL+PjEnTLBigD9xsKUaGoJt7ZAXFIPjBSBMZ-ck9uUl4HpU1BgHVmN2wPFjtPU5z8hCNBiBTwjEy+NQBs7ljzsCoC7VDg20Le7vV2+7wOSyug6fuDwAA0vcWh3+nIscBb+04CdtPVAbpuXPP-cAevSwHt1MDlYEWAgJyAYAbTuYbNgzBlgMwOBx2MoeN2nANDhXHQ4nSFEHaORU4x33BC82-xXeGuybfrTuPO7-2sXJQS9tCPH78AZ+0WNNu+O-qmBccK6ZkfcOPbANk3Kbgrz1pkTTeO9mHrLt2ObcDj69JRPHDAQakcQOUgntvwP5VMqei5sIKnwVnlSspAsbaZLzKlYDIDg4MA6PiHXf8jAEB+Q-HPVInrL1tR+A5cVaOdHEkfR0gT4fbSiZumDh1+lccB4n8sjkTvM5idp4wnENaBpZQ+RfyGd4JFxYCJeFhzZUMnNYENyvauIhUukm6ZRFVJ+BznD5K41dxMW33osMImpQeqdlG1YY1SF6ZiNm5F4shCZiEP102cgGTneWEqU2GhThhJgPIq7gwvlE1AJRKI6FxHMsfOBMDsm3pYJiWr8QFIfWkvJ-1aCEw2zeLyF3KoVNhzTyeB3AC+QrQjBoGp0fLKeUUsEQkAjL+8rgFb5IA1QvBMrFWDYT0BeXqCSo-lnkh4YncgrrUPaBLxanrFNk3pasp9ijI5IOLvDCqK7E1AEkRcNCPT0sChgEIWCYF9cFFcghlF5iKpIClxG8EjN5BetNa-Vwg4wpBIcOVpMLkajrqriSIGqGddXdI1GoiftHkFdsIpXsI4TgPPWDBT5S9z2qedIPpPZPXpKMN9OrdeR4-ATrqNzTd9e6ir2ML2qdqI1cCwZKthRNwcFlhEhkX6TSNe2JGCEh0pS8LIPln1bRgmYSqMZmIErXfs+Rayicp6odXojUqgb9wqS8jX6iXp-b3oFWD-1duY7jp1YXCMWQCphQhYZESmHBCPwzQcQBQEuLNk2Kp34YQdxOWOfanoluzpeRvcHhEu8USzb8vllgg058sDYR4BGncLsNCx8gC9-muff1BX38Ad91Y7ELx2b3wUFWcJfPyfzdUgH1oD1jA9d3TyUHgCkBTZc+Qi3D76dcB83LQf73BEOD+gvA-XloeGH8mkh-cLGvYAY13d-AHOlNAYP95a4Iy9xgbhyPlzw0RqO8qYfHgtH2m5B6Leku1m2olj2lUQ8ceUPbFCV9x4nJrM1RGowN2J7bPFupPBObt+iJWvpPyPJiqj4J7o+UTGPLrwefx67soeOPsEbNwp9k-pNJPr5RYBB6PjSf93pnq7nx4fKifbP4YJj4RHk9DuXpW2T99+-feVLv1xYd94beHOy9yPthb083pQYkBJ03AJLaeNHQ2BYgJ45IMudxbFl5pMU4hqjJXQbSaYf7pkcSvP6MT9+nWmoN8ElVqB0vmX-5aUzRkbSa5YMxnSqtOrFqOyhXzicV7FOleIA5XxGXSwy+10svAM0ZkWry+RLGvAuZfiF1hFqBsiOTXYbd2pWVeBv1X1adl7XQwyeTiZoVPI4Vy7SO1gQBPT9B0xCrGeyXJAjKk4PEbTvfOb1IwQm9U8V+4cjMzwQmJqAq4O3sQmGuI3NfMdMommDwV4LzTJ0VX580tf+nozcvDX8dlAumx5FoZXXnr0D5B+8NVvQ30wpiCh9CqfvaFNr3b1h8lenT3XwF-9SR-LfQfNXtb8N8sCjfpdIsyniQHmlr8Zv9jub20gW-3c5wpPwoIN9-QbeGTW3weB96ZF7evQB3ngU4RO+I8zvWay75Wal83e2Z9P+aU9+4LFlXv0rqOJj++9FrfvRfYsvZfHQJfps0X48TiGex+ZwTiXnEDkDnpW-TxSy+qyhbeQJeYvSXzYwjj24u-YvyX+C3nrvxh23f7WAP3ePYxG+oAJvwP7WjD8R+7xk-d4KPTaT1k+gRQfWeMtTovBC8HIpFGNC86Fj6VQ0sMUiipxIp5BSKKInSR+hWAq-C8NIc4FsBkgRQSKKoUX8LxpI-LVCQTPYBFhiwkUt6g6DhNb9Aje-t8Xv5ckRhN+vOSKbqaXCRR1jYlTgJFNcM7YxLF5C-2wOxFH+chZ-0glQBCEIBgdraSgMK-aFoCqB1AIABs0oH0CGAFVFvUwAgt4zJ+rA4N7QSoGGd6P7MTQHQHobuxClbhS8aQWIdi+O-0ExzIFcSQJJ7OrECEdBDsSRRD3cHh2orAEZDkBfIf-yKAORIAOQDQA+AO1Q1wSAOgD0sDkUmAcAxAKwC+WBPx2xpBdLGekiwFzEoCZBBm3dxPkGgJCAd2NrXVdb-A0BFAlTP-3HQ7AYhyOUFVAJRUgGVePzsBdxS5VjY-AKwBqx8Ai-hAAAuFnFehN9EWmAcJVeShyA9-GQF4xTMEgCUAHAAiT38XFQ-yEBnKWgBg5nKNAEiAz-DQAEAr-IgDbYtAkAKUAmgRYB2x7UIKGaoZ+agFfdeAeUF4wTUas22ZPQblGf8dsKv1vB7wcIKYxqFV6BkAQDRhSsAzhPyipxaQR4Hj9tsbgEWBJqBPyMCD-K4iUBsAJAEGBVAZgAv9NAJQBhogoGS3+5ecTwBS1PyPGFUAgAA)

```js
import {make} from "./dml";

let h1 = (content, attribs) => make("h1", attribs, content);
let button = (content, attribs) => make("button",attribs, content)


h1("Hello")
h1("Styled Hello", {style:"color:red"});

button("click me").onclick = () => alert("Hy dear Dev's");
```



Another examples : [make] (https://flems.io/#0=N4IgtglgJlA2CmIBcB2ALAOhQVgDQgGcBjAJwHtZZkBtABl1oF18AzCBAm0AOwEMxESEBgAWAFzBV8RMtzHw5yECAC+uHv0EgokjACtO02fMVCAbrxIACAPoAjXgXi57j+AGUxvIgGsAvNTM9rBkvn4AhACMLrIk8AQQAF7wAKIIAnIEAYwA3DLcBGJWBGYA5nEsfgA6IOJiAA5IAPRNAO7tGK0AzBhkJKVNAEy0I00lpTW4AAoAkoN+gwBUALK8YiIYsy6FAJ4I1YRie-CT9hRQByzGALSt8BCl4khWduc5pxBesBBElze7CGen143yI7xALhYWRqVzk1wSyWepzsD3kAA8xH84Qj4M9Il1aABScEuOylA4OXzlMgAV24UGuMhCJCREPs5XgFxqlJ81LpDKZfWecSgJPZIvm3O8vPI-MZFCFVgAxCxsLQxWSdhTpXz6fLmc8VSwwcjShyFNqqbK9YKWcqAGwATmwGtKdlgNPglpltJtCrt7s9rr6vG4pS9UqtvoF-sNxvVpoSsDM8BI3t1MYNxXYKZIrp28EoZFa6etmcVRpYLHg8FdrREnwjIB5Gf1ivrjdd7ulpejbYDsGlrrEJFD0ObOrL-eFbt4AAp6IuGBhaNgAJR1kdj3ty20zhxzwbYPBHk-H5frsUig57qwijUepu3wO1058Mxamq3987MUd+Q3rGVj-q+bIFkWJZfkB4EhK0YpEAo8hpjU6JiNcIIPNwzwIXIqZXg84gHKh6HfKUWF3gRYhimIZD1AcuZiD8IIkZhzw0fUGpkGINFgPRqaMUQzEYWRzyvNxZBgGKkAwPsNQMUxsAsSJVjSXAoGQggaKqbJ2gQAQ9SDjszwsJpORWMJ3DXI2YAENhiF4ciHrISAbCwEholOYe9RohupwECIvBQMWFJkGi8IBUFrTPF03lWDFaJWGgsXlLwv7Ig8-mBcF3KheFWVRVY9qxUVCUABzJaOaVsgQYAgrA7gRdlza5ZlkXPIMsUdQl8VWClVUuGIGINflRHwBieVtVY2DFbFSUJXes4Lgwy20BgaBoL5bIoqUAAqQ2NZBIDEa1xbPOVCX4rF03zf0B5Loua0bZxJBQKmIUvambENtwxQUNA2bJg5bLcGQrwfc5YOvXatDeVegUQDS46Q6m1yjlACO2VY51SRA3AQAASvDiPvVDqNE5j11ivUgXo2GBzUzAuOlO1sOnA0NNM-THNhniV2xZEfNohqDxTNz5I1AztPM1YkQw0Lfm1ZQqz9LjBy1Sr5FdVJlilKrNTq7r5GU6cBu4wAMvALCYvrOu49cCBW88xtsqb3D45Rau25ZJCUU7rNbQ8yuGxbVuexr9uW2IeJy8LpRB7j7uPNb4Be6jvsyzHHzcMNkUHLc8B2D4nzXK8YUnQVuNOEU11TbFPXXF1C13Sty72k91xgGQiQly1B1AgU8DV4LcWxQ3sW3fO92t09pcTadViV4PtcJTX9eNxPS33RgbebaSoV+OyIEANRnODJ-ly4OylwfyMkOfB0n2SR81EaJpbWQUA7AAYppBzo-phljKmSsCZMa1wTLz3IK0KwINWijg4lYPQiNGIsB2PKXCchnj6W8PAEug87gKDFAkV6P8xqXE0uFH23AfDPFWi6U4TIaRgG4KQtE5CwHUgKuqKw-8DKpSAWNMyICKEQIKlAmBxZ4FilAWwmovDAHCMEacGR7hqYIQAIJlj-npPhRlFFC0QcgiAqD0EmCjsUNRuDLDRmkZpVROCABC+CazcG0QA-h+izJIMKMYtB+QzFYMsehMsRCBI+E-CAeoZAEiMVkM8fOhdi4+N8L+KwUSYkQDicUMJqT2K0P9qSMQBQjg6VaNAdY0cY5WBEPcJO7U5pCPkR43G3xuC4JkWZCyVl5A2TsrhPMhifEmP8YhPpSEzKuzOgUmwJkr77wltEz4mTyJsDRJyHIksmbPBKjkWe5c-YrxmglJMuZdl9FJmjDGUyhYtinLeSsVYWBnPBl9XGv1vhQF6pVHIDtzFqmJHkqaRIchbgKFcEgYA2KjgKIOeQc5rj-NwFYBFRJNo-KXjYQcYYaS8HDH4dU+RCg8K9PQC00QWBpkGOiooWLSg4vDFkagciTgQhqAoSYMISA1FyCwOkRBYk-XDGIM2oY6W4vgHOMQa5gBiAwDRM2xZUwAGE3CSrXBgAgNI7CFBIHOaIgwNzgrnAgIo8AF4-VpfS+Ia5jGSrlWQBVdwSAqqcGqvwfhLXioINQeAjA1xxDEDSEgP1MWiqtX4eAKheXcH5csqwZtJW4GcNwaVAag0-U0ZVDAelM2pTVQAfjENQUN2LxWMCQJEd1JaxXhgAGS1vgPm3E8wD6errbW7g+asJiCjXygV5kaQ0RRPSNVwATVWC9AAeTsHoeA-KMBCqmOQGiRx6jwEnSwNVuBXHTtnfOoVk7WjcCXbRfiOwABymgCBzngIavoxql4QCsGQFgMDpUwj7csmo7rV3wBfRO6gEBGD1qgsUkgNJ+V9BqOEd1EB62SsA4wCNiGMDDqgGqtcKhe0xv7YJSgiaMCEdvcAW1RRK5eBjX+19X9P2yH9YPdNVgxBzkIxgW92HY2yFsBAMAUSSDMbEEm99hwqETBAD+nYa7-1iHg5iagYg-XUpgX4WVCAwzrByEap9bypVjqXmmMaW5+Vf3YAoTQCGgPqriHwhCc4agYA5SAGwNQNy2rMGQf6tB3V+DKfSYs1ASB+uAL5yKAWkN5nHWQPwQUiBMMQhgUg8A1ipHSIhOzhBSAQHqGIFzOQyAapIL8ItQHcD5dkCEQKfg5xzjXH4AAfMALzfhrjXG4PW+A7WasqDXLgGLcW5CiCS1ADAvB6hrvpEqhssB0NkEw4WJwC9N23rTcGqw7n-oSswyoKo3Bo2cYtWQQKSr3DuETcm4TiMzU6p+DlkAOQLDWAgD53GkUMB9YyLKxLyW0jwA++l1pPgXO4AMwAHxByF4sb3Qj9dlUKn7H2CAOJ2DtXFl6BDpeID7bLLm6C5AgBgOIsADgAniDUwekx8ciAqCp3A+OBDo14AccrOwrBokmCQDA1M4hyHPR-eA2aB78aceCiVEBgc9arjtHjf7B1zj2wKmrJGMD04gIz7gYOah1RqN1jj-aSdneleO1xwAVA5BWz9Rt6XQZ7tuxJqTr6xD5rnK4qVGqSlelxFbmdc7bcqck1Rid8HXG3u3W744KmespqQM7sP+xBMpt13Gwzo5+Vne3dK+XcaICjvN0xlQ46SCleyLgLIUQci2ra7WucWRc07GzQQWvzu1w9ZqNbn336-f24ndK21u6fcYB8PAHY17b0YDU6UdYdXaCG6XkTvv87B-D5vT1xn8-ZUWEfCPnrvxwjqlz7K8FKRvAiDl7R7go6d-qiNeOklOR4AAB5YBj4UBPkQd+j5HzXEW2APrGCMBg7wL-vBjvpEK5pukQDapuimnpqan4CbuXpugQGuNfkvGQOam+jAcUH4NwNQGQLkGmEWgQMwPANQEQX4NniQHNrAAtl6BQSptQNwIpvlvUIjCfuxvNmaswawWqt1qVioPvhgIfsfqfjhssqOhXjPrAfAbakgSgUUGgW8tAeOlkDgXgWbvQUQUmqQUhhQVQTQeQXOAQQwUwZztwewdQZwaYf5DwT1mQFGvekbugVKtZPQYwaVlYSftZL-huLnnYZnlxmwGIO4IWD7veoJsRhXjSJQD+vRoGsGggc7lEUThGrEemkpsbmoE9mvgPkPtelKsDn4NkYvlvppg4UvGam8hAJIc+uQb-mbgLkQB6K9NerNkHrgUhkWngZhrntwInlxsnt4GICZgJkmunsALngManoJoEcEQgJBrqs4EWkwJHphv4T9HoB5twJOrmAbiRpuuEMtgxqtlRLauEFKhMXkLIESjut7gvrkcvqUbquOtpj9EofptgYhiCmFshoFvwUcT9D2msWkgGkcKOjfn4AAFLuCTrnpu6ia+KJrcBJG4AbTboHAU4HBWDs74qPEPpFBkYW7VFRYkEKbghMriZ+BkDwZpigG4Dcom72a4yNE0jNFzitFV5pjT64CVp+AkBO41BVA7bQaUkgYgCClcogAwZUm1o1BYmSkilV7cBHyUk9ZPazZIBKmUl-FxGvF9E-Q0xLoSq6bm41D371BxB1Y1BHzmmDyglSrPwgD35NA2mWmqBAllhnb4qpr-EqR+CrDrCc7Fh6qko9b+kbAeliCLBgBrhNBgB6lMbgYxo54+lhlyqJlEA8FAkQJhHek6lWCpnZm6pSrxm8DarJl5mpmll5GrFn4Tpoj1CyzlmMaplRKtDBm4DFlAkhClCNnGkplrAbDdm9k1miFcYJyipGmjHQHm7hCSr363r1qzliB1YJ5AmEpbi4xp7Tk+liDzlNpIDLmdrdrxmQDn7hG5nNkDnK6bnnknm8Boi7G56pm1QPm3lAlCrLA3lCbjE+lejnpMJ2CpjL4dn5rPlfm3pICRrvmDyrCvnfkTF+D-lgCAULE9aO7Pn3kG6QXxlRK4wjHEbm7ABogHm4BGSRo4WvkXnBo1DXZhgd6-rSaFpICpkRlrgOneTa7QUNCUU-k6k0UjhMz0X+6MWSoqYE7wA2YSoSxs6spikgDqoCVgA1a4BIUoUYYHklkkCVQb6ehblUU-TrafJNb0G+pdoHm-7xk1RkBcQn59l5m7m0D5q0AHl1aRD5qRAHmLCRlzhdDXBoSdm1lWU2WDBNnHH36OXOXLluUeW7kYDYD5pLCRlRyRANyLCiUpVSpeXxmTFDGmZ8Do52WMaypMlNHxDpaCkVXyWFoapaq0WlB2qDiFAzD0hjQbrlUVUuZHygEHk1XaoCVhgNWOBiDNWvRohtU1BNCdWgHxmvSvB8qTnnbAAPYLxm4+lrGK7LUEENgEBF46ww47UqGLkQB5AICWBS4CC0jMZVG05+CS7S6XUiH7aK5PZImUDbpg6yqjYGQ7CGGlaYZCYl71qfVjawA-WF6zZYZAl6Q7S0hEAiAAAi8AZgPwm2vF6arecgsNIghQlgt2byEOrQYO74DwawfQyu95MNEGIgUwmxYgBAU+RNvAyNpQpNHONksFlNcNNNeF9NtA8ZekywoMpmiNyNtm+lMCTNJNNEHOl2JA6i4YA2L2rVm6NQgtKICALmU+8ZNguMnwj5PphlVgxljuuIgJgVg8k62WyyeRU51RWRtxsqxRTeuJBe6BVRmBUWEAYW92HmRlMGyGeBha7RAd5anRSGqhjAkNtZUAo4pQ8OaW4REQ0+mB3AtOwOpWJe2ByJROUQuAjO9Avw6opxhx9l4lncKYKQKYcgZsekJgQFKEWNON-GkwNIPWhtsqcQ5dqQVdwqtdCg9d4AtITgkU3ALdhqtZNIy+wAHuYOBNbGPdHZ7q-OXg-Qg88G-OL6UIg8AAmnVkeGDuljRFTU3b7hGnKv7k7gZvalTfELjglt8IhAABroRF7L1Y231MD30QCITb2MhrjR5X2NHf1yDP28Cv1f0-1-24A530DvbxY0yV2IQ12FD926oN0330iTAiC4BRA9ZwMDYIM93IN11oNHRY1d2TAsA4O0n4OfUwCIPV191tKkOdyXY0j1BYPUN4PQ4fYjb0NENMMD2sNOAUMQhUO4O9Y8PxavCfyx786xYkAEB9BqxkApguYjn7bVI57YFF5i453RC0Nl2qPd1IOCOkNH1w0KBQCcMSOGOd3GMMO90oPMOH3kPGOUNcOSOxa8P2MV0CPONCND3wDsM2M0NSMDa+MmOMMBMsNBOiO4DiNhPePSMfx14k4JZBpKPOSvQsC8BRG3bxlLaG7r2c5xA92I25P5PKXoNw2iPebL0X3O5n0WM1Leqf1ANP2ow3Vv031tOMAQNyC-3qlNPyMP0gNdNPajPANiBDMr46O-Bi7rXhFjHcByNpljjgq8QoTQoECwrwBdDoZWliDsVohIpWnwAnNIrT7a7O5p35EED1p4awDV7N7alFV8NQCOPEOoOuPH0r23a4A0ieN0OfP+MkPpbCOcjFij0QhAsSPrB6SWUhH8oOKqqFWrauBOCeDSgeFziYsh74vYu+DP7qYiCuUjDwYgj8Tpbw3LBmwTpaWKiEteC+DbGpiiLoF2CsGouuprhA7Ms9iBA9b4vE79ViZ24B6O6GNw6pZyBI4zDoZSoaVAkEB2CjpOBzFiA8tGkaP9pCrauK6574vxm0tmxCruBTCGs+kCvEvj7rAmt0tVwWuek1CmtOtTAuZ7GSp1Y2s+Akuv5rhUv8bpYpCMuPY-TnMOlIpEs+BpK02pgvCFjFjEoJAihWAWu5YcEgL3o5C+v+uT5URrgit5tRL1A1arV5l5t2siAOtmxw0+DOuYikoHCfkEAJBhhWB0gas+4Gt8vyVo2ramvmuWtrgwYya1pBvMaut0sMvkB2i+vZjJAqR6S1RiBw3IpylHwXOTCJsi6shHzHM7u8BWyfSbtDuDzOvN6khuAxv5s1trk1K+CNvflG5+DntBEjs3XMY+E+mmv1vOup0h4QDxldvItatot+DRBejXDRCuI1CgeavauetyELw4kQD34nEf496bpVsv7rD35enACTs0szuphzvPALu-bZYs5vKlu9u5Z2BxC8A+AqDFsOBYsst+ulvKXwB1b4r1rvuXswYdYTsIDBvTv0tkdMvsceCceLtmqQA1RrDrvXCbtKk7uAV7ubvbsQjmQnt2hWmCcjvdHWsye3vVvxn1s2AgyvTiEq0iaCUUkMUO7VFehfZwo0XUwws-t5n864zMMAASO0dLNOka++8ZqEvOtn6LP0hj7n8AO0hmUXOrSLYg6i3EPsXL8gNtBF-x-FomQlXeInN6cBJO2FLeIAbe-KhXAeInRR9xo+QhcNj1CubxZGyGjBCR-FxwwpKasqVc6XAlWXEqqdVRd+FhSuACetNQ4I6qTXJ+61ERRTKdZ9U3U7yAuWtqLaqz1brnHxn9ilylL11AkQ-Th3G4-X7uGqg8J6a6-GP1zgVRWGOuvBZto5P08X6XelmBT2cXTH8g8dcgDxueA3GXEAw316YuKaHZI2Y2Vjk27A6G11wHa5-3C1Yxzx0W4Tn2aPgPAmPnjGleGOYrNX-6na+O-nqYQXIXWE+OX18PU26GKaPWInoPQ3g6ZVYuQHJZcP9IBrum4JVnNnOrCR+LRbMnsP42UACP02DxHBXr4QhjMjOwqRq2hthKFA-O3Z6Wr1sAVgDiqT2b-I+7sqqESqxgiEG4SvqTkvDPiPy+bzq2UFtZNg9PfPaL4t+L+a+LtvE2jPaqSA1vsjbviraFd5g+33ueIfBr8XelurcaBp5A9QOXKzghfQR+zX610Btq+XjnErZPX+Hzc4sfzgJu6eG4WbOflXDtpPr6bXqHJf26uA2ROlZVKauOF3RfT3WbILxfaPN66gagUJMJcJTMCJzPmG8fXGLBYgt3Kf0BxV3AgXwXZs6JEIiftE8-U-+pvP0vjPW-wAreNf8pznTG9axHNQobc76BIfMvUAmMJmijRQoso4AgSExQIgtI02ibz6x-d6Txj6dAvXzTA4EgMIKX3nv3t6N8y+lBLbECRCIfZ5WofAdrF2x4LpB4ePJAZmVrKMcwS5RNEmIDByRAXaS8JtiCnvzcAQUWHL0LVAj7cgJSBPJ3vGW4Daoy2mIUApgSbAzcUOridUNwAw45AlSn+C5piRm7mk8KDvIEiIEiD608ytAqSrUEiCTBFi2-apCFXPIoCVIzHBQSIEGDKCOyqgkQF0FkGMZ5B6WIwfoICrvdqkaAEwatjME1ARAaASwYYOwB2CfoDg2oNgBcHxkRA9odwVoLoG1B7QPgqQUWXFqeCqckwKwZozYHwUfSngjhhCBUH81ao4YXYq+08E8YxMQmCtoTwKxFZQ8IITEPHkspecAhng7BDC1GIxD+0AOb7pj08G8BJgqdKVHkNWyU5qcj3HCnEAqHaD0sNpSwUlz5wYYZqEAMwH0KCHowzAoQ2stAHGEZCl4riTwdMJcHtDXiazJpBEhaS4xcE7oUIIDghC9F1y5qVpPAHhrjDyC0w2nNwDOHTCrh4wzTIFWmEBDu2KLVVC8PPKqDiECwjQSDzA4Gt5hEwr4fGWMYkBDIrwgER8IWEClZK6SJZFkkJxrBxhtYYCOUhED5IDENSdOJnHkoS4oRrqIEQblUFZcaIZ5eIXIP6HchB0ZI2YdYJICkjZAW5NOpQQ9p+BGR5IygpnXywk51hz6TnJYEQh481m8IgVAcCRGMQ1GEIAgIGQySyADgVZCgBz0mAyjfkfgbyMBRlHsR1RD5aHjKOxFJxKSazMpFAHWDkETmKo1DOclTCEx0YxMEcHyjnAQAhgbFaSpaNBQEBNmREHZns3hSIpkU-yPtnwSBKoRBR84ZZvXyeyeDQxTHZQYwNeLwZ8cklT-tNjejQ9x2TojAK3wjy05sq9ZUMFAFLIIBEuGIMMQ0MfQqZDMZYiMfGOKCDxBumXDnpD3UBQJbINQJQdKPdxIBZSeyJIFsheDWiSAPcAxGCNETPAGwMAQhMu0sgGingcUa6NrnxFpcweEPJ0QDXxyyA4aE5cgr0GoRD52GO4oKPjHiBJBaCI2QdIsmSC05zxNEHEEdx6ESDE6HAngTiX4G1ghBgbXfga1z50UnOwlB3ExSaydoo4n2EIG0mS5zhd8rzIEuILkCwByRXoZ8WUSKC8DBB85QQVh1gn49cAuA1QYOEArPMaxP3PwJ4PwmFh9BKadYT+PFad5JW+aOnrvzv6Sphh0XZvEgAYlS8mJ+RfHOk1diJxCINQBcRCB4lXdXYIcZOEJNzFAl9hvgVCOWPa5VC1UfInYW0guETCoe6qdJiaLNEajueUNbgDP1mI+55JqHSoWBzjF8i2ejY7LmuKA4fNLaAqastukTHXdNWnIEamQmh4o9ayljXwKXBMnHVSMopYUrpidF+BY+NQGYOeimAABVHaHGIUr+4bwj7HwKXBm5kTCJoxbvhYTCmeCopsU+KckObzn010yUudKlNCgzdc8Ik44OTQ1j8SJJHFYSWszEmRwDgkkonvjl8mD4LgXk-mgZMHQlj8KcBbrJoLaTQIdaA0sQENINwqBqeZsIaZoiSzCjzSXELiP7hvGXivQ61aoiUO2o5A7qF1WXDtJlRrNZxycQYF1GiFnTakhEfrqQAoCwAAut0w9pEhkpqBpquAeaUZP5QrTl060tdPZKtpXE-ASzaVBv2T6SptqdJSrsDOqHFkvpK-H6WID+lrTf0rkn3A5OWRI4AAaiCE9Cgyz8eA01CQJQmviMO21XoHDNVF4c38H421CVwRYyjaIjk4wnKkMzm8MEruEqiyTKpSpVeBlX2lDL0hUzHJGM-lO5JapsIE8J1RwAQG4xTShpwAdcuBnmKekTc0qL0BsVxhstdUwAGTg2PB5IAy+GUw2XYGNmZEppZsi2Qk2-rTYAA6uiKQCBBJGDiJjjQl3xqAQ8TMsfKWULBZ03qPsmTrdSJGwik0qGNwGbIq4hTZMlMjKQ8OBHhzTZK4lnoITtlQBHZpokQLjljkiyMpxo9ETqJvRpzCwGc9ER3yvY+zcYM-cKf3xqDVzB0yggXDPyjnhy2ApczOesBO7AYq8VcqaQXKzlFz+c7ch2eXNO6VzKZEvW-v7z7kz8esCHHtqqlTlBQ3ZSWHwPWlwkdlKZDcwTD7IylbyRZMnFQEKjWz4zUa++bef3Nb4qAq4p8x8KOlnmDosxZ8lTFHWsE7zVKQFIic8QKIqTzhCwsAuVRP7VFXEf8tSQbnqLTz7eCec3LlKpEgAd5LQ4qb+gOBIlkKqYdnBAKYnI8TyBAUoAbzgqLVMeRnZSmmB+ETCw5KEQzEpHIg4Rxkoo5ZMZAgBrJRQmyHmIVFhh7I+4y8HhSVABinJb4ZMO0ZjGxi3I+w9yR5I8meRQxXkP0JRh8i+SpR0UjsIFAClohOxgUHozZlCjHC+iUUhIJFPoo3DaSMRVgI8HLFyxWTweTY36reiUxRYCAnw2sW8PA6uouRHIq3IcMKTFJjg6qTcaCH8DVZasDWDnJE2UqV5z8k-QFgPEQ6qougeDWOnj0MI9Y-2IgBtpazFz6w8FBCoHH4VrKOAfABC5ke7QLxvs6Ww7ZSg4tDlyUYZxECyGMiBgnxZkpcB0iYvahqgmpG4KxauLIC5DlCt1JxZZIJESpZsOEmkUyJqDb14gyIIpCTj8UxoAlVWGrPVmAD5Ywlkec1DjUoz-oaM73etJEt4IeKagvOGZT4oQDzKgGYQIJSsrWW-ZjGR3TZRRgQg7Kz89abPFEoXnvDXU8S3rIktlbMZRlqS9Jb9SyX4LKp8lEvJZ1DAWACAgweGqFVeLwAJpgkbgDCrhU8FGics2wCirRXw1lZVxB0WrN0yO5ZUAUAgIemPRJ8z06WZGgkHdAso1wB9dfHpHB77AoJB5OArStZW4hPZMPLlfSsLSUycVjgEifAuFUEBoh-9H2eKtrlJYPOIAcVZKoPkyj+UbCaVdCscDoCxAnMuSTUEGDWMIVPs3CpkGLw+zy4+KY+UvBMVWt7KQqjVTKJMU3yrV6Ih+XatRWaqTFr8k+edJtVFU3VMKwbJRCdVFAfVxK-1ZqvOmvzAKhsUWOsEVzSrBoqGeADGoHJdYdUZACPtKgTVog4SGazbCoEaJJZdUWaoVYmsLWWBjxqeJcD7JMXKrA1ScTDFXBrptIdo-udKkmgpCDhfALQ7IMJjQUoVa+MCIPAEEYJoVS1Oas4Z3JEA05s1uawfJ4HDyLFx113XuqpMcAn4E8VcEzJQAXUIBRKNQECJ61nWuR6o7uV+bfPLiiVk6PsmwOat3lO5Z15cBxE5Eg4YAugXlOtaqo1QHRzezIcUYtCnh0Igxj6g6Bui3piBH6M65deXDA1Vxt6EeA8tBp-X+hvRY4LnIhG1wnzL14tG9eXHzy7DilJakWV+ujW4xY1J+MdcRsTVd0YaBuT9YmrOG0bRulGlVYmvTWZrWOZwwjTKmXU0ayAdG2dYxv43Ma-iUxKciyJGnSoq4WMq4sLJ2qF5gAJ6pALnToWfRc6oqQEHzRY0JZE1pG49Kmp6y0Ax2lMjTZbkfVM1Ns9GnNR6N9HnkrNBOLiMljk0jYwwCAFYFeVmBNBIgpULktKvsh8lZ1cQVPK1iGC4ArIoW5jYhqo05qgtzGJcMxvs1xBCgfQTbFKqFX+bBV0W8SlMRC2DAk04WvLZFsC3GSIxtObTSeqBrLqT1ylR9SODzVdYbAsW4pQUQ1nABpN1MuTenUU3sBYAym6IKppZDqbXNuILTQwGM0izTND66DRZpq3LqbNTmuzYFsc1wofZpm9zQGU83ebfN6W-pJltY0xbjJuWsLc6MK1laot+27LXFuWgJbityW3oWxL827bitOW7gKFtwQnam+VRc7TpoO1ibk0ZWutRVtrTHqetXWIgBAEKx7rStT2Vre1scmdaxc3WygH1te7Lq9N5G2bVlssAZkIxoW+gLMANSA6etlWrLdVu01fr2N+amwODsh3o9RukmnjSLJPU7iT1YOXOrOr40Cbl12OrcnjumBzBytxO4HVVtB2YZGiJAbmpkHjWUzjVdNbICoANK01diRq2mjKJYLWEiKJFMijriiSg0uNidVrT7OZ3DyetbO6ILOvR0Ga61NgXXXsAI35EjdQukHfhnJ1sa6tHGm3RQDt1tJiZE6BIozI+oy7Vd6qatlPiI0XbOdJBT+qcyj39MVepMpjJB3IFa9aZVAz-IJt2G0aSS-TGPfJjj1bYlGVsfXR2ta1G4QUlM43WnMoBm6CBgekWbLp2oW7k1ZGq3bhpfRiAuN6YivU7pF0u77NlOhrYXo7327w9P25XMY1o1LEc9HZO+vHqNTLVEJd+DDnewbjv5P8S1SwMpgQy+oMAaIA9j6i6o56YyeWp7Nvrj376Lmp3DACryGDl6stAARxxQx1kRRAJVEGhTCT7f8u+mfTvp2CfbMMs6x-YFFHACQ39JAD-fxqLQ77TmUBuPT-sP3f6oDCBlXioDknQ6GdcO62gjvUCmakA9AT-iyC-D+bJgDEbseAGgBqRFx-emba7us2GZ1EpEF3JTIIP2bUI2rM4SpkpkMRWDPopzedkS3LajSJm4beto2CbafNtBqvbABmmCZFwkhpLdLXzWwhhpYcuDs2C7VeKnsNQTRKrlgBHre9p68PK0Kq3GAI0DpTdq9NihWlgO6sQfEWXE1PZ6AaYWHWUjXaeFpUgkBbJFSFUQ7C1zIygrsndl5A3AMsJACQGoADakMu+OtU1tK2p0AjjHNecEYWyDAwjER-zVEacPUBTNSGNAHgB9mxHxN8RrbDYFsNfyHD+KFraNIICuHmu7tTw2am8MizqdvhqHeJoSNBGGjoR8I5EaTrW7Cj-24o4EaSNdHUjPRjI30fCM5G-AeR-oyVqKPi5nuKrMoL7q9B-c5VKWX7IhHPSnZxgFQGGeMFyy556uS+V3PNyaYNZ+c3SjnjscSJvVWhxhKJdH1VQh5ne1g8YJihH2cCseyTAbPFzx63HHB3ERoC0HaCtBOgPQPoAMGGCjBDjslM4UcZ9InHqyafEgBnw3UrKrj9YlcTcdOy68m+RaUdbwWeOupXjIHTKcRkyHwKoiFknotmh6RZBShQJCgIsLJmeCKAtJn0qs2siMnt0hTdOVXHVnVGLaHWpmaMT0wK0oA1ssOSPPv7YmhuZBxcekVFVBDZTVcShgKflOZdaxqzVCAwcwgHBfk0QsStZi7USomgVgJoKUBhlylI8WC-3hFJAAIBJTkwZ01YzNkGDI88ZS5JAYcPi4PaJeaBtkFxJRZ1QZAZfdWzyxYc2tsqpzfXKmmTAZU-uMgz6aoNP51dJ+JAloUDoyjsxJBPAkgFzMvyw6Red1CQHgwqqUpnIJOpHgrMYB8qXoLyXWc3EBQwwtBDcOOkZwZSXmuAX4N2bDobheA9pqAT1lwmO8LU8ZW0Zkjxn3yBe5RH4zDi1V49EcF6czG0NtS3oUOBJbvCt2z0JFVm3UzkALJgTPzHwb8zRi4s5BTmyAMwHpKsYXO8MZWWxzIEjjRwi8NzyBZCUxnQKUmlhyGUkhXgSxVmoAx53oql2vMzndKGg19tKwwH-KVzb5pSRIS3NAC7aHxAC5unxzZil6x5rqcBb6PAdwL8MG81LNZPKZYLKM+C6+bXMbgieOBHfYeYuBQSFdBAHYDGhATR1JAMyQeM12h3VE0wvAVoLwE+AgIeLtldQG-0-5QAyDAAcRSCFTcANSQKKmFsiH8QAOqxCH5X9w1AyDX1UEMiNkBNADAsgPIAFEUaDw-AcUr+NcFKja5usCRDnBmv0o-lNUbkJAIJeEtFAOcxlyJbgC5weVnAXOVI6nS5xdB2JWGdYOInGlWAr+96AAAZBcdoUwWdn0HCDZI1giMZ4AABJxibuDKwQBUBxXVBY0OdK71YtJkNBTzOcI4DYsZlglwAWvPXkbxSomVAQBTBuBOGuIPLIlk9Ip35x1QkLm6Hkjt1pm7T9uuQI0uJVcu7yBRJAc3bNby2ypQrehCopukas5otKeaW9J+YAH4lULxEnAqSVFxTX8m14-y2dcsAn7Zr8SlQFmxG6T9fBwJmS4PG42lLp6YbJACdLUBJaokA8T60TOlRYY+R1YNw4mmACSWP4sl+S1gyGwqXjZNQDS3CF-Q6XNcINJiAKiMtKNKBW48y5iCss2W7LClGpGeRWWnFZUTlyK8mw14IAx8ZAeqjUGxaBpMYRzPK0zajYWHWbiMIaRVzWKDqOcUncs7Wn5tht0s26s1CDCKBXB+QSq6K7FaLKc2CA3NvkbKh8tdYibCgUSg1g-Tvc+bU13604HrShL4g+tunWVt4IkBHrDQZ62IHUEOH+LcBAW-9fe6K5vrxtq4riC+tqAos0Vx+nSwC7Anjxj++IFRF8K7imOn8HGvIC3FtnCZzt7DnODQA-pKZ4dnYIzZE4wmk7IsyO4jHjva39sutn6+7a-wkAdgmBTEMP1hJc5XUty-SO7aVtG3a7A8QjQWuU62VU0et922yQ7sDwhpdtrDFm2Ftzt0sx4wKKna8DyArA7qCw8naGxj3ks-1MrONnSxyWFLgmKCe4SriB3PQhQZ6cpdIbqIiACEbHLJT0vo3lkmN2QLkuu4joesFtlVvfu+DyBrbKOelW+fn5lbMCzhwu39c9t8i6g9Qa25KiPgAByfNPfr8DuAUgZsFIEqh2gS0BAVgL+PjEnTLBigD9xsKUaGoJt7ZAXFIPjBSBMZ-ck9uUl4HpU1BgHVmN2wPFjtPU5z8hCNBiBTwjEy+NQBs7ljzsCoC7VDg20Le7vV2+7wOSyug6fuDwAA0vcWh3+nIscBb+04CdtPVAbpuXPP-cAevSwHt1MDlYEWAgJyAYAbTuYbNgzBlgMwOBx2MoeN2nANDhXHQ4nSFEHaORU4x33BC82-xXeGuybfrTuPO7-2sXJQS9tCPH78AZ+0WNNu+O-qmBccK6ZkfcOPbANk3Kbgrz1pkTTeO9mHrLt2ObcDj69JRPHDAQakcQOUgntvwP5VMqei5sIKnwVnlSspAsbaZLzKlYDIDg4MA6PiHXf8jAEB+Q-HPVInrL1tR+A5cVaOdHEkfR0gT4fbSiZumDh1+lccB4n8sjkTvM5idp4wnENaBpZQ+RfyGd4JFxYCJeFhzZUMnNYENyvauIhUukm6ZRFVJ+BznD5K41dxMW33osMImpQeqdlG1YY1SF6ZiNm5F4shCZiEP102cgGTneWEqU2GhThhJgPIq7gwvlE1AJRKI6FxHMsfOBMDsm3pYJiWr8QFIfWkvJ-1aCEw2zeLyF3KoVNhzTyeB3AC+QrQjBoGp0fLKeUUsEQkAjL+8rgFb5IA1QvBMrFWDYT0BeXqCSo-lnkh4YncgrrUPaBLxanrFNk3pasp9ijI5IOLvDCqK7E1AEkRcNCPT0sChgEIWCYF9cFFcghlF5iKpIClxG8EjN5BetNa-Vwg4wpBIcOVpMLkajrqriSIGqGddXdI1GoiftHkFdsIpXsI4TgPPWDBT5S9z2qedIPpPZPXpKMN9OrdeR4-ATrqNzTd9e6ir2ML2qdqI1cCwZKthRNwcFlhEhkX6TSNe2JGCEh0pS8LIPln1bRgmYSqMZmIErXfs+Rayicp6odXojUqgb9wqS8jX6iXp-b3oFWD-1duY7jp1YXCMWQCphQhYZESmHBCPwzQcQBQEuLNk2Kp34YQdxOWOfanoluzpeRvcHhEu8USzb8vllgg058sDYR4BGncLsNCx8gC9-muff1BX38Ad91Y7ELx2b3wUFWcJfPyfzdUgH1oD1jA9d3TyUHgCkBTZc+Qi3D76dcB83LQf73BEOD+gvA-XloeGH8mkh-cLGvYAY13d-AHOlNAYP95a4Iy9xgbhyPlzw0RqO8qYfHgtH2m5B6Leku1m2olj2lUQ8ceUPbFCV9x4nJrM1RGowN2J7bPFupPBObt+iJWvpPyPJiqj4J7o+UTGPLrwefx67soeOPsEbNwp9k-pNJPr5RYBB6PjSf93pnq7nx4fKifbP4YJj4RHk9DuXpW2T99+-feVLv1xYd94beHOy9yPthb083pQYkBJ03AJLaeNHQ2BYgJ45IMudxbFl5pMU4hqjJXQbSaYf7pkcSvP6MT9+nWmoN8ElVqB0vmX-5aUzRkbSa5YMxnSqtOrFqOyhXzicV7FOleIA5XxGXSwy+10svAM0ZkWry+RLGvAuZfiF1hFqBsiOTXYbd2pWVeBv1X1adl7XQwyeTiZoVPI4Vy7SO1gQBPT9B0xCrGeyXJAjKk4PEbTvfOb1IwQm9U8V+4cjMzwQmJqAq4O3sQmGuI3NfMdMommDwV4LzTJ0VX580tf+nozcvDX8dlAumx5FoZXXnr0D5B+8NVvQ30wpiCh9CqfvaFNr3b1h8lenT3XwF-9SR-LfQfNXtb8N8sCjfpdIsyniQHmlr8Zv9jub20gW-3c5wpPwoIN9-QbeGTW3weB96ZF7evQB3ngU4RO+I8zvWay75Wal83e2Z9P+aU9+4LFlXv0rqOJj++9FrfvRfYsvZfHQJfps0X48TiGex+ZwTiXnEDkDnpW-TxSy+qyhbeQJeYvSXzYwjj24u-YvyX+C3nrvxh23f7WAP3ePYxG+oAJvwP7WjD8R+7xk-d4KPTaT1k+gRQfWeMtTovBC8HIpFGNC86Fj6VQ0sMUiipxIp5BSKKInSR+hWAq-C8NIc4FsBkgRQSKKoUX8LxpI-LVCQTPYBFhiwkUt6g6DhNb9Aje-t8Xv5ckRhN+vOSKbqaXCRR1jYlTgJFNcM7YxLF5C-2wOxFH+chZ-0glQBCEIBgdraSgMK-aFoCqB1AIABs0oH0CGAFVFvUwAgt4zJ+rA4N7QSoGGd6P7MTQHQHobuxCldsPktHhksv4KwElR-cKfzv9BMcyBXEkCZ-x2wq-XPGL4IApFEPdweGAPqxAhI0jACoAobh2orAEZDkBfIXoj-8WgXqFQZWaDi3e4JVW4SXhphYh3i4gA9LFndCA5Qi846AwAK-gMcLznYdqAooA5Eq-PwDwD2A9LA5FuAnbCaBtHGQDpB3+GQEf82kOQC0dJqf-2sFzeKQITYasWAMr9x0VvmId9nEAFoAd2NrXVddIdxCMg-5JUzgCXgNP3SwmSFzF3FLlWNgED1A+rFb57vEgCGliHaDxcD6fbmy6oLAo5W0A50WwP8UfgBwJAC1wSezqw75T0FcD3AgQM8Cz5GIMMw1wGDh2xtsBPxUD+kctjgC--P-z38ZA+oFMwSAJQAcACJPfxcVD-IQEiBHQCtGuBnKU-zUANAAQCv8iANtjyCIApQHECdse1CChmqGfmoBX3XgHlBeME1GrNtmT0G5QNAqv1vB7wCwOIhXoGQBANGFKwDOE-KKnFpBHgePzSDFgRQJ2wygg-yuIlAbACQBBgVQGYAL-TQCUAYaIKBkt-uXnE8AUtT8jxhVAIAA)

```js
import {make} from "./dml";

function createGF (type, content, attribs) {
  return (content, attribs) => make(type, attribs, content);
}

// See DML doc to see what is already implemented
let div = createGF("div");
let span = createGF("span");
let button  = createGF("button");

/* counter component */
function Counter () {
  let value = div("0", {style:"display:inline"});
  button("inc").onclick = () =>value.innerText = Number(value.innerText)+1
  button("dec").onclick = () => value.innerText = Number(value.innerText)-1
}

Counter();
 

```

**make** allows to create what Eckehard calls **generator functions**. Those are functions that generate new UI elements or group of elements. 

If the above examle **Counter** is generator function, a **component** in traditional term.
You can see how easy it is to update the counter value.
No hooks, no dynamic variables, only direct DOM manipulations.

Working like this may seem a little strange at first sight, but I can assure you, it's very productive and addictive.

You can see how all is 'self-contained', nothing 'leaks' outside of the component.
We can create an event handler, whithout the need to attach it the window.

Here is the equivalent using template string [template](https://flems.io/#0=N4IgZglgNgpgziAXAbVAOwIYFsZJAOgAsAXLKEAGhAGMB7NYmBvEAXwvW10QICsEqdBk2J4A7hDQATWmPyTqAAgC8isAFc01YhHqKAFAEpFwADppFi2MUV1NjAE4qZ1dTgb4A5jGIBRWO7EAEIAngCSUvqmNLT2MA7RhgDc5pZ2wg7yaGjxACowAB42qgAOGA5wMGEM+umOWTkO+UXGANSKAIyK5qzm5taKAMKxGSpqmtq6FkYmqVY+ioxYJVAYjGMABnOWADyEHQB8w3FOiIo7cGUWEFLK0XXx0QcADDsA9JcYaAfb5wBG6mIxD09GoUAg1AA1ncQAojE8wgA5QbvAFA+gHLYWbrYhw+dQOCxLFZrGA9PrSWiuQL4P60KQhBrxAASuQAsgAZMb6Y4ZIyGSggSqwSb0BA8DoAZkQkoA7ABaZ6IZ5sDggTA4PD4ahwAQxYTMHhsAC6rCAA):

```js
window.inc = function () {
  let counter =document.getElementById("counter");
  counter.innerText = parseInt(counter.innerText) + 1 
}

let Counter = function () {
  let template = `
    <h1>Counter : <span id="counter">0</span>
    <button onclick="inc()">INC</button>`
  
  return template
}

document.body.innerHTML = (Counter())
```
You can see here, that we must make 'inc()' global.
And we must get a reference to the counter through it's 'id' which is also global.
Furthermore, template strings are not Javascript, so not debuggable. 

In fact, the most remarkable difference is that in first case, **Counter** returns a real UI element that you can reuse.
In the last case, **Counter** returns just a string.

And there resides the **secret sauce** :-)
 
But of course, you can make use of framework like **Preact**, if you really want to use template strings and components. 
But that is not the subject of this post :-).

You have now a good idea of the 'make' function, and you can easily imagine how the TodoList app will be implemented.

**make** is a powerfull function, I let you play with it.

Be prepared for the next part.

Thank you